实验一-进程控制实验
- 格式:doc
- 大小:89.00 KB
- 文档页数:5
操作系统实验实验1 进程描述与控制操作系统是计算机系统中重要的组成部分,负责管理计算机的硬件资源,并为用户提供一个友好的界面。
进程是操作系统中的核心概念之一,它代表了正在运行的程序实例。
本次实验旨在通过实践,帮助学生们理解进程的描述和控制。
一、实验目的实验的主要目的是加深学生对操作系统中进程概念的理解,培养学生对进程描述和控制的能力。
通过本次实验,学生将学习以下内容:1. 了解进程的概念和特性;2. 学习进程的描述方法;3. 掌握进程的控制方法。
二、实验内容1. 进程描述进程描述是指对进程进行详细的定义和描述。
学生们需要了解进程的状态,包括运行状态、就绪状态和阻塞状态,并能够描述进程的优先级、标示符等基本属性。
2. 进程控制进程控制包括对进程的创建、调度、挂起和销毁等操作。
学生们需要通过编程实践,掌握这些基本的进程控制操作。
在实验中,可以通过编写相关的程序,并模拟进程的创建和调度等操作,进一步理解进程控制的过程和原理。
三、实验步骤1. 进程描述在实验开始前,学生们应先学习进程的基本概念和特性,了解进程的状态和属性。
然后,根据自己的理解,对进程进行描述。
可以借助图表或文字等形式,将进程的状态和属性进行清晰的描述。
2. 进程控制学生们可以选择使用合适的编程语言,编写程序来模拟进程的创建、调度和销毁等操作。
在编写程序的过程中,可以利用操作系统提供的相关函数和接口,完成进程的控制操作。
学生们可以尝试编写多个进程,并通过调度算法控制进程的执行顺序。
3. 实验结果分析在实验结束后,学生们应对实验结果进行分析。
可以观察和比较不同进程调度算法的执行效果,尝试找出优化的方案。
同时,也要考虑进程的优先级对整体执行效率的影响。
四、实验总结本次实验通过操作系统实际的编程实践,帮助学生们深入理解了进程的描述和控制。
同时,也为学生们提供了一个锻炼编程能力和分析问题能力的机会。
通过本次实验,我们希望能够培养学生们的问题解决能力和团队合作精神。
测试过程: (实验中出现的问题、错误、解决方法)创建好项目和文件, 对文件进行编译和运行, 编译没有错误, 但是运行总是提示有2个错误。
解决办法:在新建项目的时候“新建”, 然后新建文件, 程序就可以正常的运行了。
实验总结:1、课下没有对Microsoft Visual c++ 6.0进行深入的研究, 还是好多问题不知道怎么解决, 好好钻研一下这个很有必要的啊!评语与成绩:教师签名:年月日实验名称进程控制实验类型验证性实验时间实验环境Windows xp 、Microsoft Visual c++ 6.0实验目的与要求:1.通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作, 进一步熟悉操作系统的进程概念, 理解Windows 2000进程的“一生”。
2.通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法。
实验内容:本实验给出了三段程序:创建进程、正在运行的进程和终止进程, 阅读程序回答所提问题, 分析运行结果。
一、实验步骤: (算法描述、源程序、操作步骤和方法)二、创建进程回答问题:1.该程序是一个简单使用CreateProcess()API函数的例子。
首先形成简单的命令行, 提供当前EXE文件的指定文件名和代表生成克隆进程的号码。
大多数参数都可取默认值, 但是创建标志参数使用了CREATE_NEW_CONSOLE标志, 指示新进程分配自己的控制台, 这使得运行程序时, 在任务栏上产生许多活动标记。
然后该克隆进程的创建方法关闭传递过来的句柄并返回main ()函数。
在关闭程序之前, 每一进程的执行主线程暂停一下, 以便让用户看到其中的至少一个窗口。
2、CreateProcess()函数有几个核心参数?本实验程序中设置的各个参数的值是什么?答、CreateProcess()函数有10个核心参数参数的值为: CreateProcess(szFilename, //产生这个EXE的应用程序的名称szCmdLine, //告诉其行为像一个子进程的标志NULL, //缺省的进程安全性NULL, //缺省的线程安全性FALSE, //不继承句柄CREATE_NEW_CONSOLE, //使用新的控制台NULL, //新的环境NULL, //当前目录&si, //启动信息&pi);3.程序运行时屏幕显示的信息是什么?答、三、运行进程1、回答问题:2、给出运行结果(当前PID信息、操作系统版本、系统提示信息)答、运行结果为:2.如何获得当前的PID和操作系统版本可利用GetCurrentProcessId()API函数查看系统当前进程的标识符(pid), 该pid在整个系统中都可使用。
实验一进程控制与处理机调度综合实验一、实验目的通过模拟进程控制方法及单处理机系统的进程调度,了解进程的结构,进程的创建与撤消,进程的组织及进程的状态及其转换,掌握进程调度策略。
二、实验内容本实验为单机模拟进程调度算法,在程序设计时不需真正地建立线程或者进程。
实验模拟创建若干进程(人为输入或随机数产生),选择一种或几种单处理机的进程调度算法,如FCFS (先来先服务),SPF(短进程优先),RR(时间片轮转法),优先级算法等,模拟进行进程调度。
每进行一次调度,都打印一次运行进程、就绪队列、以及各个进程的PCB,并能在进程完成后及时撤消该进程。
三、算法描述1 进程及进程的运行状态进程是现代计算机中的基本要素,是系统分配资源和调度的基本单位。
进程与程序不同,进程是系统中动态的实体,有它的创建、运行和撤销的过程。
PCB块是系统感知进程存在的唯一实体。
进程的创建必须首先创建进程的PCB块,而进程的运行也伴随着PCB块的变化,进城撤销也要同时撤销它的PCB块。
所以本实验的任务就是通过模拟调度进程的PCB块来调度进程。
进程的PCB块包含以下四方面的内容:a) 进程标示符b) 处理及状态信息c) 进程调度信息d) 进程控制信息进程在运行中存在三种基本状态,分别是运行状态、就绪状态和阻塞状态。
2 进程调度一个运行进程的时间片用完或发生阻塞时,系统就会选择一个就绪进程调度执行。
进程的调度算法有很多如FCFS、SPF、优先级调度和时间片轮转方法。
进程调度算法模拟试验就是通过调度进程的PCB块来模拟调度进程。
在系统中PCB块就表现为一个结构体,PCB块之间的连接方式存在两种,一种是连接方式,一种是索引方式。
本试验中可选择任意一种连接方式。
3 例程设计一个有 N个进程共行的进程调度程序。
进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)。
每个进程有一个进程控制块(PCB)表示。
进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
进程控制与进程通信程序实验报告一、引言进程是计算机系统中最基本的概念之一,是操作系统中最小的资源管理单位。
进程控制与进程通信是操作系统中重要的内容,涉及到进程的创建、调度和终止,以及进程间的信息传递和同步管理。
本实验旨在通过编写进程控制与进程通信程序,加深对操作系统中进程管理和通信机制的理解。
二、实验目的1. 理解进程的概念和特点,掌握进程的创建、调度和终止方法。
2. 掌握进程通信的基本原理和方法,包括共享内存、管道、消息队列和信号量等。
3. 能够编写简单的进程控制和进程通信程序。
三、实验内容1. 进程控制实验:编写一个程序,实现进程的创建、调度和终止。
通过调用系统调用函数,创建多个子进程,并通过进程控制函数实现父子进程的协作与同步。
2. 进程通信实验:编写一个程序,实现进程间的信息传递和同步管理。
通过共享内存、管道、消息队列或信号量等机制,实现不同进程之间的数据交换和共享。
四、实验步骤1. 进程控制实验:(1)创建父进程和子进程:使用fork()函数创建子进程,并通过判断返回值来区分父子进程。
(2)调度子进程:使用wait()函数等待子进程的结束,以实现父子进程的同步。
(3)终止子进程:使用exit()函数终止子进程的运行。
2. 进程通信实验:(1)共享内存:使用shmget()函数创建共享内存段,使用shmat()函数映射共享内存到进程的地址空间,实现共享数据的读写。
(2)管道:使用pipe()函数创建管道,使用fork()函数创建子进程,通过读写管道实现进程间的数据传输。
(3)消息队列:使用msgget()函数创建消息队列,使用msgsnd()函数向消息队列发送消息,使用msgrcv()函数从消息队列接收消息,实现进程间的消息传递。
(4)信号量:使用semget()函数创建信号量,使用semop()函数对信号量进行P操作和V操作,实现进程间的同步和互斥。
五、实验结果通过实验,我们成功实现了进程的创建、调度和终止,以及进程间的信息传递和同步管理。
实验一:进程控制与描述一、实验目的:利用Windows提供的API函数,编写程序,实现进程的创建和终止(如创建写字板进程及终止该进程),加深对操作系统进程概念的理解,观察操作系统进程运行的动态性能,获得包含多进程的应用程序编程经验。
二、实验原理:1.进程的创建进程的创建通过CreateProcess()函数来实现,CreateProcess()通过创建一个新的进程及在其地址空间内运行的主线程来启动并运行一个新的程序。
具体地,在执行CreateProcess()函数时,首先由操作系统负责创建一个进程内核对象,初始化计数为1,并立即为新进程创建一块虚拟地址空间。
随后将可执行文件或其他任何必要的动态链接库文件的代码和数据装载到该地址空间中。
在创建主线程时,也是首先由系统负责创建一个线程内核对象,并初始化为1。
最后启动主线程并执行进程的入口函数WinMain(),完成对进程和执行线程的创建。
2.实现技巧CreateProcess()函数的原型声明如下:BOOL CreateProcess(LPCTSTR lpApplicationName, // 可执行模块名LPTSTR lpCommandLine, // 命令行字符串LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程的安全属性LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程的安全属性BOOL bInheritHandles, // 句柄继承标志DWORD dwCreationFlags, // 创建标志LPVOID lpEnvironment, // 指向新的环境块的指针LPCTSTR lpCurrentDirectory, // 指向当前目录名的指针LPSTARTUPINFO lpStartupInfo, // 指向启动信息结构的指针LPPROCESS_INFORMATION lpProcessInformation //指向进程信息结构的指针)可以指定第一个参数,即应用程序的名称,其中包括相对于当前进程的当前目录的全路径或者利用搜索方法找到的路径;lpCommandLine参数允许调用者向新应用程序发送数据;接下来的三个参数与进程和它的主线程以及返回的指向该对象的句柄的安全性有关。
实验一进程控制描述与控制第一部分 Windows“任务管理器”的进程管理背景知识Windows 2000/XP/XP的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。
使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。
也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。
其中:1) “应用程序”选项卡显示正在运行程序的状态,用户能够结束、切换或者启动程序。
2) “进程”选项卡显示正在运行的进程信息。
例如,可以显示关于CPU 和内存使用情况、页面错误、句柄计数以及许多其他参数的信息。
3) “性能”选项卡显示计算机动态性能,包括CPU 和内存使用情况的图表,正在运行的句柄、线程和进程的总数,物理、核心和认可的内存总数(KB) 等。
实验目的通过在Windows 任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。
工具/准备工作在开始本实验之前,请回顾教科书的相关内容。
需要准备一台运行Windows 2000/XP/XP操作系统的计算机。
实验内容与步骤1. 使用任务管理器终止进程2. 显示其他进程计数器3. 更改正在运行的程序的优先级启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜“运行”,并输入“taskmgr.exe”单中单击“任务管理器”命令,或者是在点击任务条上的“开始”打开“任务管理器”窗口。
在本次实验中,你使用的操作系统版本是:Microsoft Windows XP Professional 版本2002当前机器中由你打开,正在运行的应用程序有:1)实验一进程控制描述与控制34- Microsoft Word2) 我的电脑3) ftp://192.168.15.8/- Microsoft Internet Explorer4) __________________________________________________________________5) __________________________________________________________________Windows“任务管理器”的窗口由_5_个选项卡组成,分别是:1) 应用程序________________________________________________2) 进程__________________________________________________________3) 性能_____________________________________________________________4) 联网______________________________________________________________5) 用户_____________________________________________________________当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :1. 使用任务管理器终止进程步骤1:单击“进程”选项卡,一共显示了__40_个进程。
实验一:进程控制描述与控制[1] Windows“任务管理器”的进程管理一、实验名称Windows“任务管理器”的进程管理二、实验目的通过在Windows 任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。
三、实验内容与步骤启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。
在本次实验中,你使用的操作系统版本是:_______Windows_XP______________________当前机器中由你打开,正在运行的应用程序有:1) _______ ________2) ___________实验一___3) _________操作系统_____________4) ___________百度首页 ________5)Windows“任务管理器”的窗口由____4__个选项卡组成,分别是:1) _______应用程序______________2) _进程__________________3) ______ 性能___________________4) ________联网__________________当前“进程”选项卡显示的栏目分别是 (可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :1. 使用任务管理器终止进程步骤1:单击“进程”选项卡,一共显示了__40___个进程。
请试着区分一下,其中:系统 (SYSTEM) 进程有____25__个,填入表3-1中。
表3-1 实验记录Wmiprvse SYSTEM005376k cidaemon SYSTEM00300k cidaemon SYSTEM00856k cidaemon SYSTEM50284k cisvc SYSTEM00924k csrss SYSTEM007412k mqtgsvc SYSTEM004144k mqsvc SYSTEM006632k snmp SYSTEM004340k tcpservcs SYSTEM003840k Smss SYSTEM00404k System SYSTEM00300kSystem IdleSYSTEM9928k Processwinlogon SYSTEM001684kservices SYSTEM005776k lsass SYSTEM001100k svchost SYSTEM005324k mDNSResponder SYSTEM003920k svchost SYSTEM0018716k inetinfo SYSTEM0010608k samservice SYSTEM002460k PGPserv SYSTEM006880k PandoraService SYSTEM009148kspoolsv SYSTEM005688kMDM SYSTEM003416k服务 (SERVICE) 进程有_____5_个,填入表3-2中。
《操作系统原理》实验报告
实验序号:4 实验项目名称:进程控制
一、实验目的及要求
1. 加深对进程信号量的理解。
2. 理解进程同步与互斥机制。
3. 掌握Linux操作系统下的进程控制编程。
二、实验设备(环境)及要求
1.虚拟机VMware Workstation、Ubuntu操作系统和C语言编程。
2.编写一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Ctrl C键),当捕捉到中断信号后,父进程调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下面信息后终止:
child process 1 is killed by parent!
child process 2 is killed by parent!
父进程等待两个子进程终止后,输出以下信息后终止:
parent process is killed!
三、实验内容与步骤
代码:
在终端上进行测试
四、实验结果与数据处理
五、分析与讨论
了解了计算机进程的管理以及signal()函数的作用。
六、教师评语成绩。
实验2进程控制(1)
实验目的
1、掌握Linux中进程的创建方法及执行情况。
2、加深对进程、进程树等概念的理解。
实验内容
编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在
系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个
字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。
实验步骤:
#include
main()
{
int p1,p2;
if (p1=fork())
putchar('b');
else{
if(p2=fork())
putchar('c');
else
putchar('a');
}
}
实验结果:
2、运行以下程序,分析程序执行过程中产生的进程情况。
#include
main()
{
int p,x;
p=fork();
if (p>0)
fork();
else{
fork();
fork();
}
sleep(15);
}
实验步骤:
1) 输入程序 gedit forktree.c
2) 编译连接 gcc –o forktree forktree.c
3) 后台运行 ./forktree &
4) 使用 pstree –h 查看进程树
实验结果:
实验报告实验题目姓名:学号:课程名称:操作系统实验所在学院:信息科学与工程学院专业班级:计算机任课教师:核心为fork( )完成以下操作:(1)为新进程分配一进程表项和进程标识符进入fork( )后,核心检查系统是否有足够的资源来建立一个新进程。
若资源不足,则fork( )系统调用失败;否则,核心为新进程分配一进程表项和唯一的进程标识符。
(2)检查同时运行的进程数目超过预先规定的最大数目时,fork( )系统调用失败。
(3)拷贝进程表项中的数据将父进程的当前目录和所有已打开的数据拷贝到子进程表项中,并置进程的状态为“创建”状态。
(4)子进程继承父进程的所有文件对父进程当前目录和所有已打开的文件表项中的引用计数加1。
(5)为子进程创建进程上、下文进程创建结束,设子进程状态为“内存中就绪”并返回子进程的标识符。
(6)子进程执行虽然父进程与子进程程序完全相同,但每个进程都有自己的程序计数器PC(注意子进程的注意子进程的PC 开始位置),然后根据pid 变量保存的fork( )返回值的不同,执行了不同的分支语句。
四、实验过程、步骤及内容1、编写一段程序,使用系统调用fork( )创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。
试观察记录屏幕上的显示结果,并分析原因。
2、修改上述程序,每一个进程循环显示一句话。
子进程显示'daughter …'及'son ……',父进程显示'parent ……',观察结果,分析原因。
3、用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容4、用fork( )建立如下形式的进程树:A进程B进程C进程D进程各个进程中都打印出本身PID 和其父进程的PID,并用wait( )来控制进程执行顺序,打印出正确和期望的结果。
进程控制实验报告进程控制实验报告一、实验目的本实验旨在通过实际操作,深入理解进程控制的概念、原理和实现方式,掌握进程控制的技巧和方法,提升解决实际问题的能力。
二、实验原理进程控制是操作系统内核的重要功能之一,它负责协调和管理系统中多个进程的执行顺序和资源分配。
进程控制的主要任务包括创建和终止进程、进程切换和进程同步等。
本实验将通过具体的操作,学习和体验进程控制的过程和细节。
三、实验步骤1.实验准备(1)了解和熟悉实验室环境,包括计算机硬件配置、操作系统版本等信息。
(2)准备实验材料,包括相关文档、软件工具等。
(3)明确实验任务和目的,制定实验计划。
2.创建进程(1)打开实验环境,启动操作系统。
(2)使用编程语言(如C语言)编写一个简单的程序,该程序将创建一个新的进程。
(3)编译并运行程序,观察和记录进程的创建过程。
3.进程切换(1)编写一个程序,该程序将在两个进程之间进行切换。
(2)运行程序,观察和记录进程切换的过程和效果。
4.进程同步(1)使用信号量或其他同步机制实现两个进程的同步。
(2)运行程序,观察和记录进程同步的过程和效果。
5.进程终止(1)编写一个程序,该程序将终止一个指定的进程。
(2)运行程序,观察和记录进程终止的过程和效果。
6.实验总结与报告编写(1)总结实验过程和结果,梳理实验中的问题和解决方法。
(2)编写实验报告,包括实验目的、原理、步骤、结果分析等。
四、实验结果与分析通过本次实验,我们成功地创建了一个新的进程,并实现了进程之间的切换、同步和终止。
在实验过程中,我们深入理解了进程控制的概念、原理和实现方式,掌握了进程控制的技巧和方法。
同时,我们也遇到了一些问题,如进程创建失败、进程切换不成功等,但通过仔细分析问题原因并采取相应的解决方法,最终成功解决了这些问题。
通过本次实验,我们不仅学到了专业知识,也提高了解决实际问题的能力。
五、实验结论与建议本次实验让我们更加深入地理解了进程控制的相关知识,并掌握了进程控制的基本操作方法。
信息学院操作系统实验报告*名:***学号:**********专业:软件工程班级:软件1302班实验名称:进程控制与描述实验一进程控制与描述3.1 Windows“任务管理器”的进程管理3.1.1 Windows XP的任务管理器Windows XP的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。
使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。
也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。
其中:1) “应用程序”选项卡显示正在运行程序的状态,用户能够结束、切换或者启动程序。
2) “进程”选项卡显示正在运行的进程信息。
例如,可以显示关于CPU 和内存使用情况、页面错误、句柄计数以及许多其他参数的信息。
3) “性能”选项卡显示计算机动态性能,包括CPU 和内存使用情况的图表,正在运行的句柄、线程和进程的总数,物理、核心和认可的内存总数(KB) 等。
3.1.2 练习与实验在本节“练习与实验”中,通过在Windows任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。
1. 工具/准备工作在开始本实验之前,请回顾教科书的相关内容。
需要准备一台运行Windows XP Professional操作系统的计算机。
2. 实验内容与步骤启动并进入Windows环境,单击Ctrl+Alt+Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。
在本次实验中,你使用的操作系统版本是:_____windowsXP_______________________________________________当前机器中由你打开,正在运行的应用程序有:1)Microsoft_WordWindows“任务管理器”的窗口由4个选项卡组成,分别是:1)应用程序2) 进程3) 性能4)用户当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :1) 映像名称2) 用户名3) CPU4)内存使用(1) 使用任务管理器终止进程步骤1:单击“进程”选项卡,一共显示了__48个进程。
进程控制实验报告进程控制实验报告一、引言进程控制是操作系统中的重要概念,它涉及到进程的创建、调度、终止等方面。
本篇实验报告将介绍我们在进程控制实验中所进行的工作和实验结果。
二、实验目的本次实验的目的是通过编写程序,了解进程的创建、调度和终止过程,并掌握相关的系统调用和操作。
三、实验环境我们使用的实验环境是Linux操作系统,并使用C语言编写程序。
四、实验步骤1. 进程创建在实验中,我们编写了一个简单的程序,用于创建新的进程。
通过调用系统调用fork(),我们可以在父进程中创建一个子进程。
子进程是父进程的副本,它们共享一些资源,但有各自独立的执行空间。
2. 进程调度在实验中,我们使用了系统调用exec()来进行进程调度。
通过调用exec(),我们可以在一个进程中执行另一个可执行文件。
这样,原来的进程将被替换为新的进程,并开始执行新的程序。
3. 进程终止在实验中,我们使用了系统调用exit()来终止一个进程。
当一个进程执行完毕或者遇到错误时,可以调用exit()来结束自己的执行。
同时,exit()函数还可以传递一个整数值作为进程的返回值,供其他进程获取。
五、实验结果通过实验,我们成功地创建了多个进程,并进行了调度和终止操作。
我们观察到,创建的子进程在父进程的基础上执行,并且具有独立的执行空间。
在调度过程中,我们能够看到进程的切换和执行结果的输出。
在终止过程中,我们成功地结束了进程的执行,并获取了进程的返回值。
六、实验总结通过本次实验,我们深入了解了进程控制的相关概念和操作。
我们通过编写程序,实际操作了进程的创建、调度和终止过程。
这些实验结果对于我们理解操作系统的工作原理和进程管理机制具有重要意义。
七、实验感想本次实验让我们深刻认识到进程控制在操作系统中的重要性。
进程的创建、调度和终止是操作系统能够高效运行的基础。
通过实验,我们不仅掌握了相关的系统调用和操作,还加深了对操作系统原理的理解。
八、实验改进在实验中,我们可以进一步扩展功能,例如实现进程间的通信和同步机制。
实验一 进程控制
一、实验目的:
加深对进程概念的理解,明确进程和程序的区别;掌握Linux操作系统的进程创建和终
止操作,体会父进程和子进程的关系及进程状态的变化;进一步认识并发执行的实质,编写
并发程序。
二、实验平台:
虚拟机:VMWare9以上
操作系统:Ubuntu12.04以上
编辑器:Gedit | Vim
编译器:Gcc
三、实验内容:
(1)编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中
有一个父进程和两个子进程活动。让每一个进程在屏幕上显示“身份信息”:父进程显示
“Parent process! PID=xxx1 PPID=xxx2”;子进程显示“Childx process! PID=xxx PPID=xxx”。
多运行几次,观察记录屏幕上的显示结果,并分析原因。
说明:
xxx1为进程号,用getpid()函数可获取进程号;
xxx2为父进程号,用getppid()函数可获取父进程号;
Childx中x为1和2,用来区别两个子进程;
wait()函数用来避免父进程在子进程终止之前终止。
程序源码:
#include
#include
#include
#define NUM 2
int main(void)
{
pid_t pid1,pid2;
if((pid1=fork())<0){
printf("创建进程1失败");
}else{
if(pid1==0){
//子进程1执行
printf("Child1 process: ");
printf("PID=%d PPID=%d \n",getpid(),getppid());
sleep(2);
}else{
if((pid2=fork())<0){
printf("创建进程2失败");
}else{
if(pid2==0){ //子进程2执行
printf("Child2 process: ");
printf("PID=%d PPID=%d \n",getpid(),getppid());
}
else{
//父进程执行
wait();
wait();
printf("Parent process: ");
printf("PID=%d PPID=%d \n",getpid(),getppid());
exit(0);
}
}
}
}
}
执行结果
whtcmiss@whtcmiss-VirtualBox:~/Desktop$ gcc test1.c -o test
whtcmiss@whtcmiss-VirtualBox:~/Desktop$ ./test
Child2 process: PID=2527 PPID=2525
Child1 process: PID=2526 PPID=2525
Parent process: PID=2525 PPID=2127
whtcmiss@whtcmiss-VirtualBox:~/Desktop$ ./test
Child2 process: PID=2530 PPID=2528
Child1 process: PID=2529 PPID=2528
Parent process: PID=2528 PPID=2127
whtcmiss@whtcmiss-VirtualBox:~/Desktop$ ./test
Child2 process: PID=2533 PPID=2531
Child1 process: PID=2532 PPID=2531
Parent process: PID=2531 PPID=2127
实验结果分析:
第一次程序运行结果,两个子进程的PPID都是2525,是由同一个进程创建。而父进程
PID是2525,父进程PPID是2127,说明父进程也是一系统进程的子进程。
第二次程序运行结果,父进程PID是2528,PPID是2127,说明父进程是由同一进程创
建的,父进程也是以子进程的方式存在,且进程ID是逐渐递增的。
(2)fork()和exec()系列函数能同时运行多个程序,利用上述函数将下面单进程顺序执行
的程序single.c改造成可并发执行3个进程的程序multi_process.c;并用time命令获取程序的执
行时间,比较单进程和多进程运行时间,并分析原因。
//single.c
#include
#define NUM 5
int main(void)
{
void print_msg(char *m);
print_msg("Good ");
print_msg("Morning ");
print_msg("007\n"); //将007替换为本人学号
return 0;
}
void print_msg(char *m)
{
int i;
for(i = 0; i
fflush(stdout);
sleep(1);
}
}
编译运行方法:
#gcc single.c –o single
#time ./single
单线程执行结果:
多线程代码:
#multi_process.c
#include
#include
#include
#define NUM 5
int main(void)
{
pid_t pid[3];
int i;
for(i=1;i<=3;i++){
pid[i-1]=fork();
if(pid[i-1]==0||pid[i-1]==-1)
break;
}
if(pid[0]==0){
execl("print","print","Good",NULL);
}
else {
if(pid[1]==0){
execl("print","print","Hello",NULL);
}
else{
if(pid[2]==0){
execl("print","print","201300814113",NULL);
}
wait();
wait();
wait();
exit(0);
}
}
return 0;
}
实验分析:第二个实验结果,第二个程序的多线程因为是并发执行,而且是有三
个线程,所以在时间上几乎是单线程的1/3,而且因为是并发的,所以打印结果
是无序的。
实验总结
本次实验首先要明确
进程和程序的区别,我通过在Linux操作系统的进程创建和终
止操作,运行父进程和子进程,查看运行结果和进程状态的变化。实验过程中也了解了父进
程与子进程的运行过程及其机制。