【探索Linux】—— 强大的命令行工具 P.8(进程地址空间)

在这里插入图片描述

阅读导航

  • 前言
  • 一、内存空间分布
  • 二、什么是进程地址空间
    • 1. 概念
    • 2. 进程地址空间的组成
  • 三、进程地址空间的设计原理
    • 1. 基本原理
    • 2. 虚拟地址空间
      • · 概念
      • · 大小和范围
      • · 作用
      • · 虚拟地址空间的优点
    • 3. 页表
  • 四、为什么要有地址空间
  • 五、总结
  • 温馨提示

前言

前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的一些知识,也学习了一些Linux的基本操作,也了解并学习了有关Linux开发工具vim 、gcc/g++ 使用、yum工具以及git 命令行提交代码也相信大家都掌握的不错,上一篇文章我们了解了关于进程的基本概念,今天博主带大家了解一下 —— 进程地址空间, 下面话不多说坐稳扶好咱们要开车了!!!😍

一、内存空间分布

  1. 内核空间(Kernel Space):也被称为系统空间,这是操作系统的核心部分。在内核空间中,操作系统运行,并且拥有最高权限。它包含操作系统的内核代码、驱动程序和关键系统数据结构。只有操作系统和特权级的程序能够直接访问内核空间。

  2. 用户空间(User Space):这是用于运行用户应用程序的区域。大多数应用程序和进程在用户空间中运行,受到操作系统的保护机制的限制。用户空间包含应用程序的代码、数据和堆栈,以及用于动态分配内存的堆空间

  3. 栈空间(Stack Space):栈空间用于存储函数调用时的局部变量、参数和函数返回地址。每个进程在内存中都有一个独立的栈空间。栈空间是按照后进先出(LIFO)的原则进行管理。栈空间的大小通常是有限制的,并且在编译或运行时被设置。

  4. 堆空间(Heap Space):堆空间用于动态分配内存,例如通过调用malloc()new等函数分配的内存。堆空间的大小通常是由操作系统根据需求进行动态调整的。堆空间的管理是由程序员手动控制的,需要显示地分配和释放内存。在堆空间中,内存的分配和释放遵循不同的算法,如首次适应、最佳适应或最差适应等。

  5. 数据段(Data Segment):数据段用于存储全局变量静态变量。数据段可以进一步细分为已初始化数据段(Initialized Data Segment)和未初始化数据段(Uninitialized Data Segment),也称为BSS段(Block Started by Symbol)。已初始化数据段存储已经赋初值的全局变量和静态变量,而未初始化数据段存储初值为0或未明确初始化的全局变量和静态变量。

  6. 代码段(Code Segment):也称为文本段(Text Segment),用于存储可执行程序的机器指令。代码段通常是只读的,并且是共享的,多个进程可以共享相同的代码段,从而节省内存空间。

在这里插入图片描述

二、什么是进程地址空间

1. 概念

⭕进程地址空间是指操作系统为每个运行中的进程所分配的虚拟地址范围它是进程在内存中的抽象表示,包含了进程执行所需的代码、数据和堆栈等信息。每个进程拥有独立的地址空间,使得它们可以相互隔离地运行,并保护彼此的内存访问。进程地址空间是一种虚拟的概念,它提供了一种逻辑视图,使得进程可以像独占地拥有整个内存空间一样运行。

2. 进程地址空间的组成

⭕典型的进程地址空间由以下几个部分组成:

  1. 代码段:也称为文本段,用于存储可执行程序的机器指令。这部分地址空间是只读的,存放着程序的指令序列。

  2. 数据段:用于存储全局变量和静态变量。数据段可以进一步细分为已初始化数据段和未初始化数据段。

  3. 堆空间:用于动态分配内存。在堆空间中,程序员可以通过调用malloc()、new等函数来动态申请和释放内存。堆空间的大小是在运行时动态分配的。

  4. 栈空间:用于存储函数调用时的局部变量、参数和函数返回地址。每个函数的调用都会在栈上创建一个称为栈帧的数据结构。

  5. 共享库区:用于存放被多个进程共享的动态链接库或共享对象文件。这使得多个进程可以共享相同的库,从而节省内存空间。

三、进程地址空间的设计原理

1. 基本原理

  1. 虚拟化和地址映射:进程地址空间是通过虚拟化的方式实现的,将物理内存分配给进程时,使用一种地址映射技术将虚拟地址转换为物理地址。

  2. 分页和内存保护:分页是进程地址空间设计中的一种机制,将进程的虚拟地址空间划分为固定大小的页。这样做有助于优化内存的管理和使用,可以更有效地分配内存空间。

  3. 分段和逻辑隔离:分段是进程地址空间设计中的另一个主要机制,将进程的虚拟地址空间划分为不同的段,如代码段、数据段、堆段和栈段等。

  4. 共享内存和共享库:进程地址空间的设计还支持共享内存和共享库的机制。

  5. 动态分配和释放:进程地址空间的设计需要支持动态内存分配和释放,以满足进程在运行时对内存的需要。

