实验1inputWord.jsp请输入单词(用空格分隔):showDictionary.jspTreeSetdictionary=newTreeSet();publicvoidaddWord(Strings){Stringwor" />
文档库 最新最全的文档下载
当前位置:文档库 › JSP程序设计上机实验与综合实训 部分实验代码

JSP程序设计上机实验与综合实训 部分实验代码

JSP程序设计上机实验与综合实训  部分实验代码
JSP程序设计上机实验与综合实训  部分实验代码

实验

biao.jsp

<%@ page contentType="text/html;charset=GB2312"%>

乘法表

<%

for(int j=1;j<=9;j++)

{

for(int i=1;i<=j;i++)

{

int n=i*j;

out.print(i+"×"+j+"="+n+" ");

}

out.print("
");

}

%>

实验1

inputWord.jsp

<%@ page contentType="text/html;charset=GB2312"%>

请输入单词(用空格分隔):

showDictionary.jsp

<%@ page contentType="text/html;charset=GB2312"%>

<%@ page import="java.util.*"%>

<%!

TreeSetdictionary=new TreeSet();

public void addWord(String s)

{

String word[] = s.split(" ");

for(int i=0;i

{

dictionary.add(word[i]);

}

}

%>

<%

String str = request.getParameter("word");

addWord(str);

Iteratorte=dictionary.iterator();

while(te.hasNext())

{

String word = te.next();

out.print(" "+word);

}

%>

leader.txt

<%@ page contentType="text/html;charset=GB2312"%> 链接到页面1

链接到页面2

链接到页面3

first.jsp

<%@ page contentType="text/html;charset=GB2312"%>

这是页面1

<%@ include file="leader.txt" %>

second.jsp

<%@ page contentType="text/html;charset=GB2312"%>

这是页面2

<%@ include file="leader.txt" %>

third.jsp

<%@ page contentType="text/html;charset=GB2312"%>

这是页面3

<%@ include file="leader.txt" %>

giveFileName.jsp

<%@ page contentType="text/html;charset=GB2312"%>

读取名字是ok.txt的文件:

readFile.jsp

<%@ page contentType="text/html;charset=GB2312"%>

<%@ page import="java.io.*"%>

This is readFile.jsp.

<%

String s= request.getParameter("file");

File f=new File(s);

if(f.exists())

{

out.println("
文件"+s+"的内容:");

FileReader in=new FileReader(f);

BufferedReader bIn=new BufferedReader(in);

String line=null;

while((line=bIn.readLine())!=null)

{

out.println("
"+line);

}

}

else

{

%>

<%

}

error.jsp

<%@ page contentType="text/html;charset=GB2312"%>

This is error.jsp.

<%

String s= request.getParameter("mess");

out.println("
本页面得到的信息:"+s);

%>

实验1

giveMess.jsp

<%@ page contentType="text/html;charset=GB2312"%> <%@ taglib tagdir="/WEB-INF/tags" prefix="ok"%>

表格每行重复显示信息

南非世界杯

冠军是西班牙

亚军是荷兰

handleMess.tag

giveYearMonth.jsp

<%@ page contentType="text/html;charset=GB2312"%>

<%@ taglib tagdir="/WEB-INF/tags" prefix="rili"%>

调用Tag文件来显示日历.

ShowCalendar.tag

<%@ tag pageEncoding="GB2312" %>

<%@ tag import="java.util. *" %>

<%@ attribute name="year" required="true" %>

<%@ attribute name="month" required="true" %>

<%

int y=1999,m=1;

String [] day=new String[42];

try

{

y=Integer.parseInt(year);

m=Integer.parseInt(month);

Calendar rili=Calendar.getInstance();

rili.set(y,m-1,1);//将日历翻到year年month月1日,注意0表示一月……11表示十二月

int 星期几=rili.get(Calendar.DAY_OF_WEEK)-1;

int dayAmount=0;

if(m==1||m==5||m==7||m==8||m==10||m==12)

dayAmount=31;

if(m==4||m==6||m==9||m==11)

dayAmount=30;

if(m==2)

if(((y%4==0)&&(y%100!=0))||(y%400==0))

dayAmount=29;

else

dayAmount=28;

for(int i=0;i<星期几;i++)

day[i]="--";

for(int i=星期几,n=1;i<星期几+dayAmount;i++)

{

day[i]=String.valueOf(n);

n++;

}

for(int i=星期几+dayAmount;i<42;i++)

day[i]="--";

}

catch(Exception exp)

{

out.print("年份或月份不合理");

}

%>

<%=year %>年<%=month %>月的日历:

<% for(int n=0;n

%>

<% for(int i=n;i<7+n;i++){

%>

<% }

%>

<% }

%>

星期日星期一星期二星期三星期四星期五星期六
<%=day[i] %>

实验3

giveString.jsp

<%@ page contentType="text/html;charset=GB2312"%>

<%@ taglib tagdir="/WEB-INF/tags" prefix="words"%>

<% String s="South Africa World Cup(Espana is champion)";

%>

字符串:

<%=s%>

中的全部单词:

<%

for(int i=0;i< wordList.size();i++)

{

out.print("
"+wordList.get(i));

}

%>

GetWord.tag

<%@ tag import="java.util. *" %>

<%@ attribute name="str" required="true" %>

<%@ variable name-given="wordList" variable-class="java.util.ArrayList"

scope="AT_END" %>

<%

ArrayListlist=new ArrayList();

String regex="[\\s\\d\\p{Punct}]+";

String words[]=str.split(regex);

for(int i=0;i

list.add(words[i]);

}

jspContext.setAttribute("wordList",list);

%>

第4章

实验1

inputNumber.jsp

<%@ page contentType="text/html;charset=GB2312"%>

输入运算数、选择运算符号:


Computer.tag

<%@ tag pageEncoding="GB2312" %>

<%@ attribute name="numberA" required="true" %>

<%@ attribute name="numberB" required="true" %>

<%@ attribute name="operator" required="true" %>

<%@ variable name-given="result" scope="AT_END" %>

<% try

{

double a=Double.parseDouble(numberA);

double b=Double.parseDouble(numberB);

double r=0;

if(operator.equals("+"))

{

r=a+b;

}

else if(operator.equals("-"))

{

r=a-b;

}

else if(operator.equals("*"))

{

r=a*b;

}

else if(operator.equals("/"))

{

r=a/b;

}

jspContext.setAttribute("result",String.valueOf(r)); }

catch(Exception e){

jspContext.setAttribute("result","发生异常:"+e); }

%>

实验2

inputRadius.jsp

<%@ page contentType="text/html; charset=GB2312" %>

输入圆的半径:

drawCircle.jsp

<%@ page contentType="text/html; charset=GB2312" %>

<%@ page import="java.awt.*" %>

<%@ page import="java.io.*" %>

<%@ page import="java.awt.image.*" %>

<%@ page import="java.awt.geom.*" %>

<%@ page import="com.sun.image.codec.jpeg.*" %>

<%

String R=request.getParameter("radius");

out.print(R);

try

{

double number=Double.parseDouble(R);

if(number <=0 || number >100)

{

response.setContentType("text/plain;charset=GB2312");

out.println(number + "作为圆的半径不合理");

}

else if(number>0 && number<=100)

{

response.setContentType("image/jpeg");

int width =100,height =100;

BufferedImage image =new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

Graphics g = image.getGraphics();

g.setColor(Color.white);

g.fillRect(0,0,width,height);

Graphics2D g_2d = (Graphics2D)g;

Ellipse2D circle = new Ellipse2D.Double(0,0,number,number);

g_2d.setColor(Color.blue);

g_2d.fill(circle);

g.dispose();

OutputStream outClient = response.getOutputStream();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outClient);

encoder.encode(image);

}

}

catch(Exception e)

{

response.sendRedirect("inputRadius.jsp");

}

%>

choiceBook.jsp

<%@page contentType="text/html; charset=GB2312" %>

选择要购买的图书

Java面向对象设计(34元)

JSP程序设计(34元)

XML程序设计(34元)

orderForm.jsp

<%@page contentType="text/html;charset=GBK" %>

<%@page import="java.util.*" %>

<%

String book = request.getParameter("bookMess");

if(book != null){

StringTokenizer fenxi = new StringTokenizer(book,"@");

String bookName = fenxi.nextToken();

String bookISBN = fenxi.nextToken();

session.setAttribute(bookISBN,book);

%>

图书订单

<%

Enumeration keys = session.getAttributeNames();

while(keys.hasMoreElements()){

String key = (String)keys.nextElement();

book = (String)session.getAttribute(key);

if(book != null){

StringTokenizer fenxi = new StringTokenizer(book,"@");

byte X[]= ((String)fenxi.nextToken()).getBytes("ISO-8859-1");

String bookName = new String(X);

byte S[]= ((String)fenxi.nextToken()).getBytes("ISO-8859-1");

String isbn = new String(S);

byte P[]= ((String)fenxi.nextToken()).getBytes("ISO-8859-1");

String price = new String(P);

%>

<%

}

}

%>

<%= bookName %><%= isbn %><%= price %>

第5章

实验1

giveContent.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ taglib tagdir="/WEB-INF/tags" prefix="file"%>

我要写文件

我要读文件

请选择一个目录:


输入保存文件的名字:


输入文件的内容:


writeContent.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ taglib tagdir="/WEB-INF/tags" prefix="file"%>

<%

String fileDir=request.getParameter("fileDir");

String fileName=request.getParameter("fileName");

String fileContent=request.getParameter("fileContent");

byte c[]=fileContent.getBytes("iso-8859-1");

fileContent=new String(c);

%>

fileContent="<%=fileContent%>" />

我要读文件

lookContent.jsp

<%@ page contentType="text/html;charset=GB2312" %>

我要写文件

我要读文件

输入文件的路径(如:d:/1000):


输入文件的名字(如:Hello.java):

我要写文件

readContent.jsp

<%@ page contentType="text/html;charset=GB2312" %>

我要写文件

我要读文件

输入文件的路径(如:d:/1000):


输入文件的名字(如:Hello.java):

WriteTag.tag

<%@ tag pageEncoding="GB2312" %>

<%@ tag import="java.io.*" %>

<%@ attribute name="fileContent" required="true" %>

<%@ attribute name="fileDir" required="true" %>

<%@ attribute name="fileName" required="true" %>

<%

File f=new File(fileDir,fileName);

try{

FileOutputStream output=new FileOutputStream(f); byte bb[]=fileContent.getBytes();

output.write(bb,0,bb.length);

output.close();

out.println("文件写入成功!");

out.println("
文件所在目录:"+fileDir);

out.println("
文件的名字:"+fileName);

}

catch(IOException e)

{

out.println("文件写入失败"+e);

}

%>

ReadTag.tag

<%@ tag pageEncoding="GB2312" %>

<%@ tag import="java.io.*" %>

<%@ attribute name="fileDir" required="true" %>

<%@ attribute name="fileName" required="true" %>

<%

File dir=new File(fileDir);

File f=new File(dir,fileName);

try

{

FileInputStream in=new FileInputStream(f);

int m=-1;

byte bb[]=new byte[1024];

String content=null;

while((m=in.read(bb))!=-1)

{

content=new String(bb,0,m);

out.println(content);

}

in.close();

}

catch(IOException e)

{

out.println("文件读取失败"+e);

}

%>

实验2

inputContent.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ taglib tagdir="/WEB-INF/tags" prefix="file"%>

输入文件的内容:



读取文件

write.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ taglib tagdir="/WEB-INF/tags" prefix="file"%>

<%

String str=request.getParameter("ok");

if(str.length()>0)

{

byte bb[]=str.getBytes("iso-8859-1");

str=new String(bb);

%>

<% out.println("
"+message);

}

%>

读取文件

read.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<%@ taglib tagdir="/WEB-INF/tags" prefix="file"%>

读取文件:读取加密的文件

读取解密的文件

<%

String condition=request.getParameter("R");

if(condition!=null)

{

%>

<% }

%>


返回inputContent.jsp页面

Write.tag

<%@ variable name-given="message" scope="AT_END" %>

<%@ tag pageEncoding="GB2312" %>

<%@ tag import="java.io.*" %>

<%@ attribute name="content" required="true" %>

<% File dir=new File("C:/","Students");

dir.mkdir();

File f=new File(dir,"save.txt");

try

{

FileWriter outfile=new FileWriter(f);

BufferedWriter bufferout=new BufferedWriter(outfile);

char a[]=content.toCharArray();

for(int i=0;i

a[i]=(char)(a[i]^12);

content=new String(a);

bufferout.write(content);

bufferout.close();

outfile.close();

jspContext.setAttribute("message","文件加密成功");

}

catch(IOException e)

{

jspContext.setAttribute("message","文件加密失败");

操作系统上机实验报告(西电)

操作系统上机题目 一、题目 实验1:LINUX/UNIX Shell部分 (一)系统基本命令 1.登陆系统,输入whoami 和pwd ,确定自己的登录名和当前目录; 登录名yuanye ,当前目录/home/yuanye 2.显示自己的注册目录?命令在哪里? a.键入echo $HOME,确认自己的主目录;主目录为/home/yuanye b.键入echo $PA TH,记下自己看到的目录表;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games c.键入which abcd,看看得到的错误信息; 再键入which ls 和which vi,对比刚刚得到的结果的目录是否在a.、b. 两题看到的目录表中; /bin/ls /usr/bin/vi 3.ls 和cd 的使用: a.键入ls,ls -l ,ls -a ,ls -al 四条命令,观察输出,说明四种不同使用方式的区别。 1. examples.desktop 公共的模板视频图片文档音乐桌面; 总计32 2.-rw-r--r-- 1 yuanye yuanye 357 2011-03-22 22:15 examples.desktop drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 公共的 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 模板 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 视频 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 图片 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 文档 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 音乐 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 桌面 3. . .fontconfig .local .Xauthority .. .gconf .mozilla .xsession-errors .bash_logout .gconfd .nautilus 公共的 .bashrc .gksu.lock .profile 模板 .cache .gnome2 .pulse 视频 .chewing .gnome2_private .pulse-cookie 图片 .config .gnupg .recently-used.xbel 文档 .dbus .gstreamer-0.10 .scim 音乐 .dmrc .gtk-bookmarks .sudo_as_admin_successful 桌面 .esd_auth .gvfs .update-manager-core

操作系统实验报告

操作系统实验报告 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

实验二进程调度1.目的和要求 通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。 2.实验内容 阅读教材《计算机操作系统》第二章和第三章,掌握进程管理及调度相关概念和原理。 编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。 程序要求如下: 1)输出系统中进程的调度次序; 2)计算CPU利用率。 3.实验环境 Windows操作系统、VC++6.0 C语言 4设计思想: (1)程序中进程可用PCB表示,其类型描述如下:

structPCB_type { intpid;//进程名 intstate;//进程状态 2——表示“执行”状态 1——表示“就绪”状态 0——表示“阻塞”状态 intcpu_time;//运行需要的CPU时间(需运行的时间片个数) } 用PCB来模拟进程; (2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下: structQueueNode{ structPCB_typePCB; StructQueueNode*next; } 并设全程量: structQueueNode*ready_head=NULL,//ready队列队首指针 *ready_tail=NULL,//ready队列队尾指 针

操作系统实验页面置换算法C++代码

#include #include #include /*全局变量*/ int mSIZE; /*物理块数*/ int pSIZE; /*页面号引用串个数*/ static int memery[10]={0}; /*物理块中的页号*/ static int page[100]={0}; /*页面号引用串*/ static int temp[100][10]={0}; /*辅助数组*/ /*置换算法函数*/ void FIFO(); void LRU(); void OPT(); /*辅助函数*/ void print(unsigned int t); int main() { int i,k,code; printf(" ╔═══════════════╗\n"); printf(" ║页面置换算法║\n"); printf(" ╚═══════════════╝\n"); printf("请输入物理块的个数(M<=10):"); scanf("%d",&mSIZE); printf("请输入页面号引用串的个数(P<=100):"); scanf("%d",&pSIZE); puts("请依次输入页面号引用串(连续输入,无需隔开):"); for(i=0;i

jsp实训个人总结

jsp实训个人总结 最近发表了一篇名为《jsp实训个人总结》的范文,好的范文应该跟大家分享,重新编辑了一下发到。篇一:JSP实训总结 JSP程序设计实训总结 班级:软件技术姓名:张*** 学号:113230**** 在这一周JSP程序设计的实训的时间里,实训老师针对我们本学期的学习,有针对性地对我们进行了很有价值的实训工作,从最基础的JSP程序设计中的界面设计,到一般的JSP程序设计中的查询,添加,修改等语句,给我们细心讲解,虽然JSP程序设计的课已经学习了一个学期了,但对其简单的知识点运用的都不是很熟练,没能真正去融会贯通。 通过本次课程设计,我感受颇多,尽管上课时也认真听了老师的讲课,但是已开始面对自己的题目时,还是有些不知所措,都不知道如何下手,后来去图书馆借了几本相关的书籍,心里在感觉有了一些底。不过,经过为期一周的针对性实训,我学到了很多知识,把以前学的所有知识点都贯穿到一起,又温习了一遍,让我们能从真正意义上了解到JSP程序设计的用处,总算还是收获不少,对jsp 的认识也更加的深刻了。在这个过程中,我感觉就像人生的一个缩影,充满了酸甜苦辣。当一个问题想了好久也无法解决时,范文写作我感到沮丧与无助。当经过努力解决了一个程序上的难题时,我感到无比的喜悦。当经过每天为了编写代码一坐就是四五个小时,我感到无比的痛苦。但艰难痛苦已成往事,灿烂的明天向我走来,今天我总算迎接了胜利的果实,以前的辛酸与痛苦化作我坚强的力(来自jsp实训个人总结)量,将在我将来的人生历程中,为我的美好明天打下坚实的基础。经过了这次磨练,我又一次感受到只有付出才能有收获,成功永远是属于不懈努力的人们的。 篇二:JSP实训心得体会

《 Windows7 操作系统》实验报告

实验(一) Windows 7基本操作 一、实验目的 1.掌握文件和文件夹基本操作。 2.掌握“资源管理器”和“计算机”基本操作。 二、实验要求 1.请将操作结果用Alt+Print Screen组合键截图粘贴在题目之后。 2.实验完成后,请将实验报告保存并提交。 三、实验内容 1.文件或文件夹的管理(提示:此题自行操作一遍即可,无需抓图)★期末机试必考题★ (1) 在D:盘根目录上创建一个名为“上机实验”的文件夹,在“上机实验”文件夹中创建1个名为“操作系统上机实验”的空白文件夹和2个分别名为“2.xlsx”和“3.pptx”的空白文件,在“操作系统上机实验”文件夹中创建一个名为“1.docx”的空白文件。 (2) 将“1.docx”改名为“介绍信.docx”;将“上机实验”改名为“作业”。 (3) 在“作业”文件夹中分别尝试选择一个文件、同时选择两个文件、一次同时选择所有文件和文件夹。 (4) 将“介绍信.docx”复制到C:盘根目录。 (5) 将D:盘根目录中的“作业”文件夹移动到C:盘根目录。 (6) 将“作业”文件夹中的“2.xlsx”文件删除放入“回收站”。 (7) 还原被删除的“2.xlsx”文件到原位置。 2.搜索文件或文件夹,要求如下: 查找C盘上所有以大写字母“A”开头,文件大小在10KB以上的文本文件。(提示:搜索时,可以使用“?”和“*”。“?”表示任意一个字符,“*”表示任意多个字符。)

3. 在桌面上为C:盘根目录下的“作业”文件夹创建一个桌面快捷方式。★期末机试必考题★ 3.“计算机”或“资源管理器”的使用 (1) 在“资源管理器”窗口,设置以详细信息方式显示C:\WINDOWS中所有文件和文件夹,使所有图标按类型排列显示,并不显示文件扩展名。(提示:三步操作全部做完后,将窗口中显示的最终设置结果抓一张图片即可) (2) 将C:盘根目录中“介绍信.docx”的文件属性设置为“只读”和“隐藏”,并设置在窗口中显示“隐藏属性”的文件或文件夹。(提示:请将“文件夹”对话框中选项设置效果与C:盘根目录中该文件图标呈现的半透明显示效果截取在一整张桌面图片中即可) 4.回收站的设置 设置删除文件后,不将其移入回收站中,而是直接彻底删除功能。

操作系统上机实验报告

大连理工大学实验报告 学院(系):专业:班级: 姓名:学号:组:___ 实验时间:实验室:实验台: 指导教师签字:成绩: 实验名称:进程控制 一、实验目的和要求 (1)进一步加强对进程概念的理解,明确进程和程序的区别 (2)进一步认识并发执行的实质 二、实验环境 在windows平台上,cygwin模拟UNIX运行环境 三、实验内容 (1) getpid()---获取进程的pid 每个进程都执行自己独立的程序,打印自己的pid; (2) getpid()---获取进程的pid 每个进程都执行自己独立的程序,打印自己的pid; 父进程打印两个子进程的pid;

(3)写一个命令处理程序,能处理max(m,n), min(m,n),average(m,n,l)这几个命令(使用exec函数族)。 Max函数 Min函数 Average函数 Exec函数族调用 四、程序代码 五、运行结果 六、实验结果与分析 七、体会 通过这次上机,我了解了fork函数的运行方法,同时更深刻的了解了进程的并行执行的本质,印证了在课堂上学习的理论知识。同时通过编写实验内容(3)的命令处理程序,学会了exec函数族工作原理和使用方法。通过这次上机实验让我加深了对课堂上学习的理论知识的理解,收获很多。

大连理工大学实验报告 学院(系):专业:班级: 姓名:学号:组:___ 实验时间:实验室:实验台: 指导教师签字:成绩: 实验名称:进程通讯 一、实验目的和要求 了解和熟悉UNIX支持的共享存储区机制 二、实验环境 在windows平台上,cygwin模拟UNIX运行环境 三.实验内容 编写一段程序, 使其用共享存储区来实现两个进程之间的进程通讯。进程A创建一个长度为512字节的共享内存,并显示写入该共享内存的数据;进程B将共享内存附加到自己的地址空间,并向共享内存中写入数据。 四、程序代码 五、运行结果 六、实验结果与分析 七、体会

操作系统实验指导_源码参考资料

华东交通大学 软件学院 操作系统实验报告 专业: 计算机科学与技术 姓名: 林庆达 学号: 3103005138 2005-6

试验一进程调度 一、实验目的: 编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。 二、实验内容:以两种典型算法为例说明实现的算法 (一)、最高优先数优先的调度算法 1、实验原理 进程调度算法:采用最高优先数优先 的调度算法(即把处理机分配给优先数最 高的进程)和先来先服务算法。 每个进程有一个进程控制块(PCB) 表示。进程控制块可以包含如下信息:进 程名、优先数、到达时间、需要运行时间、 已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以 事先人为地指定(也可以由随机数产生)。 进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进 行计算。 每个进程的状态可以是就绪W (Wait)、运行R(Run)、或完成F(Finish) 三种状态之一。 就绪进程获得CPU后都只能运行一 个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占 用CPU时间已达到所需要的运行时间, 则撤消该进程,如果运行一个时间片后进 程的已占用CPU时间还未达所需要的运 行时间,也就是进程还需要继续运行,此 时应将进程的优先数减1(即降低一级), 然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运 行进程、就绪队列、以及各个进程的PCB, 以便进行检查。 重复以上过程,直到所有进程都完成为止。 2、源代码: #include "stdio.h" #include #include #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0

操作系统实验六磁盘调度算法正确C代码

操作系统实验六磁盘调度算法正确C代码 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

《操作系统》实验报告 【实验题目】:磁盘调度算法 【实验目的】 通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的实现方法。【实验内容】 问题描述: 设计程序模拟先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。 程序要求如下: 1)利用先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法模拟磁道访问过程。 2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。 3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。 4)输出:每种算法的平均寻道长度。 实验要求:

1) 上机前认真复习磁盘调度算法,熟悉FCFS,SSTF,SCAN和循环SCAN算法的过程; 2) 上机时独立编程、调试程序; 3) 根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。 实验代码: #include #include #include<> using namespace std; const int MaxNumber=100; int TrackOrder[MaxNumber]; int MoveDistance[MaxNumber];//移动距离 int FindOrder[MaxNumber];//寻好序列 double AverageDistance;//平均寻道长度 bool direction;//方向 true时为向外,false为向里 int BeginNum;//开始磁道号 int M=500;//磁道数 int N;//提出磁盘I/O申请的进程数 int SortOrder[MaxNumber];//排序后的序列 bool Finished[MaxNumber]; void Inith() { cout<<"请输入提出磁盘I/O申请的进程数: "; cin>>N; cout<<"请依次输入要访问的磁道号: "; for(int i=0;i>TrackOrder[i]; for(int j=0;j

JSP课程实习报告

JSP课程实习报告 班级 XXXXX 学生姓名 XXXXX 学号 2010100XXXX 指导教师 XXXX 日期 20XX年X月XX日

1 前言 JSP是由Sun公司倡导建立的一种动态网页技术标准,该技术为建立动态显示生成内容的Web页面提供了一个简捷而快速的方法。JSP技术的设计目的是使得构建基于Web的应用程序更加容易和快捷,而这些应用程序能够与各种Web服务器、应用服务器、浏览器和开发工具共同工作。JSP规范是Web服务器、应用服务器、交易系统以及开发工具供应商间广泛合作的结果。 JSP是结合HTML(或XML)和Java代码来处理的一种动态页面。在传统的网页文件中加入Java程序片段和JSP标记就构成了JSP网页。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。程序片段可以操作数据库、重新定向网页等,这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传输给客户端的仅是得到的结果,使对客户浏览器的要求降到最低。 学习JSP这门课程,需要理论与实践相结合,在大二下学期时,曾和本专业的同学组队学习HTML+CSS网页开发技术,尝试过设计网页,但是由于自学能力有限,学到的东西只是皮毛,本学期学习JSP,相信会对动态网页技术有更深入的了解。 2 实习的目的 通过JSP的上机实习,理论联系实际,巩固所学的知识,进一步理解和掌握JSP的原理和基本语法,加深对相关内容的理解;提高处理实际问题的能力,培养实践能力,接触课堂以外的实践知识,拓宽知识面,为后期课程的学习奠定基础;了解设计专题的主要内容,为自己能顺利与社会环境接轨做好准备。 3 实习要求 理解和掌握JSP的运行原理和基本语法,通过JSP的上机实习,可以独立安装、配置JSP的开发和运行环境,掌握Eclipse等工具软件的使用方法,巩固所学知识,具体实现以下要求: 1、在JSP中利用Java代码计算出1+1的结果,然后在页面中显示计算结果,实现过程如下: (1)创建动态Web项目,并创建JSP文件 (2)在JSP文件中编写Java代码计算出1+1的结果,并将结果打印到页面中 2、编写一个简单的留言薄,写入留言提交后显示留言内容。 3、应用Eclipse创建一个名为BookInfo的值JavaBean,要求该JaaBean具有name,price,stock和author简单属性,属性类型为string. 4 JSP运行环境的配置

操作系统实验报告生产者与消费者问题模拟

操作系统上机实验报告 实验名称: 生产者与消费者问题模拟 实验目的: 通过模拟生产者消费者问题理解进程或线程之间的同步与互斥。 实验内容: 1、设计一个环形缓冲区,大小为10,生产者依次向其中写入1到20,每个缓冲区中存放一个数字,消费者从中依次读取数字。 2、相应的信号量; 3、生产者和消费者可按如下两种方式之一设计; (1)设计成两个进程; (2)设计成一个进程内的两个线程。 4、根据实验结果理解信号量的工作原理,进程或线程的同步\互斥关系。 实验步骤及分析: 一.管道 (一)管道定义 所谓管道,是指能够连接一个写进程和一个读进程的、并允许它们以生产者—消费者方式进行通信的一个共享文件,又称为pipe文件。由写进程从管道的写入端(句柄1)将数据写入管道,而读进程则从管道的读出端(句柄0)读出数据。(二)所涉及的系统调用 1、pipe( ) 建立一无名管道。 系统调用格式 pipe(filedes) 参数定义 int pipe(filedes); int filedes[2]; 其中,filedes[1]是写入端,filedes[0]是读出端。 该函数使用头文件如下: #include #inlcude #include 2、read( ) : 系统调用格式 read(fd,buf,nbyte) 功能:从fd所指示的文件中读出nbyte个字节的数据,并将它们送至由指针buf 所指示的缓冲区中。如该文件被加锁,等待,直到锁打开为止。 参数定义:

int read(fd,buf,nbyte); int fd; char *buf; unsigned nbyte; 3、write( ) 系统调用格式 read(fd,buf,nbyte) 功能:把nbyte 个字节的数据,从buf所指向的缓冲区写到由fd所指向的文件中。如文件加锁,暂停写入,直至开锁。 参数定义同read( )。 (三)参考程序 #include #include #include int pid1,pid2; main( ) { int fd[2]; char outpipe[100],inpipe[100]; pipe(fd); /*创建一个管道*/ while ((pid1=fork( ))==-1); if(pid1==0) { lockf(fd[1],1,0); /*把串放入数组outpipe中*/ sprintf(outpipe,child 1 is using pipe!); /* 向管道写长为50字节的串*/ write(fd[1],outpipe,50); sleep(5); /*自我阻塞5秒*/ lockf(fd[1],0,0); exit(0); } else { while((pid2=fork( ))==-1); if(pid2==0) { lockf(fd[1],1,0); /*互斥*/ sprintf(outpipe,child 2 is using pipe!); write(fd[1],outpipe,50); sleep(5); lockf(fd[1],0,0);

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 2014年3 月29 日

一、实验目的 ◆熟悉hit-oslab实验环境; ◆建立对操作系统引导过程的深入认识; ◆掌握操作系统的基本开发过程; ◆能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。 二、实验容 1. 阅读《Linux核完全注释》的第6章引导启动程序,对计算机和Linux 0.11的引导过程进行初步的了解。 2. 按照下面的要求改写0.11的引导程序bootsect.s。 3. 有兴趣同学可以做做进入保护模式前的设置程序setup.s。 4. 修改build.c,以便可以使用make BootImage命令 5. 改写bootsect.s主要完成如下功能: bootsect.s能在屏幕上打印一段提示信息XXX is booting...,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等。 6. 改写setup.s主要完成如下功能: bootsect.s能完成setup.s的载入,并跳转到setup.s开始地址执行。而setup.s 向屏幕输出一行"Now we are in SETUP"。setup.s能获取至少一个基本的硬件参数(如存参数、显卡参数、硬盘参数等),将其存放在存的特定地址,并输出到屏幕上。setup.s不再加载Linux核,保持上述信息显示在屏幕上即可。 三、实验环境

本实验使用的系统是windows系统或者是Linux系统,需要的材料是osexp。 四、实验步骤 1. 修改bootsect.s中的提示信息及相关代码; 到osexp\Linux-0.11\boot目录下会看到图1所示的三个文件夹,使用UtraEdit 打开该文件。将文档中的98行的mov cx,#24修改为mov cx,#80。同时修改文档中的第246行为图2所示的情形。 图1图2 图3 2. 在目录linux-0.11\boot下,分别用命令as86 -0 -a -o bootsect.obootsect.s和 ld86 -0 -s -obootsectbootsect.o编译和bootsect.s,生成bootsect文件; 在\osexp目录下点击MinGW32.bat依此输入下面的命令: cd linux-0.11 cd boot as86 -0 -a -o bootsect.obootsect.s ld86 -0 -s -o bootsectbootsect.o

操作系统B2-上机实验-进程

实验二Linux 进程实验 姓名:段叶叶班级:信息1302 学号:07131052 地点:东区实验室FF109 时间:2014年10月13日星期一 成绩: 一、实验内容 1.创建进程的系统调用fork(); 2.创建进程的系统调用vfork(); 3.执行新程序的系统调用exec(); 4.等待进程结束的系统调用wait()或waitpid()。 前三题必做,最后一题选做。 二、实验目的 熟悉进程的系统调用。 三、实验环境 登陆Linux虚拟机,进入Linux shell,提示符为$,表示普通用户提示符。 四、实验题目 1. 【题目】:编写程序forkgrandchild.c,用来创建孙子进程。 【要求】:在读懂程序forktest.c的基础上,编写程序 forkgrandchild.c(forkgrandchild.c创建在用户名(如wm)目录下的process 目录下),所创建的程序forkgrandchild.c可实现创建孙子进程,并显示孙子进程的pid,其父进程的pid,forkgrandchild.c要求可读性好,用户界面友好。 【预备知识】: 1)Linux进程状态 ●运行状态:程序正在运行或在运行队列中等待运行。 ●可中断等待状态:进程正在等待某个事件完成,等待过程可被信号或定时器 唤醒。 ●不可中断等待状态:进程正在等待某个事件完成,不可被信号或定时器唤醒, 必须等待事件的发生,才可唤醒。 ●僵死状态:进程已终止,但进程描述符依然存在,直到父进程调动wait()函 数后释放。 ●停止状态:进程因收到SIGSTOP SIGSTP SIGTIN SIGTOU信号后停止运行 或该进程正在被跟踪(调式程序时)。

jsp实训报告总结

企业信息管理系统概述 一、企业信息管理需求分析 1、登录页面模块 登录页面模块功能如下: 对登录页面进行设置,要求输入用户名和密码正确之后才可登录系统。若尚未注册,则点击注册新用户(注:当用户名已存在时不能重复注册)。 2、首页面模块 首页面模块功能如下: 插入相应的图片,显示首页面的信息。 3、通讯工具模块 通讯工具模块功能如下: 1)、通讯录管理:修改联系人、删除联系人、新增联系人、 2)、短消息管理:发送消息、设置消息已读、删除消息、首页(前一页、后一页、尾页)的设置 4、个人管理模块 个人管理模块功能如下: 1)日程安排:修改日程安排、删除日程安排、新增日程安排、首页(前一页、后一页尾页)的设置 2)工作记录:修改工作记录、删除工作记录、新增工作记录、首页(前一页、后一页尾页)的设置 5、企业管理模块 企业管理模块功能如下: 1)公司公告:修改公司公告、删除公司公告、新增公司公告、首页(前一页、后一页尾页)的设置 2)工作会议::修改工作会议、删除工作会议、新增工作会议、首页(前一页、后一页尾页)的设置 6、退出模块 退出模块功能如下: 点击退出之后,系统直接跳转到登录页面,若要重新登录,则进入登录页面输入信息之后即可登录。 二、企业信息管理系统功能结构图:

