亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

容器的創建原理

2023-10-08 01:18:55
39
0

容器=cgroup(資源控制)+namespace(訪問隔離)+rootfs(文件系統隔離)+容器引擎(生命周期控制)

容器的創建原理

  1. 創建進程
    pid = clone(fun, stack, flags, clone_arg);
    (flags: CLONE_NEWPID | CLONE_NEWNS | CLONE_NEWUSER | CLONE_NEWNET | CLONE_NEWPIC | CLONE_NEWUTS | ...)
    
    通過clone系統調用,并傳入各個namespace對應的clone flag,創建了一個新的子進程,該進程用用自己的pid、mount、user、net、ipc、uts namespace。
  2. 設定cgroup
    簡單的說,創建一個新的cgroup就是在cgroupfs的掛載目錄中創建一個新的文件夾,因為cgroup分了不同的subsystem,掛載在不同的目錄下,所以在每個目錄下都創建一個新的文件夾,將進程的pid寫進去。
    echo &pid > /sys/fs/cgroup/cpu/tasks
    echo &pid > /sys/fs/cgroup/cpuset/tasks
    echo &pid > /sys/fs/cgroup/blkio/tasks
    echo &pid > /sys/fs/cgroup/memory/tasks
    echo &pid > /sys/fs/cgroup/devices/tasks
    echo &pid > /sys/fs/cgroup/freezer/tasks
    
    將進程pid寫入各個cgroup子系統中。
  3. 創建文件系統
    fun()
    {
        ...
        pivot_root("path_of_rootfs/", path);
        ...
        exec("bin/bash");
        ...
    }
    
    該fun函數由上面生成的新進程執行,在fun函數中,通過pivot_root系統調用,使進程進入一個新的rootfs,之后通過進入一個新的rootfs,之后通過exec系統調用,在新的namespace、cgroup、rootfs中執行"/bin/bash"程序。
0條評論
0 / 1000
cactusii
15文章數
0粉絲數
cactusii
15 文章 | 0 粉絲
原創

容器的創建原理

2023-10-08 01:18:55
39
0

容器=cgroup(資源控制)+namespace(訪問隔離)+rootfs(文件系統隔離)+容器引擎(生命周期控制)

容器的創建原理

  1. 創建進程
    pid = clone(fun, stack, flags, clone_arg);
    (flags: CLONE_NEWPID | CLONE_NEWNS | CLONE_NEWUSER | CLONE_NEWNET | CLONE_NEWPIC | CLONE_NEWUTS | ...)
    
    通過clone系統調用,并傳入各個namespace對應的clone flag,創建了一個新的子進程,該進程用用自己的pid、mount、user、net、ipc、uts namespace。
  2. 設定cgroup
    簡單的說,創建一個新的cgroup就是在cgroupfs的掛載目錄中創建一個新的文件夾,因為cgroup分了不同的subsystem,掛載在不同的目錄下,所以在每個目錄下都創建一個新的文件夾,將進程的pid寫進去。
    echo &pid > /sys/fs/cgroup/cpu/tasks
    echo &pid > /sys/fs/cgroup/cpuset/tasks
    echo &pid > /sys/fs/cgroup/blkio/tasks
    echo &pid > /sys/fs/cgroup/memory/tasks
    echo &pid > /sys/fs/cgroup/devices/tasks
    echo &pid > /sys/fs/cgroup/freezer/tasks
    
    將進程pid寫入各個cgroup子系統中。
  3. 創建文件系統
    fun()
    {
        ...
        pivot_root("path_of_rootfs/", path);
        ...
        exec("bin/bash");
        ...
    }
    
    該fun函數由上面生成的新進程執行,在fun函數中,通過pivot_root系統調用,使進程進入一個新的rootfs,之后通過進入一個新的rootfs,之后通過exec系統調用,在新的namespace、cgroup、rootfs中執行"/bin/bash"程序。
文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
1
0