操作系统实验指导书-实验二进程管理_第1页
操作系统实验指导书-实验二进程管理_第2页
操作系统实验指导书-实验二进程管理_第3页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二 进程管理一、实验目的(1) 加深对进程概念的理解,明确进程和程序的区别。(2) 深入了解操作系统如何组织进程和创建进程。(3) 进一步认识如何实现处理器调度。二、实验预备知识(1) 进程的概念(2) PCB。(3) 进程的组织方式。(4) 进程的创建。(5) 进程的调度。三、实验内容1. 观察 Windows2000/XP 中的进程和线程熟悉Windows2000/XP中任务管理器的使用,通过任务管理器识别操作系统 中的进程和线程的相关信息;掌握利用spy+.exe来察看Windows中各个任务的 更详细信息。具体实验步骤如下:(1) 启动操作系统自带的任务管理器:方法:直接按组合键

2、Ctrl+Alt+Del ,或者是在点击任务条上的“开始” “运 行”,并输入“ taskmgr.exe ”。如下图所示:O Windows任务管理器口旦冈映像名称用户名CFVMaxthon. exeLjim00taslonigr.电盟輕Ljun02explorer.Ljur02MprSnapS exeLjgQCnWORD. EXELjurOCHprSnapS exeLjun00wdfmgr. exeLOCAL SERVICEoosvchost. exeSYSTEM00Rtvscan.STSTEWOCDeOatcKSYSTEMOCjjsvr4. exeLjim00spoolsv. esceST

3、STENI00svchost. exeLOCAL SERVICE00svchost.含北电WETWORK SERVICEQCsvchoEt.SYSTEMOCsvchst. exeNETWORK SERVICE00Evchost- e?ceSYSTEM 1<J内存使用AB 2 22 7 72 _8 7200 46486 8 00488 30687205 2 26608 5395566545743-2显示所有用户的进程立件电)选项查看® 关机 帮肋侃)应用程序进程性能联网用户进程瘀26CFV使用:6%提交更改 2S9264K / 616543:(2) 调整任务管理器的“查看”中的相

4、关设置,显示关于进程的以下各项信息,并完成下表(填满即可):表一:统计进程的各项主要信息序号进程名称进程ID线程数量占用内存优先级占CPU时间虚拟内存12345678(3) 从桌面启动办公软件“ Wort”,在任务管理器中找到该软件的登记,并将其结束掉。再从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是,原因是。(4) 在任务管理器中找到进程“ explorer.exe ”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化、得到的结论是(说出explorer.exe

5、进程的作用)。5、运行“ spy+.exe ”应用软件,点击按钮“ ”,切换到进程显示栏上,查看进程“ explorer.exe ”的各项信息,并填写下表:表二:统计线程的各项信息进程:explorer.exe中的各个线程序号进程ID线程ID基本优先级当前优先级CPU时间上下文开关1234567891011121314+ O 舉率 OUZB 阳 E级LLIRER6注意某些线程前有“ + ” ,如图所示:=:,说明二者之间的差异是。2.利用API在Windows下创建进程学习使用在 Windows2000/XP中利用API创建进程的方法;学习了解创建进 程函数CreateProcess及其特性;