三、建立数据库 1、users(id,name,password,email) 2、address

3、sms 4、schedule 5、worklog

6、notice 7 、meeting 静态页面设计 一、功能描述 1、登录页面模块:对登录页面进行设置,要求输入用户名和密码正确之后才可登录系统。若尚未注册,则点击注册新用户,注册新用户时进入页面。 2、注册模块:当用户名已存在时不能重复注册,当重复注册时,系统将会给出提示“该用户名已经存在”。注册时,必须要输入密码。 3、首页面模块:插入相应的图片,显示首页面的信息。

操作系统实验报告

操作系统实验报告 学生学院计算机学院 专业班级计算机科学与技术3班学号3213005910 学生姓名林虹 指导教师丁国芳 2015 年12月15 日

目录 1 实验一进程调度 (1) 2 实验二银行家算法 (16) 3 实验三动态分区分配方式的模拟 (20) 4 实验四仿真各种磁盘调度算法 (26)

实验一进程调度 1. 实验目的 编写并调试一个模拟的进程调度程序,分别采用“短进程优先”、“时间片轮转”、“高响应比优先”调度算法对随机产生的五个进程进行调度,并比较算法的平均周转时间。以加深对进程的概念及进程调度算法的理解。 2. 实验要求 1.每个进程由一个进程控制块(PCB)表示,进程控制块可以包含如下信息:进程 名、优先数(响应比)、到达时间、需要运行时间(进程的长度)、已运行时间、进 程状态等等(可以根据需要自己设定)。 2.由程序自动生成进程(包括需要的数据,要注意数据的合理范围),第一个进程到 达时间从0开始,其余进程到达时间随机产生。 3.采用时间片轮转调度算法时,进程的运行时间以时间片为单位进行计算。 4.每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种 状态之一。 5.每进行一次调度,程序都要输出一次运行结果:正在运行的进程、就绪队列中的进 程、完成的进程以及各个进程的PCB,以便进行检查。 6.最后计算各调度算法的平均周转时间,并进行比较、分析。 3. 实验内容 a.算法原理 (1)短进程优先调度算法 “短进程优先”调度算法的基本思想是把CPU分配给就绪队列中需要时间最短的进程。 (2)时间片轮转算法 将系统中所有的就绪进程按照FCFS原则,排成一个队列。每次调度时将CPU 分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。在一个时间片结束时,发生时钟中断。调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。进程可以未使用完一个时间片,就出让CPU。 (3)高响应比优先算法 HRRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 每个作业完成后要打印该作业的开始运行时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后要计算并打印这组作业的平均周转时间、带权平均周转时间。

