文档库 最新最全的文档下载
当前位置:文档库 › 固定分区---报告

固定分区---报告

固定分区---报告
固定分区---报告

课程设计任务书

学生姓名:肖闯专业班级:软件0404 指导教师:李勇华工作单位:计算机科学系

题目: 模拟固定分区存储管理中地址转换

初始条件:

随机产生固定分区的个数,每个分区的大小,进程的个数及需要的空间。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写

等具体要求)

1.当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后有关地址转换的数据。

2.课程设计报告书正文的内容应包括:

(1)系统功能需求分析;

(2)开发平台(系统、开发工具、语言的选择);

(3)系统的功能设计(数据结构与模块说明);

(4)运行结果与运行情况分析;

(5)自我评价与总结:

a)你认为你完成的设计哪些地方做得比较好或比较出色;

b)什么地方做得不太好,以后如何改正;

c)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);

d)完成本题是否有其他的其他方法(如果有,简要说明该方法);

(6)参考文献(按公开发表的规范书写)。

时间安排:

17周完成。

指导教师签名: 2007年 6 月 22 日

系主任(或责任教师)签名:年月日

固定分区存储管理地址转换

一.需求分析:

随机产生固定分区的个数,每个分区的大小,进程的个数及需要的空间。当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后有关地址转换的数据。以下是对固定分区管理的模拟。

二.开发平台:

Microsoft Windows XP Service Pack 2

Microsoft Visual C++6.0 英文版

三.系统功能设计:

1. 固定分区

固定分区原理比较简单,本节仅以举例方式说明其原理(如下图)。主存(指用户区域,下同)被分成8KB、32KB、64KB三个分区(在不产生混淆的情况下,KB, MB, GB简称为K, M, G,下同),这种划分在系统整个运行期间是固定不变的。装入模块是作业调度程序的一个子模块,它把多个进程空间按其大小装入到合适的分区内。例如装入模块可把PS1、PS2、PS3分派到分区2、分区1、分区3。尽管分区2有12K空闲,分区3有31K空闲,却不能把后继的PS4(10K)装入主存。于是形成了2个大的“区内零头”。这是固定分区分配的最大缺点。它的主要优点是简单,特别对于进程空间大小可事先知道的专用系统,比较实用。

由于进程空间(PS)的虚地址是从0开始递增编址的,因此装入模块在把它装入到分区时,必须把所有虚地址变换成从分区始址为起点的物理地址,其变换公式是:

物理地址=虚地址+分区的始址

图固定分区原理图

2.虚拟存储管理

虚拟存储器(虚存)是一个很重要的概念。众所周知,程序段经编译后形成一个以0地址开始的线性地址或多维地址(常见二维地址)序列。用户作业可能由若干个程序段组成,必须经过链接才能产生一个可执行文件。链接工作的实质是按照各个程序段之间的调用关系把各段的地址统一成从0开始的一维线性地址。链接既可在作业运行之前,也可在作业的程序段执行过程中依调用关系动态地进行。前者称为静态链接,由link程序完成;后者称为动态链接,由硬件与特定的软件协同完成。一个可执行文件,第1条指令的地址是0,第2条指令的地址是1,…,依此类推,每条指令所访问的“数据”的地址要么落在指令地址范围内,要么落在数据地址范围内。从0开始的指令地址和数据段地址组成作业的地址空间,它是逻辑上

的,与主存地址毫不相干,因此称为虚拟空间或虚拟存储器。每个作业都拥有自己的虚拟存储器(虚存)。虚存的容量与主存大小无关,它是由计算机系统的地址结构和寻址方式确定的。例如,Windows 95提供了4GB的虚存(比8MB的物理主存大得多),如下一页图(含OS/2的虚存)所示。

一个作业的地址空间等于它的各个进程空间之和,作业运行之前,它的各进程都存放在虚存中。

Windows 95提供了对虚存空间管理的API(Application Program Interface)应用程序接口函数,这些API函数包括:

①支持私用堆。即应用程序可根据需要创建和使用尽可能多的私用堆;

②允许进程保留虚空间中的指定区域。这一区域一旦被保留,就不能将它用来满足其他进程的动态申请。在多线程(有关线程概念见第4章)环境下,指向这种保留区域的32位指针可使每个线程轻而易举地实现对同一物理主存区域的访问;

③通过存储映射文件支持共享虚存。

(a) OS/2的虚存(b) Win 32的虚存

图应用程序看到的虚存

Windows API控制进程的虚拟地址空间,这就意味着进程发出的任何存储请求只会影响虚空间,对物理主存毫无影响。例如,进程请求100KB(每虚页为4KB),那么系统会给该进程增加25个虚页,但不会对物理主存做任何事情。如果对25个虚页的某些页从未被引用,那么系统可能永远不会分配物理存储块(每块也是4KB)给它们。深入到Windows 95系统内部便可发现许多存储管理原语,有些原语供设备驱动程序使用,另一些供那些有时处理虚存并且有时强迫系统保存物理主存块的系统组件使用。但是,这些原语是操作系统内核所特有的。无论应用程序还是Windows子系统都不知道或不关心物理主存。进程只有实际使用主存时才能迫使系统分配物理主存。Windows把存储器分成虚存和物理主存是其系统的主要特征。应用程序使用API而Windows子系统解释与加工指定的API,操作系统内核则处理虚存到物理主存之间的变换。例如,用C语言作为编程语言来扫描一遍二维数据数组将导致从低到高的虚拟地址都被访问,因为C语言是按照行优先顺序来保存二维数组的。随着扫描的进行,一次1个字节的访问会导致系统每隔4096个引用就会再分配1个新的物理主存块。其它语言,例如FORTRAN,是采用列优先顺序来保存二维数组的,一行行的引用数组数据会导致出现大范围的地址跨越,从而迫使物理主存块的分配频率增高导致应用程序的性能变差。

