操作系统实验报告.docx_第1页
操作系统实验报告.docx_第2页
操作系统实验报告.docx_第3页
操作系统实验报告.docx_第4页
操作系统实验报告.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验二 进程管理(一) 进程的创建实验思考题:1. 系统是怎样创建进程的?解: linux 系统创建进程都是用 fork() 系统调用创建子进程.2. 当首次调用新创建进时,其入口在哪里?解: 由 fork() 系统调用创建的新进程被称为子进程。该函数被调用一次,但返回两次。如果 fork()进程调用成功,两次返回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程 . 实验二 进程管理(二)进程的控制实验思考题:1. 可执行文件加载时进行了哪些处理?解:可执行文件加载时首先是创建一个新进程的fork系统调用,然后用于实现进程自我终止的exit系统调用;改变进程原有代码的exec系统调用;用于将调用进程挂起并等待子进程终止的wait系统调用;获得进程标识符的getpid系统调用等处理过程。2. 什么是进程同步?wait(0)是如何实现进程同步的?解:进程同步是指对多个相关进程在执行次序上进行协调,以使并发执行的主进程之间有效地共享资源和相互合作,从而使程序的执行具有可在现行。 首先程序在调用fork()机那里了一个子进程后,马上调用wait(),使父进程在子进程调用之前一直处于睡眠状态,这样就使子进程先运行,子进程运行exec()装入命令后,然后调用wait(0),使子进程和父进程并发执行,实现进程同步。实验三 进程间的通信(一) 信号机制实验一参考程序#include#include#includeVoid waiting(),stop();Int wait_mark;Main() Int P1,P2,stdout;While(P1=fork()=-1); /*创建子进程P1*/If(P10)While(p2=fork()=-1); /*创建子进程P2*/If(P20)Wait_mark=1;Signal(SIGINT,stop); /*接收到C信号,转stop*/Waiting();Kill(P1,16); /*向P1发软中断信号16*/Kill(P2,17); /*向P2发软中断信号17*/Wait(0); /*同步*/Wait(0);Printf(“Parent process is killed!n”);Exit(0);Else Wait_mark=1;Signal(17,stop); /*接收到软中断信号17,转stop*/Waiting();Lockf(stdout,1,0);Printf(“Child process 2 is killed by parent!n);Lockf(stdout,0,0);Exit(0);ElseWait_mark=1;Signal(16,stop); /*接收到软中断信号16,转stop*/Waiting();Lockf(stdout,1,0);Printf(“Child process 1 is killed by parent!n”);Lockf(stdout,0,0);Exit(0); Void waiting() While(wait_mark!=0);Void stop()Wait_mark=0;思考题:1. 该程序段前面部分用了两个wait(0),他们起什么作用?解:用了两个wait(0)的作用是同时使两个子进程P1和P2发出软中断信号,而不用等待。2. 该程序段中每个进程退出时都用了语句exit(0),为什么?解:用exit(0)的作用是使子进程实现自我终止,正常退出此次操作,返回操作系统。3. 为何预期的结果并未显示出来?解:因为只执行成功两个子进程,但是并没有调用两个子进程P1,P2。当signal()让父进程捕捉从键盘上来的信号(按下C或者break键时),只有捕捉到信号后,父进程用系统调用kill()向两个子进程发出信号。当子进程捕捉到信号后才能输出信息,之后父进程输出信息。4. 程序该如何修改才能得到正确结果?#include#include#includeVoid waiting(),stop(),alarming();Int wait_mark;Main() Int P1,P2,stdout;if (P1=fork(); /*创建子进程P1*/If (p2=fork(); /*创建子进程P2*/Wait_mark=1;Signal(SIGINT,stop); /*接收到C信号,转stop*/Signal(SIGALRM,alarming);/*接收SIGALRM*/Waiting();Kill(P1,16); /*向P1发软中断信号16*/Kill(P2,17); /*向P2发软中断信号17*/Wait(0); /*同步*/Wait(0);Printf(“Parent process is killed!n”);Exit(0);Else Wait_mark=1;Signal(17,stop); /*接收到软中断信号17,转stop*/Signal(17,stop);Signal(SIGINT,SIG_IGN);/*忽略C信号*/While(wait_mark!=0);Lockf(stdout,1,0);Printf(“Child process 2 is killed by parent!n);Lockf(stdout,0,0);Exit(0);ElseWait_mark=1;Signal(16,stop); /*接收到软中断信号16,转stop*/Signal(SIGINT,SIG_IGN);While(wait_mark!=0)Lockf(stdout,1,0);Printf(“Child process 1 is killed by parent!n”);Lockf(stdout,0,0);Exit(0); Void waiting()Sleep(5);if(wait_mark!=0);kill(getpid(),SIGALRM);Void alarming()Wait_mark=0;Void stop();Wait_mark=05. 不修改程序如何得到期望的输出?解:不做任何操作等待五秒钟父进程会在子进程先退出后退出,并打印退出顺序。(二) 进程的管道通信实验思考题:1. 程序中的sleep(5)起什么作用?解:sleep(5)是使管道自我阻塞5秒,这样做的目的是令读进程把管道中的已有数据读完后,暂时进入睡眠状态等待,直至写进程又将数据写入管道后,再将读进程唤醒。2. 子进程1和子进程2为什么也能对管道进行操作?解:因为他们的读指针和写指针都指向了管道的索引节点。实验四 存储管理常用页面置换算法模拟实验思考题:1.从分析算法的命中率看,OPT最高,其次是NUR相对较高,而FIFO与LRU相差无几,最低的是LFU?从上述结果可知,在内页面数较少(45)时,五种算法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论