【Linux】进程地址空间、进程的概念、进程的描述、物理地址空间、进程地址空间和物理地址空间的关系

news2024/9/21 11:18:35

文章目录

  • 1.进程的概念
    • 1.1进程是什么
  • 2.进程的描述
    • 2.1进程的组成
    • 2.2task_struct的内容
  • 3.进程地址空间(虚拟地址空间)
    • 3.1物理地址空间
    • 3.2进程地址空间和物理地址空间的关系

1.进程的概念

1.1进程是什么

  从计算机的硬件到软件和用户需要有很多的交互:

  硬件是计算机系统的物理部分,包括各种电子器件和机械设备, 例如中央处理器、内存、硬盘、显卡等。这些硬件组件共同构成了计算机系统的硬件基础。

  软件是计算机系统的程序集合,它包括操作系统、应用程序、数据库等。软件通过操作系统与硬件进行交互,实现对硬件的控制和操作。计算机硬件和软件是通过操作系统进行交互的。 系统调用是操作系统提供的一种接口,允许应用程序向操作系统请求服务。当应用程序需要访问硬件设备或其他系统资源时,它会通过系统调用将请求传递给操作系统,操作系统会处理请求并返回结果给应用程序。

  用户通过计算机硬件和软件提供的接口进行交互, 使用计算机完成各种任务。用户可以通过键盘、鼠标、触摸屏等输入设备向计算机发送指令,计算机通过操作系统和应用程序对这些指令进行处理,并将结果返回给用户。

在这里插入图片描述

  

  进程可以将计算机的硬件和软件部分联系起来:

  进程是操作系统中进行资源分配的最小单位,它可以将计算机系统的硬件和软件联系起来。进程在运行时,需要从硬件获取资源,例如CPU、内存、磁盘等,同时也会通过操作系统与硬件进行交互,实现对硬件的控制和操作。因此,进程在计算机系统中扮演着重要的角色,它是联系硬件和软件的桥梁

  
  计算机管理硬件有两步:

  (1)先描述,用struct结构体;

  (2)再组织,用链表或其他高效的数据结构。

  
  进程的基本概念:

  (1)从进程本身看:进程是程序的一个执行实例,是正在执行的程序等。

  (2)从进程的内核看:进程担当分配系统资源(CPU时间,内存)的实体,是联系硬件和软件的桥梁。

            

2.进程的描述

2.1进程的组成

  
  进程=内核数据结构+程序代码数据

  其中内核数据结构为:task_struct(PCB)、mm_struct(进程地址空间)、页表
  

  task_struct是Linux内核的一种数据结构,称为PCB(进程控制块),它会被装载到RAM(内存)里并且包含着进程的信息,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,它是进程运行时被加载到RAM中的重要结构体。
  

  mm_struct是Linux内核中描述进程虚拟地址空间的数据结构。每个进程在内核中都有一个唯一的mm_struct结构体,用来描述该进程的虚拟地址空间。 了解:它包含了装入的可执行映像信息以及进程的页表目录指针pgd,还包含有指向vm_area_struct结构的指针,每个vm_area_struct代表进程的一个虚拟地址区间。在进程的task_struct结构体中,有一个指向mm_struct的指针,这个指针常常是mm。
  

  页表是一种特殊的数据结构,用来存储进程地址空间和物理内存地址的映射关系。 页表决定内存地址的意义以及哪些物理内存能够访问。它们允许在同一块物理内存上隔离不同进程的地址空间。页表还间接的为提供了一些手段:在多个地址空间中映射相同的内存地址,通过未分配的页来保护内核和用户栈。
  
在这里插入图片描述

            

2.2task_struct的内容

  (1)标示符: 描述本进程的唯一标示符,用来区别其他进程。

  (2)状态: 任务状态,退出代码,退出信号等。

  (3)优先级: 相对于其他进程的优先级。

  (4)程序计数器: 程序中即将被执行的下一条指令的地址。

  (5)内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。

  (6)上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。

  (7)I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。

  (8)记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。

            

