计算机操作系统-处理机调度实验报告

计算机操作系统-处理机调度实验报告
计算机操作系统-处理机调度实验报告

中南大学

实验名称:处理机调度

课程名称:计算机操作系统

学生姓名盛希玲

学号 05

学院信息科学与工程学院

专业班级电子信息工程0602 完成时间 2008年10月12日

目录

一实验内容........................... 错误!未定义书签。二实验目的........................... 错误!未定义书签。三实验题目........................... 错误!未定义书签。四基本思想........................... 错误!未定义书签。五算法分析........................... 错误!未定义书签。六流程图............................. 错误!未定义书签。七算法描述........................... 错误!未定义书签。八运行输出结果....................... 错误!未定义书签。

一实验内容

选择一个调度算法,实现处理机调度。

二实验目的

多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,以加深了解处理机调度的工作。

三实验题目

设计一个按优先权调度和时间片轮转算法实现处理机调度的程序。

四基本思想

先选择时间片的个数和每个时间片需要的时间,正在运行的进程每运行一秒其优先权数目加一,即其优先权减小。每个时间片运行结束后,选择进入时间片进程优先权数目最小的进程,开始下一个时间片的运行。如果有进程运行结束,则离开,再在就绪队列中选择优先权数目最小的进程进入。在运行期间,如果有新的进程来到,按优先权大小放入就绪队列中。

五算法分析

定义一个结构体,此包含了PCB的信息:

struct PCB

{

char PID[5]; /*进程名*/

int needtime; /*要求运行的时间*/

int cputime; /*已运行时间*/

int priority; /*优先权(越小越高)*/

int starttime; /*进入就绪队列的时间*/

int overtime; /*运行完成的时间*/

int state; /*状态:1就绪2运行3完成*/

struct PCB *next;

};

子函数struct PCB *create(int num,int n)用来建立一个按优先级大小排列的就绪进程链表和一个按时间先后循序排列的将进入就绪进程的链表。

main()函数中用一while循环输出进入时间片的进程状态。六流程图

七算法描述

#define NULL 0

#define LEN sizeof(struct PCB)

#include""

#include""

struct PCB

{

char PID[5]; /*进程名*/

int needtime; /*要求运行的时间*/

int cputime; /*已运行时间*/

int priority; /*优先权(越小越高)*/

int starttime; /*进入就绪队列的时间*/

int overtime; /*运行完成的时间*/

int state; /*状态:1就绪2运行3完成*/

struct PCB *next;

};

struct PCB *create(int num,int n)

/*创建进程,并将进程按优先级顺序插入队列中*/

{

struct PCB *head,*p,*p1,*p2;

int i;

head=NULL; /*头指针指零*/

for(i=1;i<=num;i++) /*循环建立所有进程*/

{

printf("请输入第%d个进程的信息\n",i);

p=(struct PCB *)malloc(LEN); /*开辟一个空间*/

printf("进程名:"); /*输入进程名*/

scanf("%s",p->PID);

printf("要求运行的时间:"); /*输入要运行的时间*/

scanf("%d",&p->needtime);

p->cputime=0; /*占用处理机的时间赋为零*/

printf("优先权:"); /*输入优先权*/

scanf("%d",&p->priority);

if(n==1)

p->starttime=0; /*进入就绪队列的时间赋为零*/

else

{

printf("进入就绪队列时间:"); /*输入进入就绪队列的时间*/

scanf("%d",&p->starttime);

}

p->overtime=-1; /*运行没有结束所以运行完成的时间赋为-1*/

p->state=1; /*状态赋为就绪状态*/

p1=head; /*p1指针指向头指针*/

if(head==NULL) /*如果头指针为零将头指针指向新建立的进程*/ {head=p;head->next=NULL;}

else /*头指针不为零的情况*/

{

if(n==1)

while(p1!=NULL&&p->priority>p1->priority) /*查找插入点*/

{p2=p1;

p1=p1->next;

}

else

while(p1!=NULL&&p->starttime>p1->starttime) /*查找插入点*/

{p2=p1;

p1=p1->next;

}

if(head==p1) /*优先权的值最小作为表头*/

{p->next=head;p2=head=p;}

else /*否则的话插入*/

{p2->next=p;p->next=p1;}

}

}

return(head);

}

void main()

