操作系统课程设计任务书

合集下载

操作系统课程设计任务

操作系统课程设计任务

操作系统课程设计任务书适用专业:计算机科学技术网络工程电子专业安徽建筑工业学院电子与信息工程学院2014年 6 月前言对计算机科学与技术及相关专业的学生而言,操作系统是一门重要的专业基础课程。

要学好操作系统的设计原理,除了听课、看书、做习题外,最好的方法就是在实践中进行,包括使用操作系统、阅读和分析已有操作系统的源代码、自己设计小型系统/模块或模拟算法等。

从个人的角度而言,如果能够完成MINUX源代码的阅读与分析,这将对掌握操作系统的原理与设计方法不无益处。

这里,我没有向大家推荐Linux或者FreeBSD之类的操作系统(虽然我从1997年就一直向学生推荐FreeBSD),是因为这里的阅读源代码的目标是为了掌握操作系统的原理。

孟子曰:“富贵不能淫,贫贱不能移,威武不能屈,此之谓大丈夫。

”我的理解,即使不能够按照孟老夫子的话去做大丈夫,如果能够做到“时髦不能跟”,也就可以做真正的自己了。

对我们课程的学习,也就是这个道理吧。

操作系统实践,按深度可分为使用级、观察级、系统管理级、源码阅读级和实现级等五个层次。

具体地,1.使用级:是指如何使用操作系统,包括对命令(以及菜单和shell)、系统调用和系统文件的使用。

2.观察级:是指通过使用级的接口,从外部观察操作系统的内部工作过程和结构。

3.系统管理级:是指系统或设备的安装、配置和性能调整。

4.源码阅读级:是指对现有操作系统部分内核源代码的阅读。

5.实现级:是指编程模拟实现操作系统某些功能模块。

上述五个层次的实践,不同层次的实践者可以根据自己的实际情况自主安排,在本课程设计中,每次有对各个任务的层次明确区分,大家仁者见仁吧。

如果可能,给自己创造使用Unix或类Unix的实现环境。

课程设计要求实现以后,应及时写出课程设计报告,报告应包括以下内容:1.设计目的和内容。

2.程序说明,包括程序结构、各模块的算法。

3.调试正确的源程序。

4.程序运行记录(包括对不同测试数据的运行结果)。

操作系统课程设计--银行家算法

操作系统课程设计--银行家算法

目录第一章功能需求描述 (2)1.1功能列表与说明 (2)1.2操作界面和操作方法 (2)第二章设计描述 (3)2.1任务分解说明 (3)2.2主要数据结构设计说明 (3)2.3主要函数接口设计说明 (3)第三章算法描述 (5)第四章开发过程描述 (14)4.1程序代码 (14)4.2设计中的问题和解决方法 (23)4.3测试用例和测试方法 (24)第五章设计心得体会 (32)计算机科学与技术学院课程设计任务书第一章功能需求描述1.1功能列表与说明(1)添加进程:规定现在操作系统中运行的进程数。

(2)添加资源:规定当前需要资源的种类数和各种类资源的数目。

(3)分配资源:给各进程分配资源。

(4)安全性检查:检查资源分配后是否会发生死锁,若发生则不这样进行分配。

(5)资源释放:当一个进程结束后释放其所占有的各类资源。

(6)得到安全序列:当资源分配能够保证各进程顺利结束,则得到进程的安全序列。

(7)删除资源:即取消某资源1.2操作界面和操作方法*************银行家算法演示****************请首先输入系统可供资源种类的数量:资源*的名称:资源的数量:请输入作业的数量:请输入各进程的最大需求量:请输入各进程已经申请的资源量:系统目前可用资源:系统是否安全?分配的序列:********银行家算法演示***********1:增加资源2:删除资源3:修改资源4:分配资源5:增加作业0:离开在如上的操作界面中分别按照提示进行输入,按回车键表示当前输入完毕,然后进行下个步骤的输入或者得到最终结果。

第二章设计描述2.1任务分解说明银行家算法的实现过程主要分为以下几个部分:为实现银行家算法,系统中必须设置若干数据结构。

