存储管理之分页存储管理方式C语言模拟(实验五)
来源:互联网 发布:发生未知的网络错误 编辑:程序博客网 时间:2024/04/29 00:12
分页存储管理方式,将程序划分为若干个大小固定的区域(页),也把物理内存划分为大小和页相等的块,通过页表完成页到块的映射。
分页存储管理之C语言模拟:
#include <stdio.h>#include <string.h>#include <stdlib.h>#define PAGE 20int memory[PAGE];struct page{ //描述进程信息 int process; int page_num; int user[PAGE]; int f; page(){ f = 0; process = 0; page_num = 0; memset(user,0,PAGE); }};struct page *Mem = new page[PAGE];void init_memory(){ printf("请输入一个4*5的二维矩阵,1代表已分配,0代表未分配\n"); for(int i = 0; i < 4; i++) for(int j = 0; j < 5; j++) scanf("%d",&memory[i * 5 + j]);}void output(){ printf("当前内存的状态\n"); for(int i = 0; i < PAGE; i++){ printf("%d ",memory[i]); if(!((i +1) % 5)) printf("\n"); } printf("\n");}void c_malloc() /*分配内存*/{ int page_num,page_no; printf("请输入作业号和作业大小\n"); scanf("%d%d",&page_no,&page_num); int sum = 0; for(int i = 0; i < PAGE; i++) /*检查内存状态,是否满足作业需求*/ if(!memory[i]) sum ++; if(sum < page_num){ /*可用内存页数小于作业需要的内存页数则结束*/ printf("内存空间不足\n"); return; } int page_s; for( page_s = 0; page_s < PAGE; page_s++){ /*检查是否存在相同作业号的作业*/ if(Mem[page_s].f && Mem[page_s].process == page_no){ /*存在同名的给出提示并结束*/ printf("存在同名的作业号\n"); return; } if(Mem[page_s].f == 0){ /*作业状态标记为使用*/ Mem[page_s].f = 1; break; } } Mem[page_s].process = page_no; Mem[page_s].page_num = page_num; for(int i = 0,j = 0; i < PAGE; i++) /*更发内存页号为已使用*/ if(!memory[i] && j < page_num){ memory[i] = 1; Mem[page_s].user[j++] = i; }}void c_free() /*回收内存*/{ int page_no; printf("请输入作业号和作业大小\n"); scanf("%d",&page_no); int page_f; for(page_f = 0; page_f < PAGE; page_f++) /*检查是否存在作业信息*/ if(Mem[page_f].f && Mem[page_f].process == page_no) /*若存在则结束*/ break; if(page_f == PAGE - 1){ /*作业信息不存在,提示并结束*/ printf("作业信息不存在\n"); return; } for(int i = 0; i < Mem[page_f].page_num; i++) /*把矩阵置0*/ memory[Mem[page_f].user[i]] = 0; Mem[page_f].f = 0; /*把作业标志置0*/}int menu() /*菜单*/{ printf("添加作业:1\n"); printf("删除作业:2\n"); printf("输出内存状态:3\n"); printf("结束作业:0\n"); int menu; scanf("%d",&menu); return menu;}int main(int argc,char *argv[]){ init_memory(); /*初始化内存空间*/ int t; while((t = menu())){ if(t == 1) c_malloc(); /*分配内存*/ else if(t == 2) c_free(); /*释放内存*/ else if(t == 3) output(); /*输出内存信息*/ } return 0;}
0 0
- 存储管理之分页存储管理方式C语言模拟(实验五)
- 分页存储管理方式
- 分页存储管理方式
- 操作系统之基本分页存储管理方式
- 【实验】请求调页存储管理方式的模拟
- 基本分页存储管理方式
- 基本分页存储管理方式
- 请求分页存储管理方式
- 【操作系统】分页存储管理方式
- 请求分页存储管理方式
- c语言存储管理
- 内存管理模拟实验之实现一个简单的固定(可变)分区存储管理系统
- 数据结构之动态存储管理(C语言)
- 五、操作系统之存储管理
- 存储器(内存)管理之分页存储管理
- C语言 动态存储管理
- 操作系统基本分页存储管理方式
- 3.1.4.1 基本分页存储管理方式
- ZooKeeper 命令操作
- Retrofit使用指南
- UIAlertController使用
- WinTel联盟发展史
- Android编程思想,面向对象程序设计第六篇——封装(上)布局模块化
- 存储管理之分页存储管理方式C语言模拟(实验五)
- C语言
- @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
- ARP地址解析协议
- 字符串、单词首字母转化为大写
- LinkedHashSet去重方法
- 正则判断手机、邮箱等
- Spring Bean初始化过程
- STM32F412应用开发笔记之二:基本GPIO控制