




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE11计算机与信息工程学院《操作系统》实验指导书(适用专业:计算机科学与技术、计算机网络工程)目录实验一WINDOWS中进程的了解…………………1实验二线程的实现和线程间的同步与互斥……4实验三银行家算法的模拟实现…………………9实验四内存动态分配管理模拟实现……………10实验五WINDOWS文件系统的了解………………11实验一WINDOWS中进程的了解一、目的:1、了解在WINDOWS的系统进程,了解WINDOWS中进程的控制。2、了解在WINDOWS中程序的运行原理,特别是自动运行的程序的运行机制。二、内容:写出本机中的进程。了解以下进程的作用SystemIdleProcessSystemSmss.exeCsrss.exeServices.exeLsass.exeSvchost.exeWinlogon.exe利用NTSD命令结束以下进程,并记录结束后的系统出现的现象。Lsass.exeScrss.exe4、了解在WINDOWS中有哪些位置可以在系统启动后自动建立进程,即在WINDOWS中可自动运行的位置有哪些。三、实验要求:可以上网查询。四、实验说明:NTSD的帮助usage:ntsd[-?][-2][-d][-g][-G][-myob][-lines][-n][-o][-s][-v][-w][-rBreakErrorLevel][-tPrintErrorLevel][-hd][-pd][-pe][-pt#][-pv][-x|-x{e|d|n|i}][--|-ppid|-pnname|command-line|-zCrashDmpFile][-zpCrashPageFile][-premotetransport][-robp][-aDllName][-c"command"][-iImagePath][-ySymbolsPath][-clines#][-srcpathSourcePath][-QR\\machine][-wake][-remotetransport:server=name,portid][-servertransport:portid][-ses][-sfce][-sicv][-snul][-noio][-failinc][-noshell]where:-?displaysthishelptextcommand-lineisthecommandtorununderthedebugger--isthesameas-G-g-o-p-1-d-pd-aDllNamesetsthedefaultextensionDLL-cexecutesthefollowingdebuggercommand-clinesnumberoflinesofoutputhistoryretrievedbyaremoteclient-failinccausesincompletesymbolandmoduleloadstofail-dsendsalldebuggeroutputtokerneldebuggerviaDbgPrint-dcannotbeusedwithdebuggerremoting-dcanonlybeusedwhenthekerneldebuggerisenabled-gignoresinitialbreakpointindebuggee-Gignoresfinalbreakpointatprocesstermination-hdspecifiesthatthedebugheapshouldnotbeusedforcreatedprocesses.ThisonlyworksonWindowsWhistler.-odebugsallprocesseslaunchedbydebuggee-ppidspecifiesthedecimalprocessIdtoattachto-pdspecifiesthatthedebuggershouldautomaticallydetach-pespecifiesthatanyattachshouldbetoanexistingdebugport-pnnamespecifiesthenameoftheprocesstoattachto-pt#specifiestheinterrupttimeout-pvspecifiesthatanyattachshouldbenoninvasive-rspecifiesthe(0-3)errorleveltobreakon(SeeSetErrorLevel)-robpallowsbreakpointstobesetinread-onlymemory-tspecifiesthe(0-3)errorleveltodisplay(SeeSetErrorLevel)-wspecifiestodebug16bitapplicationsinaseparateVDM-xsetssecond-chancebreakonAVexceptions-x{e|d|n|i}setsthebreakstatusforthespecifiedevent-2createsaseparateconsolewindowfordebuggee-iImagePathspecifiesthelocationoftheexecutablesthatgeneratedthefault(see_NT_EXECUTABLE_IMAGE_PATH)-linesrequeststhatlinenumberinformationbeusedifpresent-myobignoresversionmismatchesinDBGHELP.DLL-nenablesverboseoutputfromsymbolhandler-noiodisablesallI/Ofordedicatedremotingservers-noshelldisablesthe.shell(!!)command-QR<\\machine>queriesforremoteservers-sdisableslazysymbolloading-sesenablesstrictsymbolloading-sfcefailscriticalerrorsencounteredduringfilesearching-sicvignorestheCVrecordwhensymbolloading-snuldisablesautomaticsymbolloadingforunqualifiednames-srcpathspecifiesthesourcesearchpath-venablesverboseoutputfromdebugger-wakewakesupasleepingdebuggerandexits-yspecifiesthesymbolsearchpath(see_NT_SYMBOL_PATH)-zspecifiesthenameofacrashdumpfiletodebug-zpspecifiesthenameofapage.dmpfiletousewithacrashdump-remoteletsyouconnecttoadebuggersessionstartedwith-servermustbethefirstargumentifpresenttransport:tcp|npipe|ssl|spipe|1394|comname:machinenameonwhichthedebugserverwascreatedportid:idoftheportthedebuggerserverwascreatedonfortcpuse:port=fornpipeuse:pipe=for1394use:channel=forcomuse:port=,baud=,channel=forsslandspipeseethedocumentationexample:...-remotenpipe:server=yourmachine,pipe=foobar-servercreatesadebuggersessionotherpeoplecanconnecttomustbethefirstargumentifpresenttransport:tcp|npipe|ssl|spipe|1394|comportid:idoftheportremoteuserscanconnecttofortcpuse:port=fornpipeuse:pipe=for1394use:channel=forcomuse:port=,baud=,channel=forsslandspipeseethedocumentationexample:...-servernpipe:pipe=foobar-premotetransportspecifiestheprocessservertoconnecttotransportargumentsaregivenaswithremotingEnvironmentVariables:_NT_SYMBOL_PATH=[Drive:][Path]Specifysymbolimagepath._NT_ALT_SYMBOL_PATH=[Drive:][Path]Specifyanalternatesymbolimagepath._NT_DEBUGGER_EXTENSION_PATH=[Drive:][Path]Specifyapathwhichshouldbesearchedfirstforextensionsdlls_NT_EXECUTABLE_IMAGE_PATH=[Drive:][Path]Specifyexecutableimagepath._NT_SOURCE_PATH=[Drive:][Path]Specifysourcefilepath._NT_DEBUG_LOG_FILE_OPEN=filenameIfspecified,alloutputwillbewrittentothisfilefromoffset0._NT_DEBUG_LOG_FILE_APPEND=filenameIfspecified,alloutputwillbeAPPENDedtothisfile._NT_DEBUG_HISTORY_SIZE=sizeSpecifiesthesizeofaserver'soutputhistoryinkilobytesControlKeys:QuitdebuggerBreakintoTargetForceabreakintodebuggee(sameasCtrl-C)DebugCurrentdebuggerToggleVerbosemodePrintversioninformationNTSD的常用命令格式NTSD–CQ–P进程号
实验二线程的实现和线程间的同步与互斥一、目的:1、了解在WINDOWS中线程的编程实现,掌握利用VC或DELPHI调用WINDOWSAPI建立线程。2、了解在WINDOWS中线程间同步与互斥的信号量的实现,并利用该原理实现在WINDOWS下模拟实现有关经典线程同步与互斥问题。二、内容:1、利用VC或DELPHI在实际程序中实现线程。2、利用VC或DELPHI实现线程的同步模拟。主要模拟以下问题(经营者和消费者、阅读者和写入者)。三、实验要求: 实验内容中的第1小题为必作内容,第2小题可选择其一。四、实验提示:在Windows中调用API函数。对于VC,在程序头文件应包括#include<windows.h>语句。对于DELPHI,在程序前的USES中应包括Windows。Windows系统中的线程及有关的系统调用。Windows中的线程是内核线程,是系统的主要调度单位,提供了一系列的系统调用。CreateThread完成线程的创建,TerminateThread用于结束当前线程。SuspendThread可挂起指定的线程。ResumeThread可激活指定的线程。对于Windows来说,是用挂起计数来进行线程挂起和激活的计数的。每调用挂起一次,计数加1,反之则减1。当计数为0时,线程恢复运行。四个调用的原型及简单说明如下。(1)、CreateThread创建线程HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes, //指向安全属性结构的指针,一般为NULL。DWORDdwStackSize, //初始化线程的堆栈尺寸,一般为0。LPTHREAD_START_ROUTINElpStartAddress, //指向线程执行体的指针。LPVOIDlpParameter, //新线程的参数DWORDdwCreationFlags, //建立标志位,0:创建后立即执行,1:创建后挂起。LPDWORDlpThreadId //指向返回标识符的指针。)(2)、SuspendThread挂起指定的线程DWORDSuspendThread(HANDLEhThread //线程句柄)(3)、ResumeThread激活指定的线程DWORDResumeThread(HANDLEhThread //线程句柄)(4)、TerminateThread结束线程BOOLTerminateThread(HANDLEhThread, //线程句柄DWORDdwExitCode //线程的结束代码。一般为0。)Windows中的同步机制及相关调用。在Windows中提供了互斥对象、信号量对象和事件对象三种同步对象和相应的系统调用,用于进程和线程的同步。另外还提供了临界区(CriticalSection)对象和互斥变量访问API等。在这里,我们主要对互斥对象和信号量对象进行简单介绍。互斥对象(Mutex)为互斥信号量,它的相关API为:Createmutex创建一个互斥信号量,Openmutex打开一个互斥信号量,Releasemutex释放一个互斥信号量,使之可用,相当于Signal操作。信号量对象(Semaphore)为资源信号量,它的相关API为:CreateSemaphore创建一个信号量对象,OpenSemaphore打开一个信号量对象,ReleaseSemaphore释放一个信号对象。系统中统一的等待操作WaitForSingleObject,相当于Wait操作。七个调用的原型和简单说明如下:(1)、Createmutex创建互斥信号量HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes, //指向安全属性的指针,一般为NULLBOOLbInitialOwner, //初始化时所有权的标志位,TRUE:创建时即拥有,FALSE:创建时不拥有。LPCTSTRlpName //互斥信号量的名称)(2)、Openmutex打开互斥信号量HANDLEOpenMutex(DWORDdwDesiredAccess, //操作标志位,一般为MUTEX_ALL_ACCESSBOOLbInheritHandle, //继承标志位,一般为FALSELPCTSTRlpName //互斥信号量的名称)(3)、Releasemutex释放互斥信号量BOOLReleaseMutex(HANDLEhMutex //互斥信号量的句柄)(4)、CreateSemaphore创建信号量对象HANDLECreateSemaphore(LPSECURITY_ATTRIBUTESlpSemaphoreAttributes, //指向安全属性的指针,一般为NULL。LONGlInitialCount, //信号量的初始化值。LONGlMaximumCount, //信号量的最大值LPCTSTRlpName //信号量名称)(5)、OpenSemaphore打开一个信号量对象HANDLEOpenSemaphore(DWORDdwDesiredAccess, //操作标志位,一般为SEMAPHORE_ALL_ACCESSBOOLbInheritHandle, //继承标志位,一般为FALSELPCTSTRlpName //信号量对象名称)(6)、ReleaseSemaphore释放信号对象BOOLReleaseSemaphore(HANDLEhSemaphore, //信号对象句柄LONGlReleaseCount, //释放的个数LPLONGlpPreviousCount //前一个计数的地址,一般为NULL)(7)、WaitForSingleObject等待操作DWORDWaitForSingleObject(HANDLEhHandle, //等待的信号量的句柄DWORDdwMilliseconds //等待的时间,以毫秒为单位,如果永久等待,则为INFINITE)一个简单的线程创建、挂起和解挂的例子。#include<stdio.h>#include<windows.h>#include<iostream.h>#include<winbase.h>voidSubThread(void){ inti; for(i=0;i<5;i++) { cout<<"SubThread"<<i<<endl; Sleep(2000); }}voidmain(void){cout<<"CreateThread"<<endl; //创建一个线程 DWORDIDThread;//返回的线程标示符 HANDLEhThread;//线程句柄 hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)SubThread,NULL,0,&IDThread); //检查操作是否成功 if(hThread==NULL) cout<<"CreateThreaderror"<<endl;inti; for(i=0;i<5;i++) { cout<<"MainThread"<<i<<endl; if(i==1) { if(SuspendThread(hThread)==0xFFFFFFFF) { cout<<"Suspendthreaderror."<<endl; } else { cout<<"Suspendthreadisok."<<endl; } } if(i==3) { if(ResumeThread(hThread)==0xFFFFFFFF) { cout<<"Resumethreaderror."<<endl; } else { cout<<"Resumethreadisok."<<endl; } } Sleep(4000); }}一个简单的互斥信号量使用的例子。#include<stdio.h>#include<windows.h>#include<iostream.h>#include<winbase.h>intiCounter=0;viodthreadA(viod){ //在内部重新打开 HANDLEhCounterIn=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"spmetex"); for(inti=0;i<8;i++) { cout<<"Waitforobject."<<endl; WaitForSingleObject(hCounterIn,INFINITE); intiCopy=iCounter; Sleep(100); iCounter=iCopy+1; cout<<"Countis"<<iCounter<<endl; ReleaseMutex(hCounterIn); } CloseHandle(hCounterIn);}//主程序{ //创建互斥量 HANDLEhCounter=NULL; hCounter=CreateMutex(NULL,FALSE,"spmutex"); //创建线程 HANDLEhThread[3]; DWORDIDThread[3];//返回的线程标示符HThread[0]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadA,NULL,0,&IDThread[0]);HThread[1]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadA,NULL,0,&IDThread[1]);HThread[2]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)SubThread,NULL,0,&IDThread[2]);Sleep(20000): CloseHandle(hCounter); }}生产者和消费者、读者和写者问题模拟的说明。生产者和消费者问题,缓冲区可以用一简单计数Count来描述,例如生产者生产了5个产品,可用Count=Count+5来描述。开始时可以用1个生产者线程和一个消费者线程。调试通过后可用多个线程。读者和写者问题,读写过程可用输出语句来描述。
实验三银行家算法的模拟实现一、目的:1、了解进程产生死锁的原因,了解为什么要进行死锁的避免。2、掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。二、内容:1、利用VC或DELPHI在实现银行家算法的模拟。三、实验要求: 在完成有难度的情况下,可以简化成单资源的银行家算法。四、实验提示:1、整个银行家算法的思路。 先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检查算法进行安全性检查。2、算法用到的主要数据结构和C语言说明。 (1)、可利用资源向量INTAVAILABLE[M]M为资源的类型。 (2)、最大需求矩阵INTMAX[N][M]N为进程的数量。 (3)、已分配矩阵INTALLOCATION[N][M] (4)、还需求矩阵INTNEED[N]3、银行家算法(主程序) (1)、系统初始化。 (2)、输入用户的请求三元组(I,J,K),为进程I申请K个J类资源。 (3)、检查用户的请求是否小于还需求的数量,条件是K<=NEED[I,J]。 (4)、检查用户的请求是否小于系统中的可利用资源数量,条件是K<=AVALIABLE[I,J]。 (5)、进行资源的预分配,语句如下:AVALIBLE[I][J]=AVALIBLE[I][J]-K;ALLOCATION[I][J]=ALLOCATION[I][J]+K;NEED[I][J]=NEED[I][J]-K;(6)、系统调用安全性检查算法(子程序)进行检查,如果检查通过,则不用回收,否则进行回收。4、安全性检查算法(子函数) (1)、设置两个临时变量。FINISH[N]记录进程模拟模拟执行的结束状态,初值为0,如果可以模拟执行结束,则可设为1,也可设为其它非零值以表示执行的先后次序。WORK[M]记录模拟执行中资源的回收情况,初值为AVAILABLE[M]的值。(2)、在进程中查找符合以下条件的进程。条件1:FINISH[I]=0条件2:NEED[I][J]〈=WORK[J](3)、如果查找成功则进行资源的模拟回收,语句如下:WORK[J]=WORK[J]+ALLOCATION[I][J];FINISH[I]=1或查找到的顺序号(4)、如果查找不成功,则检查所有进程的FINISH[],如果有一个为0,则系统不为0,返回不成功标志。否则返回成功标志。实验四内存动态分配管理模拟实现一、目的:1、掌握可变分区内存分配的数据结构。2、掌握可变分区内存分配的分配算法(如首次适应算法,最坏适应算法等)3、掌握可变分区内存回收的紧缩算法。二、内容:1、利用VC或DELPHI在实现可变分区内存管理算法的数据结构。2、利用VC或DELPHI在实现可变分区内存管理算法的具体算法(分配采用首次适应算法,回收采用合并算法,不用紧缩。)三、实验要求: 上机编程完成实验。四、实验提示:整个算法的思想。循环对每次读入的用户请求(可以用
(R,SIZE)表示)进行区分,如果是分配,则调用分配算法,如果是回收,则调用回收算法。2、算法中的数据结构。(采用空闲分区表法) STRUCTFREEMEM//空闲分区表项{INTID;//序号 INTSTARTADDR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铜仁幼儿师范高等专科学校《岩土工程数值计算方法》2023-2024学年第一学期期末试卷
- 湖北工业大学工程技术学院《消费者行为研究》2023-2024学年第一学期期末试卷
- 山东化工职业学院《应用逻辑》2023-2024学年第一学期期末试卷
- 2025版智能办公车辆租赁与管理系统合同
- 2025版无人机测量与遥感技术应用合同
- 二零二五年度商业信用保证担保借款合同
- 2025版消防设施检测报告审核补充协议合同
- 二零二五年度保密协议与竞业限制在建筑设计行业的应用合同
- 二零二五年度太阳能光伏板安装工程安全责任合同
- 2025版彩钢活动房租赁及租赁保证金管理合同
- 2022城市轨道交通列车驾驶员技能及素质要求第1部分:地铁、轻轨和单轨
- 《人工智能基础与应用(第2版)》全套教学课件
- 2025年宿迁市公需考试试题
- 建设工程项目的组织协调保障措施
- 2025年春季学期国家开放大学行政管理专业毕业论文选题指南
- CO2还原合成甲醇反应器研究进展
- DB3713T-291-2023工程建设项目“多测合一”技术规程
- 苏教版四年级下册数学计算题每日一练带答案(共20天)
- 江苏连云港某公司“12.9”爆炸事故报告
- 人教版三年级上下数学试卷合集-综合素质训练
- 沥青混凝土质量保证体系及措施
评论
0/150
提交评论