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

基本分页存储管理 - 图文

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

操作系统实验报告

实验名称 基本分页存储管理 学生姓名 专业班级 学 号 院 (系)

指导教师 完成时间

一、实验目的、内容及要求:

1、实验目的:

(1)熟悉并掌握基本分页存储管理的思想。

(2)熟悉并掌握基本分页存储管理的分配和回收方式,并能够模拟实现。 2、实验内容:

(1)用高级语言模拟实现基本分页存储管理,要求:

(2)内存空间的初始化——可以由用户输入初始内存空间各个物理块情况。(用二维矩阵的方式按物理块号,逐行给出每个物理块的状态,1——表示已分配,0——表示未分配,并能够将行标、列标转换为对应的物理块号,以查看或修改每一个块的状态,要求:初始时部分物理块已分配)

(3)基本分页的分配过程:由用户输入作业号和作业的大小(这里的大小是逻辑页面数),实现分配过程:空间充足,分配,修改状态矩阵的相应位置的值(值

由0转变为1),并用专门的数据记录下该作业占用的物理块的块号,以备删除作业时回收空间。

(4)作业空间的的回收:用户输入作业号,实现分区回收(通过相应的数据结构找到该作业占有的物理块号,将块号转变成对应的行标、列标,将对应位置的值由1转变成0就完成了回收)

(5)分区的显示:任何时刻,可以查看当前内存的情况(显示记录内存情况的矩阵的值) 3、实验要求:

(1)内存空间不足的情况,要有相应的显示; (3) 作业不能同名,但是删除后可以再用这个名字;

(3)作业空间回收是输入作业名,回收相应的空间,如果这个作业名不存在,也要有相应的提示。

二、实验代码:

#include \#include \#include \int A[100]; //00 int max = 99; //记录内存的物理块数,值为A[100]最大下标 int count = 100; //记录内存未使用物理块数 typedefstructLNode{ int f; //进程号 char name[8]; //进程名 int size; //进程大小 int n; //进程页数 int ye[100]; //页表, structLNode *next; }LNode,*LinkList; //内存初始化 voidCreatA() {

int i = 0;

for(i = 0;i <= max; i++) A[i] = 0; }

//建立新进程

voidNewNode(LinkList&L) {

inti,j; intm,k; LinkList p;

LinkListnew_node;

new_node= (LinkList)malloc(sizeof(LNode)); p = L;

printf(\输入进程号:\scanf(\ j=0;

while(p != NULL&&j<3) //查找进程号是否重复 {

if(p->f!=new_node->f) p = p->next; else {

printf(\该进程已存在,重新输入:\scanf(\ p = L;//p重新指向头结点 j++; } } if(j<3)

{printf(\输入进程名称:\scanf(\printf(\输入进程的大小:\scanf(\new_node->n=new_node->size/1024; k=new_node->size24;

if(k!=0) new_node->n=new_node->n+1; printf(\所需要的页数为:\printf(\if(new_node->n> count) {

printf(\!!!\\n\\n\ } else {

count -=new_node->n; m = 0;

for(i= 0; i<= max; i++)

if(A[i] == 0 && m n) {

A[i]=new_node->f; new_node->ye[m] = i;

m++; }

if(L == NULL)

L = new_node; else {

p = L;

//查找最后一个节点 while(p->next != NULL) {

p = p->next; }

p->next = new_node; }

new_node->next = NULL; } } else {

printf(\错误次数过多,返回主菜单:\ } } //

voidFreeNode(LinkList&L) {

LinkListp,q; int z;

printf(\请输入要删除的进程号:\scanf(\ p = L;//p记录 q = p;

while(p != NULL) { if(p->f==z) {

printf(\该进程已删除\break; } else {

q = p;

p = p->next; } }

if(p == NULL)

{

printf(\该进程不存在!!!\\n\ } else {

for(int i = 0; i < p->n; i++) A[p->ye[i]] = 0; count += p->n;

if(p->f== q->f)//要删除的是头结点 {

L = p->next; } else {

q->next = p->next; } } }

//显示所有进程占用的物理块 voidPrintf(LinkList L) {

int i = 0;

printf(\内存物理块分配情况:\\n\LinkList p = L;

printf(\各进程信息:\\n\

printf(\进程号\\t\\t进程名称\\t进程页数\\t所用物理块\\n\while(p != NULL) {

printf(\printf(\printf(\int i;

for(i = 0;i < p->n; i++) printf(\printf(\ p = p->next; } }

// 查看进程

void look(LinkList L) {

int z;

printf(\输入要查询的进程号\scanf(\

基本分页存储管理 - 图文

操作系统实验报告实验名称基本分页存储管理学生姓名专业班级学号院(系)指导教师完成时间一、实验目的、内容及要求:1、实验目的:
推荐度:
点击下载文档文档为doc格式
0hjft72iyu7dd7d92wae4uc568cqcf01a31
领取福利

微信扫码领取福利

微信扫码分享