Linux2.6

Wesley13
• 阅读 672

一、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构成一棵红黑树

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
亚瑟 亚瑟
3年前
IO多路复用
用户空间和内核空间Userspace(用户空间):用户程序的运行空间Kernelspace(内核空间):Linux内核的运行空间当进程运行在内核空间时就处于内核态,当进程运行在用户空间时就处于用户态。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。Kernelspace可以执行任意
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Linux内核编译及添加系统调用
1总体设计思路系统调用的本质是调用内核函数,以内核态运行程序。为了在内核态下运行,本实验针对Linux的内核进行修改,增加自定义系统调用函数实现用户态程序对任意进程的nice值进行修改或者读取来进行测试。2主要函数的接口设计核心态程序SYSCALL\_DEFINE3(mysetnice,pid\_t,pid,int,flag,i
Stella981 Stella981
3年前
Linux探秘之用户态与内核态
关注“aCloudDeveloper”云计算领域大小事,你都能尽在掌握 Unix/Linux的体系架构如下图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。!(https://oscimg.oschina.net/oscnet/5b4a8
Wesley13 Wesley13
3年前
IO模型详解
IO编程包括:文件读写操作StringIO和BytesIO内存中操作文件和目录OS序列化jsonpickling操作系统内核空间(缓冲区)收发数据:内核态(内核空间)》用户态用户空
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究