实验二进程管理
操作系统实验二:进程管理

操作系统实验二:进程管理操作系统实验二:进程管理篇一:操作系统实验报告实验一进程管理一、目的进程调度是处理机管理的核心内容。
本实验要求编写和调试一个简单的进程调度程序。
通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。
二、实验内容及要求1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。
可根据实验的不同,PCB结构的内容可以作适当的增删)。
为了便于处理,程序中的某进程运行时间以时间片为单位计算。
各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
2、系统资源(r1…rw),共有w类,每类数目为r1…rw。
随机产生n进程Pi(id,s(j,k)t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。
3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。
建立进程就绪队列。
4、编制进程调度算法:时间片轮转调度算法本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。
在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。
三、实验环境操作系统环境:Windows系统。
编程语言:C#。
四、实验思路和设计1、程序流程图2、主要程序代码//PCB结构体struct pcb{public int id; //进程IDpublic int ra; //所需资源A的数量public int rb; //所需资源B的数量public int rc; //所需资源C的数量public int ntime; //所需的时间片个数public int rtime; //已经运行的时间片个数public char state; //进程状态,W(等待)、R(运行)、B(阻塞)//public int next;}ArrayList hready = new ArrayList();ArrayList hblock = new ArrayList();Random random = new Random();//ArrayList p = new ArrayList();int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数//r为可随机产生的进程数(r=m-n)//a,b,c分别为A,B,C三类资源的总量//i为进城计数,i=1…n//h为运行的时间片次数,time1Inteval为时间片大小(毫秒)//对进程进行初始化,建立就绪数组、阻塞数组。
实验二 进程管理

5.进程调度模拟编写程序完成单处理机系统中的进程调度,要求采用先来先服务算法、最短CPU运行期优先调度算法、优先级调度算法、多级反馈队列轮转算法。
实验具体包括:首先确定进程控制块的内容和进程控制块的组织方式;然后完成进程创建原语和进程调度原语;最后编写主函数对所做工作进行测试。
1)实验提示与讲解这个实验主要需要考虑三个问题:如何组织进程、如何创建进程和如何实现处理器调度。
考虑如何组织进程,首先就要设定进程控制块的内容。
进程控制块PCB记录各个进程执行时的情况。
不同的操作系统,进程控制块记录的信息内容不一样。
操作系统功能越强,软件也越庞大,进程控制块记录的内容也就越多。
这里的实验只是用了必不可少的信息。
一般操作系统中,无论进程控制块中信息量多少,信息都可以大致分为以下四类:①标识信息每个进程都要有一个唯一的标识符,用来标识进程的存在和区别于其他进程。
这个标识符是必不可少的,可以用符号或编号实现,它必须是操作系统分配的。
在后面给出的参考程序中,采用编号方式,也就是为每个进程依次分配一个不相同的正整数。
②说明信息用于记录进程的基本情况,例如进程的状态、等待原因、进程程序存放的位置、进程数据存放位置等等。
实验中,因为进程没有数据和程序,仅使用进程控制块模拟进程,所以这部分内容仅包括进程状态。
③现场信息现场信息记录各个寄存器的内容。
当进程由于某种原因让出处理器时,需要将现场信息记录在进程控制块中,当进行进程调度时,从选中进程的进程控制块中读取现场信息进行现场恢复。
现场信息就是处理器的相关寄存器内容,包括通用寄存器、程序计数器和程序状态字等。
在实验中,可选取几个寄存器作为代表。
用大写的全局变量AX、BX、CX、DX模拟通用寄存器、大写的全局变量PC模拟程序计数器、大写的全局变量PSW模拟程序状态字。
④管理信息管理信息记录进程管理和调度的信息。
例如进程优先数、进程队列指针等。
实验中,仅包括队列指针。
因此,可将进程控制块结构定义如下:struct pcb{int name; //进程标识符int status; //进程状态int AX,BX,CX,DX; //进程现场信息,通用寄存器内容int PC; //进程现场信息,程序计数器内容int PSW; //进程现场信息,程序状态字内容int next; //下一个进程控制块的位置}确定进程控制块内容后,要考虑的就是如何将进程控制块组织在一起。
实验二 进程管理(实验报告格式)

实验二:进程管理一、实验目的(1)理解进程的概念,掌握父、子进程创建的方法。
(2)认识和了解并发执行的实质,掌握进程的并发及同步操作。
二、实验环境微型计算机,Ubuntu Linux10.04 ,gedit,gcc三、实验内容1.编写一C语言程序,实现在程序运行时通过系统调用fork( )创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。
2.多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。
记下这种情况,试简单分析其原因。
3.修改程序,在父、子进程中分别使用wait()、exit()等系统调用“实现”其同步推进,并获取子进程的ID号及结束状态值。
多次反复运行改进后的程序,观察并记录运行结果。
四、实验结果一般程序结果是:I am father!I am sonI am daughter!但执行多遍之后有时会变成这样的:I am father!I am daughter!I am son五、源代码、#include<stdlib.h>#include<unistd.h>#include<stdio.h>#include<sys/types.h>#include<sys/wait.h>int main(){//pid_t pid1=fork();//pid_t pid2=fork();pid_t pid;int i;pid=fork();if(pid==-1){printf("faild to fock!\n");exit(1);}elseif(pid==0){//sleep(1);printf("I am son\n");}else{//sleep(1);printf("I am father!\n");pid=fork();if(pid==-1){printf("faild to fock!\n");exit(1);}elseif(pid==0){//sleep(1);printf("I am daughter!\n");}//nice(1);}return 0;}世上没有一件工作不辛苦,没有一处人事不复杂。
计算机操作系统实验二Windows任务管理器的进程管理

计算机操作系统实验二Windows任务管理器的进程管理实验二 Windows任务管理器的进程管理一实验目的1)在Windows 任务管理器中对程序进程进行响应的管理操作;2)熟悉操作系统进程管理的概念;3)学习观察操作系统运行的动态性能。
二实验环境需要准备一台运行Windows XP操作系统的计算机。
三背景知识Windows XP的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。
使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。
也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。
四实验内容与步骤启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。
当前机器中由你打开,正在运行的应用程序有:1) 实验二Windows 任务管理器的进程管理2) 常州大学—Windows Internet Explore3) 实验一Windows XP 系统管理4)可移动磁盘(H:)Windows“任务管理器”的窗口由_5_个选项卡组成,分别是:1) 应用程序2) 进程3) 性能4)联网当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :1) 映像名称2) 用户名3) CPU4) 内存使用1. 使用任务管理器终止进程步骤1:单击“进程”选项卡,一共显示了__24_个进程。
请试着区分一下,其中:系统(SYSTEM) 进程有_14_个,填入表2-1中。
表2-1 实验记录映像名称用户名作用内存使用svchost.exe SYSTEM 用于执行dll文件 4988Kspoolsv.exe SYSTEM 管理所有本地和网络打 5544K印队列及控制所有打印工作lsass.exe SYSTEM 本地安全授权服务1460K services.exe SYSTEM 远程控制木马病毒3816Kwinlogon.exe SYSTEM 管理用户登录和退出5244Kcarss.exe SYSTEM 负责控制windows 12552K smss.exe SYSTEM 系统关键进程 500K CDAC11BA.exe SYSTEM 反复制保护软件1440K server.exe SYSTEM 用于Novell服务监听1196K MATLAB.exe SYSTEM 一种科学计算工程软件46576K MDM.exe SYSTEM 进行本地和远程调试 3532K service.exe SYSTEM 管理启动停止服务 3366K Inetinfo.exe SYSTEM 用于Debug调试除错 10236K system SYSTEM 系统进程 312K服务(SERVICE) 进程有_3_个,填入表2-2中。
实验二Windows任务管理器的进程管理

