zoukankan      html  css  js  c++  java
  • 汇编学习笔记(22)

    简述

      前面提到的分段机制获得了虚拟地址,那么分页直接就是实现了虚拟地址到物理地址的映射,因为枫叶机制可以被关闭,那么此时就相当于虚拟地址一对一的直接映射到物理地址上了

      页固定位4K对齐,所以一个32位虚拟地址前20位用来寻找对应的页,后12位作为页内偏移用来定位具体位置。

    分页机制

      分页机制有两张表,一张叫页目录表,一张叫页表,两个表的表项都采用相同的结构,一个表项32位 4字节

      这里的物理地址用20位表示,因为页都是4K对齐的,也就是说个页的开头后12位总是全0,所以只需要20位即可表示页地址,20地址左移12位就是实际的物理地址。

      A位表示数据是否被访问过,CPU每次访问该也都会将此位置为1,操作系统可以通过周期性的将其该为零,等待CPU重新置位1来判断哪些页使用比较繁忙,依次作为换页依据

      D位表示数据被写过了,操作用系统可以依次为判断依据决定,此页是否需要回写到磁盘文件中

      U/S 位可以用来驱动用户态页和系统页,依次隔离用户程序的权限

      R/W页可以用来控制是否可写来保护数据

        此位还可以用于实现 写时复制功能,将页设为只读,当应用程序尝试写的时候就会触发异常中断,异常处理程序就可以复制此页的物理内存并从定向至新物理内存,同时允许写此页,这样就完成了写时复制功能。  

      P位表示此想描述的页在物理内存中是否正式存在,如果不存在当访问的时候就会出现缺页中断,缺页处理程序处理完之后需要将此为重新置位1,CPU就能继续跑下去了。

     转换方式

      

      

    STEP1. 首先将32位的地址裁切成 [10位][10位][12位]  的三份,为表述方便即为X,Y,Z

    STEP2. 通过CR3找到页目录,并用X作为索引乘上 4,找到对应的页目录项

    SETP3. 取出页目录项中断物理地址得到页表

    SETP4. 使用Y作为索引乘上4 在页表中找到页表项

    SETP5. 从页表项中取出内存也的地址

    SETP5. 直接使用Z在内存页中定位

     其他说明

    注意:

    1. 页表中寻址都是使用的物理地址,因为也变本本身就是用作虚拟地址防疫到物理地址的,如果页表还用虚拟地址,就无线重入了。

    2. 这只是80386提供的分页管理功能,80386都是老的不能再老CPU了,现在都64位的,分页机制肯定变化很大。

  • 相关阅读:
    fetch API 和 ajax
    java 通过数据库名获得 该数据所有的表名以及字段名、字段类型
    自定义注解,通过反射获得注解中的值(详细自定义注解解释)
    main方法中sleep
    eclipse中设置JVM内存
    命令java 找不到或无法加载主类
    windows下的命令
    mac terminal基本命令
    ThreadLocal 源码剖析
    SQL中的函数用法
  • 原文地址:https://www.cnblogs.com/alwaysking/p/12348322.html
Copyright © 2011-2022 走看看