文档库 最新最全的文档下载
当前位置:文档库 › 操作系统实验报告———资源分配

操作系统实验报告———资源分配

操作系统实验报告———资源分配
操作系统实验报告———资源分配

石家庄经济学院

实习报告

(学院)系: 信息工程学院

专业: 计算机科学与技术

姓名: 江丹

班级: 专接本2班

学号: 511109030201

指导教师: 张有华

2012年6 月25 日

操作系统课程实习报告

学号:511109030201

姓名:江丹

起迄日期:2012/6/17~2012/6/25

指导教师:张有华

实习地点:206室

实习题目:

本实习中共有两个实习题。

第一题:用银行家算法实现资源分配。要求:

(1) 设计一个3个并发进程共享10个同类资源的系统,进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。

(2) 设计用银行家算法和随机分配算法,实现资源分配的两个资源分配程序,应具有显示或打印各进程依次要求申请的资源数以及依次分配资源的情况。

(3) 确定一组各进程依次申请资源数的序列,在相同的情况下分别运行上述两种资源分配程序,观察运行结果。

第二题:用按序分配策略实现资源分配。要求:

(1) 设计一个3个进程共享10个资源的系统,进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。

(2) 设计用按序分配算法实现资源分配的资源分配程序,应具有显示或打印各进程依次要求申请的资源号以及依次分配资源地情况。

(3) 确定两组各进程依次要求申请的资源号,要求其中的一组中各进程按序地申请资源,另一组中各进程申请资源不受序号限制,分别运行上述设计的资源分配程序,观察运行结果。

1 实习内容

运用随机分配算法、银行家算法、按需分配策略进行资源分配,检查各种算法资源分配的安全性。

2 实习目的

多个进程动态地共享系统的资源可能会产生死锁现象。死锁的产生,必须同时满足四个条件,第一个是互斥条件,即一个资源每次只能由一个进程占用;第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,但它仍继续保持已得到的所有其它资源;第三个是非出让条件,任何一个进程不能抢占另一个进程已经获得且未释放的资源;第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前

一个进程所持有的资源。防止死锁的机构只须确保上述四个条件之一不出现,则系统就不会发生死锁。

在实习中假定系统中任一资源在每一时刻只能则由一个进程使用,任何进程不能抢占它进程正在使用的资源,当进程得不到资源时必须等待。因此只要资源分配策略能保证进程不出现循环等待,则系统就不会发生死锁。

本实习要求学生编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁的发生。

3 实习步骤

第一步:首先先看书,理解银行家算法、随机分配算法及按需分配算法原理,确定整体的代码思路,确定流程图。

第二步:分析并修改流程图,检查其中的逻辑错误。

第三步:从细节上分析,各部分功能的代码实现。

第四步:运行并查看结果,这里主要查看各个资源对资源的占有和申请情况。以及按照自己随机的输入三组数字,选择各种算法,检验其分配的安全性,会不会产生死锁。

第一题的设计思路及运行结果:3.1~3.7部分

3.1需求分析

本次实验是在预输入三个进程的基础上初始化,通过选择算法,来检测各种算法的分配的安全性。

3.2 数据结构设计与说明

定义进程结构体:

typedef struct pcbwork{

int pid;

char state[10];

int cur_count; //当前申请量

int dem_count; //资源需求总量

int alr_count; //已占资源量

int need_count; //还需要的资源量

struct PCB *next;

}pcb;

定义系统资源结构体:

typedef struct sys_res{

int cur_count_sum; //当前申请总量

int sys_res_sum; //系统资源量

struct sys_res *next;

}res;

3.3算法设计

第一部分:初始化三个进程

//初始化当前各个资源申请量

printf("请输入各个进程的当前申请量\n");

printf("进程号\t当前申请量\t最大资源需求\n");

while(i<=2){

p=(pcb*)malloc(sizeof(struct pcbwork));

scanf("%d\t%d\t%d%c",&p->pid,&p->cur_count,&p->dem_count);

p->next=NULL;

if(head==NULL)

head=p;

else

q->next=p;

q=p;

i++;

}

第二部分:检测系统资源量够不够进程申请

if(res1.sys_res_sum>=sum)

{

res1.cur_count_sum=sum;

printf("系统资源量满足进程申请资源总量!!!");

}

else

printf("输入数据有错,请重新输入!!!");

p=head;

i=0;

while(i<=2){

p->alr_count=0;

p->need_count=p->dem_count;

strcpy(p->state,"就绪");

p=p->next;

i++;

}

第三部分:进行循环选择:当输入数字大于等于0.5时,执行随即分配算法;当输入数字小于0.5时执行银行家算法,并给出每个算法的执行结果-即有没有出现死锁,还是安全执行完毕。这里分别调用两个函数:random()和banker()

p=head;

printf("\n开始判断执行随即分配算法,还是银行家算法:\n");

while(!fabs(n-0.0)<0.0000000001)

{

scanf("%f",&n);

//如果n>=0.5就执行随即分配算法

if(n>=0.5){

printf("您当前选用的是随机分配算法!!!");

random(head,res1);

}else{

printf("您当前选用的是银行家分配算法!!!");

banker(head,res1);

} //执行执行银行家算法

}

}

