操作系统之哲学原理学习(五)

目录

课后练习题

1.基本的内存管理模式有哪几种? 其特点分别是什么?

2.内存管理提供的抽象有哪些? 请尽可能多地列出。

3.单道编程下的内存管理模式是如何实现地址独立的?

4.位图表示和链表表示两种方法在查找闲置空间时的效率如何?

5.有学生提出,在固定分区的多道编程的内存管理下,只需要在编译时给出一个参数,即该程序将被加载的内存分区,便可以通过编译器来事先计算出每个程序虚地址的物理地址。这样在加载后,就不再需要动态地址翻译了。请问该建议怎么样?

6.固定分区管理模式下,使用静态地址翻译能否满足地址独立的目标? 地址保护呢?

7.固定分区是如何达到内存管理的两个抽象: 地址独立和地址保护? 请详细说明。

8.在将I/O设备映射到内存时,能否将其映射到用户程序地址空间之下或者中间?

9.动态地址翻译是否需要硬件支持? 为什么?

10.固定分区和非固定分区,哪种模式下程序增长更难? 为什么?

11.在多道编程下,我们说过需要动态地址翻译。因为编译器不知道该程序将被加载到何地址上。但有学生提出,可以使用加载器进行静态地址翻译。因为在加载的时候我们已经知道加载的起始地址了。请问这种做法行得通吗?

12.实现虚拟内存的根本方法是什么?

13.使用位图和链表来管理闲置内存空间在时间效率上敦优敦劣?为什么?

反思

我有一个疑问,空间碎片化的根源是每个程序的大小不一样,我们于是产生了页,规定了一个固定大小,但是如果一个程序填不满一页,岂不是空间碎片化的问题依旧存在,那该这样有什么用呢?


 

看还有没有内存的两种方法。

一种还是0和1的问题,另外一种是链表的形式。 

第1种办法是给每个分配单元赋予一个字位,用来记录该分配单元是否闲 置。例如,字位取值0表示分配单元闲置,字位取值1则表示该分配单元已被占用。这种表示法就是所谓的位 图表示法,如图11-17所示。

(直接从实现的角度来看这个问题)

另外一种办法是将分配单元按是否闲置链接起来,这种办法称为链表表示法。

图中的P代表程序,即当前这片空间由程序占用。后面的数字是本片空间的起始分配单元号和大小。而H代 表的是空洞,即这是一片闲置空间。例如,图中的第1个链表项表示一个大小为5个分配单元的程序,起始地 址为第0个分配块。第2个链表项表示一片大小为4个分配单元的闲置空间块,起始地址为第5个分配单元。其 他以此类推。

其实图上的做法就是把空闲的地址都连起来,之后每个表本身都标注一下起始地址与内存大小。

其实0和1是一个很深邃的问题,为什么,因为也是表示一个判断的动作,正与错,是与非,好与坏,这其实也是下一个标准,与分一个类。

 

 

课后练习题

1.基本的内存管理模式有哪几种? 其特点分别是什么?

基本的内存管理模式有以下几种:

  1. 单一连续分区模式(Single Contiguous Partitioning)

    • 特点:将整个内存空间划分为一个单一的连续区域,用于存储进程。
    • 优点:实现简单,易于理解和管理。
    • 缺点:浪费内存,会产生外部碎片(剩余内存块零散分布,无法满足大块连续内存需求)。
  2. 固定分区模式(Fixed Partitioning)

    • 特点:将内存空间划分为若干个固定大小的分区,每个分区可用于存储一个进程。
    • 优点:支持多个进程同时运行,分区大小固定,便于管理。
    • 缺点:固定大小可能导致内存利用率低,会产生外部碎片。
  3. 可变分区模式(Variable Partitioning)

    • 特点:根据进程需求动态分配内存分区,每个分区仅容纳一个进程。
    • 优点:提高内存利用率,避免固定分区模式下的浪费。
    • 缺点:容易产生外部碎片,分配与回收内存的效率较低。
  4. 分页模式(Paging)

    • 特点:将物理内存和进程划分为固定大小的页面(页框)和逻辑大小相同的页面(页),实现逻辑与物理地址的映射。
    • 优点:消除了外部碎片,支持动态地址重定位,提供了更大的内存共享和保护。
    • 缺点:会产生内部碎片(一页中未使用完全的空间),需要额外的管理开销。
  5. 段式模式(Segmentation)

    • 特点:将进程划分为不同大小的逻辑段,如代码段、数据段和堆栈段,每个段具有独立的逻辑地址空间。
    • 优点:提供了更好的程序模块化和内存保护,支持动态增长。
    • 缺点:会产生外部碎片和内部碎片,对应用程序的编写和管理较为复杂。

