第一篇:10-11操作系统课程设计教案
山东大学授课教案
课程名称 :操作系统课程设计 本次授课内容:Nachos系统综述
教学日期:10-9/20
授课教师姓名:张鸿烈
职称:高级实验师
授课对象:本科
授课时数:2
教材名称及版本:Nachos Study v3.4授课方式:讲课
本单元或章节的教学目的与要求:
目的:让学生了解Nachos系统在操作系统内核实验教学中的作用和地位, 如何利用Nachos系统培养和启发开发系统软件的能力
要求:说明Nachos系统概貌,如何安装Nachosx系统,如何配置Nachos系统的开发和运行环境。
授课主要内容及学时分配
讲授Nachos系统的主要作用和功能。(0.4学时)讲授Nachos系统的实验环境、安装方法和系统结构。(0.4学时)讲授Nachos系统的开发过程。Makefile文件的设计和管理方法。(0.4学时)讲授Nachos系统内核跟踪和调试的方法。(0.4学时)安排本节实验内容(0.4学时)
重点、难点及对学生的要求(掌握、熟悉、了解、自学)
重点:Nachos系统的安装和系统结构。要求: 掌握。难点:Makefile文件的设计和管理。要求:了解。
主要外语词汇
Nachos Operating System tar
C++ emacs gdb make Makefile
辅助教学情况(多媒体课件、板书、绘图、标本、示教等)板书、示教, 多媒体课件
复习思考题
1.What is the purpose of ystem program? 2.What is main advantage of Nachos? 3.How does Makefile in Nachos?
参考教材(资料)
Silberschatz, A., Galvin, P., and Gagne, G., ”Operating System Concepts”, 6th Edition.Chapter 1,2,3 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 1,2,3
山东大学授课教案
课程名称 :操作系统课程设计 本次授课内容:线程的创建与管理
教学日期:10-9/27
授课教师姓名:张鸿烈
职称:高级实验师
授课对象:本科
授课时数:2
教材名称及版本:Nachos Study v3.4授课方式:讲课
本单元或章节的教学目的与要求:
目的:让学生了解操作系统内核中对线程的基本管理技术,培养学生编制、开发和改进内核级线程管理机制的技能,启发学生对内核线程管理机制的创新思路。
要求:说明操作系统内核中进线程的基本管理机制,并说明如何进行内核线程的实验和开发。
让学生实现一个按优先数策略调度线程的Nachos操作系统新内核。授课主要内容及学时分配
讲授操作系统内核中线程的创建/撤销。(0.4学时)讲授操作系统内核中线程的并发控制。(0.4学时)讲授操作系统内核中线程的调度。(0.4学时)讲授操作系统内核中线程上下文切换的实现过程。(0.4学时)安排本节实验内容(0.4学时)
重点、难点及对学生的要求(掌握、熟悉、了解、自学)
重点:操作系统内核中线程的并发控制和调度.。要求: 掌握。难点:线程上下文切换的实现过程。要求: 熟悉。
主要外语词汇 Thread
Concurrent
Schedule Switch
辅助教学情况(多媒体课件、板书、绘图、标本、示教等)板书、示教
复习思考题
1.Are Nachos threads kernel threads or user threads, if
Nachos runs on a raw hardware or Nachos runs on a UNIX system? 2.Suppose that thread A calls function Run(Thread *nextThread)and nextThread points to thread B.Within the this function, the assembly function SWITCH(oldThread, nextThread);(a From the machine’s point of view, what thread does this function call return to?(b From the viewpoint of thread A, when and how does this function call return?
参考教材(资料)
Silberschatz, A., Galvin, P., and Gagne, G., ”Operating System Concepts”, 6th Edition.Chapter 4,5,6
Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 4,5,6
山东大学授课教案
课程名称 :操作系统课程设计 本次授课内容:线程间的同步机制
教学日期:10-10/11
授课教师姓名:张鸿烈
职称:高级实验师
授课对象:本科
授课时数:2
教材名称及版本:Nachos Study v3.4授课方式:讲课
本单元或章节的教学目的与要求:
目的:让学生了解Nachos系统如何实现并发进程同步机制的,如何利用和改进这些同步机制解决实际的同步问题。启发学生对同步机制的创新思路。, 要求:说明Nachos系统同步机制的实现方法,并说明如何进行同步机制的实验和开发。让学生利用Nachos操作系统的同步机制生成一个能解决多生产者/消费者问题的新内核。授课主要内容及学时分配
讲授Nachos系统信号灯的实现和主要功能。(0.4学时)讲授Nachos系统锁的实现和主要功能。(0.4学时)讲授Nachos系统Mesa样式管程的实现和主要功能。(0.4学时)讲授如何利用信号灯解决多生产者/消费者问题。(0.4学时)安排本节实验内容(0.4学时)
重点、难点及对学生的要求(掌握、熟悉、了解、自学)
重点:信号灯的实现和主要功能。要求: 掌握。
难点:Mesa样式管程的实现和主要功能。要求: 熟悉。
主要外语词汇 Synchronization Semaphore Lock Monitor
辅助教学情况(多媒体课件、板书、绘图、标本、示教等)板书、示教
复习思考题
1.Explain why starvation is possible if the waiting queue of semaphore is implemented by using the LIFO order.2.Provide another example showing that incorrect results may occur when producer and consumer processes run the programs in page 190 of the text.3.If the P()and V()operations of semaphore are not executed atomically, show how the mutual exclusion intended in the code in Figure 7.11 of the text may be violated.参考教材(资料)
Silberschatz, A., Galvin, P., and Gagne, G., ”Operating System Concepts”, 6th Edition.Chapter 7,8 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 7,8
山东大学授课教案
课程名称 :操作系统课程设计 本次授课内容:Hoare样式管程的实现
教学日期:10-10/18
授课教师姓名:张鸿烈
职称:高级实验师
授课对象:本科
授课时数:2
教材名称及版本:Nachos Study v3.4授课方式:讲课
本单元或章节的教学目的与要求:
目的:让学生了解Hoare样式管程的同步机理,如何在操作系统内核中构造Hoare样式管程并用它解决实际的同步问题。启发学生对管程同步机制的创新思路。, 要求:说明Nachos系统同步机制的实现方法,并说明如何进行管程的实验和开发。让学生实现一个带有管程机制的Nachos操作系统新内核。授课主要内容及学时分配
讲授Hoare样式管程的同步机理。(0.4学时)讲授如何在操作系统中实现Hoare样式的管程。(0.4学时)讲授如何在Hoare样式的管程中实现条件变量。(0.4学时)讲授如何利用管程解决多生产者/消费者问题。(0.4学时)安排本节实验内容(0.4学时)
重点、难点及对学生的要求(掌握、熟悉、了解、自学)
重点:Hoare样式的管程同步机理。要求: 掌握。难点:Hoare样式的管程实现。要求: 熟悉。
主要外语词汇 Hoare Condition Wait Signal
辅助教学情况(多媒体课件、板书、绘图、标本、示教等)板书、示教、多媒体课件
复习思考题
1.Explain why the Hoare style condition variables degenerate to the Mesa style condition variables if if operation Signal()can only appear as the last state-ment in all functions of a monitor..2.Write a monitor for the bounded-buffer problem.Implement this monitor in Nachos using(a)the existing Mesa style condition variables
(b)the Hoare style condition variables you implemented previously.参考教材(资料)
Silberschatz, A., Galvin, P., and Gagne, G., ”Operating System Concepts”, 6th Edition.Chapter 7,8 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 7,8
山东大学授课教案
课程名称 :操作系统课程设计 本次授课内容:MISP虚拟机和内存管理
教学日期:10-10/25
授课教师姓名:张鸿烈
职称:高级实验师
授课对象:本科
授课时数:2
教材名称及版本:Nachos Study v3.4授课方式:讲课
本单元或章节的教学目的与要求:
目的:让学生了解Nachos内核是如何模拟一个真实计算机硬件的,用户程序是如何在MIPS虚拟机上运行的。怎样编写和开发内存管理程序。启发学生构造内存管理机制的创新思路。要求:说明Nachos内核是如何模拟一个真实计算机硬件的,并说明如何进行内存管理的实验和开发。
让学生实现一个能同时驻留多道用户程序的Nachos操作系统新内核。授课主要内容及学时分配
讲授Nachos内核是如何模拟一个MISP计算机CPU的。(0.4学时)讲授Nachos内核是如何模拟一个MISP计算机的内存的。(0.4学时)讲授Nachos内核是如何模拟一个MISP计算机页式内存管理部件的。(0.4学时)讲授Nachos内核是如何将一个用户可执行程序装入内存执行的。(0.4学时)安排本节实验内容(0.4学时)
重点、难点及对学生的要求(掌握、熟悉、了解、自学)
重点:用户可执行程序的装入和执行.。要求: 掌握。难点:页式内存管理部件管理。
要求: 熟悉。
主要外语词汇 MIPS
Simulator Memory Translation
辅助教学情况(多媒体课件、板书、绘图、标本、示教等)板书、示教
复习思考题
1.Suppose that a memory reference instruction of a 32-bit machine can have at most two memory references.The instruction that has two memory ref-erences itself takes two 32-bit words.The machine allows at most 8 levels of indirection for each memory reference.What is the minimum number of frames that must be allocated to a process on this machine? Why?
参考教材(资料)
Silberschatz, A., Galvin, P., and Gagne, G., ”Operating System Concepts”, 6th Edition.Chapter 9,10 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 9,10
山东大学授课教案
课程名称 :操作系统课程设计 本次授课内容:系统调用的实现
教学日期:10-11/1
授课教师姓名:张鸿烈
职称:高级实验师
授课对象:本科
授课时数:2
教材名称及版本:Nachos Study v3.4授课方式:讲课
本单元或章节的教学目的与要求:
目的:说明操作系统系统调用的基本机制,怎样编制开发系统调用接口和系统调用管理程序。启发学生对系统调用的创新思路。
要求: 能实现一个具有fork,Exec等基本系统调用功能的Nachos操作系统新内核。
授课主要内容及学时分配
讲授系统调用接口和用户程序是怎样链接的。(0.6学时)讲授系统调用异常是怎样进入的。(0.6学时)讲授系统调用管理程序应当怎样实现。(0.6学时)安排本节实验内容(0.2学时)
重点、难点及对学生的要求(掌握、熟悉、了解、自学)
重点:系统调用管理程序的设计.。
要求: 掌握。难点:fork,Exec系统调用的实现。
要求: 熟悉。
主要外语词汇
System call Interfaces Stub
Exception Trap fork
辅助教学情况(多媒体课件、板书、绘图、标本、示教等)板书、示教
复习思考题
1.When linking start.o and the object module of a Nachos user program, say halt.o, why must we put start.o before halt.o? 2.Describe all the changes you need to make in the Nachos code in order to implement the remaining 10 systems calls
参考教材(资料)
Silberschatz, A., Galvin, P., and Gagne, G., ”Operating System Concepts”, 6th Edition.Chapter 3,9,10 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 3,9,10
山东大学授课教案
课程名称 :操作系统课程设计 本次授课内容:虚拟内存
教学日期:10-11/8
授课教师姓名:张鸿烈
职称:高级实验师
授课对象:本科
授课时数:2
教材名称及版本:Nachos Study v3.4授课方式:讲课
本单元或章节的教学目的与要求:
目的:说明Nachos系统虚拟内存的基本机制。启发学生对操作系统虚拟内存设计的创新思路。
要求: 启发出学生如何进行虚拟内存实验的思路。授课主要内容及学时分配
讲授Nachos构造虚拟内存的基本机制。(0.6学时)讲授请求式内存页式管理设计技术(0.6学时)讲授页置换策略算法的实现技术(0.6学时)安排本节设计开发实验内容(0.2学时)
重点、难点及对学生的要求(掌握、熟悉、了解、自学)
重点:分页式虚拟内存的构造.。要求: 掌握。难点:页置换策略的实现。
要求: 熟悉。
主要外语词汇 Virtual Memory TLB Demand Paging Page Replacement Frames
辅助教学情况(多媒体课件、板书、绘图、标本、示教等)板书、示教
复习思考题
1.What is the minimum of page frame a process ? 2.What allocation to use ? 3.Whether yu apply the allocation algorithm globally or locally
参考教材(资料)
Silberschatz, A., Galvin, P., and Gagne, G., ”Operating System Concepts”, 6th Edition.Chapter 3,9,10 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 3,9,10
山东大学授课教案
课程名称 :操作系统课程设计 本次授课内容:文件系统接口
教学日期:10-11/15
授课教师姓名:张鸿烈
职称:高级实验师
授课对象:本科
授课时数:2
教材名称及版本:Nachos Study v3.4授课方式:讲课
本单元或章节的教学目的与要求:
目的:让学生了解Nachos文件系统的层次和结构,如何操作文件系统。启发学生扩展文件系统功能的创新思路。
要求:说明Nachos文件系统的层次和结构,并说明如何进行文件系统操作的实验和开发。
让学生实现一个具有独立文件系统的Nachos操作系统新内核。授课主要内容及学时分配
讲授Nachos文件系统的层次和结构。(0.4学时)讲授Nachos系统中的打开文件系统。(0.4学时)讲授Nachos系统中的文件目录结构。(0.4学时)讲授怎样操作Nachos文件系统。(0.4学时)安排本节实验内容(0.4学时)
重点、难点及对学生的要求(掌握、熟悉、了解、自学)
重点:Nachos文件系统的层次和结构。要求: 掌握。难点:Nachos系统中的打开文件系统。要求: 熟悉。
主要外语词汇 File system
Open files Directory File Operations
辅助教学情况(多媒体课件、板书、绘图、标本、示教等)板书、示教
复习思考题
1.What are the sector numbers of data blocks for file big?
2.What is the sector number of the disk to store the file header for file big?
参考教材(资料)
Silberschatz, A., Galvin, P., and Gagne, G., ”Operating System Concepts”, 6th Edition.Chapter 11 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 11
山东大学授课教案
课程名称 :操作系统课程设计 本次授课内容:I/O系统和文件系统的实现
教学日期:10-11/22
授课教师姓名:张鸿烈
职称:高级实验师
授课对象:本科
授课时数:2
教材名称及版本:Nachos Study v3.4授课方式:讲课
本单元或章节的教学目的与要求:
目的:让学生了解Nachos系统中I/O系统和文件系统的实现方法,如何扩展文件系统功能。启发学生扩展文件系统功能的创新思路。
要求:Nachos系统中I/O系统和文件系统的实现,并说明如何进行文件系统扩展的实验和开发。
让学生实现一个具有扩展功能文件系统的Nachos操作系统新内核。授课主要内容及学时分配
讲授Nachos文件系统的组织层次。(0.4学时)讲授Nachos系统中设备控制的方法。(0.4学时)讲授Nachos系统中文件空间的管理方法。(0.4学时)讲授Nachos文件系统中目录和I节点的管理方法。(0.4学时)安排本节实验内容(0.4学时)
重点、难点及对学生的要求(掌握、熟悉、了解、自学)
重点:Nachos文件系统的文件空间和I节点的管理方法。要求: 掌握。难点:Nachos系统中设备控制的方法。要求: 熟悉。
主要外语词汇 I/O Control
Free Space I-Node Directory
辅助教学情况(多媒体课件、板书、绘图、标本、示教等)板书、示教
复习思考题
1.According to the result of the last command nachos D and the result of od c DISK , how many files are there on the hard disk DISK?
2.The sector size of the Nachos hard disk is 128 bytes.Could you check the result of od-c DISK to make sure that the data blocks and the file header of big are in the right places in the disk?
参考教材(资料)
Silberschatz, A., Galvin, P., and Gagne, G., ”Operating System Concepts”, 6th Edition.Chapter 12,13 Silberschatz, A., Galvin, P., and Gagne, G., ”Appled Operating System Concepts”.Chapter 12,13
第二篇:操作系统课程设计
湖北民族学院信息工程学院11级计算机专业操作系统课程设计
(操作系统课程设计)
连续动态分区内存
管理模拟实现
学生姓名: 韩 慧 学生学号: 031140312 班 级: 031140--3 0311401、02、03、04班制
二〇一三年十二月 湖北民族学院信息工程学院11级计算机专业操作系统课程设计
目录
《操作系统》课程设计.......................................................1 引言......................................................................3 课程设计目的和内容......................................................3 需求分析.........................................................................3 概要设计...................................................................3 开发环境........................................................................4 系统分析设计.....................................................................4 有关了解内存管理的相关理论..................................................4 内存管理概念........................................................................4 内存管理的必要性..............................................................4 内存的物理组织.............................................................4 什么是虚拟内存.................................................................5 连续动态分区内存管理方式...................................................5 单一连续分配(单个分区)...................................................5
固定分区存储管理...............................................................5 可变分区存储管理(动态分区)..............................................5 可重定位分区存储管理........................................................5 问题描述和分析....................................................................6 程序流程图........................................................................6 数据结构体分析..................................................................8 主要程序代码分析...............................................................9 分析并实现四种内存分配算法.................................................11 最先适应算.....................................................................11 下次适应分配算法..........................................................13 最优适应算法...............................................................16 最坏适应算法...............................................................18 回收内存算法................................................................20 调试与操作说明.................................................................22
初始界面.......................................................................22 模拟内存分配...............................................................23
已分配分区说明表面............................................................24 空闲区说明表界面.............................................................24 回收内存界面.....................................................................25 重新申请内存界面..........................................................26.总结与体会......................................................................28 湖北民族学院信息工程学院11级计算机专业操作系统课程设计
参考文献.........................................................................28
引言
操作系统是最重要的系统软件,同时也是最活跃的学科之一。我们通过操作系统可以理解计算机系统的资源如何组织,操作系统如何有效地管理这些系统资源,用户如何通过操作系统与计算机系统打交道。
存储器是计算机系统的重要组成部分,近年来,存储器容量虽然一直在不断扩大,但仍不能满足现代软件发展的需要,因此,存储器仍然是一种宝贵而又紧俏的资源。如何对它加以有效的管理,不仅直接影响到存储器的利用率,而且还对系统性能有重大影响。而动态分区分配属于连续分配的一种方式,它至今仍在内存分配方式中占有一席之地。
课程设计目的和内容:
理解内存管理的相关理论,掌握连续动态分区内存管理的理论;通过对实际问题的编程实现,获得实际应用和编程能力。
编写程序实现连续动态分区内存管理方式,该程序管理一块虚拟内存,实现内存分配和回收功能。分析并实现四种内存分配算法,即最先适应算法,下次最先适应算法,最优适应算法,最坏适应算法。内存分配算法和回收算法的实现。
需求分析
动态分区分配是根据进程的实际需要,动态地为之分配内存空间。在实现动态分区分配时,将涉及到分区分配中所用的数据结构、分区分配算法和分区的分配和回收操作这样三个问题。常用的数据结构有动态分区表和动态分区链。在对数据结构有一定掌握程度的情况下设计合理的数据结构来描述存储空间,实现分区存储管理的内存分配功能,应该选择最合适的适应算法(首次适应算法,最佳适应算法,最后适应算法,最坏适应算法),在动态分区存储管理方式中主要实现内存分配和内存回收算法,在这些存储管理中间必然会有碎片的产生,当碎片产生时,进行碎片的拼接等相关的内容
概要设计
本程序采用机构化模块化的设计方法,共分为四大模块。⑴最先适应算法实现
从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。⑵下次适应分配算法实现 湖北民族学院信息工程学院11级计算机专业操作系统课程设计
该算法是最先适应算法的变种。在分配内存空间时,不再每次从表头(链首)开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。⑶最优适应算法实现
它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。⑷最坏算法实现
最坏适应分配算法要扫描整个空闲分区或链表,总是挑选一个最大的空闲分区分割给作业使用。该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求。
开发环境:
win7 下 VC++6.0 系统分析设计:
相关算法原理,算法流程图,涉及的数据结构内容都相应包含在各章节中
有关了解内存管理的相关理论
内存管理概念:
内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。内存不是预先划分好的,而是在系统运行的过程中建立分区.当作业装入主存时,根据作业所需要的主存容量查看是否有足够的主存空间,若有则按需要分割一个分区给该作业;否则令该作业等待.分区长度不固定分区个数不固定。这种存储管理的方法克服了固定分区严重浪费主存的问题,提高了主存资源的利用率。
内存管理的必要性:
内存管理对于编写出高效率的 Windows 程序是非常重要的,这是因为Windows 是多任务系统,它的内存管理和单任务的 DOS 相比有很大的差异。DOS是单任务操作系统,应用程序分配到内存后,如果它不主动释放,系统是不会对它作任何改变的;但 Windows 却不然,它在同一时刻可能有多个应用程序共享内存,有时为了使某个任务更好地执行,Windows 系统可能会对其它任务分配的内存进行移动,甚至删除。因此,我们在 Windows 应用程序中使用内存时,要遵循Windows 内存管理的一些约定,以尽量提高 Windows 内存的利用率。湖北民族学院信息工程学院11级计算机专业操作系统课程设计
1.3 内存的物理组织:
物理地址:
把内存分成若干个大小相等的存储单元,每个存储单元占 8 位,称作字节(byte)。每个单元给一个编号,这个编号称为物理地址(内存地址、绝对地址、实地址)。
二、物理地址空间: 物理地址的集合称为物理地址空间(主存地址空间),它是一个一维空间。
什么是虚拟内存:
虚拟内存是内存管理技术的一个极其实用的创新。它是一段程序(由操作系统调度),持续监控着所有物理内存中的代码段、数据段,并保证他们在运行中的效率以及可靠性,对于每个用户层(user-level)的进程分配一段虚拟内存空间。当进程建立时,不需要在物理内存件之间搬移数据,数据储存于磁盘内的虚拟内存空间,也不需要为该进程去配置主内存空间,只有当该进程被被调用的时候才会被加载到主内存。
连续动态分区内存管理方式的实现
在早期的操作系统中,主存分配广泛采用连续分配方式。连续分配方式,是指为一个用户程序分配一个连续的内存空间,该连续内存空间指的的是物理内存。下面介绍连续分配的四种方式。
单一连续分配(单个分区)
最简单的存储管理方式,用于多道程序设计技术之前。内存分为系统区和用户区,系统区由操作系统使用。用户区作为一个连续的分区分配给一个作业。分区存储管理是满足多道程序设计的最简单的一种存储管理方法,它允许多 4个用户程序同时存在系统内存中,即共享内存空间。按分区划分方式可分为固定分区和可变分区。
固定分区存储管理
把内存的用户区预先划分成多个分区,每个分区大小可以相同,也可以不同。(分区的划分由计算机的操作员或者由操作系统给出,并给出主存分配表)分区个数固定,分区的大小固定。一个分区中可装入一个作业,作业执行过程中不会改变存放区域。早期的 IBM 的 OS/MFT(具有固定任务数的多道程序系统)采用了这种固定分区的方法。
可变分区存储管理(动态分区)
内存不是预先划分好的,而是在系统运行的过程中建立分区.当作业装入主存时,根据作业所需要的主存容量查看是否有足够的主存空间,若有则按需要分割一个分区给该作业;否则令该作业等待。分区长度不固定分区个数不固定。这种存储管理的方法克服了固定分区严重浪费主存的问题,提高了主存资源的利用率。IBM操作系统OS/MVT采用可变分区存储管理。湖北民族学院信息工程学院11级计算机专业操作系统课程设计
可重定位分区存储管理
解决碎片问题的一种简单方法是采用可重定位分区分配.。其中心思想是,把不同程序,且在内存中地址不连续的想法让他们连续。
例:内存中现有 3 个空闲区,现有一作业到达,要求获得 30k 内存空间,没有分区满足容量要求,若想把作业装入,可将内存中所有作业进行移动,这样把原来分散的空闲区汇集成一个大的空闲区。将内存中的作业进行移动使它们连接在一起把原来分散的多个小分区拼接成一个大的空闲区.这个过程称为”紧凑”或”移动”。需解决的问题:每次”紧凑”后程序或数据装入的物理地址变化采用动态重定位。
问题描述和分析
系统应利用某种分配算法,从空闲分区链表中找到所需大小的分区,如果空闲分区大小大于请求分区大小,则从该分区中按改请求的大小划分出一块内存空间大小划分出一块内存空间分配出去,余下的部分仍留在空闲链表中。然后,将分配区的首址返回给调用者。
当进程运行完毕师范内存时,系统根据回收区的首址,从空闲区中找到相应的插入点,此时可能出现以下四种情况之一:
⑴该空闲区的上下两相邻分区都是空闲区:将三个空闲区合并为一个空闲区。新空闲区的起始地址为上空闲区的起始地址,大小为三个空闲区之和。空闲区合并后,取消可用表或自由链中下空闲区的表目项或链指针,修改上空闲区的对应项。
⑵该空闲区的上相邻区是空闲区:将释放区与上空闲区合并为一个空闲区,其起始地址为上空闲区的起始地址,大小为上空闲区与释放区之和。合并后,修改上空闲区对应的可用表的表目项或自由链指针。
⑶该空闲区的下相邻区是空闲区:将释放区与下空闲区合并,并将释放区的起始地址作为合并区的起始地址。合并区的长度为释放区与下空闲区之和。同理,合并后修改可用表或自由链中相应的表目项或链指针。
⑷两相邻区都不是空闲区:释放区作为一个新空闲可用区插入可用表或自由链。
程序流程图
内存分配流程图,如图
湖北民族学院信息工程学院11级计算机专业操作系统课程设计
从头开始查表检索完否?NY返回分区大小>所需大小N继续检索下一个表项Y分区大小-所需大小<=不可再分割大小N从该分区中划出所需大小的新分区Y将该分区从链中移出将该分区分配给请求者修改有关数据结构返回
内存回收流程图,如图
湖北民族学院信息工程学院11级计算机专业操作系统课程设计
开始判断空闲区上下内存情况上为空下为空上下都为空上下都不为空将上面的空闲区合并,并回收将下面的空闲区合并,并回收将上下的空闲区合并,并回收直接将其回收结束 数据结构体分析
⑴进程属性结构体 typedef struct readyque { char name[10];int size;}readyque,*readyqueue;⑵空闲链表结构体 typedef struct idlyspace { int from;int size;idlyspace * next;}idlyspace,*idly;⑶已分配链表结构体 typedef struct busyspace { int from;readyque r;湖北民族学院信息工程学院11级计算机专业操作系统课程设计
busyspace * next;}busyspace,*busy
主要程序代码分析
⑴主函数//代码请添加适当的注释。int main(){ Is=(idly)malloc(sizeof(idlyspace));Is->from=0;Is->size=256;Is->next=NULL;Is2=Is;Bs=(busy)malloc(sizeof(busyspace));Bs->next=NULL;int t,t1;printf(“n.......................欢迎来到动态分区存储管理系统..................nn”);printf(“...........................请选择要执行的算法:...........................n”);printf(“.........................1.最先适应算法
...............................n”);printf(“.........................2.下次适应算法............................n”);printf(“..........................3.最优适应算法
...............................n”);printf(“.........................4.最坏适应算法................................n”);printf(“........................................................................n”);printf(“请输入您的选择:”);scanf(“%d”,&t);int i;while(i!=5){
printf(“........................................................................n”);
printf(“.........................操作菜单如下:(请选择).......................n”);
printf(“..........................1.输入进程分配空间...........................n”);
printf(“.........................2.进程撤销回收空间...........................n”);
printf(“.........................3.输出所有空闲分区
..........................n”);
printf(“..........................4.输出所有已分配分区..........................n”);
printf(“..........................5.退
出..........................n”);
printf(“........................................................................n”);
scanf(“%d”,&i);
switch(i)
{
case 1:
switch(t)
{
case 1:
t1=FF();湖北民族学院信息工程学院11级计算机专业操作系统课程设计
break;
case 2:
t1=NF();
break;
case 3:
t1=BF();
break;
case 4:
t1=WF();
break;
default:
printf(“选择算法错误n”);
return 1;
}
if(t1)
printf(“分配空间成功n”);
else
printf(“分配空间失败n”);
break;
case 2:
t1=recover();
if(t1)
printf(“回收成功n”);
else
printf(“回收失败n”);
break;
case 3:
Isprint();
break;
case 4:
Bsprint();
break;
} } return 0;}
第三章 :分析并实现四种内存分配算法
最先适应算法
空闲区按地址从小到大的次序排列。
分配:当进程申请大小为 SIZE 的内存时,系统顺序查找空闲区表(链),直到找到容量满足要求(≥SIZE)的空闲区为止。从该空闲区中划出大小为 SIZE的分区分配给进程,余下的部分仍作为一个空闲区,但要修改其首址和大小。湖北民族学院信息工程学院11级计算机专业操作系统课程设计
优点:这种算法是尽可能地利用低地址部分的空闲区,而尽量地保证高地址 6部分的大空闲区,有利于大作业的装入。
缺点:主存低地址和高地址分区利用不均衡。在低地址部分集中了许多非常小的空闲区碎片降低了主存的利用率。最先适应算法 int FF(){ int t=0;readyque D;printf““请输入进程名:””);scanf““%””,D.name);
printf““输入进程申请空间大小:””);scanf““%””,&D.size);
idly l=Is;int mt=256;busy b=Bs;idly min=NULL;while(l)
//寻找空闲表中大小满足申请进程所需大小并且起址最小的空闲结点
{
if(D.size<=l->size)
{
if(l->from { mt=l->from;min=l;t=1; } } l=l->next;} if(mt!=256) { busy j; j=(busy)malloc(sizeof(busyspace)); //如果找到则为进程分配空间 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 j->from=min->from; for(int i=0;i<10;i++) { j->r.name[i]=D.name[i]; } j->r.size=D.size; while(b->next) { if(b->next->from b=b->next;else break; } j->next=b->next; b->next=j; min->from=min->from+D.size; min->size=min->size-D.size;} return t;} 下次适应分配算法 最先适应算法的变种。 总是从空闲区上次扫描结束处顺序查找空闲区表(链),直到找到第一个满足容量要求的空闲区为止,分割一部分给作业,剩余部分仍作为空闲区。下次适应分配算法 int NF(){ int t=0;readyque D;printf““请输入进程名:””);scanf““%””,D.name); 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 printf““输入进程申请空间大小:””);scanf““%””,&D.size); int mt=256;idly l=Is2;idly min=NULL;busy b=Bs;while(l)//寻找空闲表中大小满足申请进程所需大小并且起址最小的空闲结点 { if(D.size<=l->size) { if(l->from { mt=l->from;min=l;t=1; } } l=l->next;} if(mt!=256) { busy j; j=(busy)malloc(sizeof(busyspace)); j->from=min->from; for(int i=0;i<10;i++) { j->r.name[i]=D.name[i]; } j->r.size=D.size; while(b->next) { if(b->next->from b=b->next;else break; //如果找到则为进程分配空间 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 } //将申请空间进程插入到已分配链表中 j->next=b->next; b->next=j; //修改相应空闲节点的起址和大小 min->from=min->from+D.size; min->size=min->size-D.size; Is2=min->next; 结点 t=1; return t;} l=Is;//l指向空闲表的头 while(l!=Is2) { if(D.size<=l->size) { if(l->from { mt=l->from;min=l;t=1; } } l=l->next;} if(mt!=256){ busy j; j=(busy)malloc(sizeof(busyspace)); j->from=min->from; for(int i=0;i<10;i++) { //ls2指向修改结点的下一个 //循环查找 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 j->r.name[i]=D.name[i]; } j->r.size=D.size; while(b->next) { if(b->next->from b=b->next;else break; } j->next=b->next; b->next=j; min->from=min->from+D.size; min->size=min->size-D.size; Is2=min->next; t=1; return t;} return t;} 最优适应算法 空闲区按容量递增的次序排列。 分配:当进程申请存储空间,系统顺序查找空闲区表(链),直到找到第一个满足容量要求的空闲区为止。采用最优适应算法选中的空闲区是满足容量要求的最小空闲区。优点:选中的空闲区是满足容量要求的最小空闲区,而不致于毁掉较大的空闲区。 缺点:空闲区的大小一般与申请分区大小不相等,因此将其一分为二,留下来的空闲区一般情况下是很小的,以致无法使用。随着时间的推移,系统中的小空闲区会越来越多,从而造成存储空间的浪费。最优适应算法 int BF(){ int t=0;湖北民族学院信息工程学院11级计算机专业操作系统课程设计 readyque D;printf““请输入进程名:””);scanf““%””,D.name); printf““输入进程申请空间大小:””);scanf““%””,&D.size); idly l=Is;idly min=NULL;int mt=256;busy b=Bs;while(l)//在空闲链中寻找第一个大于所输入的进程大小的空闲块 { if(D.size<=l->size) { if(l->size { mt=l->size;min=l;t=1; } } l=l->next;} if(mt!=256) { busy j; j=(busy)malloc(sizeof(busyspace));空间 j->from=min->from; //申请分配用于存放进程的内存 //找到第一个满足要求的空闲块 //将第一个满足要求的空闲块(min)的首地址赋给j for(int i=0;i<10;i++) { j->r.name[i]=D.name[i];16 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 } j->r.size=D.size; while(b->next) //按从小到大的顺序查找新进程在已分配区中的位置 { if(b->next->from b=b->next;else break; } j->next=b->next; b->next=j; min->from=min->from+D.size; min->size=min->size-D.size; } return t;} 最坏适应算法 为了克服最佳适应算法把空闲区切割得太小的缺点,人们提出了一种最坏适应算法,即每次分配时,总是将最大的空闲区切去一部分分配给请求者,剩余的部分仍是一个较大的空闲区。避免了空闲区越分越小的问题。要求空闲区按容量递减的顺序排列。 分配:进程申请存储区时,检查空闲区表(链)的第一个空闲区的大小是否满足要求,若不满足则令进程等待;若满足则从该空闲区中分配一部分存储区给用户,剩下的部分仍作为空闲区。最坏适应算法 int WF(){ int t=0;readyque D;printf““请输入进程名:””);scanf““%””,D.name); printf““输入进程申请空间大小:””); //将所输入的进程插入进程链 //改变该空闲块的起始地址 //改变该空闲块的剩余大小 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 scanf““%””,&D.size); //输入进程申请的空间大小 idly l=Is;//l指向空闲链表ls头 idly min=NULL;int mt=0;busy b=Bs; //b指向已分配链表Bs头 //找到空闲分区中大小满足进程的请求且尺寸最大的结点 while(l){ if(D.size<=l->size)//判断进程所申请的大小是否小于空闲区的各结点大小 { if(l->size>mt) { mt=l->size;min=l;//min指向空闲区中尺寸最大的结点 t=1; } } l=l->next;} if(mt!=0)点 { busy j; j=(busy)malloc(sizeof(busyspace)); j->from=min->from; for(int i=0;i<10;i++) { j->r.name[i]=D.name[i]; } j->r.size=D.size; //判断是否找到了空闲区的满足结 //l指向空闲链表下一个结点 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 while(b->next)置 //寻找插入到已分配链表中的位 { if(b->next->from b=b->next;else break; } //把此进程结点j插入到已分配链表中 j->next=b->next; b->next=j; //修改空闲链表的相应结点的参数 min->from=min->from+D.size; min->size=min->size-D.size;} return t;} 可变分区的回收 当某个进程释放某存储区时,系统首先检查释放区是否与系统中的空闲区相邻若相邻则把释放区合并到相邻的空闲区去,否则把释放区作为一个空闲区插入到空闲表的适当位置。 释放区与空闲区相邻的四种情况。 (1)释放区与前空闲区相邻:把释放区与前空闲区合并到一个空闲区。其首址仍为前空闲区首址,大小为释放区大小与空闲区大小之和。 (2)释放区与后空闲区相邻:则把释放区合并到后空闲区,其首地址为释放区首地址,大小为二者之和。 (3)释放区与前后两空闲区相邻:这三个区合为一个空闲区,首地址为前空闲区首址,大小为这三个空闲区之和,并取消后空闲区表目。 (4)释放区不与任何空闲区相邻:将释放区作为一个空闲区,将其大小和首址插入到空闲区表的适当位置。 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 回收内存算法 int recover(){ readyque D;printf““请输入想要回收的进程名””); scanf““%””,D.name); busy b=Bs;idly l=Is;while(b->next)链表中 { bool yo=1; for(int i=0;i<10;i++) { if(b->next->r.name[i]==D.name[i])yo=yo*1; else yo=0; } //如果在已分配链表中则释放该结点所占空间 if(yo) { int t=b->next->from; int ts=b->next->r.size; //查找输入的进程名是否在已分配湖北民族学院信息工程学院11级计算机专业操作系统课程设计 while(l) { if(l->from>t+ts)不邻接 { idly tl;tl=(idly)malloc(sizeof(idlyspace));tl->from=t;tl->size=ts;tl->next=l;Is=tl;break;} if(l->from==t+ts) l->from=t; l->size=l->size+ts; busy tb=b->next; b->next=b->next->next; free(tb); return 1;} if(l->from+l->size idly tl; tl=(idly)malloc(sizeof(idlyspace)); tl->from=t; tl->size=ts; tl->next=l->next; l->next=tl; break;} else if(l->from+l->size==t) //所回收进程与空闲结点上邻接 { //所回收进程与空闲结点上下都不邻接 //所回收进程与空闲结点下邻接 { //所回收进程与空闲结点上下都 21 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 l->size=l->size+ts; if(l->from+l->size==l->next->from)接 { l->size=l->size+l->next->size; idly tm=l->next; l->next=l->next->next; freI); } br l=l->next; } //从已分配链表中释放所回收进程 busy tb=b->next; b->next=b->next->next; free(tb); return 1; } b=b->next;} printf(“没找到这”进程n”);return 0;} //所回收进程与空闲结点上下都邻调试与操作说明 初始界面 程序初始界面,有四个块选择,选择要执行的算法,调试以最坏算法为例,如图 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 选择最坏适应算法,如图 模拟内存分配 给进程a分配内存20,如图 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 已分配分区说明表界面 同理,给进程b分配内存30,给进程c分配内存40,给进程d分配50,给进程e分配60,如图 空闲分区说明表界面 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 查看空闲分区,如图 回收内存界面 回收进程b和d所占内存,如图 已分配分区说明表和空闲分区说明表 如图 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 重新申请内存界面 再为新进程i分配内存30,如图 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 根据最坏适应算法结合图所示可知,该算法将会从空闲分区表中选择一块最大的内存空间分配给进程i,从图也可看出该模拟算法实现了最坏适应算法 湖北民族学院信息工程学院11级计算机专业操作系统课程设计 总结与体会 本次做的课题是动态分区分配算法实现,此次课程设计成功实现了内存分配和内存回收,内存分配中包含了四种算法,分别是首次适应算法,循环首次适应算法,最佳适应算法和最坏适应算法。经编码调试,表明该程序模块是有效可行的。 通过这门课程的学习让我充分了解了内存管理的机制实现,从而更深一步的的对计算机 有了很多了解,这对于以后我们的研究和学习计算机系统起到了很重要的作用。 对于本次论文制作,自己的编程能力有所提高,对操作系统内存分配,存储空间的回收都有全新的认识。 在这次操作系统课程设计中,我使用了c++编写系统软件,对os中可变分区存储管理有了深刻的理解,但是过程中遇到了很多困难,一边做一边学,对c++有了比较多的理解。 实验中遇到很多问题,浪费了很多时间,总而言之是自己学习还不够好,不扎实,希望在以后学习中加以改善,学到更多知识。 参考文献 【1】 汤子瀛,哲凤屏,汤小丹.计算机操作系统.西安:西安电子科技大学出版社,2001.。湖北民族学院信息工程学院11级计算机专业操作系统课程设计 【2】 任爱华.操作系统实用教程.北京:清华大学出版社,2001。 长春理工大学 软件学院 0813111班 27号 姓名:丁为胜 一. 概述 1、课程设计目的及任务课程设计地点及要求 每个学生一台微机,需要安装windows98或windows2000操作系统,配备VC、VB、java或C编程语言,每个学生上机时间不少于24个小时。 操作系统是计算机专业的核心专业课,“操作系统课程设计”是理解和巩固操作系统基本理论、原理和方法的重要的实践环节。 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统基本理论与管理方式。在算法基础上,解决实际的管理功能的问题,提高学生实际应用、编程的能力。 主要任务是实现操作系统和相关系统软件的设计,其中涉及进程创建,同步,进程间的通信,存储管理,文件系统等操作系统概念。 2.课程设计地点及要求 每个学生一台微机,需要安装windows98或windows2000操作系统,配备VC、VB、java或C编程语言,每个学生上机时间不少于24个小时。 3.课程设计的内容 设计二: 设计任务: 掌握进程的管道通讯机制和信号量同步互斥机制。1. 进程的管道通讯 编制一个程序,程序中创建一个子进程。然后父子进程各自独立运行,父进程不断地在标准输入设备上读入小写字母,写入管道。子进程不断地从管道中读取字符,转换为大写字母后输出到标准输出设备上。当读到x时,结束。 2. 信号量实现的同步互斥机制 编制一个程序,程序中创建5个子进程,代表五位哲学家,然后父进程结束。使用信号量机制解决哲学家进餐问题。当哲学家进餐时,屏幕输出: [进程号] eating!当哲学家思考时,屏幕输出: [进程号] thinging!相关的系统调用和函数:pipe();write();read();semget();sepop();semctl();要求:查找并阅读上述系统调用的相关资料,将上述相关的函数封装为P()、V()操作,使用你封装的P()、V()操作实现5位哲学家的同步和互斥。 二. 设计的基本概念和原理 1.进程的管道通讯 管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。命名管道(Named Pipes)是在管道服务器和一台或多台管道客户机之间进行单向或双向通信的一种命名的管道。一个命名管道的所有实例共享同一个管道名,但是每一个实例均拥有独立的缓存与句柄,并且为客户——服务通信提供有一个分离的管道。实例的使用保证了多个管道客户能够在同一时间使用同一个命名管道。 2.信号量实现的同步互斥机制 规定奇数号的哲学家先拿起他左边的筷子,然后再去拿他右边的筷子;而偶数号 的哲学家则相反.按此规定,将是1,2号哲学家竞争1号筷子,3,4号哲学家竞争3号筷子.即 五个哲学家都竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有一个哲学家能获 得两支筷子而进餐。而申请不到的哲学家进入阻塞等待队列,根FIFO原则,则先申请的哲 学家会较先可以吃饭,因此不会出现饿死的哲学家。 三. 总体设计 1.实现的方法和主要技术路线 1.无名管道 无名管道用于具有亲缘关系的父子进程,子子进程之间的通讯。它的实现函数有 int pipe(int fd[2]); //fd[2] 为描述符数组,包含一个读描述符与一个写描述符,在使用管道通信时,关闭某些不需要的读或写描述符,建立起单向的读或写管道,然后用read 和write 像操作文件一样去操作它即可。 如图便是进程1 到进程2 的一个读管道。 分别在父进程和父子进程里向管道写数据,然后在子进程和子子进程里读数据。2.哲学家进餐伪码: semaphore chopstick[5]={1,1,1,1,1};void philosopher(int i){ while(true){ think(); if(i%2 == 0)//偶数哲学家,先右后左。 { wait(chopstick[ i + 1 ] mod 5);wait(chopstick[ i]);eat(); signal(chopstick[ i + 1 ] mod 5);signal(chopstick[ i]);} Else //奇数哲学家,先左后右。 { wait(chopstick[ i]); wait(chopstick[ i + 1 ] mod 5);eat(); signal(chopstick[ i]); signal(chopstick[ i + 1 ] mod 5);} } 四. 详细设计 进程的管道通信代码: import java.io.IOException;import java.io.PipedReader; public class ReceiverThread1 extends Thread { PipedReader pipedReader; public ReceiverThread1(SenderThread1 sender)throws IOException { pipedReader=new PipedReader(sender.getPipedWriter()); } public void run() { char[] ch=new char[100];StringBuffer sb=null;String str=null;int i=0;try { while((i=pipedReader.read(ch))!=-1) { sb=new StringBuffer(); for(int j=0;j { sb.append(ch[j]); } str=sb.toString(); System.out.println(“子进程读取的字符为:”+str.toUpperCase()); if(!str.endsWith(“x”)) { System.out.print(“父进程读入字符为:”); }else if(str.endsWith(“x”)) { System.out.println(“结束无法再次输入字符”); } } } catch(IOException e){ e.printStackTrace();}finally{ try { pipedReader.close(); } catch(IOException e){ e.printStackTrace(); } } } } import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PipedWriter; public class SenderThread1 extends Thread { PipedWriter pipedWriter; public SenderThread1(){ pipedWriter=new PipedWriter();} public PipedWriter getPipedWriter(){ return pipedWriter;} public void run() { BufferedReader ir=new BufferedReader(new InputStreamReader(System.in));char[] ch=new char[100];StringBuffer sb=null;String str=null;int i=0;System.out.print(“父进程读入字符为:”);try { while((i=ir.read(ch))!=-1) { sb=new StringBuffer(); for(int j=0;j { if(ch[j]>='a' && ch[j]<='z') { sb.append(ch[j]); if(ch[j]=='x') { break; } } } str=sb.toString(); pipedWriter.write(str); if(str.startsWith(“x”)||str.endsWith(“x”)) { break; // this.stop(); } } } catch(IOException e){ e.printStackTrace();}finally{ try { ir.close(); pipedWriter.close(); } catch(IOException e){ e.printStackTrace(); } } } } public class ThreadComm1 { public static void main(String[] args)throws Exception{ SenderThread1 sender=new SenderThread1();ReceiverThread1 receiver=new ReceiverThread1(sender);sender.start();receiver.start();} } 哲学家进餐问题代码: #include “stdafx.h” using namespace std;bool chop[100];//定义筷子 class ph { protected: bool * left,* right;//哲学家的左右手指向的筷子 int eattime;//哲学家的吃饭时间 public: bool check()//用于检查哲学家左右手的筷子是不是被占用 { if(*left && *right) return true; else return false;} void eat(int ineattime)//哲学家开始进餐 { eattime=ineattime; *left=false; *right=false;} bool finish()//检查哲学家是否完成进餐 { if(eattime>0)//没完成的话剩余时间减少 { eattime--; if(eattime==0)//完成的话归还筷子 { *left=true; *right=true; return true; } else return false; } else return false;} void init(int num,int max)//初始化哲学家,指定他们使用的筷子 { eattime=0; left=&chop[num]; if(num right=&chop[num+1]; else right=&chop[0];} };void main(){ system(“title 哲学家进餐问题”);int in,i,temp,time,j=1;queue for(int i=0;i<5;i++){ chop[i]=1; } for(int i=0;i<5;i++){ P[i].init(i,5);} cout<<“输入哲学家进餐队列:”< break;else if(in>5) { cout<<“一共只有”<<5<<“个人!”< } else { Q.push(in-1); } } cout<<“每个人吃饭时间:”< P[temp].eat(time); cout< if(temp+2>5) cout<<1< else cout< Q.push(temp);} for(i=0;i<5;i++) { if(P[i].finish()) cout< } //Q.push(-1); for(i=0;i { temp=Q.front(); Q.pop(); //if(temp!=-1) { cout< Q.push(temp); } //else { // Q.pop(); break; } } } for(int j=0;j第三篇:操作系统课程设计