2023年河北工业大学操作系统实验报告.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2023年河北工业大学操作系统实验报告.pdf》由会员分享,可在线阅读,更多相关《2023年河北工业大学操作系统实验报告.pdf(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、操作系统实验指导书实验一进程控制与描述一 实验目的通过对Windows X P 编程,进一步熟悉操作系统的基本概念,较好地理解Window s X P 的结构。通过创建进程、观测正在运营的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解W i ndow s X P 进程的“一生”。二 实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows XP,Visua 1 C+6.。专业版或公司版。三、实验内容和环节第一部分Window s编程Window s XP可以辨认的程序涉及控制台应用程序、GUI应用程序和服务应用程序。本实验中重要用到的是控制台应用程序和G U
2、I应用程序。1、简朴的控制台应用程序创建一个名为“H ei l o 的应用程序,在“开始”菜单中单击“程序”一“附件”-“记事本”命令,将程序键入记事本中,并把代码保存为1-1.c pp。程序1-1 Windows X P的GU I应用程序#i ncIude v o id ma i n()(S t d:c o u tMH el Io,Windows X P”CL 1-l.cpp运 营 1 1.EXE程序,运营结果是:(假如运营不成功,则也许的因素是什么?)水*C:Docuent s and Sett ra to r桌值hellowindows XPPress any key to con ti
3、n u e.2、GU I 应用程序W i ndows X P Prof e ssio n a 1下的G U I应用程序,使用Visual C+编译器创建一个 GUI应用程序,代码中涉及了 WinMa i n()方法,该方法GU I 类型的应用程序的标准入口点。在“开始”菜单中单击“程序”-“附件”-“记事本”命令,将程序键入记事本中,并把代码保存为1-2,cpp程序1-2 Windows X P的 GU I 应用程序/ms g box 项目#in c 1 ude /标准的 includ e/告诉连接器与涉及Me s sageBox A P I 函数的u s e r 3 2 库进行连接#p r
4、agma c o mment(Iib,4tuse r 32.lib )/这是个可以弹出信息框然后退出的筒单的应用程序in t AP I ENTRY W inMa in(HINSTANC E。/*h I nstance*/,HINSTANCEoo/*hPrev I n s tance*/,L P S T R T 1 p Cmd L in e */,int。/*n C md S how*/)::Mess a geBox(NUL L,。/没有父窗口4tHel 1 o,W i ndows 2023”,消息框中的文本“Greetings,一 /消息框标题MB.OK);。/其中只有一个OK按钮/返回0 以
5、便告知系统不进入消息循环retu r n(0);)也可以运用任何其他文本编辑器键入程序代码,假如这样,例如使用W O R D 来键入和编辑程序,则应当注意什么问题?保存时将文献保存为“.cpp”的 C+文献在“命令提醒符”窗口运营C L.E X E,产 生 1-2.EXE文献:C:CL 1-2.c p p在程序1-2的 G U I应用程序中,一方面需要Windows.h 头文献,以便获得传送给Wi n Main()和 Mess a g e Box()API函数的数据类型定义。接 着 的 p ra g m a 指令指示编译器/连接器找到User 3 2.L I B 库文献并将其与产生的EXE文献
6、连接起来。这样就可以运营简朴的命令行命令CL MsgBox.CPP来创建这一应用程序,假如没 有 pra g m a指令,则 M e s s a geBo x()AP I 函数就成为未定义的了。这一指令是Vis u alStud i o C+编译器特有的。接下来是WinMain()方法。其中有四个由实际的低档入口点传递来的参数。h Instan c e 参数用来装入与代码相连的图标或位图一类的资源,无论何时,都可用GetModuleHandleO A PI函数将这些资源提取出来。系统运用实例句柄来指明代码和初始的数据装在内存的何处。句柄的数值事实上是EX E文献映像的基地址,通常为0 x00
7、4 0 00 0 0 o 下一个参数hPrevInstanc e 是为向后兼容而设的,现在系统将其设为NULL。应用程序的命令行(不涉及程序的名称)是IpCmdL i n e参数。此外,系统运用nCmd Show参数告诉应用程序如何显示它的主窗口(选项涉及最小化、最大化和正常)。最后,程序调用M e ssageBox()AP I 函数并退出。假如在进入消息循环之前就结束运营的话,最后必须返回0。运营结果(试将其中的信息与程序1 -1 .E X E 的运营结果进行比较):弹出一个消息框,标题为G r e e tin g s,内容为H ello,W i n d o ws 202 3,中间有一个确认
8、按钮3、进程对象操作系统将当前运营的应用程序看作是进程对象。运用系统提供的惟一的称为句柄(HAN D L E)的号码,就可与进程对象交互。这一号码只对当前进程有效。本实验表达了一个简朴的进程句柄的应用。在系统中运营的任何进程都可调用G e tCunentProcessO API函数,此函数可返回标记进程自身的句柄。然后就可在W i ndows需要该进程的有关情况时,运用这一句柄来提供。程 序 1-3:获得和使用进程的句柄/prochan d 1 c 项目#in c 1 ude#i n c 1 ude/拟定自己的优先权的简朴应用程序v oid ma i n()(/从当前进程中提取句柄H ANDL
9、E h P roc e s s Thi s=:Ge t C urre n(Process();/请求内核提供该进程所属的优先权类DWORD dwPr i ority=:Get P r i orityCla s s(h P r ocessThis);/发出消息,为用户描述该类st d::c out “Curr e nt p ro c e s s p r ior i ty:;swi t c h(dwP r iority)(case HIGH_P R IORITY.C LAS S:std:co u t H i g h ;br e a k;case N 0 RM A L _ P RIORIT Y_CL
10、AS S:std::cout N o r mal”;br e ak;case I DLE_PRIORIT Y_CLASS:s t d:c o ut w“I d 1 e”:b reak;caseRE A L T I ME_PR10 RITY_CLASS:std::co u t ;br e a k;)s t d:c out std:endl;)程 序 1-3中列出的是一种获得进程句柄的方法。对于进程句柄可进行的惟一有用的操作是在A PI调用时,将其作为参数传送给系统,正如程序1-3 中对Get Pri o ri t y Cl a ss()API函数的调用那样。在这种情况下,系统向进程对象内“窥视”
11、,以决定其优先级,然后将此优先级返回给应用程序。Open P r oce s s()和 Cre a t e P ro c ess()API函数也可以用于提取进程句柄。前者提取的是已经存在的进程的句柄,而后者创建一个新进程,并将其句柄提供出来。在“命令提醒符”窗口运营C L.E X E,产 生 1-3.EXE文献:C:CL 1-3.c p p进程优先权为Normal将程序1 -4.cpp程序键入记事本中,并把代码保存为l-4.c p p。程 序 1-4显示如何找出系统中正在运营的所有进程,如何运用0 p enProc e ss()API函数来获得每一个访问进程的进一步信息。程序14运用句柄查出进
12、程的具体信息/proc 1 i s t 项目#include#in c lude#inc 1 ude/当在用户模式机内核模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计算的帮助方法DWORD Get Ke r nelModeP e r centag e(co n st FILETIM E&ftKernel,co n s t F I LETIM E&ftUs e r)(/将FILET I M E结构转化为64位整数ULONGLONG q wK erne 1 =(ULONGL ONG)f t Kernel.dwHighDat e Tim e)32)+f t Ke r ne 1 .dwLo
13、w D a teTime;ULONGLONGqwUser=(ULONG LONG)f t U s er.dwHighDateTime)3 2)+f t User.dw Low Date T i me;/将消耗时间相加,然后计算消耗在内核模式下的时间比例ULONGLONG qwTotal=qwKe r n e 1 +qwUser;D WORD d w Pc t=(DWOR D)(ULO NG LONG)10 0*qwKe r nel)/q wTotal);r et u r n(dwP c t);)/以下是将当前运营进程名和消耗在内核模式下的时间百分数都显示出来的应用程序v o id main()
14、(/对当前系统中运营的进程拍取“快照”HANDLE h Snap s h ot=:C r eateToolh e p 3 2Snaps h ot(TH 3 2 C S-S NAPPROCESSW/提取当前进程0);。-/假如是当前进程,就将其忽略/初始化进程入口PROCESSENTRY32 pe;::Z eroMemory(&pe,siz e o f(p e);pe.dwS i z e=s izeof(p e);/按所有进程循环B OOL bMor e=:Pro cess 3 2First(hSn a psh o t,&p e);w h i 1 e(bMo r e)(/打开用于读取的进程HAN
15、DLE h Proc e ss=:O p en Proces s(P ROCESS_QUERY_ I NF O RM A T IO N,山 指明要得至 信息FALSE,。/不必继承这一句柄pe.t h 32 P roce s sID);/要打开的进程if(hP rocess!=NULL)/找出进程的时间F I LETIM E ftC r eat i o n,ftExi t,f t Kerne 1 Mode,ftUse r Mode;:Get P r o c ess T ime s(h Process,/所感爱好的进程&ftCrea t ion产。进程的启动时间(绝对的)&ftE x it,0
16、0 。/结束时间(假如有的话)&ftKe r ne 1 Mod e a/在内核模式下消耗的时间&ftUs e rMod e)产。/在用户模式下消耗的时间/计算内核模式消耗的时间比例D WORD dw P c t Kerne 1 =::G e t K e r nelM o dePerce n tage(f(KernelMode,。如在内核模式上消耗的时间f t UserMo d e);-。在用户模式下消耗的时间/向用户显示进程的某些信息s t d::cou t CL 1 -4.cpp运营结果:第二部分:进程的“一生”w i ndows所创建的每个进程都从调用C reate Process。A P
17、 I函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。每一进程都以调用Exi t Proce s s()或 T e rminatePro ce ss()A P I函数终止。通常应用程序的框架负责调用ExitProcess。函数。对于C+运营库来说,这一调用发生在应用程序的m a in()函数返回之后。1、创建子进程本实验显示了创建子进程的基本框架。该程序创建的子进程仍然执行父进程的程序代码,显示它的系统进程ID 和它在进程列表中的位置。创建子进程/proccreate 项目#incl u d ewindows.h#i n elude#include/创建传递过来的进程的克隆过程并赋于
18、其ID值v oid StartC 1 one(i n t nC 1 onelD)/提取用于当前可执行文献的文献名TCHA R szF i lcnameMAX_PA T H;::GetM o d u leFileN a me(N UL L,szF i len a me,M AX_ PATH);/格式化用于子进程的命令行并告知其EXE文献名和克隆IDTCHAR szCmdLine M A X _PA TH ;:s p rintf(sz C mdLine,%s%d,s zFil e n a me,nClonel D);/用于子进程的STARTUP IN FO结构STARTUPINFO si;::Z
19、e r o Memo r y(r einterp r et_ c ast (&s i),sizeof(si);si.c b=s i z eof(s i);。&/必须是本结构的大小/返回的用于子进程的进程信息P ROCE S SJN F O RMATION pi;/运用同样的可执行文献和命令行创建进程,并赋于其子进程的性质B OOL bCr e a t eOK=:Cr e a teProce s s(s z Filen a me,。产生这个E X E的应用程序的名称szCmdLine,-/告诉其行为像一个子进程的标志N U LL,。/缺省的进程安全性NUL L,g。缺省的线程安全性FALSE,。
20、/不继承句柄CREATE_NEW_CONSOLE,o/使用新的控制台N U LL-。/新的环境NULL,。当前目录&si,。/启动信息&p i);。“/返回的进程信息/对子进程释放引用i f(b C r eateO K)(:Clo s eHan d 1 e(pi.hP rocess):::C loseHa n dle(pi.hT h r e a d);Iint ma i n(i n t arg c,c har*argv)/拟定进程在列表中的位置int nCl o ne(0);if(arg c 1)/从第二个参数中提取克隆I D::s s c anf(argvl ,“%d,&n C 1 one)
21、;)/显示进程位置st d:c o ut Proc ess ID:44 :GetCurrentProc e ssl d()“,C 1 one I D:44 nCI o n e s t d::endl;/检查是否有创建子进程的需要c o n s t in t c_n C 1 oneMax=25;i f(nC 1 one C _n C Ion e Max)(/发送新进程的命令行和克隆号Star t Clo n e(+n Cion e);)/在终止之前暂停一下,输入一个字符后,程序结束,以便观测。S td:c ou t Vvinput a c h ar:“;get c h a r();s td:c
22、o m g one.Bye-b y e”;:Sleep(l 0(X);retu r n 0;本程序展示的是一个简朴的使用Crea t e P r o c e s s()A P I 函数的例子。一方面形成简朴的命令行,提供当前的E X E 文献的指定文献名和代表生成克隆进程的号码。大多数参数都可取缺省值,但是创建标志参数使用了:行为像一个子进程 标志,指示新进程分派它自己的控制台,这使得运营示例程序时,在任务栏上产生许多活动标记。然后该克隆进程的创建方法关闭传递过来的句柄并返回m a in()函数。在关闭程序之前,每一进程的执行主线程都会暂停等待输入字符,以便让用户观测子进程的行为。C reat
23、 e P r ocess()函数有5 个核心参数?本实验程序中设立的各个参数的值的含义是:a.(LPC T S T R 1 p Ap p licationName)szFilename,/产生这个 EXE 的应用程序的名称;b.(LPTST R 1 pC 0 mman d L i n e)s z CmdL i n e,/告诉其行为像一个子进程的标志;c.(B OOL blnheri t Handles)FALSE,不继承句柄;d.(LPSTARTGPINFOlpS t artupln f 0)&s i,/启动信息;e.(LPP ROCESS_INFOR MATION 1 pP r o c es
24、slnformat i on)&pi);/返回的进程信息程序运营时屏幕显示的信息是:Process ID:3344.Clone ID:0input a char:I 9m goneBye-byePress any key to continue2、正在运营的进程本实验的程序中列出了用于进程信息查询的API函数GetProce s s Versi o n()与 GetV e rsionEx()的共同作用,可拟定运营进程的操作系统的版本号。使用进程和操作系统的版本信息/v ers i on 项目#inc 1 ude#i nc 1 u d e /运用进程和操作系统的版本信息的简朴示例voi d ma
25、i n()(/提取这个进程的I D号DWORD dwIdTh i s=::G e tC u r re n tProce s sld();/获得这一进程和报告所需的版本,也可以发送。以便指明这一进程DWORD d wVerReq=:Get P roces s V ersion(d w Id T hi s);W 0 RD wM a j orRe q=(WORD)dwVerR e q 1 6);WO RDwM inorReq=(WORD)dwVerR e q&Oxf f f f);st d::cout v P r ocess I D:dwIdThis4t,r e qu i re s O S:44 w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 河北 工业大学 操作系统 实验 报告
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内