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

  • 格式:doc
  • 大小:747.00 KB
  • 文档页数:19

操作系统实验指导书

操作系统课程组 编

内蒙古工业大学

信息工程学院计算机系

二〇一三年九月 I 目 录

《操作系统》实验教学大纲........................................................................................ 1

实验一 进程管理.......................................................................................................... 1

实验二 SPOOLing技术实现 ..................................................................................... 12

1 《操作系统》实验教学大纲

一、基本信息

课程编码 020213008 课程学时 56

课程类别 学科基础课程 实验总学时 10 开出学期 5

开出单位 计算机系 适用专业 计算机科学与技术、软件工程

二、实验安排

序号 实 验 项 目 实验学时 每组人数 实验类型 开出要求

1 实验一 进程管理 4 1 验证 必做

2 实验二 SPOOLing技术实现 6 1 设计 必做

三、实验目的、内容与要求

实验一 进程管理

(一)实验目的

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] 赵俊生.操作系统实验指导书.自编.2008

2.教学参考书

[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”。试观察记录屏幕上的显示结果,并分析原因。

【程序】

#include

main()

{

int p1,p2;

while((p1=fork())= =-1); /*创建子进程p1,失败时循环*/

if(p1= =0) /*子进程p1创建成功*/

putchar(‘b’);

else /*父进程返回*/

{ 2 while((p2=fork())= =-1); /*创建另一个子进程p2,失败时循环*/

if(p2= =0) /*子进程p2创建成功*/

putchar(‘c’);

else

putchar(‘a’); /*父进程执行*/

}

}

【执行结果】

同学自己得到实验结果。

【分析原因】

同学自己分析多次执行产生不同实验结果的原因。

2.进程的控制

【任务】

修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现象,并分析其原因。如果在程序中使用系统调用lockf()来给每个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。

【程序1】

#include

main()

{

int p1,p2,i;

while((p1=fork())= =-1);

if(p1= =0)

for(i=0;i<50;i++)

printf(“child %d\n”,i);

else

{

while((p2=fork())= =-1)

if(p2= =0)

for(i=0;i<50;i++) 3 printf(“son %d\n”,i);

else

for(i=0;i<50;i++)

printf(“daughter %d\n”,i);

}

}

【执行结果】

同学自己得到实验结果。

【分析原因】

同学自己分析多次执行产生不同实验结果的原因。

【程序2】

#include

#include

main()

{

int p1,p2,i;

while((p1=fork())= =-1);

if(p1= =0)

{

lockf(1,1,0); /*加锁*/

for(i=0;i<50;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;i<50;i++) 4 printf(“son %d\n”,i);

lockf(1,0,0);

}

else

{

lockf(1,1,0);

for(i=0;i<50;i++)

printf(“daughter %d\n”,i);

lockf(1,0,0);

}

}

}

【执行结果】

同学自己得到实验结果。

【分析原因】

同学自己分析多次执行产生不同实验结果的原因。

3.软中断通信

【任务1】

编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按任意字母键和Enter键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:

child process 1 is killed by parent!

child process 2 is killed by parent!

父进程等待两个子进程终止后,输出以下信息后终止:

parent process is killed!

【程序】

#include

#include

#include

#include