操作系统课程设计

合集下载

大学生操作系统课程设计

大学生操作系统课程设计

大学生操作系统课程设计一、教学目标本课程的教学目标分为三个维度:知识目标、技能目标和情感态度价值观目标。

1.知识目标:通过本课程的学习,学生需要掌握操作系统的基本概念、原理和关键技术,包括进程管理、内存管理、文件系统和输入/输出系统等。

2.技能目标:培养学生具备操作系统实验操作和程序设计的能力,能够运用所学知识分析和解决实际问题。

3.情感态度价值观目标:培养学生对操作系统学科的兴趣和热情,培养学生的创新意识和团队合作精神。

二、教学内容本课程的教学内容主要包括操作系统的基本概念、原理和关键技术。

1.教材章节:(1)引言和概述(2)进程管理(3)内存管理(4)文件系统(5)输入/输出系统(6)并发程序设计(7)操作系统安全与保护2.具体内容:(1)操作系统的定义、作用和分类(2)进程的基本概念、状态和控制(3)进程同步与互斥(4)死锁与饥饿(5)内存分配与回收策略(6)虚拟内存技术(7)文件和目录结构(8)文件访问控制和保护(9)输入/输出管理(10)操作系统用户接口三、教学方法本课程采用多种教学方法相结合,以提高学生的学习兴趣和主动性。

1.讲授法:用于传授基本概念、原理和方法。

2.讨论法:鼓励学生积极参与课堂讨论,培养学生的思考和分析能力。

3.案例分析法:通过分析实际案例,使学生更好地理解和掌握操作系统原理。

4.实验法:培养学生动手实践能力,巩固所学知识。

四、教学资源1.教材:选用国内外优秀教材,如《操作系统概念》、《现代操作系统》等。

2.参考书:提供相关领域的参考书籍,丰富学生的知识体系。

3.多媒体资料:制作课件、教学视频等,提高课堂教学效果。

4.实验设备:配置充足的实验设备,确保学生能够充分进行实践操作。

五、教学评估本课程的教学评估采用多元化的评价方式,包括平时表现、作业、考试等,以全面客观地评价学生的学习成果。

1.平时表现:通过课堂参与、提问、讨论等方式,评估学生的学习态度和思考能力。

2.作业:布置适量的作业,评估学生对知识点的理解和运用能力。

windows操作系统核心编程实验教程课程设计

windows操作系统核心编程实验教程课程设计

Windows操作系统核心编程实验教程课程设计一、课程概述本教程是针对操作系统核心编程(Windows)进行的实验课程设计,旨在为计算机科学与技术专业学生提供系统化的操作系统编程实践经验以及对Windows操作系统的进一步了解。

通过实验,学生将学习到操作系统的核心概念、体系结构、功能模块以及编程接口。

本教程适合计算机科学与技术专业的本科生、研究生的操作系统和计算机系统课程。

二、教学目标1.深入了解Windows操作系统的内部结构、设计原理及运行机制。

2.掌握操作系统核心概念、体系结构和功能模块。

3.掌握Windows操作系统的编程接口、开发技术、基本工具及其使用方法。

4.掌握Windows操作系统资源管理(如内存管理、进程管理、线程管理等)及其编程方法。

5.提高学生的系统编程能力和应用能力。

三、教学内容与大纲1.章节一:操作系统介绍–操作系统概述–操作系统的发展历程、种类及类别–Windows操作系统介绍2.章节二:操作系统架构–操作系统的体系结构–Windows操作系统的体系结构–操作系统模式(内核模式和用户模式)3.章节三:进程管理–进程概念–进程状态和状态转换–进程控制块–进程调度–进程同步与通信实现(如互斥量、信号量、管道等)–进程编程实践4.章节四:线程管理–线程概念和状态转换–线程控制块–线程同步与通信实现–线程编程实践5.章节五:内存管理–内存概述和内存分区–虚拟存储器和页面交换–内存管理实现(页式管理、段式管理)–内存编程实践6.章节六:设备管理–设备管理概述–Windows I/O管理模型–设备驱动程序开发–设备编程实践四、教学方法采用课堂讲授和实践操作相结合的教学方法,注重培养学生的动手能力和创新意识。

