●当一个进程被创建时,系统就为该进 程建立一个 task struct任务结构体。 当进程运行结束时,系统撤消该进程 的任务结构体。 ●所以进程的任务结构体是进程存在的 唯一标志
⚫当一个进程被创建时,系统就为该进 程建立一个task_struct任务结构体。 ⚫当进程运行结束时,系统撤消该进程 的任务结构体。 ⚫所以进程的任务结构体是进程存在的 唯一标志
● Linux把系统中所有进程的任务结构 体集中进行管理,并根据需要把它们 组织成各种不同的链表(队列)。 个主要的链表结构是把所有进程 的任务结构体相互链接成一个环行 双向链表 链表首结点就是初始化进程nt的任 务结构体 init task
⚫Linux把系统中所有进程的任务结构 体集中进行管理, 并根据需要把它们 组织成各种不同的链表(队列)。 ⚫ 一个主要的链表结构是把所有进程 的任务结构体相互链接成一个环行 双向链表. ⚫ 链表首结点就是初始化进程init的任 务结构体init_task
●这个双向链表是通过任务结构体中 的两个成员项指针相互链接而成: struct task struct k next task: struct task struct x prev task; ●系统还在的内核空间设置了一个指 针数组task],该数组的每个元素 指向一个任务结构体 ●task数组又称为task向量
⚫这个双向链表是通过任务结构体中 的两个成员项指针相互链接而成: struct task_struct * next_task; struct task_struct * prev_task; ⚫系统还在的内核空间设置了一个指 针数组task[ ],该数组的每个元素 指向一个任务结构体 ⚫task数组又称为task向量
init task task[ 任到 进 ask矢量)结 程0进 2 结构体」程 进 n 在务程 结构 510 2 511 任务 nr tasks 结构 进程 n
task[ ] (task矢量 ) init_task 任务 结构体 任务 结构体 任务 结构体 任务 结构体 进程0进程1进程2进程n nr_tasks n 511 510n012 …
●task数组的大小决定了系统中能够 容纳进程的最大数量。 ●task数组的定义如下: struct task struct *task[NR TASKS I&init task: ●task[]数组是一个指向 task struct 结构的指针数组
⚫ task数组的大小决定了系统中能够 容纳进程的最大数量。 ⚫task 数组的定义如下: struct task_struct *task[NR_TASKS] = {&init_task}; ⚫task[ ]数组是一个指向task_struct 结构的指针数组