乐趣区

关于后端:Linux内核分析与应用3进程管理

本系列是对 陈莉君 老师 Linux 内核剖析与利用 的学习与记录。讲的十分之好,举荐观看

留此记录,走马观花, 可作抛砖引玉


3.1 过程概述

一个程序通过 编译器 将其编译成 汇编程序 , 通过汇编器将其汇编成指标代码, 通过 链接器 造成可执行文件 a.out 或者 elf 格局, 最初交给操作系统来执行

过程最根本的状态有三种: 就绪态, 睡眠态和运行态, 在具体的操作系统中, 可能实例化出多个状态.

PCB: Process Control Block

task_struct 构造体位于 sched.h 中

对于过程来说, 它的动态体现就是程序, 平时都安安静静呆在磁盘上, 而一旦运行起来, 就变成了计算机里的数据和状态的总和;

运行着的程序就是一个过程.


3.2 Linux 过程创立

对于 过程, 线程, 内核线程 , 内核应用惟一的数据结构task_struct 来别离示意, 也应用雷同的调度算法对其进行调度.

只管看起来差别很大, 但最初都通过 do_fork 别离创立.

创立过程和创立线程调用了不同的函数, 别离为 forkpthread_create, 而对应的零碎调用别离为 fork 和 clone.

所有的零碎调用进入内核只有一个入口, 但进入当前就各奔前程, 各有各的服务历程; 而离别是临时的, 最终还是会归到一处,do_fork 就是它们的聚合点.

父子过程共享内存的地址空间, 但父过程的页表除外

copy_process()函数次要是为子过程创立父过程 PCB 的正本


3.3 Linux 过程调度

所谓调度, 理论就是从就绪队列中, 抉择一个过程投入到 CPU 中运行.

“ 主战场 ” 是就绪队列, 外围是调度算法, 本质是过程的切换

O(1)调度: 将单链表变为多链表来实现, 从 O(n)升高到了 O(1)

机制与策略拆散

齐全偏心调度 —CFS,

没有了 工夫片 的概念, 而是调配 CPU 应用的比例

同一时刻, 一个 CPU 上运行的过程只能有一个. 当一个过程占用 CPU 的时候, 其余过程必须期待

应用到了 红黑树

CFS 中的就绪队列, 就是一棵已 虚构工夫 为键值的红黑树, 虚构工夫越小的过程, 越凑近红黑树的左端, 调度器每次抉择位于红黑树左端的过程.

更多可参阅 < 深刻了解 Linux 内核 > 第三版第七章

蜗窝科技


本文由 mdnice 多平台公布

退出移动版