主讲教师将通过讲解操作系统原理和编程知识,来进行基础理论的传授,同时也会通过实践操作来加深理解,提高实际操作能力。

五、实验环境本教程主要使用Visual Studio 2017作为开发工具,配合Windows 10操作系统进行实验。

《操作系统》课程设计

《操作系统》课程设计

《操作系统》课程设计一、课程目标知识目标:1. 让学生掌握操作系统的基本概念,包括进程、线程、内存管理、文件系统等核心知识;2. 了解操作系统的历史发展,掌握不同类型操作系统的特点及使用场景;3. 掌握操作系统的性能评价方法和常用的调度算法。

技能目标:1. 培养学生运用操作系统知识解决实际问题的能力,如分析系统性能瓶颈、优化系统资源分配等;2. 培养学生具备基本的操作系统编程能力,如进程创建、线程同步、文件操作等;3. 提高学生的团队协作能力和沟通能力,通过小组讨论和项目实践,学会共同解决问题。

情感态度价值观目标:1. 培养学生对操作系统学科的兴趣,激发学生的学习热情,使其形成积极向上的学习态度;2. 培养学生具备良好的信息素养,尊重知识产权,遵循法律法规;3. 培养学生的创新精神和批判性思维,敢于质疑、勇于探索,形成独立思考的能力。

课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,提高学生的系统分析和编程能力。

学生特点:学生具备一定的编程基础和计算机系统知识,具有较强的逻辑思维能力和动手实践能力。

教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和项目实践,帮助学生将所学知识内化为具体的学习成果。

在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。

二、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、功能、类型及特点,对应教材第一章内容。

- 操作系统的起源与发展- 操作系统的功能与类型- 操作系统的主要特点2. 进程与线程:讲解进程与线程的概念、状态、调度算法,对应教材第二章内容。

- 进程与线程的定义与区别- 进程状态与转换- 进程调度算法3. 内存管理:分析内存管理的基本原理、策略和技术,对应教材第三章内容。

- 内存分配与回收策略- 虚拟内存技术- 页面置换算法4. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。

操作系统课程设计项目参考

操作系统课程设计项目参考

滴加碘液后
滴加碘液前
12/12/2021
第十二页,共二十三页。
消化(xiāohuà):在消化道内将食物分解成可吸收 (xīshōu)的成分的过程
(包括物理性消化和化学性消化)
吸收(xīshōu):营养物质通过消化道壁进入循环 系统的过程
12/12/2021
第十三页,共二十三页。
消化(xiāohuà)和吸收的过程
12/12/2021
第十九页,共二十三页。
练习(liànxí)
• 2、分析数据,指出(zhǐ chū)哪一部分消化道中消化液最多。
• 在每天摄入800克食物和1200毫升水的情况下, 消化腺大致分泌以下数量消化液。 1500毫升唾液 2000毫升胃液 1500毫升肠液 500毫升胆汁 1500毫升胰液
12/12/2021
第二十二页,共二十三页。
内容 总结 (nèiróng)
第二节。食物中的营养物质是在消化系统中被消化和吸收的。这粒西瓜籽在姗姗的消化道内, 经过了难忘的时光。它先遇到像轧钢机似的上、下尖硬的怪物,差点儿将它压得粉身碎骨。后来它
No 钻进了一条(yī tiáo)又长又窄的迷宫,它在这里走了很久,身边的许多物质都神秘地消失了。走出迷
唾液腺、胃腺(wèixiàn)、肝脏、胰腺、肠腺
1、淀粉在__口__腔__开始消化、蛋白质在____开始胃消化、脂肪在_______开始 消小化肠。
2、胆汁是一种消化液,但不含消化酶,起乳化脂肪的作用。
二、人体消化、吸收的主要器官—— _____小肠 能 训 练解
胰脏:分泌(fēnmì)胰液 肠腺:分泌肠液
肝脏:最大的腺体,分泌胆汁。 胆汁无消化酶,有乳化脂肪 的
作用。
第七页,共二十三页。

操作系统多线程课程设计

操作系统多线程课程设计

操作系统多线程课程设计一、课程目标知识目标:1. 理解操作系统中多线程的基本概念,掌握线程的创建、同步与通信机制;2. 学会分析多线程程序的性能与问题,了解常见线程同步问题的解决方案;3. 掌握操作系统级别线程调度的基本原则和方法。