JSP上机实习报告

JSP上机实习报告 课程名称JSP开发技术 任课老师赵丹 专业信息管理与信息系统 学号 20121002296 姓名胡斌

JSP上机实习报告 第一题 一、题目 在JSP中利用Java代码计算出1+1的结果,然后在页面中显示计算结果,实现过程如下: 1、创建动态Web项目,并创建JSP文件 2、在JSP文件中编写Java代码计算出1+1的结果,并将结果打印到页面中 二、代码 <%@ page language="java"import="java.util.*"pageEncoding="ISO-8859-1"%> My JSP 'hb1.jsp' starting page <% int i=1,j=1; out.println("1+1="); out.print(i+j); %>
三、运行结果

操作系统实验报告

操作系统实验报告 银行家算法 班级:计算机()班 姓名:李君益 学号:(号) 提交日期: 指导老师: 林穗 一、设计题目 加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 二、设计要求

内容: 编制银行家算法通用程序,并检测思考题中所给状态的安全性。 要求: (1)下列状态是否安全?(三个进程共享个同类资源) 进程已分配资源数最大需求数 (状态) (状态) (2)考虑下列系统状态 分配矩阵最大需求矩阵可用资源矩阵 问系统是否安全?若安全就给出所有的安全序列。若进程请求(),可否立即分配? 三、设计分析 一.关于操作系统的死锁 .死锁的产生 计算机系统中有许多独占资源,他们在任一时刻只能被一个进程使用,如磁带机,绘图仪等独占型外围设备,或进程表,临界区等软件资源。两个进程同时向一台打印机输出将导致一片混乱,两个进程同时进入临界区将导致数据库错误乃至程序崩溃。正因为这些原因,所有操作系统都具有授权一个进程独立访问某一辞源的能力。一个进程需要使用独占型资源必须通过以下的次序: ●申请资源 ●使用资源 ●归还资源 若申请施资源不可用,则申请进程进入等待状态。对于不同的独占资源,进程等待的方式是有差别的,如申请打印机资源、临界区资源时,申请失败将一位这阻塞申请进程;而申请打开文件文件资源时,申请失败将返回一个错误码,由申请进程等待一段时间之后重试。只得指出的是,不同的操作系统对于同一种资源采取的等待方式也是有差异的。 在许多应用中,一个进程需要独占访问多个资源,而操作系统允许多个进程并发执行共享系统资源时,此时可能会出现进程永远被阻塞的现象。这种现象称为“死锁”。 2.死锁的定义 一组进程处于死锁状态是指:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的时间,则称一组进程或系统此时发生了死锁。 .死锁的防止 .死锁产生的条件: ●互斥条件