其中有allocation,记录已经分配的系统资源;max,记录每个进程的资源最大需求;available,记录剩余资源;need用来记录现在每个进程需要多少资源,need=max-allocation;request 请求资源;temp,记录路径,即输出的顺序;finish,用来实现循环,以判断是否安全,这也就是安全性检查。

《操作系统》课程设计报告和任务书格式20131217

《操作系统》课程设计报告和任务书格式20131217

《操作系统》课程设计报告书写要求一、报告内容1.封面(见附录1)2.课程设计任务书(见附录2。

要求实现为Win32控制台程序:Win32 ConsoleApplication)3.目录4.正文内容第一章功能需求描述(包括功能列表与说明,操作界面和操作方法。

操作界面和操作方法不是程序编写好后的截图,而是编写前所设想的界面样式和操作说明,示例如下:执行程序后,显示如下主界面:****** 主菜单****1. 请求服务器进程信息2. 请求服务器线程信息3. 请求服务器程序信息4. 请求服务器内存信息5. 退出系统请选择(1-5):在该界面下,用户按下1-5中的一个数字键并回车进行功能选择,若按下其它键或按下多键,给出提示“输入错误:只能按下1-5中的某一个数字键。

”,然后仍显示主界面,让用户进行选择。

若用户按下数字键1,显示“数据请求中......”。

收到服务器传来的信息后,将信息内容显示出来。

并显示“请按任意键返回主菜单”。

……)第二章系统设计描述(包括任务分解说明,主要数据结构设计说明,主要函数接口说明等)第三章算法设计描述(主要函数的程序流程图,流程图要求只能有一个出口和入口,只能使用方框写明处理,使用二分枝的菱形框写明条件分支,不得使用除此外的其它图形和结构)第四章开发过程描述(给出源代码,说明在代码编译过程中碰到的错误类型和原因,调试过程中碰到的问题和原因,测试程序功能所用的数据和测试方法)第五章设计心得体会二、格式要求1.课程设计正文编辑格式:一级标题(章)字体设置为小2号黑体,二级标题(节)字体设置为小3号黑体,段落设置为居中对齐;三级标题(小节)字体设置为小4号黑体,段落设置为居左对齐;正文字体设置为小4号宋体,段落设置为两端对齐,首行缩进2个中文字符,1.5倍行距。

2.课程设计报告页码从正文开始,用阿拉伯数字连续编排。

页码位于下端居中,5号宋体,页码下边距18mm。

3.课程设计报告中的图、表、附注、公式一律用阿拉伯数字分章编号,字体设置为5号宋体。

操作系统课设任务

操作系统课设任务

1.每个学生从以下给定题目中选做至少一项,也可以针对操作系统课程实验已完成的题目进行扩充完善;
2.设计周周末向各班学习委员交源程序、设计报告的电子版和打印版;
3. 编程工具不限
二、操作系统课程设计题目:(在以下题目中任选一个题目进行设计)
1.进程同步问题(信号量机制)(任选其一)
1)生产者消费者问题
2)哲学家进餐问题
3)读者-写者问题
4)吃水果问题
5)售票员售票问题
2. 进程(作业)调度算法(任选其中三种算法)
1)先来先服务算法
2)短进程(作业)优先算法
3)优先数优先算法
4)最高响应比优先算法
5)时间片轮转调度算法
3. 实时调度算法
1)最早截止时间优先
2)最低松弛度优选
4. 银行家算法(死锁避免)
5. 动态分区分配算法(连续存储器管理方式)
首次适应算法、循环首次适应算法、最佳适应算法、最差适应算法
6. 页面置换算法
最佳置换算法OPT、先进先出算法FIFO、最近最久未使用算法LRU
7. 磁盘调度算法
先来先服务算法、最短寻道时间优先算法、扫描算法(电梯调度算法)
8. 缓冲池管理
封皮
指导教师评语
第一部分:需求分析(课题描述、课题目的、理论依据)
第二部分:概要设计(设计方法、技术、运行环境等)
第三部分:详细设计(流程图、程序主要代码)
第四部分:运行结果及分析(运行结果(可以截图)、结果详细分析)第五部分:总结和心得
参考文献:
附录:程序源代码
注:程序详细代码附在电子版中即可,打印版可不打印。

