操作系统实验报告

时间:2024.4.20

                实验二   进程管理

(一)    进程的创建实验

思考题:

1.     系统是怎样创建进程的?

解: linux 系统创建进程都是用 fork() 系统调用创建子进程.

2.     当首次调用新创建进时,其入口在哪里?

解: 由 fork() 系统调用创建的新进程被称为子进程。该函数被调用一次,但返回两次。如果 fork()进程调用成功,两次返回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程 .

实验二   进程管理

(二)进程的控制实验

思考题:

1.     可执行文件加载时进行了哪些处理?

解:可执行文件加载时首先是创建一个新进程的fork系统调用,然后用于实现进程自我终止的exit系统调用;改变进程原有代码的exec系统调用;用于将调用进程挂起并等待子进程终止的wait系统调用;获得进程标识符的getpid系统调用等处理过程。

2.     什么是进程同步?wait(0)是如何实现进程同步的?

解:进程同步是指对多个相关进程在执行次序上进行协调,以使并发执行的主进程之间有效地共享资源和相互合作,从而使程序的执行具有可在现行。

     首先程序在调用fork()机那里了一个子进程后,马上调用wait(),使父进程在子进程调用之前一直处于睡眠状态,这样就使子进程先运行,子进程运行exec()装入命令后,然后调用wait(0),使子进程和父进程并发执行,实现进程同步。

实验三  进程间的通信

(一)信号机制实验

一.参考程序

#include<stdio.h>

#include<signal.h>

#include<unistd.h>

Void waiting(),stop();

Int wait_mark;

Main()

{

 Int P1,P2,stdout;

While((P1=fork())==-1); /*创建子进程P1*/

If(P1>0)

{

While((p2=fork())==-1); /*创建子进程P2*/

If(P2>0)

{

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);

}

}

Else

{

Wait_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<stdio.h>

#include<signal.h>

#include<unistd.h>

Void 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);

}

}

Else

{

Wait_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=0

}

5.     不修改程序如何得到期望的输出?

解:不做任何操作等待五秒钟父进程会在子进程先退出后退出,并打印退出顺序。

(二)            进程的管道通信实验

思考题:

1.     程序中的sleep(5)起什么作用?

解:sleep(5)是使管道自我阻塞5秒,这样做的目的是令读进程把管道中的已有数据读完后,暂时进入睡眠状态等待,直至写进程又将数据写入管道后,再将读进程唤醒。

2.     子进程1和子进程2为什么也能对管道进行操作?

解:因为他们的读指针和写指针都指向了管道的索引节点。

实验四  存储管理

常用页面置换算法模拟实验

思考题:

1.从分析算法的命中率看,OPT最高,其次是NUR相对较高,而FIFO与LRU相差无几,最低的是LFU?

从上述结果可知,在内页面数较少(4~5)时,五种算法的命中率差别不大,都是30%左右,在内页面为7~18个页面之间,五种算法的访内命中率大致在35%~60%之间变化。但是,FIFO算法与OPT算法直接爱你的差别一般在6~10个百分点左右。在内页面为25~32个页面时,由于用户进程的所有指令基本都已装入内存,是命中率增加。因而OPT算法运行有可能出现错误。


第二篇:操作系统实验报告四


《操作系统原理》实验报告

实验序号: 04 实验项目名称:进程控制

操作系统实验报告四

操作系统实验报告四

操作系统实验报告四

操作系统实验报告四

操作系统实验报告四

操作系统实验报告四

操作系统实验报告四

更多相关推荐:
操作系统实验报告 完全版

《计算机操作系统》实验报告班级:姓名:学号:实验一进程控制与描述一、实验目的通过对Windows2000编程,进一步熟悉操作系统的基本概念,较好地理解Windows2000的结构。通过创建进程、观察正在运行的进…

操作系统实验报告

操作系统实验报告实验名称理解UNIXLINUXShell及UNIX的进程树成绩专业班级计科姓名学号联系电话实验日期20xx年12月5日实验报告日期20xx年12月5日一实验名称理解UNIXLINUXShell及...

操作系统实验报告

目录实验一进程的创建2实验二进程控制3实验三进程的管道通信4实验四消息通信6实验五进程调度算法8实验六FIFO页面置换算法12实验七LRU页面置换算法14实验八磁盘调度18实验一进程的创建1一实验目的编写一段程...

操作系统实验报告

操作系统实验报告学号姓名班级实验一实验报告实验名称并发程序设计实验1实验目的掌握在程序中创建新进程的方法观察并理解多道程序并发执行的现象实验原理fork建立子进程子进程得到父进程地址空间的一个复制返回值成功时该...

计算机操作系统课程设计报告

《操作系统原理》实验报告院(部):管理工程学院专业:信息管理与信息系统实验项目:实验一二三五班级:信管102姓名:学号:目录引言.........................................…

操作系统课程设计实验报告

操作系统课程设计实验报告姓名学号班级地点20xx年月日任务说明共完成四个任务任务一IO系统调用开销比较任务二实现一个简单的shell任务三进程线程同步任务四文件内容的并行搜索其中任务一完成了标准c和unix下的...

操作系统实验报告

郑州航空工业管理学院计算机科学与应用系课程设计报告操作系统原理操作系统课程设计目录1题目简述22需求分析221设计思想222要求323任务324运行环境325开发工具33概要设计与详细设计331系统流程图332...

操作系统原理实验报告(最终版)

键入文字课程名称学院专业班姓名学号指导教师XX学校实验报告20xx年3月目录实验1进程管理3一实验目的3二实验内容3三实验要求3四程序说明和程序流程图4五程序代码5六程序运行结果及分析7七指导教师评议8实验2进...

操作系统实验报告

实验二进程管理二进程的控制实验思考题1可执行文件加载时进行了哪些处理解可执行文件加载时首先是创建一个新进程的fork系统调用然后用于实现进程自我终止的exit系统调用改变进程原有代码的exec系统调用用于将调用...

操作系统 实验报告 文件管理

昆明理工大学信息工程与自动化学院学生实验报告201201学年第二学期课程名称操作系统开课实验室年月日一实验目的用C或C语言编写和调试一个简单的文件系统模拟文件管理的基本功能从而对各种文件操作命令的实质内容和执行...

操作系统实验报告四

操作系统实验报告实验序号04实验项目名称进程控制

操作系统实验报告

实验一LinuxUNIX操作系统使用命令解释程序1目的通过本实验熟悉UNIX或Linux操作系统及C语言熟悉系统调用的编程能力程序中允许使用库函数2内容利用C语言编写一个微型命令解释程序接受并解释以下命令dir...

操作系统实验报告(38篇)