本程序用C语言实现,将随机分配算法和银行家算法分别封装到函数中,运用了循环内执行if-else语句的方式,进行随机分配算法和银行家算法之间的切换选择。

3.4

下面是本程序流程图:资源分配模拟程序总流程图

开始

输入各进程依次

申请的资源数量

计算进程申请资源总量

进程申请资源总量超过系统资源数是

显示:输入数据有

错,请重新输入

将PCB中已占资源量初始化为0,进

程状态为就绪态

采用银行家算法,

判断输入数是否大

于0.5否

银行家算

银行家算

结束

图3.4.1-1资源分配模拟程序总流程图

开始

现行进程PCB 中已占资源量加上该进程的当前申请量

检查处于等待状态的进程,如果系统现存资源量能够满足某一进程的等待资源量,则置该等待进程的状态

为就绪态。

置该进程状态为完成态

顺序选择一个就绪进程作为现行进程

满足:系统现存资源数减去现行进程的当前申请量

归还该进程所占资源:系统现存资源数加资源归还量

显示:随机分配算法没有产生死锁

所有进程处于完成态?

系统现存

资源量不小于该进程当前的申请量

有就绪进程?该进程得到全部资源?

否是否

返回

显示:随机分配算法产生死

置当前PCB 进程为等待状态

返回

图3.4.1-2随机分配算法流程图

图3.4.1-3银行家算法流程图

开始

满足:系统现存资源数减去现行进程的当前申请量

检查处于等待状态的进程,如果系统现存资源量能够满足某一进程的等待资源量,则置该等待进程的状态

为就绪态。

顺序选择一个就绪进程作为现行进程

现行进程PCB 中已占资源量加上该进程的当前申请量

置该进程状态为完成态

;归还该进程所占资源:系统现

存资源数加资源归还量

显示:银行家算法没有产生

死锁

所有进程处于完成态?

系统现存

资源量不小于该进程

当前的申请量

该进程得到全部资源?

返回

置当前PCB 进程为等待状态

这里的返回说的是回到总流程图开始状态下:重新选择算法

3.5 程序实现及运行结果分析

随机分配算法运行结果如下:

图3.5.1-1随机分配算法结果图

结果分析:

?起初程序输入3个进程(进程id、资源申请量、资源最大需求量)

?输入大于0.5的数,让程序首先进行随机分配算法。随机分配算法的主要思想是:对当前处于就绪状态的进程,依次分配资源,能分配多少分配多少,即按顺序满足初次的各个进程初次的申请请求。进行循环操作,直到某一个进程的最大资源需求量没有得到满足,那么它以后的进程申请也将得不到满足,该组分配将进入死锁!!

?死锁的表现:某些进程一直得不到满足,与其他进程产生了互斥请求,结果,谁也没有得到资源。未完成的进程之间一直处于资源的争夺中,却一直都不能占有,且释放。由图可知,随机分配算法产生了死锁!!!

银行家算法运行结果如下:

图3.5.1-2银行家算法结果图

结果分析:

?起初程序输入3个进程(进程id、资源申请量、资源最大需求量)

?输入小于0.5的数,让程序执行随银行家算法。银行家算法思想与随机分配算法的思想类似。区别在于:系统掌握每个进程对资源的最大需求量,当进程要求申请资源时,系统就测试该进程尚需资源的最大量,如果系统中现存的资源数大于或等于该进程尚需的最大量时,则就满足进程的当前申请。

?可以看到,各个进程的资源以占有量=本进程的以占有量+系统资源释放资源量

?由上面结果可以看出当前银行家算法没有产生死锁!!

3.6 程序源代码

第一题-代码:参见文件夹LAB01_1(源代码所在的文件夹链接)

3.7 程序运行结果

程序运行结果见图(图3.4.1-1、图3.4.1-2、图3.4.1-3)

这里第一题测试用例为三个进程:

分别为:进程号当前申请量最大资源需求

1 3 5

2 3 3

3 2 2

第二题的设计思路及运行结果:4.1~4.7

4.1需求分析

本次实验是在预输入三个进程的基础上初始化,通过选择算法,来检测各种算法的分配的安全性。

4.2 数据结构设计与说明

定义进程结构体:

struct //定义进程结构体

{

int Pid; //进程号

int P_state; //状态

int num; //该进程所需资源总量

int have; //该进程已占有资源数量

int Waiting_num; //当前等待资源号

int pre_num; //上次申请资源号

}PCB[N];

定义系统资源结构体:

struct //定义资源结构体

{

int r_id; //资源id

int r_state; //资源状态

}resource[M];

4.3算法设计

第一部分:初始化三个进程和资源结构体

初始化三个进程:

//初始化当前各个资源申请量,这里以数组的结构体数组的形式初始化 printf("请输入每个进程所需要的资源总数\n");

//对进程进行初始化

printf("\n");

printf("进程编号所需资源总数\n");

