东北大学操作系统第一次实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1:熟悉Linux系统
一、题目:熟悉Linux系统
二、目的:
熟悉与掌握Linux系统基本命令,熟悉Linux编程环境,为以后的实验打下基础。
1、启动、退出、ls(显示目录内容)、cp(文件或目录的复制)、mv(文件、目录更名或移动)、rm(删除文件或目录)、mkdir(创建目录)、rmdir(删除空目录)、cd(改变工作目录)…
2、C语言编辑、编译
三、内容及要求:
1、熟练掌握Linux基本文件命令;
2、掌握Linux编辑程序、对源代码进行编译、连接、运行及调试的过程;
3、认真做好预习,书写预习报告;
4、实验完成后要认真总结、完成实验报告。
四、内容及要求:
在Linux环境下编制、调试源程序的实际过程(每一步的具体说明)。
实验2:进程状态
一、题目:进程状态
二、目的:
自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。
三、内容及要求
1、设计并实现一个模拟进程状态转换及其相应PCB组织结构变化的程序;
2、独立设计、编写、调试程序;
3、程序界面应能反映出在模拟条件下,进程之间状态转换及其对应的PCB组织的变化。
4、进程的状态模型(三状态、五状态、七状态或其它)可自行选择,
5、代码书写要规范,要适当地加入注释;
6、鼓励在实验中加入新的观点或想法,并加以实现;
7、认真进行预习,完成预习报告;
8、实验完成后,要认真总结,完成实验报告。
四、程序流程图
图4、1 进程转换流程五、使用的数据结构及其说明
struct PCB //进程控制块PCB
{
char name; //名字标识
string state; //状态
int time; //执行时间
};
typedef struct PCB ElemType;
struct QNode
{
ElemType data;
struct QNode *next;
}; //链式队列结点
typedef struct QNode QNode; //结点
typedef struct QNode *PNode;
typedef struct
{
PNode frnt;
PNode rear;
} LinkQueue; //链式队列
六、程序源代码、文档注释及文字说明
#include
#include
#include
#include
using namespace std;
struct PCB //进程控制块PCB
{
char name; //名字标识
string state; //状态
int time; //执行时间
};
typedef struct PCB ElemType;
struct QNode
{
ElemType data;
struct QNode *next;
}; //链式队列结点
typedef struct QNode QNode; //结点
typedef struct QNode *PNode;
typedef struct
{
PNode frnt;
PNode rear;
} LinkQueue; //链式队列
void Insert_Queue(LinkQueue &Q,ElemType e) //插入
{
PNode ptr=(PNode)malloc(sizeof(QNode));
if(!ptr)
{
cout<<"(Insert_Queue)动态分配结点失败!\n";
exit(1);
}
ptr->data=e;
ptr->next=NULL;
Q、rear->next=ptr;
Q、rear=ptr;
}
int Init_Queue(LinkQueue &Q) //初始化
{
Q、frnt=Q、rear=(PNode)malloc(sizeof(QNode));
if(!Q、frnt)
exit(1);
Q、frnt->next=NULL;
return 0;
}
int Delete_Queue(LinkQueue &Q,ElemType &e) //删除(头结点删除法)
{
PNode ptr;
if(Q、frnt==Q、rear) //空队列
return 1;
ptr=Q、frnt->next; //删除第一个元素
Q、frnt->next=ptr->next;
e=ptr->data;
if(Q、rear==ptr)
Q、rear=Q、frnt;
free(ptr);
return 0;
}
int Empty_Queue(LinkQueue Q) //判断就是否为空队列,就是1,否0
{
return (Q、frnt==Q、rear?1:0);
}
void Print_Queue(LinkQueue &Q) //打印队列元素
{
PNode ptr;
if(Q、frnt==Q、rear) //队列为空时,返回提示信息
{
cout<<"\t\tempty、\n";
}
else
{
ptr=Q、frnt->next;
while(ptr!=NULL)
{
cout<<"\t\tProcess's name : "< ptr=ptr->next; } } } void Print_State(LinkQueue &Q_Ready,LinkQueue &Q_Running,LinkQueue &Q_Blocked) {