北大操作系统高级课程-陈向群作业-虚拟内存管理实习报告

合集下载

操作系统实验实验报告 虚拟内存

操作系统实验实验报告  虚拟内存

操作系统实验实验报告虚拟内存一、实验目的本次操作系统实验的目的是深入理解虚拟内存的概念、原理和实现机制,通过实际操作和观察,掌握虚拟内存的相关技术,包括页面置换算法、内存分配策略等,并分析其对系统性能的影响。

二、实验环境操作系统:Windows 10 专业版开发工具:Visual Studio 2019编程语言:C++三、实验原理1、虚拟内存的概念虚拟内存是一种计算机系统内存管理技术,它使得应用程序认为自己拥有连续的可用内存(一个连续完整的地址空间),而实际上,这些内存可能是被分散存储在物理内存和外部存储设备(如硬盘)中的。

虚拟内存通过将程序使用的内存地址映射到物理内存地址,实现了内存的按需分配和管理。

2、页面置换算法当物理内存不足时,操作系统需要选择一些页面(内存中的固定大小的块)换出到外部存储设备,以腾出空间给新的页面。

常见的页面置换算法有先进先出(FIFO)算法、最近最少使用(LRU)算法、时钟(Clock)算法等。

3、内存分配策略操作系统在分配内存时,需要考虑如何有效地利用有限的物理内存资源。

常见的内存分配策略有连续分配、分页分配和分段分配等。

四、实验内容与步骤1、实现简单的虚拟内存系统使用 C++编写一个简单的虚拟内存模拟程序,包括内存页面的管理、地址映射、页面置换等功能。

2、测试不同的页面置换算法在虚拟内存系统中,分别实现 FIFO、LRU 和 Clock 算法,并对相同的访问序列进行测试,比较它们的页面置换次数和缺页率。

3、分析内存分配策略的影响分别采用连续分配、分页分配和分段分配策略,对不同大小和类型的程序进行内存分配,观察系统的性能(如内存利用率、执行时间等)。

具体步骤如下:(1)定义内存页面的结构,包括页面号、标志位(是否在内存中、是否被修改等)等。

(2)实现地址映射函数,将虚拟地址转换为物理地址。

(3)编写页面置换算法的函数,根据不同的算法选择要置换的页面。

(4)创建测试用例,生成随机的访问序列,对不同的算法和分配策略进行测试。

虚拟内存的设计实训报告

虚拟内存的设计实训报告

一、实训背景随着计算机技术的发展,计算机系统的内存容量需求越来越大。

然而,由于物理内存(RAM)的成本较高,且受限于物理空间的限制,很难满足用户对大内存的需求。

为了解决这个问题,虚拟内存技术应运而生。

虚拟内存是一种将部分硬盘空间虚拟化为内存的技术,可以有效扩充计算机系统的内存容量,提高系统的运行效率。

本实训旨在设计并实现一个虚拟内存系统,通过对虚拟内存的设计、实现和测试,加深对虚拟内存原理和技术的理解。

二、实训目标1. 理解虚拟内存的基本原理和设计方法;2. 掌握虚拟内存的硬件和软件实现技术;3. 设计并实现一个简单的虚拟内存系统;4. 对虚拟内存系统进行测试和分析,评估其性能。

三、实训内容1. 虚拟内存基本原理虚拟内存的核心思想是将计算机的物理内存与硬盘空间进行映射,使得计算机在访问内存时,可以将部分数据存储到硬盘上,从而实现内存的扩充。

虚拟内存的主要技术包括:(1)页式存储管理:将内存划分为固定大小的页,硬盘空间也划分为同样大小的块(或称为页框)。

当程序需要访问内存时,虚拟内存管理系统会将所需的页加载到物理内存中。

(2)置换算法:当物理内存不足时,虚拟内存管理系统需要选择一部分页从内存中移出,并将它们存储到硬盘上。

常用的置换算法有FIFO、LRU、OPT等。

(3)地址映射:虚拟内存管理系统需要将虚拟地址转换为物理地址,以便计算机可以访问到正确的内存位置。