for (i=0;i

{

PCB[i].Pid=i+1; //数组从0开始,但编序号为了可观性更好从1开始,所以为i+1

printf("%d ",PCB[i].Pid);

PCB[i].P_state=Ready; //进程初始态为就绪态

PCB[i].pre_num=0; //上次申请资源号,当前等待资源号初始值都设置为0

PCB[i].Waiting_num=0;

scanf("%d",&PCB[i].num);

PCB[i].have=0; //已占有资源数为0

}

初始化资源:

//对资源进行初始化

for (i=0;i

{

resource[i].r_id=i+1; //初始化资源号从1开始

resource[i].r_state=0; //资源的状态初始化为0

}

printf("执行按序分配算法\n");

order();

}

第二部分:写按需分配算法

首先:这里运用了while循环+内部选择的方法。

从头挑选处于就绪状态的进程,先判断各个资源有没有被进程占用,如果占用了,则在资源中将资源的状态值赋予这个进程的进程号。开始的时候,默认任何资源都未被进程占用!!

if (PCB[j].P_state==Ready) //进程为就绪状态,分配资源

{

printf("现在为%d号进程分配资源:\n",j+1);

printf("%d号进程现拥有资源:",j+1);

for (i=0;i

{

if (resource[i].r_state==j+1) //通过循环查找,该进程所占有的所有资源。(判断所有资源的r_state是否为当前进程号)

{

printf("%d ",resource[i].r_id);

}

}

其次:判断是否有违按序分配。

while (sign<=PCB[j].pre_num-1) //当输入的序号小于进程上次申请的资源号时,违背了按序分配原则。重新输入

{

printf("你输入的资源序号违背按序分配,请申请其他资源。。。\n");

printf("请输入你想要分配的资源号1 ~ %d :\n",M);

scanf("%d",&sign);

}

接着:判断死锁发生条件

while ((PCB[j].num-PCB[j].have)>(M+1-sign)) //当还需要的资源数大于可以分配的资源数时,如果其余资源都不能释放,则可能发生死锁

{ //要求重新输入,申请其它资源。

printf("你输入的资源序号可能导致死锁,请申请其他资源。。。\n");

printf("请输入你想要分配的资源号1 ~ %d :\n",M);

scanf("%d",&sign);

}

最后:分配资源,修改资源状态和进程上一次申请资源号

printf("%d号资源成功被分配给%d号进程\n",sign,j+1);

PCB[j].pre_num=sign; //分配成功后,将资源号赋给此进程上次申请资源号。

PCB[j].have++; //进程已占有资源数加1

resource[sign-1].r_state=j+1; //将进程号赋值给所分配资源的r_state

if (PCB[j].num==PCB[j].have) //当进程的总需求量等于已占有资源量时,进程运行完毕。

{

printf("%d号进程已经运行完毕,该进程将终止,该进程所占有的资源将被释放\n",j+1);

PCB[j].P_state=Finished; //进程的状态设置为完成态。

for (i=0;i

{

if (resource[i].r_state==j+1)

{

resource[i].r_state=0;

}

}

}

}

第三部分:主函数调用order()函数。

order();

本程序用C语言实现,主要运用了循环内执行if-else语句的方式。

4.4

下面是本程序流程图:资源按序分配模拟程序流程图

图3.4.1-3银行家算法流程图

图4.4.1-1按序分配算法流程图

开始

将被分配资源置为占用状

归还该进程占用的资源,并将这些资源置为未被占用状态,并且释放那些等待资源号的进程,并改等待状

态为就绪态

输入各进程依次申请的资

源号把资源分配给进程,将申请的资源

号填入PCB

置进程为完成态

将进程置为等待状态,并在PCB 中填入等待资

源号

是所有进程处于完成态?

现行进程当

前申请的资源号小于上次

申请的资源号

该进程得到所有资源?

置各进程的初始状态为就

绪态

顺序找出一个就绪进程为

现行进程

否显示:没有按序申

请,不能分配

当前资源是否被占用?

是结束否

4.5 程序实现及运行结果分析

按序分配算法运行结果如下:

图4.5.1-1按序分配算法结果图

图4.5.1-2按序分配算法结果图

结果分析:

?起初程序输入3个进程(为每个进程定下所需资源数)

?循环为每个进程输入资源号,一直循环下去。第二次循环的时候,条件约束为

每次输入的需要分配的资源号绝对不能小于上次已为该进程分配的资源号。并显示输出,该进程已经占有的资源号。如果该进程已经占有了(例如5号资源),那么其他的进程如果再申请5号资源,提示继续申请的话,可能产生死锁!!让其他进程放弃申请已经被占用了的资源号。

?如果其他进程一直申请已被占用资源号,程序将进入死锁,必须强制退出。如

果程序正常分配资源结束的话,程序结束,自动退出。

4.6 程序源代码

第二题-代码:参见文件夹LAB01_1(源代码所在的文件夹链接)

4.7 程序运行结果

程序运行结果见图(图4.5.1-1、图4.5.1-2)

这里按序分配算法的测试用例如下图:

5 实习总结

1、本次实验过程中,通过此次题目,资源分配一些基本的预防死锁的算法:随机分配算法、银行家算法、按需分配算法。

2、实验中出现的问题:对结构体指针数组的操作出现了几次非常严重的错误,在老师的帮助下,自己努力查资料,终于得以解决。对单链表操作、malloc动态分配内存空间运用出现了问题,造成了内存泄漏。

遇到的最棘手的问题是,当释放内存的时候,free函数在while中出现了死循环,单步执行,根本走不出while循环,内存一直没有释放成功。

3、通过本次实验,觉得实验程序是建立在对原理深刻理解的基础上的。只有对流程图的每一步都分析清楚了,才可以动手写代码,否则都是徒劳又浪费时间的。通过本实验,提高了自主学习的能力,很多事情都是一步步自己动手。最终有一种苦尽甘来的感觉,觉得小有成就。再有感触很深的一点就是,学会了换角度思考问题。很多程序,特别是if-else 语句的使用,正面判断不行的话,就进行反面判断。这点体会很深,希望下次写出更棒的程序!!

操作系统实验报告--实验一--进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

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

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

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

一、实验目的 熟悉主存的分配与回收。理解在不同的存储管理方式下,如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。 二、实验内容和要求 主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配,就是解决多道作业或多进程如何共享主存空间的问题。所谓回收,就是当作业运行完成时将作业或进程所占的主存空间归还给系统。 可变分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需求,并且分区个数是可以调整的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入,作业等待。随着作业的装入、完成,主存空间被分成许多大大小小的分区,有的分区被作业占用,而有的分区是空闲的。 实验要求使用可变分区存储管理方式,分区分配中所用的数据结构采用空闲分区表和空闲分区链来进行,分区分配中所用的算法采用首次适应算法、最佳适应算法、最差适应算法三种算法来实现主存的分配与回收。同时,要求设计一个实用友好的用户界面,并显示分配与回收的过程。同时要求设计一个实用友好的用户界面,并显示分配与回收的过程。 三、实验主要仪器设备和材料 实验环境 硬件环境: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”。 设置一个内存空闲分区链,内存空间分区通过空闲分区链来管理,在进行内存分配时,系统优先使用空闲低端的空间。 设计一个空闲分区说明链,设计一个某时刻主存空间占用情况表,作为主存当前使用基础。初始化空间区和已分配区说明链的值,设计作业申请队列以及作业完成后释放顺序,实现主存的分配和回收。要求每次分配和回收后显示出空闲内存分区链的情况。把空闲区说明

嵌入式操作系统实验报告

中南大学信息科学与工程学院实验报告 姓名:安磊 班级:计科0901 学号: 0909090310

指导老师:宋虹

目录 课程设计内容 ----------------------------------- 3 uC/OS操作系统简介 ------------------------------------ 3 uC/OS操作系统的组成 ------------------------------ 3 uC/OS操作系统功能作用 ---------------------------- 4 uC/OS文件系统的建立 ---------------------------- 6 文件系统设计的原则 ------------------------------6 文件系统的层次结构和功能模块 ---------------------6 文件系统的详细设计 -------------------------------- 8 文件系统核心代码 --------------------------------- 9 课程设计感想 ------------------------------------- 11 附录-------------------------------------------------- 12

课程设计内容 在uC/OS操作系统中增加一个简单的文件系统。 要求如下: (1)熟悉并分析uc/os操作系统 (2)设计并实现一个简单的文件系统 (3)可以是存放在内存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4)编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。 本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 I.uC/OS操作系统简介 μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全 可以由用户自己根据需要分别实现。 uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。 uC/OS操作系统的组成 μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。如下图:

人力资源测评实验报告

JIANGSU UNIVERSITY OF TECHNOLOGY 人才测评实验报告 学院名称:商学院 专业:人力资源管理 班级:___________ 学号:_________ 姓名:_______ 成绩: 20 13 年5 月 第 1 次人才测评实验报告

班级:学号:姓名:得分: (一)、实验概述 1、《加利福尼亚心理测验量表》,测验时间:5月7号; 2、《逻辑能力测验》,测验时间:5月7号; 3、《抑郁自评量表》,测验时间:5月7号; 4、《发散性思维量表》,测验时间:5月14号; 5、《管理能力测验》,测验时间:5月14号; 6、《批判思维测验》,测验时间:5月14号; 7:《瑞文标准推理测验》,测验时间:5月14号; 8、《团队角色问卷》,测验时间:5月14号; 9、《职业锚问卷》,测验时间:5月14号。 (二)、实验内容 《加利福尼亚心理测验量表》 简介:适用于我国14—55岁年龄范围人群,受试者应具有小学以上文化程度,既可用于团体,也用于个别实施。测验应用范围比较广泛,在培训和人才配置方面可用于对被试成就、创造性潜能的预测,并可以为专业选择提供指导;在选拔管理者方面,可以用于对应聘者的管理潜能,工作效绩的预测提供参考。 测验结果:支配性,很强,为了实现目标,通常十分强调自己的观点,表现得非常果断,典型特征:果断、自信、支配、任务导向;上进心,很强,独立、富有想象力、善于利用出现在面前的机会,典型特征:有企图心、自信、聪明、多才多艺、兴趣广泛、果断、主动;社交性,很强,成熟老练、兴趣广泛,典型特征:友善、好交际、自信、有企图心、有攻击性、精力充沛、健谈、果断、有进取心;自在性,中等,比较喜欢人际交往,在人际交往中能保持良好的姿态;自尊性,对自己感到满意,信赖自己,有清晰的自我定向,自信。友善;幸福感,能一定程度上信任他人,人际关系还可以;责任心,很强,对待工作尽心尽责,给人的感觉是可信赖,通情达理,典型特征:尽心尽责、有责任感、可信赖、考虑周全、刻苦勤奋、有高效率;社会性,很强,有组织性、适应性强、有效率,典型特征:可靠、有组织、可信赖、稳定、合作;自制力,中等,维护常规,被别人评价为有理性、可信赖,但有点儿缺乏主动性;容忍性,很强,很可能比较聪明,兴趣广泛,在社交中善于容忍他人,不批评他人,能够很容易接受不同的信仰的价值观,因宽容、随意、善良从而讨人喜爱、给人以良好印象;好印象,很强,具备较高的调节适应水平;从众性,中等,不反对传统看法,但也能接受新的观念,能够用平常的心态来看待世界;遵从成就,很强,有恒心,刻苦勤奋,特别是在需要符合外部标准的时候更是如此;独立成就,很强,喜欢不需要规则和结构的工作,重视创造性和原创性,兴趣广泛、有激情,对哲学问题感兴趣,典型特征:聪明、思维清晰、有逻辑、有洞察力、有先见之明;智利效能,中等,任然具有较高的能力,但有时候会对自己智力上的能力有所怀疑,显得不太自信;共鸣性,中等,能够基本察觉别的内心的所需,会通过自己的言行反应一定程度地及其别人做事的热情;灵活性,中等,乐于倾听并考虑多方观点,不独断,思维灵活、新颖,能够想出原创性的想法。也可能是独立、自信、乐观的,愿意进行智力活动;女性化,很强,需要持续而稳定的保障,温和、有同情心、易伤感、依赖。

操作系统实验内存分配

精心整理西安邮电大学 (计算机学院) 课内实验报告 1. (1 (2 (3 原因,写出实验报告。 2.实验要求: 1)掌握内存分配FF,BF,WF策略及实现的思路; 2)掌握内存回收过程及实现思路; 3)参考本程序思路,实现内存的申请、释放的管理程序,调试运行,总结程序设计中出现的问题并找出原因,写出实验报告。

3.实验过程: 创建进程: 删除其中几个进程:(默认以ff首次适应算法方式排列) Bf最佳适应算法排列方式: wf最差匹配算法排列方式: 4.实验心得: 明 实验中没有用到循环首次适应算法,但是对其他三种的描述还是很详细,总的来说,从实验中还是学到了很多。 5.程序源代码: #include #include #include #include

#define PROCESS_NAME_LEN 32 //进程名长度 #define MIN_SLICE 10 //最小碎片的大小#define DEFAULT_MEM_SIZE 1024 //内存大小 #define DEFAULT_MEM_START 0 //起始位置 /*内存分配算法*/ #define MA_FF 1 #define MA_BF 2 #define MA_WF 3 /*描述每一个空闲块的数据结构*/ struct free_block_type { }; /* /* { }; /* /* void display_menu(); int set_mem_size(); void set_algorithm(); void rearrange(int algorithm); int rearrange_WF(); int rearrange_BF(); int rearrange_FF(); int new_process(); int allocate_mem(struct allocated_block *ab);

实时操作系统报告

实时操作系统课程实验报告 专业:通信1001 学号:3100601025 姓名:陈治州 完成时间:2013年6月11日

实验简易电饭煲的模拟 一.实验目的: 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,基于多任务的模式的编程方法。锻炼综合应用多任务机制,任务间的通信机制,内存管理等的能力。 二.实验要求: 1.按“S”开机,系统进入待机状态,时间区域显示当前北京时间,默认模式“煮饭”; 2.按“C”选择模式,即在“煮饭”、“煮粥”和“煮面”模式中循环选择; 3.按“B”开始执行模式命令,“开始”状态选中,时间区域开始倒计时,倒计时完成后进入“保温”状态,同时该状态显示选中,时间区域显示保温时间; 4.按“Q”取消当前工作状态,系统进入待机状态,时间区域显示北京时间,模式为当前模式; 5.按“X”退出系统,时间区域不显示。 6.煮饭时长为30,煮粥时长为50,煮面时长为40. 三.实验设计: 1.设计思路: 以老师所给的五个程序为基础,看懂每个实验之后,对borlandc的操作有了大概的认识,重点以第五个实验Task_EX为框架,利用其中界面显示与按键扫描以及做出相应的响应,对应实现此次实验所需要的功能。 本次实验分为界面显示、按键查询与响应、切换功能、时钟显示与倒计时模块,综合在一起实验所需功能。 2.模块划分图: (1)界面显示: Main() Taskstart() Taskstartdispinit() 在TaskStartDispInit()函数中,使用PC_DispStr()函数画出界面。

(2)按键查询与响应: Main() Taskstart() 在TaskStart()函数中,用if (PC_GetKey(&key) == TRUE)判断是否有按键输入。然后根据key 的值,判断输入的按键是哪一个;在响应中用switch语句来执行对应按键的响应。 (3)切换功能: l计数“C”按 键的次数 M=l%3 Switch(m) M=0,1,2对应于煮饭,煮粥,煮面,然后使用PC_DispStr()函数在选择的选项前画上“@”指示,同时,在其余两项钱画上“”以“擦出”之前画下的“@”,注意l自增。 四.主要代码: #include "stdio.h" #include "includes.h" #include "time.h" #include "dos.h" #include "sys/types.h" #include "stdlib.h" #define TASK_STK_SIZE 512 #define N_TASKS 2 OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; OS_STK TaskStartStk[TASK_STK_SIZE]; INT8U TaskData[N_TASKS];

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

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

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

人力资源实验报告

1.基础信息 实验目的 基础信息模块是让学生在实验开始之前预先设置一些企业的基础信息,以方便在接下来的各个模块当中,学生可以顺利的进行实验操作。 奥派人力资源管理教学实践平台中的基础信息模块包含企业基础信息、行业信息、等级信息、组织结构形式和员工类别,让学生可以很快对企业有所了解。 实验介绍 1.企业基础信息 企业基础信息包括了企业代号、企业名称、企业类型、企业规模、法人代表、企业地址以及企业简介等信息。 2.行业信息 行业信息列表包括了现有的一些行业名称。 3.等级信息 等级信息列表包括了现有的一些等级名称。 4.组织结构形式 组织结构形式列表包括了现有的一些组织结构形式。 5.员工类别 员工类别列表包括了现有的一些员工类别信息。 2.组织设计 实验目的 组织设计主要是研究如何合理设计企业的组织架构。组织架构(组织结构)是指组织内部各组成部分之间关系的一种模式。它决定了组织中的指挥系统、信息沟通网络和人际关系,最终影响组织效能的发挥组织架构模式能随组织任务的发展而不断演变。 奥派人力资源管理教学实践平台中的组织设计模块包含影响组织设计因素、工作流程、确定组织结构形式、设定部门、职能分析、设定组织结构框架和岗位人员配备,学生可以在操作模拟实验的同时来提高他们分析和解决实际问题的能力。 实验介绍 1.影响组织设计因素 组织设计的任务是确定为保证组织目标的达成,组织中需要设立哪些岗位和部门,并规定这些岗位和部门间的相互关系。组织的目标不同,为实现目标所需进行的活动不同,活动的环境和条件不同。企业中需要设立不同的岗位,这些岗位又在不同的部门,这些部门之间的相互关系也必然表现出不同的特征,从而成为影响企业经营活动、影响企业组织设计的主要因素。主要因素包括:企业经营战略、外部环境、企业发展阶段、部门技术类型、企业投资、企业生产能力、部门间工作流程的依存性等。 2.工作流程 工作流程包括业务流程和管理流程。业务流程就是有组织的活动,相互联系,为客户创造价值。管理流程就是一种以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的的系统化方

可变分区存储管理方式的内存分配和回收实验报告

一.实验目的 通过编写和调试存储管理的模拟程序以加深对存储管理方 案的理解,熟悉可变分区存储管理的内存分配和回收。 二.实验内容 1.确定内存空间分配表; 2.采用最优适应算法完成内存空间的分配和回收; 3.编写主函数对所做工作进行测试。 三.实验背景材料 实现可变分区的分配和回收,主要考虑的问题有三个:第一,设计记录内存使用情况的数据表格,用来记录空闲区和作业占用的区域;第二,在设计的数据表格基础上设计内存分配算法;第三,在设计的数据表格基础上设计内存回收算法。 首先,考虑第一个问题,设计记录内存使用情况的数据表格,用来记录空间区和作业占用的区域。 由于可变分区的大小是由作业需求量决定的,故分区的长度是预先不固定的,且分区的个数也随内存分配和回收变动。总之,所有分区情况随时可能发生变化,数据表格的设计必须和这个特点相适应。由于分区长度不同,因此设计的表格应该包括分区在内存中的起始地址和长度。由于分配时空闲区有时会变成两个分区:空闲区和已分分区,回收内存分区时,可能会合并空闲分区,这样如果整个内存采用一张表格记录己分分区和空闲区,就会使表格操作繁琐。分配内存时查找空闲区进行分配,然后填写己分

配区表,主要操作在空闲区;某个作业执行完后,将该分区变成空闲区,并将其与相邻的空闲区合并,主要操作也在空闲区。由此可见,内存的分配和回收主要是对空闲区的操作。这样为了便于对内存空间的分配和回收,就建立两张分区表记录内存使用情况,一张表格记录作业占用分区的“己分分区表”;一张是记录空闲区的“空闲区表”。这两张表的实现方法一般有两种:一种是链表形式,一种是顺序表形式。在实验中,采用顺序表形式,用数组模拟。由于顺序表的长度必须提前固定,所以无论是“已分分区表”还是“空闲区表”都必须事先确定长度。它们的长度必须是系统可能的最大项数。 “已分分区表”的结构定义 #definen10//假定系统允许的最大作业数量为n struct {floataddress;//已分分区起始地址 floatlength;//已分分区长度、单位为字节 intflag;//已分分区表登记栏标志,“0”表示空栏目,实验中只支持一个字符的作业名 }used_table[n];//已分分区表 “空闲区表”的结构定义 #definem10//假定系统允许的空闲区最大为m struct {floataddress;//空闲区起始地址

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 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)《用人之道-人力资源电子对抗系统》是国内领先的全面训练企业人力资源管理实战技能的平台。产品在引进国际上成熟的人力资源实战训练模型的基础上,针对国内高校应用现状及市场环境,吸收卓越企业在人力资源管理方面的最新成果与经验,进行了针对性的开发与完善,是目前国内唯一的全程模拟实战的人力资源管理技能训练与提升系统。 《用人之道》是一种全新的实验实训课程,产品运用计算机软件与网络技术,结合严密和精心设计的商业模拟管理模型及企业决策博弈理论,融合现代企业人力资源管理思想,全面模拟真实企业的商业运营环境,学生在虚拟商业社会中完成企业人力资源管理的各项决策。电子对抗实践课程通过计算机模拟真实企业竞争商业环境,融合了人力资源管理的选、育、用、留等知识内容,同时涵盖了企业组织设计、战略规划、市场营销、财务管理、团队合作、沟通、执行力等多职能领域的管理知识与综合技能。课程将这些知识和教学内容设计在学生亲自参与的实践运营过程中,使学生对所学的人力资源和经管理论知识加深实践理解,提升学生实际运用知识的能力。 (2)《用人之道》的主要功能: 《用人之道》强调的是学生对人力资源管理核心能力的训练与 提升,真正帮助学生提升实际分析问题与解决问题的能力,提升学生的综合素质,最终提升学生的就业择业能力与快速适合企业环境的能力。

《用人之道》采用的是国际上最为流行的商业模拟教学技术来实现的培训课程和实践工具。与传统授课式或案例式学习方法比较,本课程有效解决了传统培训枯燥的说教模式和空洞的讨论内容,学生在教师的指导下,由若干名学生组成模拟企业,为完成经营目标,借助现代人力资源管理知识,亲自参与企业运营管理,独立完成各项经营决策,掌握在真实企业运营中会遇到的各种决策情况,并对出现的问题和运营结果进行有效分析与评估,从而对人力资源管理的知识技能有更深切的体会与感受,并达到提升综合管理技能与分析解决问题的能力。 对于企业来说,人力资源管理的根本目的是为了企业绩效的提升,并最终体现在企业利润的持续增长上。如何提升企业经营绩效,实现企业战略目标,是人力资源管理工作的意义与最终目标。 (3)《用人之道》特色优势: 《用人之道》能力训练课程不仅是对课程知识的学习与巩固,更是强调人力资源实战技能的训练与提升,关注人力资源管理工作对企业绩效提升的价值,是目前国内领先的人力资源管理模拟实战教学训练系统。 1、科学扎实的理论基础,逼真模拟的企业运营 2、授课与实战紧密结合,强化综合能力的训练 3、学生主动参与度更高,学习训练的效果更好 4、教师容易授课,学生方便使用 5、应用更灵活,技术更先进。

嵌入式实时操作系统实验报告

嵌入式实时操作系统实验报告 任务间通信机制的建立 系别计算机与电子系 专业班级***** 学生姓名****** 指导教师 ****** 提交日期 2012 年 4 月 1 日

一、实验目的 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,任务使用信号量的一般原理。掌握在基于优先级的可抢占嵌入式实时操作系统的应用中,出现优先级反转现象的原理及解决优先级反转的策略——优先级继承的原理。 二、实验内容 1.建立并熟悉Borland C 编译及调试环境。 2.使用课本配套光盘中第五章的例程运行(例5-4,例5-5,例5-6),观察运行结果,掌握信号量的基本原理及使用方法,理解出现优先级反转现象的根本原因并提出解决方案。 3.试编写一个应用程序,采用计数器型信号量(初值为2),有3个用户任务需要此信号量,它们轮流使用此信号量,在同一时刻只有两个任务能使用信号量,当其中一个任务获得信号量时向屏幕打印“TASK N get the signal”。观察程序运行结果并记录。 4. 试编写一个应用程序实现例5-7的内容,即用优先级继承的方法解决优先级反转的问题,观察程序运行结果并记录。 5.在例5-8基础上修改程序增加一个任务HerTask,它和YouTask一样从邮箱Str_Box里取消息并打印出来,打印信息中增加任务标识,即由哪个任务打印的;MyTask发送消息改为当Times为5的倍数时才发送,HerTask接收消息采用无等待方式,如果邮箱为空,则输出“The mailbox is empty”, 观察程序运行结果并记录。 三、实验原理 1. 信号量 μC/OS-II中的信号量由两部分组成:一个是信号量的计数值,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的等待任务表。用户要在OS_CFG.H中将OS_SEM_EN开关量常数置成1,这样μC/OS-II 才能支持信号量。

操作系统实验报告

操作系统实验报告 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的镜像文件,如图所示:

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

一、实验目的 熟悉主存的分配与回收。理解在不同的存储管理方式下.如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。 二、实验内容和要求 主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配.就是解决多道作业或多进程如何共享主存空间的问题。所谓回收.就是当作业运行完成时将作业或进程所占的主存空间归还给系统。 可变分区管理是指在处理作业过程中建立分区.使分区大小正好适合作业的需求.并且分区个数是可以调整的。当要装入一个作业时.根据作业需要的主存量查看是否有足够的空闲空间.若有.则按需要量分割一个分区分配给该作业;若无.则作业不能装入.作业等待。随着作业的装入、完成.主存空间被分成许多大大小小的分区.有的分区被作业占用.而有的分区是空闲的。 实验要求使用可变分区存储管理方式.分区分配中所用的数据结构采用空闲分区表和空闲分区链来进行.分区分配中所用的算法采用首次适应算法、最佳适应算法、最差适应算法三种算法来实现主存的分配与回收。同时.要求设计一个实用友好的用户界面.并显示分配与回收的过程。同时要求设计一个实用友好的用户界面,并显示分配与回收的过程。 三、实验主要仪器设备和材料 实验环境 硬件环境: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”。 设置一个内存空闲分区链.内存空间分区通过空闲分区链来管理.在进行内存分配时.系统优先使用空闲低端的空间。 设计一个空闲分区说明链.设计一个某时刻主存空间占用情况表.作为主存当前使用基础。初始化空间区和已分配区说明链的值.设计作业申请队列以及作业完成后释放顺序.实现主存的分配和回收。要求每次分配和回收后显示出空闲内存分区链的情况。把空闲区说明链的变化情况以及各作业的申请、释放情况显示打印出来。

操作系统实验报告

实验报告 实验课程名称:操作系统 实验地点:南主楼七楼机房 2018—2019学年(一)学期 2018年 9月至 2019 年 1 月 专业: 班级: 学号: 姓名: 指导老师:刘一男

实验一 实验项目:分时系统模拟 实验学时:2实验日期: 2018-10-25 成绩: 实验目的利用程序设计语言模拟分时系统中多个进程按时间片轮转调度算法进行进程调度的过程; 假设有五个进程A,B,C,D,E,它们的到达时间及要求服务的时间分别为:进程名 A B C D E 到达时间0 1 2 3 4 服务时间 4 3 4 2 4 时间片大小为1,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。 执行过程并计算各进程的周转时间及带权周转时间。 轮转调度:BDACE

(1)修改时间片大小为2,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。 轮转调度:ADBCE (2)修改时间片大小为4,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间.

顺序:ABCDE 1、思考 时间片的大小对调度算法产生什么影响?对计算机的性能产生什么影响?答:通过对时间片轮转调度算法中进程最后一次执行时间片分配的优化,提出了一种改进的时间片轮转调度算法,该算法具有更好的实时性,同时减少了任务调度次数和进程切换次数,降低了系统开销,提升了CPU的运行效率,使操作系统的性能得到了一定的提高。 A B C D E 时间片为1 周转时间12 9 14 8 13 3 3 3.5 4 3.25 带权周转 时间 时间片为2 周转时间8 12 13 7 13 2 4 3.25 3.5 3.25 带权周转 时间 时间片为4 周转时间 4 6 9 10 13 1 2 2.25 5 3.25 带权周转 时间

操作系统实验报告

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

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

实时操作系统实验报告2

实时操作系统实验报告 专业:11通信工程 学号:20110306136 姓名: 王帅 指导老师:申屠浩

实验二 任务管理实验 实验目的: 1、理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程; 2、掌握μC/OS -II 中任务管理的基本方法(挂起、解挂); 3、熟练使用μC/OS -II 任务管理的基本系统调用。 实验要求与思路: 为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1和T3三个任务,它们交替运行,如图2-2所示。 T0 T1 T2 T3 T4 T5 T6 T7 T8 图2-2 注意: 图中的栅格并不代表严格的时间刻度,而仅仅表现各任务启动和执行的相对先后关系。 说明: 在系统完成初始化后,可以先创建并启动优先级最低的TaskStart ,由它创建其他3个应用任务T0、T1和T2,之后整个系 T0 T2 T1 T0 T1 T2 T1 T0

统的运行流程如下: 1)优先级最高的T0开始执行,之后T0挂起自己; 2)然后系统调度选中T1开始执行,之后T1挂起自己; 3)接着系统调度选中T2,之后唤醒T0; 4)如此循环 实现提示: 在启动任务中创建三个任务后,应挂起任务1和任务2。 在每个任务恢复其它任务并挂起自己之前,显示当前三个任务的状态,并延时1秒。 函数说明: void PC_GetDateTime (char *s); 获取"YYYY-MM-DD HH:MM:SS"格式的时间字串存放在字符串s中,s的长度最少为21字节。 void PC_DispStr (INT8U x, INT8U y, INT8U *s, INT8U color); 在y行x列以color颜色值显示字串s,注意color由背景色和前景色两种颜色构成。 INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli); 按时、分、秒、毫秒设置进行延时。 void OSTimeDly (INT16U ticks) 按ticks值进行延时,1 ticks一般为10ms。 INT32U OSTimeGet (void)

相关文档
相关文档 最新文档