一、前言
在《操作系统篇-浅谈实模式与保护模式》中提到了两种模式,我们说在操作系统中,其实大部分时间是待在保护模式中的。因此若想理解操作系统程序中的启动相关的部分,必须要理解保护模式下的编程,而分段机制是保护模式编程下的基础。而且,由于实模式与保护模式的不同,对保护模式下的分段机制更需要注意。
二、线性地址
在保护模式下编程,访问内存时,需要在程序中给出段地址和偏移量,因为分段是保护模式的基本特征之一。传统上,段地址和偏移地址称为逻辑地址,偏移地址叫做有效地址,在指令中给出有效地址的方式叫做寻址方式。
段的管理是由处理器的段部件负责进行的,段部件将段地址和偏移地址相加,得到访问内存的地址。一般来说,段部件产生的地址就是物理地址。
在分段模型下,内存的分配是不定长的,时间长了,内存空间就会碎片化,就有可能出现一种情况:内存空间是有的,但都是小块,无法分配给某个任务。为了解决这个问题,在支持分页功能后,分页功能将物理内存空间划分成逻辑上的页。页的大小是固定的,一般为 4KB,通过使用页,可以简化内存管理。
如下图所示,当页功能开启时,段部件产生的地址就不再是物理地址了,而是线性地址,线性地址还要经页部件转换后,才是物理地址。

线性地址的概念用来描述任务的地址空间。如上图所示, 32位保护模式中,每个任务都拥有4GB 的虚拟内存空间,就像一段平直的线段,因此叫线性地址空间。相应地,由段部件产生的地址,就对应着线性地址空间上的每一个点,这就是
网友评论