课程设计时间:2018年1月1日——2018年1月5日。

操作系统课程设计任务书

操作系统课程设计任务书

课程设计任务书学生姓名:丁光明专业班级:计算机0506指导教师:何克右工作单位:计算机科学与技术学院题目: 进度同步模拟设计——司机和售票员问题初始条件:1.预备内容:阅读操作系统的进度管理章节内容,对进度的同步和互斥,以及信号量体制度有深入的理解。

2.实践准备:掌握一种计算机高级语言的使用。

要求达成的主要任务:(包含课程设计工作量及其技术要求,以及说明书撰写等详细要求)1.模拟公共汽车司机和售票员开关门及行车操作的同步模型。

2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求剖析,数据构造或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运转结果与运转状况剖析;⑸自我评论与总结:i)你以为你达成的设计哪些地方做得比较好或比较优秀;ii)什么地方做得不太好,此后怎样更正;iii)从本设计获得的收获(在编写,调试,履行过程中的经验和教训);iv)达成此题能否有其余的其余方法(假如有,简要说明该方法);v)对实验题的评论和改良建议,请你介绍设计题目。

时间安排:设计安排一周:周1、周2:达成程序剖析及设计。

周2、周3:达成程序调试及测试。

周4、周5:查收、撰写课程设计报告。

(注意事项:禁止剽窃,一旦发现,抄与被抄的一律按0分记)指导教师署名:年月日系主任(或责任教师)署名:年月日题目: 进度同步模拟设计——司机和售票员问题初始条件:1.预备内容:阅读操作系统的进度管理章节内容,对进度的同步和互斥,以及信号量体制度有深入的理解。

2.实践准备:掌握一种计算机高级语言的使用。

2要求达成的主要任务:.模拟公共汽车司机和售票员开关门及行车操作的同步模型。

在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机泊车,售票员在车停后开门让乘客上下车。

所以,司机启动车辆的动作一定与售票员关车门的动作获得同步;售票员开车门的动作也一定与司机泊车获得同步。

操作系统课程设计(页式存储管理)任务书

操作系统课程设计(页式存储管理)任务书

一、课程设计的原始资料及依据查阅有关计算机操作系统的教材、实验指导书等资料,进一步熟悉操作系统的基本原理,算法的设计思想。

页式和段式存储管理是操作系统中存储管理中实现离散式存储管理的重要内容。

本设计要求用高级语言编写和调试一个简单的页式和段式存储管理程序。

通过本设计可以加深理解有关页表、段表、进程队列的概念,并体会和了解地址转换。

二、课程设计主要内容及要求1 •认真阅读资料,掌握离散式存储管理的原理和思想。

2 •要求在设计的过程中,建立清晰的层次结构。

3•画出主要的功能结构图和主要算法的流程图。

4. 设计页表和段表结构,实现离散式存储管理功能。

页表通常包括以下信息:页号,块号。

根据调度算法的不同,页表结构的内容可以作适当的增删。

5•实现逻辑地址到物理地址的转换。

6. 建立进程序列。

7. 实现进程的离散式分配。

&运行程序,检查结果是否和理论值一致。

9.环境可以使用Windows. Turbo C环境或Linux。

三、对课程设计说明书撰写内容、格式、字数的要求1. 课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。

一般不应少于3000字。

2. 在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。

应做到文理通顺,内容正确完整,书写工整,装订整齐。

3. 设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。

4. 课程设计说明书手写或打印均可。

手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18 磅。

文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,表题与图题采用宋体五号字。

5. 课程设计说明书装订顺序为:封面、任务书、成绩评定表、目录、正文、参考文献。

操作系统课程设计任务指导书

《操作系统原理》课程设计--进程调度模拟程序一、课程设计目的《操作系统原理》是计算机科学与技术专业的一门专业核心课程,也是研究生入学考试中计算机专业综合中所涉及的内容。

该课程理论性强,纯粹的理论学习相对枯燥乏味,不易理解。

通过课程设计,可加强学生对原理知识的理解。

二、课程设计的任务和要求本次课程设计的题目是,时间片轮转调度算法的模拟实现。

