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内核>第三版第七章

蜗窝科技


相关推荐
她的男孩2 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
爱读源码的大都督2 小时前
Claude Code源码分析(三):为什么系统提示词中需要有tools呢?
前端·人工智能·后端
爱勇宝2 小时前
Claude Code 被曝暗藏“隐形检测”代码:封代理不是最可怕的,可怕的是你根本不知道它在干什么
前端·后端·程序员
ITOM运维行者2 小时前
从零搭建企业级服务器监控体系:踩坑实录与架构设计
前端·后端
用户4099322502122 小时前
Vue状态管理入门第四章:组合式store和SSR风险
前端·vue.js·后端
用户34232323763172 小时前
SPI 通信与高速外设驱动详解
后端
魏祖潇3 小时前
SDD 完整指南——Spec 端打底、Story 端交付、留白区
人工智能·后端
feelmylife593 小时前
消息队列可靠投递与幂等消费 -- 从"消息丢了"到"消息别重复"的完整工程实践
后端
雪隐3 小时前
个人电脑玩AI-10让5060 Ti给你打工——部署 Odysseus:终于有个能打的"AI管家"了
人工智能·后端
copyer_xyf3 小时前
FastAPI 如何连接 MySQL
后端·python