技能目标:1. 能够运用所学知识,设计并实现简单的多线程程序;2. 能够运用同步机制,解决多线程中的竞态条件和死锁问题;3. 能够对多线程程序进行性能分析,并提出优化方案。

情感态度价值观目标:1. 培养学生对操作系统多线程技术的兴趣,激发他们探索计算机科学领域的热情;2. 培养学生团队合作意识,学会在团队项目中分工与协作;3. 培养学生面对复杂问题时的分析能力、解决问题的能力和创新精神。

课程性质:本课程为计算机科学与技术专业高年级选修课,旨在帮助学生深入理解操作系统中多线程技术,提高他们解决实际问题的能力。

学生特点:学生具备一定的编程基础和操作系统基本知识,具备独立分析和解决问题的能力。

教学要求:结合实际案例,注重理论与实践相结合,提高学生的动手能力和实际应用能力。

通过课程学习,使学生能够将多线程技术应用于实际项目中,提高软件性能。

二、教学内容1. 多线程基本概念:线程的定义、线程与进程的关系、线程的创建与销毁;2. 线程同步与通信:互斥锁、条件变量、信号量、管程等同步机制,线程间通信方式;3. 线程调度:调度算法、时间片轮转、优先级调度、多级反馈队列调度等;4. 多线程程序设计:多线程编程模型、线程池、线程局部存储、多线程并发控制;5. 常见线程同步问题及解决方案:竞态条件、死锁、饥饿、活锁等;6. 性能分析与优化:多线程程序性能指标、性能瓶颈分析、优化策略;7. 实践环节:结合实际案例,设计并实现多线程程序,分析并优化性能。

教学内容依据教材相关章节组织,具体安排如下:第一周:多线程基本概念,线程创建与销毁;第二周:线程同步与通信,互斥锁、条件变量、信号量等;第三周:线程调度,调度算法;第四周:多线程程序设计,线程池、线程局部存储;第五周:常见线程同步问题及解决方案;第六周:性能分析与优化;第七周:实践环节,课程总结与展示。

操作系统课程设计pintos

操作系统课程设计pintos

操作系统课程设计pintos一、教学目标本课程的目标是让学生了解和掌握操作系统的基本原理和概念,通过学习Pintos操作系统,使学生能够理解操作系统的核心机制,包括进程管理、内存管理、文件系统和输入/输出系统等。

在技能方面,学生应能够使用Pintos进行简单的操作系统设计和实现,提升编程能力和系统分析能力。

在情感态度价值观方面,学生应培养对计算机科学和操作系统的兴趣,增强解决实际问题的责任感和使命感。

二、教学内容教学内容将按照Pintos操作系统的结构和功能进行,包括:1. 操作系统的概述和基本概念;2. 进程管理,包括进程的创建、调度和同步;3. 内存管理,包括物理内存管理和虚拟内存管理;4. 文件系统,包括文件和目录的、文件系统的实现;5. 输入/输出系统,包括设备驱动程序和中断处理。

三、教学方法为了激发学生的学习兴趣和主动性,将采用多种教学方法,包括:1. 讲授法,用于讲解操作系统的原理和概念;2. 讨论法,用于讨论操作系统的实现和应用;3. 案例分析法,通过分析具体的操作系统案例,让学生理解操作系统的实际应用;4. 实验法,通过实验操作,让学生亲手实现操作系统的核心机制。

四、教学资源教学资源包括:1. Pintos操作系统的教材和相关参考书;2. 多媒体资料,包括操作系统的教学视频和PPT;3. 实验设备,包括计算机和相关的硬件设备。

这些教学资源将用于支持教学内容和教学方法的实施,丰富学生的学习体验。

五、教学评估教学评估将采用多种方式进行,以全面、客观、公正地评价学生的学习成果。

评估方式包括:1. 平时表现,包括课堂参与、提问和讨论等,占总评的20%;2.作业,包括理论和实践作业,占总评的30%;3. 考试,包括期中考试和期末考试,占总评的50%。

考试内容将涵盖操作系统的原理、概念和实验操作。

六、教学安排教学安排将根据课程内容和学生的实际情况进行设计。

本课程计划在一个学期内完成,每周安排2次课时,每次课时1小时。