实验⼆Windows任务管理器的进程管理实验⼆ Windows任务管理器的进程管理⼀实验⽬的1)在Windows 任务管理器中对程序进程进⾏响应的管理操作;2)熟悉操作系统进程管理的概念;3)学习观察操作系统运⾏的动态性能。
⼆实验环境需要准备⼀台运⾏Windows XP操作系统的计算机。
三背景知识Windows XP的任务管理器提供了⽤户计算机上正在运⾏的程序和进程的相关信息,也显⽰了最常⽤的度量进程性能的单位。
使⽤任务管理器,可以打开监视计算机性能的关键指⽰器,快速查看正在运⾏的程序的状态,或者终⽌已停⽌响应的程序。
也可以使⽤多个参数评估正在运⾏的进程的活动,以及查看CPU 和内存使⽤情况的图形和数据。
四实验内容与步骤启动并进⼊Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗⼝。
当前机器中由你打开,正在运⾏的应⽤程序有:1) 实验⼆Windows任务管理器的进程管理Windows“任务管理器”的窗⼝由 5 个选项卡组成,分别是:1) 应⽤程序2) 进程3) 性能4) 联⽹5) ⽤户当前“进程”选项卡显⽰的栏⽬分别是(可移动窗⼝下⽅的游标/箭头,或使窗⼝最⼤化进⾏观察) :1) 映像名称2) ⽤户名3) CPU4) 内存使⽤1. 使⽤任务管理器终⽌进程步骤1:单击“进程”选项卡,⼀共显⽰了36 个进程。
请试着区分⼀下,其中:系统(SYSTEM) 进程有19 个,填⼊表2-1中。
表2-1 实验记录服务(SERVICE) 进程有4 个,填⼊表2-2中。
表2-2 实验记录⽤户进程有9 个,填⼊表2-3中。
步骤2:单击要终⽌的进程,然后单击“结束进程”按钮。
终⽌进程,将结束它直接或间接创建的所有⼦进程。
例如,如果终⽌了电⼦邮件程序(如Outlook 98) 的进程树,那么同时也终⽌了相关的进程,如MAPI后台处理程序mapisp32.exe。
进程管理实验报告_共10篇 .doc

