2013操作系统实验指导书.doc

上传人:ng****60 文档编号:3284600 上传时间:2019-05-28 格式:DOC 页数:20 大小:157.50KB
下载 相关 举报
2013操作系统实验指导书.doc_第1页
第1页 / 共20页
2013操作系统实验指导书.doc_第2页
第2页 / 共20页
2013操作系统实验指导书.doc_第3页
第3页 / 共20页
2013操作系统实验指导书.doc_第4页
第4页 / 共20页
2013操作系统实验指导书.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、 操作系统实验指导书适用专业: 计算机科学与技术网络工程 软件工程 太 原 科 技 大 学 计 算 机 科 学 与 技 术 学 院2013 年 3 月前 言操作系统是计算机的核心和灵魂。操作系统软件的设计对整个计算机的功能和性能起着至关重要的作用,所以此门课也是必不可少的,是面向计算机科学与技术、网络工程、软件工程等大多数计算机专业本科生开设的一门计算机专业课程。操作系统是计算机系统的核心, 操作系统课程是计算机科学与技术专业的重要必修课。本课程的目的是使学生掌握现代计算机操作系统的基本原理、基本设计方法及实现技术,具有分析现行操作系统和设计、开发实际操作系统的基本能力。操作系统实验是操作系统

2、课程的重要组成部分,属于学科基础实验范畴。作为与相关教学内容配合的实践性教学环节,应在操作系统理论课教学过程中开设。操作系统是计算机科学与技术专业必修的专业基础课程,操作系统实验的作用是:理解操作系统的设计和实现思路,掌握典型算法。基本要求是:理解进程的概念,理解死锁,掌握银行家算法;掌握请求页式存储管理的实现原理及页面置换算法。学生应具有高级语言编程能力、具有数据结构等基础知识。目 录实验一 windows 进程的创建 .1实验二 windows 并发多线程的应用 .4实验三 P、V 操作的模拟实现 .7实验四 银行家算法模拟 .13实验五 虚拟存储管理中页面置换算法模拟 .161实验一 w

3、indows 进程的创建实验学时:2实验类型:验证实验要求:必修一、实验目的本课题实习的目的是,加深对 wiundows 进程概念及进程管理各部分内容的理解;熟悉windows 进程管理 API 的使用。二、实验要求1. 将源程序编译、链接后形成 master.exe 和 slave.exe 文件。2. 在命令行方式下输入 master slave 回车,将在 master 进程中创建 slave 进程,观察程序运行的结果。3. 自己设计一个小程序,完成在 master 进程中启动该程序的操作。4. 撰写上机报告。三、实验内容下面程序是两个简单的控制台应用程序,第一个程序( MASTER )运

4、行第二个程序( SLAVE ) , 并进入睡眠。 SLAVE 程序从命令行读取 MASTER 程序的进程 ID(PID), 并等待 MASTER 程序终止之后,SLAVE 做了一些事情之后,也结束。这些程序用到了以下几个重要技术: 1. 使用 CreateProcess CreateProcess 函数 函数原型: BOOL CreateProcess( LPCTSTR lpApplicationName , LPTSTR lpCommandLine , LPSECURITY_ATTRIBUTES lpProcessAttributes , LPSECURITY_ATTRIBUTES lpTh

5、readAttributes ,BOOL bInheritHandles , DWORD dwCreationFlags , LPVOID lpEnvironment , LPCTSTR lpCurrentDirectory , LPSTARTUPINFO lpStartupInfo , LPPROCESS_INFORMATION lpProcessInformation ); 参数: lpApplicationName :指向一个以空结尾的串,他指定了要执行的模块 lpCommandLine :指向一个以空结尾的串,该串定义了要执行的命令行。 lpProcessAttributes :指向一

