关于进程地址空间的段式内存管理(实地址模式和保护模式)及页式内存管理

进程地址空间

 

实地址模式(段式管理):在X86系列中的8086,要求寻址能力为1M,但是它的数据总线宽度仅为16(即16位),只能产生64k的寻址能力,此时,设置了段寄存器,段寄存器中有20位,内部地址中的高12位与段寄存器中的16位相加,而内部地址中的低4位保留不变。一个进程能连续的访问64k的空间,同时根据段寄存器设置的基地址,可以任意访问内存,此时线性地址就等同于物理地址,缺乏内存保护。

保护模式(段式管理):

在8038段式管理机制中,为了实现保护模式,光用基地址是不够的,至少还要偶地址段的长度,其他限制权限等,为此增设了两个段表述表寄存器。实现将寄存器内容的低3位(权限)屏蔽掉以后与GDTR或LDTR的基地址相加得到表项的起始地址,这样用户程序就不能通过私自私自篡改段寄存器的内容从而改变基地址而非法访问,实现了保护。

而此种模式中基地址为0,从而使得逻辑地址与线性地址相等,也就是我们常说的虚拟地址,然后直接作用于物理地址。

 

 

页式管理:

段式管理的缺点:段长度可变,给盘区交换带来不便;因原因设置段小而灵活,频繁交换,一个段描述表中最多只有2^13个描述符,可能不够。所以才用页式的储存管理。

线性地址空间为4g,映射4g的物理内存。页表是一种特殊的数据结构,放在系统空间的页表区,存放逻辑页与物理页帧的对应关系。 每一个进程都拥有一个自己的页表,PCB表中有指针指向页表。每个页为4k,映射4k的物理内存。  目前linux系统用的两级模式,即下两图。虚拟地址映射物理地址的过程:从CR3取得页目录表的基地址,页目录表中有1024个目录项;以dir位段为下标,取得相应页表的基地址;以page为下标,取得相对应页的基地址;将页面描述符给的页面基地址与线性地址空间中的offset偏移量相加得到物理地址。

32位线性地址也就分成3部分:10+10+12,前10位获取页表,中10位获取页,后12位获取偏移量。

用两级的巧妙:如果用一级的话,即没有页目录表,页表就只有一个,页表的大小就是1K*1K=1M个表项,映射的大小也刚好是4G的虚拟地址空间,这就用户需要用空间的时候就要启用整个页表,也很用到4g的内存。用两级模式的话,页目录表可以根据情况来设置,如果目录中某项为空,即无需设置相对应的页表,大大节省空间。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值