要求在充分理解时间片轮转调度算法原理的基础上,编写一个可视化的算法模拟程序。

具体任务如下:1、根据需要,合理设计PCB(进程控制块)结构,以适用于时间片轮转调度算法;2、设计模拟指令格式,并以文件形式存储,程序能够读取文件并自动生成指令序列。

3、根据文件内容,建立模拟进程队列,并能采用时间片轮转调度算法对模拟进程进行调度。

任务要求:1、进程的个数,进程的内容(即进程的功能序列)来源于一个进程序列描述文件。

2、需将调度过程输出到一个运行日志文件。

3、开发平台及语言不限。

4、要求设计一个Windows可视化应用程序。

三、模拟程序的描述:模拟指令的格式:操作命令+操作时间● C :表示在CPU上计算●I :表示输入●O :表示输出●W :表示等待●H :表示进程结束操作时间代表该操作命令要执行多长时间。

这里假设I/O设备的数量没有限制,I和O设备都只有一类。

I,O,W三条指令实际上是不占有CPU的,执行这三条指令就应该将进程放入对应的等待队列(输入等待队列,输出等待队列,其他等待队列)。

例如,有一虚拟程序文件prc.txt描述如下:P1C10 // 在CPU上运算10个时间单位I20 // 输入,占用20个时间单位C40 // 在CPU上运算40个时间单位I30 // 输入,占用30个时间单位C20 // 在CPU上运算20个时间单位O30 // 输出,占用30个时间单位H00 // 进程结束P2I10C50O20H00P3C10I20W20 // 等待20个时间单位C40O10H00................四、实验报告要求除了编程实现设计的要求,在运行调试完成后,要书写出课程设计报告,总结归纳课设的各个方面,锻炼自己实践和总结报告的能力。

操作系统课程设计任务书(计算机、软件、网络)

2016-2017学年第一学期「操作系统」课程设计任务书依照大纲和课程内容实践特点,结合《操作系统》、《LINUX操作系统》和《嵌入式程序设计》课程主要内容,课设的具体要求及任务如下:一、设计成果的要求课程设计应严格按照要求完成,在系统调试成功后, 需要提供「操作系统」课程设计报告,具体包括:(1)设计目的(1)设计内容(3)设计准备(理论、技术)(4)设计过程(设计思想、代码实现)(5)设计结果并分析(6)系统的结构、原理框图和模块等的详细说明(7)用户使用说明书和参考资料(8)设计体会。

注:1.(1)-(7)项可以打印,(8)设计体会必须手写。

2. 报告的封皮、封底,采用给定的模板;报告的内容,在教师的指导下,独立完成,自主排版,不做统一要求。

二、设计任务(每名同学选一题,独立完成)题目一:进程与线程—Linux进程与线程通讯1.设计目的深刻理解线程和进程的概念,掌握线程与进程在组成成分上的差别以及与其相适应的通讯方式和应用目标。

Linux系统的fork()保持了UNIX的经典语义,被创建的进程具有独立于父进程的地址空间,二者之间的通讯通常可采用pipe机制,clone()是Linux 系统特有的系统调用,可以通过参数确定父子进程之间是否共享存储空间等资源。

在地址空间等资源共享的情况下,clone实质相当于创建了一个轻进程或线程,这是clone的通常用法。

实际在Linux系统中,fork以及用户级线程pthread 都是基于clone实现的。

2.设计内容以Linux系统进程和线程机制为背景,掌握fork()和clone()系统调用的形式和功能以及与其相适应的高级通讯方式。

由fork派生的子进程之间通过pipe通讯,由clone创建的线程之间通过共享内存通讯,对于后者需要考虑互斥问题。

以生产者-消费者问题为例,通过实验理解fork()和clone()两个系统调用的区别。

程序要求能够创建4个进程或线程,其中包括两个生产者和两个消费者,生产者和消费者之间能够传递数据。

操作系统课程设计报告

实践课设计报告课程名称操作系统课程设计模拟设计内存管理中的地址题目转换(动态分区、页式十进制)学院班级学号姓名指导教师年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 模拟设计内存管理中的地址转换(动态分区、页式十进制)初始条件:1.预备内容:阅读操作系统的内存管理章节内容,理解动态分区、页式、段式和段页式存储管理的思想及相应的分配主存的过程。

