文档库 最新最全的文档下载
当前位置:文档库 › 湖南大学操作系统实验报告-(3)

湖南大学操作系统实验报告-(3)

湖南大学操作系统实验报告-(3)
湖南大学操作系统实验报告-(3)

实验三内存页面置换算法的设计

一、实习内容

实现最近最久未使用(LRU)置换算法

二、实习目的

LINUX 中,为了提高内存利用率,提供了内外存进程对换机制,内存空间的分配和回收均以页为单位进行,一个进程只需将其一部分(段或页)调入内存便可运行,还支持请求调页的存储管理方式。

当进程在运行中需要访问某部分程序和数据时,发现其所在页面不在内存,就立即提出请求(向CPU 发出缺中断),由系统将其所需页面调入内存。这种页面调入方式叫请求调页。

当CPU 接收到缺页中断信号,中断处理程序先保存现场,分析中断原因,转入缺页中断处理程序。该程序通过查找页表,得到该页所在外存的物理块号。如果此时内存未满,能容纳新页,则启动磁盘I/O 将所缺之页调入内存,然后修改页表。如果内存已满,则须按某种置换算法从内存中选出一页准备换出,是否重新写盘由页表的修改位决定,然后将缺页调入,修改页表。利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。

本实习要求学生通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的技术特点,掌握请求页式存储管理的页面置换算法。

三、实习题目

实现最近最久未使用(LRU)置换算法

[提示]:

(1) 最近最久未使用(LRU)置换算法原理就是:当需要淘汰某页面时,选择当前一段时间内最久未使用过的页先淘汰,即淘汰距当前最远的上次使用的页。

例如:分配给该进程的页块数为3,一个20位长的页面访问序列

为:12560,36536,56042,70435,则缺页次数和缺页率按表3-1 给出:

缺页次数: 15

缺页率: 15/20=0.75

(2) 假定分配给该进程的页块数为3,页面访问序列长度为20。本实验可以采用数组

结构实现,首先随机产生页面序列,当发生请求调页时,若内存已满,则需要利用LRU算法,将当前一段时间内最久未使用过的页替换出去。模拟程序的算法如图3-2。

四、源程序及程序中使用的数据结构、符号说明

#include

#include

#include

#include

#include

#include

#include

using namespace std;

void showState(int page[][20],int visit[][2],int t);

int pick(int page[][20],int visit[][2],int time,int useTime[]); int min(int a,int b,int c);

int main(){

srand(time(NULL));

int visit[20][2];

memset(visit,-1,sizeof(visit));

for(int i=0;i<20;i++)

visit[i][0]=rand()%8;

cout<<"20位长的随机访问序列为:"<

for(int i=0;i<20;i++)

cout<

cout<

int page[3][20];

memset(page,-1,sizeof(page));

int useTime[3];

memset(useTime,0,sizeof(useTime));

for(int t=0;t<20;t++){

int p=pick(page,visit,t,useTime);//选中的页

if(p<0){//命中第p+3页,设置此页命中,帧内容不变visit[t][1]=1;

for(int x=0;x<3;x++)

page[x][t]=page[x][t-1];

useTime[p+3]=t;

}

else{// 此页不命中,帧内容替换

visit[t][1]=0;

if(t==0){

page[p][t]=visit[t][0];

}

else{

for(int y=0;y<3;y++)

page[y][t]=page[y][t-1];

page[p][t]=visit[t][0];

}

useTime[p]=t;

}

showState(page,visit,t);

}

int miss=0;

for(int i=0;i<20;i++){

if (visit[i][1]==0) miss++;

}

double per=1-(double)miss/20;

int peri=per*100;

cout<<"共miss"<

return 0;

}

int pick(int page[][20],int visit[][2],int time,int useTime[]){

//如果命中了,就返回下标-3,比如如果0帧命中,返回-3

//如果不命中,选择一个最久没有访问到的帧,返回帧下标

cout<<"输出usetime: ";

cout<

for(int i=0;i<3;i++){ //先遍历一遍,看有没有命中的

if(page[i][time-1]==visit[time][0]){

cout<<"time"<

return i-3;

}

}

for(int i=0;i<3;i++){//不存在命中,则从头开始选,先选帧空的情况if(page[i][time-1]==-1){

cout<<"time"<

return i;

}

}

//都没有,就选最久没用过的

int m=min(useTime[0],useTime[1],useTime[2]);

cout<<"time"<

return m;

}

void showState(int page[][20],int visit[][2],int t){

cout<

cout<<"时间";

for(int i=0;i<20;i++)

cout<

cout<

cout<<"序列";

for(int i=0;i<20;i++){

cout<

}

cout<

cout<<"零帧";

for(int i=0;i<=t;i++){

cout<

}

cout<

cout<<"一帧";

for(int i=0;i<=t;i++){

cout<

}

cout<

cout<<"二帧";

for(int i=0;i<=t;i++){

cout<

}

cout<

cout<<"命中";

string str1="√";

string str2="×";

for(int i=0;i<=t;i++){

string x=(visit[i][1]==1)? str1:str2;

cout<

}

cout<

}

int min(int a,int b,int c)

