操作系统实验报告
计算机科学与技术学院
目录
一、 进程控制实验 ................................................................................................... 1.1 实验目的 ................................................................................................................ 1.2示例实验 ................................................................................................................... 1.2.1实验内容 ................................................................................................................ 1.3独立实验 ................................................................................................................... 1.3.1实验内容 ................................................................................................................ 1.3.2实验步骤 ................................................................................................................ 1.3.3实验演示结果 ........................................................................................................ 1.3.4实验代码 ................................................................................................................ 二、进程调度算法实验 ................................................................................................. 2.1 实验目的 ................................................................................................................ 2.2示例实验 ................................................................................................................... 2.2.1实验内容 ................................................................................................................ 2.2.2实验演示结果 ........................................................................................................ 2.3独立实验 ................................................................................................................... 2.3.1实验内容 ................................................................................................................ 2.3.2实验步骤 ................................................................................................................ 2.3.3实验演示结果 ........................................................................................................ 2.3.4实验代码 ................................................................................................................ 二、 进程同步实验 ................................................................................................... 3.1 实验目的 ................................................................................................................ 3.2示例实验 ................................................................................................................... 3.2.1实验内容 ................................................................................................................ 3.2.2实验演示结果 ........................................................................................................ 3.3独立实验 ................................................................................................................... 3.3.1实验内容 ................................................................................................................ 3.3.2实验步骤 ................................................................................................................ 3.3.3实验演示结果 ........................................................................................................ 3.3.4实验代码 ................................................................................................................ 三、 内存页面置换算法实验 ................................................................................... 4.1 实验目的 ................................................................................................................ 4.2示例实验 ................................................................................................................... 4.2.1实验内容 ................................................................................................................ 4.2.2实验演示结果 ........................................................................................................ 4.3独立实验 ................................................................................................................... 4.3.1实验内容 ................................................................................................................ 4.3.2实验步骤 ................................................................................................................ 4.3.3实验演示结果 ........................................................................................................ 4.3.4实验代码 ................................................................................................................ 四、 磁盘移臂调度算法实验 ...................................................................................
5.1 实验目的 ................................................................................................................ 5.2示例实验 ................................................................................................................... 5.2.1实验内容 ................................................................................................................ 5.2.2实验演示结果 ........................................................................................................ 5.3独立实验 ................................................................................................................... 5.3.1实验内容 ................................................................................................................ 5.3.2实验步骤 ................................................................................................................ 5.3.3实验演示结果 ........................................................................................................ 5.3.4实验代码 ................................................................................................................
一、 进程控制实验
1.1 实验目的
加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习 Linux 系统中进程创建与控制有关的系统调用的编程和调试技术。 1.2示例实验 1.2.1实验内容
以下实验示例程序应实现一个类似shell 子命令的功能,它可以从执行程序中启动另一个新的子进程并执行一个新的命令和其并发执行。1.2.2实验演示
结果
1.3独立实验 1.3.1实验内容
参考以上示例程序中建立并发进程的方法,编写一个父子协作进程,父进程创建一个子进程并控制它每隔 3 秒显示一次当前目录中的文件名列表。 1.3.2实验步骤
1.3.2.1算法设计
通过进程间的通讯,先创建一个父进程一个子进程,父进程沉睡3秒,子进程作为当前父进程再次创建一个他的子进程,当前子进程执行显示当前目录文件列表功能,执行execve()方法后死亡。While(1)在死循环里无限
进行当前操作。即达到父进程创建一个子进程并控制它每隔3秒显示一次当前目录中的文件名列表的要求。
1.3.2.2开发调试过程
打开一终端命令行窗体,新建一个文件夹,在该文件夹中建立名为pctrl.c的C语言程序;
再建立以下名为 pctrl.h 的 C 语言头文件; 建立项目管理文件 Makefile;
输入 make 命令编译连接生成可执行的 pctl 程序; 执行 pctl 程序;
再次执行带有子进程指定执行命令的 pctl 程序。
1.3.2.3思考与分析
1.反映的进程的特征和功能,在真实的操作系统中是怎样实现和反映出教材中讲解的进程的生命期、进程的实体和进程状态控制的。对于进程概念和并发概念有哪些新的理解和认识?子进程是如何创建和执行新程序的?
答:进程是一个可并发执行的程序在某数据集上的一次运行,是程序的一次运行过程。而程序只是进程的一个组成部分,进程是程序的执行过程。程序是静态的指令集合,而进程是动态的过程实体,是动态的产生、发展和消失。
此外所谓的进程并发执行是在宏观上并发,而在微观上交替执行。每个进程都用一个唯一的整数形式的进程标识符来标识,通过fork()系统调用,可创建新进程。新进程通过复制原来进程的地址空间而成。这种机制允许父子进程方便的进行通信。
系统调用fork(),得到的子进程实际上是父进程的克隆体,要执行不同的新程序要使用系统调用exec(),以用新程序来取代进程的内存空间。其功能是根据参数指定的文件名找到程序文件,把它装入内存,覆盖原来进程的映像,形成一个不同于父进程的子进程。除了进程映像被更换之外,新进程的PID及其他PCB属性均保持不变,实际上是一个新进程“借壳”原来子进程开始运行。父进程可通过系统调用waitpid()来把自己移出就绪队列来等待子进程的终止。
2.信号的机理是什么?怎样利用信号实现进程控制?
每个信号对应一个正整数常量(为signalnumber。定义在系统头文件
1.3.3实验演示结果 1.3.4实验代码 pctl.c文件:
#include \int main() {
int pid_1,pid_2; //存放子进程号
int status_1,status_2; //存放子进程返回状态 while(1){ pid_1=fork() ; if(pid_1<0) // 建立子进程失败 { printf(\ exit(EXIT_FAILURE); }
if(pid_1 == 0) // 子进程执行代码段 { //报告父子进程进程号 printf(\返回当前进程的进程号,getppid 返回当前进程父进程的进程号*/ pid_2=fork(); if(pid_2<0)// 建立子进程失败 { printf(\ exit(EXIT_FAILURE); }
if(pid_2==0) // 子进程执行代码段 {//报告父子进程进程号
printf(\ printf(\子进程被键盘中断信号唤醒继续执行*/ status_2=execve(\装入并执行新的程序 }else{ printf(\ waitpid(pid_2,&status_2,0);//等待子进程2结束 //status 用于保留子进程的退出状态 } printf(\装入并执行新的程序 char *argv[]={\ status_1 = execve(\ } else{ printf(\ printf(\ waitpid(pid_1,&status_1,0); printf(\ sleep(3);// sleep 函数会令调用进程的执行挂起睡眠3秒 } }
return EXIT_SUCCESS; }
pctl.h文件:
#include
//进程自定义的键盘中断信号处理函数 typedef void (*sighandler_t) (int); void sigcat(){