101《操作系统课程设计》指导书

合集下载

操作系统课程设计-指导书

操作系统课程设计-指导书

长沙学院课程设计指导书课程设计名称操作系统课程设计系(部)计算机科学与技术(盖章)专业软件工程班级09软件1-3班,09游戏1班2011年 5 月 25 日课程名称:操作系统课程设计课程编号:7020530510主笔人:何文德主审人:邓旭东一、课程设计的目的本课程是操作系统课程的重要组成部分,通过本课程的学习,使学生能更进一步地理解操作系统的设计和实现思路。

掌握操作系统主要原理和算法。

培养学生的实际运用操作系统原理分析解决问题的能力。

二、课程设计的题目1.进程管理仿真程序设计2.虚拟磁盘驱动程序设计三、设计内容(主要技术关键的分析、解决思路和方案比较等)(一)进程管理仿真程序设计1.基本要求:设计一个仿真程序,仿真进程管理的五大功能,包括创建进程,用新进程替换当前进程映像,进程状态转换,进程调度,上下文切换。

2.创新要求在基本要求达到后,可以进行创新设计。

3.设计方法和基本原理(1) 问题描述:系统由4种程序组成,它们是进程管理程序(kernel)、命令解释程序(commander)、系统信息程序( reporter)、用户程序(Application)。

系统内有3种进程(下称模拟进程),它们是:命令解释进程(commander),系统信息进程( reporter),用户进程(Application)。

Kernel程序首先运行。

Kernel启动后,创建commander进程。

Kernel程序根据需要创建reporter进程和Application进程。

Kernel负责维护6个数据结构,包括时间(Time), 处理器状态(CPUstate),进程表(PCBTable), 就绪队列(ReadyState),等待队列(BlockedState),运行进程(RunningState)。

系统采用时间轮转和优先级调度混合算法。

优先级以优先数表示,优先数越大则优先级越高。

调度时,就绪队列中优先数最大的进程优先运行,相同优先数进程按FIFO方式调度。

《操作系统》课程设计指导书

《操作系统》课程设计指导书

《操作系统》课程设计指导书Course Work of Operating System本指导书中包含5个题目,每个小组选择一个题目。

小组人数最多为4人,也可以1个人为1组。

上机时间安排为:每周二7~8节在软件实验室。

总学时为“两周”,分散到整个学期完成。

在2004年12月31日(周五)之前上交课程设计报告并拷贝电子文档及源程序到615的机器上。

每个题目的实验提示是互相启发的。

另外实验提示只是提示,你可以有自己的实现方法和理解,但必须在报告中清楚地说明。

你在实现复杂原理时可以也必须做简化假设。

数据结构以你自设的数组或链表居多。

题目一页面置换算法的模拟实现和计算命中率一、课程设计目的通过请求页式管理方式中页面置换算法的模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理中的页面置换算法。

二、课程设计内容模拟实现OPT、FIFO和LRU算法,并计算命中率。

命中率= 1- 缺页率。

三、实验要求及提示1、首先用随机数生成函数产生“指令”序列(实际上是产生指令将访问的地址序列),然后将指令序列变换成相应的页地址流,再计算不同算法下的命中率。

2、通过随机数产生一个指令序列,共产生400条。

其中50%的指令是顺序执行的(另外50%就是非顺序),且25%的指令分布在前半部地址空间,25%的指令分布在后半部地址空间。

具体的产生方法是:1)在[0,399]之间随机选取一起点m,记录到指令地址流数组中;2)所谓“顺序执行一条指令”,即执行地址为m+1的指令,把m+1记录下来;3)在前半部地址空间,即[0,m+1]中随机选一数,作为新指令地址m’;4)顺序执行一条指令,其地址为m’+1;5)在后半部地址空间[m’+2,399]中随机选一数,作为新指令地址;6)重复步骤1~5,直到产生400个指令地址。

3、将指令地址流变换成页地址(页号)流,简化假设为:1)页面大小为1K;2)用户虚存容量为40K;3)用户内存容量为4页到40页;4)用户虚存中,每K存放10条指令,所以那400条指令访问地址所对应的页地址(页号)流为:指令访问地址为[0,9]的指令为第0页;指令访问地址为[10,19]的指令为第1页;……。

《操作系统》课程设计说明书

《操作系统》课程设计说明书

河南城建学院《操作系统》课程设计说明书设计题目:UNIX/Linux文件系统分析专业:计算机科学与技术指导教师:邵国金耿永军陈红军班级:0614082学号:061408261姓名:贠炳森同组人:叶矿辉、陈宇计算机科学与工程系2011年1月7日前言在现在计算机更新如此迅速的时代要学好计算机软件技术,特别是操作系统的学习,不仅要努力学好课本上的基础知识,还要经常在图书馆看些有关这方面的书籍,而更重要的是要有足够的实践经验,也要注重和同学的交流,经常尝试性的做些小的操作系统,对自己技术的提升会有很大的帮助。

同时,学习计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。

如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。

例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。

但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。

本操作系统课程设计,是给同学提供一个集中实验的机会。

希望同学们通过该设计加深对所学习课程的理解。

本设计是基于课程中学到的UNIX系统调用,使用操作系统环境是Red Hat Linux 9,言语开发环境是Linux的GNU C或C++。

我做的课程设计是:Linux/Unix文件系统分析。

在Linux系统下,使用与文件相关的系统调用实现对物理设备文件的读写,参照Linux系统源代码以及Grub 系统的源代码,对不同介质上的FAT格式文件系统进行分析。

要求在Linux环境下设计出C语言程序,实现以下功能:1)分析UNIX SysV/Linux系统引导记录的作用;2)分析UNIX SysV/Linux的超级块及其结构,并建立相关数据结构,通过编程实现UNIX SysV/Linux文件系统内各部分的定位。

