好文档 - 专业文书写作范文服务资料分享网站

实验三 操作系统 - 虚拟存储管理 - 图文

天下 分享 时间: 加入收藏 我要投稿 点赞

实验三 虚拟存储管理理

?一、实验?目的

存储管理理的主要功能之?一是合理理的分配空间。请求?页式管理理是?一种常?用的虚拟存储管理理技术。本实验的?目的是请求?页式存储管理理中?页?面置换算法模拟设计,了了解虚拟存储技术的特点,掌握请求?页式存储管理理的?页?面置换?方法。

?二、实验原理理

设计程序模拟内存?首次适应算法,最佳适应算法和最差适应算法的?工作过程。

三、实验要求

存分配算法的过程;

2. 上机时独?立编程、调试程序;3. 根据具体实验要求,完成好实验报告。

1. 上机前认真复习?页?面置换算法,熟悉内存?首次适应算法,最佳适应算法和最差适应算法三种内

四、实验代码分析

First_fit — ?首次适应算法

123456789101112131415161718

Status First_fit(int request) { //为申请作业开辟新空间且初始化

DuLinkList temp = (DuLinkList) malloc(sizeof(DuLNode)); temp->data.size = request; temp->data.state = Busy;

DuLNode *p = block_first->next; while (p) {

if (p->data.state == Free && p->data.size == request) {//有?大?小恰好合适的空闲块

p->data.state = Busy; return OK; break; }

if (p->data.state == Free && p->data.size > request) {//有空闲块能满?足需求且有剩余

temp->prior = p->prior; temp->next = p;

temp->data.address = p->data.address; p->prior->next = temp;

19202122232425262728

p->prior = temp;

p->data.address = temp->data.address + temp->data.size; p->data.size -= request; return OK; break; }

p = p->next; }

return ERROR;}

Best_fit — 最佳适应算法

1234567891011121314151617181920212223242526272829303132333435

Status Best_fit(int request) { int ch; //记录最?小剩余空间

DuLinkList temp = (DuLinkList) malloc(sizeof(DuLNode)); temp->data.size = request; temp->data.state = Busy;

DuLNode *p = block_first->next; DuLNode *q = NULL; //记录最佳插?入位置

while (p) //初始化最?小空间和最佳位置 {

if (p->data.state == Free && (p->data.size >= request)) { if (q == NULL) { q = p;

ch = p->data.size - request;

} else if (q->data.size > p->data.size) { q = p;

ch = p->data.size - request; } }

p = p->next; }

if (q == NULL) return ERROR;//没有找到空闲块 else if (q->data.size == request) { q->data.state = Busy; return OK; } else {

temp->prior = q->prior; temp->next = q;

temp->data.address = q->data.address; q->prior->next = temp; q->prior = temp;

q->data.address += request; q->data.size = ch; return OK;

363738

}

return OK;}

Worst_fit — 最差适应算法

1234567891011121314151617181920212223242526272829303132333435363738

Status Worst_fit(int request) { int ch; //记录最?大剩余空间

DuLinkList temp = (DuLinkList) malloc(sizeof(DuLNode)); temp->data.size = request; temp->data.state = Busy;

DuLNode *p = block_first->next; DuLNode *q = NULL; //记录最佳插?入位置

while (p) //初始化最?大空间和最佳位置 {

if (p->data.state == Free && (p->data.size >= request)) { if (q == NULL) { q = p;

ch = p->data.size - request;

} else if (q->data.size < p->data.size) { q = p;

ch = p->data.size - request; } }

p = p->next; }

if (q == NULL) return ERROR;//没有找到空闲块 else if (q->data.size == request) { q->data.state = Busy; return OK; } else {

temp->prior = q->prior; temp->next = q;

temp->data.address = q->data.address; q->prior->next = temp; q->prior = temp;

q->data.address += request; q->data.size = ch; return OK; }

return OK;}

五、实验结果

附:实验源码

Memory_Allocation.cpp

123456789101112131415161718192021222324252627

//

// Created by Plusirin on 2020/5/30.//

#include#include

using namespace std;

#define Free 0 //空闲状态#define Busy 1 //已?用状态#define OK 1 //完成#define ERROR 0 //出错

#define MAX_length 640 //最?大内存空间为640KBtypedef int Status;int flag;

typedef struct freearea//定义?一个空闲区说明表结构{

long size; //分区?大?小 long address; //分区地址 int state; //状态} ElemType;

// 线性表的双向链表存储结构typedef struct DuLNode { ElemType data;

28293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

struct DuLNode *prior; //前趋指针 struct DuLNode *next; //后继指针}

DuLNode, *DuLinkList;

DuLinkList block_first; //头结点DuLinkList block_last; //尾结点Status alloc(int);//内存分配Status free(int); //内存回收

Status First_fit(int);//?首次适应算法Status Best_fit(int); //最佳适应算法Status Worst_fit(int); //最差适应算法void show();//查看分配

Status Initblock();//开创空间表

Status Initblock()//开创带头结点的内存空间链表{

block_first = (DuLinkList) malloc(sizeof(DuLNode)); block_last = (DuLinkList) malloc(sizeof(DuLNode)); block_first->prior = NULL; block_first->next = block_last; block_last->prior = block_first; block_last->next = NULL; block_last->data.address = 0; block_last->data.size = MAX_length; block_last->data.state = Free; return OK;}

//分配主存

Status alloc(int ch) { int request = 0;

cout << \请输?入需要分配的主存?大?小(单位:KB):\; cin >> request;

if (request < 0 || request == 0) {

cout << \分配?大?小不不合适,请重试!\ << endl; return ERROR; }

if (ch == 2) //选择最佳适应算法 {

if (Best_fit(request) == OK) cout << \分配成功!\ << endl; else cout << \内存不不?足,分配失败!\ << endl; return OK; }

if (ch == 3) //选择最差适应算法 {

if (Worst_fit(request) == OK) cout << \分配成功!\ << endl; else cout << \内存不不?足,分配失败!\ << endl;

实验三 操作系统 - 虚拟存储管理 - 图文

实验三虚拟存储管理理?一、实验?目的存储管理理的主要功能之?一是合理理的分配空间。请求?页式管理理是?一种常?用的虚拟存储管理理技术。本实验的?目的是请求?页式存储管理理中?页?面置换算法模拟设计,了了解虚拟存储技术的特点,掌握请求?页式存储管理理的?页?面置换?方法。?二、实验原理理设计程序模拟内存?
推荐度:
点击下载文档文档为doc格式
0rjo63kpil4i6jo0x1m776vac3ljqt012ey
领取福利

微信扫码领取福利

微信扫码分享