操作系统实验指导书V2013[1]

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

操作系统实验指导书操作系统课程组编内蒙古工业大学信息工程学院计算机系二〇一三年九月I目录《操作系统》实验教学大纲........................................................................................1实验一进程管理..........................................................................................................1实验二SPOOLing技术实现.....................................................................................121《操作系统》实验教学大纲一、基本信息课程编码020213008课程学时56课程类别学科基础课程实验总学时10开出学期5开出单位计算机系适用专业计算机科学与技术、软件工程二、实验安排序号实验项目实验学时每组人数实验类型开出要求1实验一进程管理41验证必做2实验二SPOOLing技术实现61设计必做三、实验目的、内容与要求实验一进程管理(一)实验目的1.加深对进程概念的理解,明确进程和程序的区别;2.进一步认识并发执行的实质;3.分析进程争用资源的现象,学习解决进程互斥的方法;4.了解Linux系统中进程通信的基本原理。(二)实验内容1.进程的创建;2.进程的控制;3.进程的软中断通信;4.进程的管道通信。(三)实验要求1.掌握Linux系统中进程的创建、控制和通信的实现;2.根据实验内容,在Linux平台上用C语言编程实现,上机调试运行得出实验结果;3.写出预习报告和实验报告。实验二SPOOLing技术实现(一)实验目的1.加深对SPOOLing系统的理解;2.进一步认识SPOOLing技术的实质;3.分析、设计SPOOLing系统的实现方法;4.了解Linux系统中SPOOLing的基本原理。2(二)实验内容设计并运行一个简单的SPOOLing系统来模拟实际的SPOOLing输入/输出过程,以掌握这种以空间换时间的技术。要求将SPOOLing输入/输出处理程序编成一个独立的进程模块并与其他请求输入/输出的进程并发运行。SPOOLing进程负责把从输入设备输入的信息送到外存输入井中,或把外存输出井中的信息送到打印机等输出设备上输出。其余进程只要求编写输入/输出部分的程序。要求定义实施算法的相关数据结构,实现设备分配和SPOOLing算法。(三)实验要求1.掌握SPOOLing技术的实现;2.根据实验内容,在Linux平台上用C语言编程实现,上机调试运行得出实验结果;3.写出预习报告和实验报告。四、考核方式实验成绩占课程总成绩的比重为10%。考核方式根据实验课考勤、课前预习情况、课上实验能力、原型系统效果验收与实验报告的完成情况综合评分。每个实验考核:实验预习占30%,实验能力和效果占30%,实验报告占40%。五、建议教材与教学参考书1.课程教材[1]张尧学.计算机操作系统教程.第三版.北京:清华大学出版社.2006[2]赵俊生.操作系统实验指导书.自编.20082.教学参考书[1]汤小丹.计算机操作系统.第三版.西安:西安电子科技大学出版社.2008[2]徐虹.操作系统实验指导.北京:清华大学出版社.2004[3]屠祁.操作系统基础.第三版.北京:清华大学出版社.2000[4]冯耀霖.操作系统.西安:西安电子科技大学出版社.2001[5]左万历.计算机操作系统教程.第二版.北京:高等教育出版社.2004六、编制说明编制者:系统软件课程组组长:寿永熙执笔人:赵俊生编制时间:2009年3月1实验一进程管理一、实验目的1.学会在Linux中利用系统调用fork()创建进程。2.加深对进程概念的理解,明确进程和程序的区别。3.进一步认识在系统内进程并发执行的实质。4.分析进程竞争资源的现象,学习解决进程互斥的方法。5.掌握Linux中进程通信的基本原理。二、实验类型验证性实验。三、实验预备知识1.阅读Linux的sched.h源码文件,加深对进程管理概念的理解。2.阅读Linux的fork.c源码文件,分析进程的创建过程。四、实验内容1.进程的创建【任务】编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。【程序】#includestdio.hmain(){intp1,p2;while((p1=fork())==-1);/*创建子进程p1,失败时循环*/if(p1==0)/*子进程p1创建成功*/putchar(‘b’);else/*父进程返回*/{2while((p2=fork())==-1);/*创建另一个子进程p2,失败时循环*/if(p2==0)/*子进程p2创建成功*/putchar(‘c’);elseputchar(‘a’);/*父进程执行*/}}【执行结果】同学自己得到实验结果。【分析原因】同学自己分析多次执行产生不同实验结果的原因。2.进程的控制【任务】修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现象,并分析其原因。如果在程序中使用系统调用lockf()来给每个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。【程序1】#includestdio.hmain(){intp1,p2,i;while((p1=fork())==-1);if(p1==0)for(i=0;i50;i++)printf(“child%d\n”,i);else{while((p2=fork())==-1)if(p2==0)for(i=0;i50;i++)3printf(“son%d\n”,i);elsefor(i=0;i50;i++)printf(“daughter%d\n”,i);}}【执行结果】同学自己得到实验结果。【分析原因】同学自己分析多次执行产生不同实验结果的原因。【程序2】#includestdio.h#includeunistd.hmain(){intp1,p2,i;while((p1=fork())==-1);if(p1==0){lockf(1,1,0);/*加锁*/for(i=0;i50;i++)printf(“child%d\n”,i);lockf(1,0,0);/*解锁*/}else{while((p2=fork())==-1)if(p2==0){lockf(1,1,0);for(i=0;i50;i++)4printf(“son%d\n”,i);lockf(1,0,0);}else{lockf(1,1,0);for(i=0;i50;i++)printf(“daughter%d\n”,i);lockf(1,0,0);}}}【执行结果】同学自己得到实验结果。【分析原因】同学自己分析多次执行产生不同实验结果的原因。3.软中断通信【任务1】编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按任意字母键和Enter键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:childprocess1iskilledbyparent!childprocess2iskilledbyparent!父进程等待两个子进程终止后,输出以下信息后终止:parentprocessiskilled!【程序】#includesys/types.h#includeunistd.h#includestdio.h#includesignal.h5voidwaiting(),stop();intwait_mark;main(){intp1,p2;while((p1=fork())==-1);/*创建进程p1*/if(p10){while((p2=fork())==-1);/*创建进程p2*/if(p20){Printf(“parentrun!\n”);Printf(“p1=%d\n”,p1);Printf(“p2=%d\n”,p2);wait_mark=1;getchar();kill(p1,16);/*向p1发软中断信号16*/kill(p2,17);/*向p2发软中断信号17*/sleep(5);/*父进程睡眠5秒*/wait(0);/*等待子进程结束,同步*/wait(0);/*等待另一子进程结束,同步*/lockf(stdout,1,0);/*标准输出加锁*/printf(“parentprocessiskilled!\n”);lockf(stdout,0,0);/*标准输出解锁*/exit(0);/*父进程终止*/}else{printf(“p2run!\n”);wait_mark=1;6signal(17,stop);/*接收父进程发来的软中断信号17,并转stop*/waiting();lockf(stdout,1,0);/*标准输出加锁*/printf(“childprocess2iskilledbyparent!\n”);lockf(stdout,0,0);/*标准输出解锁*/exit(0);/*子进程p2终止*/}}else{printf(“p1run!\n”);wait_mark=1;signal(16,stop);/*接收父进程发来的软中断信号16,并转stop*/waiting();lockf(stdout,1,0);/*标准输出加锁*/printf(“childprocess1iskilledbyparent!\n”);lockf(stdout,0,0);/*标准输出解锁*/exit(0);/*子进程p1终止*/}}voidwaiting(){printf(“waitingbegin!\n”);while(wait_mark!=0);printf(“waitingend!\n”);}voidstop(){wait_mark=0;printf(“signalstop!”);}7【执行结果】同学自己得到实验结果。【分析原因】同学自己分析产生该实验结果的原因。【任务2】在上面任务1中,增加语句signal(SIGINT,SIG_IGN)和语句signal(SIGQUIT,SIG_IGN),观察执行结果,并分析原因。这里signal(SIGINT,SIG_IGN)和signal(SIGQUIT,SIG_IGN)分别为忽略“Ctrl+c”键信号以及忽略中断信号。【程序】#includesys/types.h#includeunistd.h#includestdio.h#includesignal.hintpid1,pid2;intendflag=0,pf1=0,pf2=0;voidintdelete(){kill(pid1,16);kill(pid2,17);endflag=1;}voidint1(){printf(“childprocess1iskilledbyparent!”);exit(0);}voidint2(){printf(“childprocess2iskilledbyparent!”);8exit(0);}main(){intexitpid;signal(SIGINT,SIG_IGN);signal(SIGQUIT,SIG_IGN);while((pid1=fork())==-1);if(pid1==0){printf(“process1run!\n”);signal(SIGUSR1,int1);signal(16,SIG_IGN);pause();exit(0);}else{while((

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功