实验三 虚拟存储管理理
?一、实验?目的
存储管理理的主要功能之?一是合理理的分配空间。请求?页式管理理是?一种常?用的虚拟存储管理理技术。本实验的?目的是请求?页式存储管理理中?页?面置换算法模拟设计,了了解虚拟存储技术的特点,掌握请求?页式存储管理理的?页?面置换?方法。
?二、实验原理理
设计程序模拟内存?首次适应算法,最佳适应算法和最差适应算法的?工作过程。
三、实验要求
存分配算法的过程;
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;
19202422232425262728
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 — 最佳适应算法
1234567891011121314151617181920242223242526272829303132333435
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 — 最差适应算法
1234567891011121314151617181920242223242526272829303132333435363738
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
123456789101112131415161718192024222324252627
//
// Created by Plusirin on 2024/5/30.//
#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;
实验三 操作系统 - 虚拟存储管理 - 图文