2.实践准备:掌握一种计算机高级语言的使用。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.下列内部存储器管理中地址转换,在完成指定存储管理技术中的地址转换基础上还可以选择其它内部存储器管理中的地址转换进行模拟设计并实现:⑴动态分区方案,用最先适用算法对作业实施内存分配,然后把作业地址空间的某一逻辑地址转换成相应的物理地址。

能够处理以下的情形:输入某一逻辑地址,程序能判断地址的合法性,如果合法,计算并输出相应的物理地址。

如果不能计算出相应的物理地址,说明原因。

⑵页式存储管理中逻辑地址到物理地址的转换(十进制)。

能够处理以下的情形:输入某一十进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用十进制表示。

⑶页式存储管理中逻辑地址到物理地址的转换(八进制)。

能够处理以下的情形:输入某一八进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用八进制表示。

⑷页式存储管理中逻辑地址到物理地址的转换(十六进制)。

能够处理以下的情形:输入某一十六进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用十六进制表示。

⑸段式存储管理中逻辑地址到物理地址的转换。

能够处理以下的情形:指定内存的大小,进程的个数,每个进程的段数及段大小;能检查地址的合法性,如果合法进行转换,否则显示地址非法的原因。

⑹段页式存储管理中逻辑地址到物理地址的转换。

linux操作系统课程设计任务书

linux操作系统课程设计任务书《Linux操作系统》课程设计任务书一、设计题目:某公司包括一个园区网络和一个分支机构,网络拓扑图如下图所示。

在园区网络中,大约有500名员工,分支机构大约有100名员工,此外还有一些SOHO员工及出差人员。

假定你是络管理员,现在公司的网络要进行规划和实施。

现有条件如下:公司已租借了一个公网的IP地址100.100.100.10,和ISP提供的一个公网DNS服务器的IP地址100.100.100.200。

该公司申请的域名为。

园区网络和分支机构使用192.168.0.0网络,并进行必要的子网划分。

二、课程设计目的:本课程设计模拟实际企业需求,配合Linux网络操作系统课程内容,旨在通过整周实训将学生所学的Linux系统管理基本概念,网络服务器的搭建与管理技术糅合在一起,增强学生Linux 服务器管理的综合能力,同时锻炼学生的思维能力和合作能力,并达到以下目的:1. 掌握一个较完整的企业应用服务器的搭建方法;2. 掌握企业应用服务器系统性能的调整方法;3. 掌握企业应用服务器常见故障的排除方法;4. 提高学生系统建设与管理能力的同时,增强学生的系统分析能力。

在实训过程中,要求学生熟悉一个企业应用服务器建设的基本流程,熟练Linux系统管理知识,能够利用所学知识完成综合系统设计和实现。

假设环境如下:网络拓扑示意图1. 根据上面的网络拓扑示意图,采用两台Linux虚拟机充当内网服务器,Windows主机A充当外网中的VPN客户机,Windows主机B充当内网工作站。

这4台主机共同组成一个模拟的完整企业局域网。

2. 在实训过程中,每2台计算机(2位同学)为一组,每台计算机上构建1台Linux虚拟机。

按照企业需求(实训需求)分别在两台Linux虚拟机上实现DHCP、DNS等各项服务功能。

Windows主机上进行相应各项服务测试。

3. 网络域名为(xingming指小组某成员的姓名拼音)4. 上述4台主机所担当的角色作用及IP地址如上面的网络拓扑示意图,其中zhuhao表示你的分组号,dhcp表示该IP地址从DHCP服务器获取。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统课程设计任务书1.设计目的1.1模拟实现银行家算法,用银行家算法实现资源分配。

1.2了解多道程序系统中,多个进程并发执行的资源分配。

1.3掌握死锁的产生的原因、产生死锁的必要条件和处理死锁的基本方法。

1.4掌握预防死锁的方法,系统安全状态的基本概念。

1.5掌握银行家算法,了解资源在进程并发执行中的资源分配策略。

