博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作系统实验3:内存分配与回收
阅读量:5024 次
发布时间:2019-06-12

本文共 3407 字,大约阅读时间需要 11 分钟。

今天早上做了操作系统实验:

1、阅读理解两个例程,掌握例程的运作流程。

2、连续式分配例程中提供了三种分配算法:首次适应、循环首次适应、最佳适应。例程还缺少分配作业和回收作业的功能。请至少实现一种分配算法并完成分配作业的功能,保证该例程能够正确实现分配作业的功能

3、回收作业的功能属于选做部分。

4、分页管理例程缺少分配作业和回收的功能,请实现这两个功能,保证该例程能够正确实现分页管理的分配与回收功能

5、上述要求2和4,必须完成其中一个。

 

连续式分配代码贴上:

 

1 #include 
2 #include
3 #include
4 #include
5 6 #define ret printf("\n") 7 #define spa printf(" ") 8 #define hli printf("-") 9 #define vli printf(" |") 10 #define tab printf("\t") 11 #define capacity 1024 //内存总大小 12 #define max 100 //数组最大长度 13 #define jobsum 8 //作业总数量 14 15 16 17 void _sleep(int n){ 18 clock_t goal; 19 goal = (clock_t)n * CLOCKS_PER_SEC + clock(); 20 while(goal > clock()); 21 } 22 23 char _keygo(){ //按任意键继续 24 char c; 25 printf("Please touch any key to continue....\n"); 26 c = getchar(); 27 return c; 28 } 29 30 typedef struct job JOB; 31 struct job { //作业结构体 32 int jobid; //作业ID,系统做东分配,无需输入 33 char name[20]; //作业名称 34 int vol; //作业大小,即要申请的内存空间大小 35 }; 36 37 JOB jobdata[jobsum] = { //作业队列 38 {
8100, "System", 50}, 39 {
8101, "QianQian", 32}, 40 {
8102, "XunLei", 128}, 41 {
8103, "Dictionary", 76}, 42 {
8104, "NorDun", 86}, 43 {
10001, "QQ", 168}, 44 {
10002, "eMule", 98}, 45 {
10003, "Word", 43}, 46 }; 47 48 typedef struct memblock MEM;//内存分区结构 49 struct memblock{ 50 int head; //地址 51 int length; //长度 52 int state; //状态,0表示空闲,1表示占用 53 int jobid; //已分配,记录作业ID,否则为0 54 }; 55 56 MEM memdata[max] = { //内存状态表 57 {
0, 50, 1, 8100}, 58 {
50, 50, 0, 0}, 59 {
100, 32, 1, 8101}, 60 {
132, 128, 1, 8102}, 61 {
260, 100, 0, 0}, 62 {
360, 76, 1, 8103}, 63 {
436, 200, 0, 0}, 64 {
636, 88, 1, 8104}, 65 {
724, 300, 0, 0}, 66 }; 67 68 int memsum = 9; //当前分区总数量,包括已分配分区和空闲分区 69 int curp = 0; //curp 是位置指针 70 71 MEM membackup[9] = { //内存状态源数据备份,用于还原 72 {
0, 50, 1, 8100}, 73 {
50, 50, 0, 0}, 74 {
100, 32, 1, 8101}, 75 {
132, 128, 1, 8102}, 76 {
260, 100, 0, 0}, 77 {
360, 76, 1, 8103}, 78 {
436, 200, 0, 0}, 79 {
636, 88, 1, 8104}, 80 {
724, 300, 0, 0}, 81 }; 82 83 int job_locate(int id){ //根据作业ID,查找作业在数组jobdata的位置 84 int i; 85 for(i=0;i
=j;--k){169 memdata[k+1] = memdata[k];170 }171 int temp = memdata[j].length;172 memdata[j].length = jobdata[i].vol;173 174 memdata[j].state = 1;175 memdata[j].jobid = jobdata[i].jobid;176 memdata[j+1].length = temp - memdata[j].length;177 memdata[j+1].state = 0;178 memdata[j+1].jobid = 0;179 memdata[j+1].head = memdata[j].length + memdata[j].head;180 ++memsum;181 }182 }183 184 int mem_locate(int id){ //根据作业ID,查找jobdata的id在数组memdata的位置185 int i;186 for(i=0;i
0 && memdata[t-1].state == 0 ){202 memdata[t-1].state = 0;203 memdata[t-1].jobid = 0;204 memdata[t-1].length += memdata[t].length;205 for(i=t+1;i

 

 

 

 

转载于:https://www.cnblogs.com/firstrate/p/3442695.html

你可能感兴趣的文章
Python 使用正则替换 re.sub
查看>>
CTF中那些脑洞大开的编码和加密
查看>>
简化工作流程 10款必备的HTML5开发工具
查看>>
c++ 调用外部程序exe-ShellExecuteEx
查看>>
Java进击C#——语法之知识点的改进
查看>>
IdentityServer流程图与相关术语
查看>>
BirdNet: a 3D Object Detection Framework from LiDAR information
查看>>
icon fonts入门
查看>>
【Django】如何按天 小时等查询统计?
查看>>
HDU2191(多重背包)
查看>>
测试用例(一)
查看>>
【转】 mysql反引号的使用(防冲突)
查看>>
邮件中的样式问题
查看>>
AJAX 状态值与状态码详解
查看>>
php面向对象编程(oop)基础知识示例解释
查看>>
1.在数组中找到与给定总和的配对
查看>>
树的子结构
查看>>
关于根据Build Platform或者OS 加载x86或者x64 dll的问题
查看>>
程序员高效开发的几个技巧
查看>>
js-权威指南学习笔记19.2
查看>>