操作系统实验指导书

上传人:桔**** 文档编号:562787619 上传时间:2023-01-29 格式:DOCX 页数:19 大小:120.01KB
返回 下载 相关 举报
操作系统实验指导书_第1页
第1页 / 共19页
操作系统实验指导书_第2页
第2页 / 共19页
操作系统实验指导书_第3页
第3页 / 共19页
操作系统实验指导书_第4页
第4页 / 共19页
操作系统实验指导书_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《操作系统实验指导书》由会员分享,可在线阅读,更多相关《操作系统实验指导书(19页珍藏版)》请在金锄头文库上搜索。

1、操作系统实验指导书操作系统课程组编内蒙古工业大学信息工程学院计算机系二OO九十月目录操作系统实验教学大纲1实验一 进程管理1实验二 SPOOLing 技术实现12操作系统实验教学大纲一、基本信息课程编码020213008课程学时56课程类别学科基础课程实验总学时10开出学期5开出单位计算机系适用专业计算机科学与技术、软件工程二、实验安排序号实验项目实验 学时每组 人数实验类 型开出 要求1实验一进程管理41验证必做2实验二SPOOLing技术实现61设计必做三、实验目的、内容与要求实验一 进程管理一)实验目的1加深对进程概念的理解,明确进程和程序的区别;2进一步认识并发执行的实质;3分析进程争

2、用资源的现象,学习解决进程互斥的方法;4. 了解Linux系统中进程通信的基本原理。二)实验内容1. 进程的创建;2. 进程的控制;3. 进程的软中断通信;4. 进程的管道通信。三)实验要求1. 掌握Linux系统中进程的创建、控制和通信的实现;2. 根据实验内容,在Linux平台上用C语言编程实现,上机调试运行得出实验结果;3. 写出预习报告和实验报告。实验二 SPOOLing 技术实现一)实验目的1. 加深对 SPOOLing 系统的理解;2. 进一步认识SPOOLing技术的实质;3分析、设计SPOOLing系统的实现方法;4. 了解Linux系统中SPOOLing的基本原理。(二)实验

3、内容设计并运行一个简单的 SPOOLing 系统来模拟实际的 SPOOLing 输入/输出过程,以掌 握这种以空间换时间的技术。要求将 SPOOLing 输入/输出处理程序编成一个独立的进程模 块并与其他请求输入/输出的进程并发运行SPOOLing进程负责把从输入设备输入的信息送 到外存输入井中,或把外存输出井中的信息送到打印机等输出设备上输出。其余进程只要求 编写输入/输出部分的程序。要求定义实施算法的相关数据结构,实现设备分配和 SPOOLing 算法。(三)实验要求1掌握 SPOOLing 技术的实现;2根据实验内容,在 Linux 平台上用 C 语言编程实现,上机调试运行得出实验结果;

4、 3写出预习报告和实验报告。四、考核方式实验成绩占课程总成绩的比重为10%。考核方式根据实验课考勤、课前预习情况、课上实验能力、原型系统效果验收与实验报 告的完成情况综合评分。每个实验考核:实验预习占30%,实验能力和效果占 30%,实验报告占 40%。五、建议教材与教学参考书1课程教材1 张尧学. 计算机操作系统教程. 第三版. 北京:清华大学出版社. 20062 赵俊生操作系统实验指导书自编20082教学参考书1 汤小丹计算机操作系统第三版西安: 西安电子科技大学出版社20082 徐虹. 操作系统实验指导. 北京: 清华大学出版社20043 屠祁. 操作系统基础第三版北京: 清华大学出版社

5、20004 冯耀霖. 操作系统. 西安: 西安电子科技大学出版社20015 左万历计算机操作系统教程第二版北京:高等教育出版社2004六、编制说明编制者:系统软件课程组组长:寿永熙执笔人:赵俊生编制时间:2009 年 3 月实验一 进程管理一、实验目的1.学会在Linux中利用系统调用fork()创建进程。2加深对进程概念的理解,明确进程和程序的区别。3. 进一步认识在系统内进程并发执行的实质。4. 分析进程竞争资源的现象,学习解决进程互斥的方法5. 掌握 Linux 中进程通信的基本原理。二、实验类型验证性实验。三、实验预备知识1. 阅读Linux的sched.h源码文件,加深对进程管理概念

