西北工业大学操作系统实验五.docx
- 文档编号:5165002
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:8
- 大小:250.13KB
西北工业大学操作系统实验五.docx
《西北工业大学操作系统实验五.docx》由会员分享,可在线阅读,更多相关《西北工业大学操作系统实验五.docx(8页珍藏版)》请在冰豆网上搜索。
西北工业大学操作系统实验五
西北工业大学
《操作系统》实验报告
目录
一进程3
1.1进程的概念及含义;3
1.2进程与程序:
3
二使用系统调用fork()创建两个子进程4
2.1编写程序代码4
2.2编译执行5
2.3分析总结6
三将程序改为每个进程输出一句话6
3.1编写程序代码6
3.2编译执行7
四使用调用lockf()来给每一个子进程加锁8
4.1编写程序代码8
4.2编译执行9
4.3结果分析9
五实验总结10
一进程
参考资料:
1《计算机操作系统教程》
2《FreeBSD使用手册.pdf》
3《实验五》
4【转】使用VI编辑器写C语言程序-博客频道-CSDN.NET
5linux中fork()函数详解
1.1进程的概念及含义;
系统允许一个进程创建新进程,新进程即为子进程,子进程还可以创建新的子进程,形成进程树结构模型。
整个linux系统的所有进程也是一个树形结构。
树根是系统自动构造的,即在内核态下执行的0号进程,它是所有进程的祖先。
由0号进程创建1号进程(内核态),1号负责执行内核的部分初始化工作及进行系统配置,并创建若干个用于高速缓存和虚拟主存管理的内核线程。
随后,1号进程调用execve()运行可执行程序init,并演变成用户态1号进程,即init进程。
它按照配置文件/etc/initab的要求,完成系统启动工作,创建编号为1号、2号...的若干终端注册进程getty。
每个getty进程设置其进程组标识号,并监视配置到系统终端的接口线路。
当检测到来自终端的连接信号时,getty进程将通过函数execve()执行注册程序login,此时用户就可输入注册名和密码进入登录过程,如果成功,由login程序再通过函数execv()执行shell,该shell进程接收getty进程的pid,取代原来的getty进程。
再由shell直接或间接地产生其他进程。
上述过程可描述为:
0号进程->1号内核进程->1号内核线程->1号用户进程(init进程)->getty进程->shell进程。
1.2进程与程序:
程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。
而进程是程序在处理机上的一次执行过程,它是一个动态的概念。
程序可以作为一种软件资料长期存在,而进程是有一定生命期的。
程序是永久的,进程是暂时的。
进程更能真实地描述并发,而程序不能;
进程是由进程控制块、程序段、数据段三部分组成;
进程具有创建其他进程的功能,而程序没有。
同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。
也就是说同一程序可以对应多个进程。
在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单元都是进程。
二使用系统调用fork()创建两个子进程
编写一段程序,使用系统调用fork()创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符:
父进程显示'a',子进程分别显示字符'b'和字符'c'。
试观察记录屏幕上的显示结果(多次运行,查看结果是否有变化),并分析原因
2.1编写程序代码
2.2编译执行
2.3分析总结
可以看出,abc显示的顺序是不定的,三个进程没有同步措施,输出是不定的。
多次运行之后,会有不同的输出结果。
这是因为一个主进程在运行的同时创建了两个子进程,然后主进程加上两个子进程并发运行,由于运行的速度不一致,所以会有不同的输出顺序
三将程序改为每个进程输出一句话
修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象(多次运行,查看结果是否有变化),并分析原因。
3.1编写程序代码
3.2编译执行
四使用调用lockf()来给每一个子进程加锁
如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象
4.1编写程序代码
4.2编译执行
4.3结果分析
lockf()函数允许将文件区域用作信号量(监视锁),或用于控制对锁定进程的访问(强制模式记录锁定)。
试图访问已锁定资源的其他进程将返回错误或进入休眠状态,直到资源解除锁定为止。
当关闭文件时,将释放进程的所有锁定,即使进程仍然有打开的文件。
当进程终止时,将释放进程保留的所有锁定。
加锁后的情况与没有加锁是运行结果基本相同,都是不可再现性,反复多运行几遍,都有几个不同的结果。
五实验总结
通过本次上机实验,加深对进程概念的理解,明确进程和程序的区别。
(1)程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。
而进程则不同,它是程序在某个数据集上的执行。
进程是一个动态的实体,它有自己的生命周期。
反映了一个程序在一定的数据集上运行的全部动态过程。
(2)进程和程序并不是一一对应的,一个程序执行在不同的数据集上就成为不同的进程,可以用进程控制块来唯一地标识每个进程。
而这一点正是程序无法做到的,由于程序没有和数据产生直接的联系,既使是执行不同的数据的程序,他们的指令的集合依然是一样的,所以无法唯一地标识出这些运行于不同数据集上的程序。
(3)本实验说明了进程执行的不确定性。
步骤3,4说明了一个进程在执行时,可以被其他进程打断,但是如果想要不被打断就可以用lockf函数进行加锁,其他进程就不能打断该进程的执行,直至该部分被执行完成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西北工业大学 操作系统 实验