3)至少要实现对给定i节点文件的只读访问目录一.系统环境 (3)1.1硬件环境 (3)1.2软件环境 (3)二.设计目的及要求 (3)三.总体设计 (5)四.详细设计 (6)五.调试与测试 (6)六.设计中遇到的问题及解决方法 (6)七.Linux/Unix文件系统分析源程序清单 (7)7.1 头文件 (7)7.2 示例程序 (10)八.运行结果及分析 (16)8.1 linux文件系统读取 (16)8.2 UNIX文件系统读取 (18)九.心得体会 (19)十.参考文献 (20)Linux/Unix文件系统分析一.系统环境1.1硬件环境cpu为pentium4双线程技术,频率为2.8GHZ,内存为256MB。

操作系统课程设计任务书

操作系统课程设计任务书

《操作系统》课程实验指导书一、设计题目题目一:模拟实现页式虚拟存储管理页面置换算法题目二:模拟实现虚拟存储管理(请求分页存储管理)题目三:模拟实现可变分区存储管理题目四:模拟实现算法多级反馈队列进程调度算法题目五:模拟银行家算法二、设计目的《操作系统》课程实验是计算机类专业的集中实践性环节之一,是学习完《操作系统》课程后进行的一次全面的综合练习。

其目的在于加深对操作系统课程的理解,使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,理解操作系统在计算机系统中的作用、地位和特点,具有分析实际操作系统,设计、构造和开发现代操作系统的基本能力,为今后从事的各种实际工作,如设计、分析和改进各种系统软件和应用软件提供必要的软件理论基础。

、设计内容设计内容一页式虚拟存储管理页面置换算法1.目的和要求在熟练掌握计算机虚拟存储技术的原理的基础上,利用一种程序设计语言模拟实现几种置换算法,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。

2.设计内容阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。

模拟实现页式虚拟存储管理的三种页面置换算法(OPT、FIFO和LRU),并通过比较性能得出结论。

前提:(1)页面分配采用固定分配局部置换。

(2)作业的页面走向和分得的物理块数预先指定。

可以从键盘输入也可以从文件读入。

(3)置换算法的置换过程输出可以在显示器上也可以存放在文件中,但必须清晰可读,便于检验。

3.设计环境Windows操作系统、VC++6.0C语言4.设计提示(1)基础知识存储管理是操作系统进行资源管理的一个重要功能。

现代操作系统广泛采用虚拟存储的技术对内存进行扩充。

实现虚拟存储的一个主要技术手段就是将辅存和主存统一管理,在二者之间进行对换,从而形成物理上两级而逻辑上一级的存储管理系统。

一个置换算法的好坏对这个逻辑上的单级虚存的性能起着极其重要的作用,而且会影响处理机的调度性能。

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

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

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

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

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

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

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

具体任务如下: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................四、实验报告要求除了编程实现设计的要求,在运行调试完成后,要书写出课程设计报告,总结归纳课设的各个方面,锻炼自己实践和总结报告的能力。

操作系统课程设计实验指导书

操作系统课程设计实验指导书

《操作系统课程设计实验指导书》一、课程设计目的和意义了解掌握银行家算法,学会模拟实现资源分配,同时有要求编写和调试一个系统分配资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生二、题目:银行家算法设计设计要求:编制银行家算法通用程序,并检测所给状态的系统安全性。

设进程I提出请求Request[N],则银行家算法按如下规则进行判断。

(1)如果Request[N]<=NEED[I,N],则转(2);否则,出错。

(2)如果Request[N]<=AVAILABLE,则转(3);否则,出错。

(3)系统试探分配资源,修改相关数据:AVAILABLE=AVAILABLE-REQUESTALLOCATION=ALLOCATION+REQUESTNEED=NEED-REQUEST(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

设计技术参数:假设有n个进程m类资源,则有如下数据结构:可利用资源向量Available。

这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。

Available[j]=K,则表示系统中现有Rj 类资源K个。

最大需求矩阵Max。

这是一个n*m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。

如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。

分配矩阵Allocation。

这也是一个n*m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。

如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的数目为K。

需求矩阵Need。

这也是一个n*m的矩阵,用以表示每一个进程尚需的各类资源数。

如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。

指导书《操作系统课程设计》

指导书《操作系统课程设计》

三、课程设计基本步骤及进度安排
1. 学生分组(建议1-2人一组)、了解课程要求及熟悉任务一。(第9周)
2. 完成任务一的程序设计、编写与测试工作。(第10周)
3. 开始任务二的程序设计工作。(第11周)
4. 完成任务二的程序设计、编写与测试工作。(第12周)
5. 开始任务三的程序设计工作。(第13周)
课时4个学时。
任务二:程序模拟存储管理之“伙伴系统”算法
设计与编写程序实现动态内存管理之“伙伴系统”算法。初始内存的大小(必须是2 的幂)、申请内存的进程大小及次序等数据放在文本文件中。对于给定的输入文件,输 出进程申请与退出每步的内存分配状态。
课时4个学时。
任务三:老化算法模拟分页系统
设计与编写程序使用老化算法模拟一个分页系统。页面访问序列从文件(文本文 件)中读取。对于一个给定的输入文件,列出每1000个内存访问中发生缺页中断的数
设计内容:
1. 分析并执行“生产者-消费者问题” 示例演示程序(源代码清单:1-1)。
演示程序执行步骤:
1) 以“记事本”程序创建 pc.txt 文件,文件内容为:
其中,第 1 列为线程序号,第 2 列为线程类型(生产者还是消费者线程),第 3 列为等待时间, 第 4 列为运行时间。
2) 将文件 pc.txt 放在 C 盘根目录下 3) 运行生产程序,结果如下:
北理珠“操作系统”课题组
《操作系统课程设计指导书》
任务四:使用工具分析 Windows 之 NTFS 文件系统
2012-11
设计内容:
1. 学习 WinHex 工具软件的使用;
2. 利用 WinHex 工具对根目录下的文件进行删除、隐蔽、恢复、属性修改
及寻找其数据的存储位置;

《操作系统课程设计》指导书

