




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统实验报告 学院 计算机与电子信息学院 专业 计算机科学与技术年级 班级 计科 091 学号 0907300139 姓名 刘江 日期 2011 11 18 实验二项目名称 处理器调度实验二项目名称 处理器调度 一 实验内容一 实验内容 选择一个调度算法 实现处理器调度 二 实验目的二 实验目的 在采用多道程序设计的系统中 往往有若干个进程同时处于就绪状态 当就绪进程个 数大于处理器数时 就必须依照某种策略来决定哪些进程优先占用处理器 本实验模拟在 单处理器情况下的处理器调度 帮助学生加深了解处理器调度的工作 实验代码如下 include stdafx h include include using namespace std static int num 0 class proc private string procname proc next int time int priority char state public proc proc next new proc proc string pr proc ne int ti int pri char st procname pr next ne time ti priority pri state st proc void setnext proc n next n void setprocname string s procname s void settime int t time t void setpriority int s priority s void setstate char s state s proc getnext return next string getprocname return procname int gettime return time int getpriority return priority char getstate return state class dui private proc first public dui first new proc dui proc f first f int getfirst time return first gettime void show proc p cout 名字 下个节点的名字 时间 优先级 状态 endl while p cout getprocname getnext NULL p getnext getprocname NU gettime getpriority gettime 0 p getstate E getnext cout getnext NULL proc pp next pp getnext int a b a pp getpriority 1 b pp gettime 1 pp setpriority a pp settime b if b 0 show pp pp first first getnext continue int prio1 prio2 prio2 first getnext getpriority prio1 pp getpriority if prio1 prio2 show pp else while prio1getnext if first getnext NULL first setnext pp pp setnext NULL break else prio2 first getnext getpriority if prio1 prio2 pp setnext first getnext first setnext pp show pp next if pp getnext NULL show pp next pp pp next first pp if first getnext NULL while first gettime 0 int t first gettime 1 first settime t show first int main proc A new proc p1 NULL 2 1 R proc B new proc p2 NULL 3 5 R proc C new proc p3 NULL 1 3 R proc D new proc p4 NULL 2 4 R proc E new proc p5 NULL 4 2 R B setnext D D setnext C C setnext E E setnext A dui aaa B aaa process1 cin get return 0 实验四项目名称 同步机构实验四项目名称 同步机构 一 实验内容一 实验内容 模拟实现用同步机构避免发生进程执行时可能出现的与时间有关的错误 二 实验目的二 实验目的 进程是程序在一个数据集合上运行的过程 进程是并发执行的 也即系统中的多个进 程轮流地占用处理器运行 我们把若干个进程都能进行访问和修改的那些变量称为公共变量 由于进程是并发地 执行的 所以 如果对进程访问公共变量不加限制 那么就会产生 与时间有关 的错误 即进程执行后所得到的结果与访问公共变量的时间有关 为了防止这类错误 系统必须要 用同步机构来控制进程对公共变量的访问 一般说 同步机构是由若干条原语 同步原 语 所组成 本实验要求学生模拟 PV 操作同步机构的实现 模拟进程的并发执行 了解 进程并发执行时同步机构的作用 include include include include define NULL 0 struct spcb char name char state char why int dd typedef struct spcb pcb pcb producter consumer process process1 int s1 s2 i j in out pc m char array 10 char c x int pa 6 sa 6 int p int s p 操作原语 s s 1 if sstate B B 表示阻塞 process why s else process state W W 表示就绪 return s int v int s v 操作原语 s s 1 if sstate W process state W return s char RanChar char arr 10 a b c d e f g h i j return arr abs rand 10 void put printf n please product anychar scanf n c Sleep 1000 array in RanChar in in 1 10 printf product a char is c n array in 1 int k 0 for m 0 m 10 m if array m printf c array m k k 1 printf 缓冲池中有 d 个产品 n k void get Sleep 1000 x array out printf n c get a char fron buffer x printf n array out out out 1 10 int k 0 for m 0 mname printf c t process state printf c t process why printf d t process dd printf n void init 初始化程序 s1 10 s1 表示空缓冲区的数量 s2 0 s2 表示满缓冲区的数量 producter name p 对生产者进程初始化 producter state W producter why producter dd 0 consumer name c 对消费者进程初始化 consumer state W consumer why consumer dd 0 for int k 0 k 10 k array k void bornpa 将生产者程序装入 pa 中 for i 0 i 3 i pa i i void bornsa 将消费者程序装入 sa 中 for i 0 idd i pc 此时把 PC 的值付给 I if process name p pc i 1 switch j case 0 s1 p s1 process dd pc break 申请资源 若没有则跳转 case 1 put process state W process dd pc break case 2 s2 v s2 process dd pc break case 3 gotol process state W process dd pc else if process name c j sa i pc i 1 switch j case 0 s2 p s2 process dd pc break 申请资源 若没有申请到则 跳转 case 1 get process dd pc break case 2 s1 v s1 process dd pc break case 3 gotol process state W process dd pc printf nThe program is over n void main init bornpa bornsa diaodu 实验五项目名称 资源分配实验五项目名称 资源分配 一 实验内容一 实验内容 模拟实现资源分配 二 实验目的二 实验目的 多个进程动态地共享系统的资源可能会产生死锁现象 死锁的产生 必须同时满足四 个条件 第一个是互斥条件 即一个资源每次只能由一个进程占用 第二个为等待条件 即一个进程请求资源不能满足时 它必须等待 但它仍继续保持已得到的所有其它资源 第三个是非出让条件 任何一个进程不能抢占另一个进程已经获得且未释放的资源 第四 个为循环等待条件 系统中存在若干个循环等待的进程 即其中每一个进程分别等待它前 一个进程所持有的资源 防止死锁的机构只须确保上述四个条件之一不出现 则系统就不 会发生死锁 在实验中假定系统中任一资源在每一时刻只能则由一个进程使用 任何进程不能抢占 它进程正在使用的资源 当进程得不到资源时必须等待 因此只要资源分配策略能保证进 程不出现循环等待 则系统就不会发生死锁 本实验要求学生编写和调试一个系统动态分配资源的简单模拟程序 观察死锁产生的 条件 并采用适当的算法 有效地防止和避免死锁的发生 采用银行家算法 代码如下 include include include define False 0 define True 1 int Max 10 10 0 各进程所需各类资源的最大需求 int Avaliable 100 0 系统可用资源 char name 3 0 资源的名称 int Allocation 10 10 0 系统已分配资源 int Need 10 10 0 还需要资源 int Request 10 0 请求资源向量 int temp 3 0 存放安全序列 int Work 10 0 存放系统可提供资源 int M 3 作业的最大数为100 int N 10 资源的最大数为100 void showdata 显示资源矩阵 int i j cout 系统目前可用的资源 Avaliable endl for i 0 i N i cout name i cout endl for j 0 j N j cout Avaliable j 输出分配资源 cout endl cout Max Allocation Need endl cout 进程名 for j 0 j 3 j for i 0 i N i cout name i cout cout endl for i 0 i M i cout i for j 0 j N j cout Max i j cout for j 0 j N j cout Allocation i j cout for j 0 j N j cout Need i j cout endl int changdata int i 进行资源分配 int j for j 0 j M j Avaliable j Avaliable j Request j Allocation i j Allocation i j Request j Need i j Need i j Request j return 1 int safe 安全性算法 int i k 0 m apply Finish 100 0 int j int flag 0 Work 0 Avaliable 0 Work 1 Avaliable 1 Work 2 Avaliable 2 for i 0 i M i apply 0 for j 0 j N j if Finish i False if apply N for m 0 m N m Work m Work m Allocation i m 变分配数 Finish i True temp k i i 1 k flag for i 0 i M i if Finish i False cout 系统不安全 endl 不成功系统不安全 return 1 cout 系统是安全的 endl 如果安全 输出成功 cout 分配的序列 for i 0 i M i 输出运行进程数组 cout temp i if i M 1 cout cout endl return 0 void share 利用银行家算法对申请资源对进行判定 char ch int i 0 j 0 ch y cout 请输入要求分配的资源进程号 0 M 1 i 输入须申请的资源号 cout 请输入进程 i 申请的资源 endl for j 0 j N j cout name j Request j 输入需要申请的资源 for j 0 jNeed i j 判断申请是否大于需求 若大于则出错 cout 进程 i 申请的资源大于它需要的资源 cout 分配不合理 不予分配 Avaliable j 判断申请是否大于当前资源 若大于 则 出错 cout 进程 i 申请的资源大于系统现在可利用的资源 cout 分配出错 不予分配 endl ch n break if ch y changdata i 根据进程需求量变换资源 showdata 根据进程需求量显示变换后的资源 safe 根据进程需求量进行银行家算法判断 void addresources 添加资源 int n flag cout n flag N N N n for int i 0 i n i cout name flag cout Avaliable flag showdata safe void delresources 删除资源 char ming int i flag 1 cout ming for i 0 i N i if ming name i flag 0 break if i N cout 该资源名称不存在 请重新输入 while flag for int j i j N 1 j name j name j 1 Avaliable j Avaliable j 1 N N 1 showdata safe void changeresources 修改资源函数 cout 系统目前可用的资源 Avaliable endl for int i 0 i N i cout name i Avaliable i endl cout 输入系统可用资源 Avaliable Avaliable 0 Avaliable 1 Avaliable 2 cout 经修改后的系统可用资源为 endl for int k 0 k N k cout name k Avaliable k endl showdata safe void addprocess 添加作业 int flag M M M 1 cout 请输入该作业的最打需求量 Max endl for int i 0 i N i cout name i Max flag i Need flag i Max flag i Allocation flag i showdata safe int main 主函数 int i j number choice m n flag char ming cout 资源管理系统的设计与实现 end
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025除尘器配套设备采购合同范本
- 常州期末考试化学试题及答案
- 2025高考英语试题分类汇编:动词的时态、语态、情态动词、虚拟语气含解析
- 常德初三历史中考试卷及答案
- 2025简易货物运输合同范本
- 现代汉语语汇题目及答案
- 2025年高考化学试题分类汇编:物质结构与性质晶胞的分析与计算(含解析)
- 葡萄沟课件教学课件
- 2025购销合同终止协议示范文本
- 2025年3月生物技术习题库+答案
- 气象法律、法规讲稿一全课件
- GB/T 6344-2008软质泡沫聚合材料拉伸强度和断裂伸长率的测定
- GB/T 39201-2020高铝粉煤灰提取氧化铝技术规范
- GB/T 3836.4-2021爆炸性环境第4部分:由本质安全型“i”保护的设备
- GB/T 20801.6-2020压力管道规范工业管道第6部分:安全防护
- GB/T 19355.2-2016锌覆盖层钢铁结构防腐蚀的指南和建议第2部分:热浸镀锌
- 核心素养视角下教师专业发展课件
- 企业信用信息公告系统年度报告模板:非私营其他企业
- 施工员钢筋工程知识培训(培训)课件
- 质量管理体系审核中常见的不合格项
- 共用水电费分割单模板
评论
0/150
提交评论