这些内存管理模式各有优缺点,适用于不同的场景和需求。在实际应用中,一般会综合考虑内存利用率、管理复杂度、系统性能等因素,选择最合适的内存管理模式。

2.内存管理提供的抽象有哪些? 请尽可能多地列出。

内存管理提供了多种抽象来方便程序员对内存进行管理和操作。以下是一些常见的内存管理抽象:

  1. 进程(Process):进程是执行中的程序的表示,每个进程都有独立的内存空间,包括代码、数据和堆栈等。

  2. 内存块(Memory Block):内存被划分成固定大小的块,用于分配给不同的进程或数据结构。

  3. 页(Page):内存分页模式下,将物理内存和虚拟内存划分为固定大小的页面,用于地址映射和管理。

  4. 段(Segment):内存分段模式下,将进程划分为多个逻辑段,如代码段、数据段和堆栈段,每个段具有独立的逻辑地址空间。

  5. 堆(Heap):用于动态分配的内存区域,用于存储运行时创建的对象和数据结构。在许多编程语言中,动态分配的内存通过堆来管理。

  6. 栈(Stack):用于存储程序运行期间的函数调用、局部变量和函数参数等信息。栈内存是按照“后进先出”的原则进行管理。

  7. 虚拟内存(Virtual Memory):虚拟内存是一种抽象,它使得程序看起来拥有比实际物理内存更大的地址空间。它涉及到了页面交换、页面错误处理和磁盘上的页面文件等机制。

  8. 内存段(Memory Segment):内存被划分为不同的段,如代码段、数据段、堆栈段等,以方便不同类型的数据或指令的管理。

  9. 内存映射(Memory Mapping):将外部设备、文件或其他资源映射到内存中,使其能够像访问内存一样访问这些资源。

  10. 缓存(Cache):对于频繁访问的数据,将其缓存到快速访问的存储区域中,以加快数据访问速度。

这些抽象提供了不同层次和方式的内存管理,帮助程序员管理和操作内存,提高程序的性能和效率。不同的操作系统和编程语言可能提供不同的内存管理抽象。

3.单道编程下的内存管理模式是如何实现地址独立的?

在单道编程中,内存管理模式通过地址独立性来实现。具体来说,单道编程下的内存管理模式使用了逻辑地址和物理地址之间的映射,使得每个进程都有自己独立的地址空间。

当一个程序被加载到内存中执行时,操作系统会为该程序分配一块连续的物理内存空间,然后将程序的逻辑地址空间映射到这块物理内存上。

这种映射是通过使用分页或分段等技术来实现的。

在分页模式下,逻辑地址被划分为固定大小的页面(页),物理内存也被划分为相同大小的物理页面(页框)。操作系统通过页表来记录逻辑页面与物理页面的对应关系,以实现地址独立性。当程序访问一个逻辑地址时,操作系统将根据页表查找相应的物理页面,并将程序指令或数据加载到对应的物理页面上。

在分段模式下,逻辑地址被划分为多个段,如代码段、数据段和堆栈段等。每个段都有自己的基址和段长。操作系统通过段表来维护逻辑地址段与物理地址段的映射关系,从而实现地址独立性。当程序访问一个逻辑地址时,操作系统将根据段表将逻辑地址转换为物理地址,并加载相应的程序段到物理内存中。

通过这种地址独立性的实现,每个进程在单道编程下都可以具有自己独立的地址空间,而不会互相干扰或访问非法的内存区域。这样能够确保程序的安全性和稳定性,使得单道程序可以在统一的环境中独立运行。


4.位图表示和链表表示两种方法在查找闲置空间时的效率如何?

在内存管理中,位图表示和链表表示是两种常见的方法用于查找闲置空间。它们在查找闲置空间时的效率如下:

  1. 位图表示(Bitmap Representation):位图使用一个位来表示内存中每个块的占用情况。每个位对应一个内存块,如果位为0表示该块是空闲的,如果位为1表示该块已被占用。查找闲置空间时,位图只需扫描对应的位向量,找到第一个连续的0位(空闲块)即可。因此,位图表示的查找效率很高,时间复杂度为O(1)。

  2. 链表表示(Linked List Representation):链表使用链表数据结构来记录内存中每个块的占用情况。每个节点表示一个内存块,并包含指向下一个节点的指针。查找闲置空间时,需要遍历整个链表,寻找第一个满足条件的空闲块。因此,链表表示的查找效率较低,时间复杂度为O(n),其中n为链表节点数。