3.进程地址空间(虚拟地址空间)

  进程地址空间是每个进程在运行时所用到的虚拟地址的集合,由若干个连续的内存块组成。每个进程都有自己的地址空间,这意味着每个进程都有自己的内存地址范围,不会与其他进程冲突。

  进程地址空间通常被划分为几个部分,包括代码段、数据段、堆和栈。代码段存储程序代码,数据段存储程序运行时所使用的数据,堆用于动态分配内存,而栈用于存储函数调用时所需的数据(如参数、返回地址和临时变量)。

  当进程在执行时,会使用自己的地址空间。进程间通信时,必须通过操作系统提供的机制来实现,因为不同进程之间的地址空间是独立的。

  操作系统会给每一个进程都创建一个独立的虚拟地址空间,每个进程的地址空间都是整个内存的大小。操作系统通过页表将虚拟地址空间与物理内存建立映射,实现虚拟内存管理。当需要访问虚拟地址时,操作系统会先通过页表找到对应的物理内存,然后进行访问。

  需要注意的是,进程地址空间是虚拟的,不是物理内存。每个进程都有自己独立的地址空间,不同进程的地址空间之间不会相互干扰。
在这里插入图片描述

  

3.1物理地址空间

  物理地址空间是计算机中存储数据和执行程序的实际物理内存地址。 它是计算机系统中物理存储器的实体存在,每个进程都拥有自己的物理地址空间。

  在32位平台上,每个进程都有自己的虚拟地址空间,大小为2^32字节。然而,实际的物理内存大小可能远远小于虚拟地址空间的大小。操作系统通过内存管理机制将虚拟地址空间映射到物理内存,实现虚拟内存管理。

  每个进程的物理地址空间是相互独立的, 不同进程的物理地址空间之间不会相互干扰。进程在访问内存时,操作系统会将虚拟地址转换为物理地址,以实现对物理存储器的访问。

  注意:物理地址空间是计算机系统中实际存在的物理存储器的实体存在,不是虚拟的。同时,操作系统通过内存管理机制来保护不同进程的物理地址空间,防止发生越界访问和其他安全问题。
在这里插入图片描述

  

3.2进程地址空间和物理地址空间的关系

  进程地址空间和物理地址空间之间存在映射关系。

  进程地址空间是每个进程在计算机内存中所占用的虚拟地址空间,是进程运行时所用到的虚拟地址的集合。 每个进程都有自己的地址空间,不同进程的地址空间之间不会相互干扰。进程地址空间通常被划分为几个部分,包括代码段、数据段、堆和栈。这些部分在虚拟地址空间中连续,但在物理内存中可能不连续。

  物理地址空间是计算机系统中实际存在的物理存储器的实体存在,是实际使用的内存地址。 物理地址空间是连续的,因为计算机的存储器是连续的。

  进程地址空间与物理地址空间之间存在着映射关系。操作系统通过内存管理机制将虚拟地址空间映射到物理内存,实现虚拟内存管理。当进程访问虚拟地址时,操作系统会根据页表将虚拟地址转换为物理地址,然后将数据从物理内存中读取出来或写入到物理内存中。 这种映射关系是由操作系统在虚拟到物理之间转化时进行合法性校验来实现的,从而保护了物理内存的安全。

  所以:对于同一个变量,地址相同,其实是虚拟地址相同,内容不同其实是被映射到了不同的物理地址。
在这里插入图片描述

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

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

相关文章

win11安装docekr、docker-compose

1.docker安装 下载地址:Install Docker Desktop on Windows | Docker Docs 出问题别慌,看清楚提示信息,cmd更新wsl,什么是wsl,百度好好理解一下哦 2.docker-compose安装 还是去官方看看怎么说的,然后跟着处…

面向边缘场景的 PWA 实践

背景 随着5G技术的发展,物联网边缘侧主要应用于数据传输量大、安全要求高以及数据实时处理等行业与应用场景中。其中,边缘计算是一种分布式计算模式,其将计算资源和数据处理能力推向接近数据源的边缘设备,以减少延迟并提高响应速度…

设计模式:中介者模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《迭代器模式》 下一篇《备忘录模式》 简介: 中介者模式,它是是一种行为设计模式,它允许将一组对象之间的交互封装到一个单独的类中,从而降低对象之间的耦合性…

KF-GINS 和 OB-GINS 的 Earth类 和 Rotation 类

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、Earth 类:地球参数和坐标转换1、gravity():正常重力计算2、meridianPrimeVerticalRadius():计算子午圈半径…

04 文件管理

文件管理 文件和目录的创建 删除文件和目录 文件查找命令 文件的拷贝和移动 打包和压缩

MySQL -- 表的约束

MySQL – 表的约束 文章目录 MySQL -- 表的约束一、表的约束1.空属性2.默认值3.列描述4.zerofill5.主键6.自增长7.唯一键8.外键 一、表的约束 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合 法…

使用Selenium和Java编写爬虫程序

