操作系统报告

更新时间:2023-10-03 00:01:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

操作系统实验报告

班级:计133-1

姓名:赵孟伟

学号:201358503148

日期:2015.11.08

目录

1.实验内容 ................................................................. 3

2.实验目的 ................................................................. 3

3.实验题目与分析设计 ....................................................... 3

4.程序运行时的初值和运行结果 .............................................. 16

5.实验体会 ................................................................ 19

附录 ...................................................................... 20

1. 源程序并附上注释 .................................................. 20

1.实验内容

进程管理和进程间的通信

2.实验目的

进程管理实验目的如下:

(1) 加深对进程概念的理解,明确进程和程序的区别。 (2) 进一步认识并发执行的实质。

(3) 分析进程竞争资源现象,学习解决进程互斥的方法。 (4) 了解Linux系统中进程通信的基本原理。 进程通信实验目的如下:

Linux系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据。本实验的目的就是了解和熟悉Linux支持的消息通讯机制及信息量机制。

3.实验题目与分析设计

进程管理实验题目如下: (1)进程的创建

编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。

分析:

程序的运行结果为acb(有时候会出现abc的任意的序列)。

从进程执行并发来看,输出abc的排列都是有可能的。原因:fork()创建进程所需的时间虽然可能多于输出一个字符的时间,但各个进程的时间片的获得却不是一定是顺序的,所以输出abc的排列都是有可能的。进程之间的调度是随机发生的,并没有谁先谁后的问题。即使是同一个创建进程的程序,不同时间运行输出的结果也不同。fork出来的进程不能确定子进程和父进程谁先执行,是随机的,所以每次执行的结果可能会不一样的! 程序的流程图如下:

(2)进程的控制

修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。 分析:

由于函数printf()输出的字符串之间不会被中断,因此,每个字符串内部的字符顺序输出时不变。但是 , 由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。这与打印单字符的结果相同。输出parent,son,grandchild都是随机的,不是按块的输出的。

程序流程图如下:

如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。

本文来源:https://www.bwwdw.com/article/63xd.html

Top