深入Linux内核(一):进程调度

进程分类:

1. 交换式进程 interactive processes    

    交互式进程是经常与用户进行交互,因此需要花很多的时间等待键盘和鼠标操作,当接受输入后,进程必须被很快唤醒,不然就会出现系统反应迟钝。典型的交互式程序是SHELL命令、文本编辑和图像应用程序

2. 批处理进程 batch process

    不必与用户交互,经常在后台运行的程序,这样的程序不必很快的响应,典型的应用是,数据库索引引擎和科学计算等等。

3.实时进程 real-time processes 

    需要快速的响应能力,响应变化很小,不会被低优先级的进程阻塞,典型的应用程序为视频、音频以及需要实时收集数据的程序。

调度器: 进程管理子系统的核心功能 专为进程调度

有这样一种情况

为了描述一个数据的特征,进程查看需要知道进程名,进程号,由哪个进程启动的,打开哪个文件,子进程号 ,与共享资源等等。在操作系统上有N个进程同时运行

对内核来说如何识别每一个进程呢? 所以我们要用一个数据结构来描述这些特征,存储一个进程的这些信息叫做数据结构表,每一个结构体在32位系统中占17K 用于描述一个进程的状态信息,所有 的进程组合起来,就形成链表,这个链表是一个双向链表 ,当我们创建新进程的时候就是实现在现有的连接中插入或添加一个条目,当然这个过程比我们描述的远远要复杂


        
内核2.6 以后引入了 O(1) 调度器

O(1) |O(log n) | O(n) | O(n^2) | O(2^n) 
衡量算法 / 队列的关系

随机挑一个 执行程序长短的对应关系
调度器 随着队列长度的增加  随机挑选出一个时间长度的变化
O(1) 最大的缺点  完全平均  浪费执行时间
O(1)算法 每一次扫描 140次  调用一个执行
active活动队列 等待执行
按照进程优先级分组 级别最高开始运行 L0 



Deadline 死亡期限  维护3个队列

新增一个队列 里面增加一个死亡期限  倒数死亡计时器
交互式进程应用 最佳应用于数据库 仅仅是参照

O(1) 调度算法 最常见的是 CFS 完全公平算法
为每一个进程分配一个 时间占用比例

进程调度策略:

静态优先级:       数字越小 优先级越高
 0-99, 100-139 
动态优先级  只能调整 100--139 调整后表现为NICE值调整
 1--140
 实时调整优先级状态
 120--> 120(interactive) --> 115, NICE(-5)

nice值:
-20-19
100-139

实时优先级 : 数字越大优先级越高
  0--99

调度策略:
SCHED FIFO  [1-99]
SCHED_RR    轮询 不能用RR调度
posix :SCHED_NORMAL other(100-139)  调度传统常见的分时的进程 /动态优先级    CFS

SCHED_FIFO 先进先出
chrt -f [1-99] /path/to/program arguments

SCHED_RR  时间片轮转
chrt -r [1-99] /path/to/program arguments

查看CPU性能:
1.平均负载  进程个数  同时等待超过3就是CPU速度慢了
2.CPU利用率


过去一分钟内的平均长度 

uptime 

top


yum install sysstat

sar -q 1 2  每一秒中取一次 一个取两次

vmstat 1 5  正在队列中执行的个数

查看利用率
mpstat 
sar -P ALL 1

CPU 缓存是如何实现的:
类别:
直接映射
完全附属缓存:

yum install x86info
x86info
valgrind --tool=cachegrind ls

多个CPU访问均衡:
ps axo comm,pid,psr | grep httpd

实现进程与CPU绑定:
taskset -c -p CPU list PID

isolcpus=cpu nmuber.. 

调度域:
将进程绑定到指定的CPU上

CPU --> 指定在调度域中 
调度域会指派到CPU中 运行完后 就把进程放在后续态中

一个cpu集合表示一个调度域

numa  调度域中还可以由子调度域

Create a mount point at /cpus 
Add an entry to /etc/fstab

cat mems 
echo 0 > mems

echo 6918 tasks
echo 6918 > tasks
cat tasks

cat cpu_exlusive  该cpu是否属于多个调度域/子域
0 ;不独占
1 :cpu唯一属于这个域


cpuset 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值