3.地址转换

物理主存空间地址是一维线性排列的,不妨记作

M={0,1,2,…,2m-1},

表示主存容量为2m。例如,当m=23时,主存的容量为8MB。虚存的一维线性空间和二维线性空间分别记为:

={0,1,2,…,2v-1}

V

1

V

2={0段{0,1,2,…,n

},1段{0,1,2,…,n

1

},…,s段{0,1,2,…,n

s

}}。

显然,V1的容量为2v,例如当v=32时,虚存的容量达最大4GB,它限定每个用户作业的进程空间都不得超过4GB。支持V1系统的地址结构寄存器的长度为v位,它存放虚地址(俗称

CPU的有效地址)。V

2的容量是各段容量之和,对于V

2

可经静态链接转化成V

1

,也可采用动

态链接。每个用户作业都有一个虚存V(虚地址都从0开始递增)导致虚存的个数多于实际物理主存的个数(通常计算机只有一个主存M)。所谓地址变换(又称地址映射)就是把多个V空间映射到M空间上去,或者说是把虚存地址变换成物理主存地址。有人不明白为什么要进行地址变换。在多道环境下,一道作业的进程空间所在主存中的位置要依据当时主存的状况而定。因此,尽管它们有永不改变的虚地址却常常有不同的主存地址,不进行地址变换是不行的。

固定分区管理采用动态重定位完成虚地址到物理地址的变换;基址/限长保护法(如下图)保证:当有越界事件产生时,当前指令不会去访问本分区之外的主存。

图地址变换

4.分配与回收

回收过程(free_block)是分配过程(get_block)的逆操作。在回收时要考虑回收的自由区是否与原自由区邻接。邻接有4种情况,如下图所示,除(a)外,在其他3种情况下都应把回收区与原自由区合并构成一个更大的自由区。回收后要调整FBC。

上述程序中x是所申请自由区的长度,p作为向申请者返回的、所分得自由区的始址(指针)。若p为空,说明该次申请失败。程序中的d为一个是否要构成新自由区的参量。若剩余量大于d,则剩余部分构成一个新自由区并登记在FBC中,否则剩余部分作为原自由区的一部分一并分配给申请者。这种做法保证自由区链中最小自由区长度不小于d。

以首次适应算法和FBC结构为例,请求大小为x的自由存储区分配程序如下:

(a)不邻接(b)上邻(c)下邻接(d)上下邻接

图自由区邻接情况

5.数据结构

有2种数据结构,即自由区表FBT(Free Block Table)和自由区链FBC(Free Block Chain)供可变分区管理选用。例如设主存空间有如上图2(d)所示的分配现状,则可用FBT或FBC描述之(如右图)。

FBT相当简单,每个表目记录自由区的大小及其起始地址。由于自由区的个数是动态改变的,因此FBT表目的最大个数难以确定:太小了会担心产生表目溢出,太大了会产生表目空间的浪费。不过此表目所占bit位不多,浪费不算严重。FBC的特点是,从自由区本身的首尾分别取出一个字用于成链。首字的两个字段分别记录本自由区的长度和下一自由区的始址,尾字的一个字段记录前一自由区的始址,这样构成了双向链表。链中的第1个自由区的始址和最末自由区的始址分别由FREE结点的始端指针和尾端指针给出。FREE的当前指针指向即将被查找的、循环链中的自由区。FBC的设计技巧在于,它利用自由区本身的空间记录自由区的大小及前后自由区的位置。当分配一自由区时,用于成链的首尾两字也一起连同分配,这样就不再需用额外的存储空间来记录自由区现状

6.模块说明:

1.allocate模块:

采用最优分配算法为进程PRS_NAME分配X_K大小的空间

2.Process_length模块:

随机产生一个进程大小的函数

3.Process_num模块:

随机产生一个进程个数的函数

4.reclaim模块:

回收进程名为PRS_NAME的进程所占内存空间

5.Srand_name模块:

随机产生一个进程的名字

6.Stand_length模块:

随机产生一个分区大小的函数.

五.程序用户定义函数说明以及运行状态:

allocate函数的声明:

void allocate(char PRS_NAME,float X_K) //采用最优分配算法为进程PRS_NAME分配X_K大小的空间

