博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux2.6-4G的线性地址空间的分配与使用
阅读量:4936 次
发布时间:2019-06-11

本文共 965 字,大约阅读时间需要 3 分钟。

一、4G线性空间的使用

1.0-3G属于用户空间,无论是用户态还是内核态都可以寻址,但是内核一般不访问这里的数据

3-4G属于系统空间,只有内核态的进程才可以访问。

二、系统空间

1.3G-4G的系统空间的使用

(1)3G ----- 3G+high_memory:对前896MB RAM进程映射的线性地址

(2)high_memory ----- PKMAP_BASE:非连续内存区。两个区间之间有4KB或8KB的空隔,是为了捕获对内存的越界访问

(3)PKMAP_BASE ----- FIXADDR_START:永久内核映射

(4)FIXADDR_START ----- 4G:固定映射的线性地址

2.高端内存的页框的内核映射 ----- 物理地址中的ZONE_HIGHMEM怎么与系统空间中的128MB建立映射?

(1)永久内核映射

原理:使主内核页表中的一个专门的页表来建立映射,最多可映射2MB或4MB(开启PAE)

缺点:如果页表是没有空闲的项来建立这种映射,就会阻塞当前进程,因此不能用于中断处理程序或可延迟函数

(2)临时内核映射

原理:每个CPU包含13个窗口,高端内存的任意一页页框可以通过一个窗口来建立映射。

这13个窗口仅限于当前内核控制路径使用,因此在使用过程中不能被阻塞

优点:从不阻塞当前进程

缺点:同时只能建立13个,数量比较少。且使用它的内核控制路径不能阻塞

(3)非连续内存分配

每个非连续内存区用一个vm_struct来描述符,

分配时,先申请一个vm_struct,并为其分配页框,最后修改页内核使用的页表

四、

只要处于内核态的一个进程为“高端”线性地址修改了页表项,就相应地更新系统中所有进程页表集合中相应的表项

每一个高端地址必须被重新映射时,内核就更新主内核页全局目录中的常规页表集合

三、用户空间

1.0 - 3G的用户空间的分配

从0G开始依次是代码段、数据段、BSS段,从3G往下是堆栈

通过mm_struct来管理其线性空间,每一个区间用vma_struct来表示。vma_struct构成一棵红黑树

进程所拥有的线性地址不重叠

转载于:https://www.cnblogs.com/windmissing/archive/2012/05/29/2559809.html

你可能感兴趣的文章
CSS——(2)与标准流盒模型
查看>>
linux命令:ls
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
灰度图像和彩色图像
查看>>
argparse - 命令行选项与参数解析(转)
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
java只能的round,ceil,floor方法的使用
查看>>
将txt文件转化为json进行操作
查看>>
我的2014-相对奢侈的生活
查看>>
Java设计模式
查看>>
mysql-This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
查看>>
基本概念复习
查看>>
红黑树
查看>>
【数据库】
查看>>
WindowManager.LayoutParams 详解
查看>>
安卓中数据库的搭建与使用
查看>>
.NET 设计规范--.NET约定、惯用法与模式-2.框架设计基础
查看>>
sql 内联,左联,右联,全联
查看>>