{

char now[5];

int cho,num,num1,timepiece,time,i,j,k,flag,choo,clock=0;

struct PCB

*head,*head1,*over,*later,*l,*l1,*l2,*p,*p0,*p1,*p2,*q,*q1,*q2,*q3;

over=NULL;

printf("初始化进程...\n");

printf("输入总的就绪进程数:");

scanf("%d",&num);

head=create(num,1); /*建立就绪进程的链表*/

printf("输入将会就绪的进程数:");

scanf("%d",&num1); /*建立将会进入就绪进程的链表*/

later=create(num1,2);

printf("cpu是否开始运行:1是 2不是--");

scanf("%d",&cho);

if(cho==1) /*处理机开始进行调度*/

{

printf("现在的时间是:");

scanf("%s",now);

printf("显示所有就绪的进程:\n");

p2=head;

printf("进程名\t要求运行时间\t已运行时间\t优先权\t状态(1就绪2运行3结束)\n");

while(p2!=NULL)

{

printf("%s\t%d\t\t%d\t\t%d\t%d\n",p2->PID,p2->needtime,p2->cputime ,p2->priority,p2->state);

p2=p2->next;

}

printf("请输入时间片总数:");

scanf("%d",&timepiece);

printf("请输入时间片的时间:");

scanf("%d",&time);

printf("运行正式开始!\n");

head1=head;

printf("\t\t进程名\t要求运行时间\t已运行时间\t优先权\t状态\n"); for(i=1;i<=timepiece;i++) /*将进入时间片运行的进程用头指针head1指示,并改变就绪进程头指针head的指向*/

{

if(head!=NULL)

{

p=head;

head=head->next;

}

else break;

}

p->next=NULL;

while(head1!=NULL) /*就绪进程头指针不为零就循环*/

{

head1->state=2; /*状态:1就绪2运行3完成*/

for(j=1;j<=time;j++) /*每个时间片所需时间的循环*/

{

clock++; /*定时器每秒加1*/

if(later!=NULL&&clock==later->starttime)

/*如果将进入就绪队列的进程时间到达加入就绪队列*/ {l=later;

l1=head;

later=later->next;

if(head==NULL)

{head=l;head->next=NULL;}

else

{

while(l1!=NULL&&l1->priority<=l->priority)

{l2=l1;l1=l1->next;}

if(l1==head)

{

l->next=head;

head=l;

}

else

{

l2->next=l;

l->next=l1;

}

}

}

flag=0;

printf("\n%3d秒时间片第%d秒 ",clock,j);

q=head1;

if(head1->needtime>head1->cputime) /*以运行时间和优先权都加1*/

{

head1->cputime++;

head1->priority++;

while(q) /*运行队列不为零输出其信息*/ {if(q==head1)

printf("%s\t%d\t\t%d\t\t%d\t%d\n",q->PID,q->needtime,q->cputime,q->pr iority,q->state);

else

printf("\t\t %s\t%d\t\t%d\t\t%d\t%d\n",q->PID,q->needtime,q->cputim e,q->priority,q->state);

q=q->next;

}

}

if(head1->needtime==head1->cputime)

/*运行完成将其放入over为头指针的链表中*/ {

head1->state=3;

head1->overtime=clock;

if(over==NULL)

{over=head1;head1=head1->next;over->next=NULL;}

else

if(over!=NULL&&head1!=NULL)

{

p1=head1->next;

p0=over;

over=head1;

over->next=p0;

head1=p1;

}

flag=1;

}

if(flag==1) break;

}

if(flag==1) /*有进程结束的情况*/

{

if(head!=NULL) /*就绪队列不为零将优先权最高的放入运行链表中*/ {q1=head;

head=head->next;

q2=head1;

while(q2!=NULL&&q2->priority<=q1->priority)

{q3=q2;q2=q2->next;}

if(q2==head1)

{

q1->next=head1;

head1=q1;

}

else

{

q3->next=q1;

q1->next=q2;

}

}

}

else /*无进程结束的情况,寻找优先权最高的运行*/

{

head1->state=1;

q1=head1;

head1=head1->next;

q2=head1;

while(q2!=NULL&&q2->priority<=q1->priority)

{q3=q2;q2=q2->next;}

if(q2==head1)

{q1->next=head1;head1=q1;}

else

{q3->next=q1;q1->next=q2;}

}

}

}

printf("cpu结束运行!\n");

printf("是否输出所有结束的进程:1是2不是--");

scanf("%d",&choo);

if(choo==1) /*输出所有完成运行的进程*/

{

printf("开始时间:%s\n",now);

printf("进程名\t要求运行时间\t进入就绪队列的时间\t运行完成的时间\n");

while(over!=NULL)

{

printf("%s\t%d\t\t%d\t\t\t%d\n",over->PID,over->needtime,over->startt ime,over->overtime);

over=over->next;

}

}

}

八运行输出结果

初始化进程如右图

显示现在的时间和所有就绪的进程

输入时间片的总数和每个时间片的时间

运行时显示的信息

计算机操作系统实验课实验报告

实验报告 实验课程: 计算机操作系统学生姓名:XXX 学号:XXXX 专业班级:软件 2014年12月25日

目录 实验一熟悉Windows XP中的进程和线程.. 3实验二进程调度 (7) 实验三死锁避免—银行家算法的实现 (18) 实验四存储管理 (24)

实验一熟悉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 中的各个线程

计算机操作系统(第四版)

第三章处理机调度与死锁 1,高级调度与低级调度的主要任务是什么?为什么要引入中级调度? 【解】(1)高级调度主要任务是用于决定把外存上处于后备队列中的那些作业调入内存,并为它们创建进程,分配必要的资源,然后再将新创建的进程排在就绪队列上,准备执行。(2)低级调度主要任务是决定就绪队列中的哪个进程将获得处理机,然后由分派程序执行把处理机分配给该进程的操作。(3)引入中级调度的主要目的是为了提高内存的利用率和系统吞吐量。为此,应使那些暂时不能运行的进程不再占用宝贵的内存空间,而将它们调至外存上去等待,称此时的进程状态为就绪驻外存状态或挂起状态。当这些进程重又具备运行条件,且内存又稍有空闲时,由中级调度决定,将外存上的那些重又具备运行条件的就绪进程重新调入内存,并修改其状态为就绪状态,挂在就绪队列上,等待进程调度。 3、何谓作业、作业步和作业流? 【解】作业包含通常的程序和数据,还配有作业说明书。系统根据该说明书对程序的运行进行控制。批处理系统中是以作业为基本单位从外存调入内存。 作业步是指每个作业运行期间都必须经过若干个相对独立相互关联的顺序加工的步骤。 作业流是指若干个作业进入系统后依次存放在外存上形成的输入作业流;在操作系统的控制下,逐个作业进程处理,于是形成了处理作业流。 4、在什么情冴下需要使用作业控制块JCB?其中包含了哪些内容? 【解】每当作业进入系统时,系统便为每个作业建立一个作业控制块JCB,根据作业类型将它插入到相应的后备队列中。 JCB 包含的内容通常有:1) 作业标识2)用户名称3)用户账户4)作业类型(CPU繁忙型、I/O芳名型、批量型、终端型)5)作业状态6)调度信息(优先级、作业已运行)7)资源要求8)进入系统时间9) 开始处理时间10) 作业完成时间11) 作业退出时间12) 资源使用情况等 5.在作业调度中应如何确定接纳多少个作业和接纳哪些作业? 【解】作业调度每次接纳进入内存的作业数,取决于多道程序度。应将哪些作业从外存调入

