OS内存管理之页表,页表项以及页目录

页表由多个页表项组成,即页表中每一行的就是一个页表项。

页表项中记录的信息:

  • 页框号:记录虚页面对应的具体哪个物理页面
  • 有效位:标识该页表项对应的虚页面有没有读进内存,否则在磁盘
  • 访问位:引用位,标识该页面有没有被访问过
  • 修改位:此页面在内存中有没有被修改过,如果被修改过,将来是要被持久化到磁盘上的,该标志位就是这个目的
  • 保护位:标识该页面的读写等权限

页表项一般是由硬件设计的,因为地址转换时大多数是由硬件完成的。

引出页目录:

对于32位虚拟地址空间,假设页面大小为4K,页表项大小为4字节:

一个进程有4G/4k = 2^20个页面
因为一个页面需要一个页表项来对应,所以,进程的页表项个数也为2^20个
不难得出该进程的页表占用了 2^20 * 4 / 4096(4k) = 1024个页面的大小

对于64位的虚拟地址空间来讲,页表规模更大,理论值32000TB

感觉有点绕,页表页就是存放进程页表的页面,他属于进程的一部分,页表也是以页为基本存储单位的。

所以,为了内存的高效使用,一般都不会将这么大规模的页表页存放在连续的内存上,所以,我们引入了页表页的地址索引表,页目录。提供一个目录,这样就变成了一个二维的结构,甚至现在很多计算机有多维的页表结构,也叫多级页表。

二级页表的访问过程:

当一个进程上CPU运行时,需要将页目录的起始地址存放在CR3寄存器中(x86体系结构)

还是32位的虚拟地址:

在这里插入图片描述

  1. 通过CR3寄存器,我们得到了页目录的地址
  2. 然后,根据虚拟地址的前10位,标识页目录中的偏移量,该偏移量对应的地址,保存的是页表的地址
  3. 得到页表地址,根据页表偏移,再得到页表项地址,那么我们就可以看到对应的是哪个物理页面
  4. 最后,根据物理页面的编号,访问物理页面,加上页内的偏移,就可以找到对应的数据或者指令。

整个过程,通过地址拼接,就可以得到物理地址,2级页表,最大可以标识4G的虚拟地址空间。

Core I7的4级页表结构:
在这里插入图片描述
整个过程由MMU完成:CPU取到虚拟地址-> MMU查页目录->MMU查页表->MMU得到页表项->MMU得到物理页面编号->MMU得到物理地址。

本文中图片来自网络公开课,https://www.bilibili.com/video/BV1Gx411Q7ro?t=287&p=47。

