内存寻址(一)硬件寻址的基本原理:硬件中的分段和分页机制,控制寄存器CR0与CR3
https://www.baidu.com/s?word=CSDN&tn=91185032_hao_pg
摘要:本文讲述8086怎样进行芯片级别的内存寻址,Linux又是如何在这些硬件的基础上进行寻址的。本文主要讨论硬件和linux寻址的基本原理,后续将讨论分页机制的具体实现,内核如何给自己分配主存,怎样给进程分配线性地址。
一、寻址流程
逻辑地址经过分段单元形成线性地址,然后经过分页单元形成物理地址。
二、硬件中的分段
1.段选择符和段寄存器
32位的逻辑地址包含16位的段选择符和36位的偏移量。处理器的段寄存器用于存放段选择符。其中cs寄存器有一个重要功能:指明当前特权级。
2.段描述符
每个段由8位的段描述符表示,存放在GDT和LDT中,GDT和LDT在主存中的位置和大小存放在gdtr和ldtr寄存器中。
关于段选择符和段描述符,可以参考:保护模式编程之(一)——分段机制与GDT/LDThttp://blog.csdn.net/trochiluses/article/details/8968750
快速访问段描述符
每当一个段选择符被装入寄存器的时候,相应的段描述符号就从内存装入相应的非编程CPU寄存器,从此,逻辑地址的转换不经过主存中的GDT或者LDT而是直接应用相关CPU寄存器即可。只有寄存器内容发生改变,才会访问GDT或者LDT。
3.分段单元
逻辑地址的转换过程如下:
三、硬件中的分页
i386 CPU实现内存管理的基本思路是通过页目录和页表两极映射实现从线性地址到物理地址的转换。原因:4GB的线性地址空间,如果我们采用一级映射,页大小是4K,那么需要的页表项数量为4G/4K=1M;另外,一个页表项的大小是8B,如此一个进程的页表需要的存储空间位8M。实际情况下,可能线性地址空间仅仅某一部分有效(例如0x00000000~0x0000ffff),此时如果采用二级页表,可以避免一些无用线性地址的映射(如果相应的线性地址无效,那么对应的页目录项设置为空)。
其中寄存器cr3用于存放当前进程正在使用的页目录基地址。dir用于指明目录项,table用于指明表项,offset用于指明页内偏移。8086处理器分页原理如下图:
页目录项和页表项有同样的结构;
它们都有4B共32b,具体布局如下:
其中每个位的作用如下:
P--位0是存在(Present)标志,用于指明表项对地址转换是否有效。P=1表示有效;P=0表示无效。在页转换过程中,如果说涉及的页目录或页表的表项无效,则会导致一个异常。如果P=0,那么除表示表项无效外,其余位可供程序自由使用,如图4-18b所示。例如,操作系统可以使用这些位来保存已存储在磁盘上的页面的序号。
R/W--位1是读/写(Read/Write)标志。如果等于1,表示页面可以被读、写或执行。如果为0,表示页面只读或可执行。当处理器运行在超级用户特权级(级别0、1或2)时,则R/W位不起作用。页目录项中的R/W位对其所映射的所有页面起作用。
U/S--位2是用户/超级用户(User/Supervisor)标志。如果为1,那么运行在任何特权级上的程序都可以访问该页面。如果为0,那么页面只能被运行在超级用户特权级(0、1或2)上的程序访问。页目录项中的U/S位对其所映射的所有页面起作用。
A--位5是已访问(Accessed)标志。当处理器访问页表项映射的页面时,页表表项的这个标志就会被置为1。当处理器访问页目录表项映射的任何页面时,页目录表项的这个标志就会被置为1。处理器只负责设置该标志,操作系统可通过定期地复位该标志来统计页面的使用情况。
D--位6是页面已被修改(Dirty)标志。当处理器对一个页面执行写操作时,就会设置对应页表表项的D标志。处理器并不会修改页目录项中的D标志。
AVL--该字段保留专供程序使用。处理器不会修改这几位,以后的升级处理器也不会。
PAGE SIZE只用于页目录项,如果为1表示启用大页,2M或者4M
四、控制寄存器CR0与CR3
4.2CR2和CR3
内存寻址(一)硬件寻址的基本原理:硬件中的分段和分页机制,控制寄存器CR0与CR3相关推荐
- Linux内存管理:内存寻址之分段机制与分页机制
目录 Linux 内存寻址之分段机制 前言 分段到底是怎么回事? 实模式的诞生(16位处理器及寻址) 保护模式的诞生(32位处理器及寻址) IA32的内存寻址机制 寻址硬件 IA32的三种地址 MMU ...
- Linux内存管理之一 分段与分页
Linux内存管理之一 分段与分页 Posted on 2012-07-19 21:22 sin 阅读(3130) 评论(0) 编辑 收藏 引用 所属分类: Linux编程 现代操作系统的内存管理机 ...
- (转载)深入理解Linux中内存管理---分段与分页简介
首先,必须要阐述一下这篇文章的主题是Linux内存管理中的分段和分页技术. 来回顾一下历史,在早期的计算机中,程序是直接运行在物理内存上的.换句话说,就是程序在运行的过程中访问的都是物理地址.如果这个 ...
- 内存分段分页机制理解
现代操作系统,计算机内存是按照先分段再分页的方式管理的. 注意: 以下描述都是基于32位计算机进行描述的. 1. 分段 1) 程序直接使用物理地址的问题 考虑最原始,最直接的情况,程序中访问的地址都直 ...
- Linux内存管理1---内存寻址
1.前言 本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理. 本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础.虚拟地址空间的管理.物理地址空间的管理. 本 ...
- kvm架构详解--理解CPU、内存、IO虚拟化技术、处理器硬件支持
1. 简介 当前的主流虚拟化实现技术分为两种: VMM(虚拟化监控器)运行在硬件平台上,控制所有硬件并管理guest os.guest os运行在比VMM更高的级别.例如xen. VMM运行在宿主操作 ...
- 计算机简史,硬件组成及基本原理
计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备. ...
- CPU寻址范围(寻址空间)一系列问题
CPU寻址范围(寻址空间)一系列问题 标签: 存储硬件驱动电话制造产品 2012-02-26 16:09 14157人阅读 评论(1) 收藏 举报 分类: 计算机基础(1) 版权声明:本文为博主原创文 ...
- 指令系统寻址方式——指令寻址,数据寻址
前言 寻址方式是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法,它与硬件结构紧密相关,而且直接影响指令格式和指令功能. 一.寻址方式的分类 寻址方式分为:指令寻址和数据寻址两大类. 指令寻 ...
最新文章
- JDE函数--GetUDC(B函数)
- 新站长更要努力做好SEO相关的优化
- JSF框架在NetBeans下的编码
- 微信机器人 java 源码_三步轻松打造微信聊天机器人(附源码)
- 谨记2017年8月30日10:03:26
- 夯实基础,彻底掌握js的核心技术(一)
- Vue如何通过代理解决跨域问题
- 关于js对象添加属性
- 宏基4750网卡驱动linux,宏基4750g网卡驱动下载
- 在Colaboratory中使用ImageAI训练自己的数据集
- QQ连连看单机版辅助制作全流程
- Oracle函数返回Table集合
- 电路设计——电容作用
- 物联网系统网关开发与实现
- MySQL有几部分_数据库系统有哪几部分组成?
- python爬虫模拟登陆腾讯课堂
- 在线硬盘存储计算机,硬盘存储
- python文本数据分析-新闻分类任务
- 位(Bit)与字节(Byte)
- html的公共样式,HTML+CSS入门 CSS公共样式