版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、*大学计算机科学系实验报告书实验题目:pcb的组织与维护课程名称:操作系统主讲教师:辅导教师:课程编号:班 级:实验时间:一、实验目的:1、通过编写和调试 pcb 组织与维护的模拟程序以加深对 pcb 组织与维护方 案的理解。2、通过编写和调试 pcb 组织与维护的模拟程序以加强对进程的基本情况以 及进程的运行变化过程的进一步理解。二、实验环境:VC 6.0+三、实验内容1、通过线性方式对以 pcb 为唯一标志的进程进行创建、查询、添加、删除 等操作。2、通过索引方式对以 pcb 为唯一标志的进程进行创建、查询、添加、删除 等操作。3、通过链接方式对以 pcb 为唯一标志的进程进行创建、查询、
2、添加、删除 等操作。四、实验设计原理1系统利用PCB来描述进程的基本情况以及进程的运行变化过程。PCB是进 程存在的唯一标志,当系统创建一个进程时,为进程设置一个PCB再利 用PCM进程进行管理和控制。撤销进程时,系统收回它的PCB进程也 随之消亡。进程是由程序、数据和进程控制块 PCB三部分组成.PCB是进 程的“灵魂”,由于进程控制块中保存了进程的地址信息,通过PCB可以得到进程程序的存储位置,也可以找到整个进程。2为了便于管理,系统把所有的 PCB用适当方式组织起来。一般来说,大 致有以下三种组织方式: 1、线性方式; 2、索引方式; 3、连接方式。通 过这三种方式的组织进而对进程进行高
3、效的管理。五、算法设计与流程程序设计流程图如下:1、线性方式流程图:线性方式代码:#include <iostream>#include <string> using namespace std;#define FALSE 0#define TRUE 1#define TASK_READY 3#define TASK_WAITE 4#define TASK_RUNNING 5 struct task_structstring pname; /进程名int pid;/ 进程号5 运行状态 */int state;/进程当前状态/*3就绪状态 4等待状态 task_stru
4、ct *n ext;/指向下一个的;/ void showInput();void menu(task_struct *pcb);/ int in putNum()提示输入进程数int n;coutvv"请输入进程数:";cin>>n;cout<<endl;return n;void CreateList(task_struct *pcb,int n)pcb->next=NULL;task_struct *p=new task_struct; p=pcb;for(int i=0;i<n;i+)task_struct *q=new task
5、_struct;int tmp;q->pid=i+1;coutvv"请输入第"<<i+1<<"个进程名:";cin>>q->pname;loop:coutvv"请输入进程状态(3为就绪状态,4为等待,5为运行):"cin>>tmp;if(tmp!=3&&tmp!=4&&tmp!=5)coutvv"输入错误!"<<endl;goto loop;elseq->state=tmp;if(p->next=NU
6、LL) q->next=NULL;p->next=q;/p=q;coutvv"Add a node"vvendl;else q->next=NULL;p=p->next;p->next=q;/p=q;coutvv"for Add"vvendl; coutvvendl;void display(task_struct *pcb)task_struct *p;coutvv"*"coutvv"进程号t进程名t当前状态"<<endl;for(p=pcb->next;p!=NU
7、LL;p=p->next)cout<<p->pid<<"t"<<p->pname<<"t"switch(p->state)case 3:cout<<"TASK_READY"<<endl;break;case 4:cout<<"TASK_WAITE"<<endl;break;case 5:cout<<"TASK_RUNNING"<<endl;break;c
8、out<<"'*、'<<endl;menu(pcb);/ void output(task_struct *pcb, task_struct *p)/输入单个进程记录信息cout<<"'*、'<<endl;coutvv"进程号t进程名t当前状态"<<endl;cout<<p->pid<<"t"<<p->pname<<"t"switch(p->state)cas
9、e 3:coutvv"TASK_READY"vvendl;break;case 4:coutvv"TASK_WAITE"vvendl;break;case 5:coutvv"TASK_RUNNING"vvendl;break; coutvvendlvvendlvvendlvvendlvvendl;menu(pcb);void Query(task_struct *pcb) 查询int pid;coutvv"请输入要查询的进程号cin>>pid;task_struct *p;for(p=pcb->next;p
10、!=NULL;p=p->next) if(p->pid=pid) output(pcb, p); return;cout«"无该进程!"<<endl;menu(pcb);void Add(task_struct *pcb) 添加int tmp;task_struct *p=new task_struct; task_struct *q;for(q=pcb;q->next!=NULL;q=q->next); /if(q->next=NULL) if(pcb->next=NULL)p->pid=1;elsep-&g
11、t;pid=q->pid+1;coutvv"请输入要添加的进程名:";cin>>p->pname;loop1:cout<<"请输入进程状态(3为就绪状态,4为等待,5为运行):" cin>>tmp;if(tmp!=3&&tmp!=4&&tmp!=5)cout«"输入错误!"<<endl;goto loop1;elsep->state=tmp;p->next=NULL;/if(q->next=NULL) if(pcb-
12、>next=NULL)pcb->next=p;elseq->next=p; cout<<endl<<endl; display(pcb);void Delete(task_struct *pcb)删除task_struct *p,*q;coutvv"请输入要删除的进程号int tmp;cin>>tmp; for(p=pcb;p!=NULL;p=p->next) q=p->next;if(q->pid=tmp) p->next=q->next; delete q; display(pcb);cout
13、171;"无该进程!"<<endl;menu(pcb);/ void Destroy(task_struct *pcb) 销毁链表task_struct *p,*q;p=pcb;while(p->next!=NULL)q=p->next;p->next=q->next;delete q;delete pcb;void men u(task_struct *pcb)/提示选择相应的操作int m;cout<<"1.查询"<<e ndl;cout<<"2.添加"<
14、;<e ndl;cout<<"3.删除"<<e ndl;cout<<"4. 返回首菜单 "<<endl;cout«"选择:";cin>>m;cout<<endl<<endl;switch(m)case 1:Query(pcb);break;case 2:Add(pcb);break;case 3:Delete(pcb);break;case 4:Destroy(pcb);showInput();break;default:cout<
15、;<"输入有误!重新输入"<<endl;menu(pcb);void List()/线性方式int n=inputNum();task_struct *pcb=new task_struct;CreateList(pcb,n); cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl; display(pcb);void Hash()索引方式/ int n=inpu
16、tNum();void showInput() /提示选择输入int tmp;cout<<"1. 线性方式 "<<endl;/cout<<"2. 索引方式 "<<endl;coutvv"请输入你的选择:"; cin>>tmp;cout<<endl<<endl;switch(tmp)case 1:List();break; /case 2:Hash();break; default:cout<<"输入有误!请重新输入。"<<e ndl«e ndl;showInput();void main() showInput();六、实验调试与结果分析(问题的发现、分析、解决方案与创新)实验结果展示:*进程号 进程名 当前状态1 aTASK_WAITE2 sTASK_READY3 dTASK_RUNNING*1. 查询2. 添加3. 删除4. 返回首菜单选择:请输入要查询的进程号 :2*进程号 进程名 当前状态2 s TASK_READY1. 查询2. 添加3. 删除4. 返回首菜单选择:选择:2请输入要添加
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025国际贸易合同
- 2025开关插座采购合同标准版
- 2025年度高科技企业公司股权协议书模板3篇
- 2025年度智能家居生态链消费者协议3篇
- 2025年度新材料研发与应用公司整体转让协议版3篇
- 2025年度医疗设备融资租赁服务合同模板3篇
- 2025年度农村宅基地房买卖合同(农村电商服务站建设)
- 2025年度公租房合同(含租赁合同签订及备案费用)3篇
- 2025年度环保处理设备专业维修与改造合同3篇
- 2025年度新能源汽车充电基础设施合作项目协议书范本3篇
- 居家养老服务报价明细表
- 食材配送服务方案投标方案(技术方案)
- 年产15000吨硫酸铝项目环评报告表
- 2023-2024学年湖北省孝感市云梦县八年级(上)期末英语试卷
- 2024年一级注册建筑师理论考试题库ab卷
- 2024二人合伙经营项目简单协议书
- 小学数学班级学情分析报告
- IMCA船舶隐患排查表
- 2024年软件开发调试合同样本(二篇)
- 地理月考分析及改进措施初中生
- MOOC 研究生学术规范与学术诚信-南京大学 中国大学慕课答案
评论
0/150
提交评论