关于内存管理(虚拟内存的分段与分页实现),Intel Pentium完成哪些功能,Windows/Unix OS完成哪些功能?修改
《现代操作系统》在介绍内存管理的分段与分页结合时,介绍了分段和分页结合Intel Pentium的例子,那么处理器和操作系统在内存管理方面的配合和分工是怎样的?
修改
按票数排序
按时间排序
4 个回答
os在物理内存中随便找个地方按照cpu指定的规则填写页表页目录,然后通过cr3告诉cpu这个位置在哪里,cpu读取内容,分页机制开始运转。分段机制的工作原理差不多,os在物理内存中找个地方填写全局描述浮表gdt,然后lgdt告诉cpu这个位置,cpu读取信息,分段机制开始工作。不过现代os基本都是使用平坦寻址方式,分段机制除了管理特权级,没啥用可以忽略。
考虑两个程序,甲里面有这个:
乙里面有这个:
两个程序同时运行的时候,如果内存地址不用分页来转换,那么两个程序就会写入同一片物理内存,造成错误。然而,如果我们能让 cpu 不直接读写物理内存,而是经过一次翻译,能在甲程序运行时,把逻辑地址(x86 上为线性地址)1234h 翻译到物理地址 11234h,乙程序运行的时候则翻译成其他的,比如 21234h,这样两者就能够互不干扰了。
现代 CPU 里实现它的方式就是内存分页。具体的做法是在内存中开辟一小部分存储页表,cpu 遇到内存读写的操作时根据页表翻译到物理地址。而页表怎么写、进程切换的时候怎样维持页表就是操作系统的工作了。
mov [1234h], eax
mov ecx, [1234h]
现代 CPU 里实现它的方式就是内存分页。具体的做法是在内存中开辟一小部分存储页表,cpu 遇到内存读写的操作时根据页表翻译到物理地址。而页表怎么写、进程切换的时候怎样维持页表就是操作系统的工作了。
孟德尔 赞同
实际应该这样来看,其中CPU做的事情之前都是操作系统做的,CPU的做的事情是通过硬件保存一部分信息加快(比如通过一个特殊的Cache,TLB)之前操作系统做的工作。当然,这样做的前提是大家都商量好比如我们要用页式管理虚拟内存。
如果CPU内部的储存空间足够(足以储存完整分页数据和相关的操作代码)的话,CPU可以完全接管操作系统的内存管理部分;现在没有这么做的主要原因是CPU内部储存还不足(或者说要做到完全接管的硬件代价太大)。同时,保持借口的简洁,操作系统实现的部分也可以有很大的灵活性。
如果CPU内部的储存空间足够(足以储存完整分页数据和相关的操作代码)的话,CPU可以完全接管操作系统的内存管理部分;现在没有这么做的主要原因是CPU内部储存还不足(或者说要做到完全接管的硬件代价太大)。同时,保持借口的简洁,操作系统实现的部分也可以有很大的灵活性。