以下是一个使用Selenium和Java编写的音频爬虫程序,该程序使用了proxy的代码。请注意,这个示例需要在IDE中运行,并且可能需要根据您的系统和需求进行调整。 import java.io.IOException; import java.util.List; import java.util.concurrent…

PYTHON快捷键合集!学会让你成为大一最靓的仔

前言 大家好,我是艾登,一个始于JAVA终于PYTHON的老程序员,学习代码固然重要,但是在职场上能够知道打代码的各种快捷键的手法能够让你事半功倍,现在就由我来向大家介绍一下python各种快捷键的用法。 如果觉得对你有帮助…

机器学习(python)笔记整理

目录 一、数据预处理: 1. 缺失值处理: 2. 重复值处理: 3. 数据类型: 二、特征工程: 1. 规范化: 2. 归一化: 3. 标准化(方差): 三、训练模型: 如何计算精确度,召…

浅谈IIC总线通信协议

IIC IIC:集成电路总线(Inter-Integrated Circuit) 快速:400kbit/s 高速:3.4Mbit/s 速度由 SCL 决定,上升沿斜率受上拉电阻和等效电容影响。 物理层 两线式串行总线,可发送和接收数据。 数据线:SDA 时钟线…

栈和队列(2)

目录 🍁一、链表的概念 🍁二、针对本文章给出的几点注意事项: 🍁三、队列的实现 🌕(一)、代码定义 注意: 🌕(二)、初始化 🌕&am…

java.java.lang.NoSuchMethodError: org.bouncycastle.math.ec.ECFieldElement

目录 Java运行时异常:行时找不到指定的方法 1.前言2.原因2.1项目中的版本有冲突2.2项目中某个包缺少bouncycastle依赖 总结参考 1.前言 java.lang.NoSuchMethodError: org.bouncycastle.math.ec.ECFieldElement$Fp.(Ljava/math/BigInteger;Ljava/math/BigInteger;) java.lang…

(PC+WAP)照明科技类网站模板 LED灯具照明网站源码下载

(PCWAP)照明科技类网站模板 LED灯具照明网站源码下载 PbootCMS内核开发的网站模板,该模板适用于照明科技网站、灯具照明网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; pcwap,同一个后台&#…

【网安大模型专题10.19】论文6:Java漏洞自动修复+数据集 VJBench+大语言模型、APR技术+代码转换方法+LLM和DL-APR模型的挑战与机会

How Effective Are Neural Networks for Fixing Security Vulnerabilities 写在最前面摘要贡献发现 介绍背景:漏洞修复需求和Java漏洞修复方向动机方法贡献 数据集先前的数据集和Java漏洞Benchmark数据集扩展要求数据处理工作最终数据集 VJBenchVJBench 与 Vul4J 的…

SSO 系统设计_token 生成

SSO 系统设计_token 生成 目录概述需求: 设计思路实现思路分析1.增加依赖2.代码编写3.测试 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wai…

IT行业职场走向,哪些方向更有就业前景?——IT行业的发展现状及趋势探析

文章目录 每日一句正能量前言IT技术发展背景及历程IT行业的就业方向有哪些?分享在IT行业的就业经历后记 每日一句正能量 如果你认为你自己无法控制自己的情绪,这就是一种极为严重的不良暗示。 前言 在信息量浩如烟海、星罗棋布的大数据时代,…

深度学习第四阶段:NLP第二章 Transformer学习笔记

引言1:什么是注意力机制 参考我的一篇文章:https://blog.csdn.net/weixin_42110638/article/details/134011134?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134011134%22%2C%22source%22%3A%22weixin…

优优嗨聚集团:抖音外卖,美食与文化的完美结合

在今天的数字化时代,外卖行业正在迅速发展,而抖音外卖的出现,更是引领了外卖行业的新潮流。抖音外卖不仅满足了人们对美食的追求,还让人们在享受美食的同时,感受到了浓厚的文化氛围。 抖音外卖是抖音平台推出的一项全新…

RISC Zero zkVM性能指标

1. 引言 对应代码: https://github.com/risc0/risc0(C和Rust) 运行如下指令,进行性能评估: cargo run -r --example loop //CPU cargo run -r -F metal --example loop //Metal GPU cargo run -r -F cuda --exampl…

Seata入门系列【14】AT模式源码分析之二阶段全局提交和全局回滚

1 全局提交 1.1 前言 在之前我们分析了,开启全局事务,和业务执行时是如何校验全局锁和提交本地事务的,接下来分析下是如何进行全局提交的。 1.2 二阶段全局提交 核心代码还是在TransactionalTemplate类中,当TC 没有收到异常时…