关于分段和分页,你可能感兴趣的一些问题

1.传统分段内存分段管理是8086CPU引起的潮流,将物理内存分为多个段,提供给进程使用,需要注意的是,这里的分段指定是物理内存分段,而不是程序中的代码段,数据段。对于保护模式下我们说的代码段和数据段描述符,表示的是描述符描述的内存段中存放数据的类型。所以平时我们所说的分段和分页,指的是物理内存,而不是代码。

2.保护模式分段管理,每个进程都有一块或多块属于自己的物理内存地址空间,为了避免进程之间恶意访问,引入了段描述符来描述这些内存段,一旦进程访问的地址超出了自己所拥有的内存段,就会触发处理器异常。

3.为了更好地管理计算机的硬件资源,引入了特权级的概念,避免所有进程胡乱使用计算机硬件资源,因此专门设立一个进程来管理硬件资源,这个进程被叫做操作系统。

4.引入段描述符和特权级的概念后,低特权级的用户进程自己不能操作硬件,因为操作硬件需要涉及到特权指令,而低特权级的进程不能使用特权指令,同时因为段描述符的限制,不能直接跳转
到操作系统内核代码段执行,因此产生了调用门和陷阱门以及依从代码段,这些门结构和依从代码段结合特权级,为低特权级的用户进程使用高特权级提供的例程做了安全保障。

5.由于使用物理内存分段模型,导致操作系统在管理内存时,会产生较大的外部或内部碎片,因此引入了物理内存分页的概念,先将物理内存分页,然后处理器把当前正在使用的地址当作虚拟地址,而不是物理内存真正的物理内存地址,这样就能将虚拟地址和物理内存地址做映射,就形成了虚拟地址是连续的,但是他们映射到了不同的物理内存地址上。这样的情况下,处理器每使用一个地址,都要先进行转换,转换到对应的物理地址,进而访问内存,幸运的是,这个地址转换的工作由硬件自身完成。而需要转换,就得依赖一些表结构,这些表中记录了哪些虚拟地址被映射到了哪些物理地址,而硬件通过访问这些表结构,就能将虚拟地址计算成对应的物理地址,进而访存。我们把地址转换的硬件叫做页部件,把映射虚拟地址和物理地址的表结构叫做页目录和页表。

6.开启分页后,段描述符的作用不再是约束不同进程或者同一个进程间的不同物理内存段,而是约束同一个进程中不同虚拟地址段的空间,而这个进程有哪些类型的段,完全取决于程序本身,或者说是编写代码的人。

7.分页模式下,每个进程都有独立的页目录和页表,这使得不同进程可以使用相同的虚拟地址空间,只是映射到的物理地址不同而已,你可能会问,那处理器执行的时候他怎么知道要把虚拟地址空间转换为哪个物理地址,因为相同虚拟地址空间映射到了不同物理地址。这个问题的答案是这样的,首先再32位处理器上,是单核心的,一个时段只有一个进程在执行,而处理器使用的是当前正在执行进程的页目录和页表,就知道转换为哪个物理地址了。当一个进程运行的时间片结束后,处理器改而使用新上处理器执行的进程的页表。

8.保护模式开启分页,操作系统在创建进程时,首先会为进程创建页目录和页表,并把自己的页目录拷贝到该页目录的高一般,以便于用户进程可以共享内核空间。接着操作系统会为进程创建段描述符,即使创建的时4G的描述符(此时是虚拟地址描述符),也不用担心操作系统会被恶意修改,因为此时进程的页目录的高一半的
页目录项中,U/S位被置为超级用户位,因此一旦用户进程尝试在代码中访问操作系统的内存空间,就会引发处理器异常,导致程序终止。你可能会问,既然无法访问内核的虚拟地址空间,那怎么算是共享内核呢?答案是,还有调用门/中断门/依从代码段,他们存在内核空间的数据区,用户进程不能直接用地址访问,而是通过特殊的指令来调用内核为用户程序提供的例程,比如int指令,发出一个软中断请求,进而陷入内核,使用操作系统提供的服务。

9.IA32E模式下,强制开启分页,强制使用平坦模型,不再检查描述符中的段基址和段界限,因此每个进程都有64位虚拟地址空间,即0 ~ 0xffffffffffffffff。当操作系统采用平坦模型时,对于所有3特权级的用户进程,只需共享操作系统在GDT中创建的3特权级的段描述符即可,这样操作系统就可以不针对一个进程就要创建至少一个对应的描述符,换言之就是可以不用LDT了。由于强制使用平坦模型,处理器不再检查段基址和段界限,这样就不能向保护模式开启分页一样,在同一个进程内可以使用不同的描述符来隔离一段一段的虚拟地址空间。而是采用其他方法进行隔离,比如说为同一个进程创建两套四级页表结构,然后再需要跨段运行时,切换CR3寄存器即可

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值