★进程管理实验报告_共10篇范文一:_进程管理实验报告进程管理实验报告一、进程与线程1.实验目的:1.通过本实验学习Linux中创建进程的方法。
2.学习系统调用fork的使用方法。
3.学习系统调用exec族调用的使用方法。
2.实验准备1.进程的创建创建一个进程的系统调用很简单,只要调用fork函数就可以了。
#includepid_tfork();当一个进程调用了fork以后,系统会创建一个子进程,这个子进程和父进程是不同的地方只有它的进程ID和父进程ID,其他的都一样,就像父进程克隆(clone)自己一样,当然创建两个一模一样的进程是没有意义的,为了区分父进程和子进程,我们必须跟踪fork调用返回值。
当fork调用失败的时候(内存不足或者是用户的最大进程数已到)fork返回—1,否则fork的返回值有重要的作用。
对于父进程fork返回子进程ID,而对于fork 子进程返回0,我们就是根据这个返回值来区分父子进程的。
2.关于fork的说明使用该函数时,该函数被调用一次,但返回两次,两次返回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程ID。
将子进程ID返回给父进程的理由是:因为一个进程的子进程可以多于一个,所以没有一个函数可以是一个子进程获得其所有子进程的进程ID。
而fork函数使子进程得到的返回值是0的理由是:一个子进程只会有一个父进程,所以子进程总是可以调用函数getpid获得其父进程的进程ID。
3.系统调用exec族调用的说明父进程创建子进程后,子进程一般要执行不同的程序。
为了调用系统程序,我们可以使用系统调用exec族调用。
Exec族调用有以下五个函数:intexecl(constchar*path,constchar*arg,?);intexeclp(constchar*file,constchar*arg,?);intexecle(constchar*path,constchar*arg,?);intexecv(constchar*path,constchar*argv[]);intexecvp(constchar*file,constchar*argv[]);exec族调用可以执行给定程序。
操作系统实验2进程管理报告

实验一进程管理一、实验目的:1.加深对进程概念的理解,明确进程和程序的区别;2.进一步认识并发执行的实质;3.分析进程争用资源的现象,学习解决进程互斥的方法;4.了解Linux系统中进程通信的基本原理;二、实验预备内容:1.阅读Linux的sched。
h源码文件,加深对进程管理概念的理解;2.阅读Linux的fork()源码文件,分析进程的创建过程;三、实验环境说明:1.此实验采用的是Win7(32bit)下虚拟机VMware—workstation-10.0.4build—2249910;2.ubuntu 版本3。
19。
0;3.直接编写c文件在终端用命令行执行;4.虚拟机分配8G内存中的1024M;5.虚拟机名称knLinux;6.ubuntu用户名kn;四、实验内容:1.进程的创建:a)题目要求:编写一段程序,使用系统调用fork()创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动.让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c"。
试观察记录屏幕上的显示结果,并分析原因.b)程序设计说明:一个父进程,两个子进程,分别输出显示a,b,c.c)源代码:d)运行结果:e)分析:由输出结果可知,运行结果不唯一,可以是abc,acb,bca等多种情况。
因为在程序中,并没有三个进程之间的同步措施,所以父进程和子进程的输出顺序是随机的。
在试验次数足够大的情况下,6中顺序都有可能出现:abc,acb, bac, bca, cab,cba。
2.进程的控制:a)修改已经编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。
i.程序设计说明:将第一个程序中输出字符的语句改为输出parent process和childprocess1&2的语句。
ii.源代码:iii.运行结果:iv.分析:发现在结果中,运行结果同第一个程序,但是在一个进程输出语句的中途不会被打断,语句都是完整的。
进程管理实验报告分析(3篇)

第1篇一、实验背景进程管理是操作系统中的一个重要组成部分,它负责管理计算机系统中所有进程的创建、调度、同步、通信和终止等操作。
为了加深对进程管理的理解,我们进行了一系列实验,以下是对实验的分析和总结。
二、实验目的1. 加深对进程概念的理解,明确进程和程序的区别。
2. 进一步认识并发执行的实质。
3. 分析进程争用资源的现象,学习解决进程互斥的方法。
4. 了解Linux系统中进程通信的基本原理。
三、实验内容1. 使用系统调用fork()创建两个子进程,父进程和子进程分别显示不同的字符。
2. 修改程序,使每个进程循环显示一句话。
3. 使用signal()捕捉键盘中断信号,并通过kill()向子进程发送信号,实现进程的终止。
4. 分析利用软中断通信实现进程同步的机理。
四、实验结果与分析1. 实验一:父进程和子进程分别显示不同的字符在实验一中,我们使用fork()创建了一个父进程和两个子进程。
在父进程中,我们打印了字符'a',而在两个子进程中,我们分别打印了字符'b'和字符'c'。
实验结果显示,父进程和子进程的打印顺序是不确定的,这是因为进程的并发执行。
2. 实验二:每个进程循环显示一句话在实验二中,我们修改了程序,使每个进程循环显示一句话。
实验结果显示,父进程和子进程的打印顺序仍然是随机的。
这是因为并发执行的进程可能会同时占用CPU,导致打印顺序的不确定性。
3. 实验三:使用signal()捕捉键盘中断信号,并通过kill()向子进程发送信号在实验三中,我们使用signal()捕捉键盘中断信号(按c键),然后通过kill()向两个子进程发送信号,实现进程的终止。
实验结果显示,当按下c键时,两个子进程被终止,而父进程继续执行。
这表明signal()和kill()在进程控制方面具有重要作用。
4. 实验四:分析利用软中断通信实现进程同步的机理在实验四中,我们分析了利用软中断通信实现进程同步的机理。
操作系统实验2进程管理报告

