预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共19页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

操作系统实验报告 计算机科学与技术学院 目录 一、进程控制实验 实验目的 加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观 察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销 状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关 系。练习Linux系统中进程创建与控制有关的系统调用的编程和调试技 术。 示例实验 实验内容 以下实验示例程序应实现一个类似shell子命令的功能,它可以从执行程 序中启动另一个新的子进程并执行一个新的命令和其并发执行。实验演示结 果 独立实验 实验内容 参考以上示例程序中建立并发进程的方法,编写一个父子协作进程,父进 程创建一个子进程并控制它每隔3秒显示一次当前目录中的文件名列表。 实验步骤 算法设计 通过进程间的通讯,先创建一个父进程一个子进程,父进程沉睡3秒,子 进程作为当前父进程再次创建一个他的子进程,当前子进程执行显示当前 目录文件列表功能,执行execve()方法后死亡。While(1)在死循环里无限 进行当前操作。即达到父进程创建一个子进程并控制它每隔3秒显示一次 当前目录中的文件名列表的要求。 开发调试过程 打开一终端命令行窗体,新建一个文件夹,在该文件夹中建立名为的C语 言程序; 再建立以下名为的C语言头文件; 建立项目管理文件Makefile; 输入make命令编译连接生成可执行的pctl程序; 执行pctl程序; 再次执行带有子进程指定执行命令的pctl程序。 思考与分析 1.反映的进程的特征和功能,在真实的操作系统中是怎样实现和反映出教 材中讲解的进程的生命期、进程的实体和进程状态控制的。对于进程概念 和并发概念有哪些新的理解和认识子进程是如何创建和执行新程序的 答:进程是一个可并发执行的程序在某数据集上的一次运行,是程序的一 次运行过程。而程序只是进程的一个组成部分,进程是程序的执行过程。 程序是静态的指令集合,而进程是动态的过程实体,是动态的产生、发展 和消失。此外所谓的进程并发执行是在宏观上并发,而在微观上交替执行。 每个进程都用一个唯一的整数形式的进程标识符来标识,通过fork()系统 调用,可创建新进程。新进程通过复制原来进程的地址空间而成。这种机 制允许父子进程方便的进行通信。 系统调用fork(),得到的子进程实际上是父进程的克隆体,要执行不同的 新程序要使用系统调用exec(),以用新程序来取代进程的内存空间。其功 能是根据参数指定的文件名找到程序文件,把它装入内存,覆盖原来进程 的映像,形成一个不同于父进程的子进程。除了进程映像被更换之外,新 进程的PID及其他PCB属性均保持不变,实际上是一个新进程“借壳”原 来子进程开始运行。父进程可通过系统调用waitpid()来把自己移出就绪 队列来等待子进程的终止。 2.信号的机理是什么怎样利用信号实现进程控制 每个信号对应一个正整数常量(为signal?number。定义在系统头文件<> 中),代表同一用户的诸进程之间传送事先约定的信息的类型,用于通知 某进程发生了某异常事件。每个进程运行时,要通过信号机制来检查是否 有信号到达。若有,中断正在执行的程序,转向该信号相对应的处理程序, 已完成对事件的处理;处理结束后再返回到原来的断点继续执行。 实验演示结果 实验代码 文件: intmain() { sleep(3);后再输出各自进程号、优先数和调度策略。以上行为通过 for()语句循环。 开发调试过程 新建一个文件夹,在该文件夹中建立以下名为的C语言程序。 再建立以下名为的C语言头文件。 建立项目管理文件Makefile。 输入make命令编译连接生成可执行的pctl程序。 执行并调试pctl程序 思考与分析 进程调度调度策略和功能如下所示: SCHED_OTHER默认的分时调度策略(值等于0) SCHED_FIFO先进先先出调度策略(值等于1) SCHED_RR时间片轮转调度策略(值等于2) 进程调度本质就是让谁先执行,让谁后执行。在真实的操作系统中,由调 度策略和优先级决定谁先执行。Linux的调度策略有三种,SCHED_OTHER 分时调度,SCHED_FIFO先进先出,SCHED_RR时间片轮转。后两种专用于 对响应时间有特殊要求的进程,并且会抢先于SCHED_OTHER调度策略的 进程而执行。通过这个系统调用设置进程调度策略, intsched_setscheduler(pid_tpid,intpolicy,co