计算机操作系统实训资料

计算机操作系统实验(训)指导书 学院:电子信息工程学院 班级:13计算机科学与技术本01班 学号: 姓名: 指导教师: 西安思源学院 电子信息工程学院

前言 操作系统是计算机科学与技术专业的一门重要的专业课,是一门实践性很强的技术课程。掌握操作系统原理、熟悉操作系统的使用是各层次计算机软硬件开发人员必不可少的基本技能。操作系统课程讲授理论原理比较容易,而如何指导学生进行实践则相对较难,导致学生不能深刻地理解操作系统的本质,也不能在实际中应用所学的操作系统理论知识及操作系统所提供的功能来解决实际问题。 本实验课程在操作系统原理课程教学中占有重要地位,目的是让学生及时掌握和巩固所学的基本原理和基础理论,加深理解。提高学生自适应能力,为将来使用和设计各类新的操作系统打下基础。 一般来说,学习操作系统分为以下几个层次: 1.学习并掌握操作系统的基本概念及原理,了解操作系统的实现机制。 2.掌握常用操作系统的使用、操作和维护,成为合格的系统管理员。 目前最常用的操作系统主要有UNIX、Linux、Windows等等。 3.通过分析操作系统源代码,掌握修改、编写操作系统的能力。开放源代码的操作系统Linux的出现为我们提供了机遇。 操作系统本身的构造十分复杂,如何在有效的时间内,使学生既能了解其实现原理又能对原理部分进行有效的实践,是操作系统教学一直在探索的内容。本实验课程以Windows和Linux操作系统为主要平台,从基本原理出发,通过几个实验,使学生能对操作系统的基本原理有更深入的了解,为将来从事操作系统方面的研究工作打下一定的基础。

目录 实验一Windows的用户界面 (4) 实验二Windows2003的任务与进程管理器 (6) 实验三Linux使用环境 (10) 实验四Linux进程管理、内存管理、设备管理 (13) 实验五Windows2003内存管理 (16) 实验六目录和文件管理 (19) 实验七用户与组群管理 (21)

计算机操作系统内存分配实验报告记录

计算机操作系统内存分配实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

一、实验目的 熟悉主存的分配与回收。理解在不同的存储管理方式下,如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。 二、实验内容和要求 主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配,就是解决多道作业或多进程如何共享主存空间的问题。所谓回收,就是当作业运行完成时将作业或进程所占的主存空间归还给系统。 可变分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需求,并且分区个数是可以调整的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入,作业等待。随着作业的装入、完成,主存空间被分成许多大大小小的分区,有的分区被作业占用,而有的分区是空闲的。 实验要求使用可变分区存储管理方式,分区分配中所用的数据结构采用空闲分区表和空闲分区链来进行,分区分配中所用的算法采用首次适应算法、最佳适应算法、最差适应算法三种算法来实现主存的分配与回收。同时,要求设计一个实用友好的用户界面,并显示分配与回收的过程。同时要求设计一个实用友好的用户界面,并显示分配与回收的过程。 三、实验主要仪器设备和材料 实验环境 硬件环境:PC或兼容机 软件环境:VC++ 6.0 四、实验原理及设计分析 某系统采用可变分区存储管理,在系统运行当然开始,假设初始状态下,可用的内存空间为640KB,存储器区被分为操作系统分区(40KB)和可给用户的空间区(600KB)。 (作业1 申请130KB、作业2 申请60KB、作业3 申请100KB 、作业2 释放 60KB 、作业4 申请 200KB、作业3释放100KB、作业1 释放130KB 、作业5申请140KB 、作业6申请60KB 、作业7申请50KB) 当作业1进入内存后,分给作业1(130KB),随着作业1、2、3的进入,分别分配60KB、100KB,经过一段时间的运行后,作业2运行完毕,释放所占内存。此时,作业4进入系统,要求分配200KB内存。作业3、1运行完毕,释放所占内存。此时又有作业5申请140KB,作业6申请60KB,作业7申请50KB。为它们进行主存分配和回收。 1、采用可变分区存储管理,使用空闲分区链实现主存分配和回收。 空闲分区链:使用链指针把所有的空闲分区链成一条链,为了实现对空闲分区的分配和链接,在每个分区的起始部分设置状态位、分区的大小和链接各个分区的前向指针,由状态位指示该分区是否分配出去了;同时,在分区尾部还设置有一后向指针,用来链接后面的分区;分区中间部分是用来存放作业的空闲内存空间,当该分区分配出去后,状态位就由“0”置为“1”。 设置一个内存空闲分区链,内存空间分区通过空闲分区链来管理,在进行内存分配时,系统优先使用空闲低端的空间。 设计一个空闲分区说明链,设计一个某时刻主存空间占用情况表,作为主存当前使用基础。初始化空间区和已分配区说明链的值,设计作业申请队列以及作业完成后释放顺序,实现主存的分配和回收。要求每次分配和回收后显示出空闲内存分区链的情况。把空闲区说明