6、的理解。2. 阅读 Linux 的 fork.c 源码文件,分析进程的创建过程。四、实验内容1进程的创建【任务】编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中有- 个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符;父进程显示字符“a” 子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。【程序】main()int p1,p2;while(p1=fork()= =-1);if(p1= =0)putchar(b);elseinclude /*创建子进程pl,失败时循环*/*子进程 p1 创建成功*/*父进程返回*/while(p2=f

7、ork()= =-l); /*创建另一个子进程p2,失败时循环*/ if(p2= =0)/*子进程 p2 创建成功*/putchar(c);elseputchar(a);/* 父进程执行 */【执行结果】同学自己得到实验结果。【分析原因】 同学自己分析多次执行产生不同实验结果的原因。2进程的控制【任务】 修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏幕 上出现的现象,并分析其原因。如果在程序中使用系统调用lockf()来给每个进程加锁,可以 实现进程之间的互斥,观察并分析出现的现象。【程序 l】include main()int pl,p2,i; while(pl=

8、fork()= =-l);if(pl= =0) for(i=0;i50;i+) printf(“child %dn”,i);elsewhile(p2=fork()= =-l)if(p2= =0)for(i=0;i50;i+)printf(“son %dn”,i);elsefor(i=0;i50;i+)printf(“daughter %dn”,i);【执行结果】 同学自己得到实验结果。【分析原因】同学自己分析多次执行产生不同实验结果的原因【程序 2】include include main()int p1,p2,i;while(p1=fork()= =-1);if(p1= =0)lockf(1

9、,1,0);/*加锁*/for(i=0;i50;i+)printf(“child %dn”,i);lockf(1,0,0);/*解锁*/elsewhile(p2=fork()= =-1)if(p2= =0)lockf(1,1,0);for(i=0;i50;i+)printf(“son %dn”,i);lockf(1,0,0);elselockf(1,1,0);for(i=0;i50;i+)printf(“daughter %dn”,i);lockf(1,0,0);【执行结果】同学自己得到实验结果。【分析原因】同学自己分析多次执行产生不同实验结果的原因。3软中断通信【任务 1】编制一段程序,使用

10、系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕 捉键盘上来的中断信号(即按 Ctrl+c 键),当捕捉到中断信号后,父进程用系统调用 kill() 向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:child process 1 is killed by parent!child process 2 is killed by parent!父进程等待两个子进程终止后,输出以下信息后终止:parent process is killed!【程序】#include #include #include #include void waiting(),sto

11、p(); int wait_mark;main()int p1,p2; while(p1=fork()= =-1);if(p10)while(p2=fork()= =-1);if(p20)Printf(“parent run!n”);Printf(“p1=%dn”,p1);Printf(“p2=%dn”,p2); wait_mark=1; getchar();kill(p1,16);kill(p1,17);sleep(5);wait(0);wait(0);lockf(stdout,1,0);/*创建进程 p1*/*创建进程 p2*/*向pl发软中断信号16*/*向p2发软中断信号17*/*父进

12、程睡眠 5 秒*/ /*等待子进程结束,同步*/ /*等待另一子进程结束,同步*/ /*标准输出加锁*/printf(parent process is killed!n);lockf(stdout,0,0);exit(0);elseprintf(“p2 run!n”);wait_mark=1;/*标准输出解锁*/*父进程终止*/signal(17,stop);/*接收父进程发来的软中断信号 17,并转 stop*/waiting();lockf(stdout,1,0);/*标准输出加锁*/printf(“child process 2 is killed by parent!n”);lock

13、f(stdout,0,0); exit(0);/*标准输出解锁*/*子进程 p2 终止*/else/*接收父进程发来的软中断信号 16,并转 stop*/*标准输出加锁*/printf(“p1 run!n”); wait_mark=1; signal(16,stop);waiting();lockf(stdout,1,0);printf(“child process 1 is killed by parent!n”); lockf(stdout,0,0);/*标准输出解锁*/exit(0);/*子进程 p1 终止*/void waiting()printf(“waiting begin!n”); while(wait_mark!=0);printf(“waiting end!n”);void stop()wait_mark=0;printf(“signal stop!”);【执行结果】同学自己得到实验结果。【分析原因】同学自己分析产生该实验结果的原因。【任务 2】在上面任务 1 中,增加语句 signal(SIGINT,SIG_IGN)和语句 signal(SIGQUIT,SIG_IG

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号