6、设计测试程序,通过在命令行中加载相应的测 试程序生成的命令文件,去按照命令文件中指定的程序路径打开相应的程序去执 行。1)相关知识介绍在创建一个线程时,Windows会做大量的工作-创建一个新的地址空间,为 进程分配资源以及创建一个基线程。CreateProcess函数的原型如下:CreateProcess(LPCTSTR IpApplicatio nName,/poin ter to n ame of executable moudleLPTSTR cmdLi ne,/poin ter to comma nd line stri ng LPSECURITY_ATTRIBUTES lpProc

7、essAttributes, /poin ter to process security attributes LPSECURITY_ATTRIBUTES lpThreadAttributes, /poin ter to theread security attributesBOOL bInheritHandle ,/handle inheritance flagDWORD dwCreationFlag, /various creation flagsLPVOID lpEnviroment ,/Enviroment variableLPCTSTR lpCurrentDirectory , /C

8、hild's current directory LPSTARTUPINFO lpStartupInfo , /pointer to StartupInfo LPPROCESS_INFORMATION lpProcessInformation/pointer to PROCESS_INFORMATION )创建进程的函数为 CreateProces,s 该函数比较复杂共有十个参数BOOL CreateProcess(LPCTSTR lpApplicationName, / 执行程序文件名LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES LPSECU

9、RITY_ATTRIBUTES BOOL bInheritHandles, / DWORD dwCreationFlags, / LPVOID lpEnvironment, / LPCTSTR lpCurrentDirectory,/参数行lpProcessAttributes, /进程安全参数 lpThreadAttributes, / 线程安全参数 继承标记创建标记环境变量/运行该子进程的初始目录LPSTARTUPINFO lpStartupInfo, /创建该子进程的相关参数LPPROCESS_INFORMATION lpProcessInformation/ 创建后用于被创建子进程的信

10、息);虽然有很多参数, 不过在现阶段的实验级别, 大多数参数只要用默认值即可。 lpApplicationName :为执行程序的文件名, 如果在创建进程时要使用参数, 则该参数可以为 NULL 。IpCommandLine:为参数行,如果无参数可以为 NULL,在有参数传递给 进程时如 下设置: lpApplicationName=NULL ;lpCommandLine=para, 例如 IpCommandLine="c:windowsnotepad.exe c:autoexec.bat"。IpProcessAttributes, IpThreadAttributes:分

11、别描述了创建的进程和线程安全 属性,如果使用 NULL 表示使用默认的安全描述。blnheritHandles:表示当前进程中的打开的句柄是否能够被创建的子进程所 继承。dwCreationFlags:表示创建标记,通过该标记可以设置进程的创建状态和优 先级别。常用的有下面的标记:CREATE_NEW_CONSOLE :为子进程创建一个新的控制台。CREATE_SUSPENDED :子进程在创建时为挂起状态。 HlGH_PRlORlTY_CLASS/NORMAL_PRlORlTY_CLASS :高/普通优先级别。lpEnvironment:表示子进程所使用的环境变量,如果为 NULL,则表示与

12、当前 进程使用相同的环境变量。lpCurre ntDirectory :表示子进程运行的初始目录。lpStartupI nfo:用于在创建子进程时设置各种属性。该结构定义如下:typedef struct _STARTUPlNFO / siDWORDcb; /结构长度LPTSTRlpReserved; /保留LPTSTRlpDesktop; /保留LPTSTRlpTitle;/如果为控制台进程则为显示的标题DWORDdwX;/ 窗口位置DWORDdwY;/窗口位置DWORDdwXSize; /窗口大小DWORDdwYSize; /窗口大小DWORDdwXCountChars; /控制台窗口字符

13、号宽度DWORDdwYCountChars; /控制台窗口字符号高度DWORDdwFillAttribute;/控制台窗口填充模式DWORDdwFlags; /创建标记WORDwShowWindow; /窗口显示标记如同 ShowWindowWORDcbReserved2; /LPBYTElpReserved2; /6HANDLEhStdInput;/标准输入句柄HANDLEhStdOutput;/ 标准输出句柄HANDLEhStdError;/标准错误句柄STARTUPINFO,*LPSTARTUPINFO;如果要使结构中相关的分量起作用,必须正确的设置dwFlag&例如:dwFla

14、gs 包 含 STARTF_USESIZE 表 示 dwXSize 和 dwYSize 有 效 , 包 含STARTF_USEPOSITION 表示 dwX 和 dwY 有效。IpProcesslnformation:用来在进程创建后接收相关信息, 该结构由系统填写。typedef struct _PROCESS_INFORMATION / piHANDLEhProcess; /进程句柄HANDLEhThread; /进程的主线程句柄DWORD dwProcessId; /进程 IDDWORD dwThreadId; /进程的主线程 ID PROCESS_INFORMATION;2)实验准备要

