您的位置首页>企业动态>

Linux操作系统知识讲解:走进linux 内存地址空间

导读 大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux操作系统知识讲解:走进linux 内存地址空间问题。Linux内存地址空间。1、linu

音频解说

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux操作系统知识讲解:走进linux 内存地址空间问题。

Linux内存地址空间。

1、linux内存地址空间Linux内存管理概述。

2.内存地址——用户模式内核模式。

用户模式:在用户模式下运行的Ring3的代码受制于很多处理器。

内核状态:Ring0处于处理器的内存保护中。

从用户模式切换到内核模式有三种方式:系统调用、异常和外设中断。

区别:每个进程都有自己的、独立的、不受干扰的内存空间。用户模式程序不能随意操作内核地址空间,具有一定的安全保护功能。内核状态线程共享内核地址空间;

3.内存地址——的MMU地址转换。

MMU是一种硬件电路,它包含两个部分,一个是分段部分,另一个是分页部分。

分段机制将逻辑地址转换为线性地址。

分页机制将线性地址转换为物理地址。

4.内存地址——的分段机制。

1)段选择器。

为了快速检索段选择器,处理器提供六个段寄存器来缓存段选择器,它们是cs、ss、ds、es、fs和gs。

段的基址:线性地址空间中段的起始地址。

段的极限:虚拟地址空间中一个段内可以使用的最大偏移量。

2)分段实现。

逻辑段寄存器中的值提供段描述符,然后从段描述符中获得段基址和段边界,然后加上逻辑地址的偏移量,得到线性地址。

5.内存地址—— (32位)的分页机制。

分页机制在分段机制之后执行,进一步将线性地址转换为物理地址。

10位页目录、10位页表条目、12位页偏移地址。

页面大小为4KB。

6.用户模式地址空间。

文本:代码段可执行代码,字符串文字值,只读变量。

数据:数据段,映射器中初始化的全局变量。

BSS段:保存程序中未初始化的全局变量。

HEAP:运行时的堆,它使用malloc在程序运行期间应用的内存区域。

MMAP:共享库和匿名文件的映射区。

STACK:用户进程堆栈。

7.内核状态下的地址空间。

直接映射区:线性空间中距离3G最大间隔896M,为直接内存映射区。

动态内存映射区域:该区域由内核函数vmalloc分配。

永久内存映射区:这个区域可以访问高端内存。

固定映射区:这个区域距离4G顶部只有4k。

离带,其每个地址项都服务于特定的用途,如:ACPI_BASE 等

8、进程内存空间

用户进程通常情况只能访问用户空间的虚拟地址,不能访问内核空间虚拟地址

内核空间是由内核负责映射,不会跟着进程变化;内核空间地址有自己对应的页表,用户进程各自有不同额页表

责编AJX

linux 内存地址空间

1、linux 内存地址空间 Linux 内存管理全貌

2、内存地址——用户态&内核态

用户态:Ring3 运行于用户态的代码则要受到处理器的诸多

内核态:Ring0 在处理器的存储保护中,核心态

用户态切换到内核态的 3 种方式:系统调用、异常、外设中断

区别:每个进程都有完全属于自己的,独立的,不被干扰的内存空间;用户态的程序就不能随意操作内核地址空间,具有一定的安全保护作用;内核态线程共享内核地址空间;

3、内存地址——MMU 地址转换

MMU 是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件

分段机制把一个逻辑地址转换为线性地址

分页机制把一个线性地址转换为物理地址

4、内存地址——分段机制

1) 段选择符

为了方便快速检索段选择符,处理器提供了 6 个分段寄存器来缓存段选择符,它们是:cs,ss,ds,es,fs 和 gs

段的基地址(Base Address):在线性地址空间中段的起始地址

段的界限(Limit):在虚拟地址空间中,段内可以使用的最大偏移量

2) 分段实现

逻辑地址的段寄存器中的值提供段描述符,然后从段描述符中得到段基址和段界限,然后加上逻辑地址的偏移量,就得到了线性地址

5、内存地址——分页机制(32 位)

分页机制是在分段机制之后进行的,它进一步将线性地址转换为物理地址

10 位页目录,10 位页表项, 12 位页偏移地址

单页的大小为 4KB

6、用户态地址空间

TEXT:代码段可执行代码、字符串字面值、只读变量

DATA:数据段,映射程序中已经初始化的全局变量

BSS 段:存放程序中未初始化的全局变量

HEAP:运行时的堆,在程序运行中使用 malloc 申请的内存区域

MMAP:共享库及匿名文件的映射区域

STACK:用户进程栈

7、内核态地址空间

直接映射区:线性空间中从 3G 开始最大 896M 的区间,为直接内存映射区

动态内存映射区:该区域由内核函数 vmalloc 来分配

永久内存映射区:该区域可访问高端内存

固定映射区:该区域和 4G 的顶端只有 4k 的隔离带,其每个地址项都服务于特定的用途,如:ACPI_BASE 等

8、进程内存空间

用户进程通常情况只能访问用户空间的虚拟地址,不能访问内核空间虚拟地址

内核空间是由内核负责映射,不会跟着进程变化;内核空间地址有自己对应的页表,用户进程各自有不同额页表

责编AJX

.dfma { position: relative; width: 1000px; margin: 0 auto; } .dfma a::after { position: absolute; left: 0; bottom: 0; width: 30px; line-height: 1.4; text-align: center; background-color: rgba(0, 0, 0, .5); color: #fff; font-size: 12px; content:"广告"; } .dfma img { display: block; }
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。