### 回答1: 利用面向对象程序设计技术进行操作系统内核的仿真可以实现作业管理、连续内存管理式虚存管理。 作业管理是操作系统内核的重要功能之一,它负责管理系统多个作业的调度和执行。在面向对象的设计,可以使用类来表示作业,类包含作业的属性和方法,如作业ID、作业状态、作业优先级等。通过面向对象的继承和多态性,可以实现不同类型的作业,如批处理作业、交互式作业等。同时,可以使用队列等数据结构来管理作业的调度和执行,实现作业的先来先服务、优先级调度等算法。 连续内存管理操作系统的另一个重要功能,它负责管理系统的物理内存分配和回收。在面向对象的设计,可以使用类来表示内存块,类包含内存块的属性和方法,如内存块ID、内存块大小、占用状态等。通过面向对象的封装性和继承性,可以实现内存块的分配、回收和合并等操作。同时,可以使用链表等数据结构来管理内存块的分配和回收,实现连续内存分配的算法,如首次适应算法、最佳适应算法等。 式虚存管理是操作系统的一种重要的内存管理方式,它将进程的地址空间划分为固定大小的,将物理内存划分为对应的物理框,通过页表进行地址转换。在面向对象的设计,可以使用类来表示页表页表项,类包含页表页表项的属性和方法,如页表大小、页表项大小、页表项的有效面的读写权限等。通过面向对象的封装性和继承性,可以实现页表项的创建、更新和查询等操作。同时,可以使用哈希表等数据结构来实现页表的快速访问,实现式虚存管理的算法。 总之,利用面向对象程序设计技术可以很好地实现操作系统内核的作业管理、连续内存管理式虚存管理。通过类的设计和数据结构的应用,可以简化系统的实现,增强系统的可维护性和可扩展性。同时,利用面向对象的特性,可以使系统的设计和实现更加灵活和可复用。 ### 回答2: 面向对象程序设计技术是一种软件开发方法,它强调将程序分解为多个独立的对象,并通过对象之间的消息传递来实现系统的功能。利用这种技术可以方便地实现操作系统OS)内核的作业管理、连续内存管理式虚存管理。 作业管理是操作系统非常重要的一部分,它负责管理和调度各个作业的执行。在利用面向对象程序设计技术仿真作业管理时,可以将每个作业设计为一个独立的对象,包含作业的属性(如优先级、作业状态)和行为(如作业的创建、撤销、调度)。此外,还可以设计一个作业调度器对象,根据不同的调度算法来选择下一个要执行的作业。 连续内存管理操作系统负责管理和分配连续内存区域的模块。在利用面向对象程序设计技术仿真连续内存管理时,可以将内存分为多个块,并将每个块设计为一个独立的对象,包含块的属性(如起始地址、大小)和行为(如分配、回收内存)。此外,还可以设计一个内存分配器对象,根据不同的分配算法来选择合适的块进行内存分配。 式虚存管理是操作系统负责管理虚拟内存和物理内存之间的映射关系的模块。在利用面向对象程序设计技术仿真式虚存管理时,可以将虚拟和物理设计为独立的对象,并建立虚拟到物理的映射关系。每个虚拟对象可以包含虚拟的属性(如号、访问)和行为(如面调入、面置换),每个物理对象可以包含物理的属性(如框号、占用)和行为(如面缓存、面回写)。 通过利用面向对象程序设计技术仿真OS内核的作业管理、连续内存管理式虚存管理,可以更好地模拟操作系统的行为和功能,而且对象的独立性和消息传递的机制也能提高系统的灵活性和可扩展性。 ### 回答3: 利用面向对象程序设计技术仿真 OS 内核的作业管理、连续内存管理式虚拟存储管理可以通过以下步骤实现。 作业管理是操作系统的重要组成部分,负责管理和控制用户作业的执行。可以定义一个Job类来表示作业,包含作业名、优先级、状态等属性。通过Job类的创建、调度、挂起、恢复、终止等方法,模拟处理作业的管理。作业管理器可以使用队列来管理所有的作业,通过调度算法选择合适的作业执行。 连续内存管理操作系统负责管理内存空间的部分,可以定义一个MemoryManager类来模拟连续内存管理。该类可以包含一个内存块列表,记录每个内存块的起始地址、大小、状态等信息。当有新的作业需要分配内存时,可以通过首次适应算法或最佳适应算法来选择合适的内存块进行分配。当作业完成时,可以释放对应的内存块。 式虚拟存储管理是操作系统的一种内存管理技术,可以将进程的逻辑地址空间划分为固定大小的面,将物理内存划分为同样大小的框,并通过页表来建立逻辑地址与物理地址之间的映射关系。可以定义一个Page类来表示,包含号、框号等属性。通过页表来记录每个面对应的框号。当产生缺异常时,可以根据面置换算法来选择适当的面进行置换。 利用面向对象程序设计技术仿真这些内核管理机制,可以更好地理解并模拟操作系统的内核工作原理。通过合理的类设计、方法调用以及数据结构的应用,可以实现与实际操作系统相似的作业管理、连续内存管理式虚拟存储管理,从而更好地理解和掌握操作系统的工作原理和设计思想。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值