【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解

这篇具有很好参考价值的文章主要介绍了【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

大家好吖,欢迎来到 YY 滴 系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁
主要内容含:
【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

  • YY的《C++》专栏
  • YY的《C++11》专栏
  • YY的《Linux》专栏
  • YY的《数据结构》专栏
  • YY的《C语言基础》专栏
  • YY的《初学者易错点》专栏
  • YY的《小小知识点》专栏
  • YY的《单片机期末速过》专栏
  • YY的《C++期末速过》专栏
  • YY的《单片机》专栏
  • YY的《STM32》专栏
  • YY的《数据库》专栏
  • YY的《数据库原理》专栏

一.什么是进程地址空间?

1.进程地址空间基本概念

  1. 每一个 进程 运行之后,都会有一个进程地址空间 的存在
  2. 进程地址空间是操作系统OS 给进程花的大饼 欺骗进程他有足够的空间用——使每个进程都认为自己独占系统内存资源。(即虚拟空间)
  3. 结论:进程地址空间并不是物理内存,而是 虚拟内存 的一部分(虚拟地址,不具备存储能力)
  • 进程地址空间本质上是一种 抽象概念 ,用于描述进程如何看待和使用内存。
  1. 每个进程都有自己的内存地址范围,这样就不会与其他进程发生冲突。进程地址空间通常被划分为几个部分,包括代码段、数据段、堆和栈等,每个部分都有其特定的用途。
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb

2.mm_struct 基本概念

  1. 进程地址空间需要被操作系统OS 管理 起来,每一个进程都有地址空间,需要 被先描述再组织 ,因此地址空间是一个内核的 数据结构(内核结构体) ,即我们接下来要提到的 mm_struct
  2. 先描述再组织原理博客:【Linux】程序员一定要了解的计算机管理理念——描述与组织(9)

3.mm_struct/进程地址空间 实现“区域划分”的原理

  1. mm_struct 及其实现区域划分的原理: 对一段线性空间设置start与end
  • 我们在这里举个例子:小胖和小花同学要对座位进行“区域划分”,我们 从计算机语言角度如何实现呢?
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb
  • 如下所示,我们通过将其 描述成结构体 对一段线性空间设置start与end,实现了区域划分
struct destop_area
{
    int total size;
    int xiaopang_start;
    int xiaopang_end;
    int xiaohua start;
    int xiaohua end;
}

struct destop_area area={100,0,50,50,100};
  • 我们打开linux内核结构体源码,也可以找到证明
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb

二.什么是页表?

1.页表基本概念

  • 引入:进程地址空间即虚拟地址,不具备存储能力
  1. 因此操作系统OS会对每个进程维护一张 映射表 对应着虚拟地址和物理地址 ,这就是 页表
  2. 页表是一种特殊的数据结构,它位于系统空间的页表区
  3. 页表还具有 权限控制 的功能,可以通过设置页表项的 权限位,实现对内存的读、写、执行等操作的控制。
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb

2.进程是如何和“页表”进行联系?

  • 进程各种访问寻址的前提, 一定是它在cpu上运行
  • cpu上有个 特殊寄存器cr3 ,他会保存页表地址,物理地址(页表地址会保存在进程的上下文当中)
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb

3.每个进程都有页表,页表在“进程切换”如何跟踪

根据第二小点内容:

  • 答: 经过cpu后,页表地址加载到上下文中保存好, 一起切换
  • 原理:进程切换时,地址也会被保存。

三.地址空间&页表的作用机理

1.地址空间&页表的基本原理

  • 如图:
  • 页表的主要作用是将虚拟地址空间映射到物理内存空间,实现虚拟地址到物理地址的转换。
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb

2.【页表实验1】探究为什么一对父子进程,同样虚拟地址,读取数据不同?(OS对页表的调整)

  • 我们经过fork,子进程经过写时拷贝会将页表 完整拷贝 下来一份
    (写时拷贝博客:【C++】STL容器——【深浅拷贝】与【写时拷贝】对比详解(拷贝构造)(10))
  • 因为 进程具有独立性 ,我们进行写入操作时,我们无法通过子进程修改父进程(对应同一块物理内存)
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb
  • 于是,操作系统会单独给子进程开辟一块新的物理地址
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb

3.【页表实验2】为什么可执行程序中有大量代码和数据,加载到内存任意位置都可以,不用考虑顺序位置(页表映射功能)

  • 答:地址空间,以无序变有序——是加载到内存任意位置都可以,不用考虑顺序位置, 因为都会被页表映射
  • 【减小内存管理成本,没有页表每次都要变化pcb】
  • 分析:进程地址空间, 让进程以统一的视角看待内存
  • 一个进程,可以通过地址空间+页表可以将 乱序/乱序 的内存数据,变成 有序 ,分门别类的规划好!【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb

4.【页表实验3】为什么字符常量区不可被修改?它曾经是如何被修改的?(页表的权限控制功能)

  • 我们运行下面所示程序,程序会崩溃
int main()
{
  char *str= “hello Linux”;   //常量区曾经是如何被修改的?
  *str= 'H';   //常量区不可被修改
 
  return 0;
}
  • 核心原理:页表还具有 权限控制 的功能,可以通过设置页表项的 权限位,实现对内存的读、写、执行等操作的控制。
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb

问:为什么程序会崩溃?

  • 答:语言程度上:字符常量区不可被修改
  • 答:进程地址空间上: 页表权限设置 只读 ,所以不可被修改

问:曾经又是如何被加载的?

  • 答:进程地址空间上: 页表权限设置 可读写 ,所以可以被修改