实验一进程管理一、实验目的:1.加深对进程概念的理解,明确进程和程序的区别;2.进一步认识并发执行的实质;3.分析进程争用资源的现象,学习解决进程互斥的方法;4.了解Linux系统中进程通信的基本原理;二、实验预备容:1.阅读Linux的sched.h源码文件,加深对进程管理概念的理解;2.阅读Linux的fork()源码文件,分析进程的创建过程;三、实验环境说明:1.此实验采用的是Win7(32bit)下虚拟机VMware-workstation-10.0.4build-2249910;2.ubuntu 版本3.19.0;3.直接编写c文件在终端用命令行执行;4.虚拟机分配8G存中的1024M;5.虚拟机名称knLinux;6.ubuntu用户名kn;四、实验容:1.进程的创建:a)题目要求:编写一段程序,使用系统调用fork() 创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c”。
试观察记录屏幕上的显示结果,并分析原因。
b)程序设计说明:一个父进程,两个子进程,分别输出显示a,b,c。
c)源代码:d)运行结果:e)分析:由输出结果可知,运行结果不唯一,可以是abc,acb,bca等多种情况。
因为在程序中,并没有三个进程之间的同步措施,所以父进程和子进程的输出顺序是随机的。
在试验次数足够大的情况下,6中顺序都有可能出现:abc, acb, bac, bca, cab, cba。
2.进程的控制:a)修改已经编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。
i.程序设计说明:将第一个程序中输出字符的语句改为输出parent process和childprocess1&2的语句。
ii.源代码:iii.运行结果:iv.分析:发现在结果中,运行结果同第一个程序,但是在一个进程输出语句的中途不会被打断,语句都是完整的。
电大操作系统实验2:进程管理实验

电大操作系统实验2:进程管理实验
实验目的:
1.加深对进程概念的理解,特别是进程的动态性和并发性。
2.了解进程的创建和终止。
3.学会查看进程的状态信息。
4.学会使用进程管理命令。
实验要求:
1.理解有关进程的概念,能够使用ps命令列出系统中进
程的有关信息并进行分析。
2.理解进程的创建和族系关系。
3.能够使用&,jobs,bg,at等命令控制进程的运行。
实验内容:
1.使用ps命令查看系统中运行进程的信息。
实验环境:
实验步骤和结果:
1.输入ps命令,可以报告系统当前的进程状态。
2.输入ps-e命令,可以显示系统中运行的所有进程,包括系统进程和用户进程。
3.输入ps-f命令,可以得到进程的详细信息。
进程控制:
1.后台进程
1) $grep "注册用户名" /etc/passwd。
/tmp/abc &
2.作业控制
1) 进程休眠60秒Sleep 60 &
2) 进程休眠30秒Sleep 30 &
3) 查看进程状态Jobs
4) 将睡眠30秒的sleep命令放在前台执行fg%2
3.发送中断信号
1) 后台运行sleep命令$sleep 120 &
2) 查看sleep进程的状态$ps-p pid
3) 终止sleep命令$kill -9 pid。
操作系统实验二进程管理

操作系统实验实验二进程管理学号姓名班级华侨大学电子工程系实验目的1、理解进程的概念,明确进程和程序的区别。
2、理解并发执行的实质。
3、掌握进程的创建、睡眠、撤销等进程控制方法。
实验内容与要求基本要求:用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死进程等功能。
实验报告内容1、进程、进程控制块等的基本原理。
进程是现代操作系统中的一个最基本也是最重要的概念,掌握这个概念对于理解操作系统实质,分析、设计操作系统都有其非常重要的意义。
为了强调进程的并发性和动态性,可以给进程作如下定义:进程是可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。
进程又就绪、执行、阻塞三种基本状态,三者的变迁图如下:,当某程序不在CPU上运行时,必须保留其被中断的程序的现场,包括:断点地址、程序状态字、通用寄存器的内容、堆栈内容、程序当前状态、程序的大小、运行时间等信息,以便程序再次获得CPU时,能够正确执行。
为了保存这些内容,需要建立—个专用数据结构,我们称这个数据结构为进程控制块PCB (Process Control Block)。
进程控制块是进程存在的惟一标志,它跟踪程序执行的情况,表明了进程在当前时刻的状态以及与其它进程和资源的关系。
当创建一个进程时,实际上就是为其建立一个进程控制块。
在通常的操作系统中,PCB应包含如下一些信息:①进程标识信息。
为了标识系统中的各个进程,每个进程必须有惟一的标识名或标识数。
②位置信息。
指出进程的程序和数据部分在内存或外存中的物理位置。
③状态信息。
指出进程当前所处的状态,作为进程调度、分配CPU的依据。
④进程的优先级。
一般根据进程的轻重缓急其它信息。
这里给出的只是一般操作系统中PCB所应具有的内容,不同操作系统的PCB结构是不同的,我们将在2.8节介绍Linux系统的PCB结构。
程度为进程指定一个优先级,优先级用优先数表示。
⑤进程现场保护区。
《操作系统》实验二