2. 虚拟内存硬件实现虚拟内存的硬件实现主要包括以下部分:(1)内存控制器:负责控制物理内存的读写操作。

(2)地址转换逻辑:将虚拟地址转换为物理地址。

(3)页面缓存:用于缓存频繁访问的页,以提高系统性能。

3. 虚拟内存软件实现虚拟内存的软件实现主要包括以下部分:(1)虚拟内存管理系统:负责管理虚拟内存的分配、回收和页面置换等操作。

(2)页面置换算法实现:根据不同的置换算法实现相应的页面置换逻辑。

(3)地址映射表:用于存储虚拟地址与物理地址的映射关系。

实习五虚拟存储器实验报告

实习五虚拟存储器实验报告

实习五虚拟存储器实验报告一、实验目的本次虚拟存储器实验旨在深入理解虚拟存储器的工作原理,掌握页面置换算法的实现和性能评估,以及观察虚拟存储器对系统性能的影响。

二、实验环境本次实验在装有 Windows 操作系统的计算机上进行,使用了专门的虚拟存储器实验软件,包括模拟系统内存和磁盘存储的工具。

三、实验原理1、虚拟存储器的概念虚拟存储器是一种通过硬件和软件的结合,为用户提供一个比实际物理内存大得多的逻辑地址空间的技术。

它允许程序在运行时,仅将部分数据和代码装入内存,而其余部分则存储在磁盘上,当需要时再进行调入和调出。

2、页面置换算法常见的页面置换算法有先进先出(FIFO)算法、最近最少使用(LRU)算法和最佳置换(OPT)算法等。

这些算法用于决定当内存空间不足时,哪些页面应该被替换出去,以腾出空间给新的页面。

四、实验内容与步骤(一)实验内容1、实现 FIFO 页面置换算法,并对其性能进行测试。

2、实现 LRU 页面置换算法,并对其性能进行比较。

3、观察不同页面访问序列和内存大小对页面置换算法性能的影响。

(二)实验步骤1、启动虚拟存储器实验软件,设置系统内存大小和页面大小。

2、输入页面访问序列,分别运行 FIFO 和 LRU 页面置换算法。

3、记录每次页面置换的情况,包括被置换的页面、缺页次数等。

4、改变页面访问序列和内存大小,重复上述实验过程。

五、实验结果与分析(一)FIFO 页面置换算法结果当使用 FIFO 算法时,对于给定的页面访问序列,随着内存大小的增加,缺页次数逐渐减少。

但在某些情况下,由于先进先出的特性,可能会出现将即将使用的页面置换出去的情况,导致缺页率较高。

(二)LRU 页面置换算法结果LRU 算法在大多数情况下表现优于 FIFO 算法。

因为它基于页面的最近使用情况进行置换,更能保留近期可能会再次使用的页面,从而减少缺页次数。

(三)不同页面访问序列的影响不同的页面访问序列对页面置换算法的性能有显著影响。

虚拟内存管理——操作系统课程大作业虚拟内存管理报告

虚拟内存管理——操作系统课程大作业虚拟内存管理报告

2011年操作系统大作业1.虚拟内存管理实验。

在Linux环境下编写一个内核模块,分别实现如下几个函数:●static void mtest_dump_vma_list(void):依次列出当前进程所占用的虚拟内存空间各段的读、写或执行权限。

●static void mtest_find_vma(unsigned long addr):查找出虚拟地址addr所在的vma,并通过printk打印该段的起始地址、终止地址和段标志等信息。

●static void mtest_find_page(unsigned long addr):找到虚拟地址addr对应的物理地址并打印。

为了测试和使用以上函数,需要在内核模块的初始化函数中创建一个名为mtest的/proc 文件。

mtest文件绑定的写函数mtest_write允许用户程序写入一串字符串:●如果写入的字符串是listvma则调用函数mtest_dump_vma_list(void);●如果写入的字符串是findvma0xffffffff则调用函数mtest_find_vma(0xffffffff),字符串的后几个字符是传递给函数的参数;●如果写入的字符串是findpage0xffffffff则调用函数mtest_find_page(0xffffffff),同样字符串的后几个字符是参数。