《操作系统课程设计》指导书
设计三 存贮器管理系统设计
设计目的:使学生熟悉存贮器管理系统的工作原理及设计方法;加深对所学各种存贮器管理方案的理解;
设计要求:要求采用一些常用的存贮器分配算法,设计一个存贮器管理模拟系统并调试运行。模拟环境应尽量接近真实。
设计四 SPOOLing系统设计
设计目的:通过设计一个简单的SPOOLing系统来模拟实际的SPOOLing输入/输出过程,以掌握这种有用的技术。
设计要求:
⑴设计一个支持n个用户的文件系统,每个用户可拥有多个文件;
⑵采用二级或二级以上的多级文件目录管理;
⑶对文件应设置存取控制保护方式,如“只能执行”、“允许读”、“允许写”等;
⑷系统的外部特征应接近于真实系统,可设置下述文件操作命令:建立文件、打开文件、关闭文件、删除文件、读文件、写文件、复制文件、查询目录。
1、课程设计的基本思想,系统的总体结构和各子模块的功能说明;
2、课程设计有关算法的描述,并画出有关算法流程图;
3、源程序中核心代码的说明。源代码要求在关键的位置有注释,增加程序的可读性。程序结构和变量等命名必须符合有关软件开发的技术规范(参见有关文献)。
4、本课程设计的个人总结,主要包括以下内容:
《操作系统课程设计》指导书
———————————————————————————————— 作者:
———————————————————————————————— 日期:

操作系统课程设计指导书
李晓东 编
电子与信息工程学院计算机系
2012-9
ﻬ一、课程设计的目的和意义
本课程设计是学生在学完了《操作系统》课程后,培养学生程序设计能力的一个重要教学环节。课程设计为学生提供了一个动手、动脑并独立实践的机会,有助于学生将教材的理论知识和实践相结合,从而锻炼学生分析问题、解决问题的能力,提高学生实际编写程序的能力,为学生学习计算机专业的后续课程打下良好基础。

操作系统课程设计指导书-3

操作系统课程设计指导书-3

《操作系统》课程设计指导书适用专业:计算机科学与技术、通信工程、信息管理与信息系统课程设计时间:4周一、课程设计目的本课程设计是学生学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。

二、课程设计要求从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:每位同学从所给题目中任选一个(如自拟题目,需经教师同意),且必须独立完成课程设计,不能相互抄袭。

设计完成后,将所完成的作品交由老师检查。

要求写出一份详细的设计报告。

三、课程设计内容:(任选其一)课题一处理机调度模拟程序:选择一个调度算法,实现处理机调度。

设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。

也就是说能运行的进程数大于处理机个数。

为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。

要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。

设计要求:1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。

2)可选择进程数量3)本程序包括三种算法,可用C语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数及每个进程的运行时间,每个进程的优先数由随机函数产生且优先数随等待时间而变化,执行,显示结果。

课题二用多进程同步方法解决生产者-消费者问题设计目的:通过研究Linux 的进程机制和信号量,实现生产者消费者问题的并发控制.说明:有界缓冲区内设有20个存储单元,有界缓冲区可用数组实现,缓冲区中的内容自定。

设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者进程标识符.(2)生产者和消费者至少各有两个以上.(3)多个生产者或多个消费者之间须有对缓冲区进行共享操作的函数代码(注意互斥与同步).课题三设计一个虚拟存储区和内存工作区,编程序演示下述置换算法的具体实现过程,并计算访问命中率:要求从主界面选择某算法,且以下算法都要实现1、先进先出算法(FIFO)2、最近最久未使用算法(LRU)3、随机淘汰算法课题四编程模拟多进程共享临界资源:要求产生至少3个进程:1、两个进程模拟需要进入临界区的用户进程,当需要进入临界区时,显示:“进程x请求进入临界区…”,同时向管理进程提出申请;在临界区中等待一段随机时间,并显示:“进程x正在临界区…”;当时间结束,显示:“进程x退出临界区…”,同时向管理进程提出退出申请。

操作系统课设指导书

操作系统课设指导书

《操作系统》/《操作系统课程设计》课设指导书《操作系统》《操作系统课程设计》课设指导书计算机工程学院《操作系统》/《操作系统课程设计》课设指导书《操作系统》/《操作系统课程设计》课设项目指导书课设项目1 磁盘调度算法程序设计一、目的磁盘是经常使用的一种重要的外设,对磁盘数据的寻道时间的长短直接影响机器的整体运行速度,本设计要求用C语言(或高级语言)编写程序模拟实现磁盘调度的常用算法。

以加深对磁盘调度常用算法的理解和实现技巧。

二、课设要求1)、设计一个函数完成先来先服务的磁盘调度功能。

2)、设计一个函数完成最短寻道时间优先的磁盘调度功能。

3)、设计一个函数完成电梯算法的磁盘调度功能。

三、课设设备、环境奔腾以上计算机,装有Turbo C 2.0软件四、课设方法及步骤1、设计方法:根据设计任务书的要求,画出程序设计流程图,确定程序的功能,把整个程序根据功能要求分解为各个子程序,利用TC语言分编写程序代码,然后进行上机调试、修改、进行连接,测试,写出设计总结报告。

2、设计步骤:1)、自定义磁盘调度相关的数据结构。

2)、依据先来先服务算法(FCFS)、最短寻道优先算法(SSTF)、扫描(SCAN,也称电梯)算法的原理,编写对应函数,模拟系统的磁盘调度服务。

3)、为了更好地模拟和评价算法的性能,随机产生需寻道的磁道序列,磁道序列的首磁道为磁头的当前位置;在SCAN算法中,允许用户指定当前寻道方向。

4)、统计各算法总寻道次数和平均寻道距离;分析各算法性能,并作出评价。

5)、设计要求一人单独进行,独立完成设计,上机进行运行调试。

6)、写出课程设计报告书。

课设项目2 进程调度程序设计一、目的进程调度是处理机管理的核心内容。

本设计要求用C语言编写和调试一个简单的进程调度程序。

通过设计本可以加深理解有关进程控制块、进程队列的概念,并体会和了解最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法的具体实施办法。

操作系统课程设计指导

操作系统课程设计指导

操作系统课程设计指导一、课程设计的目的操作系统是计算机系统的核心系统软件,它负责控制和管理整个系统的资源并组织用户协调使用这些资源,使计算机高效的工作。

