【Linux】10. 进程地址空间

简介: 【Linux】10. 进程地址空间

1. 虚拟地址的引出

在这里插入图片描述

2. 感性理解

在这里插入图片描述

3. 区域划分

在理解虚拟地址空间之前首先了解区域划分是什么
在这里插入图片描述
在小学期间的三八线,让桌子分割成两个区域,类比到地址空间也是这样划分的。
操作系统需要对进程管理,进程存在不同的区域映射不同的虚拟地址
在这里插入图片描述
这块虚拟地址空间的大小就是2^32^个字节,heap(堆)/stack(栈)所谓的区域调整,其本质就是修改各个区域的end或者start
定义局部变量(压栈)或者malloc/new堆上的空间 ------>扩大栈区或者堆区空间
函数调用完毕(出栈)或者free释放资源 ------> 缩小栈区或者堆区空间

4. 理性理解

在这里插入图片描述
(其中页表不仅仅只是单纯的映射还可以对非法访问物理地址空间的行为进行拦截)

5. 存在虚拟地址空间的原因

5.1 安全性和独立性

在这里插入图片描述

5.2 编译器和CPU

在这里插入图片描述
让进程以统一的视角来看待进程对应的代码和数据等各个区域,方便CPU使用,编译器也以统一的视角来编译代码
二者规则是一致的,编译完即可使用

正是以上这三种原因,所以导致虚拟地址的存在,主要是为了保护代码和数据,使得进程运行时不相互打扰
==当我们在windows操作系统下使用vs2019进行调试时运行起来进行调试时,CPU内部的寄存器使用的就是虚拟地址(监视窗口显示的是虚拟地址&xxx)==

6. 解决父子进程独立性的问题

最开始我们的问题引出就是通过父子进程访问同样地址空间发现居然存在不同的值才有的虚拟地址空间的概念,现在需要解释该现象
在这里插入图片描述
父子进程的虚拟地址空间是一样的,但是子进程修改了全局数据导致发生写时拷贝导致二者虚拟地址指向的并不是一块物理地址空间
所以在显示器上看到的相同地址存在不同值(相同地址指的是虚拟地址空间)
到这里,我们才真正理解进程的独立性。
==正是因为进程具有独立性,一个进程对被共享得到数据进行修改,如果影响其他进程则无法称之为独立性==

拓展

现在的计算机的逻辑地址都是采用2^32^ 个地址空间将代码区和数据区分割开(ELF格式)
老版本的计算机代码区和数据区采用的是偏移量的形式
每次转换成物理地址都是根据区域加上偏移量来获取的
在这里插入图片描述

相关文章
|
26天前
|
资源调度 Linux 调度
Linux c/c++之进程基础
这篇文章主要介绍了Linux下C/C++进程的基本概念、组成、模式、运行和状态,以及如何使用系统调用创建和管理进程。
29 0
|
1天前
|
缓存 监控 Linux
linux进程管理万字详解!!!
本文档介绍了Linux系统中进程管理、系统负载监控、内存监控和磁盘监控的基本概念和常用命令。主要内容包括: 1. **进程管理**: - **进程介绍**:程序与进程的关系、进程的生命周期、查看进程号和父进程号的方法。 - **进程监控命令**:`ps`、`pstree`、`pidof`、`top`、`htop`、`lsof`等命令的使用方法和案例。 - **进程管理命令**:控制信号、`kill`、`pkill`、`killall`、前台和后台运行、`screen`、`nohup`等命令的使用方法和案例。
19 4
linux进程管理万字详解!!!
|
2天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
3天前
|
消息中间件 存储 Linux
|
9天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
10 1
|
21天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
【10月更文挑战第9天】本文将深入浅出地介绍Linux系统中的进程管理机制,包括进程的概念、状态、调度以及如何在Linux环境下进行进程控制。我们将通过直观的语言和生动的比喻,让读者轻松掌握这一核心概念。文章不仅适合初学者构建基础,也能帮助有经验的用户加深对进程管理的理解。
16 1
|
26天前
|
消息中间件 Linux API
Linux c/c++之IPC进程间通信
这篇文章详细介绍了Linux下C/C++进程间通信(IPC)的三种主要技术:共享内存、消息队列和信号量,包括它们的编程模型、API函数原型、优势与缺点,并通过示例代码展示了它们的创建、使用和管理方法。
22 0
Linux c/c++之IPC进程间通信
|
26天前
|
Linux C++
Linux c/c++进程间通信(1)
这篇文章介绍了Linux下C/C++进程间通信的几种方式,包括普通文件、文件映射虚拟内存、管道通信(FIFO),并提供了示例代码和标准输入输出设备的应用。
17 0
Linux c/c++进程间通信(1)
|
26天前
|
Linux C++
Linux c/c++之进程的创建
这篇文章介绍了在Linux环境下使用C/C++创建进程的三种方式:system函数、fork函数以及exec族函数,并展示了它们的代码示例和运行结果。
28 0
Linux c/c++之进程的创建
|
26天前
|
Linux C++
Linux c/c++进程之僵尸进程和守护进程
这篇文章介绍了Linux系统中僵尸进程和守护进程的概念、产生原因、解决方法以及如何创建守护进程。
16 0