• Linux0.12内存寻址


    一、分段与分页的比较

    1.逻辑地址 -----(分段机制)-----> 线性地址 -----(分页机制)-----> 物理地址

    分段机制是必须有的,分页机制可以没有。

    如果没有分页机制,线性地址=物理地址

    不同的分段机制和不同的分段机制可以随意组合


    2.逻辑地址 = 选择符(16位) : 偏移值(32位),逻辑地址是二维的

    线性地址和物理地址都是32位,是一维的


    3.分段的原因:隔绝各个任务的代码、数据和堆栈区域的机制,使多个程序(或任务)可以运行在同一处理器上而不会相互干扰

    分页的原因:为虚拟内存系统提供了实现机制,也用于提供多任务之间的隔离措施


    4.先执行段级保护,再执行页级保护

    段特权级有4级,页只有2级。

    超级用户级执行的程序可对任何页面有读写操作,即使是只读页面。


    5.保护检查操作与地址变换同时进行,因此处理器不会受到影响


    二、分段管理

    1.逻辑地址 = 选择符(16位) : 偏移值(32位)。

    段选择符中13位是索引号,因此可以选择8191(0号段不用)个段。

    段选择符中一个是区分GDT和LDT,因此准备地说,一个任务最多可以拥有全局段和局部段各8191个。

    偏移值有32位,因此一个段最长是4G

    只有6个段寄存器,因此只有6个段可供同时访问


    2.逻辑地址 -> 线性地址:

    (1)段选择符 -----> TI -----> 记录段描述符基址的寄存器

    (2)段选择符 ----->Index ----->  段描述符

    段描述符地址 = 段描述符基址(寄存器中) +  Index  *  8B

    (2)段描述符 -----> 段首字节的线性地址

    (3)段首字节的线性地址 + 偏移值 -----> 目标线性地址


    3.段的分类

    段(数据段,代码段,系统段(系统段表(LDT段表,TSS段表),门描述符(调用门,中断门,陷阱门,任务门)))

    段描述符定义一个段。门描述符存放的是指向一个过程入口点的指针

    任务门:任务切换

    陷阱门:调用异常处理程序

    中断门:调用中断处理程序

    调用门:在不同的特权级之间实现受控的程序控制转移


    4.LDT是局部描述符表,GDT是全局描述符表

    LDT表是一种系统段,其描述符属于系统段描述符。

    每个存储LDT表的段,都必须在GDT中有一个段描述符和段选择符


    5.6个段寄存器分别是:代码CS, 栈SS, 数据DS, 通用ES,GS,FS


    6.

      W/R 一致性
    代码段 在保护模式下不可写 一致性或非一致性
    栈段 必须可读可写  
    数据段 只读或可读可写 必须非一致性

    7.特权级越大,特权越低

    CPL:当前特权级,指当前运行的程序或任务的特权级

    DPL:描述符特权级,指目标段或门的描述符特权级

    RPL:请求特权级,指目标段或门的选择符特权级


    二、分页管理

    1.分页机制把张线性地址空间和物理空间划分成页面

    分页机制是页面-页面的映射,地址-地址的转换


    2.页面大小为4K

    页面数为2^20 = 2^(32-12)

    页表项大小为4B = 32 / 8

    页表大小为4MB = 2^20 * 4


    3.使用二级页表并没有解决需要4MB来存放页表项的问题,它的作用是:

    (1)不需要连续的4B空间

    (2)目标表页面必须在内存中,但二级页表可以不在内存中


    4.线性地址格式:10位PD+10位PT+12位offset

    页表项结构:20位物理地址+12位标志位

    页面大小:2^offset = 4K

    页框数:2^32 / 2^12 = 2^20

    页表项大小:32位 / 8 = 4B

    页表总大小:2^20 * 4B = 4MB

    一页页表包含的页表项:4K / 4B = 1024

    计算公式见Linux2.6虚拟内存管理


    5.为什么在页表项结构中记录的物理地址是20位的?

    答:因为这个地址与页面大小对齐,因此低12位一定是0,没有意义。这12位用来做标志位


    6.线性地址 -> 物理地址

    (1)寄存器cr3 -----> 页目录表的基址

    (2)线性地址高10位 -----> 页目录表的偏移量

    (3)(1)+(2)-----> 页目录表的某一项 -----> 页表的基址

    (4)线性地址中间10位 -----> 页表的偏移量

    (5)(3)+(4)-----> 页表中的一项 -----> 页面的的基址

    (6)线性地址中的低12位 -----> 页面中的偏移量

    (7)(5)+(6)-----> 页面中的某个位置,这个位置的地址就是所求的物理地址

    (1)(3)(5)的地址都是指物理地址



    14.为了减少地址转换所需要的总线周期数,最近访问的页目录和页表会存放在TLB中

  • 相关阅读:
    从SAPI 5.1中提取中文发音引擎
    多图:你没见过的古董级PC(zz)
    难搞的证书
    原来VS.Net 2005正式版真的发布了
    Google要改进OpenOffice 并公布其搜索计算数据中心细节(zz)
    AMD CPU市占率突破20%!(zz)
    重定向页面会Alert()不了?
    忍无可忍,希望大家不要来苏州园区工作
    MSN登陆不了怎么办
    网易126免费域名去广告
  • 原文地址:https://www.cnblogs.com/windmissing/p/2559852.html
Copyright © 2020-2023  润新知