《操作系统课程设计》是《操作系统》理论课的必要补充,是复习和检验所学课程的重要手段,本课程设计的目的是综合应用学生所学知识,通过实验环节,加深学生对操作系统基本原理和工作过程的理解,提高学生独立分析问题、解决问题的能力,增强学生的动手能力。

二、课程设计的要求1.分析设计内容,给出解决方案(要说明设计实现的原理,采用的数据结构)。

2.画出程序的基本结构框图和流程图。

3.对程序的每一部分要有详细的设计分析说明。

4.源代码格式要规范。

5.设计合适的测试用例,对得到的运行结果要有分析。

6.设计中遇到的问题,设计的心得体会。

7.按期提交完整的程序代码、可执行程序和课程设计报告。

三、课程设计题目选做3、4、6、8可以申请优秀。

1、吃水果问题桌上有一盘子,可以存放一个水果。

爸爸总是放苹果到盘子中,而妈妈总是放香蕉到盘子中;一个儿子专等吃盘中的香蕉,一个女儿专等吃盘中的苹果。

请用P,V操作实现上述问题的解。

分析:在本题中,爸爸、妈妈、儿子和女儿共用一个盘子,盘子一次只能放一个水果。

当盘子为空时,爸爸和妈妈都可以试着将一个水果放入盘中,但一次只能有一人成功放入水果。

若放入盘子中的是香蕉,则允许儿子吃,女儿必须等待;若放入盘子中的是苹果,则允许女儿吃,儿子必须等待。

在本题中,应设置3个信号量dish、apple、banaba,信号量dish表示盘子是否为空,其初值为1;信号量apple表示盘中是否有苹果,其初值为0;信号量banana表示盘中是否有香蕉,其初值为0。

进程之间的同步描述如下:Semaphore dish=1;Semaphore apple,banana=0;Main(){cobeginfather();mother();son();daughter();coend}Father() mather(){ {while(true) while(true){ {p(dish); p(dish);将苹果放入盘中;将香蕉放入盘中;v(apple); v(banana);} }} }Son() daughter(){ {while(true) while(true){ {p(banana); p(apple);从盘中取出香蕉;从盘中取出苹果;v(dish); v(dish);吃香蕉;吃苹果;} }} }2、司机与售票员问题设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;到站停车。

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

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

《操作系统课程设计任务指导书》山东建筑大学计算机科学与技术学院二○○七年十二月基本情况课程名称:操作系统课程设计相关课程:操作系统、数据结构适合专业:信息与计算技术设计周数:1周学分: 2学分开课学期:第 7 学期开课单位:计算机科学与技术学院一、课程设计的教学目的和任务1、使学生进一步理解和掌握操作系统课程中所学到的各种基本算法。

2、使学生深入理解经典操作系统各组成部分的基本原理。

3、使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。

4、使学生能用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

二、课程设计的主要内容1.分析。

根据设计题目的要求,充分地分析和理解问题。

2.设计。

根据题目所涉及的操作系统内容,认真设计解题算法。

参照平时课内所学知识,按照软件工程方法,确定设计方案。

3.编码。

把设计的结果进一步求精为程序设计语言程序。

同时加入一些注解和断言,使程序中逻辑概念清楚。

4.调试与测试。

根据题目内容,设计测试用例,使之能够充分证明课程设计完成的正确性。

5.总结分析。

总结设计中所遇到的问题以及所得到的经验,分析程序中是否存在可以完善、提高的部分,做出总结。

6.编写课程设计报告。

三、课程设计的基本教学要求1、巩固和加深对操作系统课程基本知识的理解,提高对所涉及的算法的掌握。

2、通过实际课程设计,掌握简单软件的分析方法和设计方法。

四、课程设计报告的规范课程设计报告要求规范书写。

应当包括如下部分:1、操作系统课程设计任务书2、问题定义与分析3、概要设计及流程图4、问题实现及代码5、测试6、结论7、参考文献五、注意事项1、学生必须仔细阅读课程设计任务书,认真主动完成课程设计的要求。

有问题及时主动通过各种方式与教师联系沟通。

2、学生要发挥自主学习的能力,充分利用时间,安排好课程设计的进度,并在课程设计过程中不断检查自己的计划完成情况,及时向教师汇报。

《计算机操作系统》课程设计指导书

《计算机操作系统》课程设计指导书

《计算机操作系统》课程设计指导书湖南工业大学计算机与通信学院二O一三年九月《计算机操作系统》课程设计说明计算机操作系统是计算机科学与技术专业的主要专业基础课程,其实践性、应用性很强。

实践教学环节是必不可少的一个重要环节。

计算机操作系统课程设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握操作系统的基本原理,加深对操作系统基本方法的理解,加深对课堂知识的理解,为学生综合运用所学知识,在Linux环境下编写功能较简单的程序来实现操作系统的基本方法、并在实践应用方面打下一定基础。

要求学生在指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个实验解决一类问题。

要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,并且能够进行简单分析和判断;能够熟练使用Linux 用户界面;掌握操作系统中进程管理概念和控制方法;了解进程的并发,进程之间的通信方式,了解虚拟存储管理的基本思想,了解设备管理的功能,了解文件系统的功能。

同时培养学生进行分析问题、解决问题的能力;培养学生完成实验分析、实验方法、实验操作与测试、实验过程的观察、理解和归纳能力。

为了收到良好的实验效果,编写了这本课程设计指导书。

在指导书中,每一个课程设计任务按照该课程设计大纲的要求编写,力求紧扣理论知识点、突出设计方法、明确设计思路,通过多种形式引导学生有目的、有方向地完成课程设计任务,得出实验结果。

任课教师在课程设计前对课程设计的任务进行一定的分析和讲解,要求学生按照课程设计任务的具体要求提前做准备工作,如:查找资料等,做到有准备地上机。

进行课程设计时,指导教师应检查学生的预习情况,并对设计过程给予积极指导。

课程设计完毕后,学生应根据课程设计情况,实验数据及结果,完成课程设计报告,由学习委员统一收齐后交指导教师审阅评定。

任务1 进程管理演示一、课程设计目的加深对进程概念及进程管理各部分内容的理解;熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构的实施。

操作系统课程设计指导书

操作系统课程设计指导书