计算机操作系统综合设计实验报告实验一

计算机操作系统综合设计 实验一 实验名称:进程创建模拟实现 实验类型:验证型 实验环境: win7 vc++6.0 指导老师: 专业班级: 姓名: 学号: 联系电话: 实验地点:东六E507 实验日期:2017 年 10 月 10 日 实验报告日期:2017 年 10 月 10 日 实验成绩:

一、实验目的 1)理解进程创建相关理论; 2)掌握进程创建方法; 3)掌握进程相关数据结构。 二、实验内容 windows 7 Visual C++ 6.0 三、实验步骤 1、实验内容 1)输入给定代码; 2)进行功能测试并得出正确结果。 2、实验步骤 1)输入代码 A、打开 Visual C++ 6.0 ; B、新建 c++ 文件,创建basic.h 头文件,并且创建 main.cpp 2)进行功能测试并得出正确结果 A 、编译、运行main.cpp B、输入测试数据 创建10个进程;创建进程树中4层以上的数型结构 结构如图所示:。

createpc 创建进程命令。 参数: 1 pid(进程id)、 2 ppid(父进程id)、3 prio(优先级)。 示例:createpc(2,1,2) 。创建一个进程,其进程号为2,父进程号为1,优先级为2 3)输入创建进程代码及运行截图 4)显示创建的进程

3、画出createpc函数程序流程图 分析createpc函数的代码,画出如下流程图:

四、实验总结 1、实验思考 (1)进程创建的核心内容是什么? 答: 1)申请空白PCB 2)为新进程分配资源 3)初始化进程控制块 4)将新进程插入到就绪队列 (2)该设计和实际的操作系统进程创建相比,缺少了哪些步骤? 答:只是模拟的创建,并没有分配资源 2、个人总结 通过这次课程设计,加深了对操作系统的认识,了解了操作系统中进程创建的过程,对进程创建有了深入的了解,并能够用高 级语言进行模拟演示。一分耕耘,一分收获,这次的课程设计让 我受益匪浅。虽然自己所做的很少也不够完善,但毕竟也是努 力的结果。另外,使我体会最深的是:任何一门知识的掌握, 仅靠学习理论知识是远远不够的,要与实际动手操作相结合才能 达到功效。

实验一处理器调度实验报告