{

int i,k;

float ad;

k=-1;

for(i=0;i

if(Free_table[i].length>=X_K&&Free_table[i].flag==1)

if(k==-1||Free_table[i].length

k=i;

if(k==-1)//未找到可用空闲分区,返回

{

printf("无可用空闲区\n");

return;

}

//找到可用空闲区,开始分配:

//若空闲区大小与要求分配的空间差小于M_SIZE大小,则空闲区全部分配;

//若空闲区大小与要求分配的空间差大于M_SIZE大小,则从空闲区划出一部分分配if(Free_table[k].length-X_K<=M_SIZE)

{

Free_table[k].flag=0;

ad=Free_table[k].address;

X_K=Free_table[k].length;

}

else

{

Free_table[k].length=Free_table[k].length-X_K;

ad=Free_table[k].address+Free_table[k].length;

}

//修改已分配区表

i=0;

while(Used_Table[i].flag!=0&&i

i++;

if(i>=n) //无表目填写已分分区

{

printf("无表目填写已分分区,错误\n");

//修正空闲区表

if(Free_table[k].flag==0)

//前面找到的是整个空闲分区

Free_table[k].flag=1;

else

{//前面找到的是某个空闲分区的一部分

Free_table[k].length=Free_table[k].length+X_K;

return;

}

}

else

{//修改已分配表

Used_Table[i].address=ad;

Used_Table[i].length=X_K;

Used_Table[i].flag=PRS_NAME;

}

return;

}//内存分配函数结束

Process_length函数的声明

float process_length(int k)//随机产生一个进程大小的函数

{

float pt_length[20];

srand((unsigned)time(NULL));//srand()函数产生一个当前时间开始的随机种子for (int i=0;i<20;i++)

pt_length[i]= float (rand()%500);

return pt_length[k];

}

Process_num函数的声明:

int process_num()//随机产生一个进程个数的函数

{

int num;

int A[10]={1,2,3,4,5,6,7,8,9,10};

srand((unsigned)time(NULL));

num=rand()%10;

return A[num];

}

reclaim函数的声明:

void reclaim(char PRS_NAME) //回收进程名为PRS_NAME的进程所占内存空间{

int i,k,j,s,t;

float S,L;

//寻找已分配表中对应登记项

s=0;

while((Used_Table[s].flag!=PRS_NAME||Used_Table[s].flag==0)&&s

s++;

if(s>=n)//在已分配表中找不到名字为PRS_NAME的进程

{

printf("找不到该进程\n");

return;

}

//修改已分配表

Used_Table[s].flag=0; //取得归还分区的起始地址S和长度L

S=Used_Table[s].address;

L=Used_Table[s].length;

j=-1;k=-1;i=0;

//寻找回收分区的空闲上下邻,上邻表目k,下邻表目j

while(i

{

if(Free_table[i].flag==1)

{

if(Free_table[i].address+Free_table[i].length==S)k=i;//找到上邻

if(Free_table[i].address==S+L)j=i;//找到下邻

}

i++;

if(k!=-1)

if(j!=-1)

// 上邻空闲区,下邻空闲区,三项合并

{

Free_table[k].length=Free_table[j].length+Free_table[k].length+L; Free_table[j].flag=1;

}

else

//上邻空闲区,下邻非空闲区,与上邻合并

Free_table[k].length=Free_table[k].length+L;

else

if(j!=-1)

//上邻非空闲区,下邻为空闲区,与下邻合并

{

Free_table[j].address=S;

Free_table[j].length=Free_table[j].length+L;

}

else //上下邻均为非空闲区,回收区域直接填入

{

//在空闲区表中寻找空栏目

t=0;

while(Free_table[t].flag==1&&t

t++;

if(t>=m)//空闲区表满,回收空间失败,将已分配表复原

{

cout<<"内存空闲表没有空间,回收空间失败"<

Used_Table[s].flag=j;

return;

}

Free_table[t].address=S;

Free_table[t].length=L;

Free_table[t].flag=1;

}

return;

}

Srand_name函数的声明:

char srand_name(int k)//随机产生一个进程的名字

{

char A[26]={'A','B','C','D','E','F','G','H','I',

'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

return A[k];

Stand_length函数的声明:

float stand_length(int k)//随机产生一个分区大小的函数

{

float st_length[20];

srand((unsigned)time(NULL));//srand()函数产生一个当前时间开始的随机种子for (int i=0;i<20;i++)

st_length[i]=float (rand()%1000);

return st_length[k];

}

调试分析:

1)程序开始,初始化空闲空间块并按大小顺序排列。

2)选择1------随机产生进程并分配内存

3)选择3--------显示内存分配记录

4)选择2-------回收进程和内存

五.课程设计总结:

内存分配策略:固定存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求.

固定存储分配要求在编译时能知道所有变量的存储要求,栈式存储分配要求在过程的入口处必须知道所有的存储要求,而堆式存储分配则专门负责在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存

分配,比如可变长度串和对象实例.堆由大片的可利用块或空闲块组成,堆

中的内存可以按照任意顺序分配和释放。

采用如下几种办法可以使主存空间利用率得到改善:

(1)划分分区时按分区的大小顺序排列,低地址部分是较小的分区,高地址部分是较大的分区;

(2)根据经常出现的作业的大小和频率划分分区;

(3)按作业对主存空间的需求量排成多个作业队列,规定每个作业队列中的各作业只能一次装入对应的分区,不同的分区中可同时装入作业,某作业队列为“空”时,该作业队列对应的分区也不能用来装其他作业队列中的作业。

硬盘分区格式化实验报告

实验报告 课程: 计算机组装与维护 学号: 姓名: 某某某 专业: 软件工程 班级: 软件工程班

实验时间: 2012 年 _月__ _日星期_ 实验地点:逸夫楼A701 实验名称:硬盘的分区格式化 实验目的: 1.掌握分区的原因,了解FAT16、FAT32、NTFS格式。2.掌握硬盘参数的设置。 3.掌握用FDISK命令将硬盘分为多个逻辑盘的方法。4.熟练掌握逻辑盘的格式化。 5、掌握利用第三方工具去分区操作 6、掌握硬盘分区表格式 实验准备: 装有WINDOWS操作系统和VPC的一台计算机。 WINxp、Windows7映象文件。 刻录机一台(利用U盘启动盘制作工具,制作U盘)回忆有关概念 实验环境: 7号微机室

实验理论: 在虚拟机上利用fidisk命令对硬盘进行分区 format命令对硬盘进行高级格式化

实验步骤: 1.硬盘分区 ①用VPC工具虚拟一台PC机,载入WIN98映像文件,启动VPC,引导到光盘。 ②机器启动后进入DOS工作状态,在DOS提示符>后键入硬盘分区命令: A:\>Fdisk↙ 出现如图13-2所示的界面。 ③键入“Y”,进入Fdisk分区主界面。主界面以菜单形式显示,共有的四个菜单项,如图所示。 其中,第一项为建立DOS分区DOS逻辑驱动器;第二项为设置活动分区;第三项为删除分区或逻辑驱动器;第四项为显示有关分区信息。 ④建立分区,选择第一项出现如下菜单,用来建立DOS分区,或DOS逻辑驱动器。 其中,第一项为建立基本分区;第二项为建立扩展分区;第三项为建立扩展分区中的逻辑驱动器。第四项为显示分区信息。 选择"1"后回车,建立主分区(Primary Partition)。这时系统会询问你是否使用最大的可用空间作为主分区,如果回答“Y”,那么软件就会将所有的磁盘空间划分成一个分区,回答"N"则可以划分多个分区,对于现在的硬盘来说,一般都比较大,如果划分成一个分区就不太好管理,因此可以选择输入"N"来分成多个分区。例如,将硬盘创 建三个逻辑盘C:、D:和E:,要求C盘占整个硬盘容量的一半,D盘和E盘各占整个硬盘容量的四分之一。软件会提示你输入主分区C盘的大小(或百分比),输入后回车。 ⑤按键退回上一步,机器重新扫描剩余空间,输入D盘容量大小或百分比,过一会儿,再按照上述方法输入E盘容量大小或百分比即可。 ⑥激活分区。设置完分区后,按键回到Fdisk主界面,选择“2”进入另一个菜单界面,再输入“1”设置活动分区(即把C盘设置为活动分区)。 ⑦删除分区和查看分区信息。在Fdisk主界面中分别选择第3项和第4项,分别用来删除和查看有关分区信息。 2、格式化硬盘 ①分区完成后,系统自动重新启动机器,。在DOS提示符“>”下,使用Format 命令,对各逻辑盘进行格式化:

实验三动态分区存储管理方式的主

实验三动态分区存储管理方式的主存分配回收 一、实验目的 深入了解动态分区存储管理方式主存分配回收的实现。 二、实验预备知识 存储管理中动态分区的管理方式。 三、实验内容 编写程序完成动态分区存储管理方式的主存分配回收的实现。实验具体包括: 首先确定主存空间分配表;然后采用最优适应算法完成主存空间的分配和回收;最后编写主函数对所做工作进行测试。 四、提示与讲解 动态分区管理方式预先不将主存划分成几个区域,而把主存除操作系统占用区域外的空间看作一个大的空闲区。当作业要求装入主存时,根据作业需要主存空间的大小查询主存内各个空闲区,当从主存空间中找到一个大于或等于该作业大小的主存空闲区时,选择其中一个空闲区,按作业需求量划出一个分区装入该作业。作业执行完后,它所占的主存分区被收回,成为一个空闲区。如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。 实现动态分区的分配和回收,主要考虑的问题有三个: 第一,设计记录主存使用情况的数据表格,用来记录空闲区和作业占用的区域;第二,在设计的数据表格基础上设计主存分配算法;第三,在设计的数据表格基础上设计主存回收算法。 首先,考虑第一个问题: 设计记录主存使用情况的数据表格,用来记录空闲区和作业占用的区域。 由于动态分区的大小是由作业需求量决定的,故分区的长度是预先不固定的,且分区的个数也随主存分配和回收变动。总之,所有分区情况随时可能发生变化,数据表格的设计必须和这个特点相适应。由于分区长度不同,因此设计的表格应该包括分区在主

存中的起始地址和长度。由于分配时空闲区有时会变成两个分区: 空闲区和已分分区,回收主存分区时,可能会合并空闲分区,这样如果整个主存采用一张表格记录已分分区和空闲区,就会使表格操作繁琐。主存分配时查找空闲区进行分配,然后填写已分配区表,主要操作在空闲区;某个作业执行完后,将该分区变成空闲区,并将其与相邻的空闲区合并,主要操作也在空闲区。 由此可见,主存的分配和回收主要是对空闲区的操作。这样为了便于对主存空间的分配和回收,就建立两张分区表记录主存使用情况,一张表格记录作业占用分区的 “已分配区表”;一张是记录空闲区的“空闲区表”。这两张表的实现方法一般有两种,一种是链表形式,一种是顺序表形式。在实验中,采用顺序表形式,用数组模拟。由于顺序表的长度必须提前固定,所以无论是“已分配区表”还是“空闲区 表”都必须事先确定长度。它们的长度必须是系统可能的最大项数,系统运行过程中才不会出错,因而在多数情况下,无论是“已分配区表”还是“空闲区表”都有空闲栏目。已分配区表中除了分区起始地址、长度外,也至少还要有一项“标志”,如果是空闲栏目,内容为“空”,如果为某个作业占用分区的登记项,内容为该作业的作业名;空闲区表中除了分区起始地址、长度外,也要有一项“标志”,如果是空闲栏目,内容为“空”,如果为某个空闲区的登记项,内容为“未分配”。在实际系统中,这两表格的内容可能还要多,实验中仅仅使用上述必须的数据。为此, “已分配区表”和“空闲区表”在实验中有如下的结构定义。 已分配区表的定义: #define n 10// 假定系统允许的最大作业数量为n struct {float address;// 已分分区起始地址 float length; // 已分分区长度,单位为字节 int flag;// 已分配区表登记栏标志, “0表”示空栏目,实验中只支持一个字符的作业名}used_table[n];// 已分配区表 空闲区表的定义:

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

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

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

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

磁盘和文件系统管理(二)实验报告

制作LVM卷的步骤: 裸设备---分区---PV---VG---LV---格式化---挂载使用 [root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc1 建立pv物理卷 Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdc1" successfully created [root@localhost ~]# vgcreate hehe /dev/sdb1 /dev/sdc1 建立vg卷组 Volume group "hehe" successfully created [root@localhost ~]# lvcreate -L 30G -n xixi hehe 建立lv逻辑卷 Logical volume "xixi" created [root@localhost ~]# mkfs.ext3 /dev/hehe/xixi 格式化为ext3的文件系统mke2fs 1.39 (29-May-2006) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) [root@localhost ~]# mkdir /lvm 创建lvm文件夹 [root@localhost ~]# mount /dev/hehe/xixi /lvm 挂载lvm逻辑卷到lvm文件夹下使用[root@localhost ~]# cd /lvm 切换 [root@localhost lvm]# ls 查看 lost+found [root@localhost lvm]# df -hT 查看磁盘使用情况 文件系统类型容量已用可用已用% 挂载点 /dev/mapper/VolGroup00-LogVol00 ext3 38G 3.1G 33G 9% / /dev/sda1 ext3 99M 11M 83M 12% /boot tmpfs tmpfs 177M 0 177M 0% /dev/shm /dev/mapper/hehe-xixi ext3 30G 173M 28G 1% /lvm [root@localhost lvm]# lvextend -L +3G /dev/hehe/xixi 扩展lvm卷的空间Extending logical volume xixi to 33.00 GB Logical volume xixi successfully resized [root@localhost lvm]# resize2fs /dev/hehe/xixi 重新识别文件系统的大小

实验五 动态分区存储管理

实验五动态分区存储管理 一、实验目的 深入了解采用动态分区存储管理方式的内存分配回收的实现。通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉动态分区存储管理的内存分配和回收。 二、实验内容 编写程序完成动态分区存储管理方式的内存分配回收。 具体包括:确定内存空间分配表; 采用最优适应算法完成内存空间的分配和回收; 编写主函数对所做工作进行测试。 三、设计思路 整体思路: 动态分区管理方式将内存除操作系统占用区域外的空间看成一个大的空闲区。当作业要求装入内存时,根据作业需要内存空间的大小查询内存中的各个空闲区,当从内存空间中找到一个大于或等于该作业大小的内存空闲区时,选择其中一个空闲区,按作业需求量划出一个分区装人该作业,作业执行完后,其所占的内存分区被收回,成为一个空闲区。如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。 设计所采用的算法: 采用最优适应算法,每次为作业分配内存时,总是把既能满足要求、又是最小的空闲分区分配给作业。但最优适应算法容易出现找到的一个分区可能只比作业所需求的长度略大一点的情行,这时,空闲区分割后剩下的空闲区就很小以致很难再使用,降低了内存的使用率。为解决此问题,设定一个限值minsize,如果空闲区的大小减去作业需求长度得到的值小于等于minsize,不再将空闲区分成己分分区和空闲区两部分,而是将整个空闲区都分配给作业。 内存分配与回收所使用的结构体: 为便于对内存的分配和回收,建立两张表记录内存的使用情况。一张为记录作业占用分 区的“内存分配表”,内容包括分区起始地址、长度、作业名/标志(为0时作为标志位表示空栏目);一张为记录空闲区的“空闲分区表”,内容包括分区起始地址、长度、标志(0表空栏目,1表未分配)。两张表都采用顺序表形式。

操作系统实验内存分配

精心整理西安邮电大学 (计算机学院) 课内实验报告 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);

操作系统实验之内存管理实验报告

学生学号 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称 计算机操作系统 开 课 学 院 计算机科学与技术学院 指导老师姓名 学 生 姓 名 学生专业班级 2016 — 2017 学年第一学期

实验三 内存管理 一、设计目的、功能与要求 1、实验目的 掌握内存管理的相关内容,对内存的分配和回收有深入的理解。 2、实现功能 模拟实现内存管理机制 3、具体要求 任选一种计算机高级语言编程实现 选择一种内存管理方案:动态分区式、请求页式、段式、段页式等 能够输入给定的内存大小,进程的个数,每个进程所需内存空间的大小等 能够选择分配、回收操作 内购显示进程在内存的储存地址、大小等 显示每次完成内存分配或回收后内存空间的使用情况 二、问题描述 所谓分区,是把内存分为一些大小相等或不等的分区,除操作系统占用一个分区外,其余分区用来存放进程的程序和数据。本次实验中才用动态分区法,也就是在作业的处理过程中划分内存的区域,根据需要确定大小。 动态分区的分配算法:首先从可用表/自由链中找到一个足以容纳该作业的可用空白区,如果这个空白区比需求大,则将它分为两个部分,一部分成为已分配区,剩下部分仍为空白区。最后修改可用表或自由链,并回送一个所分配区的序号或该分区的起始地址。 最先适应法:按分区的起始地址的递增次序,从头查找,找到符合要求的第一个分区。

最佳适应法:按照分区大小的递增次序,查找,找到符合要求的第一个分区。 最坏适应法:按分区大小的递减次序,从头查找,找到符合要求的第一个分区。 三、数据结构及功能设计 1、数据结构 定义空闲分区结构体,用来保存内存中空闲分区的情况。其中size属性表示空闲分区的大小,start_addr表示空闲分区首地址,next指针指向下一个空闲分区。 //空闲分区 typedef struct Free_Block { int size; int start_addr; struct Free_Block *next; } Free_Block; Free_Block *free_block; 定义已分配的内存空间的结构体,用来保存已经被进程占用了内存空间的情况。其中pid作为该被分配分区的编号,用于在释放该内存空间时便于查找。size表示分区的大小,start_addr表示分区的起始地址,process_name存放进程名称,next指针指向下一个分区。 //已分配分区的结构体 typedef struct Allocate_Block { int pid; int size; int start_addr; char process_name[PROCESS_NAME_LEN]; struct Allocate_Block *next; } Allocate_Block; 2、模块说明 2.1 初始化模块 对内存空间进行初始化,初始情况内存空间为空,但是要设置内存的最大容量,该内存空间的首地址,以便之后新建进程的过程中使用。当空闲分区初始化

实验五动态分区存储管理模拟

实验五动态分区存储管理模拟 一、实验目的 深入了解可变分区存储管理式主存分配回收的实现。 二、实验预备知识 可变分区存储管理式不预先将主存划分成几个区域,而把主存除操作系统占用区域外的空间看作一个大的空闲区。当进程要求装入主存时,根据进程需要主存空间的大小查询主存各个空闲区,当从主存空间找到一个大于或等于该进程大小要求的主存空闲区时,选择其中一个空闲区,按进程需求量划出一个分区装入该进程。进程执行完后,它所占的主存分区被回收,成为一个空闲区。如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。 这个实验主要需要考虑三个问题: (1)设计记录主存使用情况的数据表格,用来记录空闲区和进程占用的区域; (2)在设计的数据表格基础上设计主存分配算法; (3)在设计的数据表格基础上设计主存回收算法。 首先,考虑第一个问题:设计记录主存使用情况的数据表格,用来记录空闲区和进程占用的区域。 由于可变分区的大小是由进程需求量决定的,故分区的长度是预先不固定的,且分区的个数也随主存分配和回收而变动。总之,所有分区情况随时可能发生变化,数据表格的设计必须和这个特点相适应。由于分区长度不同,因此设计的表格应该包括分区在主存中的起始地址和长度。由于分配时空闲区有时会变成两个分区:空闲区和已分分区,回收主存分区时,可能会合并空闲分区,这样如果整个主存采用一表格记录已分分区和空闲区,就会使表格操作繁琐。主存分配

时查找空闲区进行分配,然后填写已分分区表,主要操作在空闲区;某个进程执行完成后,将该分区变成空闲区,并将其与相邻空闲区合并,主要操作也在空闲区。由此可见,主存分配和回收主要是对空闲区的操作。 这样,为了便于对主存空间的分配和回收,就建立两分区表记录主存使用情况,一表格记录进程占用分区的“已分分区表”;一是记录空闲区的“空闲区表”。这两表的实现法一般有两种,一种是链表形式,一种是顺序表形式。在实验中,采用顺序表形式,用数组模拟。由于顺序表的长度必须提前固定,所以无论是“已分分区表”还是“空闲区表”都必须事先确定长度。它们的长度必须是系统可能的最大项数,系统运行过程中才不会出错,因而在多数情况下,无论是“已分分区表”还是“空闲区表”都有空闲栏目。已分分区表中除了分区起始地址、长度外,也至少还要有一项“标志”,如果是空闲栏目,容为“空”,如果为某个进程占用分区的登记项,容为该进程的进程名;空闲区表中除了分区起始地址、长度外,也要有一项“标志”,如果是空闲栏目,容为“空”,如果为某个空闲区的登记项,容为“未分配”。在实际系统中,这两个表格的容可能还要更多,实验中仅仅使用上述必须的数据。为此,“已分分区表”和“空闲区表”在实验中有如下的结构定义: 已分分区表的定义: #define n 10 //假定系统允的进程数量最多为n struct { float address; //已分分区起始地址 float length; //已分分区长度,单位为字节

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

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

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

磁盘管理组织的实验报告

实验报告 课程名称:网络操作系统 实验项目名称:Windows Server 2003的磁盘管理 学生姓名:邓学文专业:计算机网络技术学号:1000005517 同组学生姓名:无 实验地点:个人电脑实验日期:2012 年04 月08 日 实训12:Windows Server 2003的磁盘管理 一、实验目的 1、熟悉Windows Server 2003基本磁盘管理的相关操作; 2、掌握Windows Server 2003在动态磁盘上创建各种类型的卷; 3、掌握Windows Server 2003的磁盘限额以及磁盘整理等操作。 二、实验内容 在安装了Windows Server 2003的虚拟机上完成如下操作: 1、在安装了Windows Server 2003的虚拟机上添加五块虚拟硬盘,类型为SCSI,大小为1G,并初始化新添加的硬盘;添加一块IDE 类型的磁盘,大小为1.2GB。 2、选择添加的第一块硬盘,在磁盘上创建主分区“D:”,然后创建扩展分区,在扩展分区中创建逻辑盘“E:”和“F:”,最后将这块磁盘升级为动态磁盘。 3、利用添加五块虚拟硬盘,创建简单卷、扩展简单卷、跨区卷、带区卷、镜像卷、RAID-5卷,对具有容错能力的卷,用虚拟机删除虚拟硬盘来模拟硬盘损坏,并尝试数据恢复操作。 4、对磁盘“D:”做磁盘配额操作,设置用户User1的磁盘配额空间为100MB,随后分别将Windows Server 2003安装源程序和VMWARE Workstation 安装源程序复制到D盘,看是否成功。 5、对磁盘“E:”做磁盘清理和碎片整理。 三、实验步骤 1、启动VMWARE,打开预装的Windows Server 2003虚拟机,为虚拟机添加五块

动态分区式存储管理

可变分区存储管理 设计思路: 整体思路: 可变分区管理方式将内存除操作系统占用区域外的空间看做一个大的空闲区。当作业要求装入内存时,根据作业需要内存空间的大小查询内存中的各个 空闲区,当从内存空间中找到一个大于或等于该作业大小的内存空闲区时,选择其中一个空闲区,按作业需求量划出一个分区装人该作业,作业执行完后,其所占的内存分区被收回,成为一个空闲区。如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。 设计所才用的算法: 采用最优适应算法,每次为作业分配内存时,总是把既能满足要求、又是最小的空闲分区分配给作业。但最优适应算法容易出现找到的一个分区可能只比作业所需求的长度略大一点的情行,这时,空闲区分割后剩下的空闲区就很小以致很难再使用,降低了内存的使用率。为解决此问题,设定一个限值min size,如果空闲区的大小减去作业需求长度得到的值小于等于min size,不再将空闲区分成己分分区和空闲区两部分,而是将整个空闲区都分配给作业。 内存分配与回收所使用的结构体: 为便于对内存的分配和回收,建立两张表记录内存的使用情况。一张为记录作业占用分区的“内存分配表”,内容包括分区起始地址、长度、作业名/标志(为0时作为标志位表示空栏目);一张为记录空闲区的“空闲分区表”,内容包括分区起始地址、长度、标志(0表空栏目,1表未分配)。两张表都采用顺序表形式。 关于分配留下的内存小碎片问题: 当要装入一个作业时,从“空闲分区表”中查找标志为“ 1”(未分配)且满足作业所需内存大小的最小空闲区,若空闲区的大小与作业所需大小的差值小于或等于min size,把该分区全部分配给作业,并把该空闲区的标志改为“0”(空栏目)。同时,在已分配区表中找到一个标志为“ 0”的栏目登记新装人作业所占用分区的起始地址,长度和作业名。若空闲区的大小与作业所需大小的差值大于

动态分区存储管理的模拟实现

计算机科学与工程学院学生实验报告 专业计算机科学与技术班级 学号姓名 课程名称操作系统课程类型专业必修课 实验名称动态分区存储管理的模拟实现 实验目的: 1.熟悉动态分区存储管理方式下,主存空间的分配和回收算法。 2.提高C语言编程能力。 实验内容: 假设主存当前状态如右表所示: 系统采用最佳适应分配算法为作业分配主存空间, 而且具有紧凑技术。请编程完成以下操作: (1). 输出此时的已分配区表和未分配区表; (2). 装入 Job3(15K),输出主存分配后的已分配 区表和未分配区表; (3). 回收 Job2所占用的主存空间,输出主存回收 后的已分配区表和未分配区表; (4).装入 Job4(130K),输出主存分配后的已分配 区表和未分配区表。 实验要求 1.数据结构参考定义如下,也可根据需要进行改进: (1)已分配区表: #define n 10 /*假定系统允许的最大作业数量为n,n值为10*/ struct {int number; /*序号*/ int address; /*已分配分区起始地址,单位为KB */ int length; /*已分配分区长度,单位KB*/ float flag; /*已分配区表登记栏标志,0:空表项,否则为作业名;*/

}used_table[n]; /*已分配区表*/ (2)未分配区表: #define m 10 /*假定系统允许的空闲区表最大为m,m值为10*/ struct {int number; /*序号*/ int address; /*空闲区起始地址,单位为KB */ int length; /*空闲区长度,单位为KB*/ int flag; /*空闲区表登记栏标志,0:空表项;1:空闲区*/ }free_table[m]; /*空闲区表*/ 2.以allocate命名主存分配所用的过程或函数(算法参考课件),要将各种情况考虑周全。 3.以reclaim命名主存回收所用的过程或函数(算法参考课件),要将各种情况考虑周全。 4.画出算法实现的N-S流程图。 5.程序调试、运行成功后,请老师检查。 实验步骤: 1.分配内存,结果如下图:

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

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

网络配置实验报告

实验一:磁盘管理和文件系统管理 一、实验目的:掌握Windows Server 2008系统中的磁盘管理和文件系统管理,包括基本磁盘中分区的创建,动态磁盘中各种动态卷的创建。 二、实验属性:验证型 三、实验环境 Pentium 550Hz以上的CPU;建议至少512MB的内存; 建议硬盘至少2GB,并有1GB空闲空间。 四、实验内容 磁盘的管理 文件系统的管理五、实验步骤 (一)、磁盘管理 1、在虚拟机中再添加两块磁盘(问题1:在虚拟机中如何添加新的磁盘?)。 答:在虚拟机界面打开VM中点击Settings然后点击ADD,选择Hard Disk,然后继续按next到完成为止。

1、使用磁盘管理控制台,在基本磁盘中新建主磁盘分区、扩展磁盘分区和逻辑驱动器,并对已经创建好的分区做格式化、更改磁盘驱动器号及路径等几个操作。(问题2:在一台基本磁盘中,最多可以创建几个主磁盘分区?问题3:将FAT32格式的分区转换为NTFS格式的完整命令是什么?) 答:最多可有四个主磁盘分区; 将FAT32格式的分区转换为NTFS格式的完整命令是 Convert F:/FS:NTFS 对已经创建好的分区格式化 更改磁盘驱动器号及路径

3、将三块基本磁盘转换为动态磁盘。(问题4:如何将基本磁盘转换为动态磁盘?问题5:什么样的磁盘由基本磁盘转换为动态磁盘后系统需要重新启动?) 答:若升级的基本磁盘中包含有系统磁盘分区或引导磁盘分区,则转换为动态磁盘后需要重新启动计算机。 4、在动态磁盘中创建简单卷、扩展简单卷、创建跨区卷、扩展跨区卷、创建带区卷、镜像卷和RAID5卷,并对具有容错能力的卷尝试数据恢复操作,掌握各个卷的特点和工作原理。(问题6:哪些卷可以扩展?问题7:哪些卷具有容错功能?问题8:哪个卷可以包含系统卷?问题9:哪些卷需要跨越多个磁盘?问题10:哪个卷至少需要3块磁盘?) 答:简单卷、跨区卷可以扩展,镜像卷和RAID5卷具有容错功能,镜像卷可以包含系统卷。跨区卷、带区卷、镜像卷和RAID5卷都需要跨越多个磁盘。AID5卷至少需要3块磁盘。 对于卷的扩展,对于NTFS格式的简单卷,其容量可以扩展,可以将其他未指派的空间合并到简单卷中,但这些未指派空间局限于本磁盘上,若选用了其他磁盘上的空间,则扩展之后就变成了跨区卷。

动态分区存储管理系统分解

操作系统原理 课程设计报告 题目:动态分区分配存储管理系统 所在学院:计算机科学与技术学院 班级: 11级计算机科学与技术(非师) 学号: 20111202052 姓名:吴创连 指导教师:黄侠剑 2014年3月18

目录 1 引言 (1) 2 需求分析 (1) 3 概要设计 (1) 4 详细设计 (1) 4.1问题描述和分析 (1) 4.2程序流程图 (2) 4.3数据结构体分析 (3) 4.4主要程序代码分析 (4) 5 调试与操作说明 (11) 5.1初始界面 (11) 5.2模拟内存分配 (12) 5.3回收内存界面 (12) 5.4最佳适应算法的实现 (13) 5.5最坏适应算法的实现 (13) 6总结与体会 (13)

1 引言 操作系统是最重要的系统软件,同时也是最活跃的学科之一。我们通过操作系统可以理解计算机系统的资源如何组织,操作系统如何有效地管理这些系统资源,用户如何通过操作系统与计算机系统打交道。 存储器是计算机系统的重要组成部分,近年来,存储器容量虽然一直在不断扩大,但仍不能满足现代软件发展的需要,因此,存储器仍然是一种宝贵而又紧俏的资源。如何对它加以有效的管理,不仅直接影响到存储器的利用率,而且还对系统性能有重大影响。而动态分区分配属于连续分配的一种方式,它至今仍在内存分配方式中占有一席之地。 2 需求分析 动态分区分配是根据进程的实际需要,动态地为之分配内存空间。在实现动态分区分配时,将涉及到分区分配中所用的数据结构、分区分配算法和分区的分配和回收操作这样三个问题。常用的数据结构有动态分区表和动态分区链。在对数据结构有一定掌握程度的情况下设计合理的数据结构来描述存储空间,实现分区存储管理的内存分配功能,应该选择最合适的适应算法(最佳适应算法,最坏适应算法),在动态分区存储管理方式中主要实现内存分配和内存回收算法,在这些存储管理中间必然会有碎片的产生,当碎片产生时,进行碎片的拼接等相关的内容。 3 概要设计 本程序采用机构化模块化的设计方法,共分为两大模块。 1.最佳适应算法实现 它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。 2.最坏算法实现 最坏适应分配算法要扫描整个空闲分区或链表,总是挑选一个最大的空闲分区分割给作业使用。该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求。 4 详细设计 4.1 问题描述和分析 系统应利用某种分配算法,从空闲分区链表中找到所需大小的分区,如果空闲分区大小

动态分区分配存储管理系统

动态分区分配存储管理系统 学院 专业 学号 学生姓名 指导老师 2014年3月19日

目录 一、设计目的与内容 (3) 1、设计目的 (3) 2、设计内容 (3) 3、设计要求 (3) 二、算法的基本思想 (3) 1、首次适应算法 (3) 2、循环首次适应算法 (3) 三、主要功能模块流程图 (4) 1、主函数流程图....................................................................................................................... .4 2、首次适应算法流程图........................................................................................................... .5 3、循环首次适应算法流程图................................................................................................... .6 四、系统测试..................................................................................................................................... .7 输入界面,按要求输入: (7) 五、结论 (8) 六、源程序 (9)

内存管理实验报告

内存管理实验报告

信息科学与技术学院实验报告 课程名称: 实验项目: 实验地点:指导教师: 日期: 实验类型:(验证性实验综合性实验设计性实验) 专业: 计算机外包班级: 14外三姓名: 周鹏飞学号: 1414104033 一、实验目的及要求 通过此次实验,加深对内存管理的认识,进一步掌握内存的分配,回收算法的思想。 二、实验仪器、设备或软件 Windows操作系统PC一台;VC++6.0 三、实验内容及原理 原理:设计程序模拟内存的动态分区内存管理方法。内存空闲区使用空闲分区表进行管理,采用最先适应算法从空闲分区表中寻找空闲区进行分配,内存回收时不考虑与相邻空闲分区的合并。 假定系统的内存共640k,初始状态为操作系统本身占用40k.t1时刻,为作业A,B,C分配80k,60k,100k的内存空间;t2时刻作业B完成;t3时刻为作业D分配50k的内存空间;t4时刻作业C,A完成;t5时刻作业D完成。要求编程序分别输出t1,t2,t3,t4,t5时刻内存的空闲区的状态。 实验内容: #include #include #define maxPCB 6 //最大进程数 #define maxPart 6 //最大空闲分区数

#define size 10 //不再切割剩余分区的大小 typedef struct PCB_type { char name;//进程名 int address;//进程所占分区首地址 int len;//进程所占分区的长度 int valid;//PCB标识符(有效,无效) }PCB; Typedef struct seqlist //进程信息队列 { PCB PCBelem[maxPCB];// maxPCB为为系统中允许的最多进程数 int total; //系统中实际的进程数 }PCBseql;//分区类型的描述 typedef struct Partition { int address;//分区起址 int len;//分区的长度 int valid;//有标识符(有效,无效) }Part;//内存空闲分区表(顺序表)描述 typedef struct Partlist //空白分区链 { Part Partelem[maxPart];//maxPart为系统中可能的最多空闲分区数 int sum;//系统中世纪的分区数 }Partseql;//全局变量 PCBseql *pcbl;//进程队列指针 Partseql *part1;//空闲队列指针 #intclude “MainManager.h” void initpcb() //初始化进程表vpcb1 { int i; pcb1->PCBelem[0].address=0; pcb1->PCBelem[0].len=0; pcb1->PCBelem[0].name=’s’; pcb1->PCBelem[0].valid=1; pcb1->total=0; for(i=1;i

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