总体而言,位图表示在查找闲置空间时具有更高的效率。由于位图使用了位运算来表示内存块的占用情况,只需扫描位图即可快速找到连续的空闲块。相比之下,链表表示需要遍历链表来查找空闲块,效率较低。然而,位图表示的缺点是需要额外的内存来存储位图,而链表表示不需要额外的内存开销。因此,在具体应用中,需要综合考虑内存占用和查找效率来选择适合的表示方法。


5.有学生提出,在固定分区的多道编程的内存管理下,只需要在编译时给出一个参数,即该程序将被加载的内存分区,便可以通过编译器来事先计算出每个程序虚地址的物理地址。这样在加载后,就不再需要动态地址翻译了。请问该建议怎么样?

该学生提出的建议在固定分区的多道编程中确实可以简化内存管理过程,但也存在一些限制和问题需要考虑。

首先,固定分区的多道编程要求在编译时就给出每个程序将被加载的内存分区。这意味着在编译阶段需要明确知道每个程序的运行环境和内存需求,包括程序的大小、内存分区的布局等信息。然而,在实际情况下,程序的需求可能是动态变化的,特别是对于动态链接库等外部组件的使用。因此,这种静态确定内存分区的方法可能无法满足所有情况下的需求。

其次,该方法要求编译器在编译时计算出每个程序虚地址的物理地址。这就要求编译器具有实现内存分区算法的能力,并且在编译过程中需要实时处理和计算内存分区的情况。这会给编译器带来额外的复杂性和工作量。

此外,如果在加载后就不再需要动态地址翻译的话,就意味着程序只能运行在预先指定的内存分区中,无法动态适应其他空闲的内存区域。这可能导致内存资源的浪费,尤其是当某个内存分区没有完全被程序占满时,其余的空闲内存无法被利用。

综上所述,该建议虽然在固定分区的多道编程中可以简化内存管理过程,但也带来了一些限制和问题。在具体应用中,需要综合考虑编译器的能力、程序的动态性和内存资源的利用率等因素,来判断是否采取这种静态确定内存分区的方法。

6.固定分区管理模式下,使用静态地址翻译能否满足地址独立的目标? 地址保护呢?


7.固定分区是如何达到内存管理的两个抽象: 地址独立和地址保护? 请详细说明。


8.在将I/O设备映射到内存时,能否将其映射到用户程序地址空间之下或者中间?


9.动态地址翻译是否需要硬件支持? 为什么?

是的,动态地址翻译需要硬件支持。它涉及到将虚拟地址转换为物理地址的过程,需要硬件来完成这个转换。

在动态地址翻译机制中,常见的实现方式是使用页表和分段机制。这些机制需要在内存中维护相应的数据结构,并且需要硬件提供支持来完成地址转换操作。

具体来说,页表是用于将虚拟地址映射到物理地址的数据结构。当程序访问虚拟地址时,硬件通过查找页表中的映射表项,确定对应的物理地址。页表通常由操作系统维护,在程序执行过程中,硬件会根据页表的内容进行地址转换。

分段机制是另一种常见的动态地址翻译机制。它将程序的虚拟地址空间划分为多个段,每个段具有自己的基地址和长度。当程序访问虚拟地址时,硬件通过查找段表中的映射表项,确定对应的物理地址。与页表类似,分段机制也需要硬件支持来进行地址转换操作。

因此,动态地址翻译需要硬件提供支持来实现虚拟地址到物理地址的转换。这包括了对页表或段表的访问和查询,以及将虚拟地址映射到对应的物理地址。硬件支持能够提高地址转换的效率和性能,并且是实现动态地址翻译机制的必要条件。

10.固定分区和非固定分区,哪种模式下程序增长更难? 为什么?

在固定分区和非固定分区的内存分配模式下,程序增长更难的是固定分区模式。

固定分区模式下,内存空间被划分为固定大小的分区,每个分区只能容纳特定大小的程序。当程序增长时,如果超过了当前可用的分区大小,就无法被放置在该分区中,而需要找到一个更大的分区来容纳。这可能需要对内存重新划分和重新分配,导致程序移动或发生碎片化的问题。