实验要求:为了测试以上模块的正确性,需要编写一个小型的test应用程序,它打开/proc/mtest文件,并向其中写入字符串调用模块中的相关函数并给出相应的反馈信息。

知识储备:●虚拟存储空间管理的相关数据结构vm_area_struct和mm_struct●/proc文件系统的相关知识●内核模块的相关知识实验思路及过程:相关知识储备:1.可以使用/proc文件系统和pmap工具查看给定进程的内存空间和其中所包含的内存区域mmap描述的该地址空间中的全部内存区域。

内核使用内存描述符结构表示进程的地址空间,由结构体mm_struct结构体表示,定义在linux/sched.h中,同时linux操作系统采用虚拟内存技术,所有进程之间以虚拟方式共享内存。

北大操作系统高级课程陈向群作业线程调度实习报告

北大操作系统高级课程陈向群作业线程调度实习报告

北大操作系统高级课程陈向群作业线程调度实习报告一、引言本报告旨在对北大操作系统高级课程中陈向群老师布置的线程调度实习进行总结和反思。

通过本次实习,我深入了解了操作系统中线程调度的原理和技术,并在实践中掌握了相关算法和方法。

二、实习内容1. 实践环境本次实践使用了一台基于Linux系统的虚拟机。

在虚拟机中,我编写了一个简单的多线程应用程序,并通过调整线程调度参数来观察不同调度策略下的线程行为与性能。

2. 理论知识回顾在开始实践之前,我对线程调度的理论知识进行了回顾。

线程调度是操作系统中相当重要的一项功能,其主要目的是合理地分配CPU时间片给不同的线程,以实现最大化系统的性能和资源利用率。

3. 实践过程我首先编写了一个简单的多线程应用程序,其中包含了几个线程并发执行的任务。

然后,我通过修改代码中的调度策略和参数来观察线程的执行顺序和总运行时间。

4. 实践结果和分析通过对不同线程调度策略的尝试,我观察到了不同线程调度策略下线程行为和系统性能的差异。

比如,在FIFO调度策略下,线程按照它们创建的先后次序执行,而在RR(Round-Robin)调度策略下,线程按照时间片的轮转方式进行执行。

5. 总结与反思通过实践,我深刻理解了线程调度的重要性和影响因素。

合理的线程调度策略能够最大化地发挥系统性能,提高计算资源的利用率。

在实践过程中,我也遇到了一些问题和困难,如如何选择最合适的线程调度策略以及如何调整合适的调度参数。

这些问题需要深入研究和探索。

三、实践总结通过这次线程调度实习,我收获了很多。

首先,我深入了解了操作系统中线程调度的原理和技术。

其次,我掌握了一些常见的线程调度算法和方法,并能够通过实践来判断和选择适当的调度策略。

此外,我还掌握了一些调整调度策略和参数的技巧,并能够通过观察线程行为和系统性能的变化来验证和分析调度效果。

然而,这次实习也暴露出了我一些不足之处。

首先,我对于一些现代高级线程调度算法和技术还不够了解,需要进一步学习和研究。

虚拟存储管理实验报告

虚拟存储管理实验报告

虚拟存储管理实验报告实验概述虚拟存储管理实验是操作系统课程中的一项重要实验,旨在通过模拟内存管理中的分页机制和页面置换算法,深入理解操作系统中的虚拟内存管理技术。

本实验主要包括以下几个关键点:- 模拟内存的分页机制- 实现页面置换算法- 分析不同页面置换算法的性能指标实验环境本次实验基于C语言和Linux操作系统进行实现,使用gcc编译器进行编译和调试。

实验过程及实现细节在本次实验中,我们实现了一个简单的虚拟内存系统,主要包括以下几个模块:页面管理、页面分配、页面置换和性能分析。

下面对每个模块的实现细节进行详细描述。

页面管理页面管理模块主要负责管理虚拟内存和物理内存之间的映射关系。