{

if(a<=b&a<=c) return 0;

if(b

if(c

}

代码详细说明:

在本例中,我设定了页面调度页块数为3,要访问的页面序列长度为20.从随机数获取20个访问的页面后进行页面调度算法,并将每次调度完的结果打印

到控制台面板上,页面调度的具体算法为:维护一个useTime数组,其中存储着三个页块的上次使用时间,在每次向页块中调度内容/页块或页面访问命中页块时,更新被访问的页块的使用时间,如果页面访问不命中页块时,则选择useTime数组中最小的那一块,即最久没使用的页块,置换其中的内容。

下面是针对代码的说明:

srand(time(NULL));

int visit[20][2];

memset(visit,-1,sizeof(visit));

for(int i=0;i<20;i++)

visit[i][0]=rand()%8;

int page[3][20];

memset(page,-1,sizeof(page));

int useTime[3];

memset(useTime,0,sizeof(useTime));

以上几行代码的作用为生成一个随机的20位的页面访问序列,由于对8作了取余操作,所以生成的访问序列下标为0-7,并存储在visit数组的第0位中,且在visit数组的第1位中赋值-1。

同时生成page数组以实现对3个页块的随时间变化的追踪,维护useTime 数组以保存3个页块的上次使用时间。

下面介绍代码的调度实现部分

int pick(int page[][20],int visit[][2],int time,int useTime[]){

//如果命中了,就返回下标-3,比如如果0帧命中,返回-3

//如果不命中,选择一个最久没有访问到的帧,返回帧下标

cout<<"输出usetime: ";

cout<

for(int i=0;i<3;i++){ //先遍历一遍,看有没有命中的

if(page[i][time-1]==visit[time][0]){

cout<<"time"<

return i-3;

}

}

for(int i=0;i<3;i++){//不存在命中,则从头开始选,先选帧空的情况if(page[i][time-1]==-1){

cout<<"time"<

return i;

}

}

//都没有,就选最久没用过的

int m=min(useTime[0],useTime[1],useTime[2]);

cout<<"time"<

return m;

}

Pick函数传入的参数为page数组,visit数组,当前时间t和useTime数组,它会首先检查下一时刻的访问内容visit[t][0]是否出现在上一时刻的三个页块中,如果出现,则返回值为【块数-3】,以区别于调度的返回值。

如果下一时刻的访问没有出现在上一时刻的页块中,则对于下一时刻的访问,要首先判断是否有空块,即页块内容为-1的情况,如果有页块为空,则选择页号最小的页块,将要访问的内容置入该块。

如果以上情况均没有出现,则选择useTime中最小的那一块,替换该块中的内容。

该函数在main函数中的调用为:

for(int t=0;t<20;t++){

int p=pick(page,visit,t,useTime);//选中的页

if(p<0){//命中第p+3页,设置此页命中,帧内容不变

visit[t][1]=1;

for(int x=0;x<3;x++)

page[x][t]=page[x][t-1];

useTime[p+3]=t;

}

else{// 此页不命中,帧内容替换

visit[t][1]=0;

if(t==0){

page[p][t]=visit[t][0];

}

else{

for(int y=0;y<3;y++)

page[y][t]=page[y][t-1];

page[p][t]=visit[t][0];

}

useTime[p]=t;

}

showState(page,visit,t);

}

分别对于页面命中的情况和不命中的情况设置对应的输出,并更新页面的useTime数组,并在最后调用showState(page,visit,t);函数来展示实时的页面内容showState(page,visit,t);函数的定义如下:

void showState(int page[][20],int visit[][2],int t){

cout<

cout<<"时间";

for(int i=0;i<20;i++)

cout<

cout<

cout<<"序列";

for(int i=0;i<20;i++){

cout<

}

cout<

cout<<"零帧";

for(int i=0;i<=t;i++){

cout<

}

cout<

cout<<"一帧";

for(int i=0;i<=t;i++){

cout<

}

cout<

cout<<"二帧";

for(int i=0;i<=t;i++){

cout<

}

cout<

cout<<"命中";

string str1="√";

string str2="×";

for(int i=0;i<=t;i++){

string x=(visit[i][1]==1)? str1:str2;

cout<

}

cout<

}

由于展示部分的代码较为简单,只是对于数组的输入输出,就不做赘述了。

最后,遍历一次page数组,求出总的缺页次数和缺页率。

int miss=0;

for(int i=0;i<20;i++){

if (visit[i][1]==0) miss++;

}

double per=1-(double)miss/20;

int peri=per*100;

cout<<"共miss"<

以上为LRU调度算法的全部内容。

五、打印程序运行时的初值和运行结果

运行环境:DevC++ 5.11

控制台运行结果:

由于内容较多,我将截取最后一帧作详细说明:

在本例中,随机生成的访问序列为(1,1,4,0,6,0,4,5,3,6,2,0,7,0,2,0,0,4,0,2)

在0时刻,三个页块均空,所以此时调度页面1进入第一个空块,此次访问不命中。在1时刻,由于要访问的页面1命中第一块中的内容,所以此次访问命中,在2时刻,此次要访问的页面4不命中,所以选择调度进入第二个空块中,在3时刻,此次要访问的页面0不命中,所以选择调度进入第三个空块中,此时已经没有空块可以调度,所以后续的调度只会根据useTime数组的值来完成调度。接下来的每次调度都是根据当前页判断,如果命中则不做更新,如果不命中,则选择一块最久没有使用的(即useTime数组内容最小的块)替换其中内容。

最后根据page数组的内容求得其总miss次数为11次,命中率为44%。

六实验心得

这是本学期的最后一次操作系统实验,我选择的这个实验应该来说还是较为简单的,因为LRU算法的复杂性不是很高,在编写代码的过程中也出现了一些问题,但是经过自己的思考也都能顺利的解决。

马上要期末考试了,自己应该在深入理解几次试验内容的基础上加以深入的复习,争取期末考个好成绩。

湖南大学2013年操作系统期末试卷

答案仅为参考 1.Which of the following scheduling alogrithms could result in starvation and why? (1)First-come,first-served (2)Shortest job first (3)Round robin (4)Priority【来自课后习题】 答:最短工作优先调度和优先级调度算法会引起饥饿。优先级调度算法会使某个低优先级进程无穷等待CPU,此时,可能发生两种情况,要么进程最终能进行,要么系统最终崩溃并失去所有未完成低优先级进程。 解决方式——老化,老化是一种技术,以逐渐增加在系统中等待很长时间的进程的优先级。(最短工作优先调度会使工作长度最大的进入无限等待CPU) 2.Can a resource allocation graph (资源分配图) have cycle without deadlock(死锁)? If so,state why and draw a sample graph(画一个死锁点的图); if no,state why not? 答:有死锁,死锁部分为P2-R4-P5-R3。 3.What is the cause of thrashing(颠簸)? How dose the system detect(检测)thrashing? Once it detects thrashing,what can the system do to eliminate(消除)this problem?【来自课后习题】 答:分配的页数少于进程所需的最小页数时发生颠簸,并迫使它不断地页错误。该系统可通过对比多道程序的程度来估计CPU利用率的程度,以此来检测颠簸。降低多道程序的程度可以消除颠簸。 4.某Demand Paging system,拥有逻辑空间64页,每页2KB,拥有物理空间1MB。 (1)写出逻辑地址的格式。 解:11位页内地址,5位页号 (2)若不考虑访问权限等,进程的页表最多有多少项?每项至少有多少位? 解:因为有32个逻辑页面,所以页表有32项。因为有1M/2K= 2的9次方物理块,所以每个页表项至少有9位 (3)如果物理空间减少一半,页表结构应相应作怎样的改变? 解:32项,每项至少需要8位

湖南大学嵌入式系统试卷.pdf

一填空 (每空1 分,共 20 分) 1.嵌入式微处理器一般可分为嵌入式微控制器、嵌入式数字信号处理器、嵌入式微处理器和嵌入式片上系统四种类型。 2.嵌入式系统体系结构一般具有冯洛依曼和哈佛两种基本形式。 3.嵌入式存储系统一般由高速缓存、内存和外存组成。 4.嵌入式存储系统具有大端格式和小端格式两种数据存放格式。 5从编程的角度看,ARM微处理器的一般有ARM 和THUMB 两种工作状态。 6.嵌入式软件的开发一般分为生成、调试和固化运行三个步骤。 7.嵌入式LINUX的内核有五个组成部分,它们是进程调度、内存管理、 虚拟文件系统、网络接口和进程通信。 8.操作系统是联接硬件与应用程序的系统程序,其基本功能有: I/O资源管理。 9.从嵌入式操作系统特点可以将嵌入式操作系统分为实时操作系统和分时操作系统,其中实 硬实时系统和软实时系统。 1.嵌入式系统是以应用中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功 能、可靠性、成本、体积、功耗严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四部分组成. 2.在嵌入式系统设计过程中,需求分析包括:功能性需求分析和非功能性需求分析。 3.总线按照传输关系分类可分为:主从结构和对等结构。 4.RS-232C的帧格式由四部分组成,包括:起始位、数据位、奇偶校验位和停止位。 5.I/O接口电路数据传送方式有:查询、中断、DMA、I/O通道和I/O处理机方式。 6.实时系统的关键问题是保证系统的实时性;实时操作系统就是指具有实时性、能支持实 时系统工作的操作系统。 7.实时操作系统的评价指标有:任务调度算法、上下文切换时间、确定性、最小内存开销 和最大中断禁止时间。 8.Bootloader主要功能是系统初始化、加载和运行内核程序。 9.进程与线程:进程是①具有独立功能的程序关于某个数据集合上的一次运行活动,是系 统进行资源分配和调度的独立单位。②可与其他程序并发执行的程序,在一个数据集合上的运行的过程。它是系统进行资源分配和调度的独立单位 10.嵌入式系统五层结构:硬件层、引导层、内核层、uI层(userinterface)和应用层 11.目前使用的嵌入式操作系统主要有哪些:Windows CE/Windows Mobile、VxWork、Linux、 uCos、Symbian、QNX 12.ARM微处理器有7种工作模式,它们分为两类非特权模式和特权模式,其中用户模 式属非特权模式。 二简答 (每题5分,共 30 分) 1.简要叙述嵌入式系统的定义。 嵌入式系统是以应用为中心,以计算机技术为基础,并且在软、硬件方面可进行裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成。 2. 什么是嵌入式实时操作系统?简单叙述其特点。 实时操作系统就是“在给定的时间内提供某种程度的服务,如果在规定的时间内没有得到

操作系统实验报告三

课程实验报告 课程名称姓名实验名称实验目的及要求 实验3进程并发与同步 1、加深对进程概念的理解,区分进程并发执行与串行执行; 2、掌握进程并发执行的原理,理解进程并发执行的特点; 3、了解fork()系统调用的返回值,掌握用fork()创建进程的方法;熟悉wait、exit等系统调用; 4、能利用相应的系统调用实现进程树与进程间的同 步。 实 验操作系统:linux Un bu ntu 11.10 环 境实验工具:Vmware 实验内容 1、编写一C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father ”,儿子进 程执行时屏幕显示“ I am son ",女儿进程执行时屏幕显示“ I am daughter ”。 要求多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。要求有运行结果截图与结果分析 2、连续4个fork()的进程家族树,family1-1.c 程序清单如下: #in clude main () { fork(); fork(); fork(); fork(); printf( A\n ”); } 请根据程序运行结果,画出进程家族树,并分析原 因。

3、 修改程序1,在父、子进程中分别使用 wait 、exit 等系统调用“实现”其同 步推进,父进程必须等待儿子进程与女儿进程结束, 才可以输出消息。 写出相应的同 步控制,并分析运行结果。 4、 创建一个子进程,并给它加载程序,其功能是调用键盘命令“ ls -I ”,已知 该键盘命令的路径与文件名为: /bin/ls 。父进程创建子进程, 并加载./child2 程序。 写出相应的程序代码并分析程序运行结果。 1、编写一 C 语言程序,实现在程序运行时通过系统调用 fork()创建两个子进 程,使父、子三进程并发执行,父亲进程执行时屏幕显示“ I am father ”, 儿子进程执行时屏幕显示“ I am son ”,女儿进程执行时屏幕显示“ I am daughter "。并且反复的测试,观察每一次的执行的顺序有什么不同 2、修改程序1,在父、子进程中分别使用 wait 、exit 等系统调用“实现”其同 步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。 4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ ls -I ”,已知 该键盘命令的路径与文件名为: /bin/ls 。父进程创建子进程, 并加载./child2 程序。 法 描 述 及 实 验 步 骤 调 试过 程及实 验结果

湖南大学操作系统期末考试卷2014

1. 什么是多道程序技术,它带来了什么好处? 答:多道程序技术即是指在内存中存放多道作业,运行结束或出错,自动调度内存中另一道作业运行。多道程序主要优点如下: (1)资源利用率高。由于内存中装入了多道程序,使它们共享资源,保持系统资源处于忙碌状态,从而使各种资源得以充分利用。 (2)系统吞吐量大。由于CPU和其它系统资源保持“忙碌”状态,而且仅当作业完成或运行不下去时才切换,系统开销小,所以吞吐量大。 2. 系统调用是OS与用户程序的接口,库函数也是OS与用户程序的接口,这句话对吗?为什么? 答:不正确,系统调用可以看成是用户在程序一级请求OS为之服务的一种手段。而库函数则是在程序设计语言中,将一些常用的功能模块编写成函数,放在函数库中供公共选用。函数库的使用与系统的资源分配并无关系,仍属用户程序而非OS程序,其功能的实现并不由OS完成,且运行时仍在用户状态而非系统状态。 3. Which of the following components of program state are shared across threads in a multithreaded process? a. Register values b. Heap memory c. Global variables d. Stack memory 答:b、c 此处要简单说明原因 4. 下面哪种调度算法会导致饥饿?并说明原因。a. 先到先服务调 度(FCFS) b. 最短作业优先调度(SJF) c. 轮转调度(RR) d. 优先级调度(Priority) 答:b(长作业的可能饥饿)、d(低优先级的可能饥饿) 5. 有结构文件可分为哪几类,其特点是什么? 答:有结构文件可分为以下三类,分别是: (1)顺序文件。它是指由一系列记录,按某种顺序排列所形成的文件。

操作系统实验报告三

课程实验报告

3、修改程序1,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。写出相应的同步控制,并分析运行结果。 4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ls -l”,已知该键盘命令的路径与文件名为:/bin/ls。父进程创建子进程,并加载./child2程序。写出相应的程序代码并分析程序运行结果。 算法描述及实验步骤 1、编写一C语言程序,实现在程序运行时通过系统调用fork( )创建两个子进 程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”, 儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。并且反复的测试,观察每一次的执行的顺序有什么不同 2、修改程序1,在父、子进程中分别使用wait、exit等系统调用“实现”其同 步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。 4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ls -l”,已知该键盘命令的路径与文件名为:/bin/ls。父进程创建子进程,并加载./child2程序。 调试过程及实验结果

总结 1、实现在程序运行时通过系统调用fork( )创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。这一点需要注意。返回结果时,由于每一次的不确定性,所以要想得到比较具有说服性的,就必须经过多次的测试。 2、连续4个fork()的进程家族树在进行实验的时候可能会出现进程输出信息一直一样的情况,需要多次执行输出才有可能会看到输出结果不一样的情况

操作系统实验报告心得体会

操作系统实验报告心得体会 每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。但是每完成一个任务我都兴奋不已。一开始任务是任务,到后面任务就成了自己的作品了。总体而言我的课设算是达到了老师的基本要求。总结一下有以下体会。 1、网络真的很强大,用在学习上将是一个非常高效的助手。几乎所有的资料都能够在网上找到。从linux虚拟机的安装,到linux的各种基本命令操作,再到gtk的图形函数,最后到文件系统的详细解析。这些都能在网上找到。也因为这样,整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。当然网上的东西很乱很杂,自己要能够学会筛选。 不能决定对或错的,有个很简单的方法就是去尝试。就拿第二个实验来说,编译内核有很多项小操作,这些小操作错了一项就可能会导致编译的失败,而这又是非常要花时间的,我用的虚拟机,编译一次接近3小时。所以要非常的谨慎,尽量少出差错,节省时间。多找个几个参照资料,相互比较,

慢慢研究,最后才能事半功倍。 2、同学间的讨论,这是很重要的。老师毕竟比较忙。对于课程设计最大的讨论伴侣应该是同学了。能和学长学姐讨论当然再好不过了,没有这个机会的话,和自己班上同学讨论也是能够受益匪浅的。大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。 3、敢于攻坚,越是难的问题,越是要有挑战的心理。这样就能够达到废寝忘食的境界。当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。 4、最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。比如当时我遇到我以前从未遇到的段错误的问题,让我都不知道从何下手。在经过大量的资料查阅之后,我对段错误有了一定的了解,并且能够用相应的办法来解决。 在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 1)访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址 2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域