6、个 SECURITY_ATTRIBUTES 结构,该结构决定了返回的句柄是否可被子进程继承。 lpThreadAttributes :指向一个 SECURITY_ATTRIBUTES 结构,该结构决定了返回的句柄是否可被子进程继承。 2bInheritHandles , : 表明新进程是否从调用进程继承句柄。 dwCreationFlags : 定义控制优先类和进程创建的附加标志。 lpEnvironment :指向一个新进程的环境块。 lpCurrentDirectory :指向一个以空结尾的串,该串定义了子进程的当前驱动器和当前目录。 lpStartupInfo :指向一个 STARTUP

7、INFO 结构,该结构定义了新进程的主窗口将如何显示。lpProcessInformation : 指向 PROCESS_INFORMATION 结构,该结构接受关于新进程的表示信息。 返回值: 若函数调用成功,则返回值不为 0 ;若函数调用失败,返回值为 0 。 在上述参数中,参数 lpStartupInfo 是 STARTUPINFO 结构。可以用来设置控台的标题,新窗口的的初始大小和位置,及重定向标准输入和输出。新程序通常可以忽略多数这些数据项,如果选择那样做的话。可以规定该结构体中的标志,已表明要设置的数据段。有时,不想设置任何信息,也必须传递一个有效的指针给空结构(确定设置大小到 c

8、b ,及设置 dwFlags 成员为 0 ) 。参数 lpProcessInformation 返回进程和线程句柄,还包括进程和线程 ID 。这些句柄拥有在参数 lpProcessAttributes 和 lpThreadAttributes 中规定的访问。 要注意,针对 CreateProcess 的一些参数对控制台应用程序是特定的,而其它参数则对各种应用程序有用。大多数情况下,并不一定要填入 STARTUPINFO 结构,但无论如何必须提供它。其返回值是布尔型的,而真正感兴趣的返回值发生于作为参数传送的结构中( PROCESS_INFORMATION ) 。 CreateProcess 返

9、回该结构中的进程 ID 及其句柄,以及初始线程 ID 及其句柄。可以将 ID 发送到其它进程,或使用句柄来控制新进程。2. 使用 WaitForSingleObject WaitForSingleObject 的目的是要确定句柄是否处于发送信号的状态。当进程结束时,进程句柄发出信号。当调用 WaitForSingleObject 时,就规定进程句柄和超时值,如果超时为 0 ,则该命令就立刻返回,且能够确定进程的状态。如果超时是常数 INFINITE ,则命令就不返回,直到目标进程退出为止。当然,还可以规定超时值,其导致该命令等待要结束的进程一段时间。如果进程在超时届满前结束,该命令就返回,并指

10、出句柄在发射信号状态。否则,就返回一个负值。不管句柄在何种状态, WaitForSingleObject 将成功返回,没有错误发生。要确定进程的状态,就必须比较返回值为 WAIT_OBJECT_0 (已发信号的)和 WAIT_TIMEOUT (未发信号的) 。真正的错误返回值为 WAIT_FAILED 。另外可能的返回值是 WAIT_ABANDONED ,是不会看到何时处理进程。要等待一个进程,就必须带有 SYNCHRONIZE 特权的打开局柄。 这里要注意,进程 ID 与进程句柄不同。不能简单地在进程之间传送句柄,这意味着除非有句柄,否则不能从外部进程直接操纵一个进程。不过 OpenProc

11、ess 命令将允许任何程序(有足够的安全特权)将进程标示符(可以用来于其它进程通信)变换为进程句柄。通过调用 GetCurrentProcessId ,还可以了解当前进程标示符。如果要想与其他无关的进程共享,以使能够打开进程句柄,这是非常有用的。但调用 OpenProcess 时,可以请求对进程的访问。对每种进程的访问,也许有或也许没有访问要打开进程的安全性,于是试图请求是仅仅需要的。例如,如果要了解进程的返回代码,就需要 PROCESS_QUERY_INFORMATION 的访问。要终止进程,就必须有 PROCESS_TERMINATE 的访问。 33. 源程序清单:/master.cpp#