处理器调度一、实验内容 选择一个调度算法,实现处理器调度。 二、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。 当就绪状态进程 个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下处理器调度,帮助学生加深了解处理器调度的工作。 三、实验题目 设计一个按优先数调度算法实现处理器调度的程序 提示: (1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进 程控制块的格 式为: 其中,进程名----作为进程的标识,假设五个进程的进程名分别是R, P2, P3, P4,R。 指针—按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块

首地址,最后一个进程中的指针为“ 0”。 要求运行时间-- 假设进程需要运行的单位时间数。 优先数-赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态-可假设有两种状态,“就绪”状态和“结束“状态,五个进程的初 始状态都为 “就绪“状态,用“ R”表示,当一个进程运行结束后,它的状态变为“结束”, 用“ E”表示。 (2)在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数” 和“要求运行时间”。 (3)为了调度方便,把五个进程按给定的优先数从大到小连成队列,用一单元指出队首 进程,用指针指出队列的连接情况。例: 队首标志 (4)处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优 先数就减“ 1”。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的 启动运行,而是执行: 优先数- 1 要求运行时间-1 来模拟进程的一次运行提醒注意的是:在实际的系统中,当一个进程被选中运

计算机操作系统实验四

实验三进程与线程 问题: 进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位,具有动态性、并发性、独立性、异步性和交互性。然而程序是静态的,并且进程与程序的组成不同,进程=程序+数据+PCB,进程的存在是暂时的,程序的存在是永久的;一个程序可以对应多个进程,一个进程可以包含多个程序。当操作系统引入线程的概念后,进程是操作系统独立分配资源的单位,线程成为系统调度的单位,与同一个进程中的其他线程共享程序空间。 本次实验主要的目的是: (1)理解进程的独立空间; (2)加深对进程概念的理解,明确进程和程序的区别; (3)进一步认识并发执行的实质; (4)了解红帽子(Linux)系统中进程通信的基本原理。 (5)理解线程的相关概念。 要求: 1、请查阅资料,掌握进程的概念,同时掌握进程创建和构造的相关知识和线程创建和 构造的相关知识,了解C语言程序编写的相关知识; (1)进程: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内

存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。 (2)进程的创建和构造: 进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。新的进程通过克隆旧的程序(当前进程)而建立。fork() 和clone()(对于线程)系统调用可用来建立新的进程。 (3)线程的创建和构造: 线程也称做轻量级进程。就像进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与独立的进程相比,进程中的线程之间的独立程度要小。它们共享内存、文件句柄和其他每个进程应有的状态。 线程的出现也并不是为了取代进程,而是对进程的功能作了扩展。进程可以支持多个线程,它们看似同时执行,但相互之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但你必须小心,确保它们不会妨碍同一进程里的其他线程。 线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制,但与进程不同的是,同类的多个线程是共享同一块内存空间和一组系统资源的,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要比进程小得多,正因如此,线程也被称为轻型进程(light-weight process)。一个进程中可以包含多个线程。 2、理解进程的独立空间的实验内容及步骤

操作系统:进程调度实验报告

设计性实验报告 一、实验目的 1.在Linux下用C语言编程模拟优先级进程调度算法和时间片轮转进程调度算法。 2.为了清楚地观察每个进程的调度过程,每次调度程序应将各个进程的情况显示出来。 二、总体设计(设计原理、设计方案及流程等) 1、优先级进程调度算法 采用动态优先级进程调度算法,其基本思想是每次调度总是把处理机分配给优先级最高的进程,同时在运行过程中进程的优先级随着执行或等待的时间而降低或增加。 在该实验中每个进程用一个进程控制块( PCB)表示。进程控制块包含如下信息:进程号,进程名、优先数、需要运行时间、已用CPU时间、进程状态。进程号,名字,优先数,运行的时间,事先人为地指定。每个进程的状态可以是就绪,执行,阻塞或完成4种状态之一。 就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。就绪队列中的进程在等待一个时间片后,优先级增1。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时将进程的优先级减1,然后把它插入就绪队列等待CPU。 2、时间片轮转调度算法 采用简单时间片轮转调度算法,其基本思想是:所有就绪进程按 FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。如果运行进程用完它的时间片后还未完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。直至所有的进程运行完毕。 三、实验步骤(包括主要步骤、代码分析等) 1.打开linux虚拟机,用vim编辑器打开代码进行修改和调整。用gcc编译器进行编译编译运行首先运行优先级算法,如图所示:

计算机操作系统(第四版)1-8章 课后答案(全)

第一章操作系统引论 1.设计现代OS的主要目标是什么?答:方便性,开放性,有效性,可扩充性 2.OS的作用可表现在哪几个方面?答:OS作为用户与计算机硬件系统之间的接口;OS作为计算机系统资的管理者;OS实现了对计算机资源的抽象。 3.为什么说操作系统实现了对计算机资源的抽象?答:OS首先在裸机上覆盖一层1/0设备管理软件,实现了对计算机硬件操作的第一层次抽象;在第一层软件上再覆盖文件管理软件,实现了对硬件资源操作的第二层次抽象。0s通过在计算机硬件上安装多层系统软件,增强了系统功能,隐藏了对硬件操作的细节,由它们共同实现了对计算机资源的抽象。 4·说明推动分时系统形成和发展的主要动力是什么?答:主要动力是提高资源利用率和系统吞吐里,为了满足用户对人一机交互的需求和共享主机。 5.何谓脱机I/O和联机I/O?答:脱机1/0是指事先将装有用户程序和数据的纸带或卡片装入纸带输入机或卡片机,在外围机的控制下,把纸带或一片上的数据或程序输入到殖带上。该方式下的输入输出由外围机控制完成,是在脱离主机的情况下进行的。而耽机1/0方式是指程序和数据的輸入输出都是在主机的直接控制下进行的。 6.试说明推动分时系统形成和发展的主要动力是什么?答:推动分时系统形成和发展的主要动力是更好地满足用户的需要。主要表现在:CPU的分时使用缩短了作业的平均周转时间;人机交互能力使用户能直接控制自己的作业;主机的共享使多用户能同时使用同一台计算机,独立地处理自己的作业。 7.实现分时系统的关键问题是什么?应如何解决?答:关键问题是当用户在自己的终端上键入命令时,系统应能及寸接收并及时处理该命令,在用户能接受的时采内将结果返回给用户。解决方法:针对及时接收问题,可以在系统中设路多路卡,健主机能同时接收用户从各个终端上轮入的数据;为每个终端配路缓冲区,暂存用户捷入的命令或教据。针对反时处理问题,应便所有的用户作业都直接进入内存,并且为每个作业分配一个时间片,允许作业只在自己的时间片内运行,这样在不长的时间内,能使每个作业都运行一次。 8.为什么要引入实时OS?答:实时操作系统是指系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。引入实时OS是为了满足应用的需求,熏好地满足实时控制领域和实时信息处涯领域的需要。 9.什么是硬实时任务和款实时任务?试举例说明。答:硬实时任务是指系统必须满足任务对截止时间的要求,否则可能出现难以预测的结是。举例来说,运载火箭的控制等。软实时任务是指它的截止时间并不严格,偶尔错过了任务的截止时间,对系统产生的影响不大。举例:网页内容的更新、火车售票系统。 10.试从交互性、及时性以及可靠性方面,将分时系统与实时系统进行比较。答:(1)及时性:实时信息处理系统对实时性的要求与分时系统类似,都是以人所能受的等待时间来确定;而实时控制系统的及时性,是以控制对象所要求的开始截止时间或完成截止时间来确定的,一般为秒级到毫秒级,甚至有的要低于100微妙。(2)交互性:实时信息处理系统具有交互性,但人与系统的交互仅限于访问系统中某些特定的专用服务程序。不像分时系统那样能向终端用户提供数据和资源共享等服务。(3)可靠性:分时系统也要求系统可靠,但相比之下,实时系统则要求系统具有高度的可靠性。因为任何差错都可能带未巨大的经济损失,甚至是灾难性后,,所以在实时系统中,往往都采取了

实验报告计算机操作系统-Windows.pdf

班级 178 学号姓名 【实验目的】 1. 掌握Windows 7的基本操作; 2. 熟练掌握资源管理器、文件与文件夹的管理方法 3. Windows 7控制面板的使用 【实验内容和步骤】 一.Windows7基本操作和文件管理 完成实践教程第18页中的实验并回答下列问题。 1.如何新建文件或文件夹? 在桌面空白处单击鼠标右键,选择“新建”--“文件夹”,键入新文件夹的名称,然后按 ENTER 键。 2.如何选定多个相邻文件或文件夹?如何选定多个不相邻文件和文件夹?如何选中全部文件和文件夹? 选定多个相邻文件的操作是:单击第一个文件,然后按住Shift 键,再单击最后一个文件 Shift 键,就是Ctrl 键上面那个。 选定多个不相邻文件操作是:单击第一个文件,然后按住Ctrl 键的同时,单击其他待选定的文件 Ctrl 键,就是键盘最左下角那个。 如何选中全部文件和文件夹:ctrl+A 3.试列举对文件/文件夹进行复制和移动的方法? 第一种方法:可以用鼠标右键进行操作。 第二种:可用ctrl+c 进行复制;ctrl+x 进行移动(也就是剪切)ctrl+v进行粘贴 4.如何对已删除的文件进行“还原”?

如果没清空回收站,在回收站里还原就行。 5.如何对按照修改日期搜索文件或文件夹? 我的电脑右键选搜索,打开搜索界面,在搜索选项里按日期,选中并输入日期 6.如何“隐藏”文件/文件夹?如何显示被“隐藏”起来的文件/文件夹图标? 把想隐藏文件的文件夹或文件,打开文件夹属性,隐藏打钩或去掉即可以选择这个文件是否隐藏或显示 打开任意的文件夹的工具选项卡的文件夹选项——查看选项卡——隐藏文件和文件夹上面有2个选择,选择显示隐藏文件夹即可看到隐藏文件 二.Windows7系统设置 完成实践教程第23页中的实验并回答下列问题。 1.如何改变桌面的背景、屏幕的分辨率并设置屏幕保护程序。 开始—控制面板—外观和个性化—个性化,然后进行桌面背景、窗口颜色、屏幕保护调整。 2.如何修改计算机的系统日期和时间。 (1)点开始--运行回车--打开组策略。 (2)在组策略管理器中选择“计算机配置”--windows设置--安全设置--本地策略--用户权利指派--更改系统时间。 (3)双击打开“更新系统时间配置”属性对话框,把里 面用户名全删除,点确定。 (4)重启计算机 3.如何为计算机添加“简体中文双拼”输入法。 可以右击输入法图标,选“设置”,“添加”,找到双拼输入法后单击“确定”就可以使用了。

作业调度实验报告

作业调度实验报告 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

实验二作业调度 一.实验题目 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 (1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。 (2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。 (3)响应比高者优先算法:是在每次调度前都要计算所有被选作业(在后备队列中)的响应比,然后选择响应比最高的作业执行。 2、编写并调度一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。 对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。 二.实验目的: 本实验要求用高级语言(C语言实验环境)编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解三 .实验过程 <一>单道处理系统作业调度 1)单道处理程序作业调度实验的源程序: 执行程序: 2)实验分析:

1、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU 时限等因素。 2、每个作业由一个作业控制块JCB 表示,JCB 可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W 。 3、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。 3)流程图: 二.最短作业优先算法 三.高响应比算法 图一.先来先服务流程图 4)源程序: #include <> #include <> #include <> #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 int n; float T1=0,T2=0; int times=0; struct jcb .\n",p->name); free(p); .wait...",time); if(times>1000) 代替 代替

