基本分页存储管理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
if(p == NULL)
{ printf("\n 该进程不存在!!!\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 内存物理块分配情况:\n"); LinkList p = L; printf("\n 各进程信息:\n"); printf("进程号\t\t 进程名称\t 进程页数\t 所用物理块\n"); while(p != NULL) { printf("%d\t\t",p->f); printf("%s\t\t",p->name); printf("%d\t\t",p->n); int i; for(i = 0;i < p->n; i++) printf("%d,",p->ye[i]); printf("\n"); p = p->next; } } // 查看进程 void look(LinkList L) { int z; printf("输入要查询的进程号"); scanf("%d",&z);
A[i] = 0;
}
//建立新进程
voidNewNode(LinkList&L)
{
inti,j;
intm,k;
LinkList p;
LinkListnew_node;
new_node= (LinkList)malloc(sizeof(LNode));
p = L;
printf("\n 输入进程号:");
LinkList p = L; while (p!=NULL) { if(p->f ==z)
{ printf("进程号\t\t 进程名称\t 进程页数\t 所用物理块\n"); printf("%d\t\t",p->f); printf("%s\t\t",p->name); printf("%d\t\t",p->n); int i; for(i = 0;i < p->n; i++) printf("%d,",p->ye[i]); printf("\n"); break;
} }while(i != 0); }
三、实验结果及截图:
根据提示来创建进程,结束进程,查看内存,退出程序
4.分析与总结:
通过这次基本分页存储管理的实验,我又进一步的了解了如何把操作系统的 进程和内存的思想转化为代码,这次的代码使用数组编译,写代码的过程中或多 或少的出现了一些问题,总的来说使用数组还是比较容易的。
{
LinkListp,q;
int z;
printf("请输入要删除的进程号:");
scanf("%d",&z);
p = L;//
p 记录
q = p;
while(p != NULL) {
if(p->f==z)
{
printf("该进程已删除");
break;
}
else
{
q = p;
p = p->next;
{ printf("\n***********菜单*************\n"); printf( " 1 进程装入\n");
printf( " 2 进程退出\n"); printf( " 3 内存使用情况\n"); printf( " 4 进程查看\n"); printf( " 5 退出程序\n"); printf( "****************************\n"); printf("请输入你的选择(select):"); scanf("%d",&i); switch(i){ case 1: NewNode(L);//建立新的进程 Printf(L);//输出内存物理块分配情况和各进程概况 break; case 2: FreeNode(L); //删除某进程 Printf(L); //输出内存物理块分配情况和各进程概况 break; case 3: showit();//显示当前内存的使用情况 break; case 4: look(L); break; case 5: printf("谢谢使用\n\n"); exit(0); break;
由 0 转变为 1),并用专门的数据记录下该作业占用的物理块的块号,以备删除 作业时回收空间。 (4)作业空间的的回收:用户输入作业号,实现分区回收(通过相应的数据结 构找到该作业占有的物理块号,将块号转变成对应的行标、列标,将对应位置的 值由 1 转变成 0 就完成了回收) (5)分区的显示:任何时刻,可以查看当前内存的情况(显示记录内存情况的 矩阵的值) 3、实验要求: (1)内存空间不足的情况,要有相应的显示; (3) 作业不能同名,但是删除后可以再用这个名字; (3)作业空间回收是输入作业名,回收相应的空间,如果这个作业名不存在, 也要有相应的提示。
k=new_node->size%1024;
if(k!=0) new_node->n=new_node->n+1;
printf("所需要的页数为:");
printf("%d\n",new_node->n);
if(new_node->n> count)
{
printf("\n
!!!\n\n");
}
else
{
count -=new_node->n;
m = 0;
for(i= 0; i<= max; i++)
if(A[i] == 0 && m <new_node->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("\n 错误次数过多,返回主菜单:");
}
}
//
voidFreeNode(LinkList&L)
二、实验代码:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int A[100];
//
0
0
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++)
} else p=p->next; } if(p==NULL) printf("要查询的进程不存在\n"); } // voidshowit() { int i = 0; printf("\n****************************\n"); printf("| 内存物理块分配情况 |\n"); printf("****************************\n"); for(i = 0; i <= max; i++) { printf("%d\t",A[i]); if(i%10 == 9) printf("\n"); } } void main() { CreatA(); printf("\n*☆****** 基本分页算法 *****☆**\n"); LinkList L = NULL; int i = 0; do
p = L;//p 重新指向头结点
j++;
}
}
if(j<3)
{printf("\n 输入进程名称:");
scanf("%s",new_node->name);
printf("\n 输入进程的大小:");
scanf("%d",&new_node->size);
new_node->n=new_node->size/1024;
scanf("%d",&new_node->f);
j=0;
while(p != NULL&&j<3) //查找进程号是否重复
{
if(p->f!=new_node->f)
p = p->next;
else
{
printf("\n 该进程已存在,重新输入:");
scanf("%d",&new_node->f);
操作系统实验报告
实验名称 学生姓名 专业班级 学号 院 (系) 指导教师 完成时间
基本分页存储管理
一、实验目的、内容及要求:
1、实验目的: (1)熟悉并掌握基本分页存储管理的思想。 (2)熟悉并掌握基本分页存储管理的分配和回收方式,并能够模拟实现。 2、实验内容: (1)用高级语言模拟实现基本分页存储管理,要求: (2)内存空间的初始化——可以由用户输入初始内存空间各个物理块情况。(用 二维矩阵的方式按物理块号,逐行给出每个物理块的状态,1——表示已分配,0 ——表示未分配,并能够将行标、列标转换为对应的物理块号,以查看或修改每 一个块的状态,要求:初始时部分物理块已分配) (3)基本分页的分配过程:由用户输入作业号和作业的大小(这里的大小是逻 辑页面数),实现分配过程:空间充足,分配,修改状态矩阵的相应位置的值(值