操作系统实验全(五个)

操作系统试验指导 —. 课程的性质、目的和任务 操作系统在整个计算机系统软件中占有中心地位。其作用是对计算机系统进行统一的调度和管理,提供各种强有力的系统服务,为用户创造既灵活又方便的使用环境。本课程是计算机及应用专业的一门专业主干课和必修课。通过本课程的学习,使学生掌握操作系统的基本概念、设计原理及实施技术,具有分析操作系统和设计、实现、开发实际操作系统的能力。 二. 实验的意义和目的 操作系统是计算机专业学生的一门重要的专业课程。操作系统质量对整个计算机系统的性能和用户对计算机的使用有重大的影响。一个优良的操作系统能极大地扩充计算机系统的功能,充分发挥系统中各种设备的使用效率,提高系统工作的可靠性。由于操作系统涉及计算机系统中各种软硬件资源的管理,内容比较繁琐,具有很强的实践性。要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果。培养计算机专业的学生的系统程序设计能力,是操作系统课程的一个非常重要的环节。通过操作系统上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。 三.实验运行环境及上机前的准备 实验运行环境: C语言编程环境 上机前的准备工作包括: ●按实验指导书要求事先编好程序; ●准备好需要输入的中间数据; ●估计可能出现的问题; ●预计可能得到的运行结果。 四. 实验内容及安排 实验内容包括进程调度、银行家算法、页式地址重定位模拟,LRU算法模拟和先来先服务算法五个实验。每个实验介绍了实习的目的要求、内容和方法。