12、include #include #include #include void main(int argc,char *argv) char cmd128; if (argc!=1) strcpy(cmd,argv1); else strcpy(cmd,“slave.exe“); int pid=GetCurrentProcessId(); cout #include #include 4void main(int argc,char *argv) if (argc!=2) coutusing namespace std;#include #include int k;HANDLE Apple

13、_;HANDLE Banana_;CRITICAL_SECTION mmutex;DWORD WINAPI Son(LPVOID n)/HANDLE Apple_;CRITICAL_SECTION mmutex;int i = 1;OpenSemaphore(MUTEX_ALL_ACCESS,false,“Apple_“); while (1):WaitForSingleObject(Apple_,INFINITE);/等苹果cout“Son eats “i“ apples“endl;LeaveCriticalSection(i+;:CloseHandle(Apple_);return 0;D

14、WORD WINAPI Daughter(LPVOID n)6int i = 1;/HANDLE Banana_;CRITICAL_SECTION mmutex;OpenSemaphore(MUTEX_ALL_ACCESS,false,“Banana_“);while (1):WaitForSingleObject(Banana_,INFINITE);/等香蕉cout“Daughter eats “i“ bananas“endl;LeaveCriticalSection(i+;:CloseHandle(Banana_);return 0;DWORD WINAPI Father(LPVOID n

15、)UINT fruit;/CRITICAL_SECTION mmutex;EnterCriticalSection(fruit = rand()%2;if (fruit = 0)/盘中放入苹果coutk+1“ father produce an apple“endl;k=k+1; :ReleaseSemaphore(Apple_,1,NULL);else /盘中放入香蕉coutk+1“ father produce a banana“endl;k=k+1; :ReleaseSemaphore(Banana_,1,NULL);return 0;int main()int j;k=0;HANDLE

16、 Father_20; Apple_ = :CreateSemaphore(NULL,0,1,“apple“);Banana_ =:CreateSemaphore(NULL,0,1,“banana“);InitializeCriticalSection(srand(time(NULL); for (j= 0 ; j 20; j+)7Father_j=:CreateThread(NULL,0,Father,NULL,0,0); :CreateThread(NULL,0,Son,NULL,0,0);:CreateThread(NULL,0,Daughter,NULL,0,0);Sleep(1000

17、); WaitForMultipleObjects(20,Father_,TRUE,INFINITE); return 0;实验三 P、V 操作的模拟实现实验学时:2实验类型:验证实验要求:必修一、实验目的本课题实习的目的是,加深对进程概念及进程管理各部分内容的理解;熟悉进程管理中主要数据结构的设计及进程调度算法,进程控制机构、同步结构、通迅机构的实施。要求设计一个允许 n 个进程并发运行的进程管理模拟糸统。该糸统包括有简单的进程控制、同步及通迅机构,其进程调度算法可任意选择。每个进程用一个 PCB 表示,其内容可根据具体情况设置。各进程之间应有一定的同步关糸。糸统在运行过程中应能显示或打印各

18、进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及糸统的管理过程。1) 理解信号量相关理论;2) 掌握记录型信号量结构;3) 掌握 P、V 原语实现机制。二、实验要求1) 输入给定代码;2) 进行功能测试并得出正确结果。3) 分析 P 和 V 函数功能模块;4) 在实验报告中画出 P 和 V 函数流程图;5) 撰写上机报告。三、实验内容本实验针对操作系统中信号量相关理论进行实验,要求实验者输入实验指导书提供的代码并进行测试。代码主要模拟信号量的 P 操作和 V 操作。1) 信号量信号量也称为信号锁,主要应用于进程间的同步和互斥,在用于互斥时,通常作为资源锁。信号量通常通过两个原子操作 P 和 V 来访问。P 操作使信号量的值+1,V 操作使信号量的值-1 。

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。