《操作系统》实验二一、实验目的本实验旨在加深对操作系统基本概念和原理的理解,通过实际操作,提高对操作系统设计和实现的认知。
通过实验二,我们将重点掌握进程管理、线程调度、内存管理和文件系统的基本原理和实现方法。
二、实验内容1、进程管理a.实现进程创建、撤销、阻塞、唤醒等基本操作。
b.设计一个简单的进程调度算法,如轮转法或优先级调度法。
c.实现进程间的通信机制,如共享内存或消息队列。
2、线程调度a.实现线程的创建、撤销和调度。
b.实现一个简单的线程调度算法,如协同多任务(cooperative multitasking)。
3、内存管理a.设计一个简单的分页内存管理系统。
b.实现内存的分配和回收。
c.实现一个简单的内存保护机制。
4、文件系统a.设计一个简单的文件系统,包括文件的创建、读取、写入和删除。
b.实现文件的存储和检索。
c.实现文件的备份和恢复。
三、实验步骤1、进程管理a.首先,设计一个进程类,包含进程的基本属性(如进程ID、状态、优先级等)和操作方法(如创建、撤销、阻塞、唤醒等)。
b.然后,实现一个进程调度器,根据不同的调度算法对进程进行调度。
可以使用模拟的方法,不需要真实的硬件环境。
c.最后,实现进程间的通信机制,可以通过模拟共享内存或消息队列来实现。
2、线程调度a.首先,设计一个线程类,包含线程的基本属性(如线程ID、状态等)和操作方法(如创建、撤销等)。
b.然后,实现一个线程调度器,根据不同的调度算法对线程进行调度。
同样可以使用模拟的方法。
3、内存管理a.首先,设计一个内存页框类,包含页框的基本属性(如页框号、状态等)和操作方法(如分配、回收等)。
b.然后,实现一个内存管理器,根据不同的内存保护机制对内存进行保护。
可以使用模拟的方法。
4、文件系统a.首先,设计一个文件类,包含文件的基本属性(如文件名、大小等)和操作方法(如创建、读取、写入、删除等)。
b.然后,实现一个文件系统管理器,包括文件的存储和检索功能。
实验二进程管理(20200912011456)

实验二进程管理(一)实验目的或实验原理1.加深对进程概念的理解,明确进程和程序的区别。
2.进一步认识并发执行的实质。
3.分析进程竞争资源现象,学习解决进程互斥的方法。
4.了解Linux 系统中进程通信的基本原理。
(二)实验内容1.进程的创建。
2.进程的控制。
3•①编写一段程序,使其现实进程的软中断通信。
要求:使用系统调用fork() 创建两个子进程,再用系统调用signal() 让父进程捕捉键盘上来的中断信号(即按DE鍵);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child Processll is Killed by Parent!Child Processl2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止Parent Process is Killed!②在上面的程序中增加语句sig nal (SIGNAL, SIG-IGN) 和sig nal (SIGQUIT,SIG-IGN), 观察执行结果,并分析原因。
4 •进程的管道通信。
编制一段程序,实现进程的管理通信。
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道中写一句话:Child 1 is sending a message!Child 2 is sending a message! 而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。
实验 2 指导[ 实验内容]1 •进程的创建〈任务〉编写一段程序,使用系统调用fork( )创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符;父进程显示字符“ a”,子进程分别显示字符“ b”和“ c”。
试观察记录屏幕上的显示结果,并分析原因。
操作系统实验之进程管理实验报告

