OS: 进程的虚拟内存空间,内核进程为什么不直接使用物理内存?

【PINN物理信息网络】基于PINN物理信息网络求解瞬态薛定谔方程(python) 阅读详情

概述

        今天,看了一篇Linux虚拟内存管理的文章,打算写一篇文章来理一下几个概念。

Linux虚拟内存管理:https://xiaolincoding.com/os/3_memory/linux_mem.html

  • 内核进程和普通进程的结构及区别
  • 内核进程的task_struct的mm_struct为什么是null
  • 内核进程为什么不直接使用物理内存

发车

一、内核进程和普通进程的结构及区别(32位Linux操作系统)

首先来看一下

具体的每一个区域的内容这里不做讲解,可以去看我看的文章。

简单介绍几个概念:

1. task_struct:

        task_struct叫进程描述符,每个进程是一个task_struct实例,不要与PCB搞混,PCB是抽象,task_struct是具体实现。(类比Java,PCB是接口,task_struct是实现类,进程是实例对象)

2. mm_struct:

        mm_struct是task_struct中专门描述进程虚拟内存空间的内存描述符。

用户进程:由用户启动的应用程序(如浏览器、终端、编辑器等),是最常见的进程类型。

特点:

  • 拥有自己独立的 mm_struct(虚拟内存描述符),管理专属的用户态虚拟内存空间(代码段、数据段、堆、栈等)。
  • 大部分时间运行在用户态,执行用户编写的代码(如应用逻辑)。
  • 需要访问系统资源(如读写文件、分配内存)时,通过系统调用切换到内核态,由内核代劳。
  • 依赖用户态代码和数据,若用户空间被销毁(如进程退出),进程随之终止。

内核进程:由内核直接创建和管理的「系统级进程」,没有对应的用户态程序。

特点:

  • task_struct 中的 mm_struct 字段为 NULL(没有用户态虚拟内存空间),仅使用内核空间的虚拟内存。
  • 全程运行在内核态,执行内核代码(如内存回收、磁盘缓存刷新、处理硬件中断等系统任务)。
  • 不依赖任何用户态资源,由内核直接调度,即使所有普通进程退出,内核线程仍会运行(维持系统基本功能)。

二、内核进程的mm_struct为什么是null

三、内核空间为什么不直接使用物理内存,也要使用虚拟内存

5、高级综合技术:从调度到优化的全面解析 本文深入解析了高级综合技术,涵盖从控制/数据流图构建、调度算法、分配绑定策略到编译器优化的全流程。通过案例分析和对比,探讨了不同优化策略对性能和资源利用的影响,并总结了关键要点及未来发展趋势,为高效利用FPGA实现数字设计提供了全面指导。 阅读详情

相关推荐

MAX31865模块温度测量

本文主要介绍MAX31865 测温注意事项,并写出读取温度的示例代码,模块详细参数可以查阅相关手册,

7457

mm和active_mm

mm和active_mm 1.简介 进程描述符task_struct中有这样的字段active_mm和mm,他们跟进程的地址空间相关。 struct task_struct { ... struct mm_struct *mm, *active_mm; ... }; 对于普通的用户进程来说mm字段指向他的虚拟地址空间的用户空间部分,对于内核线程来说这部分为NULL。 2.那么active_mm是指什么呢? 我们有“真实地址空间”和“匿名地址空间”。两者的的区别在于匿名地址空间不关心用户级的页表,

weixin_48101150的博客 2325

bert-ini:一种基于bert的实体对齐交互模型

本次分享一项来自IJCAI-20的实体对齐工作,该工作提出了一种不同于以往的采用图结构信息进行实体对齐的技术方案,该方案取得了当时的最好效果;不仅如此,模型本身的对齐效率在该项工作中也被考虑,实际工作中非常具备借鉴意义。

qq_33331424的博客 3152

物理内存和虚拟内存的区别(浅析)