③ 查用户文件目录ufd
未找到, 返回(文件名不对) 找到, 下一步
④ 将对应表目从ufd中删除 ⑤ 释放回收文件记录空间
⑥ 释放表目结点空间 free(*q2) , 返回
6 ) 写文件 pwrite()
算法思想: ① 输入文件名=〉 x
② 查打开文件表afd
未找到 , 返回(文件未打开) 找到, 下一步
② 若采用顺序文件结构 , 可用动态数组存放记录 上述两函数(读/写) 稍作修改即可
③ 根据上述算法思想编写 pread和pwrite函数
8) 其它程序模块(函数)
print1 () : 显示主目录 print2() : 显示当前用户的文件目录 print3 () : 显示文件内容
close() : 退出某用户操作时 , 关闭所有打开文件 (注意: 必要时复制打开文件的文件长度及文件
修改标志(0 →flag)
输出“文件已打开 ”提示串 , 返 回
注: 任何文件必须先打开后使用(包括读、写和查看显示)
4) 关闭文件p c l o s e ( )
算法思想: ① 输入文件名=〉 x ② 查打开文件表afd
未找到, 返回 找到, 下一步
③ 将对应文件表目从afd 链中删除
④ 判断修改标志flag
[3]
[4]
文件名 文件长度
Z1
0

Z2
n
afd
文件名 长度 修改标志
文件
Z5
m
姓名 性别
R1 R2
姓名 性别
… 第 一个记录
动态分配
Rn
静态分配

… 文件
初始化用户文件目录及打开文件表指针(NULL=> ufd,afd) 初始化主目录(空格串=>mfd[i].username, NULL=> mfd[i].next)

《操作系统》课程设计指导书

《操作系统》课程设计指导书

《操作系统》课程设计指导书《操作系统》课程设计指导书信息技术系二0一0年六月课程设计任务(一):进程调度一、目的与要求1、目的进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。

本任务要求学生独立地用C 语言(或其它程序设计语言)编写和调试一个简单的进程调度程序。

调度算法(如,简单轮转法和优先数法等)可任意选择或自行设计。

以加深对进程调度和各种调度算法的理解。

2、要求(1)设计一个有n个进程并行的进程调度程序。

每个进程由一个进程控制块(PCB)表示。

进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。

(2)调度程序可包含4~5种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。

完成1种调度算法得基本分即60分,每增加1种加10分,满分100分。

(3)系统应能显示各进程状态和参数的变化情况,便于观察诸进程的调度过程二、示例1、题目本程序可选用优先数法或简单轮转法对五个进程进行调度。

每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。

为了便于处理,程序进程的运行时间以时间片为单位计算。

各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。

进程控制块结构如下:PCB其中:RUN—当前运行进程指针;HEAD—进程就绪链链首指针;TAID—进程就绪链链尾指针。

2、算法与框图(1)优先数法。

进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。

每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。

接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。

操作系统课程设计说明书

操作系统课程设计说明书

中北大学操作系统课程设计说明书学院、系:软件学院专业:软件工程学生姓名:学号:设计题目:模拟文件系统的设计与实现起迄日期: 2016年12月21日- 2017年1月4日指导教师:2016年12月20日一、需求分析1.1课程设计题目和目的通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解。

同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的力。

1.2 课程设计要求通过课程设计,要求学生主要掌握以下内容:a.文件的物理结构可以选用顺序分配,链表分配或索引分配。

b.建立文件:从命令中得到文件名,得到该文件的文件长度,建立文件修改目录表。

c.删除文件:回收文件占用的空间,修改目录表d.读文件:read[文件名][显示开始字节][显示的字节数],直接显示所需要的字节数。

e.写文件:write[文件名][插入的位置][插入的内容]f.查询属性:显示文件属性,文件名,类型,长度,时间等。

1.3程序设计思想此课程设计把TXT文件作为研究对象来模拟操作系统的文件系统的文件系统工作过程。

所以用一个字符串数组来模拟磁盘空间,顾名思义,模拟磁盘提供字符的存储服务。

磁盘空间分配表,采用链表结构,每个节点保存模拟磁盘的一个逻辑块的信息,包括块的最大长度,文件占用长度,占用标志。

如果占用标志为0,即该空间可分配给文件。

初始化磁盘空间时,从头开始遍历,检查占用位,如果该块位可分配,则检查块大小,若块长度大于或者等于申请空间的大小,则把块的前一部分(等于申请大小)分配给文件,并置标志位为占用。

剩下的大小做来一个新块,做来一个新的节点插入到原节点的后边,标志位为可用。

这样就实现了模拟磁盘的线性分配。

文件表,由于模拟文件系统的文件数量不多,故文件表采用线性表来存储。

线性表每个节点存储一个文件的信息。

打开文件表,采用数组形式存储打开的文件,数组每个元素保存一个打开文件的信息。

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

《操作系统原理》课程设计参考2010年12月课设的目的操作系统是计算机专业的一门专业课,也是计算机专业考研课程,但操作系统比较抽象,有的同学一学期完了都还很难理解进程、内存管理等一些概念和原理,操作系统课程设计的目的就是通过设计的实验,让同学们真正理解进程的实现,内存管理的机制,达到理解概念,了解实现原理。

同时也进一步巩固程序设计与数据结构的实践技能,实现整个大学阶段实践技能不断线的目的。

课设的故事一个操作系统采用请求页式管理方式来管理内存。

当一个进程在运行中,随着进程的执行,它会不断的访问内存(代码执行、存取数据),这样就会提出内存访问请求。

操作系统会根据用户进程提出的访存请求,来做地址变换,从而访问到用户进程想要访问的代码或数据。

操作系统进行地址变换的过程中发现用户将要访问的地址所在的虚页还没有进入内存会自动将该虚页从磁盘中装入内存,再进行地址变换。

当然若新的页调入内存之前,该进程所能使用的最大内存块数已经用完的话,操作系统就会从该进程已经在内存的那些页中根据先进先出的原则来淘汰掉一个页,腾出空间给将要正要请求访问的页。

