本系列是对 陈莉君 老师 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多平台公布