本次操作系统实验是模拟进程管理过程,解决哲学家的就餐问题。个人本 次实验还比较顺利,使用了比较熟悉的 c++语言进行算法的编写,比较巧妙的 定义了两个类来定义哲学家和筷子对象的属性以及相应的动作,方便在各种就 餐过程中对筷子的资源进行申请和释放,以及哲学家实现相应的动作。另一个 觉得比较好的地方是解决了死锁问题,通过判断当前哲学家是否可以同时拿起 左右筷子来避免死锁。
①至多只允许四个哲学家同时进餐,以保证至少有一个哲学家可以进餐,
最终总会释放出他所用过的两只筷子,从而可使更多的哲学家进餐;
②仅当左右两只筷子均可用时,才允许哲学家拿起筷子就餐;
③规定奇数号哲学家先拿起右边筷子,然后再去拿左边筷子,而偶数号哲
学家则相反。
本实验中采取方法 2.
三、数据结构及功能设计
}; bool b[5]; int i, j; srand(time(0)); j = rand() % 5; for (i = j; i < j + 5; i++) {
b[i % 5] = philosopher[i % 5].eat(); cout << endl << "********************************************************" << endl; } for (i = j; i < j + 5; i++) { if (b[i % 5]) {
五、测试用例及运行结果、分析
测试结果截图:
分析:产生了一个随机数 0,并依次加 1 对每个哲学家进行分析。分析时首先看 左筷子是否可用,然后看右筷子,若有一个不可用则放下手中的另一只筷子,并 说明 need waiting。然后再下一时间段对每个哲学家再次分析,直到每个哲学 家都吃上饭,程序结束。 通过实验结果可得,程序正确运行,且解决了死锁问题。
实验二 Windows任务管理器的进程管理

实验二 Windows任务管理器的进程管理一实验目的1)在Windows 任务管理器中对程序进程进行响应的管理操作;2)熟悉操作系统进程管理的概念;3)学习观察操作系统运行的动态性能。
二实验环境需要准备一台运行Windows XP操作系统的计算机。
三背景知识Windows XP的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。
使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。
也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。
四实验内容与步骤启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。
当前机器中由你打开,正在运行的应用程序有:1) 实验二Windows任务管理器的进程管理Windows“任务管理器”的窗口由5个选项卡组成,分别是:1) 应用程序2) 进程3) 性能4)联网5)用户当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :1)映像名称2)用户名3)CPU4)内存使用步骤1:单击“进程”选项卡,一共显示了36个进程。
请试着区分一下,其中:系统(SYSTEM) 进程有19个,填入表2-1中。
表2-1 实验记录服务(SERVICE) 进程有1个,填入表2-2中。
用户进程有16个,填入表2-3中。
步骤2:单击要终止的进程,然后单击“结束进程”按钮。
终止进程,将结束它直接或间接创建的所有子进程。
例如,如果终止了电子邮件程序(如Outlook 98) 的进程树,那么同时也终止了相关的进程,如MAPI后台处理程序mapisp32.exe。
请将终止某进程后的操作结果与原记录数据对比,发生了什么:原窗口将被关闭,与原窗口相关的程序都将结束执行。
实验二 Windows任务管理器的进程管理

实验二 Windows任务管理器的进程管理一实验目的1)在Windows 任务管理器中对程序进程进行响应的管理操作;2)熟悉操作系统进程管理的概念;3)学习观察操作系统运行的动态性能。
二实验环境需要准备一台运行Windows XP操作系统的计算机。
三背景知识Windows XP的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。
使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。
也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。
四实验内容与步骤启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。
当前机器中由你打开,正在运行的应用程序有:1) 实验二Windows任务管理器的进程管理Windows“任务管理器”的窗口由 5 个选项卡组成,分别是:1) 应用程序2) 进程3) 性能4) 联网5) 用户当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :1) 映像名称2) 用户名3) CPU4) 内存使用1. 使用任务管理器终止进程步骤1:单击“进程”选项卡,一共显示了36 个进程。
请试着区分一下,其中:系统(SYSTEM) 进程有19 个,填入表2-1中。
表2-1 实验记录服务(SERVICE) 进程有4 个,填入表2-2中。
表2-2 实验记录用户进程有9 个,填入表2-3中。
步骤2:单击要终止的进程,然后单击“结束进程”按钮。
终止进程,将结束它直接或间接创建的所有子进程。
例如,如果终止了电子邮件程序(如Outlook 98) 的进程树,那么同时也终止了相关的进程,如MAPI后台处理程序mapisp32.exe。
请将终止某进程后的操作结果与原记录数据对比,发生了什么:原窗口将被关闭,与原窗口相关的程序都将结束执行。
实验二 进程管理

