-
文档收集于互联网,已重新整理排版
.word
版本可编辑
.
欢迎下 载支持
.
****
大学计算机科学系
实
验
报
告
书
实验题目:
pcb
的组织与维护
课程名称:
操作系统
主讲教师:
辅导教师:
课程编号:
班
级:
实验时间:
一、
实验目的:
1
、通过编写和调试
pcb
组织与维护的模拟 程序以加深对
pcb
组织与维护方
案的理解。
2
、通过编 写和调试
pcb
组织与维护的模拟程序以加强对进程的基本情况以
及进程的运行变化过 程的进一步理解。
二、
实验环境:
VC 6.0++
三、
实验内容
1
、通过线性方式对以pcb
为唯一标志的进程进行创建、查询、添加、删除
等操作。
2、通过索引方式对以
pcb
为唯一标志的进程进行创建、查询、添加、删除
等操作 。
3
、通过链接方式对以
pcb
为唯一标志的进程进行创建、查询 、添加、删除
等操作。
四、
实验设计原理
1
、系统利用
PCB
来描述进程的基本情况以及进程的运行变化过程。
PCB< br>是进
程存在的唯一标志,
当系统创建一个进程时,
为进程设置一个
PC B
,
再利
用
PCB
对进程进行管理和控制。
撤销进程时,< br>系统收回它的
PCB
,
进程也
随之消亡。进程是由程序、数据和进程控 制块
PCB
三部分组成
.PCB
是进
程的“灵魂”,由于进程控制块 中保存了进程的地址信息,通过
PCB
可
以得到进程程序的存储位置,也可以找到整个 进程。
2
、为了便于管理,系统把所有的
PCB
用适当方式组织起 来。一般来说,大
致有以下三种组织方式:
1
、线性方式;
2
、索引 方式;
3
、连接方式。通
1
文档来源为
:
从网络收集整理< br>.word
版本可编辑
.
文档收集于互联网,已重新整理排版
.wo rd
版本可编辑
.
欢迎下载支持
.
过这三种方式的组织进而对进程进行高效的管理。
五、
算法设计与流程
程序设计流程图如下:
1
、线性方式流程图:
1
文档来源为
:
从网络收 集整理
.word
版本可编辑
.
文档收集于互联网,已重新整理排版
.word
版本可编辑
.
欢迎下载支持
.
开始
读入选择选择输入
输出:输入有误
!
请重新输
入
输入是否是
1
否
是
线性方式
是否是
2
否
是
索引方式
请输入进程的个数
读入进程的个数
n
返回首菜单
保存这
n
个进程的信息,并
创建
n
个进程
选择相应的操作
查询
添加
删除
在已有的进程信息中
查找对应进程号的进
程信息
把
新
的
进
程
信
息保存
是
在已有的进程信息中
查找对应进程号的进
程信息
是否存在
否
无该进程
是
是否存在
否
输出进程信息
删除该进程
无该进程
线性方式代码:
1
文档来源为
:
从网络收集整理
.word
版本可编辑
.
文档收集于互联网,已重新整理排版
.word
版本可编辑
.
欢 迎下载支持
.
#include
#include
using namespace std;
#define FALSE 0
#define TRUE
1
#define TASK_READY
3
#define TASK_WAITE
4
#define TASK_RUNNING 5
struct task_struct
{
};
/////////////////////////////////////
void showInput();
void menu(task_struct *pcb);
////////////////////////////////
int inputNum()//
提示输入进程数
{
}
void CreateList(task_struct *pcb,int n)
{
pcb->next=NULL;
task_struct *p=new task_struct;
p=pcb;
for(int i=0;i
task_struct *q=new task_struct;
int tmp;
q->pid=i+1;
1
文档来源为
:
从网络收集整理
.word
版本可编辑
.
string pname; //
进程名
int pid;//
进程号
int state;//
进程当前状态
/*3
就绪状态
4
等待状态
5
运行状态
*/
task_struct *next;//
指向下一个的
int n;
cout<<
请输入进程数
:
cin>>n;
cout<
文档收集于互联网,已重新整理排版
.word
版本可编辑
.
欢迎下载支持
.
}
}
cout<<
请输入第
个进程 名
:
cin>>q->pname;
cin>>tmp;
if(tmp!=3&&tmp!=4&&tmp!=5)
{
}
else
{
}
else
{
}
q->next=NULL;
p=p->next;
p->next=q;
//p=q;
cout<<
q->next=NULL;
p->next=q;
//p=q;
cout<<
q->state=tmp;
if(p->next==NULL)
cout<<
输入错误
!
goto loop;
loop: cout<<
请输入进程状态
(3
为就绪状态
,4
为等待
,5
为运行
):
cout<
{
task_struct *p;
cout<<
c out<<
进程号
t
进程名
t
当前状态
for(p =pcb->next;p!=NULL;p=p->next)
{
cout<
1
文档来源为
:
从网络收集整理
.word版本可编辑
.
文档收集于互联网,已重新整理排版
.word
版本可编 辑
.
欢迎下载支持
.
}
}
switch(p->state)
{
case 3:cout<<
case 4:cout<<
case 5:cout<<
}
cout<<
menu(pcb);
/////// ////////////////////////////////////////
void output(task_struct *pcb, task_struct *p)//
输入单个进程记录信息
{
}
void Query(task_struct *pcb)//
查询
{
int pid;
cout<<
请输入要查询的进程号
:
cin>>pid;
task_struct *p;
for(p=pcb->next;p!=NULL;p=p->next)
{
if(p->pid==pid)
{
output(pcb, p);
return;
1
文档来源为
:
从网络收集整理
.word
版本可编辑
.
cout<<
cout<<
进程号
t
进程名
t
当前状态
cout <
switch(p->state)
{
case 3:cout<<
case 4:cout<<
case 5:cout<<
}
cout<
-
-
-
-
-
-
-
-
本文更新与2021-01-22 16:21,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/550413.html