子系统 Cgroups

freezer子系统用于挂起和恢复cgroup中的进程。freezer有一个控制文件:freezer.state,将FROZEN写入该文件,

可以将cgroup中的进程挂起,将THAWED写入该文件,可以将已挂起的进程恢复。通过遍历cgroup中的进程,对其freeze或者wake_up。

freeze操作通过freeze框架实现,设置进程的TIF_SIGPENDING函数(伪信号),唤醒进程,然后进程在返回用户态时,信号处理入

口get_signal_to_deliver中通过try_to_freeze冻结进程。

关于子系统,Cgroups 层次结构与任务之间的关系,有以下几条规则:

1. A single hierarchy can have one or more subsystems attached to it.
一个层次结构可以关联一个或多个子系统。

2. Any single subsystem cannot be attached to more than one hierarchy if one of those hierarchies has a different subsystem attached to it already.
任何单个子系统不可以被关联到一个以上的层次结构,如果其中一个层次结构已经关系到一个不同的子系统。

3. A task cannot be a member of two different cgroup in the same hierarchy.
一个任务不能同时属于同一个层次结构中的两个 cgroup。

4. A forked task inherits the exact same cgroups as its parent task.
当 cgroups 中的一个任务 fork 出一个新任务时,新任务自动继承其父任务的 cgroup 关系。但是,新任务与父任务之间是完全独立的,新任务可以被移动到其他的 cgroups 。

Ns子系统

# mount -t cgroup none/mnt/cgroup/ -o ns

# ls -l /mnt/cgroup/

-r--r--r--    1 root    root            0 Jan  1 00:11 cgroup.procs

-rw-r--r--    1 root    root            0 Jan  1 00:11 notify_on_release

-rw-r--r--    1 root    root            0 Jan  1 00:11 release_agent

-rw-r--r--    1 root    root            0 Jan  1 00:11 tasks

 

ns 子系统提供了一个将进程分组到不同名称空间的方法。在具体名称空间中,进程可彼此互动,但会与在其它名称空间中运行的进程隔绝。这些分开的名称空间在用于操作系统级别的虚拟化时,也称之为容器。

内核是利用cgroups ns子系统对进程做了一个自动分类,相同nsproxy(即所有Namespace都相同的进程)的进程在一个cgroup,一旦通过clone创建新的Namespace,就会在当前cgroup下创建一个新的cgroup。这样以来,通过cgroup文件系统,在挂载ns 子系统的目录下,我们就可以清楚地看出Namespace的层次关系。同时操作一个进程加入或离开一个命名空间。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值