首先,我们先简单理解一下而这之间概念区别: 物理内存: 值通过物理内存条而获得的内存空间,是计算机上最重要的资源之一,从本质来说,物理内存是代码和数据在其中运行的窗口,物理内存是和cpu实现交互的重要硬件设备. 虚拟内存: 与物理内存相反,是指根据系统需要从硬盘中虚拟的划出一部分存储空间,是一种计算机系统的管理技术,数据计算机的程序. 下面将进行详细的介绍: 物理内存的作用: 计算机运行时为操作系统和各种程序提供临时的存储作用,而这种存储是没有写入硬盘的,在计算机关机后就会丢失. 物理内存工作的原

qq_59369367的博客 1万+

JW01二氧化碳传感器实战:5分钟搞定Arduino环境监测系统(附完整代码)

本文详细介绍了如何使用JW01二氧化碳传感器与Arduino快速搭建环境监测系统。通过简单的硬件连接和完整的代码示例,读者可以在5分钟内实现CO2浓度实时监测,并了解数据解析、常见问题解决及进阶应用扩展。JW01传感器的高精度和易用性使其成为创客和嵌入式开发者的理想选择。

kite3的博客 383

HPM6E00:PWM V2使用指南

HPM6E00:PWM V2使用指南

xikangsoon的博客 1733

进程的家园:探索 Linux 地址空间的奥秘

Linux进程地址空间

A.的博客 3759

【ESP32-IDF笔记】20-配置以太网网络(W5500)

基于ESP32IDF和官方的ethernet驱动,配置W5500以太网驱动芯片,实现ESP32的有线网络

别看了,就这些信息 3471

Linux 内核中的内存管理:从物理内存到虚拟内存

Linux 内核中的内存管理是一个核心组件,它负责管理系统的内存资源,包括物理内存和虚拟内存。内存管理的设计思路与企业管理中的资源管理有着密切的联系,它通过资源分配、虚拟映射、内存回收和性能优化等机制,为系统的高效运行提供了保障。工作也要流程化,内存管理就像是系统中的资源管理工具,它确保了内存资源的合理分配和使用。在实际应用中,我们需要选择合适的内存分配器,合理使用内存,优化内存访问,监控内存使用情况,以实现系统的最佳性能和可靠性。

jiang_style的博客 2521

MATLAB极坐标伪彩色圆图绘制之polarPcolor函数

polarPcolor函数介绍 我们经常在论文或期刊上看到如下图这种以色调冷暖代表数值大小的极坐标圆图, 而function [varargout] = polarPcolor(R,theta,Z,varargin)可以很好的帮助我们快速绘制这类极坐标圆图。它非常适合雷达或激光雷达的平面位置指示器。使用polarPcolor函数时,我们只需根据手中数据构造相应的二维矩阵Z即可,十分便捷。varargin值为绘制模式选择。R值为半径坐标一维矩阵,theta值为角坐标一维矩阵。 代码示例 这里使用了海洋表面耀光

qq_19512613的博客 1万+

Unity大世界流式加载:工业级架构与优化秘籍

游戏大厂Unity大世界流式加载框架全景解析:从《原神》《和平精英》等标杆案例出发,深入剖析工业级流式加载的完整技术架构。文章系统介绍了大世界分区块管理、异步加载机制、资源优化策略、多平台适配方案,以及业务联动与团队协作流程。重点阐述了Addressable与AssetBundle应用、空间触发器设计、性能自适应等核心技术,并展望AI预测加载、云游戏等未来方向。全面展现了大厂如何通过流式加载技术实现无缝开放世界体验的技术路径与实践经验。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 607

虚拟内存和物理内存

概念 物理内存就是指内存条,虚拟内存是逻辑概念。每个进程都有自己独立的虚拟地址空间,32位有4G大小,64位有256T大小。一个进程同一时刻不可能所有变量数据都会访问到,只需要在访问某部分数据时,把这一块虚拟内存映射到物理内存,其他没有实际访问过的虚拟地址空间并不会占用到物理内存,这样对物理内存的消耗就大大减少了 。 虚拟内存划分 从虚拟地址的角度来看,内存空间如下划分: 32位系统最高的1G空间保留给内核使用,多个进程共享;64位系统最高的128T空间保留给内核使用并且不被进程共享 栈,栈向低地址方向

