当前位置:文档之家› 第3章 进程管理 网络操作系统精品PPT课件

第3章 进程管理 网络操作系统精品PPT课件

Page3
3.1.2 进程描述符task_struct (include/linux/sched.h)
Page4
进程描述符(续)
进程控制块(PCB)
• 用于标识进程的存在,感知进程的变化,从而系统能够控 制进程
• 创建一个进程时,先创建它的PCB,然后根据此PCB管理 和调度进程,当PCB被释放后,对应的进程也随之消亡。
Page17
3.1.6 进程的地址空间 Linux把进程的线性地址空间组织为一个个线
性区 • 每一个线性区对应一组连续的页 • 线性区之间不重叠
Page18
进程的地址空间(续) task_struct
struct mm_struct *mm; 内存描述符 • mm_struct 里面有一个字段mmp,指向内存线
struct list_head { struct list_head *next, *prev;
};
Page12
3.1.4 进程PID hash
task_struct中的pid
• 为了快速的从pid值获得进程描述符。需要有hash 表
• hash_pid(),unhashpid()在pidhash表中分别插入 和删除一个进程
• p_opptr : original parent (process 1 或者创 建它的父进程)
• p_pptr: parent (父进程,有时候是调试时的调试 监管进程)
• p_cptr: child (指向自己最年轻的子进程) • p_ysptr:指向比自己年轻的兄弟进程 • p_osptr:指向比自己老的兄弟进程
• find_task_by_pid()查找散列表并返回给定PID的 进程描述符指针
Page13
Page14
3.1.5 进程之间的父子关系
task_struct中的 struct task_struct *p_opptr, *p_pptr, *p_cptr, *p_ysptr, *p_osptr;
性区链表的首部。
Page19
Page20
进程的地址空间(续) • 每个线性区有一定的访问权限。 • 在增加或删除线性区时,Linux尽量合并访问
权限相同且相邻的线性区。
Page21
进程堆的管理 • 每个进程都拥有一个特殊的线形区:堆 • 内存描述符里面的start_brk和brk字段限定了
这个区的开始地址和结束地址 • 常用的C库函数:malloc(),free() • 系统调用brk()用于直接修改堆大小
Page10
进程链表 task_struct中的
struct task_struct *next_task, *prev_task;
Page11
TASK_RUNNING状态的进程链表
task_struct中的 struct list_head run_list;
• list_head是Linux内核当中定义的一个数据结构用来实现双 向链表,Linux内核中使用上百个双向链表来存放各种数据结 (include\list.h)
网络操作系统Leabharlann 第三讲:进程管理 第一讲:操作系统概述
教师:计算机操作系统课程组 E-mail:zhao.yanhong@(赵艳红)
wxzx@(沈峰)
课件设计人:赵艳红
Contents
1
Linux中的进程
2
Linux进程控制
3
Linux的进程调度
Linux源代码阅读示例: 4 进程调度schedule部分的阅读
Page1
3.1 Linux中的进程
3.1.1 进程及轻量级进程 什么是进程?
• 一个正在执行的程序 • 一个程序在一个数据集上的一次运行过程 从内核的观点来看,进程的目的是担当分配系统资 源(CPU 时间,存储器等)的实体
Linux中的关于进程的代码大部分是如何管理 进程的代码
每个进程运行的是程序的代码
Page15
进程之间的父子关系(续)
Page16
进程之间的父子关系(续)
• Linux中的0号进程,通常称为swapper进程,是 所有进程的祖先。
• 由它执行cpu_idle()函数,当没有其他进程处 于TASK_RUNNING的时候,调度程序会选择0号 进程运行。
• 0号进程创建1号进程,通常称为init进程。它 创建和监控其他进程的活动。
(include/linux/sched.h)
#define TASK_RUNNING
0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define TASK_ZOMBIE
4
#define TASK_STOPPED
8
Page9
状态之间的转换
Linux中每一个进程由一个task_struct数据结构来描述(进 程控制块PCB)。
进程描述符放在动态内存中而且和内核态的进程栈放在一个 独立的8KB的内存区中。 • 好处:通过esp就能引用进程描述符
Page5
Page6
进程描述符(续)
Task_struct结构的描述: (1)进程标识 (2)进程状态(State) (3)进程调度信息和策略 (4)标识号(Identifiers) (5)进程通信有关的信息(IPC) (6)进程链接信息(Links) (7)时间和定时器信息(Times and Timers) (8)文件系统信息(Files System) (9)处理器相关的上下文信息
Page7
current宏 current宏
• current宏获取当前正在运行的进程描述符的指针, current宏经常作为进程描述符出现在内核代码里, 例如current->pid返回当前正在运行的进程的PID 值
Page8
3.1.3 进程的状态
task_struct 中的state 表示进程当前的状态 Linux中的进程有5个状态:
Page2
线程
线程代表进程的一个执行流,是轻量级进程内核, 无法感知。
Linux使用进程对多线程应用程序提供更好的支 持
• 进程是资源分配的基本单位。 • 一个进程中的所有线程共享该进程的所有资源。 • 线程是进程中的最小调度单位。 • 一个线程属于一个进程。一个进程至少有一个线程。 • 通过将进程与线程相关联,内核可以独立调度线程
相关主题