进程 xlanchen@2006.6.8
进程 xlanchen@2006.6.8
主要内容 ·进程描述符 ·进程切换 ·进程的创建和删除 ·进程调度 xlanchen@2006.6.8 Embedded Operating Systems
xlanchen@2006.6.8 Embedded Operating Systems 2 主要内容 ⚫ 进程描述符 ⚫ 进程切换 ⚫ 进程的创建和删除 ⚫ 进程调度
进程的概念 ·进程是执行程序的一个实例 ·进程和程序的区别 。几个进程可以并发的执行一个程序 ·一个进程可以顺序的执行几个程序 xlanchen@2006.6.8 Embedded Operating Systems 3
xlanchen@2006.6.8 Embedded Operating Systems 3 进程的概念 ⚫ 进程是执行程序的一个实例 ⚫ 进程和程序的区别 ⚫ 几个进程可以并发的执行一个程序 ⚫ 一个进程可以顺序的执行几个程序
进程描述符 为了管理进程,内核必须对每个进程进行清晰 的描述 。 ·进程描述符提供了内核所需了解的信息 include/linux/sched.h struct task struct xlanchen@2006.6.8 Embedded Operating Systems
xlanchen@2006.6.8 Embedded Operating Systems 4 进程描述符 ⚫ 为了管理进程,内核必须对每个进程进行清晰 的描述。 ⚫ 进程描述符提供了内核所需了解的信息 ⚫ include/linux/sched.h struct task_struct
state flags need resched counter nike next task prev task -…-- run_list 中中十中■中✉ ttystruct p_optr 4量44量■长4业 tty assocloted with the process P_pptr 作struct Corent directory m业。 tty ACLAASEI8 files struct ointers t加fe descnptors mmstruct thread Painters to memory wreds descnotors fs signal struct files mm Signais received sigmask_lock sig
xlanchen@2006.6.8 Embedded Operating Systems 5 进程描述符
进程状态 ·可运行状态(TASK RUNNING) ● 可中断的等待状态(TASK INTERRUPTIBLE) ·不可中断的等待状态 (TASK_UNINTERRUPTIBLE) ·暂停状态(TASK STOPPED) ·僵死状态(TASK ZOMBIE) xlanchen@2006.6.8 Embedded Operating Systems 6
xlanchen@2006.6.8 Embedded Operating Systems 6 进程状态 ⚫ 可运行状态(TASK_RUNNING) ⚫ 可中断的等待状态(TASK_INTERRUPTIBLE) ⚫ 不可中断的等待状态 (TASK_UNINTERRUPTIBLE) ⚫ 暂停状态(TASK_STOPPED) ⚫ 僵死状态(TASK_ZOMBIE)
进程状态转换图 ●●● ●●●● 一个既在的 TASK ZOMBIE 进程调用fork 〔进程被终 来创建一个 止) 新进程 调度器选择一个task: schedule()call Task context switch 进程调用do exit forks 终止执行 TASK RUNNING TASK RUNNING 〔就绪,但是没 〔正在运行) 有在运行) 进程被高优先级的 进程抢占 进程睡眠在等待特定事件 或是资源的等待队列上 TASK INTERRUP TIBLE 事件发生或资源可用,进 ox 程被唤醒并被放到运行 TASK UNINTERRUP TIBLE 队列上 (等待中)
xlanchen@2006.6.8 Embedded Operating Systems 7 进程状态转换图
标识一个进程 ●使用进程描述符地址 进程和进程描述符之间有非常严格的一一对应关系, 使得用32位进程描述符地址标识进程非常方便 ·使用PID(Process ID,PID) 。每个进程的PID都存放在进程描述符的pid域中 xlanchen@2006.6.8 Embedded Operating Systems 8
xlanchen@2006.6.8 Embedded Operating Systems 8 标识一个进程 ⚫ 使用进程描述符地址 ⚫ 进程和进程描述符之间有非常严格的一一对应关系, 使得用32位进程描述符地址标识进程非常方便 ⚫ 使用PID (Process ID,PID) ⚫ 每个进程的PID都存放在进程描述符的pid域中
进程描述符 ●Linux为每个进程分配一个8KB大小的内存区 域,用于存放该进程两个不同的数据结构: 。进程描述符 。进程的内核堆栈 0x015无f肝 进程处于内核态时使用 STACK 不同于用户态堆栈 内核控制路径所用的堆栈 0x015fb000 很少,因此对栈和描述符 来说,8KB足够了 0x015ha878 0x015h3b PROCESS DESCRIPTOR xlanchen@2006.6.8 Embedded Opera awrent- 0x015fa000
xlanchen@2006.6.8 Embedded Operating Systems 9 进程描述符 ⚫ Linux为每个进程分配一个8KB大小的内存区 域,用于存放该进程两个不同的数据结构: ⚫ 进程描述符 ⚫ 进程的内核堆栈 进程处于内核态时使用 不同于用户态堆栈 内核控制路径所用的堆栈 很少,因此对栈和描述符 来说,8KB足够了
Task union C语言允许用如下的一个union:结构来方便的表 示这样的一个混合体 union task_union{ struct task struct task; unsigned long stack[INIT_TASK_SIZE/sizeof(long)]; }; =2048 xlanchen@2006.6.8 Embedded Operating Systems 10
xlanchen@2006.6.8 Embedded Operating Systems 10 Task_union ⚫ C语言允许用如下的一个union结构来方便的表 示这样的一个混合体 =2048