jsp实训心得体会

jsp实训心得体会 篇一:JSP实训总结 JSP程序设计实训总结 班级:软件技术姓名:张*** 学号:113230**** 在这一周JSP程序设计的实训的时间里,实训老师针对我们本学期的学习,有针对性地对我们进行了很有价值的实训工作,从最基础的JSP程序设计中的界面设计,到一般的JSP程序设计中的查询,添加,修改等语句,给我们细心讲解,虽然JSP程序设计的课已经学习了一个学期了,但对其简单的知识点运用的都不是很熟练,没能真正去融会贯通。 通过本次课程设计,我感受颇多,尽管上课时也认真听了老师的讲课,但是已开始面对自己的题目时,还是有些不知所措,都不知道如何下手,后来去图书馆借了几本相关的书籍,心里在感觉有了一些底。不过,经过为期一周的针对性实训,我学到了很多知识,把以前学的所有知识点都贯穿到一起,又温习了一遍,让我们能从真正意义上了解到JSP 程序设计的用处,总算还是收获不少,对jsp的认识也更加的深刻了。在这个过程中,我感觉就像人生的一个缩影,充满了酸甜苦辣。当一个问题想了好久也无法解决时,我感到沮丧与无助。当经过努力解决了一个程序上的难题时,我感到无比的喜悦。当经过每天为了编写代码一坐就是四五个小

