3.进程
- 进程:程序执行的一个实例,充分描述程序已经执行到何种程度的数据结构的集合.目的:担当资源分配的实体.每个线程是进程的一个执行流,可以由内核独立调度.
- 标示一个进程
- 进程和进程描述符一一对应.并且一个线程组公用一个PID.
- 进程描述符处理: Linux吧内核态的进程堆栈和紧挨进程描述符的小数据结构thread_info,紧凑地存放在一个单独为进程分配的存储区内.其Size=8K.即两个页框.且为了效率,第一个页框的起始地址=2(13)倍.
- 其中,thread_info的size=52B.位于存储区的开始处.堆栈起始于末端,并朝内存区开始的方向增长.用户态刚切换到内核态时,栈为空.esp寄存器指向栈顶.
- 标示当前进程: 因为Size =8K=2(13).所以屏蔽掉esp的低13位即可获得thread_info结构的基地址.但是经常使用的是进程描述符的地址,用current宏来代表.
- 双向链表: 不在链表中包含数据,而是在数据结构中包含链表节点.
- 当内核寻找一个新进程在CPU上运行时,必须只考虑处于Task_Running的进程.为了增加速度,为每一种进程优先级建立一个不同的进程链表.