2022年电子科大-计算机-操作系统实验报告-2014级 .docx
《2022年电子科大-计算机-操作系统实验报告-2014级 .docx》由会员分享,可在线阅读,更多相关《2022年电子科大-计算机-操作系统实验报告-2014级 .docx(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选学习资料 - - - - - - - - - 电 子 科 技 大 学实验报告同学:郫县 LBJ 学号:试验地点:主楼 A2-413 指导老师:温顺可爱的刘杰彦 试验时间: 2022 年 4 月 22 日上午一、试验室名称:电脑学院主楼机房 二、试验项目名称:进程与资源治理 试验分工: 郫县 LBJ 进程治理设计 郫县小胖子 资源治理设计郫县威斯布鲁克 三、试验学时: 2 四、试验原理:进程调度与时钟中断设计此处的试验原理在指导书上特别丰富,因此不照搬过来,主要写出所要使用到学问点,具体实现过程中的原理分析见报告第八部分“ 试验步骤” 处;(一) 总体设计 系统总体架构如图 1 所示,最右边
2、部分为进程与资源治理器,属于操作系统 内核的功能;要求能够设计与实现一个简洁的进程与资源治理器,具有如下功能: multi_unit 资源的治理;完成 完成进程创建、撤销和进程调度;完成多单元 资源的申请和释放;完成错误检测和定时器中断功能;图 1 系统总体结构(二) Test shell 设计 应具有的功能:名师归纳总结 - - - - - - -第 1 页,共 18 页精选学习资料 - - - - - - - - - 1、从终端或者测试文件读取命令;2、将用户需求转换成调度内核函数即调度进程和资源治理器;3、在终端或输出文件中显示结果:如当前运行的进程、错误信息等;(三) 进程治理设计 1
3、、进程状态与操作 2、进程掌握块结构 PCB 3、主要函数:创建进程、撤销进程(四) 资源治理设计 1、主要数据结构 RCB 2、恳求资源 3、释放资源五进程调度与时钟中断设计关键:使用基于优先级的抢占式调度策略,算法;参考课上 ppt :五、试验目的:在同一优先级内使用时间片轮转设计和实现进程与资源治理,并完成 Test shell 的编写,以建立系统的进程治理、调度、资源治理和安排的学问体系,从而加深对操作系统进程调度和资源治理功能的宏观懂得和微观实现技术的把握;六、试验内容:设计与实现一个简洁的进程与资源治理器,要求具有如下功能: 完成进程创名师归纳总结 建、撤销和进程调度;完成多单元
4、multi_unit资源的治理;完成资源的申请第 2 页,共 18 页- - - - - - -精选学习资料 - - - - - - - - - 和释放;完成错误检测和定时器中断功能;通过编写测试脚本 test shell来完成对进程与资源治理器的测试;七、试验环境设备、元器件:Windows 7、Visual Studio 2022 八、试验步骤:(一) 系统功能需求分析:(二) 总体框架设计:1、 具体原理和总体工作流程分析:第一,通过 test shell从测试文件中读入各种命令;然后,对命令进行分析,将用户的需求转换成调度内核函数,也就是说,通 过调度进程和资源治理器,实现创建进程、撤
5、销进程、进程调度、对资源进行管理、申请和释放资源、 检测错误和定时器中断等功能,进程进行调度和对资源进行治理的过程;从而模拟一个操作系统对最终,在终端或者输出文件中, 把一系列操作后的结果显示出来,包括当前运行的进程、错误信息等;2、 相关方法和算法:(1) C 语言中的结构 struct ,用来实现 PCB、RCB等(2) C 语言中的指针、链表操作,用来实现将PCB和 RCB加入队列尾部、从队列中删除、转移至堵塞队列等操作,以及进程的调度执行等;本 试验中我们采纳的带头结点的链表来实现各种操作;(3) 基于优先级的调度算法、时间片轮转调度算法、抢占式调度算法的综 合应用;3、 模块调用关系
6、:本试验中,我们组共编写了三个头文件 pcb.h 、和四个源文件 、pcb.c 、进程治理设计模块、 资源 test_shell_data.c,因此可以分为主函数设计模块、治理设计模块和 test shell 设计模块;在主函数模块中, 需要调用其他三个模块, 如创建进程、 展现父子子进程等 操作,需要调用进程治理设计模块;调度算法的执行、展现各种队列等,需要调名师归纳总结 用 test shell设计模块;第 3 页,共 18 页- - - - - - -精选学习资料 - - - - - - - - - 在进程治理设计模块中, 像销毁 PCB等操作, 需要执行对 RCB的释放, 就需 调用
7、test shell 设计模块;在资源治理设计模块中,供应一些最小的操作,不调用其他模块;在 test shell 设计模块中,设计到对资源和进程的各种操作,需要调用资 源治理设计模块和进程治理设计模块;(三) 进程治理设计模块具体设计本部分我负责实现我们的方案是在在进程治理设计模块中,和操作,具体包括:实现关于进程的各种最基础的结构实现 PCB结构体、 PCB链表、 PCB子节点链表;实现对 PCB链表的初始化、对子节点链表的初始化、新建 PCB、对 PCB链表中进行删除、插入、移除不 free 、从等待和堵塞队列中猎取 PCB得知、打印当前 PCB父节点、打印当前 PCB父节点、 打印当前
8、 PCB子节点链表、 插入子队列的尾部、从子队列尾部删除;1、 进程状态与操作(1) 进程状态共 ready/running/blocked 三种状态 , 通过结构 struct 实现,代码如下:struct int running ;int blocked ;int ready ; PCB_STATUS ; / 定义 pcb 状态的三种情形(2) 进程操作:在本次试验中, 将会读进程进行以下操作, 结合这些操作的具体内容和所学学问,很简洁考虑到通过链表来实现这些操作;创建 create: none - ready 撤销 destroy: running/ready/blocked - non
9、e 恳求资源 Request: running - blocked 当资源没有时,进程堵塞 释放资源 Release: blocked - ready 因申请资源而堵塞的进程被唤醒 时钟中断 Time_out: running - ready 调度: ready - running / running -ready 2、 主要数据结构实现:名师归纳总结 - - - - - - -第 4 页,共 18 页精选学习资料 - - - - - - - - - 1进程掌握块结构 PCB 进程掌握块 PCB是进程存在的唯独标识, 并且常驻内存, 进程掌握块中有许多信息,在本次试验中,依据我们的需求,所设计
10、的进程掌握块结构如下:结合试验指导书,我们通过结构struct实现进程掌握块结构PCB,包含以下信息:PID name Other_resources /: resource which is occupied Status: Type & List/ type: ready, block, running ., /List: RLReady list or BLblock list Creation_tree: Parent/Children Priority: 0, 1, 2 Init, User, System 主要代码及注释如下:struct PCB /pcb 结构体char name
11、 64 ; /Pname unsigned int pid ; /Pid struct RCB_LIST * rcb_list ; /Other resources struct PCB_LIST * parent_pcb ; / 父进程struct CHILD_PCB_LIST * child_pcb ; / 子进程int state ; /Type&List int priority ; /0,1,2 ;(3) 实现一个 PCB的链表,便利后面的操作:struct PCB_LIST ;/pcb链表;struct PCB pcb* next_pcbstruct PCB_LIST ;(4) 实
12、现 PCB的子节点链表:struct CHILD_PCB_LIST /pcb子节点链表;struct PCB_LIST* node;struct CHILD_PCB_LIST* next_node;名师归纳总结 - - - - - - -第 5 页,共 18 页精选学习资料 - - - - - - - - - 3、 主要操作设计实现过程(1) 初始化 PCB链表添加了头结点 : void init_pcb_list struct PCB_LIST * listif* listreturn;struct PCB_LIST * p = struct PCB_LIST* malloc sizeof
13、structPCB_LIST ; p- next_pcb = NULL ; struct PCB ; memset p ,NULL ,sizeof* list = p ;(2) 初始化子节点链表:void init_child_pcb_list struct CHILD_PCB_LIST * listif* listreturn;struct CHILD_PCB_LIST * p = structCHILD_PCB_LIST * malloc sizeof struct CHILD_PCB_LIST ; p- next_node = NULL ; memset p , NULL , sizeo
14、f struct CHILD_PCB_LIST ;* list = p ;(3) 创建一个新的 PCB: structPCB_LIST * create_pcb char *name ,unsignedintpid ,intstate,unsignedint priority, struct PCB_LIST* parent_pcbstruct PCB pcb; strcpy pcb . name , name , strlen name ; pcb. pid = pid; pcb. rcb_list =NULL ; pcb. state = state; pcb. priority = pr
15、iority; pcb. parent_pcb = parent_pcb; pcb. child_pcb = NULL ;struct PCB_LIST* pcb_node = structPCB_LIST * malloc sizeof struct PCB_LIST; pcb_node- pcb = pcb; pcb_node- next_pcb =NULL ;return pcb_node;(4) 从 PCB链表中进行删除 : 名师归纳总结 void destory_from_pcb_list struct PCB_LIST* list,char* name 第 6 页,共 18 页-
16、- - - - - -精选学习资料 - - - - - - - - - struct PCB_LIST* pr_temp,* temp ; pr_temp = temp = list;int ret = 1 ;while temp if. strcmp name , temp- pcb . name & ret release_resource= temp temp ; pr_temp = list; ret = 0 ;if. strcmp name , temp- pcb . name pr_temp- next_pcb = temp- next_pcb; free temp ;return
17、; pr_temp = temp; temp = temp- next_pcb5插入 pcb 链表:void insert_into_pcb_list struct PCB_LIST* list,structPCB_LIST * node if.*list list;,* temp ; init_pcb_liststruct PCB_LIST * pr_temp pr_temp = temp = * list;while temp pr_temp = temp; temp = temp- next_pcb pr_temp- next_pcb = node;(5) 从 PCB链表中移除,并不释放
18、该PCB占用的空间:,char* name void delete_from_pcb_list struct PCB_LIST* list名师归纳总结 struct PCB_LIST* pr_temp,* temp ;第 7 页,共 18 页 pr_temp = temp = list;- - - - - - -精选学习资料 - - - - - - - - - while temp if. strcmp name , temp- pcb . name pr_temp;- next_pcb = temp- next_pcb;return pr_temp = temp; temp = temp-
19、next_pcb(6) 从等待和堵塞队列中猎取 PCB的地址:struct PCB_LIST * get_pcb char * name struct PCB_LIST * temp ;for int i = 2 ; i = 0; i- temp = READY_LIST i - next_pcb ;while temp if . strcmp temp - pcb . name , name return temp; temp = temp- next_pcb;if BLOCKED_LIST temp = BLOCKED_LIST- next_pcb ;while temp if . str
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年电子科大-计算机-操作系统实验报告-2014级 2022 电子科 计算机 操作系统 实验 报告 2014
限制150内