0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

如意 来源:Linux学习 作者:佚名 2020-08-28 10:45 次阅读

linux 内存地址空间

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1) 段选择符

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

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

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

2) 分段实现

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

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

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

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

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

单页的大小为 4KB

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

6、用户态地址空间

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

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

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

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

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

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

STACK:用户进程栈

7、内核态地址空间

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

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

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

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

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

8、进程内存空间

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

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

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

责编AJX

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10986

    浏览量

    206711
  • 内存
    +关注

    关注

    8

    文章

    2762

    浏览量

    72742
  • 操作系统
    +关注

    关注

    37

    文章

    6274

    浏览量

    121859
收藏 人收藏

    评论

    相关推荐

    Linux内核地址映射模型与Linux内核高端内存详解

    Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟
    发表于 05-08 10:33 3326次阅读
    <b class='flag-5'>Linux</b>内核<b class='flag-5'>地址</b>映射模型与<b class='flag-5'>Linux</b>内核高端<b class='flag-5'>内存</b>详解

    Linux操作系统基础知识学习

    本文是我在学校自学Linux时所做的笔记,纯理论,希望对大家有所帮助。文章中,Q表示问题,A表示回答。Linux操作系统概述Q1.什么是GNU?Linux与GNU有什么关系?A:1.G
    发表于 11-30 10:43

    Linux内存系统---走进Linux 内存

    Linux内存系统---走进Linux 内存 1、内存
    发表于 08-26 08:05

    Linux操作系统

    linux的教学内容1 、Linux概述 2 、Linux操作系统安装3、 Linux的内核 4 、Li
    发表于 04-10 16:54 0次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>

    什么是Linux操作系统

    什么是Linux操作系统  简单地说,Linux是一套
    发表于 12-26 12:04 1371次阅读

    Linux下进程的内存结构

    Linux操作系统采用虚拟内存管理技术,使得每个进程都有各自互不干涉的进程地址空间。该地址
    发表于 06-01 09:17 1345次阅读
    <b class='flag-5'>Linux</b>下进程的<b class='flag-5'>内存</b>结构

    深入浅出Linux的进程地址空间

    我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核
    的头像 发表于 06-20 09:57 1772次阅读

    Linux操作系统知识讲解走进内存

    Linux操作系统知识讲解走进内存
    的头像 发表于 08-28 10:30 2121次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b><b class='flag-5'>知识</b><b class='flag-5'>讲解</b>:<b class='flag-5'>走进</b><b class='flag-5'>内存</b>

    Linux操作系统知识讲解走进Linux 内存分配算法

    Linux操作系统知识讲解走进Linux 内存分配
    的头像 发表于 08-28 10:57 5094次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b><b class='flag-5'>知识</b><b class='flag-5'>讲解</b>:<b class='flag-5'>走进</b><b class='flag-5'>Linux</b> <b class='flag-5'>内存</b>分配算法

    Linux操作系统知识讲解走进Linux 内存使用场景

    Linux操作系统知识讲解走进Linux 内存使用
    的头像 发表于 08-28 11:04 2691次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b><b class='flag-5'>知识</b><b class='flag-5'>讲解</b>:<b class='flag-5'>走进</b><b class='flag-5'>Linux</b> <b class='flag-5'>内存</b>使用场景

    Linux操作系统知识讲解:避免内存使用七大坑

    Linux操作系统知识讲解:避免内存使用七大坑
    的头像 发表于 08-28 11:12 2622次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b><b class='flag-5'>知识</b><b class='flag-5'>讲解</b>:避免<b class='flag-5'>内存</b>使用七大坑

    linux操作系统基础知识

    本文主要阐述了linux操作系统基础知识
    发表于 06-04 15:07 5774次阅读

    深入剖析Linux共享内存原理

    Linux系统中,每个进程都有独立的虚拟内存空间,也就是说不同的进程访问同一段虚拟内存地址所得到的数据是不一样的,这是因为不同进程相同的虚拟内存地
    的头像 发表于 10-30 09:52 1939次阅读
    深入剖析<b class='flag-5'>Linux</b>共享<b class='flag-5'>内存</b>原理

    Linux系统为什么需要引入虚拟地址

    Linux 系统中,采用了虚拟内存管理技术,事实上大多数现在操作系统都是如此!在 Linux 系统
    的头像 发表于 10-07 17:28 533次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>系统</b>为什么需要引入虚拟<b class='flag-5'>地址</b>

    什么是内存 操作系统内存介绍

    啦。 简而言之,电脑上的程序(进程)运行是需要使用到对应大小的物理内存。 虚拟内存 实际上运行的进程并不是直接使用物理内存地址,而是把进程使用的内存地址与实际的物理
    的头像 发表于 10-09 16:23 487次阅读
    什么是<b class='flag-5'>内存</b> <b class='flag-5'>操作系统</b><b class='flag-5'>内存</b>介绍