我们采用了分页机制进行管理,将虚拟内存和物理内存划分为固定大小的页面。

页面的大小由实验设置为4KB。

页面分配页面分配模块负责分配物理内存空间给进程使用。

我们使用一个位图作为物理内存管理的数据结构,记录每个页面的使用情况。

在每次页面分配时,我们会查找位图中第一个空闲的页面,并将其分配给进程。

页面置换页面置换模块是虚拟存储管理中的核心算法,主要用于解决内存中页面不足时的页面置换问题。

本次实验中我们实现了两种常用的页面置换算法:FIFO(先进先出)和LRU(最近最少使用)算法。

FIFO算法是一种简单的页面置换算法,它总是选择最早被加载到物理内存的页面进行置换。

LRU算法是一种基于页面访问历史的算法,它总是选择最长时间未被访问的页面进行置换。

性能分析性能分析模块主要用于评估不同的页面置换算法的性能指标。

我们使用了缺页率(Page Fault Rate)和命中率(Hit Rate)作为评价指标。

缺页率表示物理内存中的页面不能满足进程请求的比例,命中率表示进程请求的页面已经在物理内存中的比例。

实验结果为了评估不同的页面置换算法的性能,在实验过程中,我们通过模拟进程的页面访问序列,统计页面置换次数、缺页率和命中率等指标。

以一个包含100个页面访问请求的序列为例,我们分别使用FIFO算法和LRU 算法进行页面置换。

操作系统实习报告

操作系统实习报告

操作系统实习报告在大学的学习生涯中,操作系统作为计算机科学的核心课程,为我们揭示了计算机系统运行的神秘面纱。

为了更深入地理解操作系统的原理和机制,我参加了一次操作系统的实习。

这次实习不仅让我将理论知识应用到实际中,更让我对计算机系统的运行有了全新的认识。

实习的开始,我们首先对操作系统的基本概念进行了回顾。

操作系统是管理计算机硬件与软件资源的程序,同时也是计算机系统的内核与基石。

它负责诸如进程管理、内存管理、文件系统管理、设备管理等重要任务。

这些概念在课堂上虽然已经学习过,但在实际操作中,才真正感受到它们的重要性和复杂性。

在进程管理方面,我们通过编程实现了进程的创建、调度和终止。

进程是操作系统中最基本的执行单元,理解其工作原理对于优化系统性能至关重要。

通过实际编写代码,我学会了如何使用系统调用创建新的进程,以及如何设置进程的优先级和调度策略。

例如,在多任务环境中,合理地分配 CPU 时间片可以确保各个进程都能得到及时的处理,从而提高系统的整体响应速度。

内存管理是操作系统的另一个关键领域。

我们学习了如何实现内存的分配和回收,以及虚拟内存的概念。

在实际编程中,使用动态内存分配函数(如malloc 和free)时,需要特别注意内存泄漏和碎片问题。

虚拟内存技术使得计算机能够运行比物理内存更大的程序,通过将暂时不使用的内存页面交换到磁盘上,有效地扩展了内存空间。

然而,这也带来了页面置换算法的挑战,如何选择最优的页面进行置换,以减少磁盘 I/O 操作,提高系统性能,是一个需要深入思考的问题。

文件系统是操作系统用于组织和管理数据的重要机制。

我们实现了简单的文件创建、读写和删除操作。

了解文件的存储结构、目录的组织方式以及文件权限的设置,对于保证数据的安全性和完整性非常重要。

同时,文件系统的缓存机制和磁盘调度算法也会影响文件操作的性能,需要在设计和实现中进行优化。

设备管理方面,我们学习了如何与外部设备进行通信和控制。

实习五-虚拟存储器实验报告

实习五-虚拟存储器实验报告

实习五-虚拟存储器实验报告实习五虚拟存储器实验报告一、实验目的本次虚拟存储器实验的主要目的是深入理解虚拟存储器的工作原理和机制,通过实际操作和观察,掌握虚拟存储器的地址转换、页面置换算法等关键概念,以及它们对系统性能的影响。

