操作系统报告.docx
- 文档编号:3782086
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:26
- 大小:139.73KB
操作系统报告.docx
《操作系统报告.docx》由会员分享,可在线阅读,更多相关《操作系统报告.docx(26页珍藏版)》请在冰点文库上搜索。
操作系统报告
实验1:
熟悉Linux系统
熟悉Linux系统的基本操作和开发环境
一.目的
熟悉和掌握Linux系统基本命令,熟悉Linux编程环境,为以后的实验打下基础。
启动、退出、ls(显示目录内容)、cp(文件或目录的复制)、mv(文件、目录更名或移动)、rm(删除文件或目录)、mkdir(创建目录)、rmdir(删除空目录)、cd(改变工作目录)…
C语言编辑、编译
2.内容及要求
熟练掌握Linux基本文件命令;
掌握Linux编辑程序、对源代码进行编译、连接、运行及调试的过程;
认真做好预习,书写预习报告;
实验完成后要认真总结、完成实验报告。
三.Linux系统相关命令
1.创建子目录名mkdir文件名。
2.转换路径命令cd子目录名;cd...(到上层目录)。
3.显示当前命令pwd
4.拷贝文件命令cp-a/-f/-r
5.删除命令rm文件名
6.删除个子目录rmdir子目录名
7.显示文件内容catfile(显示文件内容)/catfile1file2>file3(将文件1和文件2连接到文件3中并显示出来。
)
8.更改文件或目录权限chmod+-=rsw文件名
9.更改文件或目录的拥有者chown文件名用户名
10.列表显示目录名或文件名lsls-l
11.查找文件或目录find文件名或目录名
12.显示进程状态ps
13.清屏命令chear
14.杀进程命令kill进程名
15.c语言的编译gcc-ofilename.outfilename.c
16.c++的编译g++-ofilename.outfilename.cpp
17.程序的运行./fliename.out
实验2:
进程状态
模拟进程状态转换及其PCB的变化
1.目的
自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。
2.内容及要求
设计并实现一个模拟进程状态转换及其相应PCB组织结构变化的程序;
独立设计、编写、调试程序;
程序界面应能反映出在模拟条件下,进程之间状态转换及其对应的PCB组织的变化;
进程的状态模型(三状态、五状态、七状态或其它)可自行选择;
代码书写要规范,要适当地加入注释;
鼓励在实验中加入新的观点或想法,并加以实现;
认真进行预习,完成预习报告;
实验完成后,要认真总结,完成实验报告。
3.数据结构及其说明:
(优先队列)
typedefcharQElemType;
typedefintQpriority;
typedefintStatus;
typedefstructQNode//进程结点
{
QElemTypename[10];//进程名
Qprioritypry;//进程优先级
structQNode*next;//进程指针
}QNode,*QueuePtr;
typedefstruct
{
QueuePtrfront;//对头指针
QueuePtrrear;//队尾指针
}LinkQueue;
classQueue//优先队列
{
public:
Queue();//构造函数
Queue(charty);//构造函数
StatusInitQueue();//初始化函数
StatusClearQueue();//清空函数
StatusEmptyQueue();//判空函数
StatusQueueLength();//求队列长度
QueuePtrGetHead();//求对头元素
StatusEnQueue(QNode&e);//插入队列
StatusDeQueue(QNode&e);//从队列中删除
StatusQueueTravers();//遍历函数
StatusQueueSize();//返回队列大小
StatusQueueEnough();//判断队列是否已满
virtual~Queue();//析构函数
private:
LinkQueueque;//队列
intmaxlength;//队列最大长度
intlength;//队列当前长度
chartype;//队列类型g运行,r就绪,b阻塞
};
4.流程图:
5.程序源代码:
1.优先队列类
//Queue.h:
interfacefortheQueueclass.
//
//////////////////////////////////////////////////////////////////////
#if!
defined(AFX_QUEUE_H__C44569AF_3B9B_4BB4_958E_91290434D653__INCLUDED_)
#defineAFX_QUEUE_H__C44569AF_3B9B_4BB4_958E_91290434D653__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
typedefcharQElemType;
typedefintQpriority;
typedefintStatus;
typedefstructQNode//进程结点
{
QElemTypename[10];//进程名
Qprioritypry;//进程优先级
structQNode*next;//进程指针
}QNode,*QueuePtr;
typedefstruct
{
QueuePtrfront;//对头指针
QueuePtrrear;//队尾指针
}LinkQueue;
classQueue//优先队列
{
public:
Queue();//构造函数
Queue(charty);//构造函数
StatusInitQueue();//初始化函数
StatusClearQueue();//清空函数
StatusEmptyQueue();//判空函数
StatusQueueLength();//求队列长度
QueuePtrGetHead();//求对头元素
StatusEnQueue(QNode&e);//插入队列
StatusDeQueue(QNode&e);//从队列中删除
StatusQueueTravers();//遍历函数
StatusQueueSize();//返回队列大小
StatusQueueEnough();//判断队列是否已满
virtual~Queue();//析构函数
private:
LinkQueueque;//队列
intmaxlength;//队列最大长度
intlength;//队列当前长度
chartype;//队列类型g运行,r就绪,b阻塞
};
#endif//!
defined(AFX_QUEUE_H__C44569AF_3B9B_4BB4_958E_91290434D653__INCLUDED_)
//Queue.cpp:
implementationoftheQueueclass.
//
//////////////////////////////////////////////////////////////////////
#include"Queue.h"
#include"malloc.h"
#include"stdlib.h"
#include"iostream.h"
#defineTRUE1
#defineFALSE0
#defineNULL0
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
//////////////////////////////////////////////////////////////////////
Queue:
:
Queue(charty)
{
length=0;//设置队列初始长度
type=ty;//定义队列类型
if(ty=='g')maxlength=1;//确定最大长度
if(ty=='r'||ty=='b')maxlength=4;//确定最大长度
if(InitQueue())
{
switch(ty)
{
case'g':
cout<<"“运行队列”初始化成功!
...!
!
"< case'r': cout<<"“就绪队列”初始化成功! ...! ! "< case'b': cout<<"“阻塞队列”初始化成功! ...! ! "< default: cout<<"队列初始化出现异常! ! ! ..."< } } else cout<<"队列初始化出现异常! ! ! ..."< } Queue: : Queue() { } Queue: : ~Queue() { } StatusQueue: : InitQueue()//初始化函数 { que.front=que.rear=(QueuePtr)malloc(sizeof(QNode)); if(! que.front)exit(0); que.front->next=NULL; returnTRUE; } StatusQueue: : ClearQueue()//清空函数 { if(que.front==que.rear) { cout<<"队列已为空"< returnTRUE; } QueuePtrs1=que.front->next,s2; cout<<"该队列共"< while(s1) { s2=s1->next; free(s1); s1=s2; } cout<<"队列已清空"< returnTRUE; } StatusQueue: : EmptyQueue()//判空函数 { if(que.front->next==NULL) returnTRUE; else returnFALSE; } StatusQueue: : QueueLength()//求队列长度 { returnlength; } QueuePtrQueue: : GetHead()//求对头元素指针 { returnque.front->next; } StatusQueue: : EnQueue(QNode&e)//插入队列 { if(length>=maxlength) { cout<<"队列已满"< ! ! ..."< returnFALSE; } QueuePtrp=(QueuePtr)malloc(sizeof(QNode));//p为指针,e为结点 QueuePtrs=que.front; if(! p)exit(-1); for(inti=0;i<10;i++) { p->name[i]=e.name[i]; } p->pry=e.pry; p->next=NULL; while(s->next! =NULL&&p->pry>=s->next->pry)//p的优先级小于s的优先级,则p后移(数字越大,优先级越小) { s=s->next; } if(s->next==NULL) { que.rear->next=p; que.rear=p; } else { p->next=s->next; s->next=p; } length+=1;//队列长度++ returnTRUE; } StatusQueue: : DeQueue(QNode&e)//删除对头元素 { QueuePtrs; if(que.front==que.rear) { cout<<"队列为空,所删元素不存在! ! ! ..."< returnFALSE; } s=que.front->next; for(inti=0;i<10;i++) { e.name[i]=s->name[i]; } e.pry=s->pry; e.next=NULL; que.front->next=s->next; length--;//队列长度-- if(length==0)que.rear=que.front; free(s); returnTRUE; } StatusQueue: : QueueTravers()//遍历函数 { QueuePtrs; if(que.front==que.rear) { cout<<"队列为空! ! ! ..."< returnFALSE; } s=que.front->next; cout<<"该队列共"< while(s) { cout<<"("< s=s->next; } returnTRUE; } StatusQueue: : QueueSize()//返回队列大小 { returnmaxlength; } StatusQueue: : QueueEnough()//判断队列是否已满 { if(length==maxlength) returnTRUE; else returnFALSE; } 2.主程序 #include"malloc.h" #include"stdlib.h" #include"iostream.h" #include"Queue.h" #defineTRUE1 #defineFALSE0 #defineNULL0 StatusCoutState(Queuerun,Queueready,Queueblock)//输出所有队列状态 { cout<<"“运行队列: ”"; run.QueueTravers(); cout<<"“就绪队列: ”"; ready.QueueTravers(); cout<<"“阻塞队列: ”"; block.QueueTravers(); returnTRUE; } voidmain() { Queuerun('g'),ready('r'),block('b');//创建运行,就绪,阻塞队列 QNodee,e1; intcount;//进程数 chars='G';//退出变量 intmethod;//转换类型 cout<<"请输入“运行队列”中的进程数: (最大数值为"< ";//初始化运行队列 cin>>count; for(inti1=0;i1 { cout<<"请输入进程名: "; cin>>e.name; cout<<"请输入进程优先级: "; cin>>e.pry; e.next=NULL; run.EnQueue(e);//插入运行队列 } cout< cout<<"请输入“就绪队列”中的进程数: (最大数值为"< ";//初始化就绪队列 cin>>count; for(inti2=0;i2 { cout<<"请输入进程名: "; cin>>e.name; cout<<"请输入进程优先级: "; cin>>e.pry; e.next=NULL; ready.EnQueue(e);//插入就绪队列 } cout< cout<<"请输入“阻塞队列”中的进程数: (最大数值为"< ";//初始化阻塞队列 cin>>count; for(inti3=0;i3 { cout<<"请输入进程名: "; cin>>e.name; cout<<"请输入进程优先级: "; cin>>e.pry; e.next=NULL; block.EnQueue(e);//插入阻塞队列 } cout< CoutState(run,ready,block);//输出所有队列状态 while(s=='G')//G表继续,S表停止 { s='S'; cout<<"请输入状态转换类型: "< "1: 就绪态到运行态"< "2: 运行态到就绪态"< "3: 运行态到阻塞态"< "4: 阻塞态到就绪态"< "5: 创建进程到就绪态"< "6: 注销运行进程"< cin>>method; switch(method) { case1: if(run.QueueEnough())//就绪态到运行态 { if(! ready.EmptyQueue()) { if(ready.GetHead()->pry>=run.GetHead()->pry) { cout<<"运行队列已满,无权调入! ! ! ..."< CoutState(run,ready,block);//输出所有队列状态 } else { ready.DeQueue(e); run.DeQueue(e1); ready.EnQueue(e1); run.EnQueue(e); cout<<"调入进程优先级高于当前进程,调入成功! ...! ! "< CoutState(run,ready,block);//输出所有队列状态 } } else { cout<<"无就绪进程调入! ! ! ..."< CoutState(run,ready,block);//输出所有队列状态 } } else { if(ready.EmptyQueue()) { cout<<"无就绪进程调入! ! ! ..."< CoutState(run,ready,block);//输出所有队列状态 } else { ready.DeQueue(e); run.EnQueue(e); cout<<"就绪进程已调入运行队列! ...! ! "< CoutState(run,ready,block);//输出所有队列状态 } } break; case2: if(! run.EmptyQueue())//运行态到就绪态 { run.DeQueue(e); if(! ready.EmptyQueue()) { ready.DeQueue(e1); run.EnQueue(e1); ready.EnQueue(e); cout<<"运行态到就绪态转换成功! ...! ! "< CoutState(run,ready,block);//输出所有队列状态 } else { ready.EnQueue(e); cout<<"就绪队列为空,转换成功! ...! ! "< CoutState(run,ready,block);//输出所有队列状态 } } else { if(ready.EmptyQueue()) { cout<<"就绪队列为空,状态无法转换! ! ! ..."< CoutState(run,ready,block);//输出所有队列状态 } else { ready.DeQueue(e); run.EnQueue(e); cout<<"运行队列为空,已调入就绪进程! ...! ! "< CoutState(run,ready,block);//输出所有队列状态 } } break; case3: if(block.QueueEnough())//运行态到阻塞态 { if(! run.EmptyQueue()) { run.DeQueue(e); cout<<"运行进程已被阻塞"< cout<<"阻塞队列已满,此运行状态被丢弃! ! ! ..."< } else { cout<<"运行队列为空,此状态转换无法进行! ! ! ..."< } if(! ready.EmptyQueue()) { ready.DeQueue(e1); run.EnQueue(e1); cout<<"就绪进程调入已运行队列! ...! ! "< CoutState(run,ready,block);//输出所有队列状态 } else { cout<<"就绪队列为空,无进程运行! ! ! ..."< CoutState(run,ready,block);//输出所有队列状态 } } else {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 报告