操作系统课程设计内存管理
大学生操作系统课程设计

大学生操作系统课程设计一、教学目标本课程的教学目标分为三个维度:知识目标、技能目标和情感态度价值观目标。
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.作业:布置适量的作业,评估学生对知识点的理解和运用能力。
操作系统课程设计

操作系统课程设计一、课程目标知识目标:1. 理解操作系统的基本概念、功能、类型和结构,掌握操作系统的五大核心功能模块(处理器管理、存储器管理、设备管理、文件管理、用户接口);2. 掌握操作系统的发展历程、主要操作系统(如Windows、Linux、Mac OS)的特点及应用场景;3. 了解操作系统的设计与实现原理,包括进程管理、内存管理、设备管理、文件系统等关键技术;4. 学会使用操作系统提供的命令行或图形界面进行基本的系统操作与维护。
技能目标:1. 培养学生对操作系统的实际操作能力,能够熟练使用至少一种操作系统进行日常管理与维护;2. 培养学生运用操作系统原理解决实际问题的能力,如分析系统性能、诊断故障、优化配置等;3. 提高学生的编程能力,使其能够编写简单的系统程序或脚本,实现特定功能。
情感态度价值观目标:1. 培养学生对操作系统的兴趣,激发学生学习计算机科学的热情;2. 培养学生的团队合作意识,使其在讨论、分析、解决问题的过程中学会倾听、交流、协作;3. 培养学生具备良好的信息素养,关注操作系统领域的最新发展,增强信息安全意识。
课程性质:本课程为计算机科学与技术专业(或相关领域)的必修课,具有较强的理论性和实践性。
学生特点:学生已具备一定的计算机基础知识,具有较强的学习兴趣和动手能力,但可能对操作系统原理的理解和应用尚有不足。
教学要求:注重理论与实践相结合,以案例驱动、任务导向的方式进行教学,注重培养学生的实际操作能力和问题解决能力。
通过本课程的学习,使学生能够掌握操作系统的基本原理,提高实际应用水平,为后续专业课程学习打下坚实基础。
二、教学内容1. 操作系统概述:介绍操作系统的基本概念、功能、类型,比较不同操作系统的特点,分析操作系统的发展趋势。
教材章节:第一章 操作系统概述2. 进程与线程管理:讲解进程与线程的概念、状态与转换,进程调度算法,同步与互斥,死锁与饥饿问题。
教材章节:第二章 进程管理3. 存储管理:介绍内存分配与回收策略,虚拟内存技术,页面置换算法,内存保护机制。
《操作系统》课程设计

《操作系统》课程设计一、课程目标知识目标:1. 让学生掌握操作系统的基本概念,包括进程、线程、内存管理、文件系统等核心知识;2. 了解操作系统的历史发展,掌握不同类型操作系统的特点及使用场景;3. 掌握操作系统的性能评价方法和常用的调度算法。
技能目标:1. 培养学生运用操作系统知识解决实际问题的能力,如分析系统性能瓶颈、优化系统资源分配等;2. 培养学生具备基本的操作系统编程能力,如进程创建、线程同步、文件操作等;3. 提高学生的团队协作能力和沟通能力,通过小组讨论和项目实践,学会共同解决问题。
情感态度价值观目标:1. 培养学生对操作系统学科的兴趣,激发学生的学习热情,使其形成积极向上的学习态度;2. 培养学生具备良好的信息素养,尊重知识产权,遵循法律法规;3. 培养学生的创新精神和批判性思维,敢于质疑、勇于探索,形成独立思考的能力。
课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,提高学生的系统分析和编程能力。
学生特点:学生具备一定的编程基础和计算机系统知识,具有较强的逻辑思维能力和动手实践能力。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和项目实践,帮助学生将所学知识内化为具体的学习成果。
在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。
二、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、功能、类型及特点,对应教材第一章内容。
- 操作系统的起源与发展- 操作系统的功能与类型- 操作系统的主要特点2. 进程与线程:讲解进程与线程的概念、状态、调度算法,对应教材第二章内容。
- 进程与线程的定义与区别- 进程状态与转换- 进程调度算法3. 内存管理:分析内存管理的基本原理、策略和技术,对应教材第三章内容。
- 内存分配与回收策略- 虚拟内存技术- 页面置换算法4. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。
操作系统设计与实现第三版课程设计

