西北工业大学操作系统实验OS310.docx

上传人:b****8 文档编号:13194874 上传时间:2023-06-11 格式:DOCX 页数:15 大小:177.59KB
下载 相关 举报
西北工业大学操作系统实验OS310.docx_第1页
第1页 / 共15页
西北工业大学操作系统实验OS310.docx_第2页
第2页 / 共15页
西北工业大学操作系统实验OS310.docx_第3页
第3页 / 共15页
西北工业大学操作系统实验OS310.docx_第4页
第4页 / 共15页
西北工业大学操作系统实验OS310.docx_第5页
第5页 / 共15页
西北工业大学操作系统实验OS310.docx_第6页
第6页 / 共15页
西北工业大学操作系统实验OS310.docx_第7页
第7页 / 共15页
西北工业大学操作系统实验OS310.docx_第8页
第8页 / 共15页
西北工业大学操作系统实验OS310.docx_第9页
第9页 / 共15页
西北工业大学操作系统实验OS310.docx_第10页
第10页 / 共15页
西北工业大学操作系统实验OS310.docx_第11页
第11页 / 共15页
西北工业大学操作系统实验OS310.docx_第12页
第12页 / 共15页
西北工业大学操作系统实验OS310.docx_第13页
第13页 / 共15页
西北工业大学操作系统实验OS310.docx_第14页
第14页 / 共15页
西北工业大学操作系统实验OS310.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

西北工业大学操作系统实验OS310.docx

《西北工业大学操作系统实验OS310.docx》由会员分享,可在线阅读,更多相关《西北工业大学操作系统实验OS310.docx(15页珍藏版)》请在冰点文库上搜索。

西北工业大学操作系统实验OS310.docx

西北工业大学操作系统实验OS310

评语:

课中检查完成的题号及题数:

课后完成的题号与题数:

成绩:

指导教师:

实验报告三

实验名称:

七、八

日期:

2013.05.23

班级:

10011007

学号:

2010302555

姓名:

杨宏志

实验七理解线程的相关概念

1.实验目的

理解当操作系统引入线程的概念后,进程是操作系统独立分配资源的单位,线程

成为系统调度的单位,与同一个进程中的其他线程共享程序空间。

2.实验预习内容

预习线程创建和构造的相关知识,了解C语言程序编写的相关知识。

3.实验内容及步骤

(1)编写一个程序,在其main()函数中创建一个(或多个)线程,观察该线

程是如何与主线程并发运行的。

输出每次操作后的结果;

(2)在main()函数外定义一个变量shared(全局变量),在main()中创建一个线

程,在main()中和新线程shared进行循环加/减操作,观察该变量的变化;

(3)修改程序把shared变量定义到main()函数之内,重复第

(2)步操作,

观察该变量的变化。

4.实验总结

(1)观察上述程序执行结果,并分析原因;

(2)提交源程序清单,并附加流程图与注释。

思考:

分析进程和线程的不同之处。

5.具体实现

1)观察线程并发性:

#include

#include

#include

void*func(void*params)

{

while

(1)

{

printf("iamthethread2\n");

sleep

(1);

}

returnNULL;

}

intmain()

{

pthread_ttid;

intres=pthread_create(&tid,NULL,func,NULL);

while

(1)

{

printf("iammainthread\n");

sleep

(1);

}

return0;

}

2)全局变量共享

#include

#include

#include

intshared=0;

void*func(void*params)

{

while

(1)

{

shared--;

printf("iamthread2shared=%d\n",shared);

sleep

(1);

}

returnNULL;

}

intmain()

{

pthread_ttid;

intres=pthread_create(&tid,NULL,func,NULL);

while

(1)

{

shared++;

printf("iammainthreadshared=%d\n",shared);

sleep

(1);

}

return0;

}

3)局部变量,指针传参

#include

#include

#include

void*func(void*params)

{

while

(1)

{

printf("iamthread2shared=%d\n",*(int*)params);

(*(int*)params)--;

sleep

(1);

}

returnNULL;

}

intmain()

{

pthread_ttid;

intshared=0;

intres=pthread_create(&tid,NULL,func,(void*)(&shared));

while

(1)

{

shared++;

printf("iammainthreadshared=%d\n",shared);

sleep

(1);

}

return0;

}

 

实验八请求分页存储管理设计

1.实验目的

模拟存储管理常用的请求分页存储管理技术,通过本实验使学生更加深入的理解

虚拟内存的思想和主要的页面淘汰算法。

2.实验预习内容

学习虚拟存储器的相关基础知识,了解请求分页存储管理系统的原理和具体实现过程,熟悉各种主要的页面调度算法。

3.实验内容及步骤

(1)通过随机数产生一个指令行列,共320条指令,指令中的地址按下述原则生成:

50%的指令是顺序执行;25%的指令均匀分布在前地址部分;25%的指令均匀分布在后地址部分。

(2)具体实验办法是:

在[0,319]之间选一起始点M;顺序执行一条指令,即第

M+1条;向前地址[0,M-1]中执行一条指令M;顺序执行一条指令,即第M+1条;向后地址[M+2,319]中执行一条指令M。

如此继续,直至产生320条指令。

使用产生随机数的函数之前,首先要初始化设置RAN()产生序列的开始点,SRAND(400);然后计算随机数,产生指令序列。

例如:

a[0]=1.0*rand()/32767*319+1;

a[1]=a[0]+1;

a[2]=1.0*rand()/32767*(a[1]-1)+1;

a[3]=a[2]+1;

a[4]=319-1.0*rand()/32767*(a[3]-1);其中rand()和srand()为Linux操作系统提供的