所以操作系统要记录每个进程的每个页面的状态,记录这些调入内存的页面的顺序,还要记录内存中各个块的使用情况。

这些都是操作系统必需动态维护的数据,是操作系统的信息基础。

现假设一个计算机系统有内存mKB,系统的页面大小为1KB,假设操作系统占用内存低端的n个块(n<m/5),剩余的内存空间采用“随机+顺序”的方式来获取未用内存块,以分配给块请求程序。

所谓“随机+顺序”的内存块分配方式就是用随机数来确定一个起始探测的开始块号,如果其已经被分配,则向下一块探测,如果还是已经分配,则继续下探,直到找到可用块,如果已经到内存的尾部则回到操作系统分界处继续下探。

操作系统采用固定可用块数的方式给每个进程使用和分配内存块,并且规定最大内存块数为x,当某个进程已经用完了它的最大内存块数后就要淘汰页面了。

模拟计算机系统允许最大并发进程数为y,假设目前进程数已经达到最大进程数。

为了模拟某个进程,其所需的页面数z由随机数产生(m/10<z<m/4),页面推进的过程采用随机数方式给出访存地址a,逻辑地址a应该在0到zKB-1之间,操作系统负责对逻辑地址a进行地址变换,并维护整个系统内存管理的所有数据结构,保证进程的顺利推进,使内存得以共享,实现虚拟存储器的功能。

要求课设实现的系统能够配置上述参数,并按照配置参数的规模来系统的模拟系统的运行过程。

希望可以可视化的展示系统内部的变化。

课设的方案1构造页面、进程、内存管理所需的数据结构,动态管理系统中的有关信息。

#defineMAX_MEMORY_FRAME_COUNT200//最大允许设置的内存大小(以块为单位)classCPage:publicCObject//逻辑页的信息{DECLARE_DYNCREATE(CPage)public:CPage();boolbInMemoryFlag;//该页是否在内存intnFrameNo;//内存的快号intnDiskRelBlockNo;//磁盘的相对块号(可以随机给定)intnNextPageNo;//下一调进内存页的页号boolbModifiedFlag;//修改位(可以随机给定)//...};classCProcess:publicCObject//进程的信息{DECLARE_DYNCREATE(CProcess)public:CProcess();voidInitProcessParameter(intno,intpagetotal,intruntime);intGetOneLogicalAddress();//得到下一要访问的页的页号voidAddressMapping(intLogicalAddress);intnPID;//进程标识符charszProcessName[20];//进程名intnControlNo;intnStatus;intnPageCountLogicalSpace;//逻辑地址空间的页数intnPageCountInMemory;//调入内存的页数intnRunTime;//运行时间(运行步数)intnPageNoHead;//调入内存的首页intnPageNoTail;//调入内存的末页//其他信息,如就绪或阻塞队列指针----自己可以根据自己的能力与爱好进一步完善下去CPage*PageTable;};intMaxFrameCount;intGetOneRandDiskNo()//随机产生一个虚页在磁盘的相对块号{returnrand()%(1024*1024);}CPage::CPage(){bInMemoryFlag=0;//该页是否在内存nFrameNo=0;//内存的快号nDiskRelBlockNo=GetOneRandDiskNo();//磁盘的相对块号(可以随机给定)nNextPageNo=0;//下一调进内存页的页号bModifiedFlag=0;//修改位(可以随机给定)}IMPLEMENT_DYNCREATE(CPage,CObject)CProcess::CProcess(){nPID=(int)this;nPageCountInMemory=0;nStatus=0;nPageNoHead=0;nPageNoTail=0;PageTable=NULL;}voidCProcess::InitProcessParameter(intno,intpagetotal,intruntime){sprintf(szProcessName,"ProcName%1d",no);//进程名nControlNo=no;nPageCountLogicalSpace=pagetotal;//逻辑地址空间的页数nRunTime=runtime;//运行时间(运行步数)PageTable=newCPage[nPageCountLogicalSpace];//根据实际需要创建页表}intCProcess::GetOneLogicalAddress()//得到下一要访问的页的页号{intran_num;ran_num=rand()%nPageCountLogicalSpace;returnran_num;}voidCProcess::AddressMapping(intLogicalAddress){intnIndexIn=LogicalAddress;//正在访问到的页的页号intnIndexOut;intnFrameNoReused;//if(PageTable[nIndexIn].bInMemoryFlag==0)//未装入内存{if(nPageCountInMemory<MaxFrameCount)//本进程使用的内存块数未达最大块数{PageTable[nIndexIn].nFrameNo=COsExamDlg::AllocateMemoryFrame(nControlNo);//请求分配一块PageTable[nIndexIn].bInMemoryFlag=true;//维护链表if(nPageCountInMemory==0)//第一个页面装入内存{PageTable[nIndexIn].nNextPageNo=-1;this->nPageNoHead=nIndexIn;this->nPageNoTail=nIndexIn;}else{PageTable[nIndexIn].nNextPageNo=-1;//刚装入的页面的Next指针设为-1(终点)PageTable[this->nPageNoTail].nNextPageNo=nIndexIn;this->nPageNoTail=nIndexIn;}nPageCountInMemory++;}else//本进程使用的内存块数已达最大块数{//淘汰一页nIndexOut=this->nPageNoHead;nFrameNoReused=PageTable[nIndexOut].nFrameNo;//暂存被重用的内存块的块号this->nPageNoHead=PageTable[nIndexOut].nNextPageNo;//把首页设到原来的第二个顺序页PageTable[nIndexOut].nFrameNo=-1;//原来的页设成不在内存PageTable[nIndexOut].bInMemoryFlag=false;PageTable[nIndexIn].nFrameNo=nFrameNoReused;//访问页装入腾出的块PageTable[nIndexIn].bInMemoryFlag=true;//设为“已装入”PageTable[nIndexIn].nNextPageNo=-1;//刚访问的页面的Next指针设为-1(终点)PageTable[this->nPageNoTail].nNextPageNo=nIndexIn;//附加到链表this->nPageNoTail=nIndexIn;//设置为新的“链尾”//}//设置内存映像的显示串//。

}else//访问地址对应的页已在内存{//直接访问}}2设计使用上述数据结构来实现请求分页模拟系统下面的例子是用VC的对话框应用程序来实现的测试或应用系统模型。

