ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:697.37KB ,
资源ID:11597511      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11597511.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(OS实验报告格式.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

OS实验报告格式.docx

1、OS实验报告格式(此文档为word格式,下载后您可任意编辑修改!)学年第一学期实验一 Windows多线程【开发语言及实现平台或实验环境】C+C#Microsoft Visual Studio 6.0 Microsoft Visual Studio .NET 【实验目的】(1) 进一步理解操作系统的并发性;(2) 了解Windows线程创建方法,并通过查阅资料理解各参数的含义;(3) 了解多线程程序设计方法,并进行简单应用。【实验要求】(1) 逐程序进行简要分析、运行各程序并仔细阅读注释;(2) 查阅MSDN或其他资料,掌握相关系统调用使用方法和参数含义;(3) 完成实验报告。【实验结果与分析

2、】Sleep是阻塞线程函数。它会在当前语句阻塞一段时间,参数是以11000秒为单位的,线程1和主线程并发执行,Sleep(10) 使当前线程放弃目前的时间片,并且在 10ms 内不会被再次调度。会使主进程和分进程同时被调度,进程也有父子关系。父进程退出后子进程也会退出,而加入Sleep后主进程先停止10后子进程就有时间进行了。加入循环,使得俩个进程交替执行,出现俩个1,俩个6是因为不可再现性,即俩个进程同时迈出同一部步,俩个进程中存在共享变量。因为加入while所以不需要sleep,父子进程也能同时进行。加入sleep(1000)后父进程有足够的时间运行子进程加入俩个sleep(1)后,有可能

3、到thread1 is sell tickets:时间片就停了,tickets没-,还可以运行thread2 is sell tickets:tickets也就是说tickets变为0,返回再运行thread1 is sell tickets时就卖0号票了【实验思考及总结】加入循环,使得俩个进程交替执行Sleep是阻塞线程函数。它会在当前语句阻塞一段时间,参数是以11000秒为单位的线程也有父子关系。父进程退出后子进程也会退出不可再现性,即俩个进程同时迈出同一部步,俩个进程中存在共享变量实验二 Windows线程同步机制【开发语言及实现平台或实验环境】C+C#Microsoft Visual

4、Studio 6.0 Microsoft Visual Studio .NET【实验目的】(1) 了解Windows线程同步机制;(2) 了解互斥体,并通过查阅资料理解互斥体对象的使用方法; (3) 了解事件,并通过查阅资料理解事件对象的使用方法;(4) 了解关键区,并通过查阅资料理解关键区对象的使用方法;(5) 了解信号量,并通过查阅资料理解信号量对象的使用方法;(6) 利用Windows线程同步机制,模拟生产者消费者问题。【实验要求】(1) 逐程序进行简要分析、运行各程序并仔细阅读注释;(2) 查阅MSDN或其他资料,掌握相关系统调用使用方法和参数含义;(3) 完成实验报告。【实验结果与分

5、析】2-1到2-3加入俩个sleep(1)后,有可能到thread1 is sell tickets:时间片就停了,tickets没-,还可以运行thread2 is sell tickets:tickets也就是说tickets变为0,返回再运行thread1 is sell tickets时就卖0号票了【实验思考及总结】Sleep(10) 使当前线程放弃目前的时间片,并且在 10ms 内不会被再次调度进程也有父子关系。父进程退出后子进程也会退出,线程之间的同步使用一些核心对象:如thread, process, evnet, mutex, semaphore. 在线程之间使用等待函数如Wa

6、itForSingleObjects, WaitForMultipleObjects. 等待函数使用核心对象的handle作为参数,如果handle被激发,则执行下一步。 LeaveCriticalSection2)Mutex: 适用范围: 不同线程之间用来排它性占有特性: 核心对象, 可以使用wait进行等待,只能被拥有线程所释放函数:CreateMutex ReleaseMutex3)semaphore: 信号量 适用范围: 用来限制资源占用特性: 核心对象,没有拥有者,任何线程都可释放函数:CreateSemaphore OpenSemaphore ReleaseSemaphore4)E

7、vent: 适用范围: 同来控制对象信号的接收,常与信号系统结合起来特性: 核心对象函数: CreateEvent OpenEvent PulseEvent SetEvent ResetEvent 5)Interlocked 简单的原子操作,如写文件中对文件中字节范围的锁定_lockingNOTE: 线程同步中很重要的可归纳为锁系统lock和信号系统signal lock包括:CRITICAL_SECTION, Mutex, wait function: WaitForMultipleObjects WaitForSingleObject Sleep 6)completion port 适用范