函数分别进行初始化和产生随机数,多次重复使用这5条指令,产生以后的指

令序列。

(3)将指令序列变换成页面地址流:

假设,页面大小为1KB;用户实存容量(内存区容量)为4页或32页;用户虚存容量(逻辑地址空间容量)为32KB;用户虚

存容量32KB,每1KB中放10条指令,共320条指令序列,按其地址0~9在0页,

10~19在1页,…….,310~319在31页。

(4)使用不同的页面调度算法处理缺页中断,并计算不同实存容量下的命中率:

先进先出(FIFO)算法;最近最少使用(LRU)算法;命中率的算法为:

命中率=1-(缺页中断次数/页地址流长度)。

本实验中,页地址流长度为320,缺页中断次数为每次访问相应指令时,该指令所对应的页不在内存的次数。

4.实验总结

(1)编制的各程序采用的数据结构及符号说明,提交源程序清单,并附加流程图与注释;

(2)打印页表,对不同算法打印每次调出和装入的页面号,执行最后一条指令后在主存中页面号;

(3)根据实验结果分析并比较不同淘汰算法对不同实存容量的命中率,进而作出评价。

 

5.具体实现

Fifo使用循环队列实现

#include

#include

#include

 

#defineHARD_NUM4

#defineINSTRUCT320

#defineVIRTUAL_NUM32

intinstruct[INSTRUCT]={0};

typedefstruct{

intid;//虚存id

boolflag;//是否装入

intcount;//最近使用次数

}HM;

typedefstruct{

HMhm[HARD_NUM+1];

inthead;

inttail;

}FIFO;

typedefstruct{

HMhm[HARD_NUM];

}LRU;

 

FIFOfifo;

LRUlru;

voidinit();

voidfifoTest();

boolisInFifo(intpage);

voidlruTest();

intmain()

{

init();

printf("先进先出fifo...\n");

fifoTest();

printf("\n\n");

printf("最近最少使用fifo...\n");

lruTest();

system("pause");

return0;

}

voidinit()

{

inti,j;

srand(time(0));

for(i=0;i

{

instruct[i]=1.0*rand()/RAND_MAX*320;

instruct[i+1]=instruct[i]+1;

instruct[i+2]=1.0*rand()/RAND_MAX*instruct[i];

instruct[i+3]=instruct[i+2]+1;

instruct[i+4]=319-1.0*rand()/RAND_MAX*instruct[i+3];

}

}

voidfifoTest()

{

inti,j;

intlack=0;//缺页次数

//内存初始化

for(i=0;i

{

fifo.hm[i].id=0;

fifo.hm[i].flag=false;

fifo.hm[i].count=0;

}

//模拟执行320条指令

for(i=0;i

{

//计算该指令在那一页,判断是否在FIFO中

intpage=instruct[i]%VIRTUAL_NUM;

boolisIn=isInFifo(page);

if(isIn)//在实存中

{

printf("%dalreadinfifo\n",instruct[i]);

}

else//缺页,插入队列

{

lack++;

if((fifo.tail+1)%(HARD_NUM+1)==fifo.head)//队列已满

{

printf("page%din,page%dout\n",page,fifo.hm[fifo.head].id);

fifo.hm[fifo.head].id=page;

fifo.tail=fifo.head;

fifo.head=(fifo.head+1)%(HARD_NUM+1);

}

else

{

printf("page%din\n",page);

fifo.hm[fifo.tail].id=page;

fifo.hm[fifo.tail].flag=true;

fifo.tail=(fifo.tail+1)%(HARD_NUM+1);

}

}

}

printf("缺页次数:

%d\n",lack);

printf("命中:

%lf\n",1.0-1.0*lack/INSTRUCT);

}

boolisInFifo(intpage)

{

intcur=fifo.head;

if(cur==fifo.tail)//队列为空

returnfalse;

while

(1)

{

if(cur%(HARD_NUM+1)==fifo.tail)//已经到队列尾

break;

if(page==fifo.hm[cur].id&&fifo.hm[cur].flag==true)

returntrue;

cur++;

}

returnfalse;

}

 

voidlruTest()

{

inti,j;

intlack=0;//缺页次数

//内存初始化

for(i=0;i

{

lru.hm[i].id=0;

lru.hm[i].flag=false;

lru.hm[i].count=0;

}

//模拟执行320条指令

for(i=0;i

{

//计算该指令在那一页,判断是否在实存中

intpage=instruct[i]%VIRTUAL_NUM;

boolisIn=false;

for(j=0;j

if(lru.hm[j].id==page&&lru.hm[j].flag==true)

{

isIn=true;

lru.hm[j].count++;

}

if(isIn)

printf("%dalreadin...\n",page);

else

{

lack++;

//查找最近最少使用的项

intcur=0,count=INT_MAX;

for(j=0;j

{

if(lru.hm[j].count

{

cur=j;

count=lru.hm[j].count;

}

}

if(lru.hm[cur].flag==false)

{

printf("page%din\n",page);

lru.hm[cur].flag=true;

}

else

printf("page%din,page%dout\n",page,lru.hm[cur].id);

lru.hm[cur].id=page;

lru.hm[cur].count++;

}

}

printf("缺页次数:

%d\n",lack);

printf("命中:

%lf\n",1.0-1.0*lack/INSTRUCT);

}

实验结果:

实存为4kb,4个页面结果:

(仅打印结果)

实存为10Kb,10个页面结果:

由以上结果可以看出,最近最少使用算法lru效果比先进先出fifo要好的多,平均超过2倍的性能。

其他页面替换IO打印(部分结果):

in在实存中,out替换出实存。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2