操作系统课后习题答案

3.1论述长期、中期、短期调度之间的区别。 答:短期调度:在内存作业中选择准备执行的作业,并未他们分配CPU。 中期调度:被用于分时系统,一个交换方案的实施,将部分运行程序移出内存,之后,从中断处继续执行。 长期调度:确定哪些作业调入内存以执行。 区别:它们区别在于执行频率。短期调度必须经常调用一个新进程,由于在系统中,长期调度处理移动的作业时,并不频繁被调用,可能在进程离开系统时才被唤起。 3.2描述内核在两个进程间进行上下文切换的过程。 答:进程关联是由进程的PCB来表示的,它包括CPU寄存器的值和内存管理信息等。当发生上下文切换时,内核会将旧进程的关联状态保存在其PCB中,然后装入经调度要执行的新进程的已保存的关联状态。上下文切换还必须执行一些确切体系结构的操作,包括刷新数据和指令缓存。 3.4使用图3.24所示的程序,说明LINE A可能输出什么。 答:输出:PARENT:value=5; 父进程中value初始值为5,,value+=15发生在子进程,输出发生在父进程中,故输出value 的值为5。 3.5下面设计的优点和缺点分别是什么?系统层次和用户层次都要考虑。 a.同步和异步通信 b.自动和显式缓冲 c.复制传送和引用传送 d.固定大小和可变大小信息 答:a.同步和异步通信:同步通信的影响是它允许发送者和接收者之间有一个集合点。缺点是阻塞发送时,不需要集合点,而消息不能异步传递。因此,消息传递系统,往往提供两种形式的同步。 b.自动和显式缓冲:自动缓冲提供了一个无限长度的队列,从而保证了发送者在复制消息时不会遇到阻塞,如何提供自动缓存的规范,一个方案也许能保存足够大的内存,但许多内存被浪费缓存明确指定缓冲区的大小。在这种状况下,发送者不能在等待可用空间队列中被阻塞。然而,缓冲明确的内存不太可能被浪费。 c.复制发送和引用发送:复制发送不允许接收者改变参数的状态,引用发送是允许的。引用发送允许的优点之一是它允许程序员写一个分布式版本的一个集中的应用程序。 d.固定大小和可变大小信息:一个拥有具体规模的缓冲可容纳及已知数量的信息缓冲能容纳的可变信息数量是未知的。信息从发送者的地址空间被复制至接受进程的地址空间。更大的信息可使用共享内存传递信息。 4.1举两个多线程程序设计的例子,其中多线程的性能比单线程的性能差。 答:a.任何形式的顺序程序对线程来说都不是一个好的形式。例如一个计算个人报酬的程序。 b.一个“空壳”程序,如C-shell和korn shell。这种程序必须密切检测其本身的工作空间。如打开的文件、环境变量和当前工作目录。