操作系统原理实验四

实验4 进程控制 1、实验目的 (1)通过对WindowsXP进行编程,来熟悉和了解系统。 (2)通过分析程序,来了解进程的创建、终止。 2、实验工具 (1)一台WindowsXP操作系统的计算机。 (2)计算机装有Microsoft Visual Studio C++6.0专业版或企业版。 3、预备知识 (3)·CreateProcess()调用:创建一个进程。 (4)·ExitProcess()调用:终止一个进程。 4、实验编程 (1)编程一利用CreateProcess()函数创建一个子进程并且装入画图程序(mspaint.exe)。阅读该程序,完成实验任务。源程序如下: # include < stdio.h > # include < windows.h > int main(VOID) ﹛STARTUPINFO si; PROCESS INFORMA TION pi; ZeroMemory(&si,sizeof(si)); Si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, “c: \ WINDOWS\system32\ mspaint.exe”, NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi)) ﹛fprintf(stderr,”Creat Process Failed”); return—1; ﹜ WaitForSingleObject(pi.hProcess,INFINITE); Printf(“child Complete”); CloseHandle(pi.hProcess); CloseHandle(pi hThread); ﹜

计算机操作系统第四版试题及答案

操作系统期末考试(一) 一、单项选择题(在每小题的四个备选答案中,只有一个是正确的,将其号码写在题干的括号中。每小题2分,共20分) 1、文件系统的主要组成部分是() A、文件控制块及文件 B、I/O文件及块设备文件 C、系统文件及用户文件 D、文件及管理文件的软件 2、实现进程互斥可采用的方法() A、中断 B、查询 C、开锁和关锁 D、按键处理 3、某页式管理系统中,地址寄存器的低9位表示页内地址,则页面大小为() A、1024字节 B、512字节 C、1024K D、512K 4、串联文件适合于()存取 … A、直接 B、顺序 C、索引 D、随机 5、进程的同步与互斥是由于程序的()引起的 A、顺序执行 B、长短不同 C、信号量 D、并发执行 6、信号量的值() A、总是为正 B、总是为负 C、总是为0 D、可以为负整数 7、多道程序的实质是() A、程序的顺序执行 B、程序的并发执行 C、多个处理机同时执行 D、用户程序和系统程序交叉执行 8、虚拟存储器最基本的特征是() A、从逻辑上扩充内存容量 B、提高内存利用率 C、驻留性 D、固定性 ; 9、飞机定票系统是一个() A、实时系统 B、批处理系统 C、通用系统 D、分时系统 10、操作系统中,被调度和分派资源的基本单位,并可独立执行的实体是() A、线程 B、程序 C、进程 D、指令 二、名词解释(每小题3分,共15分) 1.死锁: 2.原子操作: 3.临界区: 4.虚拟存储器: 5.文件系统: ' 三、判断改错题(判断正误,并改正错误,每小题2分,共20分) 1、通道是通过通道程序来对I/O设备进行控制的。 () 2、请求页式管理系统中,既可以减少外零头,又可以减少内零头。 () 3、操作系统中系统调用越多,系统功能就越强,用户使用越复杂。 () 4、一个进程可以挂起自已,也可以激活自已。 () 5、虚拟存储器的最大容量是由磁盘空间决定的。 () 6、单级文件目录可以解决文件的重名问题。 () 7、进程调度只有一种方式:剥夺方式。 ()