相比之下,在非固定分区模式下,内存空间不被划分为固定大小的分区,而是以动态方式进行分配。当程序增长时,可以根据需要分配更多的连续空间给程序使用,这样程序就能够方便地增长。非固定分区采用动态分配的方式,可以更灵活地利用可用的空闲内存,减少了外部碎片的产生。

因此,固定分区模式下程序增长更难,因为它受限于已经划分好的固定分区大小和内存布局。当程序增长时,可能会面临寻找更大分区或更频繁的内存重分配的问题,而这些操作可能会导致较大的性能开销和内存碎片化。非固定分区模式下,程序能够更自由地分配和利用内存空间,更容易进行程序的增长和扩展。

11.在多道编程下,我们说过需要动态地址翻译。因为编译器不知道该程序将被加载到何地址上。但有学生提出,可以使用加载器进行静态地址翻译。因为在加载的时候我们已经知道加载的起始地址了。请问这种做法行得通吗?

这种使用加载器进行静态地址翻译的做法是可行的,实际上在多道程序设计中也存在类似的机制。我将对这个做法进行详细解释。

在多道程序设计中,可以使用加载器进行静态地址翻译。加载器是一个系统程序,负责将程序从外存加载到内存中,并将其放置在指定的内存起始地址上。加载器在加载程序时,可以对程序中的地址进行修正,使得程序中的地址与实际内存中的地址相对应。

具体来说,在加载过程中,加载器可以扫描程序中的地址引用,并根据所加载到的内存起始地址,对这些地址进行修正。例如,如果程序中有一个指令引用了地址100,而加载器将程序放置在内存的起始地址为200的位置上,那么加载器会将地址100修正为300(200 + 100)。

通过这种方式,加载器可以在加载程序时完成静态地址翻译,使得程序中的地址与实际运行时的地址相匹配。这样,编译器在生成程序时就可以将地址当作实际内存中的地址来处理,而不需要进行动态地址翻译。

需要注意的是,加载器进行的静态地址翻译只适用于在加载时已知程序加载起始地址的情况。如果加载器不知道程序将被加载到何地址上,仍然需要使用动态地址翻译机制来解决地址映射的问题。

总结来说,使用加载器进行静态地址翻译是可行的,可以将程序中的地址修正为实际内存中的地址。这种做法在多道程序设计中经常被使用,但前提是加载器已经知道程序的加载起始地址。如果加载起始地址未知,则仍需要动态地址翻译机制来完成地址映射。

12.实现虚拟内存的根本方法是什么?

实现虚拟内存的根本方法是使用页表和页表项进行地址映射。

虚拟内存是一种抽象的内存概念,它使得程序可以访问比物理内存更大的地址空间而实际的物理内存可能不足以容纳整个程序所需的数据和指令,因此需要一种机制来将虚拟内存中的地址映射到物理内存中的地址上。

页表是实现地址映射的关键数据结构。它存储了虚拟内存中的页(通常是固定大小的内存块)与物理内存中的页帧之间的映射关系。每个虚拟页在页表中有对应的页表项,其中包含了该虚拟页对应的物理页帧的信息。

当程序访问虚拟内存中的某个地址时,操作系统通过在页表中查找相应的页表项来确定该虚拟页对应的物理页帧的地址。如果该页表项有效,并且物理页帧已经分配给虚拟页,则操作系统将生成物理地址并将其提供给CPU,从而完成地址映射。

如果虚拟页当前不在物理内存中(例如因为被换出到磁盘上),则会发生缺页异常。在这种情况下,操作系统会根据需要将缺失的虚拟页从磁盘中读取到物理内存中,并更新页表项以反映新的地址映射关系。然后,程序重新执行由于缺页异常而被中断的指令。

通过使用页表和页表项进行地址映射,虚拟内存实现了更大的地址空间和灵活的内存管理。它允许多个程序同时运行,并为每个程序提供独立的虚拟地址空间。此外,虚拟内存还可以支持内存保护、内存共享和页面置换等重要功能,提高了系统的安全性、效率和可扩展性。

13.使用位图和链表来管理闲置内存空间在时间效率上敦优敦劣?为什么?