操作系统课程设计题目

操作系统课程设计题目
-性能指标与评价方法
-操作系统性能调优策略
-多处理器系统
-多处理器系统的基本概念
-并行与分布式计算
-实时操作系统
-实时操作系统的特点与需求
-实时调度算法
-操作系统中的并发控制
-并发的基本概念
-互斥与同步机制
-课程设计进阶项目
-设计并实现一个简单的实时操作系统
-研究并发控制策略在操作系统中的应用
-分析多处理器系统中的负载均衡问题
4.章节四:内存管理
-内存分配与回收策略
-虚拟内存与分页机制
5.章节五:设备管理
-设备管理的基本原理
- I/O调度策略
6.章节六:文件系统
-文件与目录结构
-文件存储与访问控制
2、教学内容
-文件系统性能优化
-磁盘空间分配策略
-磁盘碎片整理方法
-操作系统安全性
-访问控制机制
-加密与认证技术
-操作系统实例分析
-探索操作系统在移动设备、物联网等新兴领域的应用案例
4、教学内容
-操作系统接口与用户交互
-命令行接口(CLI)与图形用户界面(GUI)
-操作系统提供的系统调用与服务
-操作系统的网络功能
-网络协议栈的基础知识
-操作系统在网络通信中的作用
-操作系统的虚拟化技术
-虚拟化技术的原理与应用
-虚拟机监控器(VMM)的作用与分类
-探讨操作系统在人机交互方面的未来发展趋势
-评估开源操作系统的标准化程度及其对行业的影响
操作系统课程设计题目
一、教学内容
本章节内容来自《操作系统》课程,针对高二年级学生,选择以下课程设计题目:
1.章节一:操作系统概述
-操作系统Hale Waihona Puke 基本概念-操作系统的历史与发展

课程设计操作系统

课程设计操作系统

课程设计操作系统一、教学目标本课程旨在让学生掌握操作系统的基本原理和概念,了解操作系统的运行机制和功能,培养学生运用操作系统知识解决实际问题的能力。

具体目标如下:1.知识目标:(1)理解操作系统的基本概念、功能和作用;(2)掌握操作系统的运行机制,包括进程管理、内存管理、文件管理和设备管理;(3)了解操作系统的发展历程和主流操作系统的基本特点。

2.技能目标:(1)能够运用操作系统知识分析和解决实际问题;(2)具备基本的操作系统使用和维护能力;(3)掌握操作系统的基本配置和优化方法。

3.情感态度价值观目标:(1)培养学生对操作系统知识的兴趣和好奇心;(2)树立正确的计算机使用观念,提高信息素养;(3)培养学生团队协作、创新思考和持续学习的能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.操作系统概述:介绍操作系统的定义、功能、作用和分类;2.进程管理:讲解进程的概念、进程控制、进程同步与互斥、死锁等问题;3.内存管理:讲解内存分配与回收策略、虚拟内存、页面置换算法等;4.文件管理:讲解文件和目录的概念、文件存储结构、文件访问控制、磁盘空间分配等;5.设备管理:讲解设备驱动程序、I/O调度策略、中断处理和DMA传输等;6.操作系统实例分析:分析主流操作系统(如Windows、Linux)的基本特点和运行机制。

三、教学方法本课程采用多种教学方法相结合,以提高学生的学习兴趣和主动性:1.讲授法:讲解操作系统的基本概念、原理和知识点;2.讨论法:学生针对操作系统相关问题进行讨论,培养学生的思维能力和团队协作精神;3.案例分析法:分析实际案例,让学生了解操作系统在实际应用中的作用和意义;4.实验法:安排实验课程,让学生动手实践,巩固所学知识。

四、教学资源为实现课程目标,我们将采用以下教学资源:1.教材:选用权威、实用的操作系统教材,为学生提供系统、全面的知识体系;2.参考书:提供相关领域的参考书籍,拓展学生的知识视野;3.多媒体资料:制作精美的PPT课件,辅助讲解和展示操作系统的相关概念和实例;4.实验设备:配置相应的实验设备,让学生动手实践,提高操作能力。

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

