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