基本分页存储管理的模拟实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基本分页存储管理的模拟实现
学院
专业
学号
学生姓名
指导教师姓名
2014年03月18日
目录
一、设计目的与内容
二、各个功能模块
三、主要功能模块流程图
四、系统测试
五、结论
六、源程序及系统文件使用说明
一、设计目的与内容
设计的目的:
操作系统课程设计是计算机专业重要的教学环节, 它为学生提供了一个既动手又动脑, 将课本上的理论知识和实际有机的结合起来, 独立分析和解决实际问题的机会。
1. 进一步巩固和复习操作系统的基础知识。
2. 培养学生结构化程序、模块化程序设计的方法和能力。
3. 提高学生调试程序的技巧和软件设计的能力。
4. 提高学生分析问题、解决问题以及综合利用C 语言进行程序设计的能力。
设计内容:
根据设计要求实现对基本分页存储管理的模拟
设计要求:
1.
2. 进程名, 进程所需页数, 也
可从文件读出。
3.
况。
所采用的数据结构:
typedef struct LNode{
int f; //进程号
char name[8]; //进程名
int size; //进程大小
int n; //进程页数
int ye[100]; //页表,下标表示页号, 内容表示进程各页所在物理块
struct LNode *next;
}LNode,*LinkList;
二、各个功能模块
主要功能模块流程图
四、系统测试
主界面:
(显示程序的各个功能块)1、选择1, 运行界面如下:
(选择1, 输入进程名, 显示内存物理块分配情况)
2、选择2, 运行界面如下:
(显示2回收进程, 若进程名输入错误, 则显示进程不存在, )3、选择3, 运行界面如下:
(显示进程r的内存使用情况, 0表示未用)
五、结论
在这次课程设计中, 我清楚的认识理论到到实践的重要性, 经过实际的动手操作不仅提高了我的动手能力还提高了我把理论转化成实践的能力。
实验中对页表的定义如下(采用数组形式, 数组下标表示页号, 数组单元存放与数组下标(页号)相应的页面号):如ye [100]
六、源程序及系统文件使用说明
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include
//#include
//#define y 0;
char A[100]; //内存物理块, 0:未使用,
int max = 99; //记录内存的物理块数,值为A[100]最大下标
int count = 100; //记录内存未使用物理块数
typedef struct LNode{
char name; //进程名
int n; //进程页数
int ye[100]; /*进程各页所在物理块,页表实验中对页表的定义如下(采用数组形式, 数组下标表示页号, 数组单元存放与数组下标(页号)相应的页面号):*/
struct LNode *next;
}LNode,*LinkList;
//内存初始化
void CreatA()
{
int i = 0;
for(i = 0;i <= max; i++)
A[i] = 0;
}
//建立新进程
void NewNode(LinkList &L)
{
char ch;
int i;
int m;
LinkList p;
LinkList new_node;
printf("\n *****输入进程名称:***** ");
ch = getche();
p = L;
while(p != NULL) //查找进程名是否重复
{
if(p->name != ch)
p = p->next;
else
{
printf("\n*****进程名%c 已存在, 请重新输入:*****",ch);
ch = getche();
p = L;//p重新指向头结点
}
}
printf("\n*****输入进程%c 的页数:*****",ch);
scanf("%d",&i);
while(i < 1)
{
printf("\n*****请重新输入进程%c 的页数:*****",ch);
scanf("%d",&i);
}
if(i > count)
{
printf("\n*****内存物理块不足, 新建进程%c 失败!!!*****\n\n",ch);
getch();
}
else
{
new_node = (LinkList)malloc(sizeof(LNode));
new_node->name = ch;
new_node->n = i;
new_node->next = NULL;
count -= i;
m = 0;
for(i = 0; i <= max; i++)
if(A[i] == 0 && m < new_node->n)
{
A[i] = new_node->name ;
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;
}
}
}
//回收进程, 释放内存
void FreeNode(LinkList &L)
{
LinkList p,q;
char ch;
printf("*****请输入要删除的进程名称:*****");
ch = getche();
p = L;//查找进程ch ;用p记录
q = p;
while(p != NULL)
{
if(p->name == ch)
break;
else
{
q = p;
p = p->next;