操作系统实验题目及实验报告要求
- 格式:docx
- 大小:34.08 KB
- 文档页数:11
操作系统教程实验指导书实验一WINDOWS进程初识1、实验目的(1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。
(2)掌握WINDOWS API的使用方法。
(3)编写测试程序,理解用户态运行和核心态运行。
2、实验内容和步骤(1)编写基本的Win32 Consol Application步骤1:登录进入Windows,启动VC++ 6.0。
步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。
创建一个新的控制台应用程序工程。
步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。
步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。
编译成可执行文件。
步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe运行结果 (如果运行不成功,则可能的原因是什么?) :答:运行成功,结果:(2)计算进程在核心态运行和用户态运行的时间步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。
步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。
步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。
篇一:操作系统实验报告完全版《计算机操作系统》实验报告班级:姓名:学号:实验一进程控制与描述一、实验目的通过对windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解windows 2000的结构。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解windows 2000中进程的“一生”。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional、visual c++6.0企业版。
三、实验内容和步骤第一部分:程序1-1windows 2000 的gui 应用程序windows 2000 professional下的gui应用程序,使用visual c++编译器创建一个gui应用程序,代码中包括了winmain()方法,该方法gui类型的应用程序的标准入口点。
:: messagebox( null, “hello, windows 2000” , “greetings”,mb_ok) ;/* hinstance */ , /* hprevinstance */, /* lpcmdline */, /* ncmdshow */ )return(0) ; }在程序1-1的gui应用程序中,首先需要windows.h头文件,以便获得传送给winmain() 和messagebox() api函数的数据类型定义。
接着的pragma指令指示编译器/连接器找到user32.lib库文件并将其与产生的exe文件连接起来。
这样就可以运行简单的命令行命令cl msgbox.cpp来创建这一应用程序,如果没有pragma指令,则messagebox() api函数就成为未定义的了。
这一指令是visual studio c++ 编译器特有的。
接下来是winmain() 方法。
其中有四个由实际的低级入口点传递来的参数。
课内实验报告课程名:操作系统任课教师:沈超专业:信息管理与信息系统学号:姓名:二○一六至二○一七年度第一学期南京邮电大学经济与管理学院Process[numberschedul].order=tempcounter;}程序结果截图:二、银行家算法(网上借鉴)银行家算法,当进程提出资源申请时,系统首先检查该进程对资源的申请量是否超过其最大需求量及系统现有的资源能否满足进程需要。
若超过,则报错,若不能满足,则让该进程等待;否则进一步检查把资源分给该进程后系统能否出于安全状态,若安全,则分配,否则置该进程为等待资源状态。
算法实现过程:设进程i 提出请求REQUEST [j] ,则银行家算法按如下规则进行判断。
(1) 如果REQUEST [i] [j]<= NEED[i][j] ,则转(2) ;否则,出错。
(2) 如果REQUEST [i] [j]<= A V AILABLE[i][j] ,则转(3) ;否则,出错。
(3) 系统试探分配资源,修改相关数据:A V AILABLE[j]-=REQUEST[i][j];ALLOCATION[i][j]+=REQUEST[i][j];NEED[i][j]-=REQUEST[i][j];(4) 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。
Check()关键代码:{int k, f, no=0;int work[M],a[M];char finish[M];anquan=1;for(i=0;i<n; i++) finish[i]='F';for(j=0;j<m; j++) work[j]=available[j]; k=n;do{ for (i=0;i<n; i++){if (finish[i]=='F'){ f=1;for (j=0;j<m; j++)if (need[i][j]>work[j]) printf("处于安全状态.");printf("安全序列号:");for (i=0;i<n;i++) printf ("%d ",a[i]); printf("\n");printf("进程");printf(" ");printf(" Max ");rintf(" ");rintf("allocation");printf(" ");printf("need");printf(" ");f=0;if (f==1)//找到还没完成的且需求数小于可提供进程继续运行的{ finish[i]='T';a[no++]=i;//记录安全序列号for (j=0;j<m; j++)work[j]=work[j]+allocation[i][j];//释放该进程已分配的资源available[j] =work[j];}}}k--; }while(k>0);f=1;for (i=0;i<n; i++)//判断有没有进程没完成{ if (finish[i]=='F'){f=0;break; }} if (f==0) {printf("不安全状态!\n");anquan=0;} else {printf("available");printf("\n");for (i=0;i<n; i++){ printf("%2d",i);printf(" ");for(j=0;j<m; j++)printf("%2d",max[i][j]);printf(" ");for(j=0;j<m; j++)printf("%2d",allocation[i][j]);printf(" ");for(j=0;j<m; j++)printf("%2d",need[i][j]);printf(" ");for(j=0;j<m; j++){if(i>0)break;printf("%2d",available[j]);}printf("\n");}}}程序结果截图:三、实验总结:这次上机模拟了进程调度过程和解决了死锁问题,让我对短作业优先调度算法和银行家算法有了比在课堂上更深刻的认识。
实验报告实验课程: 计算机操作系统学生姓名:XXX学号:XXXX专业班级:软件2014年12月25日目录实验一熟悉Windows XP中的进程和线程 (3)实验二进程调度 (7)实验三死锁避免—银行家算法的实现 (16)实验四存储管理 (22)实验一熟悉Windows XP中的进程和线程一、实验名称熟悉Windows XP中的进程和线程二、实验目的1、熟悉Windows中任务管理器的使用。
2、通过任务管理器识别操作系统中的进程和线程的相关信息。
3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。
三、实验结果分析1、启动操作系统自带的任务管理器:方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。
2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表:表一:统计进程的各项主要信息3、启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。
再从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是任务管理器无法结束进程,原因是该系统是系统进程。
4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化桌面上图标菜单都消失了、得到的结论 explorer.exe是管理桌面图标的文件(说出explorer.exe进程的作用)。
5、运行“spy++.exe”应用软件,点击按钮“”,切换到进程显示栏上,查看进程“explorer.exe”的各项信息,并填写下表:进程:explorer.exe 中的各个线程6、注意某些线程前有“+”,如图所示:,说明二者之间的差异前有“+”其器线程下有窗口。
四、心得体会通过本次实验,我了解到了windows系统中进程的管理与操作,我了解了如何切出任务管理器,任务管理器应用与其他与进程相关的知识,明白了有些系统程序不能够关闭,系统中的进程与线程虽然很多,但是其中有许多关联,只要弄清楚其中的关联那么就能够运用好进程与线程,达到我们的目的。
操作系统接口实验报告一、实验目的本次实验旨在深入理解操作系统接口的概念、功能和使用方法,通过实际操作和编程实践,掌握操作系统提供的接口在程序开发中的应用,提高对操作系统的认知和编程能力。
二、实验环境操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、文件操作接口创建、打开、读取和写入文件文件属性的获取和设置文件的复制、移动和删除2、进程管理接口创建和终止进程获取进程的信息,如进程 ID、内存使用等进程间的通信,如管道、消息队列等3、线程管理接口创建和终止线程线程同步机制,如互斥锁、条件变量等线程的优先级设置和调度4、内存管理接口动态内存分配和释放内存映射文件的使用虚拟内存的操作四、实验步骤1、文件操作接口实验使用`CreateFile` 函数创建或打开一个文件。
通过`ReadFile` 和`WriteFile` 函数进行文件的读写操作。
利用`GetFileAttributes` 函数获取文件属性,并使用`SetFileAttributes` 函数设置文件属性。
运用`CopyFile` 、`MoveFile` 和`DeleteFile` 函数实现文件的复制、移动和删除。
2、进程管理接口实验调用`CreateProcess` 函数创建一个新的进程,并获取进程的 ID 和句柄。
使用`GetProcessMemoryInfo` 函数获取进程的内存使用情况。
通过管道或消息队列实现进程间的通信。
3、线程管理接口实验使用`CreateThread` 函数创建线程,并设置线程的执行函数。
利用互斥锁和条件变量来实现线程间的同步,确保数据的一致性和正确性。
调整线程的优先级,观察线程调度的效果。
4、内存管理接口实验运用`malloc` 和`free` 函数进行动态内存的分配和释放。
使用`CreateFileMapping` 和`MapViewOfFile` 函数实现内存映射文件。
华中科技大学操作系统课程设计实验报告专业:计算机科学与技术班级:1101:许阳学号:U202114241一、实验目的掌握Linux操作系统的使用方法;了解Linux系统内核代码结构;掌握实例操作系统的实现方法。
二、实验要求1、掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux下的编程环境。
●编一个C程序,其内容为实现文件拷贝的功能;●编一个C程序,其内容为分窗口同时显示三个并发进程的运行结果。
要求用到Linux下的图形库。
2、掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。
另编写一个应用程序,调用新增加的系统调用。
实现的功能是:文件拷贝;3、掌握增加设备驱动程序的方法。
通过模块方法,增加一个新的设备驱动程序,其功能可以简单。
实现字符设备的驱动;4、了解和掌握/proc文件系统的特点和使用方法●了解/proc文件的特点和使用方法●监控系统状态,显示系统中假设干部件使用情况●用图形界面实现系统监控状态。
5、设计并实现一个模拟的文件系统〔选作〕三、实验一1、编一个C程序,其内容为实现文件拷贝的功能要实现文件拷贝功能,主要用到的函数是open、write、read。
以前在windows下写C语言翻开文件常用的fopen,此时不能用,因为fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api ;所以应该直接使用linux中的系统函数open。
主要用到的头文件:Unistd.h \\包含了许多Linux系统效劳的函数原型,如:read、writeFcntl.h \\定义了很多宏和open,fcntl函数原型Stdio.h \\标准输入输出头文件sys/types.h \\此头文件包含适当时应使用的多个根本派生类型sys/stat.h \\包含了获取文件属性的一些函数errno.h \\用于调试错误代码是所需要的一些errno变量string.h \\包含了处理字符串的一些函数设计思路:由命令行参数获取2个文件名,根据其文件名和路径分别翻开该2个文件,设置一个循环,从源文件复制N个字节到目的文件,直到源文件指针到文件尾,最后关闭2个文件。
计算机操作系统课程实验报告专业信息管理与信息系统班级 1203601学号 120360117姓名乐云指导教师周学权计算机操作系统课程实验报告专业信息管理与信息系统班级 1203601学号 120360114姓名郭鑫指导教师周学权操作系统实验实验1 使用虚拟机安装系统 4学时【实验目的】1.了解虚拟机软件的使用。
2.了解使用虚拟机安装Windows及Ubuntu操作系统。
【实验内容】1. 安装虚拟机软件VirtualBox。
2. 配置VirtualBox环境安装WindowsXP,并在虚拟机中启动windowsXP。
3. 配置VirtualBox环境安装Ubuntu 10.10,并在虚拟机中启动Ubuntu。
【实验环境】VirtualBox4.0Windows XPUbuntu 8.04【实验过程】一、创建虚拟机首先运行VirtualBox,单击左上角的“新建”。
单击下一步。
出现如下图的界面,在名称后输入自己起的名字,如test选择自己想要安装的系统类型和版本,本次试验是安装windows xp系统设置完成后,单击下一步。
接下来是设置虚拟机的内存大小,本次实验操作的计算机内存为4GB,所以我选择分配给我的虚拟机的内存为512MB,然后单击下一步。
接着创建虚拟硬盘,选择创建新的虚拟硬盘,单击下一步。
选择虚拟硬盘的类型,默认选择了VDI类型,单击下一步。
接下来选择为动态扩展类型,因为计算机的存储空间不大。
单击下一步。
动态扩展:如果你为你的虚拟磁盘分配的是10G空间,虚拟磁盘占用真实磁盘空间的范围就为0~10G。
固定大小:如果你为你的虚拟磁盘分配的是10G空间,虚拟磁盘占用真实磁盘空间永远不是10G,不管虚拟磁盘空间是否被全部使用。
选择虚拟机在本地磁盘中的位置和大小,单击下一步。
确认虚拟机的详细情况,点击下一步。
这时我们已经成功的创建了一个虚拟机了,接下来我们要开始配置这个虚拟机安装操作系统选择刚才创建的虚拟机,然后单击上方的“开始”弹出了首次运行向导,单击下一步。
操作系统实验
(课程设计)实验报告
学院
专业
班级/学号
学生姓名
成绩
实验地点_
实验日期___ __
指导教师_____ ___ _____
(课程上机)实验报告
1.实验名称、实验目的、实验内容、实验要求由教师确定,实验前由教师事先填好,然后作为实验报告模版供学生使用;
2.实验准备由学生在实验或上机之前填写,教师应该在实验前检查;
3.实验过程由学生记录实验的过程,包括操作过程、遇到哪些问题以及如何解决等;
4.实验总结由学生在实验后填写,总结本次实验的收获、未解决的问题以及体会和建议等;
5.源程序、代码、具体语句等,若表格空间不足时可作为附录另外附页。
实验一:CPU占用率控制一、实验目的1、通过编写和调试程序以加深对CPU调度的理解;2、熟悉Windows任务管理器CPU信息的获取和使用方法;二、实验要求编写程序实现下面任意一题:1、CPU占用率为一条直线,固定在50%;2、CPU占用率为一条正弦曲线。
三、实验原理在任务管理器的一个刷新周期内,CPU忙(执行应用程序)的时间和刷新周期总时间的比率,就是CPU的占用率,也就是说,任务管理器中显示的是每个刷新周期内CPU占用率的统计平均值。
通过控制程序在任务管理器的刷新期间内忙/闲的比例,就可以控制管理器的CPU占有率。
问题的关键在于如何控制两个loop的时间。
四、实验内容及结果1、实现CPU占用率为一条直线,固定在50%;分析:GetTickCount()可以得到“系统启动到现在”的毫秒值,最多能够统计到49.7天。
另外,利用Sleep()函数,最多也只能精确到1毫秒。
因此,可以在“毫秒”这个量级做操作和比较。
步骤1要操纵CPU的usage曲线,就需要使CPU在一段时间内跑busy和idle两个不同的循环,从而通过不同的时间比例来获得调节CPU占用率的控制。
步骤2利用GetTickCount()来实现busy loop的循环,用Sleep()实现idle loop。
实验源程序:#include <windows.h>int main(void){//50%int busyTime=10;int idleTime=busyTime;_int64 startTime;SetThreadAffinityMask(GetCurrentProcess(), 0x00000001);while(true){startTime=GetTickCount(); //获取从系统从开机到此刻//为止运行的时间while((GetTickCount()-startTime)<=busyTime){;}Sleep(idleTime);}return 0;}实验结果:(图一CPU占用率为一条直线,固定在50%)2、CPU占用率为一条正弦曲线。
国开(电大)操作系统课程实验报告1
概要
该实验报告旨在记录国开(电大)操作系统课程实验1的过程和
结果。
本次实验的主要目标是熟悉操作系统的基本概念和任务管理。
实验过程
1. 阅读实验指南:仔细阅读了实验指南,了解了实验要求和流程。
2. 环境搭建:安装了虚拟机软件并创建了一个虚拟机,用于实
验的操作系统。
3. 实验步骤:
- 步骤1:启动虚拟机并登录操作系统。
- 步骤2:查看当前系统的任务列表。
- 步骤3:创建一个新的任务,并添加一些测试内容。
- 步骤4:查看更新后的任务列表,确认新任务的添加成功。
4. 实验结果:
- 成功完成了所有实验步骤。
- 通过查看任务列表,确认新任务的添加成功。
总结
通过本次实验,我进一步了解了操作系统的基本概念和任务管理。
实践操作系统的相关操作,加深了对操作系统的理解和熟悉度。
在实验过程中,我遵循实验指南,按照步骤进行操作,并取得了预
期的实验结果。
改进建议
对于下次实验,建议在实验过程中记录更多的细节和操作步骤,便于后续复和总结。
同时,对于实验中遇到的问题,可以记录下来
并尝试寻找解决方案,以便在以后的实验中更好地应对类似问题。
实 验 报 告 实验课程: 操作系统实验 学生姓名: 王桥 学 号: 专业班级: 计科123班 2014年 6月3 日 目 录 一、 实验一 ………………………………………………………1 二、 实验二 ………………………………………………………7 三、 实验三 ………………………………………………………21 四、 实验四 ………………………………………………………28 五、 实验五 ………………………………………………………33 南昌大学实验报告 ---(1)操作系统安装及其接口环境 学生姓名: 王桥 学 号: 专业班级: 计科123班 实验类型:■ 验证 □ 综合 □ 设计 □ 创新 实验日期: 实验成绩:
一、实验目的
熟悉Windows1(执行程序) 2.模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。 模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。 [提示]: (1) PV操作同步机构,由P操作原语和V操作原语组成,它们的定义如下: P操作原语P(s):将信号量s减去1,若结果小于0,则执行原语的进程被置成等待信号量s的状态。 V操作原语V(s):将信号量s加1,若结果不大于0,则释放一个等待信号量s的进程。 这两条原语是如下的两个过程: procedure p (var s: semaphore); begin s:=s-1; if s<0 then W(s) end {p} procedure v (var s: semaphore); begin s: =s+1; if s<=0 then R(s) end {V} 其中W(s)表示将调用过程的进程置为等待信号量s的状态;R(s)表示释放一个等待信号量s的进程。 在系统初始化时应把semaphore定义为某个类型,为简单起见,在模拟实验中可把上述的semaphore直接改成integer。 (2)生产者——消费者问题。 假定有一个生产者和消费者,生产者每次生产一件产品,并把生产的产品存入共享缓冲器以供消费者取走使用。消费者每次从缓冲器内取出一件产品去消费。禁止生产者将产品放入已满的缓冲器内,禁止消费者从空缓冲器内取产品。假定缓冲器内可同时存放10件产品。那么,用PV操作来实现生产者和消费者之间的同步,生产者和消费者两个进程的程序如下: B:array [0..9] of products; s1,s2: semaphore; IN, out; integer; IN:=0;out:=0; cobegin procedure producer; c: products; begin L1: produce (c); p (s1); B[IN]:=C; IN:=(IN+1)mod 10; v(s2); goto L1
end;
procedure consumer; x: products; begin L2:P(s2); x:=B[out]; out:=(out+1) mod 10; v(s1); consume(x); goto L2
end;
coend 其中的semaphore和products是预先定义的两个类型,在模拟实现中semaphore用integer或char等代替。 (3)进程控制块PCB。 为了纪录进程执行时的情况,以及进程让出处理器后的状态,断点等信息,每个进程都有一个进程控制块PCB。在模拟实验中,假设进程控制块的结构如图4-1。其中进程的状态有:运行态、就绪态、等待态和完成态。当进程处于等待态时,在进程控制块PCB中要说明进程等待原因(在模拟实验中进程等待原因为等待信号量s1或s2);当进程处于等待态或就绪态时,PCB中保留了断点信息,一旦进程再度占有处理器则就从断点位置继续运行;当进程处于完成状态,表示进程执行结束。 图4-1 进程控制块结构 (4)处理器的模拟。 计算机硬件提供了一组机器指令,处理器的主要职责是解释执行机器指令。为了模拟生产者和消费者进程的并发执行,我们必须模拟一组指令和处理器职能。 模拟的一组指令见图4-2,其中每条指令的功能由一个过程来实现。用变量PC来模拟“指令计数器”,假设模拟的指令长度为1,每执行一条模拟指令后,PC加1,指出下一条指令地址。使用模拟的指令,可把生产者和消费者进程的程序表示为图4-3的形式。 定义两个一维数组PA[0..4]和SA[0..4],每一个PA[i]存放生产者程序中的一条模拟指令执行的入口地址;每个SA[i]存放消费者程序中的一条模拟指令执行的入口地址。于是模拟处理器执行一条指令的过程为:取出PC之值,按PA[PC] 或SA[PC]得模拟指令执行的入口地址,将PC之值加1,转向由入口地址确定的相应的过程执行。 (5)程序设计 本实验中的程序由三部分组成:初始化程序、处理器调度程序、模拟处理器指令执行程序。各部分程序的功能及相互间的关系由图4-4至图4-7指出。 模拟的指令 功能
进程名 状态 等待原因 断点 P(s) 执行P操作原语 V(s) 执行v操作原语
put B[IN]:=product;IN:=(IN+1) mod 10 GET X:=B[out];out:=(out+1) mod 10 produce 输入一个字符放入C中 consume 打印或显示x中的字符 GOTO L PC: L NOP 空操作 图4-2 模拟的处理器指令 序号 生产者程序 消费者程序 0 produce P(s2) 1 P(s1) GET 2 PUT V(s1) 3 V(s2) consume 4 goto 0 goto 0 图4-3 生产者和消费者程序 初始化程序:模拟实验的程序从初始化程序入口启动,初始化工作包括对信号量S1、S2赋初值,对生产者、消费者进程的PCB初始化。初始化后转向处理器调度程序,其流程如图4-4 处理器调度程序:在计算机系统中,进程并发执行时,任一进程占用处理器执行完一条指令后就有可能被打断而让出处理器由其他进程运行。故在模拟系统中也类似处理,每当执行一条模拟的指令后,保护当前进程的现场,让它成为非运行状态,由处理器调度程序按随机数再选择一个就绪进程占用处理器运行。处理器调度程序流程见图4-5。
图 4-4 初始化流程 模拟处理器指令执行程序:按“指令计数器”PC之值执行指定的质量,且PC加1指向下一条指令。模拟处理器指令执行的程序流程见图4-6和4-7。 另外,为了使得模拟程序有一个结束条件,在图4-6中附加了“生产者运行结束”的条件判断,模拟时可以采取人工选择的方法实现。图4-7给出了P(S)和V(S)模拟指令执行过程的流程。其他模拟指令的执行过程已在图4-2中指出。
四、实验报告 (1) 实验题目。 (2) 打印源程序并附上注释。 (3) 从键盘上输入一组字符,由生产者每次读入一个字符供消费者输出。
运行模拟程序,打印依次读入的字符和消费者输出的字符。 (4) 把生产者和消费者进程中的P操作、V操作都改成空操作指令,观察
在两者不同步的情况下可能出现的与时间有关的错误。打印依次读入的字符和消费者输出的字符。
图4-5处理器调度程序流程
开初始化信号量S1,
处理器调度生产者和消费者进程的PCB中状态
将现行进程置为
结束
开始 结束 保护现场,PC=>当前有就绪进程 否 是
开j:=PC 现行进 否 是 (1)模拟P(S) (2)模拟V(S) 图 4-7 模拟PV操作的执行 三、实验要求 1、 linux操作系统 2、 Windows操作系统 四、主要实验步骤 linux操作系统下的操作步骤: gedit (编辑程序) gcc –o semaphore (编译、链接程序) ./semaphore(执行程序) 生产者和消费者的代码: #include const unsigned short SIZE_OF_BUFFER = 5; . "; std::cerr << "Succeed" << std::endl; } . "; g_buffer[in] = ProductID; in = (in+1)%SIZE_OF_BUFFER; std::cerr << "Succeed" << std::endl; . "; ConsumeID = g_buffer[out]; out = (out+1)%SIZE_OF_BUFFER; std::cerr << "Succeed" << std::endl; . "; std::cerr << "Succeed" << std::endl; } 开S←S-1 将调用P(s)将调用P(s)过程的进程置为S<0 返回 否 是 开S←S+1 将调用V(s)找一个等待s信S<0 返回 否 是
图 4-6 模拟处理器指计算并输出下述各种算法在不同内存容量下的命中率。 A. FIFO先进先出的算法 B. LRU最近最少使用算法 C.LFU最少访问页面算法 三、实验要求 1、需写出设计说明; 2、设计实现代码及说明 3、运行结果; 四、主要实验步骤 1、最少使用(LFU)页面置换算法设计说明 该算法主要是将最近时期页面使用最少的页面作为淘汰页。这里通过设立count[32]这个计数数组记录32页的调用次数,通过比较来确定要调出的页面。但如果没产生缺页就只需对所调页数对应的count值加1即可。 2、最近最久未使用(LRU)页面置换算法设计说明: 这个算法同FCFS算法的不同之处在于,每产生一条随机指令,如果和4个内存块中的某一个页数相同的话,就要对这4个内存块中的页数重新排序,将每次要置换出去的页数放在mem_volume[3]中,这样,在每次产生缺页的时候,都先将所缺页数写入到该内存块,然后再排序,将其放到mem_volume[0]中去。 3、先进先出(FIFO)算法设计说明: 按照所要求的产生随机指令序列,存放在order[320]这个数组中。 通过循环产生这些随机指令,每产生一条都要进行下列判断:是否和内存中即mem