欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    电子科大计算机操作系统实验报告级文档格式.docx

    • 资源ID:7961410       资源大小:232.97KB        全文页数:19页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    电子科大计算机操作系统实验报告级文档格式.docx

    1、应含有功效:1、 从终端或者测试文件读取命令;2、 将用户需求转换成调度内核函数(即调度进程和资源管理器);3、 在终端或输出文件中显示结果: 如目前运行进程、 错误信息等。(三)进程管理设计1、 进程状态与操作2、 进程控制块结构PCB3、 关键函数: 创建进程、 撤销进程(四)资源管理设计1、 关键数据结构RCB2、 请求资源3、 释放资源(五)进程调度与时钟中止设计关键: 使用基于优先级抢占式调度策略, 在同一优先级内使用时间片轮转算法。参考课上ppt:五、试验目:设计和实现进程与资源管理, 并完成Test shell编写, 以建立系统进程管理、 调度、 资源管理和分配知识体系, 从而加

    2、深对操作系统进程调度和资源管理功效宏观了解和微观实现技术掌握。六、试验内容:设计与实现一个简单进程与资源管理器, 要求含有以下功效:经过编写测试脚本(test shell)来完成对进程与资源管理器测试。七、试验环境(设备、 元器件):Windows 7、 Visual Studio 八、试验步骤:(一)系统功效需求分析:(二)总体框架设计:1、具体原理和总体工作步骤分析:首先, 经过test shell从测试文件中读入多种命令。然后, 对命令进行分析, 将用户需求转换成调度内核函数, 也就是说, 经过调度进程和资源管理器, 实现创建进程、 撤销进程、 进程调度、 对资源进行管理、 申请和释放资

    3、源、 检测错误和定时器中止等功效, 从而模拟一个操作系统对进程进行调度和对资源进行管理过程。最终, 在终端或者输出文件中, 把一系列操作后结果显示出来, 包含目前运行进程、 错误信息等。2、相关方法和算法:(1)C语言中结构struct, 用来实现PCB、 RCB等(2)C语言中指针、 链表操作, 用来实现将PCB和RCB加入队列尾部、 从队列中删除、 转移至阻塞队列等操作, 以及进程调度实施等。本试验中我们采取带头结点链表来实现多种操作。(3)基于优先级调度算法、 时间片轮转调度算法、 抢占式调度算法综合应用。3、模块调用关系:本试验中, 我们组共编写了三个头文件(pcb.h、 rcb.h、

    4、 test_shell_data.h)和四个源文件(main.c、 pcb.c、 rcb.c、 test_shell_data.c), 所以能够分为主函数设计模块、 进程管理设计模块、 资源管理设计模块和test shell设计模块。在主函数模块中, 需要调用其她三个模块, 如创建进程、 展示父子子进程等操作, 需要调用进程管理设计模块; 调度算法实施、 展示多种队列等, 需要调用test shell设计模块;在进程管理设计模块中, 像销毁PCB等操作, 需要实施对RCB释放, 则需调用test shell设计模块;在资源管理设计模块中, 提供部分最小操作, 不调用其她模块;在test she

    5、ll设计模块中, 设计到对资源和进程多种操作, 需要调用资源管理设计模块和进程管理设计模块。(三)进程管理设计模块具体设计(本部分我负责实现)我们计划是在在进程管理设计模块中, 实现相关进程多种最基础结构和操作, 具体包含:实现PCB结构体、 PCB链表、 PCB子节点链表;实现对PCB链表初始化、 对子节点链表初始化、 新建PCB、 对PCB链表中进行删除、 插入、 移除(不free)、 从等候和阻塞队列中获取PCB得悉、 打印目前PCB父节点、 打印目前PCB父节点、 打印目前PCB子节点链表、 插入子队列尾部、 从子队列尾部删除。1、进程状态与操作(1)进程状态共ready/runnin

    6、g/blocked三种状态,经过结构struct实现, 代码以下:struct int running; int blocked; int ready;PCB_STATUS; /定义pcb状态三种情况(2)进程操作:在此次试验中, 将会读进程进行以下操作, 结合这些操作具体内容和所学知识, 很轻易考虑到经过链表来实现这些操作。创建(create): (none) - ready撤销(destroy): running/ready/blocked - (none)请求资源(Request): running - blocked (当资源没有时, 进程阻塞)释放资源(Release): block

    7、ed - ready (因申请资源而阻塞进程被唤醒)时钟中止(Time_out):调度: ready - running / running -ready2、关键数据结构实现:(1)进程控制块结构PCB进程控制块PCB是进程存在唯一标识, 而且常驻内存, 进程控制块中有很多信息, 在此次试验中, 依据我们需求, 所设计进程控制块结构以下:结合试验指导书, 我们经过结构struct实现进程控制块结构PCB, 包含以下信息:PID(name)Other_resources /: resource which is occupiedStatus: Type & List/ type: ready,

    8、block, running., /List: RL(Ready list) or BL(block list)Creation_tree: Parent/ChildrenPriority: 0, 1, 2 (Init, User, System)关键代码及注释以下:struct PCB /pcb结构体 char name64; /Pname unsigned int pid; /Pid struct RCB_LIST* rcb_list; /Other resources struct PCB_LIST* parent_pcb; /父进程 struct CHILD_PCB_LIST* chi

    9、ld_pcb; /子进程 int state; /Type&List int priority; /0,1,2;(3)实现一个PCB链表, 方便后面操作:struct PCB_LIST /pcb链表 struct PCB pcb; struct PCB_LIST * next_pcb;(4)实现PCB子节点链表:struct CHILD_PCB_LIST /pcb子节点链表 struct PCB_LIST* node; struct CHILD_PCB_LIST* next_node;3、关键操作设计实现过程(1)初始化PCB链表(添加了头结点):void init_pcb_list(stru

    10、ct PCB_LIST *list) if (*list) return; struct PCB_LIST *p = (struct PCB_LIST*)malloc(sizeof(struct PCB_LIST); p-next_pcb = NULL; memset(p, NULL, sizeof(struct PCB); *list = p;(2)初始化子节点链表:void init_child_pcb_list(struct CHILD_PCB_LIST *list) struct CHILD_PCB_LIST *p = (struct CHILD_PCB_LIST*)malloc(si

    11、zeof(struct CHILD_PCB_LIST);next_node = NULL; memset(p, NULL, sizeof(struct CHILD_PCB_LIST);(3)创建一个新PCB:struct PCB_LIST* create_pcb(char* name, unsigned int pid, int state, unsigned int priority,struct PCB_LIST* parent_pcb) strcpy(pcb.name,name,strlen(name); pcb.pid = pid; pcb.rcb_list = NULL; pcb.s

    12、tate = state; pcb.priority = priority; pcb.parent_pcb = parent_pcb; pcb.child_pcb = NULL; struct PCB_LIST* pcb_node = (struct PCB_LIST*)malloc(sizeof(struct PCB_LIST); pcb_node-pcb = pcb; return pcb_node;(4)从PCB链表中进行删除:void destory_from_pcb_list(struct PCB_LIST* list, char *name) struct PCB_LIST* pr

    13、_temp, *temp; pr_temp = temp = list; int ret = 1; while (temp) if (!strcmp(name, temp-pcb.name) & ret) release_resource(temp); ret = 0;pcb.name) pr_temp-next_pcb = temp-next_pcb; free(temp); pr_temp = temp; temp = temp-(5)插入pcb链表:void insert_into_pcb_list(struct PCB_LIST* list, struct PCB_LIST*node)

    14、*list) init_pcb_list(list); struct PCB_LIST *pr_temp, *temp; pr_temp = temp = *list;next_pcb = node;(5)从PCB链表中移除, 并不释放该PCB占用空间:void delete_from_pcb_list(struct PCB_LIST* list, char *name)(6)从等候和阻塞队列中获取PCB地址:struct PCB_LIST* get_pcb(char* name) struct PCB_LIST* temp; for (int i = 2; i = 0; i-) temp =

    15、 READY_LISTi- while (temp) strcmp(temp-pcb.name, name) return temp; if (BLOCKED_LIST) temp = BLOCKED_LIST- return NULL;(7)打印目前PCB父节点void show_pcb_parent(struct PCB_LIST* node) printf(%s parent node is %s n, node-pcb.name, node-pcb.parent_pcb-pcb.name);(8)打印目前PCB子节点链表void show_pcb_child(struct PCB_LI

    16、ST* node)%s child is struct CHILD_PCB_LIST* temp = node-pcb.child_pcb; if (temp)next_node; - |%s|, temp-node-n);(9)插入子队列尾部void insert_into_child_pcb_list(struct CHILD_PCB_LIST* list, struct PCB_LIST*node) init_child_pcb_list(list); struct CHILD_PCB_LIST *pr_temp, *temp;node = node;next_node = p;(10)

    17、从子队列尾部进行删除void delete_from_child_pcb_list(struct CHILD_PCB_LIST* list, char *name) struct CHILD_PCB_LIST* pr_temp, *temp;list) pr_temp = list; temp = pr_temp-next_node = temp-(四)其她模块设计(组内其她人设计)1、Test shell设计Test shell将调度我们设计进程与资源管理器, 从而完成测试, 含有以下功效:(1)从终端或者测试文件读取命令;(2)将用户需求转换成调度内核函数(即调度进程和资源管理器);(3)

    18、在终端或输出文件中显示结果:2、资源管理设计与进程管理设计思绪和步骤相同, 首先是设计好各类数据结构, 包含RCB结构体、 RCB等候队列链表、 系统RCB结构体、 系统RCB链表、 RCB链表。以后是实现好各类与RCB相关基础操作, 包含初始化前面设计多种链表、 新建RCB, 以及对链表进行插入、 删除、 移除等操作, 还有显示RCB队列操作。3、试验进程调度与时钟中止设计关键思想即时间片轮转调度算法、 优先级调度算法、 抢占式算法综合应用, 设计到对前面各模块调用。九、试验数据及结果分析:将试验指导书中给出测试命令放到测试文件test.txt中, 程序从该文件读取命令, 并将实施结果输出到

    19、屏幕, 以下图所表示:上图结果与试验指导书中给出预期输出结果是一致, 说明试验成功。具体结果分析: 为了更易于观察, 我们能够注释掉读文件操作, 让程序从键盘输入读取命令, 每步命令解释及相关实施结果截图以下:cr x 1 /创建优先级为1进程x, 应显示“* the x is running”cr p 1 /创建优先级为1进程p, 应显示“* the x is running”cr q 1 /创建优先级为1进程q, 应显示“* the x is running”cr r 1 /创建优先级为1进程r, 应显示“* the x is running”经过以上四条指令, 就绪队列中优先级1队列中应

    20、依次为x、 p、 q、 r, 可用资源数应该都是总资源数, 实施结果、 就绪队列、 资源队列情况见下图:to /一个时间片结束, 应去实施p, 显示“* the p is running”同时, x进程PCB将进入优先级为0就绪队列, 以下图:req 2 1 /为目前进程x申请1个R2资源, 显示不变输出显示不变, 不过可用资源数目会发生改变, 以下图:to /一个时间片结束, 应去实施q, 显示“* the q is running”req R3 3 /为目前进程q申请3个R3资源, 显示不变过程中截图以下, 可用资源数目深入减小:to /一个时间片结束, 应去实施r, 显示“* the r

    21、 is running”req R4 3 /为目前进程x申请3个R4资源, 显示不变to /一个时间片结束, 应去实施优先级为0就绪队列中第一个进程x, 显示“* the x is running”to指令后截图以下, 包含此时就绪队列情况, 全部进程PCB都在优先级为0就绪队列中:to /一个时间片结束, 应去实施p, 显示“* the p is running”, x移到优先级0就绪队列结尾新优先级为0就绪队列截图以下:下面两条指令分别为目前进程申请资源, 申请不到足够资源, 对应进程则会进入阻塞队列。req R3 1 /p申请1个R3, 但R3已经全部给了q, 所以p被阻塞, 进入阻塞队

    22、列, 目前转去实施原来在p后q进程, 显示“* the q is running”显示及阻塞队列以下:req R4 2 /q申请2个R4, 但R4已经只剩下1个, 所以q被阻塞, 进入阻塞队列, 目前转去实施原来在q后r进程, 显示“* the r is running”req R2 2 /r申请2个R2, 但R2已经只剩下1个, 所以r被阻塞, 进入阻塞队列, 目前转去实施原来在r后x进程, 显示“* the x is running”以上两步过后, 阻塞队列及就绪队列截图以下:to /一个时间片结束, 就绪队列中只有x, 所以仍然实施x, 显示“* the x is running” de

    23、 q /撤销q进程, 将释放q进程占用3个R3资源, 前面因为申请不到R3资源而被阻塞p进程将重新回到就绪队列, 位于x后面, 显示不变to /一个时间片结束, 应去实施x, 显示“* the x is running”经过以上四条指令, 就绪队列中优先级0队列中应依次为x、 p, 阻塞队列中应该只有r, 以下图: 至此, 具体每步分析完成, 试验成功。十、试验结论:此次试验过程中, 我组组员分工明确, 在熟练掌握课堂知识基础上, 使用c语言模拟了操作系统对进程和资源管理, 成功地实现了基于优先级和时间片轮转抢占式调度算法, 试验结果与预期相同, 很好地完成了此次试验十一、总结及心得体会:(1

    24、)链表、 指针掌握和应用十分关键;(2)将总任务划分成各个模块, 实现各个模块后再总体实现, 能够提升效率;(3)在程序中增加部分犯错处理提醒信息, 有利于提升调试过程效率。十二、对本试验过程及方法、 手段改善提议:能够增加难度更大功效, 如模拟进程中止后, 返回断点继续实施等。 汇报评分: 指导老师签字: 6月2日 内存地址转化试验(一)逻辑地址到线性地址转换1、逻辑地址、 段标识符、 索引号、 GDT、 LDT、 T1字段、 段描述符、 Base字段、 线性地址等概念;2、GDTR、 LDTR等相关寄存器知识;(以上两条在试验指导书中很具体, 篇幅较长, 不做粘贴了)3、逻辑地址到线性地址转换过程从逻辑地址到线性地址转换过程, 以下图所表示(以T1=1为例, 此时从段选择符中分离出段描述符和T1字段, T1=1, 表明段描述符存放在LDT中);(1)从GDTR中取得GDT地址, 从LDTR中取得LDT在GDT中偏移量, 查找GDT, 从中获取LDT起始地址;(2)从DS中高13位获取DS段在L


    注意事项

    本文(电子科大计算机操作系统实验报告级文档格式.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开