二、实验环境本次实验在_____操作系统下进行,使用了_____开发工具和_____模拟软件。

三、实验原理虚拟存储器是一种将主存和辅存结合起来使用的技术,它为用户提供了一个比实际物理内存大得多的逻辑地址空间。

虚拟存储器的实现基于分页或分段机制,将逻辑地址空间划分为固定大小的页或段,然后通过页表或段表将逻辑地址映射到物理地址。

在虚拟存储器中,当访问的页面不在主存中时,会发生页面缺失,此时需要从辅存中将所需页面调入主存。

页面置换算法则用于决定在主存已满时,将哪些页面换出主存,以腾出空间调入新的页面。

常见的页面置换算法有先进先出(FIFO)算法、最近最少使用(LRU)算法和最佳置换(OPT)算法等。

四、实验内容与步骤1、初始化实验环境启动操作系统和模拟软件。

设置相关参数,如页面大小、主存容量、辅存容量等。

2、生成访问序列使用随机数生成器或特定的模式生成一系列的逻辑地址访问序列。

3、地址转换根据页表,将逻辑地址转换为物理地址。

记录地址转换的过程和结果,包括是否发生页面缺失。

4、页面置换算法实现分别实现 FIFO、LRU 和 OPT 页面置换算法。

在发生页面缺失时,根据相应的算法选择换出的页面。

5、性能评估统计不同页面置换算法下的页面缺失次数、缺页率等性能指标。

分析不同算法对系统性能的影响。

五、实验结果与分析1、地址转换结果展示部分逻辑地址转换为物理地址的示例,说明转换的过程和正确性。

2、页面置换算法的性能比较给出 FIFO、LRU 和 OPT 算法在相同访问序列下的页面缺失次数和缺页率。

绘制图表直观地比较不同算法的性能差异。

例如,以下是三种算法在某一特定访问序列下的性能数据:|算法|页面缺失次数|缺页率||||||FIFO|_____|_____%||LRU|_____|_____%||OPT|_____|_____%|从上述数据可以看出,OPT 算法的性能最优,其页面缺失次数和缺页率最低;FIFO 算法的性能最差,页面缺失次数和缺页率相对较高;LRU 算法的性能介于两者之间。

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

虚拟内存管理实习报告目录内容一:总体概述 (3)内容二:任务完成情况 (3)任务完成列表(Y/N) (3)具体Exercise的完成情况 (3)内容三:遇到的困难以及解决方法 (11)内容四:收获及感想 (11)内容五:对课程的意见和建议 (11)内容六:参考文献 (11)内容一:总体概述本次lab主要是针对操作系统内存管理的学习,内存管理主要有固定分区、可变分区、页式和段式管理。

现代操作系统主要采用页式内存管理,它把用户程序地址空间划分成大小相等的部分,称为页。

内存空间按页的大小划分为大小相等的区域,称为内存块(物理页面,页框,页帧)。

以页为单位进行分配,逻辑上相邻的页,物理上不一定相邻。

虚拟内存的基本思想:每个程序拥有自己的地址空间,这个空间被分割成多个块,每一块称作一页或者页面,每一页有连续的地址范围。

这些页被映射到物理内存,但并不是所有页都必须在内存中才能运行。

当程序引用到一部分在物理内存中的地址空间时,由硬件立即执行必要的映射。

当程序引导到一部分不在物理内存中德的地址空间时,由操作系统负责将缺失的部分装入屋里内存并重新执行失效的指令。

内容二:任务完成情况任务完成列表(Y/N)Exercise1 Exercise2 Exercise3 Exercise4 Exercise5 Exercise6 Exercise7 Challange 完成情况Y Y Y Y Y Y N N具体Exercise的完成情况一、TLB异常处理目前,Nachos系统对于内存的管理是基于软件模拟的TLB机制。

其工作原理、异常处理、替换算法等方面,与分页式内存管理非常相像。

Exercise 1 源代码阅读Ø阅读code/userprog/,着重理解nachos执行用户程序的过程,以及该过程中与内存管理相关的要点。

