linux的进程管理1

主要看了Linux完全注释那本书,终于准备攻读Linux内核源码了,先看了第二张的总体概念,感觉操作系统有很多东西还真是大同小异,记得ucos就是有一个叫做快表的东西,里面最多可以表示64个进程,而早版的Linux0.11)也有这个一说的东西。

 

Linux中也有一个PCB来表示每个进程,在这个结构体中,有指向任务代码的指针,有指向任务数据的指针,还有指向堆栈段地址(这个栈空间用来保存该进程在CPU中的各个寄存器的值,在进程调度的时候使用,是在内核栈空间上的),还有进程的任务状态段信息结构(tss_struct

 linux的进程管理1_第1张图片

以上是Linux操作系统中进程所拥有的各种状态和相互关系(0.11内核)

其中:可中断睡眠是可以被软终端所唤醒的,我现在的理解是可以被用户空间的程序所唤醒。不可中断睡眠状态是不能被软终端唤醒的,他只能等待调度程序的唤醒或者硬中断的到来。

 

进程间切换:

linux的进程管理1_第2张图片

在这里面有几个概念先解释一下
GDT
:全局描述符表  在我理解来看就是存放所有进程PCB的指针或者就象图里面画的是     每个进程的TSS的描述符。

TSS:任务状态段   任务状态段用于保存相应进程在CPU中的寄存器的值

LDT:局部描述符   存储在全局描述表中,分为数据段和代码段,然后数据段指向用户空间的一段保存该进程数据的地址,代码段指向用户空间的保存该进程代码的内存地址。(如下图)

linux的进程管理1_第3张图片

在进程切换时,执行实际进程切换的任务由swich_to()宏所定义的一段汇编代码来完成。在切换之前,swich_to首先检查要切换的进程是否为当前进程,如果是则什么也不做,直接退出。否则就先将内核全局变量current置为新任务的指针,然后跳转到新任务的任务状态段TSS组成的地址处,造成CPU执行任务切换操作。然后就如第二幅图开始进行压栈和弹栈操作,开始执行新的任务。

 

Linux采用的是段页式的地址映射,通过计算,我今天知道了每个内存单元能存储4bit的数据。Linux0.11内核)为每个进程都预留了64M的虚拟内存空间。

你可能感兴趣的:(linux,struct,存储,任务,终端,linux内核)