操作系统实验报告 实验三

昆明理工大学信息工程与自动化学院学生实验报告 (2012 —2013 学年第二学期) 课程名称:操作系统开课实验室:信自楼445 2013 年 5 月 16 日 一、实验要求 对给定的一个页面走向序列,请分别用先进先出算法和二次机会算法,计算淘汰页面的顺序、缺页次数和缺页率,具体的页面走向可参考教材例题或习题。 二、实验目的 存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。通过本次实验,要求学生通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解,通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。 三、实验原理及基本技术路线图(方框原理图) 用C或C++语言模拟实现请求式分页管理。要求实现:页表的数据结构、分页式内存空间的分配及回收(建议采用位图法)、地址重定位、页面置换算法(从FIFO,LRU,NRU中任选一种)。 提示:可先用动态申请的方式申请一大块空间,然后假设该空间为内存区域,对该空间进行

流程图:

数据结构定义: 我提供定义了两个类。第一个类就是页面类,在这类里面包括一些重要的数据成员。

有页号(page_no),页框号(frame_no),页面是否在内存的标志(flag(1表示在内存,0表示不在内存)),访问次数(times)。另一个类是进程控制块类PCB。类的数据成员有id(进程编号),name(进程名),size(进程大小),*p(页类指针)。在本类中,有一些成员函数:构造函数(用来初始化本类的所有数据),displayPCB(输出函数),convert(地址映射函数),allocation(分配函数),restore(回收函数)。另外还有一些类外的函数:initMemorySpace(初始化内存空间的函数),displayMemorySpace(输出内存空间的状态1(表示占用)0(表示空))。 四、所用仪器、材料(设备名称、型号、规格等)。 计算机一台 五、实验方法、步骤 程序代码: #include #include #include using namespace std; const int frame_size=1024;//页框长度,固定为 1k const int page_size=1024;//页面长度,固定为 1k const int memory_size=102400;//内存容量,固定为 100k const int frame_number=memory_size/frame_size;// 100k/1k=100 frames int *memory;//指针变量,用来存内存的状态1还是0。 void initMemorySpace()//初始化内存空间 { int i,ran,times; time_t t;//定义time_t对象 t t=time(0); srand(t);//随机改变每秒 times=0;//变量times初始化为0,变量的功能是检查内存空间是否有一半空了没。 memory=new int[frame_number];//申请内存空间,有frame_number 这么大的空间 for(i=0;i

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 2014年3 月29 日