15、实验的Windows下的多线程实验,应做如下准备:a)在新建中选” Win32 Console Application ”的 An empty projectb)选”工程”的”设置”选项,在”设置”中选择“C/C+'标签,在” Project Option ”中,将” MLd 参数改成“ MTd (如图 1)。图1选项以上两步对实验成功至关重要,否则,即是代码无误,在连接时同样会出现 问题。3)Windows下进程的创建Windows的进程和线程模型被描述成“多进程,基于单进程的多线程”。在创建一个线程时,Windows会做大量的工作-创建一个新的地址空间,为 进程分配资源以及创建一个

16、基线程。在 Windows下,当使用 CreateProcess去执行相应的功能时,只要去改变cmdLine中的内容即可,其它的参数使用默认值,具体见代码1:代码1执行的功能是从命令行中启动这个名叫的launch的测试程序,在lau nch后面应加上保存有需要打开程序路径的文件名:如在命令行中键入:>launch set.txt而set.txt中的内容为:C:WINDOWSSYSTEM32CALC.EXEC:WINDOWSSYSTEM32NOTEPAD.EXE NEW.TXTC:WINDOWSSYSTEM32CHARMAP.EXE路径的前半部分为”,这当然要视你的Windows系统 的类

17、型以及系统盘的存放位置而定。如果是NT或2000的机器,则应使用WINNT./*测试程序 1: 示例如何使用进程的 launch 程序,通过在命令行中加载相应 的命令文件,去按照命令文件中指定的程序路径打开相应的程序去执行 */ 测试程序(仅供参考)#include <windows.h>#include <stdio.h>#include <string.h>#define MAX_LINE_LEN 80int main(int argc,char* argv)/local variablesFILE* fid;char cmdLineMAX_LINE_L

18、EN;/CreateProcess parametersLPSECURITY_ATTRIBUTES processA=NULL;/DefaultLPSECURITY_ATTRIBUTES threadA=NULL;/DefaultBOOL shareRights=TRUE;/DefaultDWORD creationMask=CREATE_NEW_CONSOLE;/Window per process.LPVOID enviroment=NULL;/DefaultLPSTR curDir=NULL;/DefaultSTARTUPINFO startInfo;/ResultPROCESS_INF

