实验3存储管理模拟_实验三虚拟存储管理

2020-02-28 其他范文 下载本文

实验3存储管理模拟由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验三虚拟存储管理”。

计算机操作系统实验

存储管理模拟

实验三

存储管理模拟

一、内容补充说明

实验中固定内存分区采用结构体数组实现,分区信息采用结构体初始化实现。由于结构体中含string类,VC++不能对含string类的结构体初始化,这里采用MinGW编译器作为程序平台。

MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。实际上 MinGW 并不是一个 C/C++ 编译器,而是一套 GNU 工具集合。除开 GCC(GNU 编译器集合)以外,MinGW 还包含有一些其他的 GNU 程序开发工具(比如 gawk bison 等等)。开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD)操作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境。

内存的分配采用“最先适应算法”实现,由于是固定分区,采用该算法不仅简单,而且保证效率。

二、分析和设计

1.理论分析

初始状态内存中没有作业运行;以后每5 秒钟随机生成一个作业,如果不能满足作业需求(主存中没有分区能够容纳的下),则丢弃该作业。作业以秒为单位进行驱动,当一个作业运行时间结束后将释放内存空间。

2.总体设计

分区信息采用初始化实现。

作业以秒为单位进行驱动。

作业的生成、内存的释放采用永真循环实现,当作业全部运行完后跳出循环。

新作业的大小和运行时间由随机数函数rand生成。

结构体Job用于生成新作业时用;结构体District是内存分区,作业分配成功后,作业的信息全部保存在District内,不再由专门的作业队列记录。

作业运行时间由District[i].Remainder记录,当每秒驱动一次时,时间将减少一秒。当时间减少为0时,作业运行结束,释放内存空间。

每分配一个作业,变量Jump自加一次;每释放一个作业时Jump自减一次。因为作业先分配、内存后释放,所以当作业都运行完时Jump必定等于初始值,这时程序跳出永真循环。

三、详细实现

for(int j=0,clock=0,flag=0;1;clock++,flag=0,Sleep(1000))

//总循环,永真循环,flag为作业分配标志,clock为作业产生时钟,Sleep为程序步进驱动

{if(j

//每5秒产生一个新作业

{p=new Job;

//产生新作业

……

for(int k=0;k

if(District_table[k].Job_size==0 && p->Job_size

//如果分区未分配并且作业大小小于分区大小

{District_table[k].Job_num=j;

//分配内存,并将作业信息保存至分区信息中

……

for(int k=0;k

if(District_table[k].Job_size!=0)

//如果分区中有作业运行

District_table[k].Remainder-=1;

//程序步进驱动,作业运行减1 ……

for(int t=0;t

//如果分区中有作业运行,并且作业已运行完成 计算机操作系统实验

存储管理模拟

{District_table[t].Job_size=0;

//释放内存

……

四、操作界面

操作界面为命令提示符界面,实验截图如下:

1.编译、连接界面

计算机操作系统实验

存储管理模拟

五、心得体会

程序最后跳出永真循环是用break语句。原来是用goto语句,用break语句或exit语句应该也是可以的,但运行后死活都跳不出来,后来不知道为什么又好了。

MinGW是一个很好的编译器,安装包小、程序文件小、绿色环保、速度快、效率高。另外,还有很多人性化的设计,比如:现实代码行数、网格显示、配对括号激活时高亮显示方便检查、括号代码折叠方便查看上下段程序等等。可惜Windows Vista用户没福气,幸好我是Windows XP。

六、附录

#include #include #include

using namespace std;

计算机操作系统实验

存储管理模拟

cout

//打印内存分区内容

cout>Counter;for(int j=0,clock=0,flag=0;1;clock++,flag=0,Sleep(1000))

//总循环,永真循环,flag为作业分配标志,clock为作业产生时钟,Sleep为程序步进驱动

{if(j

//每5秒产生一个新作业

{p=new Job;

//产生新作业

p->Job_size=rand()%34+1;

//作业大小随机

p->Job_time=rand()%40+1;

//作业运行时间随机

coutJob_sizeJob_time

for(int k=0;k

if(District_table[k].Job_size==0 && p->Job_size

//如果分区未分配并且作业大小小于分区大小

{District_table[k].Job_num=j;

//分配内存,并将作业信息保存至分区信息中

District_table[k].Job_size=p->Job_size;

District_table[k].Remainder=p->Job_time;

District_table[k].District_state=“Allocated”;

cout

cout

for(int t=0;t

cout

flag=1;

//分配成功

Jump+=1;

//内存中作业数

break;

}

if(flag==0)

//如果作业分配不成功

cout

j++;

//生成作业数

}

for(int k=0;k

if(District_table[k].Job_size!=0)

//如果分区中有作业运行

District_table[k].Remainder-=1;

//程序步进驱动,作业运行减1

for(int t=0;t

if(District_table[t].Job_size!=0 && District_table[t].Remainder==0)

//如果分区中有作业运行,并且作业已运行完成{District_table[t].Job_size=0;

//释放内存

District_table[t].District_state=“Unallocated”;

cout

District_table[t].Job_num=0;

cout

for(int r=0;r

cout

Jump-=1;

//内存中作业数

《实验3存储管理模拟.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
实验3存储管理模拟
点击下载文档
相关专题 实验三虚拟存储管理 实验三虚拟存储管理
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文