欢迎来到天天文库
浏览记录
ID:22288423
大小:202.85 KB
页数:10页
时间:2018-10-28
《实验一linux环境下的进程管理》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、软件学院上机实验报告课程名称:橾作系统实验项目:实验一:Linux环境下进程管理实验室:耘慧402姓名:学号:专业班级:实验时间:实验成绩评阅教师—、实验目的及要求1.加深对进程概念的理解,明确进程和程序的区别;2.进一步认识并发执行的实质;3.分析进程争用资源的现象,学习解决进程互斥的方法;4.了解Linux系统中进程通信的基本原理;二、实验性质1.进程的创建:编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显
2、示结果,并分析原因。2.进程的控制:修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。如果在程序中使用系统调用lockfO来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。3.用fork()创建一个进程,再调用execO用新的程序替换该子进程的内容;利用wait()来控制进程执行顺序。三、实验学时实验性质:验证性实验学时:4学时实验要求:必做实验环境1.实验环境:Linux系统开发环境1.知识准备:(1)Linux系统开发环境搭建;(2)Linux环境下GCC编译器的使用;(3)语言中函数定义与调用、指针和
3、类型的定义与使用、结构的定义、动态内存的申请等预备知识。五、实验内容及步骤①实验内容:(1)进程的创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。(2)进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行吋屏幕上出现的现象,并分析原因。如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。(3)用for
4、k()创建一个进程,再调用exec()用新的程序替换该子进程的内容;利用wait()来控制进程执行顺序。②实验步骤:1.进程的创建1.1进程UNIX中,进程既是一个独立拥有资源的基本单位,又是一个独立调度的基本单位。一个进程实体由若干个区(段)组成,包括程序区、数据区、栈区、共享存储区等。每个区又分为若干页,每个进程配置有唯一的进程控制块PCB,用于控制和管理进程。PCB的数据结构如下:(1)进程表项(ProcessTableEntry)。拈一些最常用的核心数据:进程标识符P1D、用户标识符U1D、进程状态、事件描述符、进程和U区在内存或外存的地址、软中断信号、计吋域、进程的大小、
5、偏置值nice、指向就绪队列中下一个PCB的指针P_Link、指向U区进程正文、数据及栈在内存区域的指针。(2)U区(UArea)。用于存放进程表项的一些扩充信息。每一个进程都有一个私用的U区,其中含有:进程表项指针、真正用户标识符u-ruid(readuserID)、有效用户标识符u-euid(effectiveuserID)、用户文件描述符表、计时器、内部T/0参数、限制字段、差错字段、返回值、信号处理数组。由于UNIX系统采用段页式存储管理,为了把段的起始虚地址变换为段在系统中的物理地址,便于实现区的共享,所以还有:(3)系统区表项。以存放各个段在物理存储器屮的位置等信息。系
6、统把一个进程的虚地址空间划分为若干个连续的逻辑区,有正文区、数据区、栈区等。这些区是可被共享和保护的独立实体,多个进程可共享一个区。为了对区进行管理,核心中设置一个系统区表,各表项中记录了以下有关描述活动区的信息:区的类型和大小、区的状态、区在物理存储器中的位置、引用计数、指向文件索引结点的指针。(4)进程区表系统为每个进程配置了一张进程区表。表中,每一项记录一个区的起始虚地址及指向系统区表中对应的区表项。核心通过查找进程区表和系统区表,便可将区的逻辑地址变换为物理地址。1.2进程映像UNIX系统中,进程是进程映像的执行过程,也就是正在执行的进程实体。它由三部分组成:(1)用户级上
7、、下文。主要成分是用户程序;(2)寄存器上、下文。由CPU中的一些寄存器的内容组成,如PC,PSW,SP及通用寄存器等;(3)系统级上、下文。包括OS为管理进程所用的信息,有静态和动态之分。1.3所涉及的系统调用fork()创迷一个新进程。系统调用格式:pid二fork()参数定义:intfork()fork()返回值意义如下:0:在子进程屮,pid变量保存的fork()返回值为0,表示当前进程是子进程。>0:在父进程中,pid变量保存的fork()返冋值为子进程的i
此文档下载收益归作者所有