操作系统设计与实现第三版课程设计1. 课程背景介绍操作系统是计算机系统中重要的一部分,它是为了管理计算机硬件资源、提供程序运行环境和实现用户与计算机之间的交互等目的而开发的一种软件系统。
本课程将会深入地介绍操作系统设计与实现的理论与方法,着重介绍操作系统的设计思路、核心原理和实现技术,为学生提供扎实且广泛的计算机基础。
2. 课程目标通过本课程,学生将会达到下列目标: - 理解操作系统的基本概念、功能和结构; - 掌握操作系统中的进程管理、内存管理和文件系统等核心技术; - 熟悉操作系统的实现方法,掌握基本的操作系统编程技巧; - 能够设计并实现一个基本的操作系统原型。
3. 课程内容3.1 操作系统概述•操作系统的基本概念•操作系统的功能和结构•操作系统的分类3.2 进程管理•进程的概念和特征•进程的状态和状态转换•进程控制块的结构和功能•进程调度算法•进程同步与互斥•进程通信3.3 内存管理•内存的逻辑结构和物理结构•内存的分配与回收策略•虚拟内存的概念及实现•页面置换算法•内存保护机制3.4 文件系统•文件系统的基本组成•文件的物理结构和逻辑结构•文件的读取和写入•目录结构和文件命名•文件系统性能和安全性3.5 操作系统设计与实现•操作系统的启动过程•中断和异常处理•操作系统的核心模块和数据结构•设计与实现一个简单操作系统原型4. 课程考核方式本课程考核方式为: - 课堂讨论:10% - 实验项目:30% - 期末考试:60% 5. 课程参考书目•《现代操作系统》•《操作系统概念》•《深入理解计算机系统》6. 实验项目6.1 实验一:进程调度算法的实现在Linux内核中实现FCFS、SJF、RR、Priority等进程调度算法。
6.2 实验二:内存管理策略的实现在Linux内核中实现多种内存分配算法,如首次适应算法、最佳适应算法、最坏适应算法等。
6.3 实验三:文件系统的实现设计并实现一个简单的基于Unix文件系统的文件管理系统。
存储管理课程设计

存储管理课程设计一、课程目标知识目标:1. 让学生掌握存储管理的基本概念、原理和技术;2. 使学生了解不同类型的存储设备及其特点;3. 引导学生了解操作系统中存储管理的作用和功能;4. 帮助学生掌握内存分配、回收和置换策略;5. 让学生了解虚拟存储器的基本原理及其在操作系统中的应用。
技能目标:1. 培养学生运用存储管理知识分析和解决实际问题的能力;2. 提高学生设计和实现简单存储管理策略的能力;3. 培养学生使用操作系统提供的存储管理功能进行编程的能力;4. 培养学生查阅相关资料,自主学习存储管理新技术的能力。
情感态度价值观目标:1. 培养学生对计算机操作系统和存储管理的兴趣,激发学习热情;2. 培养学生具备良好的团队协作精神,共同探讨和解决存储管理问题;3. 引导学生认识到存储管理在计算机系统中的重要性,树立正确的资源管理意识;4. 培养学生严谨、务实的科学态度,对待存储管理技术的研究和应用。
课程性质:本课程为计算机科学与技术专业核心课程,旨在让学生深入了解存储管理的基本原理和实际应用。
学生特点:学生已具备一定的计算机基础知识和编程能力,具有一定的抽象思维能力,但可能对存储管理的具体实现和操作尚不熟悉。
教学要求:结合学生特点,课程设计应注重理论与实践相结合,通过案例分析和实际操作,帮助学生深入理解存储管理知识,提高解决实际问题的能力。
同时,注重培养学生的自主学习能力和团队协作精神。
在教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容1. 存储管理概述:介绍存储管理的基本概念、任务和目标,以及存储设备的分类和特点。
教材章节:第一章 存储管理概述2. 内存管理:讲解内存分配、回收和置换策略,包括固定分区、可变分区、分页、分段等内存管理技术。
教材章节:第二章 内存管理3. 虚拟存储器:介绍虚拟存储器的基本原理、实现技术和页替换算法,分析其在操作系统中的作用。
教材章节:第三章 虚拟存储器4. 存储保护与共享:阐述存储保护机制,以及存储共享在多道程序设计中的应用。
操作系统精髓与设计原理第八版课程设计