进程的推进由windows的线程来模拟的,这里进程的内容是由随机数产生运行轨迹。

intCOsExamDlg::m_sMemoryFrameCount=120;intCOsExamDlg::m_sOsFrameCount=40;boolbMemoryBitmap[MAX_MEMORY_FRAME_COUNT];//内存空间管理的位示图CStringcsMemoryBitmap;//用于显示内存使用情况的字符串intGetOneLogicalAddress(){return0;}UINTBarryProcessThreadProc(LPVOIDpParam)//模拟进程的线程函数{CProcess*pProcess=(CProcess*)pParam;if(pProcess==NULL||!pProcess->IsKindOf(RUNTIME_CLASS(CProcess)))return1;//如果pObject无效,则返回1//添加执行代码CStringcsOutputInfo="";inti;intLA;for(i=0;i<pProcess->nRunTime;i++)//执行每个操作步{//随机产生一个访问地址LA=GetOneLogicalAddress();//地址变换--改变数据结构,改变用户界面pProcess->AddressMapping(LA);csOutputInfo+="M";//构造显示页表信息的串CWnd*pMainWnd;pMainWnd=AfxGetMainWnd();switch(pProcess->nControlNo){case0:pMainWnd->GetDlgItem(IDC_STATIC_PROCESS0)->SetWindowText(csOutputInfo);break;case1:pMainWnd->GetDlgItem(IDC_STATIC_PROCESS1)->SetWindowText(csOutputInfo);break;case2:pMainWnd->GetDlgItem(IDC_STATIC_PROCESS2)->SetWindowText(csOutputInfo);break;case3:pMainWnd->GetDlgItem(IDC_STATIC_PROCESS3)->SetWindowText(csOutputInfo);break;}//延时Sleep(1000);}return0;//threadcompletedsuccessfully!}CProcess*ProcessPool;voidCOsExamDlg::OsInitialization(){inti;csMemoryBitmap="";for(i=0;i<MAX_MEMORY_FRAME_COUNT;i++){bMemoryBitmap[i]=false;csMemoryBitmap+="";}}intCOsExamDlg::AllocateMemoryFrame(intnProcessNo){intnFrameNoStart;nFrameNoStart=m_sOsFrameCount+rand()%(m_sMemoryFrameCount-m_sOsFrameCount);while(bMemoryBitmap[nFrameNoStart]==true){nFrameNoStart=nFrameNoStart+1;if(nFrameNoStart==m_sMemoryFrameCount)nFrameNoStart=m_sOsFrameCount;}returnnFrameNoStart;}COsExamDlg::COsExamDlg(CWnd*pParent/*=NULL*/) :CDialog(COsExamDlg::IDD,pParent){//{{AFX_DATA_INIT(COsExamDlg)m_nProcessCount=0;m_nMemoryFrameCount=0;m_nOsFrameCount=0;m_nMaxFrameForOneProcess=0;//}}AFX_DATA_INIT//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin 32m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_nProcessCount=3;m_nMaxFrameForOneProcess=16;m_nMemoryFrameCount=64;m_nOsFrameCount=16;}voidCOsExamDlg::DoDataExchange(CDataExchange*pDX) {CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(COsExamDlg)DDX_Text(pDX,IDC_EDIT_PROCESS_COUNT,m_nProcess Count);DDX_Text(pDX,IDC_EDIT_MEMORY_FRAME_COUNT,m _nMemoryFrameCount);DDV_MinMaxInt(pDX,m_nMemoryFrameCount,64,128);DDX_Text(pDX,IDC_EDIT_OS_FRAME_COUNT,m_nOsFr ameCount);DDV_MinMaxInt(pDX,m_nOsFrameCount,16,32);DDX_Text(pDX,IDC_EDIT_MAX_FRAME_COUNT_PER_ PROCESS,m_nMaxFrameForOneProcess);DDV_MinMaxInt(pDX,m_nMaxFrameForOneProcess,4,16);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(COsExamDlg,CDialog)//{{AFX_MSG_MAP(COsExamDlg)ON_WM_SYSCOMMAND()ON_WM_P AINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_ACCEPT,OnButtonAcce pt)ON_BN_CLICKED(IDC_BUTTON_SIMU,OnButtonSimu) //}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////COsExamDlgmessagehandlers BOOLCOsExamDlg::OnInitDialog(){CDialog::OnInitDialog();//Add"About..."menuitemtosystemmenu.//IDM_ABOUTBOXmustbeinthesystemcommandrange.ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBO X);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemMenu(F ALSE);if(pSysMenu!=NULL){CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if(!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEP ARATOR);pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);}}//Settheiconforthisdialog.Theframeworkdoesthisautomaticall y//whentheapplication'smainwindowisnotadialogSetIcon(m_hIcon,TRUE); //SetbigiconSetIcon(m_hIcon,F ALSE); //Setsmallicon//TODO:AddextrainitializationhereGetDlgItem(IDC_EDIT_P AGE_COUNT0)->SetWindowText( "12");GetDlgItem(IDC_EDIT_P AGE_COUNT0)->SetWindowText( "12");GetDlgItem(IDC_EDIT_RUN_TIME0)->SetWindowText("12 ");GetDlgItem(IDC_EDIT_P AGE_COUNT1)->SetWindowText( "8");GetDlgItem(IDC_EDIT_RUN_TIME1)->SetWindowText("12 ");GetDlgItem(IDC_EDIT_P AGE_COUNT2)->SetWindowText(GetDlgItem(IDC_EDIT_RUN_TIME2)->SetWindowText("12 ");GetDlgItem(IDC_EDIT_P AGE_COUNT3)->SetWindowText( "9");GetDlgItem(IDC_EDIT_RUN_TIME3)->SetWindowText("12 ");srand(time(0));returnTRUE;//returnTRUEunlessyousetthefocustoacontrol }voidCOsExamDlg::OnSysCommand(UINTnID,LP ARAMlParam ){if((nID&0xFFF0)==IDM_ABOUTBOX){CAboutDlgdlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID,lParam);}//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelo w//todrawtheicon.ForMFCapplicationsusingthedocument/viewmo del,//thisisautomaticallydoneforyoubytheframework. voidCOsExamDlg::OnPaint(){if(IsIconic()){CPaintDCdc(this);//devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,(WP ARAM)dc.Get SafeHdc(),0);//CentericoninclientrectangleintcxIcon=GetSystemMetrics(SM_CXICON);intcyIcon=GetSystemMetrics(SM_CYICON);CRectrect;GetClientRect(&rect);intx=(rect.Width()-cxIcon+1)/2;inty=(rect.Height()-cyIcon+1)/2;//Drawtheicondc.DrawIcon(x,y,m_hIcon);}else{CDialog::OnPaint();}}//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrag s//theminimizedwindow.HCURSORCOsExamDlg::OnQueryDragIcon(){return(HCURSOR)m_hIcon;}voidCOsExamDlg::OnButtonAccept(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(true);inti,j;CStatic*pStatic1,*pStatic2;CEdit*pEdit1,*pEdit2;charszContent[100];CRectrect;CStringcsInfo;CPointpoint;CSizesize;intPageTotal;for(i=0;i<4;i++){switch(i){case0:pStatic1=(CStatic*)GetDlgItem(IDC_STATIC_0);pEdit1=(CEdit*)GetDlgItem(IDC_EDIT_P AGE_COUNT0); pEdit2=(CEdit*)GetDlgItem(IDC_EDIT_RUN_TIME0);pStatic2=(CStatic*)GetDlgItem(IDC_STATIC_PROCESS0);break;case1:pStatic1=(CStatic*)GetDlgItem(IDC_STATIC_1);pEdit1=(CEdit*)GetDlgItem(IDC_EDIT_P AGE_COUNT1);pEdit2=(CEdit*)GetDlgItem(IDC_EDIT_RUN_TIME1);pStatic2=(CStatic*)GetDlgItem(IDC_STATIC_PROCESS1);break;case2:pStatic1=(CStatic*)GetDlgItem(IDC_STATIC_2); pEdit1=(CEdit*)GetDlgItem(IDC_EDIT_P AGE_COUNT2); pEdit2=(CEdit*)GetDlgItem(IDC_EDIT_RUN_TIME2);pStatic2=(CStatic*)GetDlgItem(IDC_STATIC_PROCESS2);break;case3:pStatic1=(CStatic*)GetDlgItem(IDC_STATIC_3); pEdit1=(CEdit*)GetDlgItem(IDC_EDIT_P AGE_COUNT3); pEdit2=(CEdit*)GetDlgItem(IDC_EDIT_RUN_TIME3);pStatic2=(CStatic*)GetDlgItem(IDC_STATIC_PROCESS3);break;}if(i<m_nProcessCount){pStatic1->EnableWindow(true);pEdit1->EnableWindow(true);pEdit2->EnableWindow(true);pStatic2->EnableWindow(true);this->GetWindowRect(&rect);point.x=rect.left;point.y=rect.top;csInfo="";pEdit1->GetWindowText(szContent,200);PageTotal=atoi(szContent);for(j=0;j<PageTotal;j++)csInfo+="|";size=pStatic2->GetDC()->GetTextExtent(csInfo);pStatic2->GetWindowRect(&rect);ScreenToClient(&rect);//pStatic2->MoveWindow(rect.left,rect.top,size.cx,size.cy,true);pStatic2->SetWindowText(csInfo);}else{pStatic1->ShowWindow(SW_HIDE);pEdit1->ShowWindow(SW_HIDE);pEdit2->ShowWindow(SW_HIDE);pStatic2->ShowWindow(SW_HIDE);}}m_sMemoryFrameCount=m_nMemoryFrameCount;m_sOsFrameCount=m_nMemoryFrameCount;}voidCOsExamDlg::OnButtonSimu(){//TODO:Addyourcontrolnotificationhandlercodehere// CProcess* pNewProcess=newCProcess;ProcessPool=newCProcess[m_nProcessCount];charszContent[100];inti;intPageTotal,RunTime;for(i=0;i<m_nProcessCount;i++){switch(i){case0:GetDlgItem(IDC_EDIT_P AGE_COUNT0)->GetWindowText(szContent,200);PageTotal=atoi(szContent);GetDlgItem(IDC_EDIT_RUN_TIME0)->GetWindowText(szContent,200);RunTime=atoi(szContent);ProcessPool[i].InitProcessParameter(0,PageTotal,RunTime);AfxBeginThread(BarryProcessThreadProc,&ProcessPool[i]);break;case1:GetDlgItem(IDC_EDIT_P AGE_COUNT1)->GetWindowText(szContent,200);PageTotal=atoi(szContent);GetDlgItem(IDC_EDIT_RUN_TIME1)->GetWindowText(szContent,200);RunTime=atoi(szContent);ProcessPool[i].InitProcessParameter(1,PageTotal,RunTime);AfxBeginThread(BarryProcessThreadProc,&ProcessPool[i]);break;case2:GetDlgItem(IDC_EDIT_P AGE_COUNT2)->GetWindowText(szContent,200);PageTotal=atoi(szContent);GetDlgItem(IDC_EDIT_RUN_TIME2)->GetWindowText(szContent,200);RunTime=atoi(szContent);ProcessPool[i].InitProcessParameter(2,PageTotal,RunTime);AfxBeginThread(BarryProcessThreadProc,&ProcessPool[i]);break;case3:GetDlgItem(IDC_EDIT_P AGE_COUNT3)->GetWindowText(szContent,200);PageTotal=atoi(szContent);GetDlgItem(IDC_EDIT_RUN_TIME3)->GetWindowText(szContent,200);RunTime=atoi(szContent);ProcessPool[i].InitProcessParameter(3,PageTotal,RunTime);AfxBeginThread(BarryProcessThreadProc,&ProcessPool[i]);break;}}OsInitialization();}课设的要求1要求用多线程模拟各个进程的运行,同时要有用户界面来反映内存中各进程的页面的装入与调出的变化情况。

相关文档
最新文档