一、实验目的 ◆熟悉hit-oslab实验环境; ◆建立对操作系统引导过程的深入认识; ◆掌握操作系统的基本开发过程; ◆能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。 二、实验容 1. 阅读《Linux核完全注释》的第6章引导启动程序,对计算机和Linux 0.11的引导过程进行初步的了解。 2. 按照下面的要求改写0.11的引导程序bootsect.s。 3. 有兴趣同学可以做做进入保护模式前的设置程序setup.s。 4. 修改build.c,以便可以使用make BootImage命令 5. 改写bootsect.s主要完成如下功能: bootsect.s能在屏幕上打印一段提示信息XXX is booting...,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等。 6. 改写setup.s主要完成如下功能: bootsect.s能完成setup.s的载入,并跳转到setup.s开始地址执行。而setup.s 向屏幕输出一行"Now we are in SETUP"。setup.s能获取至少一个基本的硬件参数(如存参数、显卡参数、硬盘参数等),将其存放在存的特定地址,并输出到屏幕上。setup.s不再加载Linux核,保持上述信息显示在屏幕上即可。 三、实验环境

本实验使用的系统是windows系统或者是Linux系统,需要的材料是osexp。 四、实验步骤 1. 修改bootsect.s中的提示信息及相关代码; 到osexp\Linux-0.11\boot目录下会看到图1所示的三个文件夹,使用UtraEdit 打开该文件。将文档中的98行的mov cx,#24修改为mov cx,#80。同时修改文档中的第246行为图2所示的情形。 图1图2 图3 2. 在目录linux-0.11\boot下,分别用命令as86 -0 -a -o bootsect.obootsect.s和 ld86 -0 -s -obootsectbootsect.o编译和bootsect.s,生成bootsect文件; 在\osexp目录下点击MinGW32.bat依此输入下面的命令: cd linux-0.11 cd boot as86 -0 -a -o bootsect.obootsect.s ld86 -0 -s -o bootsectbootsect.o