操作系统精髓与设计原理第八版课程设计背景操作系统是计算机科学中的核心领域,其作为系统软件,承担着管理硬件资源和提供高效服务的工作,是计算机系统中至关重要的部分。
操作系统的发展历程相当漫长,经过了多个版本和迭代,不断加入新的功能和技术,才能适应现代计算机的需求。
目的本次课程设计旨在通过学习操作系统精髓与设计原理第八版这本经典教材,深入了解操作系统的核心思想、设计原理和实现方法,掌握操作系统的实现技术,并通过实践操作系统内核的设计和实现,提高学生的操作系统设计和实现能力。
同时,通过本次课程的学习,可以很好的帮助学生理解其他系统软件和计算机领域中的相关知识。
内容课程大纲1.操作系统简介2.进程和线程3.内存管理4.文件系统5.设备管理和驱动程序6.操作系统安全和保护7.操作系统性能和优化8.操作系统的未来课程要求和评估方式1.每周阅读指定章节并提交阅读报告;2.完成多个实践项目,包括进程调度、内存管理、文件系统等模块的设计和实现; 3.参与小组讨论和课堂演示,并提交课堂小结和总结; 4.期末考试,重点测试学生对操作系统的理解和实现能力。
实践项目1.实现一个简单的操作系统内核;2.实现进程调度算法,如FCFS、RR等;3.实现一个简单的内存管理器,如按需分配、固定大小分配等;4.实现一个简单的文件系统,如FAT32、Ext2等;5.编写设备驱动程序,如键盘驱动、磁盘驱动等。
难点和解决方案1.操作系统内核的实现:需要深入了解操作系统的体系结构和内核实现技术,可以参考已有的一些简单的内核实现和设计原理,如minix、linux的内核实现等。
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ì)胰液 肠腺:分泌肠液
肝脏:最大的腺体,分泌胆汁。 胆汁无消化酶,有乳化脂肪 的
作用。
第七页,共二十三页。
操作系统课程设计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小时。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内存管理模拟实验目标:本实验的目的是从不同侧面了解Windows 2000/XP 对用户进程的虚拟内存空间的管理、分配方法。
同时需要了解跟踪程序的编写方法(与被跟踪程序保持同步,使用Windows提供的信号量)。
对Windows分配虚拟内存、改变内存状态,以及对物理内存(physical memory)和页面文件(pagefile)状态查询的API 函数的功能、参数限制、使用规则要进一步了解。
默认情况下,32 位Windows 2000/XP 上每个用户进程可以占有2GB 的私有地址空间,操作系统占有剩下的2GB。
Windows 2000/XP 在X86 体系结构上利用二级页表结构来实现虚拟地址向物理地址的变换。
一个32 位虚拟地址被解释为三个独立的分量——页目录索引、页表索引和字节索引——它们用于找出描述页面映射结构的索引。
页面大小及页表项的宽度决定了页目录和页表索引的宽度。
实验要求:使用Windows 2000/XP 的API 函数,编写一个包含两个线程的进程,一个线程用于模拟内存分配活动,一个线程用于跟踪第一个线程的内存行为,而且要求两个线程之间通过信号量实现同步。
模拟内存活动的线程可以从一个文件中读出要进行的内存操作,每个内存操作包括如下内容:时间:操作等待时间。
块数:分配内存的粒度。
操作:包括保留(reserve)一个区域、提交(commit)一个区域、释放(release)一个区域、回收(decommit)一个区域和加锁(lock)与解锁(unlock)一个区域,可以将这些操作编号存放于文件。
保留是指保留进程的虚拟地址空间,而不分配物理存储空间。
提交在内存中分配物理存储空间。
回收是指释放物理内存空间,但在虚拟地址空间仍然保留,它与提交相对应,即可以回收已经提交的内存块。
释放是指将物理存储和虚拟地址空间全部释放,它与保留(reserve)相对应,即可以释放已经保留的内存块。
大小:块的大小。
访问权限:共五种,分别为PAGE_READONLY,PAGE_READWRITE ,PAGE_EXECUTE,PAGE_EXECUTE_READ 和PAGE EXETUTE_READWRITE。
可以将这些权限编号存放于文件中跟踪线程将页面大小、已使用的地址范围、物理内存总量,以及虚拟内存总量等信息显示出来。
三、主要内容1.设计思路Windows 进程的虚拟地址空间中也有三种状态的页面:空闲页面、保留页面和提交页面。
空闲(Free)页面:空闲页面是指那些可以保留或提交的可用页面。
保留(Reserved)页面:保留页面是逻辑页面已分配但没有分配物理存储的页面。
设置这种状态的效果是可以保留一部分虚拟地址,这样,如果不预先释放这些地址,就不能被其他应用程序(如Malloc,LocalAlloc 等)的操作所使用。
试图读或写空闲页面或保留页面将导致页面出错异常。
保留页面可被释放或提交。
提交(Committed)页面:提交页面是物理存储(在内存中或磁盘上)已被分配的页面。
可对它加以保护,不许访问或允许只读访问,或允许读写访问。
提交也可以被回收以释放存储空间,从而变成保留页面。
在本实验中,首先创建工程makefile生成随机输入文件,其中包含对内存要求作的各种操作;然后创建工程MemoryAllocation,实现输入文件所要求的各项内存管理操作。
2.主要数据结构实现内存在管理的主要API函数有:GetSystemInfo函数功能:返回当前系统信息,存放入lpSystemInfo 中。
GlobalMemoryStatus函数功能:获得计算机系统中当前使用的物理内存和虚拟内存的信息。
使用GlobalMemoryStatus 函数可以判断应用程序能够分配多少与其它应用程序不冲突的内存空间。
但GlobalMemoryStatus 函数返回的信息是不稳定的,我们不能保证两次调用该函数都能返回到相同的信息。
VirtualQuery函数功能:提供有关调用进程虚拟窨中的页面信息.VirtualAlloc函数功能:在调用进程的虚拟地址中保留或提交页面。
除非设置了MEM_RESET 标志,否则被这个函数分配的内存单元被自动初始化为0。
VirtualAllocEX函数功能:使用该函数可以保留、提交或者保留和提交进程虚拟空间的页面的基址,否则返回NULL。
VirtualFree函数功能:可以释放或注销调用进程虚拟空间中的页面。
成功则返回一个非零值,否则返回零值。
VirtualFreeEx函数功能:该函数可以释放或注销指定进程虚拟空间中的页面。
VirtualFreeEx 函数和VirtualFree 函数区别是:VirtualFree 函数释放调用进程的地址空间,而VirtualFreeEx 函数可以释放任意指定的进程的地址空间。
如果函数调用成功则返回非零值,否则返回零值。
VirtualLock功能:该函数可以将进程虚拟空间中的内存加锁。
以确保后面的对该区域的存取操作不会失败。
成功则返回一个非零值,否则返回一个零值。
VirtualUnlock功能:该函数可以将进程虚拟空间指定范围内的页面解锁,从以系统在必要时可以将这些页面换出到页面文件中。
函数调用成功则返回一个非零值,否则返回零值。
3.主要代码段首先,定义两个结构体struct operation和struct trace,分别记录对内存的操作信息和跟踪每一次分配活动,并为之分别定义信号量allo和rac,以实现对内存操作的互斥。
具体实现用函数WaitForSingleObject (trac,INFINITE)和ReleaseSemaphore (allo,1,NULL)来实现。
函数DWORD Tracker (LPDWORD lpdwparm) 用以跟踪allocator线程的内存行为,并输出必要信息。
函数void Allocator () 用以模拟内存分配活动的线程。
4.主要代码结构1)make//文件生成程序# include <fstream.h># include <stdio.h># include <stdlib.h># include <time.h>struct operation{int time; //起始时间int block; //内存页数int oper; //操作int protection; //权限};int main (){FILE* file;("opfile","wb"); //"opfile"为二进制文件用以确定内存操作operation op;for (int j=0;j<6;j++) //0--保留,1--提交,2--锁,3--解锁,4--回收,5--释放for (int i=0;i<5;i++)//0-PAGE_READONLY;//1-PAGE_READWRITE;//2-PAGE_EXECUTE;//3-PAGE_EXECUTE_READ;//4-PAGE_EXECUTE_READWRITE;{op.time=rand()%1000; //随机生成等待时间op.block=rand()%5+1; //随机生成块大小op.oper=j;op.protection=i;fwrite (&op,sizeof(operation),1,file); //将生成的结构写入文件}return 0;}2) memory_op.cpp//从文件读入每次的操作,并将结果输出到out.txt文件中# include <stdio.h># include <stdlib.h># include <windows.h># include <iostream.h># include <fstream.h>struct operation{int time; //起始时间int block; //内存页数int oper; //操作int protection; //权限};struct trace //跟踪每一次分配活动的数据结构{LPVOID start; //起始地址long size; //分配的大小};HANDLE allo,trac; //信号量句柄DWORD Tracker (LPDWORD lpdwparm) //跟踪allocator线程的内存行为,并输出必要信息{ofstream outfile; //输出文件out ("out.txt");for (int i=0;i<=30;i++){WaitForSingleObject (trac,INFINITE); //等待allocator一次内存分配活动结束//打印内存状况和系统状况outfile<<i<<endl;//以下一段显示系统信息,每次执行操作后系统信息不变SYSTEM_INFO info; //系统消息GetSystemInfo (&info);outfile<<"dwActiveProcessorMask"<<"\t"<<info.dwActiveProcessorMask<<endl;outfile<<"dwAllocationGranularity"<<"\t"<<info.dwAllocationGranularity<<endl;outfile<<"dwNumberOfProcessors"<<"\t"<<info.dwNumberOfProcessors<<endl;outfile<<"dwOemId"<<"\t"<<info.dwOemId<<endl;outfile<<"dwPageSize"<<"\t"<<info.dwPageSize<<endl;outfile<<"dwProcessorType"<<"\t"<<info.dwProcessorType<<endl;outfile<<"lpMaximumApplicationAddress"<<"\t"<<info.lpMaximumApplicationAddress<<endl;outfile<<"lpMinimumapplicationAddress"<<"\t"<<info.lpMinimumApplicationAddress<<endl;outfile<<"wProcessorArchitecture"<<"\t"<<info.wProcessorArchitecture<<endl;outfile<<"wProcessorLevel"<<"\t"<<info.wProcessorLevel<<endl;outfile<<"wProcessorRevision"<<"\t"<<info.wProcessorRevision<<endl;outfile<<"wReserved"<<"\t"<<info.wReserved<<endl;outfile<<"************************************************************"<<endl;//内存状况MEMORYSTATUS status; //内存状态GlobalMemoryStatus (&status);outfile<<"dwAvailPageFile"<<"\t"<<status.dwAvailPageFile<<endl;outfile<<"dwAvailPhys"<<"\t"<<status.dwAvailPhys<<endl;outfile<<"dwAvailVirtual"<<"\t"<<status.dwAvailVirtual<<endl;outfile<<"dwLength"<<"\t"<<status.dwLength<<endl;outfile<<"dwMemoryLoad"<<"\t"<<status.dwMemoryLoad<<endl;outfile<<"dwTotalPageFile"<<"\t"<<status.dwTotalPageFile<<endl;outfile<<"dwTotalPhy"<<"\t"<<status.dwTotalPhys<<endl;outfile<<"dwTotalVirtual"<<"\t"<<status.dwTotalVirtual<<endl;outfile<<"**************************************************"<<endl;//以下一段显示内存基本信息,每次操作后内存基本信息不变MEMORY_BASIC_INFORMA TION mem; //内存基本信息VirtualQuery (info.lpMinimumApplicationAddress,&mem,sizeof(MEMORY_BASIC_INFORMA TION) ); outfile<<"AllocationBase"<<"\t"<<mem.AllocationBase<<endl;outfile<<"AllocationProtect"<<"\t"<<mem.AllocationProtect<<endl;outfile<<"BaseAddress"<<"\t"<<mem.BaseAddress<<endl;outfile<<"Protect"<<"\t"<<mem.Protect<<endl;outfile<<"RegionSize"<<"\t"<<mem.RegionSize<<endl;outfile<<"State"<<"\t"<<mem.State<<endl;outfile<<"Type"<<"\t"<<mem.Type<<endl;outfile<<"*********************************************************"<<endl;//释放信号量通知allocator可以执行下一次内存分配活动ReleaseSemaphore (allo,1,NULL);}return 0;}void Allocator () //模拟内存分配活动的线程{trace traceArray[5];int index=0;FILE* file;("opfile","rb");operation op;SYSTEM_INFO info;DWORD temp;GetSystemInfo (&info);for (int i=0;i<30;i++){WaitForSingleObject (allo,INFINITE); //等待tracker打印结束的信号量cout<<i<<":";fread (&op,sizeof(operation),1,file);Sleep (op.time); //执行时间,如果想在指定的时间可以取消注释GetSystemInfo (&info);switch (op.protection) //根据文件内容确定权限{case 0:{index=0;temp=PAGE_READONLY;break;}case 1:temp=PAGE_READWRITE;break;case 2:temp=PAGE_EXECUTE;break;case 3:temp=PAGE_EXECUTE_READ;break;case 4:temp=PAGE_EXECUTE_READWRITE;break;default:temp=PAGE_READONLY;}switch (op.oper){case 0: //保留一个区域{cout<<"reserve now "<<endl;traceArray[index].start=VirtualAlloc (NULL,op.block*info.dwPageSize,MEM_RESERVE,PAGE_NOACCESS);traceArray[index++].size=op.block*info.dwPageSize;cout<<"starting address:"<<traceArray[index-1].start<<"\t"<<"size:"<<traceArray[index-1].size<<endl;break;}case 1: //提交一个区域{cout<<"commit now "<<endl;traceArray[index].start=VirtualAlloc (traceArray[index].start,traceArray[index].size,MEM_COMMIT,temp);index++;cout<<"starting address:"<<traceArray[index-1].start<<"\t"<<"size:"<<traceArray[index-1].size<<endl;break;}case 2: //锁住一个区域{cout<<"lock now"<<endl;cout<<"starting address:"<<traceArray[index].start<<"size:"<<traceArray[index].size<<endl;if (!VirtualLock (traceArray[index].start,traceArray[index++].size) ) cout<<GetLastError ()<<endl; //函数返回错误号break;}case 3: //解锁一个区域{cout<<"unlock now"<<endl;cout<<"starting address:"<<traceArray[index].start<<"\t"<<"size:"<<traceArray[index].size<<endl;if (!VirtualUnlock (traceArray[index].start,traceArray[index++].size) ) cout<<GetLastError ()<<endl;break;}case 4: //回收一个区域{cout<<"decommit now"<<endl;cout<<"starting address:"<<traceArray[index].start<<"\t"<<"size:"<<traceArray[index].size<<endl;if (! VirtualFree (traceArray[index].start,traceArray[index++].size,MEM_DECOMMIT) )cout<<GetLastError ()<<endl;break;}case 5: //释放一个区域{cout<<"release now"<<endl;cout<<"starting address:"<<traceArray[index].start<<"\t"<<"size:"<<traceArray[index].size<<endl;if (!VirtualFree (traceArray[index++].start,0,MEM_RELEASE) )cout<<GetLastError ()<<endl;break;}default:cout<<"error"<<endl;}ReleaseSemaphore (trac,1,NULL); //释放信号量通知tracker可以打印信息}}int main (){DWORD dwThread;HANDLE handle[2]; //生成两个线程handle[0]=CreateThread (NULL,0,(LPTHREAD_START_ROUTINE) Tracker,NULL,0, &dwThread);handle[1]=CreateThread (NULL,0,(LPTHREAD_START_ROUTINE) Allocator,NULL,0, &dwThread);//生成两个信号量allo=CreateSemaphore (NULL,0,1,"allo");trac=CreateSemaphore (NULL,1,1,"trac");//等待线程执行结束后再退出WaitForMultipleObjects (2,handle,TRUE,INFINITE);return 0;}其他课题需要完成的子过程不限,可由学生自己掌握,具体要求可参考教材、实验指导书及其他相关书籍。