深入理解Linux内核-进程调度
1、什么时候进行进程切换
调度策略目标:1、进程响应尽量快;2、后台作业吞吐量尽量高;3、尽可能避免进程饥饿;4、低优先级和高优先级进程需要尽量调和。
调度策略:决定什么时候选择什么进程运行的规则。基于分时技术。调度程序跟踪进程,动态调整优先级
进程分三类:1、交互进程;2、批处理进程;3、实时进程;
抢占无需等待当前进程的时间片片结束
时间片:应该大于进程切换花费的时间,越大,CPU利用率越高。但是太大又会导致进程看起来不是并发的。
进程动态优先级:进程的动态优先级,是在静态优先级的基础上,根据它的平均睡眠时间,调整它的优先级,睡眠时间长,提高它的优先级;反之,降低优先级
公式 动态优先级 = max(100, min(静态优先级 - bonus +5, 139)
其中bonus 与平均睡眠时间成正比,范围是0~10。
活动进程:没有用完时间片的进程,运行运行
过期进程:用完了时间片的进程,被禁止运行,直到所有的活动进程都过期
另外:活动的批处理进程总是会变为过期进程,活动的交互进程通常仍然是活动进程,它会被调度程序重新填充时间片。
实时进程:与实时优先级相关(1~99),实时进程总是活动进程
两种创建新进程的方式:1、fork:创建当前进程的副本;2、exec:将新进程加载到当前进程的内存中执行。
内核支持的程序执行形式:
1、Unix进程,也叫做重量级进程;本质上进程可以由N个线程组成,这些线程共享数据和资源。
2、线程,也叫做轻量级进程
命名空间:
1、包含N个PID的集合
进程地址空间:
1、每个进程使用独立的虚拟地址空间
2、虚拟地址空间都是一样都大小,不考虑可用物理内存的大小
3、使用页表为物理地址分配虚拟地址
4、两个进程的虚拟地址页可以映射到同一个物理地址页帧,即共享内存
页:虚拟地址空间中的页
页帧:物理内存页
页表:将虚拟地址空间映射到物理地址空间的数据结构。