时,我感到无比的痛苦。但艰难痛苦已成往事,灿烂的明天向我走来,今天我总算迎接了胜利的果实,以前的辛酸与痛苦化作我坚强的力量,将在我将来的人生历程中,为我的美好明天打下坚实的基础。经过了这次磨练,我又一次感受到只有付出才能有收获,成功永远是属于不懈努力的人们的。 篇二:JSP实训心得体会 jsp程序设计实训总结 班级:软件技术姓名:张*** 学号:113230**** 在这一周jsp程序设计的实训 的时间里,实训老师针对我们本学期的学习,有针对性地对我们进行了很有价值的实训工作, 从最基础的jsp程序设计中的界面设计,到一般的jsp 程序设计中的查询,添加,修改等语 句,给我们细心讲解,虽然jsp程序设计的课已经学习了一个学期了,但对其简单的知识点 运用的都不是很熟练,没能真正去融会贯通。通过本次课程设计,我感受颇多,尽管上课时也认真听了老师的讲课,但是已开始面对 自己的题目时,还是有些不知所措,都不知道如何下手,

操作系统实验报告18038

福州大学数学与计算机科学(软件)学院 实验报告 课程名称:计算机操作系统 学号:221100218 姓名: 专业:软件工程 年级:2011级 学期:2012学年第2学期 2013年10 月24 日