8、围: 网络异步接收,包括文件读写特性:由OS来控制读写, 是windows平台最有效的同步机制,相当于linux的AIO或者非阻塞socket+epoll 函数: CreateIoCompletionPort GetQueuedCompletionStatus示例1: event 事件机制: 设置一个全局event对象,这个只能等待最多64个对象,而且要用WaitForMultipleObjects来监视线程handle数组. 不如完全端口completion port HANDLE ghWriteEvent; HANDLE ghThreadsTHREADCOUNT; (1)创建个手动事件,一

9、开始不接受任何信号no signel ResetEvent: 用来信号重置,同CreateEvent or OpenEvent ghWriteEvent = CreateEvent( NULL, default security attributes TRUE, manual-reset event FALSE, initial state is nonsignaled TEXT(WriteEvent) object name ); (2)产生一堆线程,设置事件响应信号signal, if (! SetEvent(ghWriteEvent) ) printf(SetEvent failed (

10、%d)n, GetLastError(); return; (3)设置线程等待事件,所有线程都接到这个事件,这里对线程进行了同步,只有所有线程都执行了,才执行下一步 dwWaitResult = WaitForMultipleObjects( THREADCOUNT, number of array ghThreads, array of thread port (1) 创建完成端口, 与一个监听socket发生关联 CreateIoCompletionPort (2) 产生一堆线程,让线程在完全端口循环等待. CreateThread-(WorkerThread)-GetQueuedComp

11、letionStatus (3) 接收监听socket的读写请求accept,将accept socket与完全端口关联实验三 Windows线程通信【开发语言及实现平台或实验环境】C+C#Microsoft Visual Studio 6.0 Microsoft Visual Studio .NET 【实验目的】(1) 了解Window线程通信方法;(2) 了解匿名管道,并通过查阅资料理解匿名管道的使用方法;(3) 了解命名管道,并通过查阅资料理解命名管道的使用方法;【实验要求】(1) 逐程序进行简要分析、运行各程序并仔细阅读注释;(2) 查阅MSDN或其他资料,掌握相关系统调用使用方法和参

12、数含义;(3) 完成实验报告。【实验结果与分析】【实验思考及总结】学会了在vc6.0中open已经编译好的程序,选择所有文件,线程之间通信的两个基本问题是互斥和同步。线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。线程互斥是指对于共享的操作系统资源(指的是广义的资源,而不是Windows的.res文件,譬如全局变量就是一种共享资源),在各线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥是一种特殊

13、的线程同步。实际上,互斥和同步对应着线程间通信发生的两种情况:(1)当有多个线程访问共享资源而不使资源被破坏时;(2)当一个线程需要将某个任务已经完成的情况通知另外一个或多个线程时。 在WIN32中,同步机制主要有以下几种:(1)事件(Event);(2)信号量(semaphore);(3)互斥量(mutex);(4)临界区(Critical section)。全局变量因为进程中的所有线程均可以访问所有的全局变量,因而全局变量成为Win32多线程通信的最简单方式。例如:实验四 银行家算法模拟【开发语言及实现平台或实验环境】C+C#Microsoft Visual Studio 6.0 Micr

14、osoft Visual Studio .NET 2003【实验目的】(1)进一步理解利用银行家算法避免死锁的问题;(2)在了解和掌握银行家算法。(3)理解和掌握安全序列、安全性算法【实验内容】(1)编写安全性算法;(2)编写银行家算法,并编制银行家算法通用程序,将调试结果显示在计算机屏幕上,再检测和笔算的一致性。【源代码】#include using namespace std; #includestring.100100=0;系统已分配资源 int Need100100=0;还需要资源 int Request100=0;请求资源向量 int temp100=0;存放安全序列 int Wor

15、k100=0;存放系统可提供资源 int M=100;作业的最大数为100 int N=100;资源的最大数为100 void showdata()显示资源矩阵 int i,j; cout系统目前可用的资源Avaliable:endl; for(i=0;iN;i+)coutnamei ; coutendl; for (j=0;jN;j+)coutAvaliablej ;输出分配资源 coutendl; cout Max Allocation Needendl; cout进程名 ; for(j=0;j3;j+) for(i=0;iN;i+)coutnamei ; cout ; coutendl;

16、 for(i=0;iM;i+) cout i ; for(j=0;jN;j+)coutMaxij ; cout ; for(j=0;jN;j+)coutAllocationij ; cout ; for(j=0;jN;j+)coutNeedij ; coutendl; int changdata(int i)进行资源分配 int j; for (j=0;jM;j+) Avaliablej=Avaliablej-Requestj; Allocationij=Allocationij+Requestj; Needij=Needij-Requestj; return 1; int safe()安全性

17、算法 int i,k=0,m,apply,Finish100=0; int j; int flag=0; for(i=0;iN;i+) Worki=Avaliablei; for(i=0;iM;i+) apply=0; for(j=0;jN;j+) if (Finishi=False&Needij=Workj) apply+; if(apply=N) for(m=0;mN;m+)Workm=Workm+Allocationim;变分配数 Finishi=True; tempk=i;i=-1; k+;flag+; for(i=0;iM;i+) if(Finishi=False) cout系统不安

18、全endl;不成功系统不安全 return -1; cout系统是安全的!endl;如果安全,输出成功 cout分配的序列:; for(i=0;iM;i+)输出运行进程数组 couttempi; if(iM-1) cout; coutendl; return 0; void share()利用银行家算法对申请资源对进行判定 char ch; int i=0,j=0; ch=y; cout请输入要求分配的资源进程号(0-M-1i;输入须申请的资源号 cout请输入进程 i 申请的资源:endl; for(j=0;jN;j+) coutnamejRequestj;输入需要申请的资源 for (j=

19、0;jNeedij)判断申请是否大于需求,若大于则出错 cout进程 i申请的资源大于它需要的资源; cout 分配不合理,不予分配!Avaliablej)判断申请是否大于当前资源,若大于则 出错 cout进程i申请的资源大于系统现在可利用的资源; cout 分配出错,不予分配!endl; ch=n; break; if(ch=y) changdata(i);根据进程需求量变换资源 showdata();根据进程需求量显示变换后的资源 safe();根据进程需求量进行银行家算法判断 void addresources()添加资源 int n,flag; coutn; flag=N; N=N+n

20、; for(int i=0;in;i+) coutnameflag; coutAvaliableflag+; showdata(); safe(); void delresources()删除资源 char ming; int i,flag=1; coutming; for(i=0;iN;i+) if(ming=namei) flag=0; break; if(i=N) cout该资源名称不存在,请重新输入:; while(flag); for(int j=i;jN-1;j+) namej=namej+1; Avaliablej=Avaliablej+1; N=N-1; showdata();

21、 safe(); void changeresources()修改资源函数 cout系统目前可用的资源Avaliable:endl; for(int i=0;iN;i+) coutnamei:Avaliableiendl; cout输入系统可用资源Avaliable:Avaliable0Avaliable1Avaliable2; cout经修改后的系统可用资源为endl; for (int k=0;kN;k+) coutnamek:Avaliablekendl; showdata(); safe(); void addprocess()添加作业 int flag=M; M=M+1; cout请

22、输入该作业的最打需求量Maxendl; for(int i=0;iN;i+) coutnameiMaxflagi; Needflagi=Maxflagi-Allocationflagi; showdata(); safe(); int main()主函数 int i,j,number,choice,m,n,flag; char ming; cout*资源管理系统的设计与实现*endl; coutn; N=n; for(i=0;in;i+) cout资源i+1ming; namei=ming; coutnumber; Avaliablei=number; coutendl; coutm; M=m

23、; cout请输入各进程的最大需求量(m*n矩阵)Max:endl; for(i=0;im;i+) for(j=0;jMaxij; do flag=0; cout请输入各进程已经申请的资源量(m*n矩阵)Allocation:endl; for(i=0;im;i+) for(j=0;jAllocationij; if(AllocationijMaxij) flag=1; Needij=Maxij-Allocationij; if(flag) cout申请的资源大于最大需求量,请重新输入!n; while(flag); showdata();显示各种资源 safe();用银行家算法判定系统是否安

24、全 while(true) cout*银行家算法演示*endl; cout 1:增加资源 endl; cout 2:删除资源 endl; cout 3:修改资源 endl; cout 4:分配资源 endl; cout 5:增加作业 endl; cout 0:离开 endl; cout*endl; coutchoice; switch(choice) case 1: addresources();break; case 2: delresources();break; case 3: changeresources();break; case 4: share();break; case 5:

25、 addprocess();break; case 0: choice=0;break; default: cout请正确选择功能号(0-5)!endl;break; return 1; 【实验结果与分析】【实验思考及总结】银行家算法的安全算法不唯一,我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已

26、占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。实验五 页面置换算法模拟【开发语言及实现平台或实验环境】C+C#Microsoft Visual Studio 6.0 Microsoft Visual Studio .NET 2003【实验目的】(1)进一步理解利用页面调度算法实现虚拟内存的问题;(2)通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点。(3)掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。(4)了解页面大小和内存实际容量对命中率的影响。【实验内容】(1)在了解和掌握页面调度算法的基础上,编制先进先出的算法(FIF

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1