深入理解Linux内核-内存寻址
1、逻辑地址怎么转换为线性地址的:
逻辑地址 = 段选择符(16bit)+偏移量(32bit) 段选择符又三部分组成:index(索引序号)、T1(表指示器)、RPL(request privilege level 请求者特权级) 索引序号:指向GDT(global descriptor table 全局描述符表)或者LDT(local descriptor table 局部描述符表)中的段描述符。 表指示器:标记指向GDT或者LDT RPL:分为用户态(3),或者内核态(0) 段描述符:64bit,主要字段 Base(段的首字节的线性地址 32bit)、Limit(段的长度)、DPL(描述特权级)等 段描述符的地址 = GDT(LDT)的地址(存放在gdtr、ldtr寄存器) + index * 8(因为一个段描述符8字节) 逻辑地址 = 段描述符中的Base + 偏移量 注意:1、linux 中很少使用分段,它偏向是否分页
2、主要的4个段分别为用户代码段、用户数据段、内核代码段、内核数据段
3、并且它们的Base值均为0,即所有到段的线性地址都从0开始
4、即Linux下逻辑地址的便宜量与对应的线性地址的值总是一致的
2、线性地址怎么转换为物理地址的?
页 :4096个字节,包含页内地址、数据 页框:物理页,4096字节,不含页内数据 分页:为了效率,线性地址被分成以固定长度为单位的页;页内部连续的线性地址映射到连续的物理地址;优点是内核可以对页指定存取权限,而不用对页中的所有线性地址指定 线性地址 = Directory(目录 10bit) + Table(页表 10bit) + offset(偏移量 12bit) offset: 12bit的偏移量就是一个页的大小,表示连续的4096个线性地址为一页 扩展分页:页目录(10bit)+ offset (偏移量 22bit); 去掉了中间页表,每一页的大小为4MB
深入理解Linux内核-内存寻址的更多相关文章
- 深入理解linux内核-内存寻址
逻辑地址:由一个段和偏移量组成的地址线性地址(虚拟地址):物理地址:CPU的物理地址线相对应的地址32或36位 多处理器系统中每个CPU对应一个GDT 局部线程存储:用于线程内部的各个函数调用都能访问 ...
- 【读书笔记::深入理解linux内核】内存寻址【转】
转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...
- 【读书笔记::深入理解linux内核】内存寻址
我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...
- 读书笔记之Linux系统编程与深入理解Linux内核
前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...
- 《深入理解Linux内核》 读书笔记
深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样. ...
- 深入理解Linux中内存管理
前一段时间看了<深入理解Linux内核>对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看 ...
- Linux内核内存管理算法Buddy和Slab: /proc/meminfo、/proc/buddyinfo、/proc/slabinfo
slabtop cat /proc/slabinfo # name <active_objs> <num_objs> <objsize> <objpersla ...
- linux内核内存分配(三、虚拟内存管理)
在分析虚拟内存管理前要先看下linux内核内存的具体分配我開始就是困在这个地方.对内核内存的分类不是非常清晰.我摘录当中的一段: 内核内存地址 ============================ ...
- Linux内核-内存回收逻辑和算法(LRU)
Linux内核内存回收逻辑和算法(LRU) LRU 链表 在 Linux 中,操作系统对 LRU 的实现主要是基于一对双向链表:active 链表和 inactive 链表,这两个链表是 Linux ...
- LINUX内核内存屏障
================= LINUX内核内存屏障 ================= By ...
随机推荐
- 〖Linux〗多个JDK版本之间快速切换
由于工作的需要,经常要切换JDK版本比如我HOME目录下有三个JDK版本: ~/apt/jdk1..0_34 # JDK6 ~/apt/jdk1..0_67 # JDK7 ~/apt/jdk1..0_ ...
- JAVA正确的四舍五入方法
在JDK版本为1.8的情况运行下面的代码,会发现很神奇的情况(见运行结果). 看如下代码: package com.longge.mytest; import java.math.BigDecimal ...
- Arduino和C51开发LCD1602显示屏
技术:51单片机.Arduino.LCD1602 概述 本文介绍了LCD1602显示屏,并在LCD1602上显示字符串,对LCD1602常见的问题的解决和开发方法也做了简单介绍. 详细 代码下载: ...
- 在spring boot微服务中使用JWS发布webService
发布时间:2018-11-22 技术:Java+spring+maven 概述 在springboot微服务中使用JWS发布webService,在服务启动时自动发布webservice接口. ...
- windows下卸载mysql5.5,升级为mysql5.7.25
0. 停止mysql的服务 1. 卸载mysql5.5 1.1 使用360或者控制面板卸载mysql,为求干净,我使用的360,结果也需要手动清理 1.2 卸载完成之后到mysql的安装目录删掉该目录 ...
- js中的getBoundingClientRect()函数
在Chrome上,此函数返回结果包含x,y,它们的取值对应于left,top.但是x,y这种表示方式非常不直观(需要先理解x轴和y轴的方向),而left,top则清晰无歧义地表达了元素的位置.正是因此 ...
- Android开发环境内容汇总
Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...
- mysql 排序 oder by 和 使用hibernate 排序
String sql="select * from sys_invitation where to_phone = '13000000000' order by create_time de ...
- 做一个合格的Team Leader -- 领导和管理基本概念 三种激励手段:恐吓、贪念、承诺
做一个合格的Team Leader -- 基本概念 1.领导和管理 人们乐于被领导:他们不喜欢被管理,不喜欢像牛一样被驱赶或指挥. 管理者强迫人们服从他们的命令,而领导者则会带领他们一起工作. ...
- C语言连接MySQL数据库(转)
c++连接MySQL有两种方式,1是原始的方法,2是用 Connector c++ .Connector c++ 只是一种封装,使之更加方便. 1.原始方法 这里归纳了C API可使用的函数,并在下 ...