实验一 Linux操作系统的使用和分析 一、实验目的 本实验主要学习和掌握Linux操作系统的基本应用。通过本实验,学生能够熟练掌握Linux环境下各种基本操作命令接口的应用。从系统安全角度出发,学习掌握系统的基本安全优化和配置,在操作系统层次进行有效安全加固,提高Linux系统的安全性能。通过本次实验,有助于学生进一步理解操作系统原理中的相关内容,加深认识。 二、实验要求 1、熟练掌握Linux系统的基本操作命令。 2、熟悉Linux 系统的基本配置。 3、实现Linux系统的安全加固。 4、掌握一种以上的网络应用软件的安装、配置与应用。 三、实验内容 系统的启动,如图: 关闭使用shutdowm 还有列出文件夹内的信息ls,cp复制拷贝,touch创建文件命令等等 ①下载文件压缩包pro.gz,解压如图:

②然后修改安装路径: ③之后用make编译文件 ④在安装路径/home/liaoenrui/11里的etc中修改文件的组名和用户名: 将groud 命名也命名为ftp,然后用groudadd和useradd命令将这两个添加在该目录的sbin目录下:

⑤最后运行文件,./profile即可 四、实验总结 通过本次的操作系统的上机实验,我熟练了Linux系统的基本操作命令,并且对安装文件有更深入的了解,比如在上述安装过程中对于通过froftpd来架构linux的ftp,由于之前都是用window系统,所以对于这些非常的生疏,因此在请教了多人和上网查询之后,终于有所了解,并且成功的将此实验顺利完成。在本次实验中,我发现自己的动手能力又有很大的提高,相信以后继续努力的话会有更大的进步,当然这也要归功于老师的教导。 参考文献 [1] Neil Maththew Richard Stones Linux 程序设计第四版人民邮电出版社 [2] 周茜,赵明生.中文文本分类中的特征选择研究[J].中文信息学报,2003,Vol.18 No.3

