今天看书看到了windows的分页和分段机制,之前学习操作系统的时候老师讲过,而且还作为期中考试题目出过,
只可惜自己不努力,现在重新看一下,算是简单了解了windows的段页机制。
开始之前我们需要知道windows运行的几种模式,包括实模式、保护模式以及虚拟8086模式。
一般操作系统运行在保护模式下,程序可以使用4G大小的虚拟空间。
首先要了解以下三个概念:
虚拟地址-即程序使用的地址。程序员在编写程序时可以不用考虑底层的物理内存使用,只需要使用虚拟地址进行程序的编写。在实模式下,不采用分段分页,虚拟地址和物理地址是相同的。
线性地址-分段机制映射之后得到的地址。如果不采用分页机制,那么线性地址和物理地址是相同的。
物理地址-分页机制映射之后得到的地址。也就是程序代码、数据实际在内存中被加载的地址。
下面开始介绍分段机制。
在实模式和虚拟8086模式下段寄存器存放的是段基址,保护模式中存放的是段选择子。
虚拟地址的高16位由段寄存器给出,低32位为程序使用的地址,即偏移量。
TI的值为0指示使用的是全局描述符表,为1表示使用局部描述符表,通过索引查表,得到段描述符。段基址和原偏移量相加就得到了线性地址。
至于分页机制,
首先线性地址用10位表示页目录,这样页目录就会包括1024个表项,每个4字节,这样页表大小就是4K。
查询到页表机制加上页号就能查询到页基址,之后加上偏移量就能查询到真正的物理地址。
先介绍一个大概,其余还有很多可深入研究的部分,比如PAE模式、以及具体的各个字段的作用。等之后需要用到了再回来补充吧,希望能够给大家帮助~
以上。