linux进程管理基础

一、概念引入

  • 线性内存----应用程序员看到的内存空间定义为线性空间,应用程序员提供的线性空间却是固定的,不会随物理内存的变化而变化,这样才能保证应用程序的可移植性。
  • 物理内存----主板上所用的内存大小。
  • CPU执行级别----CPU将特权级别分为4个级别:RING0(特权级),RING1,RING2,RING3。其中RING0和RING3在用,与RING0交互的只是内核,与RING3可以是用户程序。
  • Task structure----内核数据结构,用于进程记录管理。
  • MMU----内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。
  • TLB(Translation Lookaside Buffer)转换检测缓冲区----是一个内存管理单元,用于改进虚拟地址到物理地址转换速度的缓存。
  • 进程状态:R (TASK_RUNNING),可执行状态、S (TASK_INTERRUPTIBLE),可中断的睡眠状态、D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态、T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态、Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程。
  • 内核空间和用户空间是现代操作系统的两种工作模式,内核模块运行在内核空间,而用户态应用程序运行在用户空间。它们代表不同的级别,而对系统资源具有不同的访问权限。内核模块运行在最高级别(内核态),这个级下所有的操作都受系统信任,而应用程序运行在较低级别(用户态)。在这个级别,处理器控制着对硬件的直接访问以及对内存的非授权访问。内核态和用户态有自己的内存映射,即自己的地址空间。
  • 进程上下文----就是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈上的内容,当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。

从上图可以看出,当一个用户发起一个命令或者启动一个程序时,会建立一个进程,刚开始以用户方式启动,这时处于用户态,将其用户空间要执行的内容载入内存,并交由CPU执行相关指命,执行完成,内存释放空间,结束进程;或者,处于用户态时,需要进行系统调用,这时由用户态转化为内核态,将其内核空间要执行的内容载入内存,并交由CPU执行相关指命,执行完成,内存释放空间,结束进程。

上图反映了如下信息:

1、  进程的4G 线性空间被划分成三个部分:进程空间(0-3G)、内核直接映射空间(3G – high_memory)、内核动态映射空间(VMALLOC_START  -  VMALLOC_END)

2、  三个空间使用同一张页目录表,通过 CR3 可找到此页目录表。但不同的空间在页目录表中页对应不同的项,因此互相不冲突

3、  内核初始化以后,根据实际物理内存的大小,计算出 high_memory、VMALLOC_START、VMALLOC_END 的值。并为“内核直接映射”空间建立好映射关系,所有的物理内存都可以通过此空间进行访问。

4、  “进程空间”和“内核动态映射空间”的映射关系是动态建立的(通过缺页异常)

假设在有三个线性地址 addr1, addr2, addr3 ,分别属于三个线性空间,但是最终都映射到物理页面1:

1、 三个地址对应不同的页表和页表项

2、但是页表项的高 20bit 肯定是1,表示物理页面的索引号是1

3、同时,根据高 20 bit,可以从 mem_map[] 中找到对应的 struct page 结构,struct page 用于管理实际的物理页面(红线)

4、从线性地址,根据页目录表,页表,可以找到物理地址

5、Struct page 和物理地址之间很容易互相转换

6、从物理地址,可以很容易的反推出在内核直接映射空间的线性地址(蓝线)。要想得到在进程空间或者内核动态映射空间的对应的线性地址,则需要遍历相应的“虚存区间”链表。

关于页目录表:

1、每个进程有一个属于自己的页目录表,可通过 CR3 寄存器找到

2、而内核也有一个独立于其它进程的页目录表,保存在 swapper_pg_dir[] 数组中

3、当进程切换的时候,只需要将新进程的页目录把地址加载到 CR3 寄存器中即可

4、创建一个新进程的时候,需要为它分配一个 page,作为页目录表,并将 swapper_pg_dir[] 的高 256 项拷贝过来,低 768 项则清

 

 

参考原文:https://blog.csdn.net/rstevens/article/details/1760907

https://www.cnblogs.com/zqz365001/p/4544741.html

http://www.linfo.org/context_switch.html

https://blog.csdn.net/qq_34228570/article/details/72995997