操作系统课程设计

发布 2022-10-05 11:44:28 阅读 6341

课程设计。

题目:主存空间的分配与**。

学生姓名:

学院: 系别:

专业: 班级:

指导教师:

2024年12月30日。

学院(系):信息学院计算机系课程名称:操作系统课程设计指导教师(签名。

专业班级: 软件工程 09-02班学生姓名: 张东旭学号: 200920205003

摘要。在内存初始化完成以后,内存中就常驻有内核映象(内核**和数据)。以后,随着用户程序的执行和结束,就需要不断地分配和释放物理页面。

内核应该为分配一组连续的页面而建立一种稳定、高效的分配策略。为此,必须解决一个比较重要的内存管理问题,即外碎片问题。频繁地请求和释放不同大小的一组连续页面,必然导致在已分配的内存块中分散许多小块的空闲页面。

由此带来的问题是,即使这些小块的空闲页面加起来足以满足所请求的页面,但是要分配一个大块的连续页面可能就根本无法满足。linux采用著名的伙伴(buddy)系统算法来解决外碎片问题。但是请注意,在linux中,cpu不能按物理地址来访问存储空间,而必须使用虚拟地址;因此,对于内存页面的管理,通常是先在虚存空间中分配一个虚存区间,然后才根据需要为此区间分配相应的物理页面并建立起映射,也就是说,虚存区间的分配在前,而物理页面的分配在后,但是为了承接上一节的内容,我们先介绍内存的分配和**,然后再介绍用户进程虚存区间的建立。

分配效率、碎片问题是操作系统中内存分配的两大问题。一个好的分配器应该能够快速地满足各种大小的分配要求,同时不能产生大量的碎片浪费空间。基于数据结构中的伙伴系统的分配与**思想给出了一个有效的算法。

关键字:操作系统内存分配首次适应算法磁盘存储管理。

通过该课程设计使学生理解在不同的存储管理方式下,以及使学生加深对如何实现主存空间的分配与**原理的理解。也使学生初步具有研究、设计、编制和调试操作系统模块的能力。

编程序实现下述在不同的存储管理方式下的主存空间的分配与**,其中原始数据设为空闲区说明表结构体。

1).设计基于空闲区说明表的可变分区分配与**算法;

2).或设计基于空闲区链表的可变分区的分配与**;

本系统适用于现用的各种类型的计算机,内存容量建议为128mb以上,不必配备外部附加设备。

vc++6.0开发工具。

内存的分配与**是内存管理的主要功能之一。无论采取哪一种管理和控制方式,能否把外存中的数据和程序调入内存,取决于内否在内存中为他们安排合适的位置。因此,存储管理模块要为每一个并发执行的进程分配内存空间。

另外,当进程执行结束之后,存储管理模块又要及时**该进程所占用的内存资源,以便给其他进程分配空间。但由于作业大大小不一,所以系统为作业分配内存大小不一,在释放时造成系统资源的浪费。因此,采取首次适应算法,以及那少内存的浪费。

初始化系统的内存分区说明表;输入当前作业或进程的使用内存情况,检索系统内的内存分区说明表,判断是否可分配,也就是查看是否有足够的空闲空间,若有,则按需求量分割一部分给作业;若无;则作业等待。随着作业的装入、完成,主存空间被分割成许多大大小小的分区。有的分区被作业占用,有的分区空闲。

使用内存的分配和**算法进行,完成所有作业或进程的内存使用请求,作业完成后**其所占用的内存给系统;并可输出查看内存的当前使用状况。

例如,某时刻主存空间占用情况如图3-1所示。

1) 为了说明哪些分区是空闲的,可以用来装入新作业,必须要有一张空闲区说明表,如表3-1所示。

3-1主存空间占用情况表3-1 空闲区说明表。

其中,起始地址指出各空闲区的主存起始地址,长度指出空闲区大小。

状态有:未分配:该栏目是记录的有效空闲区。

空表目:没有登记信息。

由于分区个数不定,所以空闲区说明表中应有足够的空表目项。否则造成溢出,无法登记。

同样,再设一个已分配区表,记录作业或进程的主存占用情况。

2) 当有一个新作业要求装入主存时,必须查空闲区说明表,从中找出一个足够大的空闲区。有时找到的空闲区可能大于作业需求量,这时应将空闲区一分为二。一个分给作业;另一个仍作为空闲区留在空闲区表中。

为了尽量减少由于分割造成的碎片,尽可能分配低地址部分的空闲区,将较大空闲区留在高地址端,以利于大作业的装入。为此在空闲区表中,按空闲区首地址从低到高进行登记。为了便于快速查找,要不断地对**进行紧缩,即让“空表目”项留在表的后部。

3) 当一个作业执行完成时,作业所占用的分区应归还给系统。在归还时要考虑相邻空闲区合并的问题。作业的释放区与空闲区的邻接分以下4种情况考虑:

a.释放区下邻(低地址邻接)空闲区;

b.释放区上邻(高地址邻接)空闲区;

c.释放区上下都与空闲区邻接;

d.释放区与空闲区不邻接。

struct freearea

int startaddress空闲区的起始地址号int size空闲区的大小。

int state空闲区状态:0为空表目,1为可用空闲块*/ freeblock[n]=,

说明:设置空闲区为结构体类型,并且为其初始化,构成空闲区表的分区。

struct fullarea

int address分配作业的首地址。

int sizes分配作业的大小*/

fullblock[n];

说明:设置已分配区说明表为结构体类型,构成已分配区表的分区

为了操作界面的人性化和美观,为模拟系统开辟一个操作菜单,通过 switch() case的方法来实现,其核心**为。

int start;

char t;

while(c)

system("cls");

muen();

printf请选择操作编号:")

scanf("%d",&b);

switch(b)

case 1:

system("cls");

printf(" 系统原有内存空闲区分表和已分配表区如下:");

order();order1();show();

printf("请输入作业申请量:")

scanf("%d",&a);

order();

start=alloc(a,d);d++;

if(start==-1)

system("cls");

printf(" \1 内存中没有符合的空闲区可供分配!等待释放内存中~~");

sleep(1*1000);system("cls");

show();

setfree();

break;

system("cls");

printf(" \1 系统采用最佳适应算法正在为作业分配内存中……");

sleep(1*1000);system("cls");

printf("1 系统为作业分配内存成功!:");

order();order1();

sleep(1*1000);system("cls");

break;

case 2:

system("cls");

操作系统课程设计

课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...

操作系统课程设计

银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...

操作系统课程设计

学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....