在管理闲置内存空间方面,位图和链表都是常见的数据结构和算法方法。它们在时间效率上具有一些不同的特点。

  1. 位图: 位图是一种用于表示集合的数据结构,其中每个位对应集合中的一个元素,并且可以使用二进制位来表示该元素是否存在。在内存管理中,可以使用位图来跟踪内存中的空闲块和已分配块。

时间效率:

  • 分配空闲内存块:在位图中查找空闲位并设置为已分配状态,时间复杂度为O(1)。因为位图的底层数据结构是一个连续的二进制数组,通过位运算可以直接定位到对应的位。
  • 释放已分配的内存块:将位图中相应位设置为空闲状态,时间复杂度为O(1)。

优点:

  • 时间复杂度低,分配和释放操作都可以在常数时间内完成。
  • 需要的额外内存开销较小,每个内存块只需要一个位来表示其状态。

劣势:

  • 内存碎片化:由于位图是按块来管理内存的,当存在大量不连续的小内存块时,会导致内存碎片化问题,降低了内存利用率。
  1. 链表: 链表是一种动态数据结构,它使用节点和指针来表示集合中的元素和元素之间的关系。在内存管理中,可以使用链表来管理闲置内存块,每个节点代表一个空闲块,并使用指针链接它们。

时间效率:

  • 分配空闲内存块:需要遍历链表来寻找适合大小的空闲块,时间复杂度为O(n),其中n是链表的长度。
  • 释放已分配的内存块:将释放的块插入到链表中适当的位置,时间复杂度为O(1)或O(n),取决于具体实现。

优点:

  • 灵活性:链表可以处理不连续的内存块,可以更好地应对动态的内存分配和释放需求。
  • 内存利用率高:由于链表可以灵活地组织内存块,因此可以减少内存碎片化问题。

劣势:

  • 时间复杂度相对较高:链表的插入和删除操作需要遍历链表,时间复杂度较高,尤其在大型链表上。

综上所述,在时间效率上,位图的分配和释放操作都可以在常数时间内完成,效率较高;而链表的分配操作则需要遍历链表,效率相对较低。然而,链表在处理内存碎片化和动态内存管理方面更加灵活,可以提高内存利用率。因此,在实际应用中,要根据具体场景和需求选择合适的数据结构和算法。

值得注意的是,以上对位图和链表的时间效率分析是基于一般情况下的假设,具体的实现方式和算法优化等因素也会对时间效率产生影响。

 

内存管理就是要将各种媒介组建成一体,形成一个巨无霸似的虚拟存储系统

 

 虽然最佳适用的名字听上去很好,但因为每次都是最小适应,使 得多出来的空间反而更加难以再次利用。

没有多少可以从根本解决问题的办法,都是还是拘泥于解决这个问题本身在提出解决方案,没有提出一种我认为潜在的根本解决方法,或者说直接提出一种新的理论,直接来推倒从来。

 

 

一是指空间增长效率低下;二是空间增长存在天花板限制。

这个限制就是单一程序不能超过物理内存空间(减去操作系统所占部分), 尽管多个程序的总空间可以超过物理内存空间

 程序增长有限则是因为一个程序需要全部加载到内存才能运行

只将当前需要的页面放在内存里,其他暂时不用的页面放在磁盘 上,这样一个程序同时占用内存和磁盘,其增长空间就大大增加了

之前的方式,都是要把资源都加载一遍,之后才能开启的

但是现在有了分页就没有关系,

 其实页的出现,

就是为了不要再产生资源的浪费,就是在节约资源,其实就是在提升自身的认知。