在这里插入图片描述

2. 虚拟地址空间

· 概念

🍪虚拟地址空间是指每个进程独立拥有的抽象地址空间,它是进程在逻辑上(虚拟上)的地址范围。虚拟地址空间是一种相对于物理内存的概念,它给进程提供了一个连续的地址范围,而不考虑实际的物理内存地址

· 大小和范围

🍪在虚拟地址空间中,进程使用的地址被称为虚拟地址。虚拟地址空间的大小和范围依赖于操作系统和硬件架构,常见的大小为32位和64位。例如,在32位系统上,虚拟地址空间通常是4GB(2^32个地址),而在64位系统上,虚拟地址空间通常是更大的范围。

· 作用

🍪虚拟地址空间的设计使得每个进程可以独立地使用内存资源,从而实现了进程之间的隔离和保护。不同进程的虚拟地址空间可以相同,但其对应的物理内存地址是不同的,这样可以确保进程之间不会相互干扰。虚拟地址通过地址映射技术转换为物理地址

· 虚拟地址空间的优点

  1. 隔离性:虚拟地址空间使得每个进程可以独立地运行,不会相互干扰,提高了系统的安全性和稳定性。

  2. 内存管理:虚拟地址空间允许对内存进行更灵活的管理和分配,操作系统可以根据需求动态地分配和回收内存。

  3. 共享和保护:虚拟地址空间的设计支持共享内存和共享库的机制,进程可以共享同一块内存区域,并提供合适的保护机制以防止非法访问。

3. 页表

🍔页表(Page Table)是操作系统中用于虚拟地址到物理地址映射的数据结构。它用于记录虚拟地址的页面和相应的物理地址之间的映射关系。

在使用虚拟内存的系统中,每个进程都有自己的地址空间,其中包括一系列虚拟页。虚拟页被划分为固定大小的块,通常是4KB。页表的作用就是跟踪每个虚拟页与实际的物理页之间的对应关系

页表通常由多级结构组成,这是为了处理大型地址空间的需要。具体实现方式因操作系统而异,但通常包含以下几个主要组成部分:

  1. 页目录(Page Directory):页目录是一级结构,用于存储特定地址范围(例如4GB)内的页表地址。每个页目录项(Page Directory Entry)通常对应一个页表或者页表的一级索引,它记录了对应页表的物理地址。

  2. 页表(Page Table):页表是二级结构,用于存储特定范围内的虚拟页与物理页的映射关系。每个页表项(Page Table Entry)表示一个虚拟页与物理页的映射,它记录了对应物理地址的页框号和一些标志位(如读/写权限、缓存状态等)。

  3. 页框(Page Frame):页框是物理内存中的一块固定大小(与虚拟页大小相同)的区域,它是内存的最小单位。通过页表的映射,虚拟页可以对应到相应的物理页框。

⭕页表的设计和实现使得操作系统可以将虚拟内存的管理和物理内存的细节进行抽象和隔离。通过页表,操作系统可以对进程的地址空间进行管理,包括按需分配物理页框、回收空闲页框、实现内存保护和共享等功能。这样,进程可以独立运行并进行内存访问,而不必关心实际的物理内存结构

页表工作原理图
在这里插入图片描述

四、为什么要有地址空间

  1. 内存隔离:地址空间使每个进程都拥有自己独立的内存空间,彼此之间互相隔离。这种隔离确保了进程不会相互干扰,从而提高了系统的安全性和稳定性。如果没有地址空间,一个进程的错误操作可能会对其他进程或整个系统造成严重影响。

  2. 虚拟化内存:地址空间允许使用虚拟内存管理和操作。虚拟内存提供了一个抽象层,使得应用程序可以使用比物理内存更大的地址空间。这对于处理大型数据和运行多个应用程序非常重要。虚拟内存还支持内存映射文件和按需分配等机制,提高了内存管理的灵活性和效率。

  3. 共享和交互:地址空间提供了多个进程之间共享内存的机制,这对于进程间通信和数据共享非常有用。共享内存可以减少数据复制和传输的开销,并提供了一种高效的通信方式,如多进程并发编程、进程间消息传递等。

  4. 动态内存管理:地址空间允许操作系统动态管理进程的内存需求。操作系统可以根据进程的需要动态地分配和回收内存,以适应不同的内存负载。这样,可以更有效地利用有限的物理内存资源。

  5. 内存保护和随机化:地址空间允许操作系统对内存进行保护,限制进程对内存的访问权限。通过访问控制列表和页面权限设置等机制,可以保护关键数据和系统内核。此外,地址空间随机化技术可以提高系统的安全性,减少针对已知内存结构的攻击。

