首页 > 汇编语言 > 汇编语言MS-Windows编程
阅读:157
汇编语言页转换:线性地址转换位物理地址
若允许分页,则处理器必须将 32 位线性地址转换为 32 位物理地址。这个过程会用到 3 种结构:
为了简化下面的叙述,假设页面大小为 4KB:
线性地址分为三个字段:页目录表项指针、页表项指针和页内偏移量。控制寄存器(CR3)保存了页目录的起始地址。如下图所示,处理器在进行线性地址到物理地址的转换时,采用如下步骤:
1) 线性地址引用线性地址空间中的一个位置。
2) 线性地址中 10 位的目录字段是页目录项的索引。页目录项包含了页表的基址。
3) 线性地址中 10 位的页表字段是页表的索引,该页表由页目录项指定。索引到的页表项包含了物理内存中页面的基址。
4) 线性地址中 12 位的偏移量字段与页面基址相加,生成的恰好是操作数的物理地址。
操作系统可以选择让所有的运行程序和任务使用一个页目录,或者选择让每个任务使用一个页目录,还可以选择为两者的组合。
虚拟机管理器(VMM)是 Windows 内核中的 32 位保护模式操作系统。它创建、运行、监视和终止虚拟机。它管理内存、进程、中断和异常。它与虚拟设备(virtual device)一起工作,使得它们能拦截中断和故障,以此来控制对硬件和已安装软件的访问。
VMM 和虚拟设备运行在特权级为 0 的单一 32 位平坦模式地址空间中。系统创建两个全局描述符表项(段描述符),一个是代码段的,一个是数据段的。段固定在线性地址 0。VMM 提供多线程和抢先多任务处理。通过共享运行应用程序的虚拟机之间的 CPU 时间,它可以同时运行多个应用程序。
在上面的文字中,可以将虚拟机解释为 Intel 中的过程或任务。它包含了程序代码、支撑软件、内存和寄存器。每个虚拟机都被分配了自己的地址空间、I/O 端口空间、中断向量表和局部描述符表。运行于虚拟 8086 模式的应用程序特权级为 3。Windows 中保护模式程序的特权级为 0 和 3。
- 页目录:一个数组,最多可包含 1024 个 32 位页目录项。
- 页表:一个数组,最多可包含 1024 个 32 位页表项。
- 页:4KB 或 4MB 的地址空间。
为了简化下面的叙述,假设页面大小为 4KB:
线性地址分为三个字段:页目录表项指针、页表项指针和页内偏移量。控制寄存器(CR3)保存了页目录的起始地址。如下图所示,处理器在进行线性地址到物理地址的转换时,采用如下步骤:
1) 线性地址引用线性地址空间中的一个位置。
2) 线性地址中 10 位的目录字段是页目录项的索引。页目录项包含了页表的基址。
3) 线性地址中 10 位的页表字段是页表的索引,该页表由页目录项指定。索引到的页表项包含了物理内存中页面的基址。
4) 线性地址中 12 位的偏移量字段与页面基址相加,生成的恰好是操作数的物理地址。
操作系统可以选择让所有的运行程序和任务使用一个页目录,或者选择让每个任务使用一个页目录,还可以选择为两者的组合。
Windows 虚拟机管理器
现在对 IA-32 如何管理内存已经有了总体了解,那么看看 Windows 如何处理内存管理可能也会令人感兴趣。虚拟机管理器(VMM)是 Windows 内核中的 32 位保护模式操作系统。它创建、运行、监视和终止虚拟机。它管理内存、进程、中断和异常。它与虚拟设备(virtual device)一起工作,使得它们能拦截中断和故障,以此来控制对硬件和已安装软件的访问。
VMM 和虚拟设备运行在特权级为 0 的单一 32 位平坦模式地址空间中。系统创建两个全局描述符表项(段描述符),一个是代码段的,一个是数据段的。段固定在线性地址 0。VMM 提供多线程和抢先多任务处理。通过共享运行应用程序的虚拟机之间的 CPU 时间,它可以同时运行多个应用程序。
在上面的文字中,可以将虚拟机解释为 Intel 中的过程或任务。它包含了程序代码、支撑软件、内存和寄存器。每个虚拟机都被分配了自己的地址空间、I/O 端口空间、中断向量表和局部描述符表。运行于虚拟 8086 模式的应用程序特权级为 3。Windows 中保护模式程序的特权级为 0 和 3。
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频