TASK RUNNING状态的进程链表 当内核调度程序寻址一个新的进程在cpu上运 行时,必须只考虑可运行进程,因为扫描整个 进程链表效率很低 ·引入了可运行状态的双向循环链表,也叫运行 队列 ·进程描述符使用 struct list head run_list; 用来实现运行队列 xlanchen@2006.6.8 Embedded Operating Systems 16
xlanchen@2006.6.8 Embedded Operating Systems 16 TASK_RUNNING状态的进程链表 ⚫ 当内核调度程序寻址一个新的进程在cpu上运 行时,必须只考虑可运行进程,因为扫描整个 进程链表效率很低 ⚫ 引入了可运行状态的双向循环链表,也叫运行 队列 ⚫ 进程描述符使用 用来实现运行队列
对可运行队列的一些操作函数 add to runqueue 增加/删除一个可运行进程 del from_runqueue int nr_running; 可运行队列的长度,可运行进程的个数 wake_up_process 唤醒一个进程,使一个进程可运行 xlanchen@2006.6.8 Embedded Operating Systems 17
xlanchen@2006.6.8 Embedded Operating Systems 17 对可运行队列的一些操作函数 增加/删除一个可运行进程 可运行队列的长度,可运行进程的个数 唤醒一个进程,使一个进程可运行 …
pidhash表及链接表 在一些情况下,内核必须能从进程的PD得出 对应的进程描述符指针。例如k训系统调用 。为了加速查找,引入了pidhashi散列表 #define PIDHASH SZ (4096 >2) struct task_struct *pidhash[PIDHASH_SZ]; 。用pid hashfn?宏把PID转换成表的索引 #define pid_hashfn(x)((((x)>>8)(x))&(PIDHASH_SZ -1)) xlanchen@2006.6.8 Embedded Operating Systems 18
xlanchen@2006.6.8 Embedded Operating Systems 18 pidhash表及链接表 ⚫ 在一些情况下,内核必须能从进程的PID得出 对应的进程描述符指针。例如kill系统调用 ⚫ 为了加速查找,引入了pidhash散列表 ⚫ 用pid_hashfn宏把PID转换成表的索引
pidhash表及链接表 pidhash 0 : PID PID 199 199 26799 PID .-----+hshn能 216 26800 ig疏PpW . 1023 xlanchen@2006.6.8 Embedded Operating Systems 19
xlanchen@2006.6.8 Embedded Operating Systems 19 pidhash表及链接表
进程之间的亲属关系 程序创建的进程具有父子关系,在编程时往往 需要引用这样的父子关系。进程描述符中有几 个域用来表示这样 /* pointers to (original)parent process,yo 米 older sibling,respectively.(p->father p->p_pptr->pid) 米 struct task_struct *p_opptr,*p_pptr,*I xlanchen@2006.6.8 Embed P啦 一一.◆卫p
xlanchen@2006.6.8 Embedded Operating Systems 20 进程之间的亲属关系 ⚫ 程序创建的进程具有父子关系,在编程时往往 需要引用这样的父子关系。进程描述符中有几 个域用来表示这样的关系