Ø阅读code/machine目录下的machine.h(cc),translate.h(cc)文件和code/userprog目录下的exception.h(cc),理解当前Nachos系统所采用的TLB机制和地址转换机制。

解答:中有2个主要的方法,分别是StartProcess和ConsoleTest,它们的作用是给用户进程分配内存空间并且执行用户进程和测试控制台输入。

StartProcess方法中首先通过OpenFile *executable = fileSystem->Open(filename);打开文件,然后通过space = new AddrSpace(executable);currentThread->space = space;为文件分配内存空间并且把内存空间给当前进程。

然后通过space->InitRegisters();初始化寄存器的值,继而通过space->RestoreState();加载页表寄存器,然后就可以开始运行用户程序了。

对于machine.h中定义了页的大小为128,页的数量为32,内存大小为128*32,快表的大小为4。

Exception.h 和 是专门用来检测和处理异常信息的类,原始的nachos 只给出了syscall 异常的处理方式。

实验要做的就是在这里添加对缺页异常的处理工作。

下面的translate 函数将会根据情况返回PageFaulteException,这样便会进入到异常处理函数当中。

Machine.h 和 这个类定义和实现了对机器本身的抽象,run 方法运行一条指令,两套读写函数分别是读写内存和读写寄存器。

RaiseException 函数是抛出一个异常信息。

另外,nachos 的Mainmemory是一个char 类型的数组。

还有一些页大小,主存大小,快表大小也再这里进行了声明。

构造函数对寄存器和内存内容进行初始化。

读写寄存器状态等方法也是在这里。

Translate.h 和 是tlb 和页表声明的类型定义。

这个类中,最为重要的方法是translate 方法,这个方法将用户的虚拟地址addr 转化为物理地址。

Exercise 2 TLB MISS异常处理修改code/userprog目录下中的ExceptionHandler函数,使得Nachos系统可以对TLB异常进行处理(TLB异常时,Nachos系统会抛出PageFaultException,详见code/machine/)。

解答:在中Translate方法中判断了是否使用了TLB表,如果使用了TLB表则循环查找TLB页表,如果没有找到一个TLB表项,使得表项信息有效,表项所存储的虚页号与所传入的VPN号一致,则会返回PageFaultException异常,表明此时TLB发生错误,所要查找的虚拟地址并没有在TLB的页表内。

在中的ExceptionHandler方法中增加如下代码段,判断是否PageFaultException异常,获得BadVaddrReg寄存器内所存储的当出错陷入(Exception)时用户程序的逻辑地址。

Exercise 3 置换算法为TLB机制实现至少两种置换算法,通过比较不同算法的置换次数可比较算法的优劣。

解答:这里实现LRU算法和FIFO算法。

修改TranslationEntry对象添加属性用来记录页面的上次使用时间(LRU算法寻找最早未使用页面时使用)和创建时间(FIFO方法寻找最早创建页面时使用)。

在TranslationEntry初始化时添加对新增属性的初始化动作。

修改Machine构造函数修改Addrspace构造函数在TLB命中时更新TranslationEntry属性lastUseTime。

修改中的Translate方法。

修改ExceptionHandler对PageFaultException的处理逻辑,当在出现PageFaultException 异常时,系统获得出错程序的虚拟地址,并尝试调用页面置换算法(算法实现分别为Machine 中的LRUSwap和FIFOSwap两个方法)。

中添加两个方法:修改 的ReadRem和WriteRem函数,当进行了转换后所得到的exception不是NoException时,首先用machine调用RaiseException函数,执行完此函数后,判断之前所获得异常是否是PageFaultException,如果是PageFaultException则此时通过RaiseException 函数所调用的ExceptionHandler函数已经进行了TLB的调度,但是并没有写入到内存中,所以,还需要再次进行一下Translate,这时如果exception如果不是NoException时,则直接退出ReadMem或WriteMem函数。

二、分页式内存管理目前Nachos系统中,类Class Thread的成员变量AddrSpace* space中使用TranslationEntry* pageTable来管理内存。

