1、实验目的

(1)加深对进程概念的理解,明确进程和程序的区别。
(2)进一步认识并发执行的实质。
(3)分析进程竞争资源现象,学习解决进程互斥的方法。

2、实验预备内容

(1)阅读Linux的sched.h源文件,加深对进程管理概念的理解。
(2)阅读Linux的fork.c源文件,分析进程的创建过程。

3、实验内容

(1)进程的创建
编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。
(2)进程的控制
修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。
如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。

4、思考

(1)系统是怎样创建进程的?
(2)可执行文件加载时进行了哪些处理?
(3)当首次调用新创建进程时,其入口在哪里?

5、实验过程

5.1进程创建

第一步:

创建fork文件夹,在它下面创建first.c文件

mkdir fork
vim first.c


第二步:

编写程序:

第三步:

编译文件,得到a.out

第四步:

运行文件,观察并记录结果

./a.out

总结:结果为abcbac,因为fork()创建进程所需要的时间要多于输出一个字符的时间,所以为abcbac

写了一个for循环再次验证结论

运行:


分析:由于函数printf()输出的字符串之间不会被中断,因此,字符串内部的字符顺序输出时不变。但是,由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,处处字符串的顺序和先后随着执行的不同而发生变化。(摘自操作系统实验指导书)

5.2 进程控制

修改已经编好的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。
如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。
将上文建立的se.c文件中的代码改为以下代码:

结果:
结果1:

结果2:

分析:当使用lockfdaughterprintf无法被抢占,则先输出daughter,另外两个的先后取决于进程在处理机中的先后顺序。

思考题

(1)系统是怎样创建进程的?
首先,fork() 函数拷贝当前进程创建子进程。产生的子进程与父进程的区别仅在与 PID 与 PPID 以及某些资源和统计量,例如挂起的信号等。准备好进程运行的地址空间后,exec() 函数族负责读取可执行程序,并将其加载到相应的位置开始执行。(来自百度回答)
(2)可执行文件加载时进行了哪些处理?
将源代码转换为机器可认识代码的过程。编译程序读取源程序(字符流),对之进行词法
和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,
并且按照操作系统对可执行文件格式的要求链接生成可执行程序。具体经过以下几个处理:
C源程序一>编译预处理一>编译一>优化程序一>汇编程序一>链接程序一>可执行文件(来自:https://www.cnblogs.com/kazama/p/10734951.html)
(3)当首次调用新创建进程时,其入口在哪里?
在进程队列的ready状态下,由离自己最近的父进程执行调度,即入口在最近的父进程处。(来自百度知道)

操作系统——实验二 进程管理相关推荐

  1. 操作系统实验二 进程管理

    进程管理 一.实验目的 1. 理解进程的概念,明确进程和程序的区别. 2. 理解并发执行的实质. 3. 掌握进程的创建.睡眠.撤销等进程控制方法. 二.实验内容与基本要求 用C语言编写程序,模拟实现创 ...

  2. 计算机操作系统实验二 进程管理

    一.实验目的 1.掌握进程的概念,明确进程的含义 2.认识并了解并发执行的实质 二.实验内容 1.编写一段程序,使用系统调用fork( )创建两个子进程.当此程序运行时,在系统中有一个父进程和两个子进 ...

  3. 操作系统实验一 Linux基本操作|实验二 进程管理

    由于当时没存代码,只有实验文档代码截图,文末也可直接获取实验文档. 操作系统实验 目录 实验一 Linux基本操作 实验二进程管理 实验一 Linux基本操作 1实验目的 1.熟悉在Linux操作系统 ...

  4. 【操作系统实验】实验二 进程管理

    进程管理 实验2-1 使用fork创建进程 代码 实验2-2 使用exec替换子进程程序 代码 实验2-3 分析进程的父进程 代码 实验2-4 共享存储区机制进程通信 代码 实验2-5 消息队列实现进 ...

  5. 操作系统实验二进程的创建控制实验(含代码及实验心得)

    实现工具:PC机 实现环境:Linux 实习内容(功能.目标): 实验目的:  创建进程,体会进程间的并发特征. 实验内容:  编写一段程序,使用系统调用 fork() 创建两个子进程 p1 和 p2 ...

  6. 2020 操作系统 实验二 进程通信

    实验二.进程通信 一.实验名称 进程通信 二.实验目的 掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法. 三.实验原理 邮箱机制类似于日常使用的信 ...

  7. 操作系统实验二——进程调度算法(FCFS、RR)

    目录 进程调度算法 FCFS算法代码 RR算法代码 进程调度算法 FCFS算法代码 #include <stdio.h> #include <string.h> #includ ...

  8. 操作系统 实验一 进程管理与进程同步

    理解安全性算法和银行家算法的核心机制: 针对3类资源.5个进程的情况,设计相应的数据结构,分别表示每个进程占用各类资源的情况: 编程实现安全性算法函数,编制主函数,动态输入资源的占用情况,进程的资源申 ...

  9. 广州大学2020操作系统实验二:银行家算法

    相关资料 广州大学2020操作系统实验一:进程管理与进程通信 广州大学2020操作系统实验二:银行家算法 广州大学2020操作系统实验三:内存管理 广州大学2020操作系统实验四:文件系统 广州大学2 ...

最新文章

  1. 二叉树中和为某一值的路径
  2. Google Test(GTest)使用方法和源码解析——断言的使用方法和解析
  3. Android消息广播的使用
  4. hdu 5157(manacher+前缀和+树状数组)
  5. Jquery常用标签
  6. 网络防火墙实战-基于pfsense(1)
  7. 架构专家梁勇:哈啰在分布式消息治理和微服务治理中的实践
  8. 《ArcGIS Runtime SDK for Android开发笔记》——(8)、关于ArcGIS Android开发的未来(“Quartz”版Beta)...
  9. 12个有趣的C语言问答_sunyrising-ChinaUnix博客
  10. R中双表操作学习[转载]
  11. 预科阶段:快速实战入门
  12. 关于Docker的一些问题总结
  13. Mysql数据库实现分页查询
  14. c语言输出菱形for循环_c语言输出菱形(c语言for循环打印菱形)
  15. 线程插队--Join方法
  16. 如何选用GPU云服务器?
  17. 此windows不是正版
  18. ASP.NET Core MVC 中的模型验证
  19. Deepin Linux15 华为荣耀笔记本MagicBook2019使用-安装深度应用商店和应用软件
  20. 信息安全工程师报考完毕!

热门文章

  1. 八字得令得地得势--论六亲第5节
  2. QT 创建使用动态库
  3. 字节码文件及字节码指令
  4. 支付宝扫码支付(沙箱环境)
  5. 哪些业务需要办理直播类文网文?具体办理流程
  6. 网络之路由器工作原理
  7. vivo S15系列凭什么高居2500元-3500元最值得买手机排行榜榜首?
  8. ViewModel的基本使用
  9. 超神!华为工程师又爆新作,这两份“典藏限量级”计算机操作系统与计算机网络,让你圆梦BAT
  10. 问题解决:idea 文件标签栏如何多行显示,不折叠