1.6理解死锁避免在当前计算机系统不常使用的原因。

2. 问题描述在死锁的避免中,银行家算法把系统状态分为安全状态和不安全状态,只要能使系统始终处于安全状态,便可以避免发生死锁。

所谓安全状态,是指系统能按某种顺序为每个进程分配所需资源,直到最大需求,使每一个进程都可以顺利完成,即可找到一个安全资源分配序列。

模拟实现这个工作过程。

3. 设计思路我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。

操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。

当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。

若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。

4.详细设计4.1银行家算法4.1.1在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。

在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。

银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。

4.1.2设进程m提出请求REQUEST [m],则银行家算法按如下规则进行判断。

4.1.2.1如果REQUEST [m] [n]<= NEED[m][n],则转(2);否则,出错。

4.1.2.2如果REQUEST [m] [n]<= AVAILABLE[m][n],则转(3);否则,出错。

4.1.2.3系统试探分配资源,修改相关数据:AVAILABLE[n]-=REQUEST[m][n];ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];NEED[cusneed][i]-=REQUEST[cusneed][i];4.1.2.4系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

4.1.2.5对于某一进程m,若对所有的n,有NEED[m][n]=0,则表此进程资源分配完毕,应将占用资源释放。

4.2关于死锁的一些结论:4.2.1参与死锁的进程最少是两个(两个以上进程才会出现死锁)4.2.2参与死锁的进程至少有两个已经占有资源4.2.3参与死锁的所有进程都在等待资源4.2.4参与死锁的进程是当前系统中所有进程的子集4.2.5注:如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。

