共计 889 个字符,预计需要花费 3 分钟才能阅读完成。
本系列是对 陈莉君 老师 Linux 内核剖析与利用 的学习与记录。讲的十分之好,举荐观看
留此记录,走马观花, 可作抛砖引玉
3.1 过程概述
一个程序通过 编译器 将其编译成 汇编程序 , 通过汇编器将其汇编成指标代码, 通过 链接器 造成可执行文件 a.out 或者 elf 格局, 最初交给操作系统来执行
过程最根本的状态有三种: 就绪态, 睡眠态和运行态, 在具体的操作系统中, 可能实例化出多个状态.
PCB: Process Control Block
task_struct 构造体位于 sched.h 中
对于过程来说, 它的动态体现就是程序, 平时都安安静静呆在磁盘上, 而一旦运行起来, 就变成了计算机里的数据和状态的总和;
运行着的程序就是一个过程.
3.2 Linux 过程创立
对于 过程, 线程, 内核线程 , 内核应用惟一的数据结构task_struct
来别离示意, 也应用雷同的调度算法对其进行调度.
只管看起来差别很大, 但最初都通过 do_fork 别离创立.
创立过程和创立线程调用了不同的函数, 别离为 fork
和pthread_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 多平台公布