操作系统实验报告1

操作系统 实验报告 班号:1303107 学号:1130310726 姓名:蔡鹏

1.请简述head.s 的工作原理。 head.s实在32位保护模式下运行的。我认为这段程序主要包括两个部分:1.初始化设置。2.任务执行与切换。 初始设置主要包括了:1.设置GDT表2.设置系统定时芯片3. 设置IDT表(0x08时钟中断和0x80系统调用中断)4.切换到任务0执行 任务切换和执行包括了:1.任务0和任务1 , 2.时钟中断, 3.系统中断 两个任务的在LDT中代码段和数据段描述符的内容都设置为:基地址0x0000;段限长值为0x03ff,实际段长度为4MB。因此在线性地址空间中这个?内核?的代码和数据段与任务的代码和数据段都从线性地址0开始并且由于没有采用分页机制,所以他们都直接对应物理地址0开始处。 为了每隔10毫秒切换运行的任务,head.s程序中把定时器芯片8253的通道0设置成每隔10毫秒就向中断控制芯片8259A发送一个时钟中断请求信号。PC机的ROM BIOS开机时已经在8259A中把时钟中断请求信号设置成中断向量8,因此我们需要在中断8的处理过程中执行任务切换操作。任务切换的实现是查看current变量中的当前运行的任务号,如果为0,就利用任务1的TSS选择符作为操作数执行远跳转指令,从而切换到任务1中,否则反之。

每个任务在执行时,会首先把一个字符的ASCII码放入寄存器AL中,然后调用系统中断调用int 0x80,而该系统调用处理过程则会调用一个简单的字符写屏子程序,把寄存器AL中的字符显示在屏幕上,同时把字符显示的屏幕的下一个位置记录下来,作为下一次显示字符用。在显示过一个字符后,任务代码会使用循环语句延迟一段时间,然后又跳转到任务代码开始处继续循环执行,直到运行了10毫秒而发生了定时中断,从而代码会切换到另一个任务执行。对于任务A,寄存器AL中始终存放字符‘A’,而任务B运行时AL中始终存放字符‘B’。因此程序运行时我们将看到一连串的‘A’和一连串的‘B’间隔的连续不断的显示在屏幕上。若出现了一个‘C’,是由于PC机偶然产生了一个不是时钟中断和系统调用中断的其他中断。因为我们已经在程序中给所有其他中断安装了一个默认中断处理程序。当出现一个其他中断时,系统就会运行这个中断处理程序,于是就会在屏幕上显示一个‘C’,然后退出中断。 4.请记录head.s 的内存分布状况,写明每个数据段,代码段,栈段 的起始与终止的内存地址。

相关文档
相关文档 最新文档