5.【页表实验4】一个游戏的大小远比内存大,他在内存中如何加载呢?(页表如何实现linux挂起状态)

  • 系统并不需要全部将其加载到内存中,加载一部分/不加载,需要时加载
  • 其中涉及到挂起状态

页表如何实现linux挂起状态?

  • 页表中有一个字段, 标志内存是否要分配空间 && 有内容
  • 例如:00 01 11 10 二进制形式来表示【是否分配&& 有内容】【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb
  • 页表实现linux挂起状态
  • 把原来的11状态变成00状态
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb

6.【页表实验5】缺页中断(进程地址空间建立“进程管理”与“内存管理”的联系)【全流程配图详解】(重点)

全流程讲解:文章来源地址https://www.toymoban.com/news/detail-861865.html

  1. 当前有个进程开始访问,通过cpu得到了页表的地址,访问页表,想找到物理地址
  2. 此时页表并没有物理地址,属于缺页;于是进入暂停状态
  • 假设此时状态为下图
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb
  1. 这时操作系统就把磁盘中的程序加载到内存中,并把物理地址填入缺失的页中
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb
  2. 此时属于"已分配(物理地址)"状态,标志位置1
    【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb
  • 结论:进程地址空间建立进程管理与内存管理的联系【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解,YY滴 《Linux系列》,linux,数据库,mongodb

到了这里,关于【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】地址空间&&虚拟地址

    个人主页 : zxctscl 如有转载请先通知 先先来一个测试代码: 编译运行: 子进程把数据改了,父进程的数据没有改变,但是父子地址是一样的。 这个地址绝对不是物理地址,理论上修改了数据为300之后不可能在输出有100,访问一个地址怎么可能又是100也是300。这个地址在系

    2024年04月22日
    浏览(22)
  • Linux虚拟地址空间

    运行结果 上述代码为,创建子进程,若干秒后,子进程改变全局变量值,发现子进程与父进程打印此全局变量值时, 值不同,且地址相同 。 同一个地址处的值在同一时刻不可能不同,于是引出了虚拟地址空间的概念。即这里子进程与父进程打印的地址并非实际的物理地址,

    2024年01月25日
    浏览(32)
  • 【Linux】虚拟地址空间

    对于C/C++程序,我们眼中的内存是这样的: 我们利用这种对于与内存的理解看一下下面这段代码: 运行结果: 观察父子进程中 val 变量的值,以及 val 的地址,我们发现父子进程中 val 的地址都是同一个地址 但是 val 的值并不相同,这是什么意思???内存中同一个地址却存

    2023年04月08日
    浏览(25)
  • 【操作系统基础】【CPU访存原理】:寄存 缓存 内存 外存、内存空间分区、虚拟地址转换、虚拟地址的映射

    存储器怎么存储数据、内存空间分区、虚拟地址转换 计算机的存储器:寄存 缓存 内存 外存(按功能划分) 计算机的处理器需要一个存储器来存储大量的指令和数据以便自己不断取指执行和访问数据。 内存 (内存就是运行内存,如手机的8G运行内存,电脑的16G运行内存)就

    2024年01月25日
    浏览(30)
  • Linux内核源码分析 (B.2)虚拟地址空间布局架构

    Linux内核只是操作系统当中的一部分,对下管理系统所有硬件设备,对上通过系统调用向 Library Routine 或其他应用程序提供API接口。 内存管理可以通过以下三个维度进行介绍: 用户空间 相当于应用程序使用 malloc() 申请内存,通过 free() 释放内存。 malloc() / free() 是 glibc 库的内

    2024年02月09日
    浏览(39)
  • 每天40min,我们一起用70天稳扎稳打学完《JavaEE初阶》——1/70 第一天【进程和线程】【虚拟地址空间】

    专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示:重难点★✔ 蓝色文字表示:思路以及想法★✔ 如果大家觉得有帮助的话,感谢大家帮

    2024年02月15日
    浏览(18)
  • VMware 虚拟机中 Linux 系统Centos7磁盘空间扩容(亲测)

    例如之前虚拟机磁盘空间为30G,现要将磁盘容量设置为50G 打开虚拟机(必须处于关机状态),点击【编辑虚拟机设置】,然后点击【磁盘】,接着点击【扩展】,输入修改后的最大磁盘容量50G,具体操作时最大容量根据自己的需求设置即可。 输入完成最大磁盘容量后,点击

    2024年02月12日
    浏览(31)
  • 【Linux初阶】进程地址空间 | CUP与可执行程序的交互原理

     🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:计算机空间初识(子进程变量修改实验),感性理解进程虚拟地址空间,进程地址空间基础(概念、区域划分与调整、程序对内存数据的修改、按需分配虚拟地址空间),解答为什么存

    2024年02月05日
    浏览(60)
  • [vmware]vmware虚拟机压缩空间清理空间

    vmware中的ubuntu使用如果拷贝文件进去在删除,vmare镜像文件并不会减少日积月累会不断是的真实物理磁盘空间大幅度减少,比如我以前windows操作系统本来只有30GB最后居然占道硬盘200GB,清理方法有2种。 第一种:vmware界面操作 第二种:在虚拟机操作系统中利用wmware-tools进行操

    2024年02月05日
    浏览(21)
  • VMware虚拟机优化指南:macOS在虚拟机(VMware)中占用的空间越来越大,如何瘦身节省空间?

    我们在VMware虚拟机中安装macOS系统时,如果长时间的使用,物理机占用的空间会越来越大,即使你在macOS系统中删除了,卸载了,清空了回收站,但是物理机里的磁盘空间一点也没缩小,时间越长,占用的空间就越多。 遇到这样的问题,解决办法有二。 第一种办法,关闭mac

    2024年02月04日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包