总的来说,地址空间为计算机系统提供了一种有效的内存管理和进程隔离机制。它使得每个进程可以在自己的独立地址空间上运行,提供了安全、高效的数据访问方式。所以地址空间的使用对于操作系统和应用程序来说都是必不可少的关键概念。

五、总结

我们了解了内存空间的分布,说明了在计算机系统中内存是如何被划分和组织的。接着,文章详细解释了进程地址空间的概念及其组成。进程地址空间是指每个进程独立拥有的内存空间,包括代码区、数据区和堆栈等部分。

我们探讨了进程地址空间设计的原理。从基本原理入手,介绍了虚拟地址空间的概念、大小和范围,以及其在进程中的作用。其中,虚拟地址空间通过将虚拟地址映射到物理地址,实现了内存的虚拟化,提供了更大的地址空间和灵活的内存管理机制。同时,还提及了页表这一关键数据结构,用于记录虚拟地址到物理地址的映射关系。最后,回答了为什么需要地址空间的问题。地址空间的存在具有多个优点,包括内存隔离、虚拟化内存、共享和交互、动态内存管理以及内存保护和随机化等方面。地址空间通过为每个进程提供独立的内存空间,保证了进程间的相互隔离和安全性,提供了高效的数据访问方式,同时也为系统提供了灵活和高效的内存管理机制。

综上所述,我们学习了进程地址空间及其设计原理,阐述了地址空间的重要性和优点。对于理解计算机系统中内存管理的关键概念和机制具有一定的指导意义。

温馨提示

感谢您对博主文章的关注与支持!如果您喜欢这篇文章,可以点赞、评论和分享给您的同学,这将对我提供巨大的鼓励和支持。另外,我计划在未来的更新中持续探讨与本文相关的内容。我会为您带来更多关于Linux以及C++编程技术问题的深入解析、应用案例和趣味玩法等。如果感兴趣的话可以关注博主的更新,不要错过任何精彩内容!

再次感谢您的支持和关注。我们期待与您建立更紧密的互动,共同探索Linux、C++、算法和编程的奥秘。祝您生活愉快,排便顺畅!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/80938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP协议(超级详细)

HTTP协议介绍 基本介绍: HTTP:超文本传输协议,是从万维网服务器传输超文本到本地浏览器的传送协议HTTP是一种应用层协议,是基于TCP/IP通信协议来传送数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现&#xff0…

vue组件库开发,webpack打包,发布npm

做一个像elment-ui一样的vue组件库 那多好啊!这是我前几年就想做的 但webpack真的太难用,也许是我功力不够 今天看到一个视频,早上6-13点,终于实现了,呜呜 感谢视频的分享-来龙去脉-大家可以看这个视频:htt…

【C语言】【数据存储】用%u打印char类型?用char存128?

1.题目一&#xff1a; #include <stdio.h> int main() {char a -128;printf("%u\n",a);return 0; }%u 是打印无符号整型 解题逻辑&#xff1a; 1. 原反补互换&#xff0c;截断 -128 原码&#xff1a;10000000…10000000 补码&#xff1a;11111111…10000000…

uniapp项目实践总结(十六)自定义下拉刷新组件

导语&#xff1a;在日常的开发过程中&#xff0c;我们经常遇到下拉刷新的场景&#xff0c;很方便的刷新游览的内容&#xff0c;在此我也实现了一个下拉刷新的自定义组件。 目录 准备工作原理分析组件实现实战演练内置刷新案例展示 准备工作 在components新建一个q-pull文件夹…

LVS负载均衡群集(NAT模式、IP隧道模式、DR模式)

目录 一、集群 1.1 含义即特点 1.2 群集的类型 1.3 LVS 的三种工作模式&#xff1a; 1.4 LVS 调度算法 1.5 负载均衡群集的结构 1.6 ipvsadm 工具 二、NAT模式 LVS-NAT模式配置步骤&#xff1a; 实例&#xff1a; 配置NFS服务器192.168.20.100 配置web1服务器192.168…

C++11线程库简介

前言 在c11之前涉及多线程的问题都是和平台相关的&#xff0c;比如windows和linux都有一套自己的接口&#xff0c;这使得代码的可移植性变差。C11中最重要的特性就是对线程进行了支持&#xff0c;使得C在编程时不再依赖第三方库&#xff0c;而且原子操作中还引入了原子类的概念…

