实验6 物理存储器与进程逻辑地址空间的管理
操作系统实验报告进程管理
操作系统实验报告进程管理操作系统实验报告:进程管理引言操作系统是计算机系统中的核心软件,负责管理计算机的硬件资源和提供用户与计算机之间的接口。
进程管理是操作系统的重要功能之一,它负责对计算机中运行的各个进程进行管理和调度,以保证系统的高效运行。
本实验报告将介绍进程管理的基本概念、原理和实验结果。
一、进程管理的基本概念1. 进程与线程进程是计算机中正在运行的程序的实例,它拥有独立的内存空间和执行环境。
线程是进程中的一个执行单元,多个线程可以共享同一个进程的资源。
进程和线程是操作系统中最基本的执行单位。
2. 进程状态进程在运行过程中会经历不同的状态,常见的进程状态包括就绪、运行和阻塞。
就绪状态表示进程已经准备好执行,但还没有得到处理器的分配;运行状态表示进程正在执行;阻塞状态表示进程由于某些原因无法继续执行,需要等待某些事件的发生。
3. 进程调度进程调度是操作系统中的一个重要任务,它决定了哪个进程应该获得处理器的使用权。
常见的调度算法包括先来先服务(FCFS)、最短作业优先(SJF)和时间片轮转等。
二、进程管理的原理1. 进程控制块(PCB)PCB是操作系统中用于管理进程的数据结构,它包含了进程的各种属性和状态信息,如进程标识符、程序计数器、寄存器值等。
通过PCB,操作系统可以对进程进行管理和控制。
2. 进程创建与撤销进程的创建是指操作系统根据用户的请求创建一个新的进程。
进程的撤销是指操作系统根据某种条件或用户的请求终止一个正在运行的进程。
进程的创建和撤销是操作系统中的基本操作之一。
3. 进程同步与通信多个进程之间可能需要进行同步和通信,以实现数据共享和协作。
常见的进程同步与通信机制包括互斥锁、信号量和管道等。
三、实验结果与分析在本次实验中,我们使用了一个简单的进程管理模拟程序,模拟了进程的创建、撤销和调度过程。
通过该程序,我们可以观察到不同调度算法对系统性能的影响。
实验结果显示,先来先服务(FCFS)调度算法在一些情况下可能导致长作业等待时间过长,影响系统的响应速度。
资源管理实验报告
一、实验目的通过本次实验,使学生掌握操作系统资源管理的基本原理和方法,加深对进程管理、内存管理、文件管理和I/O设备管理的理解,提高学生分析和解决实际问题的能力。
二、实验内容1. 进程管理(1)实验目的:掌握进程的基本概念、进程状态转换、进程调度算法和同步机制。
(2)实验步骤:① 创建多个进程,观察进程状态变化;② 实现进程调度算法(如先来先服务、轮转调度等);③ 实现进程同步机制(如信号量、互斥锁等)。
2. 内存管理(1)实验目的:掌握内存分配策略、内存回收策略和虚拟内存管理。
(2)实验步骤:① 实现固定分区分配策略;② 实现动态分区分配策略;③ 实现内存回收策略(如覆盖法、交换法等);④ 实现虚拟内存管理(如分页、分段等)。
3. 文件管理(1)实验目的:掌握文件系统基本概念、文件组织方式、目录结构和文件系统实现。
(2)实验步骤:① 实现文件系统基本操作(如创建、删除、读取、写入等);② 实现文件组织方式(如顺序文件、索引文件等);③ 实现目录结构(如单级目录、多级目录等);④ 实现文件系统实现(如FAT、NTFS等)。
4. I/O设备管理(1)实验目的:掌握I/O设备管理的基本概念、设备驱动程序、中断处理和I/O 调度。
(2)实验步骤:① 实现设备驱动程序;② 实现中断处理;③ 实现I/O调度(如先来先服务、轮转调度等)。
三、实验结果与分析1. 进程管理实验结果:通过实验,我们成功创建了多个进程,并观察到了进程状态的变化。
同时,我们实现了先来先服务、轮转调度等进程调度算法,并实现了信号量、互斥锁等进程同步机制。
2. 内存管理实验结果:通过实验,我们成功实现了固定分区、动态分区分配策略,以及内存回收策略。
同时,我们还实现了分页、分段等虚拟内存管理。
3. 文件管理实验结果:通过实验,我们成功实现了文件系统基本操作,如创建、删除、读取、写入等。
同时,我们实现了顺序文件、索引文件等文件组织方式,以及单级目录、多级目录等目录结构。
操作系统存储管理实验报告
操作系统存储管理实验报告一、实验目的操作系统的存储管理是计算机系统中非常重要的组成部分,它直接影响着系统的性能和资源利用率。
本次实验的目的在于深入理解操作系统中存储管理的基本原理和方法,通过实际操作和观察,掌握存储分配、回收、地址转换等关键技术,并对不同存储管理策略的性能进行分析和比较。
二、实验环境本次实验在 Windows 10 操作系统下进行,使用 Visual Studio 2019 作为编程环境,编程语言为 C++。
三、实验内容(一)固定分区存储管理1、原理固定分区存储管理将内存空间划分为若干个固定大小的分区,每个分区只能装入一道作业。
分区的大小可以相等,也可以不等。
2、实现创建一个固定大小的内存空间数组,模拟内存分区。
为每个分区设置状态标志(已分配或空闲),并实现作业的分配和回收算法。
3、实验结果与分析通过输入不同大小的作业请求,观察内存的分配和回收情况。
分析固定分区存储管理的优缺点,如内存利用率低、存在内部碎片等。
(二)可变分区存储管理1、原理可变分区存储管理根据作业的实际需求动态地划分内存空间,分区的大小和数量是可变的。
2、实现使用链表或数组来管理内存空间,记录每个分区的起始地址、大小和状态。
实现首次适应、最佳适应和最坏适应等分配算法,以及分区的合并和回收算法。
3、实验结果与分析比较不同分配算法的性能,如分配时间、内存利用率等。
观察内存碎片的产生和处理情况,分析可变分区存储管理的优缺点。
(三)页式存储管理1、原理页式存储管理将内存空间和作业都划分为固定大小的页,通过页表将逻辑地址转换为物理地址。
2、实现设计页表结构,实现逻辑地址到物理地址的转换算法。
模拟页面的调入和调出过程,处理缺页中断。
3、实验结果与分析测量页式存储管理的页面置换算法(如先进先出、最近最少使用等)的命中率,分析其对系统性能的影响。
探讨页大小的选择对存储管理的影响。
(四)段式存储管理1、原理段式存储管理将作业按照逻辑结构划分为若干个段,每个段有自己的名字和长度。
存储管理实验报告_6
昆明理工大学信息工程与自动化学院学生实验报告(2012 —2013 学年第二学期)一、实验目的存储管理的主要功能之一是合理地分配空间。
请求页式管理是一种常用的虚拟存储管理技术。
通过本次实验, 要求学生通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解, 通过请求页式存储管理中页面置换算法模拟设计, 了解虚拟存储技术的特点, 掌握请求页式存储管理的页面置换算法。
二、实验原理及基本技术路线图(方框原理图)用C或C++语言模拟实现请求式分页管理。
要求实现: 页表的数据结构、分页式内存空间的分配及回收(建议采用位图法)、地址重定位、页面置换算法(从FIFO,LRU,NRU中任选一种)。
int subareaSize[num]={8,12,16,32,24,16,64,128,40,64};//分区大小Process *pro=NULL;//保持进程信息int ProcessNum=0;//进程数目int applyProcessNum=0;//每次申请进程数目int maxApplyNum=0;//最大可申请数目int *applyIndex=NULL;//申请进程队列int totalApplyNum=0;//申请总数int *assignPointer=NULL;//已分配内存的进程队列int assignFlag=0;//分配索引, 表示已申请队列已分配的进程数int exeIndex;//执行的进程号Node *subareaNode=new Node[3];//分区回收时, 进程所在分区及其前, 后分区信息LinkList createLinkList(int n );//建立空闲分区链Node firstFit(LinkList &head,Process pro);//首次适应算法Node nestFit(LinkList &head,Process pro,Node flag);//循环适应算法Node bestFit(LinkList &head,Process pro);//最佳适应算法Node worstFit(LinkList &head,Process pro);//最坏适应算法Node assign(LinkList &head,int orderIndex,int index,Node flagNode);//一次分区分配int assignMemory(LinkList &head);//内存分配void insertNode(LinkList &head,Node q,int index);//插入节点Node deleteNode(LinkList &head,int index);//删除节点int display(LinkList &head);//打印分区分配情况int lowAttemper(int *excursionPointer);//低级调度int findSubarea(LinkList &head,int index);//回收内存int creatProcess();//创建进程Process* randomCreatPro(int n);//随机产生进程下面是各种方法简述:(1) 最优替换算法, 即OPT算法。
操作系统实验-存储管理
操作系统实验-存储管理操作系统实验-存储管理1、引言1.1 概述在操作系统中,存储管理是一个关键的任务。
它负责将程序和数据加载到内存中,管理内存的分配和回收,并确保不同进程之间的内存互不干扰。
本实验旨在深入了解并实践存储管理的相关概念和算法。
1.2 目的本实验的目的是让学生通过实际操作,了解存储管理的基本原理和常用算法,包括分页、分段和虚拟内存等。
通过实验,学生将学会如何实现内存分配和回收,以及处理内存碎片等问题。
1.3 实验环境- 操作系统:Windows、Linux、MacOS等- 编程语言:C、C++等2、实验步骤2.1 实验准备- 安装相应的开发环境和工具- 创建一个空白的项目文件夹,用于存放实验代码和相关文件2.2 实验一、分页存储管理- 理解分页存储管理的概念和原理- 实现一个简单的分页存储管理系统- 设计测试用例,验证分页存储管理的正确性和有效性2.3 实验二、分段存储管理- 理解分段存储管理的概念和原理- 实现一个简单的分段存储管理系统- 设计测试用例,验证分段存储管理的正确性和有效性2.4 实验三、虚拟存储管理- 理解虚拟存储管理的概念和原理- 实现一个简单的虚拟存储管理系统- 设计测试用例,验证虚拟存储管理的正确性和有效性3、实验结果分析3.1 分页存储管理结果分析- 分析分页存储管理系统的性能优缺点- 比较不同页面大小对系统性能的影响3.2 分段存储管理结果分析- 分析分段存储管理系统的性能优缺点- 比较不同段大小对系统性能的影响3.3 虚拟存储管理结果分析- 分析虚拟存储管理系统的性能优缺点- 比较不同页面置换算法对系统性能的影响4、总结与展望4.1 实验总结- 总结本次实验的收获和体会- 分析实验中遇到的问题和解决方法4.2 实验展望- 探讨存储管理领域的未来发展方向- 提出对本实验的改进意见和建议附件:无法律名词及注释:- 存储管理:操作系统中负责管理内存的任务,包括内存分配、回收和管理等功能。
进程的管理实验报告
一、实验目的1. 理解进程的基本概念和进程状态转换过程。
2. 掌握进程创建、进程同步和进程通信的方法。
3. 了解进程调度算法的基本原理和实现方法。
4. 通过实验加深对进程管理的理解,提高操作系统实践能力。
二、实验环境1. 操作系统:Linux2. 编程语言:C/C++3. 开发工具:GCC三、实验内容1. 进程创建与状态转换(1)使用fork()函数创建一个子进程,并观察父进程和子进程的进程ID。
(2)使用exec()函数替换子进程的映像,实现进程的创建。
(3)观察进程状态转换过程,如创建、运行、阻塞、就绪、终止等。
2. 进程同步(1)使用互斥锁(mutex)实现进程的互斥访问共享资源。
(2)使用信号量(semaphore)实现进程的同步,如生产者-消费者问题。
(3)观察进程同步的效果,确保进程安全执行。
3. 进程通信(1)使用管道(pipe)实现进程间的单向通信。
(2)使用消息队列(message queue)实现进程间的双向通信。
(3)使用共享内存(shared memory)实现进程间的快速通信。
(4)观察进程通信的效果,确保数据正确传递。
(1)实现基于优先级的进程调度算法,如先来先服务(FCFS)和最高优先级优先(HPF)。
(2)实现基于时间片的轮转调度算法(RR)。
(3)观察进程调度算法的效果,分析不同算法的优缺点。
四、实验步骤1. 编写程序实现进程创建与状态转换,使用fork()和exec()函数。
2. 编写程序实现进程同步,使用互斥锁和信号量。
3. 编写程序实现进程通信,使用管道、消息队列和共享内存。
4. 编写程序实现进程调度,使用优先级调度和时间片轮转调度。
5. 编译并运行程序,观察实验结果,分析实验现象。
五、实验结果与分析1. 进程创建与状态转换通过实验,我们成功创建了父进程和子进程,并观察到进程ID的变化。
在进程创建过程中,父进程的进程ID与子进程的进程ID不同,说明子进程是独立于父进程的实体。
操作系统实验六-虚拟存储器实验报告
实验六虚拟存储器一、实验内容模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。
二、实验目的在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。
用这种办法扩充的主存储器称为虚拟存储器。
通过本实验帮助同学理解在分页式存储管理中怎样实现虚拟存储器。
三、实验题目本实验有三道题目,其中第一题必做,第二,三题中可任选一个。
第一题:模拟分页式存储管理中硬件的地址转换和产生缺页中断。
[提示](1)分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。
为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:其中,标志----用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。
主存块号----用来表示已经装入主存的页所占的块号。
在磁盘上的位置----用来指出作业副本的每一页被存放在磁盘上的位置。
(2)作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式:绝对地址=块号×块长+单元号计算出欲访问的主存单元地址。
如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。
若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。
(3)设计一个“地址转换”程序来模拟硬件的地址转换工作。
当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。
当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。
《操作系统》存储管理实验报告
《操作系统》存储管理实验报告操作系统是计算机系统中最基础、最核心的软件之一,负责管理计算机硬件资源和提供资源的分配与调度。
而存储管理是操作系统中的重要组成部分,它负责管理计算机的内存,包括内存的分配、回收、保护等操作。
本文将针对存储管理进行实验,并撰写实验报告。
本次实验主要涉及以下内容:内存的分配与回收、内存的保护。
实验过程中,我首先根据操作系统的要求,设计了相应的算法用于内存的分配与回收。
并通过编写程序,验证了算法的正确性。
随后,我进一步研究了内存的保护机制,通过设置访问权限位和访问控制表,实现了对内存的合理保护。
在内存的分配与回收方面,我设计了一种简单的算法,首次适应算法。
具体实现如下:首先,将内存分为若干个块,每个块的大小为固定值。
当需要分配内存时,首先遍历内存块列表,找到第一个大小合适的块,将其分配给进程。
当进程终止时,将其占用的内存块回收,以便后续进程使用。
通过编写程序进行测试,结果表明该算法能够正确地进行内存的分配与回收。
在内存的保护方面,我采用了访问权限位和访问控制表的方式进行。
具体实现如下:首先,为每个进程分配一组访问权限位,记录了该进程能够访问的内存区域。
同时,设置一个访问控制表,记录了每个内存块的权限。
当进程访问一些内存块时,首先检查该进程的访问权限位,再与访问控制表中的权限进行比较,以确定该进程是否有权限访问该内存块。
通过编写程序进行测试,证明了该机制能够有效地保护内存。
总结来说,本次实验主要涉及了操作系统中的存储管理部分,包括内存的分配与回收、内存的保护。
通过设计算法和编写程序,我成功地实现了这些功能,并验证了其正确性。
通过本次实验,我进一步加深了对操作系统存储管理的理解,提高了编程和设计的能力。
北科大操作系统实验报告
操作系统实验报告学院:计算机与通信工程学院专业:计算机与科学技术班级:学号:姓名:指导教师:王成耀成绩:2015年 1 月4 日实验一线程的状态和转换(5分)1 实验目的和要求目的:熟悉线程的状态及其转换,理解线程状态转换与线程调度的关系。
要求:(1)跟踪调试EOS线程在各种状态间的转换过程,分析EOS中线程状态及其转换的相关源代码;(2)修改EOS的源代码,为线程增加挂起状态。
2 完成的实验内容2.1 EOS线程状态转换过程的跟踪与源代码分析(分析EOS中线程状态及其转换的核心源代码,说明EOS定义的线程状态以及状态转换的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等)//使 Zero 状态或者运行状态的线程转入就绪状态VOIDPspReadyThread(PTHREAD Thread){ASSERT(NULL != Thread);ASSERT(Zero == Thread->State || Running == Thread->State);// 将线程插入其优先级对应的就绪队列的队尾,并设置就绪位图中对应的位。
// 最后将线程的状态修改为就绪状态。
ListInsertTail(&PspReadyListHeads[Thread->Priority], &Thread->StateListEntry);BIT_SET(PspReadyBitmap, Thread->Priority);Thread->State = Ready;}//取消线程的就绪状态,使线程转入 Zero 状态VOIDPspUnreadyThread(PTHREAD Thread){ASSERT(NULL != Thread && Ready == Thread->State);// 将线程从所在的就绪队列中取出,如果线程优先级对应的就绪队列变为空,// 则清除就绪位图中对应的位。
操作系统进程管理实验报告
操作系统进程管理实验报告一、引言在现代计算机科学中,操作系统的进程管理是确保系统高效运行的关键环节。
本实验旨在通过观察和分析操作系统的进程管理行为,深入理解进程的创建、运行和终止过程,以及操作系统如何对进程进行调度和资源分配。
二、实验目标1、理解进程的基本概念、进程状态及转换。
2、掌握进程的创建、终止和调度方法。
3、观察和分析进程在运行过程中的资源消耗和调度行为。
4、分析操作系统对进程的资源分配和调度策略对系统性能的影响。
三、实验环境与工具本实验在Linux操作系统上进行,使用GNU/Linux环境下的工具进行进程的创建、监控和调度。
四、实验步骤与记录1、创建进程:使用shell命令“fork”创建一个新的进程。
记录下父进程和子进程的PID,以及它们在内存中的状态。
2、进程状态观察:使用“ps”命令查看当前运行进程的状态,包括进程的PID、运行时间、CPU使用率等。
同时,使用“top”命令实时监控系统的CPU、内存等资源的使用情况。
3、进程调度:在“crontab”中设置定时任务,观察系统如何根据预设的调度策略分配CPU资源给各个进程。
4、资源分配:通过修改进程的优先级(使用“nice”命令),观察系统如何调整资源分配策略。
5、终止进程:使用“kill”命令终止一个进程,并观察系统如何处理该进程占用的资源。
五、实验结果与分析1、创建进程:通过“fork”系统调用,成功创建了一个新的进程,并获取了父进程和子进程的PID。
在内存中,父进程和子进程的状态分别为“running”和“ready”。
2、进程状态观察:使用“ps”命令可以看到父进程和子进程的状态均为“running”,同时显示了它们的CPU使用率和运行时间等信息。
通过“top”命令,可以实时监控系统的CPU、内存等资源的使用情况,为进一步分析提供了数据支持。
3、进程调度:在“crontab”中设置定时任务后,系统会根据预设的调度策略以及各个进程的运行状态,动态地分配CPU资源给各个进程。
进程管理实验报告
进程管理实验报告进程管理实验报告引言:进程管理是操作系统中的重要概念,它负责调度和控制计算机系统中的各个进程,确保它们能够有序地执行。
本实验旨在通过实际操作和观察,深入了解进程管理的原理和方法,并通过实验结果分析其影响因素和优化策略。
实验一:进程创建与终止在本实验中,我们首先进行了进程的创建和终止实验。
通过编写简单的程序,我们能够观察到进程的创建和终止过程,并了解到进程控制块(PCB)在其中的作用。
实验结果显示,当一个进程被创建时,操作系统会为其分配一个唯一的进程ID,并为其分配必要的资源,如内存空间、文件描述符等。
同时,操作系统还会为该进程创建一个PCB,用于存储该进程的相关信息,如进程状态、程序计数器等。
当我们手动终止一个进程时,操作系统会释放该进程所占用的资源,并将其PCB从系统中删除。
这样,其他进程便可以继续使用这些资源,提高系统的效率和资源利用率。
实验二:进程调度算法进程调度算法是决定进程执行顺序的重要因素。
在本实验中,我们通过模拟不同的进程调度算法,比较它们在不同场景下的表现和效果。
我们选择了三种常见的进程调度算法:先来先服务(FCFS)、最短作业优先(SJF)和轮转调度(RR)。
通过设置不同的进程执行时间和优先级,我们观察到不同调度算法对系统吞吐量和响应时间的影响。
实验结果显示,FCFS算法适用于执行时间较短的进程,能够保证公平性,但在执行时间较长的进程出现时,会导致等待时间过长,影响系统的响应速度。
SJF 算法在执行时间较长的进程时表现出色,但对于执行时间较短的进程,可能会导致饥饿现象。
RR算法能够在一定程度上平衡各个进程的执行时间,但对于执行时间过长的进程,仍然会影响系统的响应速度。
实验三:进程同步与互斥在多进程环境中,进程之间的同步和互斥是必不可少的。
在本实验中,我们通过模拟进程间的竞争和互斥关系,观察进程同步与互斥的实现方式和效果。
我们选择了信号量机制和互斥锁机制作为实现进程同步和互斥的方法。
计算机系统基础实验
计算机系统基础实验计算机系统基础实验是计算机科学与技术专业中的一门重要课程,旨在帮助学生深入理解计算机硬件和操作系统的工作原理,培养学生的实际操作能力。
以下是一个关于计算机系统基础实验的报告,详细介绍了关于进程管理和内存管理的实验过程和结果。
实验题目:进程管理和内存管理一、实验目的:1.熟悉进程的创建、运行和撤销过程;2.理解进程之间的关系和调度算法;3.掌握内存管理的基本原理和常用方法。
二、实验环境:1. 操作系统:Windows 10;2. 虚拟机软件:VMware Workstation 16 Pro;3.编程语言:C/C++。
三、实验内容和过程:实验一:进程的创建、运行和撤销1.实验步骤:(1)使用C/C++编写一个创建进程的程序,包括进程的标识符、优先级和资源需求等;(2)编译并运行程序,查看进程的创建情况;(3)编写一个进程调度算法程序,选择一个合适的调度算法,并设置相应的调度策略;(4)编译并运行进程调度算法程序,观察进程的执行情况;(5)撤销一个进程,并查看撤销后的进程状态。
2.实验结果:(1)成功创建了一个进程,并查看到相关信息;(2)进程调度算法程序成功运行,并根据所设置的策略进行调度;(3)成功撤销一个进程,并查看到撤销后的进程状态。
实验二:内存管理1.实验步骤:(1)使用C/C++编写一个内存分配算法程序,包括内存的分配和回收等功能;(2)编译并运行程序,查看内存的分配情况;(3)使用一个合适的页面置换算法,编写一个程序来模拟分页机制的内存管理;(4)编译并运行分页程序,观察页面置换的情况;(5)释放内存,并查看内存的回收情况。
2.实验结果:(1)成功分配了内存,并查看到相关信息;(2)分页程序成功运行,并根据所选择的页面置换算法进行置换;(3)成功回收内存,并查看到内存的回收情况。
四、实验总结:通过这次实验,我们深入了解了进程的创建、运行和撤销过程,以及进程之间的关系和调度算法。
存储管理概述
存储管理概述存储管理是指计算机系统中负责处理存储器资源的一组软件或硬件程序。
存储管理旨在协调计算机系统中的各种硬件和软件组件,以有效地管理和分配存储资源,以及确保数据和程序的完整性和安全性。
存储管理还负责确保计算机系统中的存储器能够在高负载时有效地运行,以及处理各种存储器故障。
存储管理通常由操作系统提供,其主要任务是为进程分配和管理内存、磁盘空间、网络存储等资源。
存储管理涉及到从物理存储器到逻辑文件的各个级别,因此需要准确和高效地跟踪数据的位置、类型和用途。
存储管理的主要任务包括:1.内存管理:内存管理负责为进程分配内存空间,并确保各个进程的内存空间不会相互干扰。
内存管理还负责将进程和物理存储器之间的逻辑地址映射到物理地址。
2.磁盘管理:磁盘管理负责处理磁盘上的文件和目录,并将它们存储在适当的位置。
磁盘管理还负责跟踪磁盘上的空间使用情况,并确保每个文件都有足够的空间存储。
3.文件管理:文件管理涉及到文件的创建、读取、写入、删除等操作。
该功能还包括文件的保护和权限设置、文件共享和协作等。
4.虚拟存储:虚拟存储是一种负责将进程的逻辑地址映射到物理地址的技术。
它通过将未使用的部分交换到磁盘上来扩展可用内存空间。
5.备份和恢复:备份和恢复负责在计算机系统上创建数据备份,并在需要时将数据恢复到计算机系统中。
这是确保数据完整性和安全性的关键部分。
6.缓存管理:缓存管理负责将频繁访问的数据保留在内存中,以避免频繁读写磁盘,从而提高系统的性能和响应速度。
存储管理是计算机系统中一个至关重要的组成部分,它的任务是确保计算机系统中的存储器资源能够被有效地管理和分配,并且能够提供高效的存储器服务。
存储管理的原理一种常见的存储管理原理是通过虚拟存储器实现内存扩展。
虚拟存储器通过将进程的逻辑地址映射到物理地址,使得进程拥有了更大的地址空间,同时可以节约物理内存。
虚拟存储器还通过页面替换算法,将部分未使用的页面换出到磁盘中,从而释放内存空间,使系统可以在更多的进程中进行加载和运行。
存储器管理实验报告
一、实验目的1. 理解存储器管理的概念和作用。
2. 掌握虚拟存储器的实现原理。
3. 熟悉存储器分配策略和页面置换算法。
4. 提高动手实践能力,加深对存储器管理知识的理解。
二、实验环境1. 操作系统:Linux2. 编程语言:C/C++3. 开发环境:GCC编译器三、实验内容1. 虚拟存储器实现原理(1)分页式存储管理:将内存划分为固定大小的页,进程的逻辑地址空间也划分为相应的页。
内存与外存之间通过页表进行映射,实现虚拟存储器。
(2)页表管理:包括页表建立、修改和删除等操作。
(3)页面置换算法:包括FIFO、LRU、LRU时钟等算法。
2. 存储器分配策略(1)固定分区分配:将内存划分为若干个固定大小的分区,每个分区只能分配给一个进程。
(2)可变分区分配:根据进程需求动态分配内存,分为首次适应、最佳适应和最坏适应等策略。
(3)分页存储管理:将内存划分为固定大小的页,进程的逻辑地址空间也划分为相应的页,通过页表进行映射。
3. 页面置换算法(1)FIFO算法:根据进程进入内存的顺序进行页面置换,最早进入内存的页面将被淘汰。
(2)LRU算法:淘汰最近最少使用的页面。
(3)LRU时钟算法:结合LRU算法和FIFO算法的优点,通过一个时钟指针实现页面置换。
四、实验步骤1. 编写程序实现虚拟存储器的基本功能,包括分页式存储管理、页表管理、页面置换算法等。
2. 编写测试程序,模拟进程在虚拟存储器中的运行过程,观察不同页面置换算法的效果。
3. 分析实验结果,比较不同页面置换算法的性能差异。
五、实验结果与分析1. 实验结果通过模拟实验,验证了虚拟存储器的基本功能,包括分页式存储管理、页表管理、页面置换算法等。
实验结果显示,不同页面置换算法对系统性能的影响较大。
2. 实验分析(1)FIFO算法:实现简单,但可能导致频繁的页面置换,影响系统性能。
(2)LRU算法:性能较好,但实现复杂,需要额外的硬件支持。
(3)LRU时钟算法:结合LRU算法和FIFO算法的优点,在性能和实现复杂度之间取得平衡。
操作系统中存储器管理的主要功能
操作系统中存储器管理的主要功能存储器管理是操作系统中的核心组成部分之一,它主要负责管理计算机中的存储器资源,以便有效地分配和利用存储空间,并且为不同的程序和进程提供安全的访问。
在操作系统中,存储器管理的主要功能包括内存分配、内存保护、内存扩充、内存回收和换页操作。
内存分配内存分配是指操作系统根据进程的需要以及存储器的可用空间,为进程分配合适的内存空间。
在操作系统启动时,它会将系统的内存划分为多个连续的内存块,每个内存块可以用来存储一个进程或一部分进程。
内存分配可以通过两种方式进行:静态分配和动态分配。
静态分配是在程序编译或装载时进行的,操作系统会为每个进程分配固定大小的内存空间。
这种方式简单、高效,但是会导致内存的浪费和碎片化的问题。
动态分配则是在程序运行时进行的,操作系统根据进程的需要动态地分配内存空间,使得进程能够根据实际需求来使用存储空间。
内存保护内存保护是操作系统中存储器管理的重要功能之一,它主要通过权限控制来保护进程的内存空间。
每个进程被分配的内存空间应该是相互独立的,进程之间不能相互干扰或篡改彼此的数据。
操作系统通过给每个进程设置访问权限,限制进程对其他进程内存空间的访问,从而保护了每个进程的数据安全。
为了实现内存保护,操作系统使用地址映射、地址转换和访问控制等方法。
地址映射将逻辑地址转换为物理地址,以便进程能够正确访问内存。
地址转换是通过分页或分段的方式来实现的,将逻辑地址划分为不同的页或段,并映射到实际的物理地址上。
访问控制则是通过设置访问权限位来限制进程对内存空间的访问。
内存扩充随着计算机系统的发展,存储器的容量需求也越来越大。
内存扩充是操作系统中存储器管理的重要任务之一,它可以通过两种方式实现:覆盖和交换。
覆盖是指将进程的一部分数据从内存中移出,然后将新的数据加载到内存中。
这种方式适用于内存空间有限的情况下,可以有效地利用存储资源。
但是,由于数据的移动会导致额外的开销和延迟,因此需要谨慎使用。
操作系统原理实验题
《操作系统原理》实验考核方式与基本要求:1)按要求设计相应的模拟系统并上机调试运行2)写出详细的实验报告,实验报告要求如下:(1)实验题目。
(2)程序中使用的数据结构及符号说明。
(3)流程图。
(4)打印一份源程序并附上注释。
(5)打印程序运行时的初值和运行结果。
实验报告可参考附录A中的规范进行编写。
基本要求: 4人为一小组,采取课内上机和业余上机相结合的方式进行,在规定时间内每个小组以实验报告形式上交实验(设计)结果并上机演示说明。
㈠进程管理㈡模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。
㈢银行家算法㈣模拟分页式存储管理中硬件的地址转换和产生缺页中断㈤用先进先出(FIFO)页面调度算法处理缺页中断㈥用最近最少用(LRU)页面调度算法处理缺页中断㈦设计一个按优先数调度算法实现处理器调度的进程㈧设计一个按时间片轮转法实现处理器调度的程序㈨模拟实现一个简单的固定(或可变)分区存储管理系统㈩模拟实现单通路I/O系统中的设备分配程序实验一进程管理1.实验内容至少要有:创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间通信等功能。
㈠进程管理2.实验提示PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程所占用的CPU 时间,进程的状态,当前队列指针等。
可根据实验的不同,PCB结构的内容可以作适当的增删。
例:实验运行结果********************************************* 进程演示系统*********************************************1.创建新的进程2.查看运行进程3.换出某个进程4.杀死运行进程5.进程之间通信6.退出系统********************************************请选择(1~6)然后根据你选择的不同,出现不同的结果。
实验二同步机构1、实验内容㈡第一题:模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。
物理存储器与进程逻辑地址空间的管理
07物理存储器与进程逻辑地址空间的管理(共21页)-本页仅作为预览文档封面,使用时请删除本页-《操作系统》实验报告实验题目物理存储器与进程逻辑地址空间的管理学生姓名 lee 学号专业班级指导教师院系名称计算机与信息学院2017 年 10 月 30 日实验7 物理存储器与进程逻辑地址空间的管理1.实验目的与要求通过查看物理存储器的使用情况,并练习分配和回收物理内存,从而掌握物理存储器的管理方法。
通过查看进程逻辑地址空间的使用情况,并练习分配和回收虚拟内存,从而掌握进程逻辑地址空间的管理方法。
2.实验原理阅读本书第6章。
重点阅读第节和第节,了解物理存储器的管理方式和进程逻辑地址空间的管理方式。
3.实验内容准备实验按照下面的步骤准备实验:1. 启动OS Lab。
2. 新建一个EOS Kernel项目。
阅读控制台命令“pm”相关的源代码,并查看其执行的结果阅读ke/文件中第1059行的ConsoleCmdPhysicalMemory函数,学习“pm”命令是如何统计并输出物理存储器信息的。
在阅读的过程中需要注意下面几点:在统计输出物理存储器信息之前要关闭中断,之后要打开中断,这样可以防止在命令执行的过程中有其它线程分配或者释放物理页。
全局变量MiTotalPageFrameCount保存了物理页的总数。
每个物理页的大小是4KB,由宏PAGE_SIZE定义。
全局变量MiZeroedPageCount和MiFreePageCount分别保存了零页和空闲页的数量。
计算已用物理页数量的方法是:物理页总数减去零页数量,再减去空闲页数量。
按照下面的步骤执行控制台命令“pm”,查看物理存储器的信息:1. 按F7生成在本实验中创建的EOS Kernel项目。
2. 按F5启动调试。
3. 待EOS启动完毕,在EOS控制台中输入命令“pm”后按回车。
观察命令执行的结果,如图1所示,可以了解当前物理存储器的使用情况。
图1:“pm”命令的执行结果分配物理页和释放物理页接下来,在pm命令函数中添加分配物理页和释放物理页的代码,单步调试管理物理页的方法。
什么是逻辑地址和物理地址
什么是逻辑地址和物理地址有网友问到小编:什么是逻辑地址和物理地址?怎么转换?针对此问题,店铺为大家分享了具体的操作方法,希望对你有帮助!什么是逻辑地址是指由程式产生的和段相关的偏移地址部分。
例如,你在进行C 语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。
只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地址(假定代码段、数据段如果完全相同)。
应用程式员仅需和逻辑地址打交道,而分段和分页机制对你来说是完全透明的,仅由系统编程人员涉及。
应用程式员虽然自己能直接操作内存,那也只能在操作系统给你分配的内存段操作。
什么是物理地址用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。
所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。
也许错误的理解更利于形而上的抽像。
虚拟内存(virtual memory) 这是对整个内存(不要与机器上插那条对上号)的抽像描述。
它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数组中0x08000000 - 1那个地址元素;之所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即虚拟内存(virtual memory)。
进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。
存储中物理总量和逻辑总量的关系
存储中物理总量和逻辑总量的关系随着科技的不断发展,数据存储的需求也在不断增加。
在大型数据中心、企业级服务器和个人电脑中,存储设备成为了必不可少的组成部分。
而在存储设备中,物理总量和逻辑总量是两个重要的概念,它们之间存在着密切的关系。
一、物理总量和逻辑总量的概念1. 物理总量:物理总量指的是存储设备真实的存储容量,也就是硬件本身能够存储的数据大小。
硬盘的物理总量是指硬盘实际能够存储的数据大小,通常以GB或TB作为单位进行衡量。
2. 逻辑总量:逻辑总量是指操作系统或文件系统能够识别和管理的存储容量,也就是用户可以使用的存储空间。
逻辑总量通常要小于物理总量,因为一部分空间会被操作系统或文件系统占用。
二、物理总量和逻辑总量的关系1. 物理总量限制了逻辑总量:在实际应用中,物理总量是限制逻辑总量的重要因素。
如果一个存储设备的物理总量只有100GB,那么无论操作系统如何管理,其逻辑总量也不可能超过100GB。
2. 逻辑总量受文件系统格式和文件大小限制:逻辑总量的大小还受文件系统格式和单个文件大小的限制。
不同的文件系统格式对存储空间的利用率不同,而且有的格式支持更大的单个文件大小。
在选择存储设备时,需要考虑适合的文件系统格式。
三、如何合理使用物理总量和逻辑总量1. 合理规划物理总量和逻辑总量:在进行存储设备采购和部署时,需要根据实际需求合理规划物理总量和逻辑总量。
考虑到未来的扩展需求和数据增长率,可以预留一定的物理总量作为未来的扩展空间。
2. 注意文件系统的选择和管理:合理选择文件系统对于提高逻辑总量的利用率是非常重要的。
一些现代的文件系统能够更好地支持大容量存储和大文件的存储,因此在选择和管理文件系统时需要考虑这些因素。
3. 灵活分配存储空间:在实际使用中,需要灵活地分配存储空间,根据不同的应用需求和数据访问模式来进行分配。
这样可以更好地利用逻辑总量,避免浪费存储空间。
四、结语物理总量和逻辑总量是存储设备中非常重要的概念,它们之间相互制约、相互影响。
物理存储和逻辑存储的关系
物理存储和逻辑存储的关系物理存储和逻辑存储是计算机存储系统中两个重要的概念,它们之间存在着密切的关系。
物理存储是指实际的硬件设备,如硬盘驱动器、固态硬盘、内存条等,这些设备用来存储数据和程序。
逻辑存储则是指对数据和程序的逻辑组织和管理方式,它与实际的硬件设备无关,而是涉及到数据的组织、访问和管理的逻辑结构。
首先,物理存储和逻辑存储之间的关系在于逻辑存储是建立在物理存储之上的。
逻辑存储是通过对物理存储进行抽象和管理,使得数据可以按照逻辑结构进行组织和访问。
例如,在计算机中,文件系统是一种逻辑存储的组织方式,它将数据以文件的形式存储在物理存储设备上,并提供了对这些文件的逻辑访问方式。
其次,逻辑存储的设计和管理是建立在对物理存储设备特性的理解和利用之上的。
逻辑存储需要考虑到物理存储设备的性能、容量、可靠性等特点,以便更好地利用物理存储设备的资源。
例如,虚拟内存是一种逻辑存储的管理方式,它通过将部分数据存储在物理存储设备上,以扩展计算机的内存容量,提高系统的性能。
另外,物理存储和逻辑存储之间的关系还体现在数据的存储和访问过程中。
逻辑存储通过文件系统、数据库管理系统等软件来管理数据的逻辑组织和访问方式,而这些数据最终是存储在物理存储设备上的。
因此,逻辑存储需要与物理存储设备进行交互,将数据存储在物理存储设备上,并通过物理存储设备提供的接口来访问和操作数据。
综上所述,物理存储和逻辑存储之间是密切相关的。
逻辑存储是建立在物理存储之上的,它通过对物理存储设备的抽象和管理,实现了对数据的逻辑组织和访问。
同时,逻辑存储的设计和管理也需要考虑到物理存储设备的特性,以便更好地利用物理存储设备的资源。
最终,数据的存储和访问过程也体现了物理存储和逻辑存储之间的密切关系。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验6 物理存储器与进程逻辑地址空间的管理实验性质:验证建议学时:2 学时一、实验目的通过查看物理存储器的使用情况,并练习分配和回收物理内存,从而掌握物理存储器的管理方法。
通过查看进程逻辑地址空间的使用情况,并练习分配和回收虚拟内存,从而掌握进程逻辑地址空间的管理方法。
二、实验环境Windows XP、OS Lab三、实验内容3.1 准备实验按照下面的步骤准备实验:1. 启动OS Lab 。
2. 新建一个 EOS Kernel 项目。
3.2 阅读控制台命令“pm”相关的源代码,并查看其执行的结果全局变量MiTotalPageFrameCount 保存了物理页的总数。
每个物理页的大小是 4KB ,由宏PAGE_SIZE 定义。
全局变量 MiZeroedPageCount 和MiFreePageCount 分别保存了零页和空闲页的数量。
计算已用物理页数量的方法是:物理页总数减去零页数量,再减去空闲页数量。
按照下面的步骤执行控制台命令“pm”,查看物理存储器的信息:1. 按F7生成在本实验 3.1 中创建的 EOS Kernel 项目。
2. 按F5启动调试。
3. 待EOS 启动完毕,在 EOS 控制台中输入命令“pm”后按回车。
观察命令执行的结果,如图 15-1 所示,可以了解当前物理存储器的使用情况。
图15-1:“pm”命令的执行结果3.3 分配物理页和释放物理页接下来,在pm 命令函数中添加分配物理页和释放物理页的代码,单步调试管理物理页的方法。
按照下面的步骤修改 pm 命令的源代码:1. 使用OS Lab 打开本实验文件夹中的 pm .c文件(将文件拖动到 OS Lab 窗口中释放即可打开)。
此文件中有一个修改后的 ConsoleCmdPhysicalMemory 函数,主要是在原有代码的后面增加了分配物理页和释放物理页的代码。
2. 使用pm.c 文件中ConsoleCmdPhysicalMemory 函数的函数体替换 ke/sysproc.c 文件中ConsoleCmdPhysicalMemory(1057行)函数的函数体。
3. 按F7生成修改后的 EOS Kernel 项目。
4. 按F5启动调试。
5. 待EOS 启动完毕,在 EOS 控制台中输入命令“pm”后按回车。
观察命令执行的结果,如图 15-2 所示,尝试说明分配物理页或者释放物理页后物理存储器的变化情况。
图15-2:分配物理页或者释放物理页后物理存储器的变化情况。
按照下面的步骤调试分配物理页和释放物理页的过程:1. 结束之前的调试。
2. 在ke/sysproc.c 文件的ConsoleCmdPhysicalMemory 函数中,在调用MiAllocateAnyPages 函数的代码行(第1099 行)添加一个断点,在调用MiFreePages 函数的代码行(第1111 行)添加一个断点。
3. 按F5启动调试。
4. 待EOS 启动完毕,在 EOS 控制台中输入命令“pm”后按回车。
5. pm命令开始执行后,会在调用 MiAllocateAnyPages 函数的代码行处中断,按F11 调试进入MiAllocateAnyPages 函数。
6. 按F10 单步调试 MiAllocateAnyPages 函数的执行过程,尝试回答下面的问题:(1) 本次分配的物理页的数量是多少?分配的物理页的页框号是多少?(2) 物理页是从空闲页链表中分配的?还是从零页链表中分配的?(3) 哪一行语句减少了空闲页的数量?哪一行语句将刚刚分配的物理页由空闲状态修改为忙状态?继续调试释放物理页的过程:1. 按F5继续执行,会在调用 MiFreePages 函数的代码行处中断,按 F11 调试进入MiFreePages 函数。
2. 按F10 单步调试 MiFreePages 函数的执行过程,尝试回答下面的问题:(1) 本次释放的物理页的数量是多少?释放的物理页的页框号是多少?释放的物理页是之前分配的物理页吗?(2) 释放的物理页是被放入了空闲页链表中?还是零页链表中?3.4 阅读控制台命令“vm”相关的源代码,并查看其执行的结果阅读ke/sysproc.c 文件中第 959行的 ConsoleCmdVM 函数,学习“vm”命令是如何统计并输出进程的虚拟地址描述符信息的。
在阅读的过程中需要注意下面几点:与“pm”命令输出的是整个系统的物理存储器的使用情况不同,“vm”命令输出的是某个进程的虚拟地址描述符信息,所以“vm”命令使用了一个参数——进程 ID ,用来指定一个进程。
这个进程既可以是系统进程,也可以是用户进程。
操作系统的进程有 4G 的虚拟地址空间,但并不是所有的虚拟地址空间都使用虚拟地址描述符来管理,有一些地址空间是静态的,还有一些地址空间由其他的动态方式来管理(例如系统内存池)。
进程4G 虚拟地址空间中由虚拟地址描述符所管理空间的低地址和高地址是固定的,在这段地址空间中,如果有虚拟页被占用,就会使用虚拟地址描述符来标识,并放入链表中管理。
按照下面的步骤执行控制台命令“vm”,查看系统进程的虚拟地址描述符信息:1. 按F5启动调试。
2. 待EOS 启动完毕,在 EOS 控制台中输入命令“pt”后按回车。
“pt”命令可以输出当前系统中的进程列表,其中系统进程的 ID为1。
3. 在EOS 控制台中输入命令“vm 1”后按回车。
观察命令执行的结果,如图 15-3 所示,可以了解系统进程的虚拟地址描述符信息。
图15-3:使用“vm”命令查看系统进程虚拟地址描述符的结果系统进程中由虚拟地址描述符所管理的虚拟页只会分配给进程的句柄表(句柄表占用一个虚拟页)和线程的堆栈(堆栈占用两个虚拟页)。
结合之前“pt”命令输出的进程和线程信息可知,当前系统中只有 1个系统进程以及 10个系统线程,所以在图15-3 中,1 号描述符所包含的一个虚拟页即为系统进程的句柄表,而 2 到11号这10个描述符所分别包含的两个虚拟页即为 10个系统线程的堆栈。
可以按照下面的步骤执行控制台命令“vm ”,查看当创建了一个应用程序进程后,系统进程和应用程序进程中虚拟地址描述符的信息:1. 在“项目管理器”窗口中双击 Floppy.img 文件,使用 FloppyImageEditor 工具打开此软盘镜像。
2. 将本实验文件夹中的 LoopApp.exe 文件添加到软盘镜像的根目录中(将 LoopApp.exe 文件拖动到FloppyImageEditor 窗口中释放即可)。
EOS 应用程序 LoopApp.exe 的源代码可以参考本实验文件夹中的 LoopApp.c文件。
3. 点击FloppyImageEditor 工具栏上的保存按钮,关闭该工具。
4. 按F5启动调试。
5. 待EOS 启动完毕,在 EOS 控制台中输入命令“A:\LoopApp.exe”后按回车。
此时就使用 EOS 应用程序文件 LoopApp.exe 创建了一个应用程序进程,由于此进程执行了一个死循环,所以此进程不会结束执行,除非关闭虚拟机。
6. 此时按Ctrl+F2 切换到“Console-2”,然后输入命令“pt”后按回车。
输出的信息如图 15-4 所示。
其中 ID 为31的进程就是应用程序进程,ID为33的线程就是应用程序进程的主线程。
图15-4:使用pt命令查看有应用程序运行时进程和线程的信息。
7. 输入命令“vm 1 ”后按回车,可以查看系统进程中虚拟地址描述符的信息。
输出的信息如图 15-5所示。
与图 15-3 比较可知,3 号描述符所包含的一个虚拟页即为应用程序进程的句柄表,13号描述符所包含的两个虚拟页即为应用程序进程主线程的堆栈。
图15-5:创建了一个应用程序进程后,系统进程中虚拟地址描述符的信息。
8. 输入命令“vm 31 ”后按回车,可以查看应用程序进程中虚拟地址描述符的信息。
输出的信息如图15-6 所示。
图15-6:使用“vm”命令查看应用程序进程虚拟地址描述符的结果。
在进程的 4G 逻辑地址空间中,应用程序进程可以自行管理低 2G 的用户空间。
从图15-6 中的信息可以得知,低 2G的用户空间又被分为了三部分:-0x0000FFFF 由16个虚拟页构成的64KB静态空间,用于捕捉对空指针的非法访问。
-0x7FFEFFFF 由虚拟地址描述符管理的动态空间,用于存储应用程序进程的代码和数据。
图15-6 显示应用程序进程的代码和数据占用了此空间中的 5 个虚拟页,并且是用从应用程序的基址 0x00400000 起始的。
-0x7FFFFFFF由16个虚拟页构成的 64KB 静态空间,用于捕捉对空指针的非法访问。
为了加深对进程逻辑地址空间的理解,可以在控制台 1 至控制台 7 中都执行命令“A:\LoopApp.exe”,从而让应用程序创建 7 个进程,然后在控制台 8 中执行“pt”、“ vm”等命令,查看系统进程和应用程序进程的虚拟地址描述符。
3.5 在系统进程中分配虚拟页和释放虚拟页接下来,在vm 命令函数中添加分配虚拟页和释放虚拟页的代码,单步调试管理虚拟页的方法。
首先,按照下面的步骤修改 vm 命令的源代码:1. 使用OS Lab 打开本实验文件夹中的 vm .c文件(将文件拖动到 OS Lab 窗口中释放即可打开)。
此文件中有一个修改后的 ConsoleCmdVM 函数,主要是在原有代码的后面增加了分配虚拟页和释放物理页的代码。
2. 使用vm.c 文件中ConsoleCmdVM 函数的函数体替换ke/sysproc.c 文件中ConsoleCmdVM 函数的函数体。
3. 按F7生成修改后的 EOS Kernel 项目。
4. 按F5启动调试。
5. 待EOS 启动完毕,在 EOS 控制台中输入命令“vm 1”后按回车。
命令执行的结果会同时转储在“输出”窗口中,内容如图 15-7 所示。
尝试说明分配虚拟页或者释放虚拟页后虚拟地址描述符以及物理存储器的变化情况。
图15-7:分配虚拟页或者释放虚拟页后虚拟地址描述符及物理存储器的变化情况。
按照下面的步骤调试分配虚拟页和释放虚拟页的过程:1. 在ke/sysproc.c 文件的 ConsoleCmdVM 函数中,在调用 MmAllocateVirtualMemory 函数的代码行添加一个断点,在调用 MmFreeVirtualMemory 函数的代码行添加一个断点。
2. 按F5启动调试。
3. 待EOS 启动完毕,在 EOS 控制台中输入命令“vm 1”后按回车。
4. vm命令开始执行后,会在调用 MmAllocateVirtualMemory 函数的代码行处中断。
此时要注意参数BaseAddress 和RegionSize 初始化的值。