湖南大学计算机基础试题题库及答案

大学计算机基础》试题题库及答案 一、单选题练习 1.完整的计算机系统由(C)组成。 A.运算器、控制器、存储器、输入设备和输出设备 B.主机和外部设备 C.硬件系统和软件系统 D.主机箱、显示器、键盘、鼠标、打印机 2.以下软件中,(D)不是操作系统软件。A.WindowsxpB.unixC.linuxD.microsoftoffice 3.用一个字节最多能编出(D)不同的码。 A.8个 B.16个 C.128个 D.256个 4.任何程序都必须加载到(C)中才能被CPU执行。 A.磁盘 B.硬盘 C.内存 D.外存 5.下列设备中,属于输出设备的是(A)。 A.显示器B.键盘C.鼠标D.手字板 6.计算机信息计量单位中的K代表(B)。 A.102 B.210 C.103 D.28 7.RAM代表的是(C)。 A.只读存储器 B.高速缓存器 C.随机存储器 D.软盘存储器 8.组成计算机的CPU的两大部件是(A)。 A.运算器和控制器B.控制器和寄存器C.运算器和内存D.控制器和内存 9.在描述信息传输中bps表示的是(D)。 A.每秒传输的字节数B.每秒传输的指令数 C.每秒传输的字数D.每秒传输的位数 10.微型计算机的内存容量主要指(A)的容量。 A.RAM B.ROM C.CMOS D.Cache 11.十进制数27对应的二进制数为(D)。 A.1011B.1100C.10111D.11011 12.Windows的目录结构采用的是(A)。 A.树形结构B.线形结构C.层次结构D.网状结构 13.将回收站中的文件还原时,被还原的文件将回到(D)。 A.桌面上B.“我的文档”中C.内存中D.被删除的位置 14.在Windows的窗口菜单中,若某命令项后面有向右的黑三角,则表示该命令项(A)。A.有下级子菜单B.单击鼠标可直接执行 C.双击鼠标可直接执行D.右击鼠标可直接执行 15.计算机的三类总线中,不包括(C)。 A.控制总线B.地址总线C.传输总线D.数据总线 16.操作系统按其功能关系分为系统层、管理层和(D)三个层次。 A.数据层B.逻辑层C.用户层D.应用层 17.汉字的拼音输入码属于汉字的(A)。 A.外码B.内码C.ASCII码D.标准码 18.Windows的剪贴板是用于临时存放信息的(C)。 A.一个窗口B.一个文件夹C.一块内存区间D.一块磁盘区间

操作系统实验报告

操作系统实验报告 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

许昌学院 《操作系统》实验报告书学号: 姓名:闫金科 班级:14物联网工程 成绩: 2016年02月

实验一Linux的安装与配置 一、实验目的 1.熟悉Linux系统的基本概念,比如Linux发行版、宏内核、微内核等。 2.掌握Linux系统的安装和配置过程,初步掌握Linux系统的启动和退出方 法。 3.熟悉Linux系统的文件系统结构,了解Linux常用文件夹的作用。 二、实验内容 1.从网络上下载VMware软件和两个不同Linux发行版镜像文件。 2.安装VMware虚拟机软件。 3.在VMware中利用第一个镜像文件完成第一个Linux的安装,期间完成网络 信息、用户信息、文件系统和硬盘分区等配置。 4.在VMware中利用第二个镜像文件完成第二个Linux的安装,并通过LILO或 者GRUB解决两个操作系统选择启动的问题。 5.启动Linux系统,打开文件浏览器查看Linux系统的文件结构,并列举出 Linux常用目录的作用。 三、实验过程及结果 1、启动VMware,点击新建Linux虚拟机,如图所示: 2、点击下一步,选择经典型,点击下一步在选择客户机页面选择 Linux,版本选择RedHatEnterpriseLinux5,如图所示: 3、点击下一步创建虚拟机名称以及所要安装的位置,如图所示: 4、点击下一步,磁盘容量填一个合适大小,此处选择默认值大小 10GB,如图所示: 5、点击完成,点击编辑虚拟机设置,选择硬件选项中的CD-ROM (IDE...)选项,在右侧连接中选择“使用ISO镜像(I)”选项,点 击“浏览”,找到Linux的镜像文件,如图所示:

湖南大学操作系统作业 (1)

操作系统第一次作业 第一章 1.1在多道程序和分时环境中,多个用户同时共享一个系统,这种情况导致多种安全问题。a. 列出此类的问题 b.在一个分时系统中,能否确保像在与用特殊用途系统中一样的安全度?并解释之。 (1)可能导致的安全问题有:由于多个用户同时使用资源,使得系统无法像对单个用户分配资源一样用合理的预算来分配资源,会导致资源分配上的问题;另一方面,如果某A用户熟练地掌握计算机系统原理,他可能通过底层反汇编代码来获取其他用户的信息,如账户、密码等信息。 (2)不可以 特殊用途系统(在本书19、20章有介绍)自己查阅了课本上的相关内容后发现,特殊用途系统包括实时系统和多媒体系统,实时系统的要求是不仅仅要保证计算结果的正确性,而且要将计算结果维持在特定的截止时间内,在特定截止时间外的结果,即使正确,也无任何意义,这对攻击系统者提出了更高的要求,而一般的分时系统并没有对计算结果有任何时限,导致攻击者可以任意修改代码结构而不至于被系统识破,上述的差异性使得实时系统无法实现特殊用途系统一样的安全性。 看了英文版课本后发现这个题目的翻译有误,原文为Can we ensure the same degree of security in a time-shared machine as in a dedicated machine? 翻译过来是分时机器能和专用机器保证相同的安全度吗,显然是不能的,比如军工方向专用的机器和一些保密的机器,不允许接入互联网,不允许插入U 盘,烧录文件必须通过软盘刻录,这样就能保证最高的安全度,这也是我们日常使用的机器所不能比拟的。 由于题目翻译与英文原文有偏差,所以以下我的答案均基于英文原版给出 1.10 What is the purpose of interrupts? What are thedifferences between a trap and an interrupt? Can traps begenerated intentionally by a user program? If so, for whatpurpose? (1)中断的目的:更好地调度CPU,因为如果没有中断技术,访问CPU内部的速度和访问硬件速度不匹配,短板效应会导致CPU和硬件同时工作的速度取决于硬件的速度,使得CPU长时间处于等待状态,导致其效率低下。 (2)自陷和中断的区别:中断主要由硬件如IO、时钟产生,是不可预期的。 而自陷可由软件主动产生,程序员可以通过int指令来可预期地产生自陷。(3)自陷是可以主动产生的,如汇编指令int 0x80,设置自陷的目的有多种,可能是等待IO响应,可能是基于用户态和管态的切换……等等 1.13 Give two reasons why caches are useful.What problemsdo they solve? What problems do they cause? If a cache canbe made as large as the device for which it is