一、上机使用说明1..编辑c语言源程序$vi test.c~~~~按<insert>键,进入编辑模式,程序输入完成后,按<esc>键,退出编辑模式。
按: 键,进入命令模式,输入w存盘退出。
2.编译c语言源程序$gcc test.c没有错误提示,表示编译成功;否则返回第3步进行修改。
3.调试运行这个时候在某某.c所在的目录下面,就多了一个a.out的可执行文件,再在终端里面./a.out就可以看到结果了。
总结下:1.1.vi 某某.c1.2.在vi里面写c程序...(建议复制粘贴程序的人检查一下自己的代码,我看到有些人第一行写成include <stdio.h>)注意#和include是连在一起,才有预处理行的效果1.3.写完了保存退出(ESC然后:wq)1.4.终端输gcc 某某.c1.5.终端输./a.out二、关于进程的系统调用1.进程的创建fork()格式:pid=fork()功能:创建一个新进程,新进程与父进程具有相同的代码,父子进程都从fork()之后的那条语句开始执行。
对于父进程,pid 的值>0;对于子进程,pid的值=0;创建失败,pid的值<0。
2.进程的终止exit()格式:exit(status)功能:终止当前进程的执行,status是一个整数,其值可以返回父进程。
3.进程的同步wait()格式:wait()功能:父进程进入睡眠态,当子进程终止时被唤醒。
4.进程的延迟 sleep()格式:sleep(n)功能:当前进程延迟n秒执行。
5.进程执行另一程序 execl()实验二进程管理一、实验目的(1)加深对进程概念的理解,明确进程和程序的区别。
(2)进一步认识并发执行的实质。
二、实验内容1、进程的创建执行下面的程序,分析执行的结果。
#include <stdio.h>main(){ int i;printf("just 1 process.\n");i=fork();if (i==0)printf("I am child.\n");elseif (i>0)printf("I am parent.\n");elseprintf("fork() failed.\n");printf("program end.\n");}输出结果:2、进程的同步执行下面的程序,分析执行的结果。
国开电大 操作系统 实验2:进程管理实验报告