19、ORMATION procInfo;/Result/1.Read the command line parametersif(argc!=2)fprintf(stderr,"Usage:lanch<launch_set_filename>n");exit(0);/2.Open a file that coutain a set of commandsfid=fopen(argv1,"r");/3.For every command in the launch file while(fgets(cmdLine,MAX_LINE_LEN,fid)

20、!=NULL) / Read a command from the file if(cmdLinestrlen(cmdLine)-1='n') cmdLinestrlen(cmdLine)-1='0'/Remove NEWLINE/Create a new process to execute the command ZeroMemory(&startInfo,sizeof(startInfo); startInfo.cb=sizeof(startInfo);if(! CreateProcess(NULL,/File name of executable

21、 cmdLine,/command line processA,/Process inherited security threadA, /Thread inherited security shareRights,/Rights propagation creationMask,/various creation flags enviroment,/Enviroment variable curDir, /Child's current directory &startInfo, &procInfo)/endof if fprintf(stderr,"Cre

22、atProcess failed on error %dn",GetLastError(); ExitProcess(0); /Terminate after all commands have finished. return 0;通过上面这段极其简洁的代码, 完成了看似有些难度的任务, 让我们充分感 受到采用一些高级的编程手段所带来的便捷与高效。3. 在上述实验 2 的基础上利用 Windows 提供的与进程相关的 API 函数,编写程序,实现创建进程、运行指定程序和终止进程(如创建 写字板或者画图进程及终止该进程) 。要求:有交互界面(命令方式或图形界面方式, 推荐使用图形界面

23、的交互) ,如:输入 1 创建进程,提示输入指定程序的路径创建对应的进程,并输出显 示进程的相关信息;输入 2 关闭该进程;输入 0 退出程序。注:与进程和线程相关的 Windows API(1) CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作(2) CallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用(3) ConnectNamedPipe 指示一台服务器等待下去,直至客户机同一个命名管道 连接(4) CreateEvent 创建一个事件对象(5) CreateMailslot 创建一个邮路。返回的句柄由邮路服务器使用(收件人)(

24、6) CreateMutex 创建一个互斥体( MUTEX )(7) CreateNamedPipe 创建一个命名管道。返回的句柄由管道的服务器端使用(8) CreatePipe 创建一个匿名管道(9) CreateProcess创建一个新进程(比如执行一个程序)(10) CreateSemaphore创建一个新的信号机(1 1 ) CreateWaitableTimer 创建一个可等待的计时器对象(1 2) DisconnectNamedPipe 断开一个客户与一个命名管道的连接(13) DuplicateHandle 在指出一个现有系统对象当前句柄的情况下, 为那个对象创 建一个新句柄(1

25、4) ExitProcess 中止一个进程(1 5) FindCloseChangeNotification 关闭一个改动通知对象(16) FindExecutable 查找与一个指定文件关联在一起的程序的文件名(17) FindFirstChangeNotification 创建一个文件通知对象。 该对象用于监视文件系统发生的变化(18) FindNextChangeNotification 重设一个文件改变通知对象, 令其继续监视下一 次变化(1 9) FreeLibrary 释放指定的动态链接库(20)GetCurre ntProcess获取当前进程的一个伪句柄(21 ) GetCurr

26、entProcessId 获取当前进程一个唯一的标识符(22) GetCurrentThread 获取当前线程的一个伪句柄(23) GetCurrentThreadId 获取当前线程一个唯一的线程标识符(24) GetExitCodeProces 获取一个已中断进程的退出代码(25) GetExitCodeThread 获取一个已中止线程的退出代码(26) GetHandleInformation 获取与一个系统对象句柄有关的信息(27) GetMailslotInfo 获取与一个邮路有关的信息(28) GetModuleFileName 获取一个已装载模板的完整路径名称(29) GetMod

27、uleHandle 获取一个应用程序或动态链接库的模块句柄(30) GetPriorityClass 获取特定进程的优先级别(31) GetProcessShutdow nParameter调查系统关闭时一个指定的进程相对于其它 进程的关闭早迟情况(32) GetProcessTimes获取与一个进程的经过时间有关的信息(33) GetProcessWorki ngSetSize 了解一个应用程序在运行过程中实际向它交付了 多大容量的内存(34) GetSartupInfo 获取一个进程的启动信息(35) GetThreadPriority 获取特定线程的优先级别(36) GetTheardT

28、imes 获取与一个线程的经过时间有关的信息(37) GetWindowThreadProcessId 获取与指定窗口关联在一起的一个进程和线程 标识符(38) LoadLibrary 载入指定的动态链接库,并将它映射到当前进程使用的地址空 间(39) LoadLibraryEx 装载指定的动态链接库,并为当前进程把它映射到地址空间(40) LoadModule 载入一个 Windows 应用程序,并在指定的环境中运行(41) MsgWaitForMultipleObjects 等侯单个对象或一系列对象发出信号。 如返回条 件已经满足,则立即返回(42) SetPriorityClass 设置

29、一个进程的优先级别(43) SetProcessShutdownParameter在系统关闭期间,为指定进程设置他相对于其 它程序的关闭顺序(44) SetProcessWorki ngSetSize设置操作系统实际划分给进程使用的内存容量(45) SetThreadPriority 设定线程的优先级别(46) ShellExecute 查找与指定文件关联在一起的程序的文件名(47) TerminateProcess 结束一个进程(48) WinExec 运行指定的程序5.进程调度模拟编写程序完成单处理机系统中的进程调度, 要求采用先来先服务算法、最短CPU运行期优先调度算法、优先级调度算法、

30、多级反馈队列轮转算法。实验具体包括: 首先确定进程控制块的内容和进程控制块的组织方式; 然后完成进程创建原语和进程调度原语;最后编写主函数对所做工作进行测试。1)实验提示与讲解这个实验主要需要考虑三个问题: 如何组织进程、 如何创建进程和如何实现处理器调度。考虑如何组织进程,首先就要设定进程控制块的内容。 进程控制块PCB记录各个进程执行时的情况。不同的操作系统,进程控制块记录的信息内容不一样。 操作系统功能越强, 软件也越庞大, 进程控制块记录的内容也就越多。 这里的实 验只是用了必不可少的信息。一般操作系统中,无论进程控制块中信息量多少, 信息都可以大致分为以下四类: 标识信息每个进程都要

31、有一个唯一的标识符,用来标识进程的存在和区别于其他进 程。这个标识符是必不可少的, 可以用符号或编号实现, 它必须是操作系统分配 的。在后面给出的参考程序中, 采用编号方式, 也就是为每个进程依次分配一个 不相同的正整数。 说明信息用于记录进程的基本情况, 例如进程的状态、 等待原因、 进程程序存放的位 置、进程数据存放位置等等。实验中,因为进程没有数据和程序,仅使用进程控 制块模拟进程,所以这部分内容仅包括进程状态。 现场信息现场信息记录各个寄存器的内容。 当进程由于某种原因让出处理器时, 需要 将现场信息记录在进程控制块中, 当进行进程调度时, 从选中进程的进程控制块 中读取现场信息进行现

32、场恢复。 现场信息就是处理器的相关寄存器内容, 包括通 用寄存器、程序计数器和程序状态字等。 在实验中,可选取几个寄存器作为代表。 用大写的全局变量AX BX CX DX模拟通用寄存器、大写的全局变量 PC模拟程 序计数器、大写的全局变量 PSW模拟程序状态字。 管理信息管理信息记录进程管理和调度的信息。例如进程优先数、进程队列指针等。实验中,仅包括队列指针因此,可将进程控制块结构定义如下:struct pcbint name;/int status;/int AX,BX,CX,DX;/进程标识符进程状态进程现场信息,通用寄存器内容int PC;/进程现场信息,程序计数器内容intPSW;/进

33、程现场信息,程序状态字内容intnext;/下一个进程控制块的位置确定进程控制块内容后, 要考虑的就是如何将进程控制块组织在一起。 多道 程序设计系统中, 往往同时创建多个进程。 在单处理器的情况下, 每次只能有一 个进程处于运行态、 其他的进程处于就绪状态或等待状态。 为了便于管理, 通常 把处于相同状态的进程的进程控制块链接在一起。 单处理器系统中, 正在运行的 进程只有一个。 因此,单处理器系统中进程控制块分成一个正在运行进程的进程 控制块、就绪进程的进程控制块组织成的就绪队列和等待进程的进程控制块组成 的等待队列。 由于实验模拟的是进程调度, 没有对等待队列的操作, 所以实验中 只有一

34、个指向正在运行进程的进程控制块指针和一个就绪进程的进程控制块队 列指针。操作系统的实现中, 系统往往在主存中划分出一个连续的专门区域存放 系统的进程控制块, 实验中应该用数组模拟这个专门的进程控制块区域, 定义如 下:#define n 10 / 假定系统允许进程个数为 10 struct pcb pcbarean; / 模拟进程控制块区域的数组 这样,进程控制块的链表实际上是数据结构中使用的静态链表。 进程控制块 的链接方式可以采用单向和双向链表, 实验中,进程控制块队列采用单向不循环 静态链表。为了管理空闲进程控制块, 还应该将空闲进程控制块链接成一个队列。实验示例程序中采用时间片轮转调度

35、算法, 这种算法是将进程控制块按照进 入就绪队列的先后次序排成队列。 关于就绪队列的操作就是从队头摘下一个进程 控制块和从队尾挂入一个进程控制块。 因此为就绪队列定义两个指针, 一个头指 针,指向就绪队列的第一个进程控制块; 一个尾指针, 指向就绪队列的最后一个 进程控制块。实验中指向运行进程的进程控制块指针、 就绪队列指针和空闲进程控制块队 列指针定义如下:int run; / 定义指向正在运行进程的进程控制块的指针structint head;int tail ;ready;/定义指向就绪队列的头指针 head 和尾指针 tailint pfree; /定义指向空闲进程控制块队列的指针以上

36、是如何组织进程,下面考虑如何创建进程。进程创建是一个原语, 因此在实验中应该用一个函数实现, 进程创建的过程 应该包括: 申请进程控制块:进程控制块的数量是有限的,如果没有空闲进程控制块, 则进程不能创建,如果申请成功才可以执行第二步; 申请资源: 除了进程控制块外, 还需要有必要的资源才能创建进程, 如果 申请资源不成功, 则不能创建进程, 并且归还已申请的进程控制块; 如果申请成 功,则执行第三步,实验无法申请资源,所以模拟程序忽略了申请资源这一步; 填写进程控制块: 将该进程信息写入进程控制块内, 实验中只有进程标识 符、进程状态可以填写(模拟进程创建时,需输入进程标识符,进程标识符本应

37、 系统建立, 并且是唯一的, 输入时注意不要冲突) ,刚创建的进程应该为就绪态, 然后转去执行第四步; 挂入就绪队列: 如果原来的就绪队列不为空, 则将该进程控制块挂入就绪 队列尾部, 并修改就绪队列尾部指针; 如果原来就绪队列为空, 则将就绪队列的 头指针、尾指针均指向该进程控制块,进程创建完成。进程创建流程图如图 1 所示。图1进程创建流程图多道程序设计的系统中,处于就绪状态的进程往往有多个,它们都要求占用 处理器,可是单处理器系统的处理器只有一个, 进程调度就是解决这个处理器竞 争问题的。进程调度的任务就是按照某种算法从就绪进程队列中选择一个进程, 让它占有处理器。因此,进程调度程序就应

38、该包括两部分, 一部分是在进程就绪 队列中选择一个进程,并将其进程控制块从进程就绪队列中摘下来, 另一部分工 作就是分配处理器给选中的进程,也就是将指向正在运行进程的进程控制块指针 指向该进程的进程控制块,并将该进程的进程控制块信息写入处理器的各个寄存 器中。实验参考程序中采用时间片轮转调度算法, 这种算法让就绪进程按就绪的先但是规定后次序排成队列,每次总是选择就绪队列中的第一个进程占有处理器, 只能使用一个“时间片”采用时间片轮转调度算法的进程调度流程图如图2所示图2进程调度流程图完成上述功能后,编写主函数进行测试:首先建立一个就绪队列,手工输入 信息建立几个进程;然后进行进程调度;最后将指

39、向正在运行进程的指针指向的 进程控制块内容输出,察看结果。2)参考程序 #include “ stdio.h ” #define running 1 #define aready 2 #define blocking 3 #define sometime 5 #define n 10 struct int name; int status;int ax,bx,cx,dx ;int pc ; int psw; int next; pcbarean; int PSW, AX,BX,CX,DX , PC ,TIME ; int run; struct int head; int tail;ready

40、; int pfree;scheduling( ) int i;if (ready.head=-1)printf( 无“就绪进程 n” ); return; i=ready.head; ready.head=pcbareaready.head.next; if(ready.head=-1) ready.tail=-1; pcbareai.status=running; TIME=sometime;/恢复该进程现场信息 AX=pcbarearun.ax;/ 用 running 表示进程处于运行态 / 用 aready 表示进程处于就绪态 / 用 blocking 表示进程处于阻塞态 / 用 sometime 表示时间片大小 /假定系统允

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论