- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WORD格式整理版
PAGE
专业学习 参考资料
****大学计算机科学系
实 验 报 告 书
实验题目: pcb的组织与维护
课程名称: 操作系统
主讲教师:
辅导教师:
课程编号:
班 级:
实验时间:
实验目的:
1、通过编写和调试pcb组织与维护的模拟程序以加深对pcb组织与维护方案的理解。
2、通过编写和调试pcb组织与维护的模拟程序以加强对进程的基本情况以及进程的运行变化过程的进一步理解。 ?
实验环境:
VC 6.0++
实验内容
1、通过线性方式对以pcb为唯一标志的进程进行创建、查询、添加、删除等操作。
2、通过索引方式对以pcb为唯一标志的进程进行创建、查询、添加、删除等操作。
3、通过链接方式对以pcb为唯一标志的进程进行创建、查询、添加、删除等操作。
实验设计原理
系统利用PCB来描述进程的基本情况以及进程的运行变化过程。PCB是进程存在的唯一标志,当系统创建一个进程时,为进程设置一个PCB,再利用PCB对进程进行管理和控制。撤销进程时,系统收回它的PCB,进程也随之消亡。进程是由程序、数据和进程控制块PCB三部分组成.PCB是进程的“灵魂”,由于进程控制块中保存了进程的地址信息,通过PCB可以得到进程程序的存储位置,也可以找到整个进程。
为了便于管理,系统把所有的PCB用适当方式组织起来。一般来说,大致有以下三种组织方式:1、线性方式;2、索引方式;3、连接方式。通过这三种方式的组织进而对进程进行高效的管理。
算法设计与流程
程序设计流程图如下:
线性方式流程图:
否
否
是
是
是
否
否
是
开始
读入选择选择输入
输入是否是1
否
线性方式
是否是2
索引方式
输出:输入有误!请重新输入
请输入进程的个数
读入进程的个数n
保存这n个进程的信息,并创建n个进程
选择相应的操作
查询
添加
删除
返回首菜单
在已有的进程信息中查找对应进程号的进程信息
是否存在
输出进程信息
无该进程
把新的进程信息保存
在已有的进程信息中查找对应进程号的进程信息
是否存在
删除该进程
无该进程
线性方式代码:
#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_struct
{
string pname; //进程名
int pid;//进程号
int state;//进程当前状态/*3 就绪状态 4 等待状态 5运行状态*/
task_struct *next;//指向下一个的
};
/////////////////////////////////////
void showInput();
void menu(task_struct *pcb);
////////////////////////////////
int inputNum()//提示输入进程数
{
int n;
cout请输入进程数:;
cinn;
coutendl;
return n;
}
void CreateList(task_struct *pcb,int n)
{
pcb-next=NULL;
task_struct *p=new task_struct;
p=pcb;
for(int i=0;in;i++)
{
task_struct *q=new task_struct;
int tmp;
q-pid=i+1;
cout请输入第i+1个进程名:;
cinq-pname;
loop: cout请输入进程状态(3为就绪状态,4为等待,5为运行):;
cintmp;
if(tmp!=3tmp!=4tmp!=5)
{
cout输入错误!endl;
goto loop;
}
else
q-state=tmp;
if(p-next==NULL)
{
q-next=NULL;
p-next=q;
//p=q;
coutAdd a nodeendl;
}
else
{
q-next=NULL;
p=p-next;
p-next=q;
//p=q;
co
文档评论(0)