《计算机操作系统》实验指导书

《计算机操作系统》 实验指导书 (适合于计算机科学与技术专业) 湖南工业大学计算机与通信学院 二O一四年十月

前言 计算机操作系统是计算机科学与技术专业的主要专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。计算机操作系统的实验目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握操作系统的基本原理,加深对操作系统基本方法的理解,加深对课堂知识的理解,为学生综合运用所学知识,在Linux环境下调用一些常用的函数编写功能较简单的程序来实现操作系统的基本方法、并在实践应用方面打下一定基础。要求学生在实验指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个实验解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,并且能够进行简单分析和判断;能够熟练使用Linux用户界面;掌握操作系统中进程的概念和控制方法;了解进程的并发,进程之间的通信方式,了解虚拟存储管理的基本思想。同时培养学生进行分析问题、解决问题的能力;培养学生完成实验分析、实验方法、实验操作与测试、实验过程的观察、理解和归纳能力。 为了收到良好的实验效果,编写了这本实验指导书。在指导书中,每一个实验均按照该课程实验大纲的要求编写,力求紧扣理论知识点、突出设计方法、明确设计思路,通过多种形式完成实验任务,最终引导学生有目的、有方向地完成实验任务,得出实验结果。任课教师在实验前对实验任务进行一定的分析和讲解,要求学生按照每一个实验的具体要求提前完成准备工作,如:查找资料、设计程序、完成程序、写出预习报告等,做到有准备地上机。进行实验时,指导教师应检查学生的预习情况,并对调试过程给予积极指导。实验完毕后,学生应根据实验数据及结果,完成实验报告,由学习委员统一收齐后交指导教师审阅评定。 实验成绩考核: 实验成绩占计算机操作系统课程总评成绩的20%。指导教师每次实验对学生进行出勤考核,对实验效果作记录,并及时批改实验报告,综合评定每一次的实验成绩,在学期终了以平均成绩作为该生的实验成绩。有以下情形之一者,实验成绩为不及格: 1.迟到、早退、无故缺勤总共3次及以上者; 2.未按时完成实验达3次及以上者; 3.缺交实验报告2次及以上者。

计算机操作系统进程调度实验报告材料

操作系统实验题:设计一若干并发进程的进程调度程序 一、实验目的 无论是批处理系统、分时系统还是实时系统,用户进程数一般都大于处理机数,这将导致用户进程互相争夺处理机。这就要求进程调度程序按一定的策略,动态地把处理及分配给处于就绪队列中的某一进程,以使之执行。进程调度是处理机管理的核心内容。本实验要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念。并体会了优先数和先来先服务调度算法的具体实施办法。 二、实验要求 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 三、实验内容 进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法(将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理)。 每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。 四、实验算法流程 调度算法的流程图如下:

四川大学计算机操作系统第四实验报告

实验报告 (学生打印后提交) 实验名称:作业调度系统 实验时间: 2015 年 6 月 4 日 实验人员:________(姓名)_____(学号)______(年级) 实验目的: ?理解操作系统中调度的概念和调度算法。 ?学习Linux下进程控制以及进程之间通信的知识。 ?理解在操作系统中作业是如何被调度的,如何协调和控制各个作业对CPU的使用 实验环境: linux 实验步骤: 1. 1、调用vi编辑器修改job.h文件,为命名管道FIFO设置正确的路径,修改语句:#define FIFO "/home/student/SVRFIFO" 2. 修改scheduler.c文件,添加作业的打印信息,即修改函数do_stat,要求再输出作业名称、当 前优先级、默认优先级。 3. 在printf( “JID\tPID\tOWNER\tRUNTIME\tWAITTIME\tCREATTIME\t\tSTATE\n”);语句 中添加JOBNAME、CURPRI、DEFPRI。 4. 接下来的两个输出语句根据表头修改,注意printf语句的输出格式,输出的信息内容参照 jobinfo结构体。 5、用gcc分别编译连接作业调度程序、三个命令程序。 6、在一个控制台窗口中运行作业调度程序作为服务端。 7、提交一个运行时间超过100毫秒的作业(要求提供源程序),并编译连接。 8.再打开一个窗口登录服务器作为客户端,在其中运行作业控制命令(提交作业、删除作业、查看信息), 在服务端观察调度情况,分析所提交作业的执行情况。 实验陈述: 1、基础知识: ?说明进程与程序的区别:程序是静态的指令集合,不占用系统的运行资源,可以长久保存在 磁盘。进程是进程实体(程序、数据和进程控制块构成)的运行过程,是系统进行资源分配和 调度的一个独立单位。进程执行程序,但进程与程序之间不是一一对应的。通过多次运行,同一 程序可以对应多个进程;通过调用关系,一个进程可以包含多个程序。 ?说明进程与作业的区别:作业是用户一个事务处理过程中要求计算机系统所做工作 的集合,作业可以包含几个进程。 ?说明作业调度与进程调度的区别:作业调度是按照一定的原则从外存的作业后备队 列中选择作业调入内存,并为其分配资源,创建相应的进程,然后进入就绪队列。进 程调度是按照某种策略或方法从就绪队列中选择进程,将处理机分配给它。 2、实验知识 ?本实验作业有几种状态READY:作业准备就绪可以运行。RUNNING:作业正在运行DONE: 作业已经运行结束,可以退出。有这三种状态,但只用到前两种。 ?