天行九歌 1326

车载网络测试实操源码_使用CAPL脚本进行UDS刷写及其自动化测试

本文主要讲解如何使用CAPL脚本进行UDS刷写及其自动化测试,并结合了几个测试实例进行介绍,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1554

Linux系统 —— 进程系列 - 程序地址空间:虚拟地址空间

我们都知道,我们的内存空间划分为几个区域,我们在调试代码窗口的时候, 看到的地址其实并不是真实内存的地址,而是虚拟地址空间虚拟地址空间并不是物理内存,两者之间有一点关系,但是不多一个进程有一个虚拟地址空间,我们前面学习的时候只知道创建一个进程就需要有一个对应的task_struct来描述对应的进程,而每一个task_struct都要对应一个虚拟地址空间在我们的操作系统里面,一个进程会构建一个页表,我们页表左侧存储的是我们的虚拟地址,右侧存储的是物理地址页表是用来做虚拟地址到物理地址映射。

hedhjd的博客 1523

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

虚拟内存介绍

虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。对虚拟内存的定义是基于对地址空间的重定义的,即把地址空间定义为「连续的虚拟内存地址」,以借此「欺骗」程序,使它们以为自己正在使用一大块的「连续」地址。

General_zy的博客 9956

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Linux】十.进程概念篇四《深入理解 Linux 进程地址空间:虚拟内存、页表与物理内存映射全解》

页表完成虚拟地址和内存地址之间的映射地址空间是什么?操作系统让进程看待物理内存的方式(抽象概念)。地址空间是内核中的一种数据结构,即 struct mm_struct 结构体。由 OS 给每个进程创建,这样每个进程都认为自己独占系统内存资源。区域划分是什么?划分区域的本质:把线性的地址空间划分成了一个个的区域,通过设置结构体内的 start 和 end 的值来表示区域的起始和结束。为什么要进行区域划分呢?因为可执行程序在磁盘中是被划分成一个个的区域存储起来的所以进程的地址空间才有了。

2501_93351213的博客 744

Linux —— 虚拟进程地址空间

页表是虚拟内存系统的核心数据结构,是连接虚拟地址和物理地址的“地图”或“翻译官”;是Kernel为每个进程维护的一个映射表,它记录了该进程的虚拟内存页对应到物理内存帧的映射关系简单来说,它的工作就是回答这个问题:“这个进程看到的虚拟地址 X,实际上在物理内存的哪个地方?OS 会将进程物理地址隐藏起来,我们只能观测到进程的虚拟地址。

2401_87692970的博客 1959

详解操作系统中虚拟内存与物理内存的关系

点击链接阅读更多: 一文理解虚拟内存、物理内存、内存分配、内存管理 - 知乎 目录 一、虚拟内存与物理内存 1.1 虚拟内存 1.2 虚拟内存与物理内存 二、C/C++中虚拟内存分配模型 2.1 C语言中内存分配模型 2.2 C++语言中内存分配模型 三、程序占用的内存是虚拟内存还是物理内存 3.1 内存管理 3.1.1 内存管理概念 3.1.2 glibc内存管理器 3.1.3 内存管理器面临的困难 3.1.4 以堆为例讲解内存的申请与释放 3.2 代码占用的内存 3.2.

qq_41687938的博客 8370

深入理解OS67内存管理:物理内存与虚拟内存实现原理

想要深入理解操作系统内核的底层原理吗?OS67这个类Unix玩具内核为我们提供了一个绝佳的学习平台。作为一款面向学习者的操作系统内核,OS67的内存管理系统设计精巧而实用,涵盖了从物理内存分配到虚拟内存映射的完整实现。本文将带您深入探索OS67内存管理的核心机制,揭示物理内存与虚拟内存的实现奥秘。 ## 🚀 OS67内存管理系统架构概述 OS67的内存管理系统采用了经典的分层设计,物理内存管

