操作系统课程设计姓名:朱文化班级:11计科1班学号:201110510130老师:胡静芳、李娟操作系统课程设计 (3)一、进程的创建控制与取消 (3)1、任务目的 (3)2、内容 (3)3、核心代码 (3)4、结果截图 (6)二、单处理机系统的进程调度 (9)1、实验目的 (9)2、实验内容 (9)3、核心代码 (9)4、实验截图 (11)三、基本存储器管理 (13)1、实验目的 (13)2、实验内容 (13)3、核心代码 (14)4、实验截图 (15)四、请求分页存储管理 (16)1、实验目的 (16)2、实验内容 (17)3、核心代码 (17)4、实验截图 (19)五、死锁的避免 (19)1、实验目的 (19)2、实验内容 (19)3、核心代码 (19)4、实验截图 (21)六、磁盘空间的分配与回收 (21)1、实验目的 (21)2、实验内容 (21)3、核心代码 (21)4、实验截图 (23)七、文件管理 (24)1、实验目的 (24)2、实验内容 (24)3、核心代码 (24)4、实验截图 (27)八、心得体会 (27)操作系统课程设计一、进程的创建控制与取消1、任务目的加深对进程概念的理解,明确进程和程序的区别;进一步认识并发执行的概念,区别顺序执行和并发执行;分析进程争用临界资源的现象,学习解决进程互斥的方法;2、内容编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四作业的名称、大小、优先级等。
系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出。
同时模拟内存空间为作业分配内存空间,并把结果用图形形象地表示出来,同样通过终端输出。
按进程的优先级的顺序撤消进程,同时通过终端显示PCB的撤消过程和内存的释放过程。
3、核心代码主函数:void main(){memoryspace L=new LNode; //memoryspaceint N;cout<<"初始多大空间,请输入一个整数:"<<endl;cin>>N;Init(L,N); //初始化大小为1000的内存空间choice(L); //进入操作}void Init(memoryspace &L,int size) //初始化空间段{memoryspace p = new LNode;p->size = size;p->state = 0;p->task_name = 'n';p->next = NULL;L->next = p;}void setfree(memoryspace &L) //找出连续的空闲资源,回收空闲空间{memoryspace p=L->next,q=p->next;while(p && q){if(p->state == 0 && q->state == 0) //如果空间连续,则回收{p->size +=q->size;p->next = p->next->next;delete q;q=p->next;}else{p = q;q = q->next;}}cout<<"回收成功"<<endl;}void deltask(const memoryspace L) //删除作业{char task_name;int flag=0;Display(L);cout<<"请输入需要回收的作业名称:";cin>>task_name;memoryspace p=L,q=L->next;while(q){if(q->task_name == task_name){q->state=0;q->task_name='?';flag=1;break;}else{p = q;q = q->next; //找到要删除作业的下一个结点}}if(flag == 0)cout<<"删除作业不成功"<<endl;elsecout<<"删除作业成功"<<endl;}void Display(const memoryspace L) //显示作业{int count=1;memoryspace p = L->next;cout<<"结点号作业状态大小"<<endl;while(p){cout<<"结点"<<count<<" "<<p->task_name<<" ";cout<<p->state<<" "<<p->size<<endl;p = p->next;count++;}}分配空间代码:void Add(memoryspace &L) //添加作业{int new_size;char new_name;memoryspace q=L,p = L->next;cout<<"请输入新任务的名称:";cin>>new_name;cout<<"请输入新任务的大小:";cin>>new_size;while(p) //查找空闲资源进行分配{if (new_size<=0){cout<<endl<<"申请的空间不能小于1"<<endl;break;}if(p->state==0 && p->size >= new_size){//****************************************************// memoryspace q = new LNode;q->size = p->size - new_size;q->state = 0;q->task_name='?';q->next=NULL;//****************************************************// p->size = new_size;p->state = 1;p->task_name=new_name;q->next = p->next;p->next = q;break; //分配完成便退出}else{p = p->next; //移动到足够分配的空结点}if(!p){cout<<"作业"<<new_name<<"内存分配不成功"<<endl;break;}}p = L->next;while(p) //删除大小为0的结点,当分配空间完时会出现0结点{if(p->size == 0){q->next = q->next->next;delete p;p = q->next;}else{q = p;p = p->next;}}}4、结果截图运行程序输入空间大小50;选择添加作业;选择显示作业可看到分配的空间;再次添加作业;之后删除作业;可以看到空间未回收;回收作业;空间已被回收;二、单处理机系统的进程调度1、实验目的加深对进程概念的理解,明确进程和程序的区别深入了解系统如何组织进程,创建进程进一步认识如何实现处理机调度。
2、实验内容从下面三个调度算法中,选择一个调度算法来实现进程调度:a)先来先服务调度算法b)优先数调度算法;c)时间片轮法调度算法d)多级反馈队列轮转调度算法3、核心代码主函数:void main() /*主函数*/{int len,h=0;char ch;input();len=space();while((len!=0)&&(ready!=NULL)){ch=getchar();h++;printf("\n 当前运行次数为:%d \n",h);p=ready;ready=p->link;p->link=NULL;p->state='R';check();running();printf("\n 按任一键继续......");ch=getchar();}printf("\n\n 进程已经完成.\n");ch=getchar();}调用函数:void show(){printf("\nqname\tstate\tsuper\tndtime\truntime\n");}void disp(PCB * pr){printf(" %s\t",pr->name);printf(" %c\t",pr->state);printf(" %d\t",pr->super);printf(" %d\t",pr->ntime);printf(" %d\t",pr->rtime);printf("\n");}void check(){PCB* pr;printf("\n****当前正在运行的进程是:%s",p->name);show();disp(p);pr=ready;if(pr==NULL)printf("\n****当前就绪队列为空!");else{printf("\n****当前就绪队列状态为:");show();while(pr!=NULL){disp(pr);pr=pr->link;}}}void destroy(){printf("\n 进程[%s]已完成.\n",p->name);free(p);}void running(){(p->rtime)++;if(p->rtime==p->ntime)destroy(); else{(p->super)--;p->state='w';sort();}}4、实验截图输入进程数;进程名称、时间、优先级;观察运行情况;三、基本存储器管理1、实验目的一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。