一、实验题目:进程管理实验二、实验目的和要求:实验目的:(1)加深对进程概念的理解,尤其是进程的动态性、并发性。
(2)了解进程如何被创建和终止。
(3)学会查看进程的状态信息。
(4)学会使用进程管理命令。
(5)学会在后台运行进程。
实验要求:(1)理解有关进程的概念,能用ps命令列出系统中进程的有关信息,并进行分析。
(2)理解进程的创建及族系关系。
(3)能使用&,jobs,bg,at等命令控制进程的运行。
(4)了解终止进程的方法。
三、实验内容:1.使用ps命令查看系统中运行进程的信息。
2.利用系统调用实现进程的创建、终止、等待、睡眠等操作。
四、实验技术和方法:(说明:对本实验涉及的教材中的相关内容进行归纳总结,只需简要说明即可。
)加深对进城概念的理解,尤其是进程的动态性、并发性。
学会使用ps命令观察进程的状态,并分析进程族系关系;能使用& , jobs, bg, at 等命令控制进程的运行利用系统调用实现进程的创建、终止、等待、睡眠等操作。
五、实验环境:(说明:列出本实验使用到的软件平台和工具,如Linux系统版本,shell类型,vi编辑工具等。
)在虚拟机中的Linux RedHat Linux 9六、实验步骤和结果:(说明:详细给出实验步骤和结果。
实验步骤不一定与《实验指南》中的完全一致。
对实验结果,除文字说明外,对一些关键结果,需要给出一些界面截图。
)1、输入ps 命令PS命令用来报告系统当前的进程状态。
2、输入ps –e命令可以显示系统中运行的所有进程,包括系统进程和用户进程。
3、输入ps –f命令可以得到进程详细信息。
4、输入ps –el 命令显示进程环境变量列出长表。
二、进程控制1、后台进程(1)$grep “注册用户名” /etc/passwd > /tmp/abc &(2)ps –p pid2、作业控制(1)进程休眠60秒 Sleep 60 &(2)进程休眠30秒 Sleep 30 &(3)查看进程状态 Jobs(4)把睡眠30秒的sleep命令放在前台执行 fg %2(5)当提示符出现后,再查看进程状态 jobs三、发送中断信号(1)后台运行sleep命令$sleep 120 &(2)查看sleep进程的状态$ps –p pid(3)终止sleep命令$kill -9 pid(4)再查看sleep进程的状态$ps –p pid四、减轻系统负载【at命令】让一个命令在指定的时间运行,并把结果输出在一个文件中例:at time>date>who><ctrl>dat 命令会把已执行命令的标准输出发送到用户的邮箱,用cat命令查看邮箱内容,显示结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二进程管理(一)实验目的或实验原理1.加深对进程概念的理解,明确进程和程序的区别。
2.进一步认识并发执行的实质。
3.分析进程竞争资源现象,学习解决进程互斥的方法。
4.了解Linux系统中进程通信的基本原理。
(二)实验内容1.进程的创建。
2.进程的控制。
3.①编写一段程序,使其现实进程的软中断通信。
要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child Processll is Killed by Parent!Child Processl2 is Killed by Parent!父进程等待两个子进程终止后,输出如下的信息后终止Parent Process is Killed!②在上面的程序中增加语句signal (SIGNAL, SIG-IGN) 和signal (SIGQUIT, SIG-IGN), 观察执行结果,并分析原因。
4.进程的管道通信。
编制一段程序,实现进程的管理通信。
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道中写一句话:Child 1 is sending a message!Child 2 is sending a message!而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。
实验2 指导[实验内容]1.进程的创建〈任务〉编写一段程序,使用系统调用fork( )创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。
试观察记录屏幕上的显示结果,并分析原因。
〈程序〉#include<>main(){int p1,p2;if(p1=fork()) /*子进程创建成功*/p utchar('b');else{if(p2=fork()) /*子进程创建成功*/putchar('c');else putchar('a'); /*父进程执行*/}}<运行结果>bca(有时会出现abc的任意的排列)分析:从进程执行并发来看,输出abc的排列都是有可能的。
原因:fork()创建进程所需的时间虽然可能多于输出一个字符的时间,但各个进程的时间片的获得却不是一定是顺序的,所以输出abc的排列都是有可能的。
2.进程的控制<任务>修改已编写好的程序,将每个程序的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现象,并分析其原因。
如果在程序中使用系统调用lockf()来给每个程序加锁,可以实现进程之间的互斥,观察并分析出现的现象。
〈程序1〉#include<>main(){int p1,p2,i;if(p1=fork()){for(i=0;i<500;i++)printf("parent%d\n",i);wait(0); /* 保证在子进程终止前,父进程不会终止*/exit(0);}else{i f(p2=fork()){for(i=0;i<500;i++)printf("son %d\n",i);wait(0); /* 保证在子进程终止前,父进程不会终止*/exit(0); /*向父进程信号0且该进程退出*/}e lse{for(i=0;i<500;i++)printf(“grandchild %d\n",i);exit(0);}}}〈运行结果〉parent….son…grandchild…grandchild…或grandchild…son…grandchild…son…parent分析:由于函数printf()输出的字符串之间不会被中断,因此,每个字符串内部的字符顺序输出时不变。
但是 , 由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。
这与打印单字符的结果相同。
〈程序2〉#include<>#include<>main(){int p1,p2,i;if(p1=fork()){lockf(1,1,0);for(i=0;i<500;i++)printf("parent %d\n",i);lockf(1,0,0);wait(0); /* 保证在子进程终止前,父进程不会终止*/exit(0);}else{if(p2=fork()){lockf(1,1,0);for(i=0;i<500;i++)printf("son %d\n",i);lockf(1,0,0);wait(0); /* 保证在子进程终止前,父进程不会终止*/exit(0);}else{lockf(1,1,0);for(i=0;i<500;i++)printf("daughter %d\n",i);lockf(1,0,0);exit(0);}}}<运行结果〉输出parent块,son块,grandchild块的顺序可能不同,但是每个块的输出过程不会被打断。
分析:因为上述程序执行时,lockf(1,1,0)锁定标准输出设备,lockf(1,0,0)解锁标准输出设备,在lockf(1,1,0)与lockf(1,0,0)中间的for循环输出不会被中断,加锁与不加锁效果不相同。
3.软中断通信〈任务1〉编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:child process1 is killed by parent!child process2 is killed by parent!父进程等待两个子进程终止后,输出以下信息后终止:parent process is killed!<程序流程图>〈程序〉#include<>#include<>#include<>void waiting(),stop(),alarming();int wait_mark;main(){int p1,p2;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);signal(SIGINT,SIG_IGN); /*忽略 ^c信号*/while (wait_mark!=0);lockf(1,1,0);printf("child process2 is killed by parent!\n");lockf(1,0,0);exit(0);}}else{wait_mark=1;signal(16,stop);signal(SIGINT,SIG_IGN); /*忽略^c信号*/while (wait_mark!=0)lockf(1,1,0);printf("child process1 is killed by parent!\n");lockf(1,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;}<运行结果>不做任何操作等待五秒钟父进程回在子进程县推出后退出,并打印退出的顺序;或者点击ctrl+C后程序退出并打印退出的顺序。
〈任务2〉在上面的任务1中,增加语句signal(SIGINT,SIG_IGN)和语句signal(SIGQUIT,SIG_IGN),观察执行结果,并分析原因。
这里,signal(SIGINT,SIG_IGN)和signal(SIGQUIT,SIG_IGN)分别为忽略键信号以及忽略中断信号。
<程序>#include<>#include<>#include<>int pid1,pid2;int EndFlag=0;int pf1=0;int pf2=0;void IntDelete(){kill(pid1,16);kill(pid2,17);}{printf("child process 1 is killed !by parent\n");exit(0);}void Int2(){printf("child process 2 is killed !by parent\n");exit(0);}main(){int exitpid;if(pid1=fork()){if(pid2=fork()){signal(SIGINT,IntDelete);waitpid(-1,&exitpid,0);waitpid(-1,&exitpid,0);printf("parent process is killed\n");exit(0);}else{signal(SIGINT,SIG_IGN);signal(17,Int2);pause();}}else{signal(SIGINT,SIG_IGN);signal(16,Int1);pause();}}〈运行结果〉请将上述程序输入计算机后,执行并观察。
3.进程的管道通信〈任务〉编制一段程序,实现进程的管道通信。
使用系统调用pipe()建立一条管道线。