概述
今天,看了一篇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






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







被折叠的 条评论
为什么被折叠?