学号:22课程设计课程计算机操作系统题目模拟设计存储管理的分配与回收学院计算机科学与技术学院专业计算机科学与技术班级计算机1404姓名王承禹指导教师王红霞2016 年12 月27 日目录1需求分析 (2)1.1 任务描述 (2)1.2系统的功能需求 (2)2 功能设计 (3)2.1 算法分析 (3)2.2 数据结构 (4)2.2.1 页表结构 (4)2.3模块说明 (4)2.3.1 存模块 (4)2.3.2 进程模块 (5)2.3.3 主控模块 (5)2.3.4 错误处理模块 (6)3 开发平台 (7)3.1开发平台 (7)4 运行结果与运行情况分析 (7)4.1初始界面以及功能选项 (7)4.2存情况 (7)4.3进程页表信息 (8)5 自我评价与总结 (9)6 核心代码 (9)4.1存模块代码 (10)4.2进程模块代码 (13)4.3主控模块代码 (14)6 成绩评定表 (16)模拟设计页式存储管理的分配与回收1需求分析1.1 任务描述页式管理页式管理是一种存空间存储管理的技术,分为静态页式管理和动态页式管理。

模拟动态页式管理,请求调页技术,将各进程的虚拟空间划分成若干个长度相等的页,将存划分成若干长度相等的页框。

并且能完成逻辑地址到物理地址的转换。

模拟虚拟存储器的工作。

1.2系统的功能需求(1)能够输入给定的存页面数,页面大小,进程的个数及每个进程的页数。

(2)当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后存空间的使用情况(被进程占用的页面,空闲的页面)。

(3)当某进程撤消时,显示存回收后存空间的使用情况。

(4)实现缺页中断处理。

2 功能设计2.1 算法分析首先,请求表给出进程或作业要求的页面数。

然后,由存储页面表检查是否有足够的空闲页面,如果没有,则本次无法分配。

如果有则首先分配设置页表,并请求表中的相应表项后,按一定的查找算法搜索出所要求的空闲页面,并将对应的页好填入页表中。

页面分配算法如图2.1所示。

