操作系统实验四.docx
《操作系统实验四.docx》由会员分享,可在线阅读,更多相关《操作系统实验四.docx(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品文档,仅供学习与交流,如有侵权请联系网站删除学号E11614051 专业计算机科学与技术 姓名施飞宇实验日期2018/11/05 教师签字 成绩实验报告【实验名称】 实验四 主存空间的分配与回收(一)【实验目的】理解在连续分区动态的存储管理方式下,如何实现主存空间的分配与回收。【实验原理】1. 首次适应算法实现主存空间的分配与回收;2. 循环首次适应算法实现主存空间的分配与回收;【实验内容】一. 采用可变式分区管理,使用首次适应算法实现主存空间的分配与回收数据结构:typedef struct pcbchar pnameN;/进程名|分区号 int begin;/起始地址 int end;
2、/结束地址 int length;/进程长度|分区大小char state;/进程状态|分区状态 struct pcb *next;/链表指针PCB;分区和进程同样的数据结构,其内容用链表进行存储。state=y表示已分配内存,state=n表示未进行内存分配。算法流程图:实验代码:/*2018/11/15施飞宇 笃行南楼a202*/#define N 20#include #include #include using namespace std;typedef struct pcbchar pnameN;/进程名|分区号 int begin;/起始地址 int end;/结束地址 int
3、length;/长度|分区大小char state;/进程状态|分区状态 struct pcb *next;/链表指针PCB;PCB headinput;/进程链表PCB headarea;/分区链表char number=a;void input_process();/建立进程函数void create_area();/创建分区大小void assign(PCB *Q,PCB *p);/分配内存void colect(PCB *Q,PCB *p);/回收内存void runprocess();/运行进程函数void printp(PCB *p);/输出进程函数void printa(PCB
4、*Q);/输出分区函数void input_process() cout*创建进程*endl;PCB *p1,*p2;cout输入进程数目num;int i=0;p1=&headinput;p2=p1;for(i=0;inum;i+)cout输入第i+1进程名,进程大小pname);cinp1-length;p1-begin=p1-end=0;p1-state=n;/n代表未被分配内存p1-next=new PCB;p2=p1;p1=p1-next;delete p1;p1=NULL;p2-next=NULL;void create_area()/创建分区大小PCB *Q1;cout*创建分区
5、*Q1-pname;Q1-begin=0;Q1-length=20;Q1-end=Q1-begin+Q1-length;Q1-state=n;Q1-next=new PCB;Q1=Q1-next;cinQ1-pname;Q1-begin=20;Q1-length=30;Q1-end=Q1-begin+Q1-length;Q1-state=n;Q1-next=new PCB; Q1=Q1-next;cinQ1-pname;Q1-begin=50;Q1-length=40;Q1-end=Q1-begin+Q1-length;Q1-state=n;Q1-next=new PCB; Q1=Q1-nex
6、t;cinQ1-pname;Q1-begin=90;Q1-length=50;Q1-end=Q1-begin+Q1-length;Q1-state=n;Q1-next=new PCB; Q1=Q1-next; cinQ1-pname;Q1-begin=140;Q1-length=60;Q1-end=Q1-begin+Q1-length;Q1-state=n;Q1-next=NULL; Q1=Q1-next;void assign(PCB *Q,PCB *p)/分配内存 PCB *Q1=Q; PCB *Q2; while(Q1) if(Q1-length=p-length&Q1-state!=y
7、) p-begin=Q1-begin; p-end=p-begin+p-length; p-state=y; Q1-state=y; if(Q1-length!=p-length) Q2=new PCB; Q2-next=Q1-next; Q1-next=Q2; Q2-begin=p-end; Q2-end=Q1-end; Q1-end=Q2-begin; Q2-state=n; Q2-length=Q2-end-Q2-begin; Q1-length=p-length; Q2-pname0=char(+number); Q2-pname1=0; return; else Q1=Q1-next
8、; coutpname未被成功分配内存begin=p-begin&Q1-state=y) Q1-state=n; Q1-end=p-end; Q1-length=Q1-end-Q1-begin; if(Q1-next-state=n&Q1-next-pname0!=P) Q3=Q1-next; Q1-next=Q3-next; Q1-end=Q3-end; Q1-length=Q1-end-Q1-begin; delete Q3; if(Q1-pname0!=P&Q2-state=n) Q2-end=Q1-end; Q2-length=Q2-end-Q2-begin; Q2-next=Q1-n
9、ext; delete Q1; return; Q2=Q1; Q1=Q1-next;void printp(PCB *p)/输出进程函数 cout进程名 起始地址 结束地址 进程大小 分配状态(y|n)endl; while(p) coutpname begink endk lengthk statenext;void printa(PCB *Q)/输出分区函数 cout分区名 起始地址 结束地址 分区大小 分配状态(y|n)endl; while(Q) coutpname begink endk lengthk statenext;int main() input_process();pri
10、ntp(&headinput); create_area();printa(&headarea); PCB *p1,*Q1; p1=&headinput; Q1=&headarea; cout*内存分配*next; p1=&headinput; cout*内存回收*next; return 0;测试数据:进程名 起始地址 结束地址 进程大小 分配状态(y|n)A 0k 0k 2k nB 0k 0k 3k nC 0k 0k 4k nD 0k 0k 13k nE 0k 0k 23k nF 0k 0k 45k n分区名 起始地址 结束地址 分区大小 分配状态(y|n)P0 0k 20k 20k nP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验
限制150内