gitblog_00759的博客 886

【Linux】进程地址空间的重解和总结

本文总结了Linux 32位系统下进程地址空间的关键概念。进程地址空间是描述进程内存布局的虚拟空间,通过页表映射到物理内存。内核空间存放操作系统核心代码,用户空间包含栈、堆、共享区等功能区域。文章详细解释了用户态与内核态的切换机制,以及内核页表共享和进程页表独立的特性。这种虚拟内存机制实现了高效的内存管理和进程隔离,是现代操作系统的重要基础。

Ruaaa_iiiiiiiii的博客 844

【Linux】进程地址空间的内核空间

本文介绍了操作系统中的内核空间和时钟中断机制。内核空间是操作系统内核在虚拟内存中的专属区域,所有进程共享同一内核空间但用户程序无法直接访问。用户程序通过系统调用与内核交互,触发CPU从用户态切换到内核态。内核空间具有高特权级,运行在Ring0级别,能直接访问硬件资源。时钟中断是操作系统的核心机制,它周期性地触发中断处理程序,实现进程调度、时间维护和资源统计。每次中断都会强制CPU执行内核代码,检查时间片并可能切换进程。这两个机制共同保障了系统的安全性、多任务处理能力和资源管理效率。

wefg1的博客 784

Compound Engineering 终极指南:33 个 AI 技能如何让开发越来越快

Compound Engineering 是一款面向 Claude Code、Cursor、Codex 等 14 个 AI 编程宿主的**复合工程插件**。它解决的核心问题是:AI 写代码越快,重复踩坑和知识流失就越多。它用"头脑风暴 → 规划 → 执行 → 评审 → 沉淀经验"的**复合循环**,让每一次开发成果都能被下一次自动复用,把个人经验变成持续复利的团队资产。 [![Compound

gitblog_00846的博客 1088

【Linux系统编程】进程地址空间完全指南:页表、写时拷贝与虚拟内存管理

本文系统解析Linux进程虚拟地址空间的核心机制。首先通过实验验证地址空间的虚拟性,揭示父子进程相同虚拟地址指向不同物理内存的现象。进而剖析分页机制与写时拷贝的原理,展现操作系统如何优化进程创建与内存使用。通过解读mm_struct、vm_area_struct等关键数据结构,阐释内核管理虚拟内存的精细架构。最后从安全隔离、地址确定、高效管理三个维度论证虚拟地址空间的必要性,揭示其解耦进程与物理内存、实现延迟分配的设计哲学。全文贯穿理论与实践,展现操作系统从物理束缚到虚拟自由的进化智慧。

燃于AC之乐的博客 1578

【Linux】进程地址空间(初步了解)

进程虚拟地址空间相关内容

weixin_69380220的博客 1882

初识Linux · 地址空间

本文介绍的是有关地址空间,咱们的介绍的大体思路是,先直接看现象,通过现象我们引入地址空间的概念,然后是简单的介绍地址空间,如何理解地址空间等,在往后的学习中,我们大概会介绍地址空间3 - 4次,因为地址空间有很多内容一次性还介绍不完,并且在本文中,我们能够理解之前颠覆代码三观的函数——fork(),现在就进入正题。

更新各种计算机技能~ 2509

OOM killer 是基于虚拟内存还是物理内存?

前言 实验 机器内存: 实验代码 编译运行: 实验结果: OOM killer源码分析 总结: 前言 偶然在网上看到一个问题: OOM 是按照虚拟内存还是实际内存来打分? 这里“实际内存”表达的意思应该是物理内存,而“打分”想表达的意思应该是 OOM killer 机制里面的badness score. 当内存吃紧时,假如开启了 OOM killer,OOM killer 会计算进程的badness score,badness score越高,就越优先被 OOM kille...

zz460833359的博客 712
上一篇: Spring二级缓存为什么不行(详细)
下一篇: PPTX 中加入输入框和按钮,文本框不为空点击按钮跳转
枯基Evan
博客等级 码龄3年 141粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值