反思

        其实当时说实在话,自己在学校跟着课程学操作系统的时候,就没有这样的思考与认知。单拿内存管理这个知识点来说,当时学习了进程、内存块、位图、链表、页、段等等存储方式,也学习了很多的算法,最佳适应(BF)、最先适用(FF)、最坏适用算法(WF)等等,题目也会做,但是也仅仅是会做,却从来没有思考过比如进程与页的关系,为什么会出现页等等,这样能让自己知识成为一个连贯体系、系统的问题。

        当自己开始慢慢重新复盘的时候,我开始给自己提问题,当我看到这些碎片化小内存的时候,虽然我可以使用最佳适用算法,可细想发现很有问题,最佳适用的名字听上去很好,但因为每次都是最小适应,使得多出来的空间反而更加难以再次利用,内存利用率依旧低下,仅起到了一个微弱的缓解作用。

        于此,我写下疑问,“这些算法没有多少可以从根本解决外部碎片问题的,都是还是拘泥于解决这个问题本身在提出解决方案,没有提出一种是我认为潜在的根本解决方法,或者说直接提出一种新的理论,直接推倒重来的。”

        但是,我在此时,我都没有意识到我提出这个问题有多么可笑,因为页的出现,正是为了从根本上解决这个问题的,就是给我要写入的程序来固定一个确定的大小,定好规格,于是页的出现,使得内存从根本上就不存在外部碎片这样的概念一说。

        于此想来,同样的知识即使是大家一起学,如果自己没有一颗我认为是一种“入境”的心态,也就是真正在思考这个问题要如何解决,而只是很机械化地去识记和填鸭,突击个一天两天就准备上硬试来个套用,或许这样的知识就是死的,是没有灵魂的,你始终也不会感受到这个方案、模式提出的巧妙和伟大,你在未来应用我相信也不太可能将所学知识好好利用。

        因为如果自己没有一个完整体系,一个深刻的认知,他就永远都像是一个无头苍蝇一样乱撞,他不懂得哪个技术、哪个方案适用于这种情况;如果你不能懂得这个知识的内蕴,而人的语言表达又是如此有限,语言只能表达表层的东西,可深层次的奥妙只能自己感悟;此外,谈不上什么开拓创新,这样的学习又怎能叫做学习?这样度过的生活又有什么样的意义?

我有一个疑问,空间碎片化的根源是每个程序的大小不一样,我们于是产生了页,规定了一个固定大小,但是如果一个程序填不满一页,岂不是空间碎片化的问题依旧存在,那该这样有什么用呢?

你提到的空间碎片化问题确实是由于每个程序的大小不一致所导致的,而页是为了解决这个问题而引入的。虽然某些程序可能无法填满一页,但使用页的主要目的是将内存划分为固定大小的块,以简化内存管理和提高内存利用率。

在使用页的情况下,存在两种类型的空间碎片:

  1. 外部碎片: 外部碎片是指已分配和使用的内存块之间的未使用空间。当发生分配和释放操作时,外部碎片可能会逐渐增加,导致内存利用率降低。这是因为连续的可用内存块可能会被多个小程序或者不连续的大程序所占用,使得无法有效地分配给其他需要较大连续内存块的程序。

  2. 内部碎片: 内部碎片是指一个已分配的内存块中未被使用的部分。当程序的大小小于一页时,该页内的剩余空间无法被其他程序利用,从而产生了内部碎片。

虽然内部碎片的存在仍然会降低内存利用率,但使用页的好处在于减少了外部碎片的影响。通过将内存划分为固定大小的块,可以更有效地管理内存,并为程序分配连续的空间。

此外,内部碎片相对于外部碎片来说,对于系统整体性能的影响较小。因为系统可以通过其他算法(如内存紧缩、虚拟内存等)来优化内部碎片的利用,从而减少对整体性能的影响。

因此,使用页的目的并不是解决所有的空间碎片化问题,而是在固定大小的内存块上进行更有效的管理,减少外部碎片的影响,提高内存利用率和系统性能。

        为了解决程序比内存大的问题,我们可以允许一个进程的部分虚拟页面存放在物理页面之外,也就是磁盘 上。在需要访问这些外部虚拟页面时,再将其调入物理内存。由此,交换系统的所有缺陷均被克服。

(就是说,这个东西是啥,也就是C盘与D盘之间的关系,C盘放不下,我就先放到D盘中去,等到需要用的时候,在放到C盘里来,这样效率就大大提高了)

         分页系统要能够工作的前提是:对于任何一个虚拟页面,系统知道该页面是否在物理内存中,如果在的话,其对应的物理页面是哪个;如果不在的话,则产生一个系统中断(缺页中断),并 将该虚页从磁盘转到内存,然后将分配给它的物理页面号返回。也就是说,页面管理系统要能够将虚拟地址 转换为物理地址。

if(虚拟页面非法、不在内存或者被保护){ 陷入到操作系统错误服务程序 }else{ 将虚拟页面号转换为物理页面号 根据物理页面号产生最终物理地址 }

分页系统的核心是页面的翻译,即从虚拟页面到物理页面的映射。

 

 

图书馆是真的难抢,真的可怕。

其实我真心认为,人只有失去了,才懂得珍惜,真的是无奈与悲哀。

康有为

 是真的讽刺,太吓人了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值