计算机操作系统 实验报告

操作系统实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 成绩: 2014年 1 月 1 日

实验一线程的状态和转换(5分) 1 实验目的和要求 目的:熟悉线程的状态及其转换,理解线程状态转换与线程调度的关系。 要求: (1)跟踪调试EOS线程在各种状态间的转换过程,分析EOS中线程状态及其转换的相关源代码; (2)修改EOS的源代码,为线程增加挂起状态。 2 完成的实验内容 2.1 EOS线程状态转换过程的跟踪与源代码分析 (分析EOS中线程状态及其转换的核心源代码,说明EOS定义的线程状态以及状态转换的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等) 1.EOS 准备了一个控制台命令“loop ”,这个命令的命令函数是 ke/sysproc.c 文件中的ConsoleCmdLoop 函数(第797行,在此函数中使用 LoopThreadFunction 函数(第755 行)创建了一个优先级为 8 的线程(后面简称为“loop 线程”),该线程会在控制台中不停的(死循环)输出该线程的ID和执行计数,执行计数会不停的增长以表示该线程在不停的运行。loop命令执行的效果可以参见下图: 2. 线程由阻塞状态进入就绪状态 (1)在虚拟机窗口中按下一次空格键。 (2)此时EOS会在PspUnwaitThread函数中的断点处中断。在“调试”菜单中选择“快速监视”,在快速监视对话框的表达式编辑框中输入表达式“*Thread”,然后点击“重新计算”按钮,即可查看线程控制块(TCB)中的信息。其中State域的值为3(Waiting),双向链表项StateListEntry的Next和Prev指针的值都不为0,说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中;StartAddr域的值为IopConsoleDispatchThread,说明这个线程就是控制台派遣线程。 (3)关闭快速监视对话框,激活“调用堆栈”窗口。根据当前的调用堆栈,可以看到是由键盘中断服务程序(KdbIsr)进入的。当按下空格键后,就会发生键盘中断,从而触发键盘中断服务程序。在该服务程序的最后中会唤醒控制台派遣线程,将键盘事件派遣到活动的控制台。 (4)在“调用堆栈”窗口中双击PspWakeThread函数对应的堆栈项。可以看到在此函数中连续调用了PspUnwaitThread函数和PspReadyThread函数,从而使处于阻塞状态的控制台派遣线程进入就绪状态。 (5)在“调用堆栈”窗口中双击PspUnwaitThread函数对应的堆栈项,先来看看此函数是如何改变线程状态的。按F10单步调试直到此函数的最后,然后再从快速监视对

Windows操作系统实验三实验报告

Windows操作系统C/C++ 程序实验 姓名:___________________ 学号:___________________ 班级:___________________ 院系:___________________ ______________年_____月_____日

实验三Windows 2000/xp线程同步 一、背景知识 二、实验目的 在本实验中,通过对事件和互斥体对象的了解,来加深对Windows 2000/xp线程同步的理解。 1) 回顾系统进程、线程的有关概念,加深对Windows 2000/xp线程的理解。 2) 了解事件和互斥体对象。 3) 通过分析实验程序,了解管理事件对象的API。 4) 了解在进程中如何使用事件对象。 5) 了解在进程中如何使用互斥体对象。 6) 了解父进程创建子进程的程序设计方法。 三、工具/准备工作 在开始本实验之前,请回顾教科书的相关内容。 您需要做以下准备: 1) 一台运行Windows 2000/xp Professional操作系统的计算机。 2) 计算机中需安装V isual C++ 6.0专业版或企业版。 四、实验内容与步骤 1. 事件对象 清单4-1程序展示了如何在进程间使用事件。父进程启动时,利用CreateEvent() API创建一个命名的、可共享的事件和子进程,然后等待子进程向事件发出信号并终止父进程。在创建时,子进程通过OpenEvent() API打开事件对象,调用SetEvent() API使其转化为已接受信号状态。两个进程在发出信号之后几乎立即终止。 步骤1:登录进入Windows 2000/xp Professional。 步骤2:在“开始”菜单中单击“程序”-“Microsoft V isual Studio 6.0”–“Microsoft V isual C++ 6.0”命令,进入V isual C++窗口。 步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序3-1.cpp。 步骤4:单击“Build”菜单中的“Compile 3-1.cpp”命令,并单击“是”按钮确认。系统

操作系统实验报告

操作系统实验报告 银行家算法 班级:计算机()班 姓名:李君益 学号:(号) 提交日期: 指导老师: 林穗 一、设计题目 加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 二、设计要求