4.3资源分类:4.3.1永久性资源:可以被多个进程多次使用(可再用资源)4.3.1.1可抢占资源4.3.1.2不可抢占资源4.3.2临时性资源:只可使用一次的资源;如信号量,中断信号,同步信号等(可消耗性资源)“申请—分配—使用—释放”模式4.4产生死锁的四个必要条件:4.4.1、互斥使用(资源独占)一个资源每次只能给一个进程使用4.4.2不可强占(不可剥夺)资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放4.4.3请求和保持(部分分配,占有申请)一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)4.4.4循环等待存在一个进程等待队列{P1 , P2 , … , Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路4.5死锁的解决方案4.5.1 产生死锁的例子申请不同类型资源产生死锁P1:…申请打印机申请扫描仪使用释放打印机释放扫描仪…P2:…申请扫描仪申请打印机使用释放打印机释放扫描仪…申请同类资源产生死锁(如存)设有资源R,R有m个分配单位,由n个进程P1,P2,…,Pn(n > m)共享。

假设每个进程对R的申请和释放符合下列原则:* 一次只能申请一个单位* 满足总申请后才能使用* 使用完后一次性释放m=2,n=3资源分配不当导致死锁产生4.5.2死锁避免:定义::系统设计时确定资源分配算法,保证不发生死锁。

具体的做法是破坏产生死锁的四个必要条件之一4.5.2.1破坏“不可剥夺”条件在允许进程动态申请资源前提下规定,一个进程在申请新的资源不能立即得到满足而变为等待状态之前,必须释放已占有的全部资源,若需要再重新申请4.5.2.2破坏“请求和保持”条件要求每个进程在运行前必须一次性申请它所要求的所有资源,且仅当该进程所要资源均可满足时才给予一次性分配4.5.2.3破坏“循环等待”条件采用资源有序分配法:把系统中所有资源编号,进程在申请资源时必须严格按资源编号的递增次、序进行,否则操作系统不予分配。

4.6安全状态与不安全状态安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…Pn,则系统处于安全状态。

一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和,系统处于安全状态 (安全状态一定是没有死锁发生的) 不安全状态:不存在一个安全序列,不安全状态一定导致死锁。

5、数据结构设5.1、定义全局变量#define M,N; //定义常量,便于修改int Available[N]; //各种资源可利用的数量int Allocation[M][N]; //各进程当前已分配的资源数量int Max[M][N]; //各进程对各类资源的最大需求数int Need[M][N]; //还需求矩阵int Request[M]; //申请各类资源的数量int Work[M]; //工作向量,表示系统可提供给进程运行所需各类资源数量int Finish[N]; //表示系统是否有足够的资源分配给进程,0为否,1为是int p[N]; //存储安全序列int i,j; //全局变量,主要用于循环语句中int n,m; //n为进程的数量,m为资源种类数5.2安全性检查算法5.2.1设置两个工作向量Work=AVAILABLE;FINISH5.2.2从进程集合中找到一个满足下述条件的进程,FINISH==false;NEED<=Work;如找到,执行(3);否则,执行(4)5.1.3设进程获得资源,可顺利执行,直至完成,从而释放资源。

Work+=ALLOCATION;Finish=true;GOTO 25.1.4如所有的进程Finish= true,则表示安全;否则系统不安全。

6、流程图(如图1)图1:流程图7.运行界面图开始界面图(如图2)图2开始界面图输入数据后图a(如图3)图3输入数据后图a输入数据后图b(如图4)图4输入数据后图4申请资源错误图(如图5)图5申请资源错误图资源申请正确图(如图6)图6资源申请正确图8、心得与体会:“银行家算法的模拟实现”是本学期操作系统课程唯一的课程设计。

在设计此程序的过程中,我遇到过许多问题,也学到了很多东西。

本程序的设计实现主要是用C语言实现,通过对程序算法的设计优化、输出显示的格式设计、输入过程中的异常处理等一些设计过程中的问题的考虑解决,在C学习上也有了很大的进步。

程序设计过程中开始遇到的最大的问题是算法的结构设计问题,课本上只给了设计要求及简单的算法,要真正实现还需要考虑很多方面。

在算法的数据结构设计上考虑了很长时间。

在程序设计中先后参考了很多网络资料,也参考了一些别人写的的程序,综合这些算法思想和自己的思路对程序做了很好的设计方式,对一些算法的优越性等也作了一些考虑在课程设计过程中遇到了许多问题,也向同宿舍的同学做了一些请教一起讨论,积极解决遇到的问题。

在本次实验中我们使用了liunx变成环境,让我们更加系统深入的了解了liunx,gcc 编程思路和思想,同时让我更加深刻的了解银行家算法,了解死锁的避免和预防,对操作系统对资源的申请和释放有了更加深刻的理解,同时在编程过程中积极的向老师同学请教问题与他们一起探讨在系统中存在的问题和漏洞。

经过本次课程设计,我对liunx的操作能力和解决问题的实际能力有了很大的提高,同时对团队协作能力有了更加深刻的理解。

如果还有类似的课程设计我一定会好好对待。

9.参考文献[1]、汤子嬴编:《计算机操作系统》,电子科技大学[2]、尧学、史美林编:《计算机操作系统教程》,清华大学[3]、任爱华、王雷编:《操作系统实用教程》,清华大学[4]、莉、董渊、何江丹编《C++语言程序设计》,清华大学附录#include <STRING.H>#include <stdio.h>#include <stdlib.h>#include <CONIO.H> /*用到了getch()*/#define M 50 /*进程数*/#define N 30/*资源数*/#define FALSE 0#define TRUE 1/*M个进程对N类资源最大资源需求量*/int MAX[M][N];/*系统可用资源数*/int AVAILABLE[N];/*M个进程已经得到N类资源的资源量 */int ALLOCATION[M][N];/*M个进程还需要N类资源的资源量*/int NEED[M][N];int Request[N];int m,n;/*输入M个进程对N类资源最大资源需求量*/void scanfmax(int a,int b){int i,j;for(i=0;i<a;i++){for(j=0;j<b;j++){scanf("%d",&MAX[i][j]);}printf("\n");}}void scanfavailable(int b){int i;for(i=0;i<b;i++){scanf("%d",&AVAILABLE[i]);}}void main(){int i=0,j=0;char flag;void scanfavailable(int n);void scanfmax(int m,int n);void showdata();void changdata(int);void rstordata(int);int chkerr(int);printf("请输入进程数m和资源数n,m,n "); scanf("%d%d",&m,&n);scanfmax(m,n);for(i=0;i<m;i++)for(j=0;j<n;j++)printf("max[%d][%d]=%d",i,j,MAX[i][j]);scanf("%d",&i);printf("请输入系统可用资源数:"); scanfavailable(n);// printf("####1");for(i=0;i<m;i++)for(j=0;j<n;j++)ALLOCATION[i][j]=0;// printf("######2");for(i=0;i<m;i++)for(j=0;j<n;j++)NEED[i][j]=MAX[i][j];/* printf("######3");/*for(i=0;i<m;i++){for(j=0;j<n;j++)printf("need[%d][%d]=%d\n",i,j,NEED[i][j]); }printf("\n");*///printf("#######4"); */showdata();enter:{printf("请输入需申请资源的进程号(从0到");printf("%d",m-1);printf("):");scanf("%d",&i);}if(i<0||i>=m){printf("输入的进程号不存在,重新输入!\n");goto enter;}err:{printf("请输入进程");printf("%d",i);printf("申请的资源数\n");printf("类别: A B C\n");printf(" ");for (j=0;j<n;j++){scanf("%d",&Request[j]);}for (j=0;j<n;j++){if(Request[j]>NEED[i][j]){printf("\nj=%d Request=%d\n",j,Request[j]);printf("i=%d j=%d Need=%d\n",i,j,NEED[i][j]);printf("%d",i);printf("号进程");printf("申请的资源数 > 进程");printf("%d",i);printf("还需要");printf("%d",j);printf("类资源的资源量!申请不合理,出错!请重新选择!\n"); goto err;}elseif(Request[j]>AVAILABLE[j]){printf("进程");printf("%d",i);printf("申请的资源数大于系统可用");printf("%d",j);printf("类资源的资源量!申请不合理,出错!请重新选择!\n"); goto err;}}}}changdata(i);if(chkerr(i)){rstordata(i);showdata();}elseshowdata();printf("\n");printf("按'y'或'Y'键继续,否则退出\n");flag=getch();if (flag=='y'||flag=='Y'){goto enter;}else{exit(0);}}/*显示数组*/void showdata(){int i,j;printf("系统可用资源向量:\n");printf("***Available***\n");printf("资源类别: A B C\n");printf("资源数目:");for (j=0;j<n;j++){printf("%d ",AVAILABLE[j]);printf("\n");printf("\n");printf("各进程还需要的资源量:\n");printf("******Need******\n");printf("资源类别: A B C\n");for (i=0;i<m;i++){printf(" ");printf("%d",i);printf("号进程:");for (j=0;j<n;j++){printf(" %d ",NEED[i][j]);}printf("\n");}printf("\n");printf("各进程已经得到的资源量: \n");printf("***Allocation***\n");printf("资源类别: A B C\n");for (i=0;i<m;i++){printf(" ");printf("%d",i);printf("号进程:");/*printf(":\n");*/for (j=0;j<n;j++){printf(" %d ",ALLOCATION[i][j]);}printf("\n");}printf("\n");}/*系统对进程请求响应,资源向量改变*/void changdata(int k){int j;for (j=0;j<n;j++){AVAILABLE[j]=AVAILABLE[j]-Request[j]; ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j]; NEED[k][j]=NEED[k][j]-Request[j];}/*资源向量改变*/void rstordata(int k){int j;for (j=0;j<n;j++){AVAILABLE[j]=AVAILABLE[j]+Request[j]; ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j]; NEED[k][j]=NEED[k][j]+Request[j];}}/*安全性检查函数*/int chkerr(int s){int WORK,FINISH[M],temp[M];int i,j,k=0;for(i=0;i<m;i++)FINISH[i]=FALSE;for(j=0;j<n;j++){WORK=AVAILABLE[j];i=s;while(i<m){if (FINISH[i]==FALSE&&NEED[i][j]<=WORK){WORK=WORK+ALLOCATION[i][j];FINISH[i]=TRUE;temp[k]=i;k++;i=0;}else{i++;}}for(i=0;i<m;i++)if(FINISH[i]==FALSE){printf("\n");printf("系统不安全! 本次资源申请不成功!\n"); printf("\n");return 1;}}printf("\n");printf("经安全性检查,系统安全,本次分配成功。

相关文档
最新文档