分页存储实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for (int k=0,count=0; k<N; k++)
{ if (block[k] == 0) printf("%2d ", k, ++count); if (count == 15)
{ putchar('\n'); count = 0; }
}
putchar('\n'); }*/ putchar('\n');
block[k] = 1;
k++;
}
processCount++;
return true;
}
bool endProcess() {
int pid, pages;
if (processCount < 1)
{ printf("当前内存没有进程!\n\n"); return false; }
printf("当前内存中的进程有%d个,进程号为:", processCount);
for (i=0; i<N; i++){ process[i][0] = 0; for (j=1; j<N; j++) process[i][j] = -1; }
processCount = 0;
printf("初始化结果如下:"); output(); flag = false; }
void ouΒιβλιοθήκη Baiduput() {
}
bool createProcess()
{
int pid, pages, k = 0;
loop:printf("请输入进程号(小于%d)和所需页面数:", N);
scanf("%d%d", &pid, &pages);
if (pid > 99) { printf("错误!进程号过大!\n"); goto loop; }
processCount--;
blockCount += pages;
return true;
}
void menu() {
int choice;
while (true) {
printf("操作菜单:\n");
printf(" 1 -->创建进程\n 2 -->结束进程\n 3 -->查看内存\n 0 -->退出程序\n");
if (pages > blockCount)
return false; blockCount -= pages;
process[pid][0] = pages;
for (int i=1; i<=pages; i++) {
while (block[k]==1 && k<100) k++;
process[pid][i] = k;
四.实验代码
#include <stdio.h> #include <windows.h>
#define N 100
int block[N];
int blockCount;
int processCount;
bool flag = true;
void init(); void output();
bool createProcess(); bool endProcess();
void init() { int i, j;
for (i=0; i<N; i++) block[i] = 0;
for (i=0; i<20; i++) block[rand()%(N-1)] = 1;
blockCount = 0;
for (i=0; i<N; i++)
if (block[i] == 0) blockCount++;
if (pages == 0) {
printf("对不起!该进程不存在!\n");
return false;
}
for (int j=1; j<pages; j++)
{
block[process[pid][j]] = 0;
process[pid][j] = -1;
}
process[pid][0] = 0;
for (int i=0; i<N; i++) if (process[i][0] > 0) printf("%2d ", i);
putchar('\n');
printf("请输入您要结束的进程号(小于%d):", N);
scanf("%d", &pid); pages = process[pid][0];
} } }
void main() {
init();
menu();
}
break;
case 2: if (endProcess()) printf("进程已结束!\n\n");
else printf("进程结束失败!\n\n");
break;
case 3: output();
break;
case 0: return default: printf("对不起!您的选择有误!请重新选择!\n\n");
for (int k=0,count=0; k<N; k++)
{ if (block[k] == 1) printf("%2d ", k, ++count);
if (count == 15)
{ putchar('\n'); count = 0; }
}
putchar('\n');
}
if (processCount > 0) {
{
printf("%2d ", process[i][j], count++);
if (count == 15) {
putchar('\n'); printf(" "); count = 0;
}
}
putchar('\n');
} } }
else printf("当前内存无进程!\n");
if (blockCount > 0) { printf("空闲内存块(%d):\n", blockCount);
printf("\n内存总量:%d块,已用空间:%d块,剩余空间:%d块,进程总数:%d个\n", N, N-blockCount, blockCount, processCount);
if (flag && blockCount < N) { printf("已使用的内存块(%d):\n", N-blockCount);
printf("请输入您要进行的操作:");
scanf("%d", &choice);
switch (choice) { case 1: if (createProcess()) printf("创建新进程成功!\n\n");
else printf("抱歉!内存空间不足,创建新进程失败!\n\n");
printf("内存详细使用情况如下:\n");
for (int i=0; i<N; i++)
{
if (process[i][0] > 0)
{ printf("进程号:%d \n占用内存块(%2d):", i, process[i][0]);
for (int j=1,count=0; j<=process[i][0]; j++)
分页式存储
一.实验名称:分页存储管理
二.实验目的:了解分页存储管理在内存空间分配的作用三.实验内容:
分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,相应的,也把内存空间分成与页面相同大小的若干个存储块,称为物理块或页框,同样加以编号,在为进程分配内存时,以块为单位将进程的若干个也分别装入到多个可以不相邻的物理块中。系统为每个进程建立了一张页面映像表,简称页表。位示图是利用二进制的一位来表示磁盘中的一个盘块的使用情况,这里用位示图来表示内存分配情况。
{ if (block[k] == 0) printf("%2d ", k, ++count); if (count == 15)
{ putchar('\n'); count = 0; }
}
putchar('\n'); }*/ putchar('\n');
block[k] = 1;
k++;
}
processCount++;
return true;
}
bool endProcess() {
int pid, pages;
if (processCount < 1)
{ printf("当前内存没有进程!\n\n"); return false; }
printf("当前内存中的进程有%d个,进程号为:", processCount);
for (i=0; i<N; i++){ process[i][0] = 0; for (j=1; j<N; j++) process[i][j] = -1; }
processCount = 0;
printf("初始化结果如下:"); output(); flag = false; }
void ouΒιβλιοθήκη Baiduput() {
}
bool createProcess()
{
int pid, pages, k = 0;
loop:printf("请输入进程号(小于%d)和所需页面数:", N);
scanf("%d%d", &pid, &pages);
if (pid > 99) { printf("错误!进程号过大!\n"); goto loop; }
processCount--;
blockCount += pages;
return true;
}
void menu() {
int choice;
while (true) {
printf("操作菜单:\n");
printf(" 1 -->创建进程\n 2 -->结束进程\n 3 -->查看内存\n 0 -->退出程序\n");
if (pages > blockCount)
return false; blockCount -= pages;
process[pid][0] = pages;
for (int i=1; i<=pages; i++) {
while (block[k]==1 && k<100) k++;
process[pid][i] = k;
四.实验代码
#include <stdio.h> #include <windows.h>
#define N 100
int block[N];
int blockCount;
int processCount;
bool flag = true;
void init(); void output();
bool createProcess(); bool endProcess();
void init() { int i, j;
for (i=0; i<N; i++) block[i] = 0;
for (i=0; i<20; i++) block[rand()%(N-1)] = 1;
blockCount = 0;
for (i=0; i<N; i++)
if (block[i] == 0) blockCount++;
if (pages == 0) {
printf("对不起!该进程不存在!\n");
return false;
}
for (int j=1; j<pages; j++)
{
block[process[pid][j]] = 0;
process[pid][j] = -1;
}
process[pid][0] = 0;
for (int i=0; i<N; i++) if (process[i][0] > 0) printf("%2d ", i);
putchar('\n');
printf("请输入您要结束的进程号(小于%d):", N);
scanf("%d", &pid); pages = process[pid][0];
} } }
void main() {
init();
menu();
}
break;
case 2: if (endProcess()) printf("进程已结束!\n\n");
else printf("进程结束失败!\n\n");
break;
case 3: output();
break;
case 0: return default: printf("对不起!您的选择有误!请重新选择!\n\n");
for (int k=0,count=0; k<N; k++)
{ if (block[k] == 1) printf("%2d ", k, ++count);
if (count == 15)
{ putchar('\n'); count = 0; }
}
putchar('\n');
}
if (processCount > 0) {
{
printf("%2d ", process[i][j], count++);
if (count == 15) {
putchar('\n'); printf(" "); count = 0;
}
}
putchar('\n');
} } }
else printf("当前内存无进程!\n");
if (blockCount > 0) { printf("空闲内存块(%d):\n", blockCount);
printf("\n内存总量:%d块,已用空间:%d块,剩余空间:%d块,进程总数:%d个\n", N, N-blockCount, blockCount, processCount);
if (flag && blockCount < N) { printf("已使用的内存块(%d):\n", N-blockCount);
printf("请输入您要进行的操作:");
scanf("%d", &choice);
switch (choice) { case 1: if (createProcess()) printf("创建新进程成功!\n\n");
else printf("抱歉!内存空间不足,创建新进程失败!\n\n");
printf("内存详细使用情况如下:\n");
for (int i=0; i<N; i++)
{
if (process[i][0] > 0)
{ printf("进程号:%d \n占用内存块(%2d):", i, process[i][0]);
for (int j=1,count=0; j<=process[i][0]; j++)
分页式存储
一.实验名称:分页存储管理
二.实验目的:了解分页存储管理在内存空间分配的作用三.实验内容:
分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,相应的,也把内存空间分成与页面相同大小的若干个存储块,称为物理块或页框,同样加以编号,在为进程分配内存时,以块为单位将进程的若干个也分别装入到多个可以不相邻的物理块中。系统为每个进程建立了一张页面映像表,简称页表。位示图是利用二进制的一位来表示磁盘中的一个盘块的使用情况,这里用位示图来表示内存分配情况。