应用程序的启动过程中,对其进行初始化;而在线程的切换过程中,亦会对该变量进行保存和恢复的操作(使得类Class Machine中定义的Class Machine::TranslationEntry* pageTable始终指向当前正在运行的线程的页表)。

Exercise 4内存全局管理数据结构设计并实现一个全局性的数据结构(如空闲链表、位图等)来进行内存的分配和回收,并记录当前内存的使用状态。

解答:在全局系统文件中声明一个全局位图文件变量,对内存的物理地址进行分配。

在system.h中加入中添加之后在Nachos的main文件中对memoryBitMap对象进行初始化,初始化位图文件的大小为4096Bytes。

在Addrespace类中对TLB页表项的物理地址分配中,不再将页表项的物理地址分配为循环数i,而是通过memoryBitMap对位图文件中的标志信息的查找来对物理地址进行分配。

Exercise 5多线程支持目前Nachos系统的内存中同时只能存在一个线程,我们希望打破这种限制,使得Nachos 系统支持多个线程同时存在于内存中。

解答:在Thread类中增加InitUserRegister方法修改Exercise 6缺页中断处理基于TLB机制的异常处理和页面替换算法的实践,实现缺页中断处理(注意!TLB机制的异常处理是将内存中已有的页面调入TLB,而此处的缺页中断处理则是从磁盘中调入新的页面到内存)、页面替换算法等。

解答:修改中的AddrSpace构造方法三、Lazy-loadingExercise 7 我们已经知道,Nachos系统为用户程序分配内存必须在用户程序载入内存时一次性完成,故此,系统能够运行的用户程序的大小被严格限制在4KB以下。

请实现Lazy-loading 的内存分配算法,使得当且仅当程序运行过程中缺页中断发生时,才会将所需的页面从磁盘调入内存。

解答:四、Challenges(至少选做1个)Challenge 1为线程增加挂起SUSPENDED状态,并在已完成的文件系统和内存管理功能的基础之上,实现线程在“SUSPENDED”,“READY”和“BLOCKED”状态之间的切换。

Challenge2多级页表的缺陷在于页表的大小与虚拟地址空间的大小成正比,为了节省物理内存在页表存储上的消耗,请在Nachos系统中实现倒排页表。

内容三:遇到的困难以及解决方法困难首先,还是对C++熟悉程度,尽管通过几次的lab对于代码结构已经有了基本的认识,但是在调试代码的时候还是会出现很多的问题。

其次,是时间的问题,这次了lab内容比较多,另外本周还有一份xv6的阅读报告,同时白天还要上班,所以感觉这部分内容的时间非常的紧张。

但是在工作之余尽量抽出时间把本次lab完成了。

内容四:收获及感想通过对nachos虚拟内存算法的实现,使我更加深入的了解了操作系统内存的内存实现机制。

学以致用,使得我们学习的过程更加简单,记忆印象更加深刻。

我也学会了不少os 方面的细节问题,原来学习操作系统只是宏观的概念层面的理解,说是理解,也不是非常明白,比如每个线程究竟是如何执行的,如何调度的,但是通过对nachos源码的阅读,和对其中部分代码进行这些exercise里面要求的改写之后,发现原来模糊的概念开始变的具体明朗,其内部是如何真实运行的,机理是如何在其中发挥作用的,都清楚了不少。

我在这个实习的过程中,不断翻阅老师课上的课件,了解其中的原理,再结合网上大牛们的技术博客,慢慢研读,自觉收货不少,以后在课堂的学习中我当更加认真的听讲,及时的完成每一节课的任务作业,认真总结,这样才能到最后事半功倍,不会捉襟见肘。

内容五:对课程的意见和建议我觉得课堂上讲解的偏重一些理论,在实践或者说是编码这方面还可以适当的增加一些,比如在一些关键代码或者功能的实现上,可以找一些功力较好的同学上台上演示编码,这样的同学可以在平时分上给一些加分,或者由老师带领同学对其中比较困难或者关键性的代码演示编写,觉得这种对实践上的一点倾斜,可能对课后的lab 完成有相当的促进作用。

相关文档
最新文档