2022年北京工业大学操作系统课设报告 .pdf
《2022年北京工业大学操作系统课设报告 .pdf》由会员分享,可在线阅读,更多相关《2022年北京工业大学操作系统课设报告 .pdf(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、操作系统课程设计学号 110703xx 姓名 xxx 指导教师金雪云2014年 1 月名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 28 页 - - - - - - - - - 一、 报告摘要报告实现了三次实验的全部要求,均以流程图和源代码的形式做了展示,并附上了实验结果图。二、 关键词进程调度,空间分配,磁盘调度,流程图。三、 引言本次实验我选择的是完成实验六、实验七和实验九三个任务。四、实验六 . 进程调度4.1 设计目的:(1)要求学生设计并实现一个模拟进程调度的
2、算法(时间片轮转及先来先服务)。(2)理解进程控制块的结构。(3)理解进程运行的并发性。(4)掌握进程调度算法。4.2 设计要求:(1)实现时间片轮转算法完成进程的调度。(2)实现先来先服务算法完成进程的调度。4.3 详细设计:4.3.1 数据结构设计及变量说明进程控制块:typedef struct node char name10;/进程标识符 int round_num;/进程时间轮转时间片 int cputime;/进程占用 cpu 时间 int needtime;/还需的时间 int count;/计数器 char state;/进程状态 struct node* next;/指向链
3、表下一个节点PCB;/ 进程控制块变量说明:PCB *ready_head, *finish_head, *ready_ptr, *finish_ptr, *ready_rear, *finish_rear;/就绪队列头指针,尾指针,操作指针和完结队列的头指针,尾指针,操作指针 int process_num = 0;/进程数 int reamin_num;/剩余进程数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 28 页 - - - - - - - - - int c
4、hoose;/算法选择 1 时间片轮转 2. 先来先服务43.2 时间片轮转算法接收进程数接收各进程名称及运行时间构造 ready链表取头指针表头需要时间0输出调度信息需要时间 =01.表尾 = 表头;2.表头 = 表头 -next;插入finish链表表尾结束Needtime-1ynn表头 = 表头 -next结果演示:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 28 页 - - - - - - - - - 4.3.3 先来先服务算法接收进程数接收各进程名称及运行时
5、间构造 ready链表表头需要时间0取头指针输出调度信息需要时间 =0插入finish链表表尾结束Needtime-1ynn表头 = 表头 -next名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 28 页 - - - - - - - - - 结果演示:4,3,4 实验源码:#include #include #include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
6、 - - 第 5 页,共 28 页 - - - - - - - - - typedef struct node char name10;/进程标识符 int prio;/进程优先数 int round_num;/进程时间轮转时间片 int cputime;/进程占用 cpu 时间 int needtime;/还需的时间 int count;/计数器 char state;/进程状态 struct node* next; PCB; void InitPCB(PCB* pcb) strcpy(pcb-name, none); pcb-prio = 1000; pcb-round_num = 0;
7、pcb-cputime = 0; pcb-needtime = 0; pcb-count = 0; pcb-state = W; pcb-next = NULL; void main() PCB *ready_head, *finish_head, *ready_ptr, *finish_ptr, *ready_rear, *finish_rear;/就绪队列头指针,尾指针,操作指针和完结队列的头指针,尾指针,操作指针 int process_num = 0;/进程数 int reamin_num;/剩余进程数 int choose;/算法选择 1 时间片轮转 2. 先来先服务 while (
8、1) printf(请选择调度算法:n); printf(1. 时间片轮转法 2.先来先服务算法 0. 退出 n); scanf(%d, &choose); if (0 = choose) return; if (1 = choose) printf(请输入进程数:n); scanf(%d, &process_num); reamin_num = process_num;/初始化剩余进程数为进程数 for (int i = 0; i next = ready_head;/首尾相连 InitPCB(ready_head); scanf(%s%d, ready_head-name, &ready_
9、head-needtime); else ready_ptr = (PCB *)malloc(sizeof(PCB); InitPCB(ready_ptr); scanf(%s%d, ready_ptr-name, &ready_ptr-needtime); ready_rear-next = ready_ptr; ready_ptr-next = ready_head; ready_rear = ready_rear-next; finish_head = NULL;/初始化为空 while (ready_head-needtime 0) printf(=新一轮调度初态=n); printf
10、(进程名 tcpu时间 t所需时间 t状态 n); ready_ptr = ready_head;/ptr用来保留原有head 信息,用于输出链表 finish_ptr = finish_head;/ptr用来保留原有head 信息,用于输出链表 ready_head-state = R;/就绪队列头设置为运行 for (int i = reamin_num; i 0; i-) /输出所有剩余节点信息 printf(%st%dt%dt%cn, ready_ptr-name, ready_ptr-cputime, ready_ptr-needtime, ready_ptr-state); rea
11、dy_ptr = ready_ptr-next; while (finish_ptr != NULL) /输出调度结束节点的信息 printf(%st%dt%dt%cn, finish_ptr-name, finish_ptr-cputime, finish_ptr-needtime, finish_ptr-state); finish_ptr = finish_ptr-next; /getch(); ready_ptr = ready_head;/ptr用来保留原有head 信息,用于释放空间 ready_head-cputime+;/所用时间增加 ready_head-needtime-;
12、/需要时间减1 ready_head-state = W;/调度结束,还原就绪态 if (0 = ready_head-needtime) /如果不再需要时间且为队头 ready_head = ready_head-next;/循环链表的移动 ready_rear-next = ready_head; ready_ptr-next = NULL;/断开连接 ready_ptr-state = F; if (reamin_num = process_num) /头一个进入finish队列的 finish_rear = finish_head = ready_ptr; else finish_re
13、ar-next = ready_ptr; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 28 页 - - - - - - - - - finish_rear = ready_ptr; reamin_num-; else /如果没有做完则移动到队尾,下一个作业变为队头 ready_rear = ready_head; ready_head = ready_head-next; finish_ptr = finish_head;/ptr用来保留原有head 信息,用于输出链
14、表 printf(=调度结束 =n); while (finish_ptr != NULL) /输出调度结束节点的信息 printf(%st%dt%dt%cn, finish_ptr-name, finish_ptr-cputime, finish_ptr-needtime, finish_ptr-state); finish_ptr = finish_ptr-next; if (2 = choose) printf(请输入进程数:n); scanf(%d, &process_num); reamin_num = process_num;/初始化剩余进程数为进程数 for (int i = 0
15、; i name, &ready_head-needtime); else ready_rear-next = (PCB *)malloc(sizeof(PCB); InitPCB(ready_rear-next); scanf(%s%d, ready_rear-next-name, &ready_rear-next-needtime); ready_rear = ready_rear-next; finish_head = NULL;/初始化为空 while (reamin_num 0) printf(=新一轮调度初态=n); printf(进程名 tcpu时间 t所需时间 t状态 n);
16、ready_ptr = ready_head;/ptr用来保留原有head 信息,用于释放空间 finish_ptr = finish_head; ready_head-state = R;/就绪队列头设置为运行 for (int i = reamin_num; i 0; i-) /输出所有剩余节点信息 printf(%st%dt%dt%cn, ready_ptr-name, ready_ptr-cputime, ready_ptr-needtime, ready_ptr-state); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
17、- - 名师精心整理 - - - - - - - 第 8 页,共 28 页 - - - - - - - - - ready_ptr = ready_ptr-next; while (finish_ptr != NULL) /输出调度结束节点的信息 printf(%st%dt%dt%cn, finish_ptr-name, finish_ptr-cputime, finish_ptr-needtime, finish_ptr-state); finish_ptr = finish_ptr-next; ready_ptr = ready_head;/ptr用来保留原有head 信息,用于释放空间
18、ready_head-cputime+;/已用时间加1 ready_head-needtime-;/需要时间减一 /ready_head-state = W;/调度结束,还原就绪态 if (0 = ready_head-needtime) /如果不再需要时间 ready_head = ready_head-next; ready_rear-next = ready_head; ready_ptr-next = NULL;/断开连接 ready_ptr-state = F; if (reamin_num = process_num) /头一个进入finish队列的 finish_rear = f
19、inish_head = ready_ptr; else finish_rear-next = ready_ptr; finish_rear = ready_ptr; reamin_num-; finish_ptr = finish_head;/ptr用来保留原有head 信息,用于输出链表 printf(=调度结束 =n); while (finish_ptr != NULL) /输出调度结束节点的信息 printf(%st%dt%dt%cn, finish_ptr-name, finish_ptr-cputime, finish_ptr-needtime, finish_ptr-state
20、); finish_ptr = finish_ptr-next; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 28 页 - - - - - - - - - 五、实验七 . 主存空间的分配与回收5.1 设计目的:主存是中央处理器能直接存取指令和数据的存储器,能否合理地利用主存,在很大程度上将影响到整个计算机系统的性能。主存分配是指在多道作业和多进程环境下,如何共享主存空间。主存回收是指当作业执行完毕或进程运行结束后将主存空间归还给系统。主存分配与回收的实现是与主存储器的
21、管理方式有关。本次设计主要是为了帮助学生深入理解主存空间的分配与回收的几种算法。(1) 掌握最先适应分配算法(2) 掌握最优适应分配算法(3) 掌握最坏适应分配算法5.2 设计要求:(1) 设计一个内存分配回收的程序使用最先适应分配算法(2) 设计一个内存分配回收的程序使用最优适应分配算法(3) 设计一个内存分配回收的程序使用最坏适应分配算法用户提出内存空间请求,系统根据申请者要求,选择上述算法的一种分配策略分析内存空间的使用情况,找出合适的空闲区,分给申请者,当进程执行完毕时,系统收回它所占用的内存空间。5.3 详细设计:5.3.1 数据结构设计及变量说明typedef struct nod
22、e int start;/区块起始地址 int length;/区块长度 char tag20;/区块标识 struct node* next;/下一区块JOB;/区块变量说明int count_select_3 = 0; /记录“显示空闲表和分配表”选项被使用的次数 int job_num = 0; /初始化区块数为0 char input_file_name30;/文件名 char job_name10;/用户输入的作业名 int length;/作业长 int select;/保存用户的命令选择,共有03 四个选项 JOB* job_start, *job_ptr, *job_rear,
23、 *job_ptr1, *job_use_start, *job_use_rear, *job_use_ptr, *job_use_ptr1, *job_use_temp; FILE* fp;/文件指针名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 28 页 - - - - - - - - - 5.3.2 最先适应分配算法开始从文件接收初始化区块信息,构建区块链表接收用户操作接收作业名及长度接收要删除的作业名显示当前所有区块信息空闲区表中还有结点取头指针123已分配表还
24、有结点取头指针名字相同Y删除并加入空闲区合并YN&指针后移N更新适配差值Y指针后移取求得最小差值的块进行分配N结果展示:分配:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 28 页 - - - - - - - - - 删除:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 28 页 - - - - - - - - - 5.3.3 最优适应分配算法
25、开始从文件接收初始化区块信息,构建区块链表接收用户操作接收作业名及长度接收要删除的作业名显示当前所有区块信息空闲区表中还有结点取头指针123已分配表还有结点取头指针名字相同删除并加入空闲区合并YN&指针后移N更新适配差值Y指针后移取求得最小差值的块进行分配N结果展示:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 28 页 - - - - - - - - - 5.3.4 最差适应分配算法开始从文件接收初始化区块信息,构建区块链表接收用户操作接收作业名及长度接收要删除的作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年北京工业大学操作系统课设报告 2022 北京工业大学 操作系统 报告
限制150内