内核学习总结(二)

1. Linux 容器

使用 Cgroup 和 Namespace 就可以实现容器。 容器这个技术也称为操作系统虚拟化, 是将一个内核所管理的资源划分成多个分组。在 容 器 中,CPU 和 内 存 资 源 是 使 用 Cgroup 来 划 分 的。PID、IPC、 网 络 等 资 源 使 用

Namespace 来划分 的。

Cgroup:Cgroup(control group) 是将任意进程进行分组化管理的 Linux 内核功能。Cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O 或内存的分配控制等具体的资源管理功能是通过这个功能来实现的。
Cgroup 提供了一个 cgroup 虚拟文件系统, 作为进行分组管理和各子系统设置的用户接口。 要使用 Cgroup, 必须挂载 cgroup 文件系统 : mount -t cgroup -o cpu,cpuet,memory   cgroup /cgroup。


2.调度策略

Linux 调度策略的类别大致可以分为 TSS(Time Sharing System, 分时系统 ) 和实时系统这两种。

TSS:一方面, 一般的进程是通过分时运行的。 也就是说, 使用 CPU 的时间达到分配给进程的时间(时间片)时,就会切换到其他进程。这种分时运行的调度策略称为 TSS。

RS: 另一方面, 在实时制约较严格且要求保证实时的处理中 , 就需要指定静态的执行优先级 , 并严格按照执行优先级进行调度 。 对这种对应答性有要求的进程 , 可以使用实时调度策略 。 另外 , 与 TSS 调度策略的进程相比 , CPU 将优先分配给使用实时调度策略的进程。


要说调度,不得不说下优先级:

在 Linux 中, 进程的静态优先级为 0 ~ 99 ,TSS 调度策略的优先级为 0, 实时调度策略的优先级可以指定的范围为 1 ~ 99。 在100以下的优先级中,数值越大则优先级越高,而非实时进程的优先级一般是100-139,这段范围内,数值越大那么优先级越小,这里是和静态优先级相反的。

linux的进程调度策略分为FIFO,RR,和OTHER(NORMAL)三种。实时进程使用FIFO或RR调度,非实时进程使用OTHER调度。实时进程调度策略(FIFO,RR)和非实时进程调度策略上的主要不同点在于FIFO和RR在有高优先级进程的情况下,低优先级进程不可能运行。FIFO调度的特点是在没有更高优先级进程出现或主动释放CPU的情况下,进程可以一直运行,直到任务结束。RR调度将同优先级的进程放到一个队列,在没有更高优先级进程的情况下同优先级的进程公平分配CPU时间,也就是说相比于FIFO,RR调度的进程可以被同优先级的进程抢占,RR调度在同优先级的进程间引入时间片轮转机制。OTHER则是在所有不同优先级的进程间引入时间片轮转机制,所有优先级的进程根据优先级的高低进行分时运行,通过动态调整进程优先级使所有进程都有运行机会,在OTHER调度中就存在低优先级抢占高优先级进程(静态优先级)的情况。

下面稍微详细的说下:

SCHED_FIFO
这是实时调度策略 , 即具有静态优先级的调度策略 。 Linux 内核中能够为实时调度策略 的进程指定的优先级为 1 ~ 99 。 使用了 SCHED_FIFO 调度策略的进程 , 除了等待I/O 完 成 时 休 眠 、 自 发 休 眠 或 优 先 级 更 高 的 实 时 进 程 获 得 优 先 权 以 外 , 不 会 释 放 执行权。
使用 SCHED_FIFO 的实时调度策略时, 需要注意的是, 它的进程不会自动释放 CPU,也就是说执行权不会转移到其他进程。 例如, 实时调度策略的进程陷入无限循环时, 其他所有优先级较低的进程永远不会被赋予执行权,此时系统就会死机。

SCHED_RR
这也是实时调度策略。RR 是 round robin( 轮询 ) 的缩写, 与 SCHED_FIFO 不同的是,它具有时间片。时间片使用完时,执行权将转移到其他进程。

SCHED_OTHER
这是 Linux 的标准调度策略,也是所谓 TSS用户使用 chrt 命令可以很简单地更改调度策略

调度策略。在Linux 2.6.23 之后的 CFS 中,会公平地为所有 TSS 策略的进程分配 CPU 时间。其时间片是动态决定的。


知道不同的调度策略之后,那么如何更改不同的调度策略呢?

用户使用 chrt 命令可以很简单地更改调度策略。chrt -- help : chrt - manipulate real-time attributes of a process。

cheduling policies:
  -b | --batch         set policy to SCHED_BATCH
  -f | --fifo          set policy to SCHED_FIFO
  -i | --idle          set policy to SCHED_IDLE
  -o | --other         set policy to SCHED_OTHER
  -r | --rr            set policy to SCHED_RR (default)

Scheduling flags:
  -R | --reset-on-fork set SCHED_RESET_ON_FORK for FIFO or RR

Options:
  -a | --all-tasks     operate on all the tasks (threads) for a given pid
  -h | --help          display this help
  -m | --max           show min and max valid priorities
  -p | --pid           operate on existing given pid
  -v | --verbose       display status information
  -V | --version       output version information

例如  chrt -p -r 99 <pid> : 将某个运行的进程的优先级设置为 99。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值