图2.1 页面分配算法流程图2.2 数据结构页式管理把存空间按页的大小划分成片或者页面,再按照一定的规律建立起页表2.2.1 页表结构struct Page {Process* processPtr; //进程指针int* memoryPage; //存页号bool* valid; //页是否有效int size; //有用页个数int pageSize;2.3模块说明采用了面向对象的设计方法,将模块分为存模块、进程模块与主控模块。

下面简要说明各个模块的接口与数据定义。

2.3.1 存模块class Memory {private:double allNum=1;//访问总次数double missNum = 0;//不命中次数Process** processPtr;//进程指针数组int* allocateTime; //页被分配时的系统时间bool* valid; //存页数组,标志页是否可用int freeSize; //空闲页数量int pageSize = 2;static Memory* instance;Memory();public:static Memory* getInstance();int getPageNum();void setPageNum(int Num);int getPageSize();void setPageSize(int Size);Process* getProcess(int index)const; //获取进程指针int getTime(int index)const; //获取系统时间bool getValid(int index)const; //获取页是否可用int getFreeSizse()const { return freeSize; } //获取存空闲页数量bool validIndex(int index)const; //index是否有效int getEarliestPage()const; //获取最早进入存的页void allocate(Process* ptr, int index); //分配一个存页给进程indexvoid allocateAll(Process* pr); //为所有进程页分配存页void revoke(); //释放一页void revoke(int mem); //释放一页void revokeProcess(Process* ptr); //释放进程的所有页void printInfo()const; //存页信息};2.3.2 进程模块class Process {private:string name; //进程名double size; //进程大小,单位为MBint pageCount; //页数Page* page; //进程的页表public:Process(string nm, double sz); //默认构造函数string getName()const { return name; }//获取进程名double getSize()const { return size; }int getPageCount()const { return pageCount; }Page* getPage()const { return page; }void printInfo()const;//输出进程信息};2.3.3 主控模块int main() {Memory* memory = Memory::getInstance(); //存指针Process** process = new Process*[MAX_PROCESS_SIZE]; //进程指针数组//初始化进程指针数组for (int i = 0; i < MAX_PROCESS_SIZE; i++)process[i] = NULL_PTR;init();int select = -1; //操作编号do {cout <<"\n==================== 菜单===================="<< endl;cout <<"1.创建进程\n2.分配进程所有页\n3.分配进程一页\n4.释放进程"<< endl;cout <<"5.释放进程一页\n6.存状态\n7.进程状态\n8.页表信息\n9.退出"<< endl;cout <<"\n操作编号: ";//正确地输入编号do {cin >> select;if (cin.fail()) badInput(); //输入流错误else if (select < 1 || select > 9) cout <<"\n操作编号错误!"<< endl;else break;} while (true);switch (select) {case 1:op1(memory, process); break;case 2:op2(memory, process); break;case 3:op3(memory, process); break;case 4:op4(memory, process); break;case 5:op5(memory, process); break;case 6:op6(memory, process); break;case 7:op7(memory, process); break;case 8:op8(memory, process); break;case 9:break;default:cout <<"\n怎么会运行到这里?"<< endl; break;}} while (select != 9);return 0;}2.3.4 错误处理模块class Error {private:string info; //异常信息public:Error() :info("Error: exception occured!") {}Error(string i) :info(i) {}string getInfo()const { return info; }};3 开发平台3.1开发平台(1)操作系统:Windows10(2)开发语言:C++(3)开发环境:Visual Studio 2015 Community本程序采用C++作为编程语言,用visual studio 2015进行开发。

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。

C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。

4 运行结果与运行情况分析4.1初始界面以及功能选项4.2存情况4.3进程页表信息5 自我评价与总结(1)本次实验中我认为完成的比较好的工作有模块设计和编码以及分配算法的实现。

其中模块分为了存、进程以及主控模块三部分。

可以方便的完成存分配算法的转换,具有较高的独立性,同时也可以方便的完成分页到分段的转换,采用的调度算法也有较高的独立性。

可见,一个模块独立性高的系统,其变更与扩展都会变得十分容易。

其次,在页面置换算法的选择上,我选择了先进先出算法,该算法易于实现,而且不命中率与随机置换算法的不命中率都比较低,是比较理想的页面置换算法。

(2)需求分析时对题目的理解不完全正确,造成了实现的系统功能不符合要求,例如,在存中应该给每个进程分配一定数量的块,而我的实现中并没有这样做,而是一个进程最极端的情况下可以占用所有存,并且一个进程可以替换其他进程的页面。

这一点是由于没有完全理解实验要求和对页式虚拟存储器理解有误造成的。

同时这样也给系统带来了很大的影响。

我吸取到的教训是,需求分析阶段就要搞清楚问题所在,在问题不明确的情况下,不能贸然着手实现系统,否则实现的系统讲没有意义。

(3)本次设计中,在编写、调试、执行的过程中,我熟悉了页式存储管理的各个置换算法与分配方法,以及回收方法。

同时,在实现系统的过程中,我在需求分析阶段没有搞清楚问题,以至于系统功能有误,这都是很好的经验和教训。

6核心代码6.1存模块代码class Memory {private:double allNum=1;double missNum = 0;Process** processPtr;//进程指针数组int* allocateTime; //页被分配时的系统时间bool* valid; //存页数组,标志页是否可用int freeSize; //空闲页数量int pageSize = 2;static Memory* instance;Memory();public:static Memory* getInstance();int getPageNum();void setPageNum(int Num);int getPageSize();void setPageSize(int Size);Process* getProcess(int index)const; //获取进程指针int getTime(int index)const; //获取系统时间bool getValid(int index)const; //获取页是否可用int getFreeSizse()const { return freeSize; } //获取存空闲页数量bool validIndex(int index)const; //index是否有效int getEarliestPage()const; //获取最早进入存的页void allocate(Process* ptr, int index); //分配一个存页给进程indexvoid allocateAll(Process* pr); //为所有进程页分配存页void revoke(); //释放一页void revoke(int mem); //释放一页void revokeProcess(Process* ptr); //释放进程的所有页void printInfo()const; //存页信息};//默认构造函数,私有Memory::Memory() {valid = new bool[pageNum];processPtr = new Process*[pageNum];allocateTime = new int[pageNum];freeSize = pageNum;//初始化: 页标志、进程指针、分配时间for (int i = 0; i < pageNum; i++) {valid[i] = true;processPtr[i] = NULL_PTR;allocateTime[i] = -1;}}int Memory::getPageNum(){return pageNum;}int Memory::getPageSize(){return pageSize;}void Memory::setPageNum(int Num){pageNum = Num;}void Memory::setPageSize(int Size){pageSize = Size;}Memory* Memory::instance = new Memory(); //获取单例Memory* Memory::getInstance() {return instance;}//获取进程指针Process* Memory::getProcess(int index)const {if (validIndex(index)) return processPtr[index];else throw Error("Error: in Memory::getProcess(), 错误的下标!"); }//获取系统时间int Memory::getTime(int index)const {if (validIndex(index)) return allocateTime[index];else throw Error("Error: in Memory::getTime(), 错误的下标!"); }//获取页是否可用bool Memory::getValid(int index)const {if (validIndex(index)) return valid[index];else throw Error("Error: in Memory.getValid(), 错误的下标!");}//index是否有效bool Memory::validIndex(int index)const {if (index < 0 || index >= pageNum) return false;else return true;}//获取最早进入存的页int Memory::getEarliestPage()const {int min = MAX_TIME; //最小分配时间int pos = -1; //最早进入的页for (int i = 0; i < pageNum; i++) {if (allocateTime[i] != -1 && allocateTime[i] < min) {pos = i;min = allocateTime[i];}}return pos;}//分配存页给进程页indexvoid Memory::allocate(Process* ptr, int index) {Page* page = ptr->getPage();if (page->getValid(index)) throw Error("Error: 页已在存中!");if (freeSize <= 0) revoke(); //释放一页//开始分配for (int i = 0; i < pageNum; i++) {if (valid[i]) { //找到空闲页try {//更新进程信息,可能抛出异常page->allocate(index, i);//更新存信息processPtr[i] = ptr;allocateTime[i] = time++;valid[i] = false;freeSize--;cout << "分配存页" << i << " 给进程" << ptr->getName() << " 第" << index << " 页." << endl;break;}catch (Error e) {cout << e.getInfo() << endl;}}}}6.1进程模块代码class Process {private:string name; //进程名double size; //进程大小,单位为MBint pageCount; //页数Page* page; //进程的页表public:Process(string nm, double sz); //默认构造函数//获取进程信息string getName()const { return name; }double getSize()const { return size; }int getPageCount()const { return pageCount; }Page* getPage()const { return page; }//输出进程信息void printInfo()const;};//默认构造函数Process::Process(string nm, double sz) {//if (sz <= 0 || sz >= pageNum) throw Error("Error: 进程大小参数错误,构造失败!");int nameSize = nm.size();if (nameSize <= 0 || nameSize > MAX_NAME_SIZE) throw Error("Error: 进程名长度错误,允许的长度为1~10 !");name =nm;size = sz;//进程大小double temp = size - (int)size;if (temp == 0) pageCount = size;else pageCount = size + 1;//新建页表page = new Page(this, pageCount);}//输出进程信息void Process::printInfo()const {cout <<"进程名: "<< name << endl;cout <<"大小: "<< size << endl;cout <<"页数: "<< pageCount << endl;}#endif6.2主控模块代码int main() {Memory* memory = Memory::getInstance(); //存指针Process** process = new Process*[MAX_PROCESS_SIZE]; //进程指针数组//初始化进程指针数组for (int i = 0; i < MAX_PROCESS_SIZE; i++)process[i] = NULL_PTR;init();int select = -1; //操作编号do {cout << "\n==================== 菜单====================" << endl;cout << "1.创建进程\n2.分配进程所有页\n3.分配进程一页\n4.释放进程" << endl;cout << "5.释放进程一页\n6.存状态\n7.进程状态\n8.页表信息\n9.退出" << endl;cout << "\n操作编号: ";//正确地输入编号do {cin >> select;if (cin.fail()) badInput(); //输入流错误else if (select < 1 || select > 9) cout << "\n操作编号错误!" << endl;else break;} while (true);switch (select) {case 1:op1(memory, process); break;case 2:op2(memory, process); break;case 3:op3(memory, process); break;case 4:op4(memory, process); break;case 5:op5(memory, process); break;case 6:op6(memory, process); break;case 7:op7(memory, process); break;case 8:op8(memory, process); break;case 9:break;default:cout << "\n怎么会运行到这里?" << endl; break;}getchar();getchar();} while (select != 9);return 0;}成绩评定表。

相关文档
最新文档