Java计算机毕业设计 基于SpringBoot+Vue的毕业生信息招聘平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

网络请求【小程序】

一、get 二、post 1.获取相应数据 Page({/*** 页面的初始数据*/data: { inptValue:, isArr:[]},/*** 生命周期函数--监听页面加载*/onLoad(options) {},onSubmit(){// console.log(this.data.inptValue)//2.后台请求数据wx.request({url: https://tea.qingnian8.com/demoArt/…

CentOS7安装MySQL

文章目录 前言一、MySQL5.71.1 安装wget1.2 下载&安装MySQL的rpm源1.3 修改MySQL安装版本1.4 下载并启动MySQL1.5 开启MySQL远程连接用户 二、MySQL8.0注意事项 前言 CentOS7的安装&#xff0c;采用的是yum的方式安装。 yum方式安装&#xff0c;就类似在Windows下不停的下…

flink时间处理语义

背景 在flink中有两种不同的时间处理语义&#xff0c;一种是基于算子处理时间的时间&#xff0c;也就是以flink的算子所在的机器的本地时间为准&#xff0c;一种是事件发生的实际时间&#xff0c;它只与事件发生时的时间有关&#xff0c;而与flink算子的所在的本地机器的本地时…

机器学习——决策树/随机森林

0、前言&#xff1a; 决策树可以做分类也可以做回归&#xff0c;决策树容易过拟合决策树算法的基本原理是依据信息学熵的概念设计的&#xff08;Logistic回归和贝叶斯是基于概率论&#xff09;&#xff0c;熵最早起源于物理学&#xff0c;在信息学当中表示不确定性的度量&…

WorkPlus | 好用、专业、安全的局域网即时通讯及协同办公平台

自国家于2022年发布的《关于加强数字政府建设的指导意见》以来&#xff0c;我国数字政府建设已经迈入了一个全新的里程碑&#xff0c;迎来了全面改革和深化升级的全新阶段。 WorkPlus作为自主可控、可信安全、专属定制的数字化平台&#xff0c;扮演着政务机关、政府单位以及各…

JDK19特性

文章目录 JAVA19概述1. 记录模式(预览版本)2.Linux/RISC-V 移植3.外部函数和内存 API &#xff08;预览版&#xff09;4.虚拟线程(预览版)5.Vector API &#xff08;第四次孵化&#xff09;6.Switch 模式匹配&#xff08;第三预览版&#xff09;7.结构化并发&#xff08;孵化阶…

【算法专题突破】滑动窗口 - 串联所有单词的子串(15)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;30. 串联所有单词的子串 - 力扣&#xff08;LeetCode&#xff09; 这道题其实也很好理解&#xff0c;看一下示例就基本知道是什么意思了&#xff0c; 主要就是找 s 里面…

基于springboot+vue的药店管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

HTML+CSS画一个卡通中秋月饼

HTMLCSS画一个卡通中秋月饼&#x1f96e;&#x1f96e;&#x1f96e; 中秋活动水个文章 整个divcss实现个月饼&#xff0c;给前端初学者一个练手的demo 效果图 思路 HTMl 先来个轮廓画脸上的东西&#xff1a;眼睛、眉毛、腮红、嘴巴眼睛丰富下瞳孔画20个花瓣 CSS 轮廓是要外…

css中BFC外边距塌陷解决办法

什么是BFC 块级格式化上下文&#xff0c;独立的渲染区域&#xff0c;与外部毫不相干&#xff0c;上下两个元素都设置了外边距&#xff0c;结果会出现重叠的部分合并 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /&…

[EI复现】基于主从博弈的新型城镇配电系统产消者竞价策略(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【网络】计算机网络基础

Linux网络 对网络的理解 在网络传输中存在的问题&#xff1a; 找到我们所需要传输的主机解决远距离数据传输丢失的问题怎么进行数据转发&#xff0c;路径选择的问题 有问题&#xff0c;就有解决方案&#xff1b; 我们把相同性质的问题放在一起&#xff0c;做出解决方案 解…

【系统架构】什么是集群?为什么要使用集群架构?

什么是集群&#xff1f;为什么要使用集群架构&#xff1f; 1.什么是集群&#xff1f;2.为什么要使用集群&#xff1f;2.1 高性能2.2 价格有效性2.3 可伸缩性2.4 高可用性2.5 透明性2.6 可管理性2.7 可编程性 3.集群的常见分类3.1 负载均衡集群3.2 高可用性集群3.3 高性能计算集…