内容: 编制银行家算法通用程序,并检测思考题中所给状态的安全性。 要求: (1)下列状态是否安全?(三个进程共享个同类资源) 进程已分配资源数最大需求数 (状态) (状态) (2)考虑下列系统状态 分配矩阵最大需求矩阵可用资源矩阵 问系统是否安全?若安全就给出所有的安全序列。若进程请求(),可否立即分配? 三、设计分析 一.关于操作系统的死锁 .死锁的产生 计算机系统中有许多独占资源,他们在任一时刻只能被一个进程使用,如磁带机,绘图仪等独占型外围设备,或进程表,临界区等软件资源。两个进程同时向一台打印机输出将导致一片混乱,两个进程同时进入临界区将导致数据库错误乃至程序崩溃。正因为这些原因,所有操作系统都具有授权一个进程独立访问某一辞源的能力。一个进程需要使用独占型资源必须通过以下的次序: ●申请资源 ●使用资源 ●归还资源 若申请施资源不可用,则申请进程进入等待状态。对于不同的独占资源,进程等待的方式是有差别的,如申请打印机资源、临界区资源时,申请失败将一位这阻塞申请进程;而申请打开文件文件资源时,申请失败将返回一个错误码,由申请进程等待一段时间之后重试。只得指出的是,不同的操作系统对于同一种资源采取的等待方式也是有差异的。 在许多应用中,一个进程需要独占访问多个资源,而操作系统允许多个进程并发执行共享系统资源时,此时可能会出现进程永远被阻塞的现象。这种现象称为“死锁”。 2.死锁的定义 一组进程处于死锁状态是指:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的时间,则称一组进程或系统此时发生了死锁。 .死锁的防止 .死锁产生的条件: ●互斥条件

湖大操作系统期中考试试卷试题-答案

1. (20%) 简述进程的概念。画出进程的状态图,并就状态图中可能发生CPU 调度决策的四种情况进行说明。结合进程控制块PCB对内核在两个进程间进行上下文切换过程进行描述。 参考答案:进程,执行中的程序;执行一个程序所需要的资源集的系统抽象;一个程序的运行实例; 进程状态图: CPU调度决策可以如下四种情况下发生: 当一个进程从运行状态切换到等待状态 当一个进程从运行状态切换到就绪状态 当一个进程从等待状态切换到就绪状态 当一个进程终止时。 进程切换:

2. (10%) 简述系统调用(System call)、系统程序(System program)的用途。参考答案:系统调用,允许用户进程请求操作系统提供的服务。由OS内核实现并提供访问接口,由用户程序调用,程序员使用。 系统程序,给用户提供基本的功能,这样用户在解决公共问题的时候不用写自己的程序。提供程序开发和执行的环境,普通操作用户使用。 3. (15%) 线程通常可分为用户级线程和内核级线程,请回答两种线程之间的区别,并就两者之间的关系,对多线程模型的类型及其优缺点进行简要说明。参考答案:用户线程不受内核支持,无需内核管理,使用用户级的线程库完成线程的管理,对用户线程的支持通常处于内核之上,通过一个用户级线程库(thread library)实现。线程库提供了对线程的创建、调度和管理的支持,这无需来自内核的支持。因为内核并不知道用户级线程的存在,所有的线程创建和调度工作都在用户空间完成,而且整个过程不受内核的干涉。 内核线程由操作系统直接支持:内核在内核空间内实现了线程的创建、调度和管理。 常见的多线程模型包括以下三种: 多对一,优点线程管理由线程库在用户空间进行,效率较高,缺点一旦某个线程执行了阻塞,则整个进程也会被阻塞 一对一,允许线程并发的执行并且运行在多处理器系统上,不会导致单一线程阻塞进程的情况,缺点用户线程和内核线程一一对应,开销较大,限制了系统线程的数量。 多对多,多路复用了许多用户级线程到同样数量或更小数量的内核线程上,允许OS创建足够数量的内核线程,且在某个线程发生阻塞时,可调度其他线程执行。 4. (15%) 对于一个多任务的应用软件,分析比较采用多进程实现和多线程实现的优劣,并举例说明。 仅供参考:从资源或系统开销、维护、进程阻塞、崩溃、安全等情况分析。以web浏览器为例(360浏览器从多线程到多进程实现)。 5. (10%) 如下所示程序使用Pthread API实现,请将空白部分补充完整,并说明LINE C和LINE P将会输出的结果。 #include #include int value = 0; void *runner(void *param); /* the thread */ int main{int argc, char *argv[]) { int pid; pthread_t tid; pthread_attr_t attr;

操作系统实验报告

操作系统教程实验报告 专业班级 学号 姓名 指导教师

实验一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中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环:

操作系统实验报告.

学生学号0121210680225 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称操作系统 开课学院计算机科学与技术学院 指导老师姓名刘军 学生姓名李安福 学生专业班级软件sy1201 2014 — 2015 学年第一学期

《操作系统》实验教学大纲 课程编号: 课程名称:操作系统/Operating System 实验总学时数:12学时 适应专业:计算机科学与技术、软件工程 承担实验室:计算机科学与技术学院实验中心 一、实验教学的目的和任务 通过实验掌握Linux系统下常用键盘命令、系统调用、SHELL编程、后台批处理和C程序开发调试手段等基本用法。 二、实验项目及学时分配 序号实验项目名称实验学时实验类型开出要求 01 Linux键盘命令和vi 2 设计必开 02 Linux下C编程 2 设计必开 03 SHELL编程和后台批处理 2 设计必开 04 Linux系统调用(time) 2 设计必开 05 Linux进程控制(fork) 4 设计必开 三、每项实验的内容和要求: 1、Linux键盘命令和vi 要求:掌握Linux系统键盘命令的使用方法。 内容:见教材p4, p9, p40, p49-53, p89, p100 2、Linux下的C编程 要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。 内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。 3、SHELL编程和后台批处理 要求:掌握Linux系统的SHELL编程方法和后台批处理方法。 内容:(1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。 (2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键 盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容, 然后输出到屏幕。 4、Linux系统调用使用方法。

相关文档