东北大学操作系统第一次实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 : "<data、name<

ptr=ptr->next;

}

}

}

void Print_State(LinkQueue &Q_Ready,LinkQueue &Q_Running,LinkQueue &Q_Blocked)

{

相关文档
最新文档