计算机操作系统(第四版)课后习题答案第二章

第二章 1. 什么是前趋图?为什么要引入前趋图? 答:前趋图(Precedence Graph)是一个有向无循环图,记为DAG(Directed Acyclic Graph),用于描述进程之间执行的前后关系。 2. 画出下面四条诧句的前趋图: S1=a:=x+y; S2=b:=z+1; S3=c:=a-b; S4=w:=c+1; 答:其前趋图为: 3. 为什么程序并发执行会产生间断性特征? 程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的进程之间,形成了相互制约的关系,从而也就使得进程在执行期间出现间断性。 4. 程序并发执行时为什么会失去封闭性和可再现性? 因为程序并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态是由多个程序来改变,致使程序的运行失去了封闭性。而程序一旦失去了封闭性也会导致其再失去可再现性。 5. 在操作系统中为什么要引入进程概念?它会产生什么样的影响? 为了使程序在多道程序环境下能并发执行,并能对并发执行的程序加以控制和描述,从而在操作系统中引入了进程概念。影响: 使程序的并发执行得以实行。 6. 试从动态性,并发性和独立性上比较进程和程序? a. 动态性是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程由一定的生命期;而程序只是一组有序指令的集合,是静态实体。 b. 并发性是进程的重要特征,同时也是OS的重要特征。引入进程的目的正是为了使其程序能和其它建立了进程的程序并发执行,而程序本身是不能并发执行的。 c. 独立性是指进程实体是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位。而对于未建立任何进程的程序,都不能作为一个独立的单位来运行。 7. 试说明PCB的作用?为什么说PCB是进程存在的唯一标志? a. PCB是进程实体的一部分,是操作系统中最重要的记录型数据结构。PCB中记录了操作系统所需的用于描述进程情况及控制进程运行所需的全部信息。因而它的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能和其它进程并发执行的进程。 b. 在进程的整个生命周期中,系统总是通过其PCB对进程进行控制,系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的,所以说,PCB是进程存在的唯一标志。 11.试说明进程在三个基本状态之间转换的典型原因。 答:(1)就绪状态→执行状态:进程分配到CPU资源(2)执行状态→就绪状态:时间片用完(3)执行状态→阻塞状态:I/O请求(4)阻塞状态→就绪状态:I/O完成 12.为什么要引入挂起状态?该状态有哪些性质? 答:引入挂起状态处于五种不同的需要: 终端用户需要,父进程需要,操作系统需要,对换需要和负荷调节需要。处于挂起状态的进程不能接收处理机调度。10.在进行进程切换时,所要保存的处理机状态信息有哪些?答:进行进程切换时,所要保存的处理机状态信息有:(1)进程当前暂存信息(2)下一指令地址信息(3)进程状态信息(4)过程和系统调用参数及调用地址信息。13.在进行进程切换时,所要保存的处理机状态信息有哪些? 答:进行进程切换时,所要保存的处理机状态信息有: (1)进程当前暂存信息 (2)下一指令地址信息 (3)进程状态信息 (4)过程和系统调用参数及调用地址信息。 14.试说明引起进程创建的主要事件。答:引起进程创建的主要事件有:用户登录、作业调度、提供服务、应用请求。 15.试说明引起进程被撤销的主要事件。答:引起进程被撤销的主要事件有:正常结束、异常结束(越界错误、保护错、非法指令、特权指令错、运行超时、等待超时、算术运算错、I/O 故障)、外界干预(操作员或操作系统干预、父进程请求、父进程终止)。 16.在创建一个进程时所要完成的主要工作是什么? 答:(1)OS 发现请求创建新进程事件后,调用进程创建原语Creat();(2)申请空白PCB;(3)为新进程分配资源;(4)初始化进程控制块;(5)将新进程插入就绪队列. 17.在撤销一个进程时所要完成的主要工作是什么? 答:(1)根据被终止进程标识符,从PCB 集中检索出进程PCB,读出该进程状态。(2)若被终止进程处于执行状态,立即终止该进程的执行,臵调度标志真,指示该进程被终止后重新调度。(3)若该进程还有子进程,应将所

计算机操作系统 实验报告

操作系统实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 成绩: 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单步调试直到此函数的最后,然后再从快速监视对

相关文档
最新文档