当前位置:
文档之家› 操作系统实验指导书(清华版)
操作系统实验指导书(清华版)
【程序1】
#include <stdio.h>
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)
exit(0);
}
else
{
printf(“parent run!\n”);
signal(SIGINT,intdelete);
waitpid(-1,&exitpid,0);
printf(“parent process is killed!\n”);
exit(0);
}
}
}
【执行结果】
同学自己得到实验结果。
if(p2>0)
{
Printf(“parentrun!\n”);
Printf(“p1=%d\n”,p1);
Printf(“p2=%d\n”,p2);
wait_mark=1;
getchar();
kill(p1,16);/*向p1发软中断信号16*/
kill(p1,17);/*向p2发软中断信号17*/
#includede <signal.h>
void waiting(),stop();
int wait_mark;
main()
{
int p1,p2;
while((p1=fork())= =-1);/*创建进程p1*/
if(p1>0)
{
while((p2=fork())= =-1); /*创建进程p2*/
exit(0); /*父进程终止*/
}
else
{
printf(“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”);
【分析原因】
同学自己分析产生该实验结果的原因。
(二)实验内容
设计并运行一个简单的SPOOLing系统来模拟实际的SPOOLing输入/输出过程,以掌握这种以空间换时间的技术。要求将SPOOLing输入/输出处理程序编成一个独立的进程模块并与其他请求输入/输出的进程并发运行。SPOOLing进程负责把从输入设备输入的信息送到外存输入井中,或把外存输出井中的信息送到打印机等输出设备上输出。其余进程只要求编写输入/输出部分的程序。要求定义实施算法的相关数据结构,实现设备分配和SPOOLing算法。
lockf(stdout,0,0);/*标准输出解锁*/
exit(0); /*子进程p2终止*/
}
}
else
{
printf(“p1 run!\n”);
wait_mark=1;
signal(16,stop); /*接收父进程发来的软中断信号16,并转stop*/
waiting();
lockf(stdout,1,0); /*标准输出加锁*/
【程序】
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
int pid1,pid2;
int endflag=0,pf1=0,pf2=0;
void intdelete()
{
kill(pid1,16);
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);
child process 1 is killed by parent!
child process 2 is killed by parent!
父进程等待两个子进程终止后,输出以下信息后终止:
parent process is killed!
【程序】
#include <sys/types.h>
#include <unistd.h>
《
一、基本信息
课程编码
020213008
课程学时
56
课程类别
学科基础课程
实验总学时
10
开出学期
5
开出单位
计算机系
适用专业
计算机科学与技术、软件工程
二、实验安排
序号
实验项目
实验学时
每组人数
实验类型
开出要求
1
实验一进程管理
4
1
验证
必做
2
实验二SPOOLing技术实现
6
1
设计
必做
三、实验目的、内容与要求
实验一进程管理
每个实验考核:实验预习占30%,实验能力和效果占30%,实验报告占40%。
五、建议教材与教学参考书
1.课程教材
[1] 张尧学. 计算机操作系统教程. 第三版. 北京:清华大学出版社. 2006
[2]赵俊生.操作系统实验指导书.自编.2008
2.教学参考书
[1]汤小丹.计算机操作系统.第三版.西安:西安电子科技大学出版社.2008
#include <unistd.h>
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);/*解锁*/
(三)实验要求
1.掌握SPOOLing技术的实现;
2.根据实验内容,在Linux平台上用C语言编程实现,上机调试运行得出实验结果;
3.写出预习报告和实验报告。
四、考核方式
实验成绩占课程总成绩的比重为10%。
考核方式根据实验课考勤、课前预习情况、课上实验能力、原型系统效果验收与实验报告的完成情况综合评分。
lockf(1,0,0);
}
}
}
【执行结果】
同学自己得到实验结果。
【分析原因】
同学自己分析多次执行产生不同实验结果的原因。
3.软中断通信
【任务1】
编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:
for(i=0;i<50;i++)
printf(“son %d\n”,i);
else
for(i=0;i<50;i++)
printf(“daughter %d\n”,i);
}
}
【执行结果】
同学自己得到实验结果。
【分析原因】
同学自己分析多次执行产生不同实验结果的原因。
【程序2】
#include <stdio.h>
kill(pid2,17);
endflag=1;
}
void int1()
{
printf(“child process 1 is killed by parent!”);
exit(0);
}
void int2()
{
printf(“child process 2 is killed by parent!”);
if(p2= =0)/*子进程p2创建成功*/
putchar(‘c’);
else
putchar(‘a’); /*父进程执行*/
}
}
【执行结果】
同学自己得到实验结果。
【分析原因】
同学自己分析多次执行产生不同实验结果的原因。
2.进程的控制
【任务】
修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现象,并分析其原因。如果在程序中使用系统调用lockf()来给每个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。
[2]徐虹.操作系统实验指导.北京:清华大学出版社.2004
[3]屠祁.操作系统基础.第三版.北京:清华大学出版社.2000
[4]冯耀霖.操作系统.西安:西安电子科技大学出版社.2001
[5]左万历.计算机操作系统教程.第二版.北京:高等教育出版社.2004
六、编制说明
编制者:系统软件课程组组长:寿永熙
exit(0);
}
main()
{
int exitpid;
signal(SIGINT,SIG_IGN);
signal(SIGQUIT,SIG_IGN);
while((pid1=fork())= =-1);
if(pid1= =0)
{
printf(“process 1 run!\n”);
signal(SIGUSR1,int1);