Linux内核分析与应用3-进程管理

简介: Linux内核分析与应用3-进程管理

本系列是对 陈莉君 老师 Linux 内核分析与应用 的学习与记录。讲的非常之好,推荐观看

留此记录,蜻蜓点水,可作抛砖引玉

image.png

3.1 进程概述

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

微信截图_20230926005325.png

微信截图_20230926005338.png

微信截图_20230926005351.png

微信截图_20230926005402.png

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

微信截图_20230926005516.png

微信截图_20230926005524.png

image.png

PCB: Process Control Block

task_struct结构体位于sched.h中

微信截图_20230926005539.png

微信截图_20230926005545.png

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

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

image.png

3.2 Linux进程创建

微信截图_20230926005639.png

微信截图_20230926005647.png

对于进程,线程,内核线程,内核使用唯一的数据结构task_struct来分别表示,也使用相同的调度算法对其进行调度.

尽管看起来差异很大,但最后都通过do_fork分别创建.

创建进程和创建线程调用了不同的函数,分别为forkpthread_create,而对应的系统调用分别为fork和clone.

所有的系统调用进入内核只有一个入口,但进入以后就分道扬镳,各有各的服务历程;而分手是暂时的,最终还是会归到一处,do_fork就是它们的聚合点.

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

image.png

copy_process()函数主要是为子进程创建父进程PCB的副本

微信截图_20230926005741.png

微信截图_20230926005747.png

微信截图_20230926005753.png

3.3 Linux进程调度


所谓调度,实际就是从就绪队列中,选择一个进程投入到CPU中运行.

"主战场"是就绪队列,核心是调度算法,实质是进程的切换

微信截图_20230926005835.png

image.png

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

微信截图_20230926005851.png

微信截图_20230926005859.png

机制与策略分离

image.png

完全公平调度---CFS,

没有了时间片的概念,而是分配CPU使用的比例

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

使用到了红黑树

CFS中的就绪队列,就是一棵已虚拟时间为键值的红黑树, 虚拟时间越小的进程,越靠近红黑树的左端, 调度器每次选择位于红黑树左端的进程.

微信截图_20230926005952.png

微信截图_20230926010001.png

微信截图_20230926010042.png

微信截图_20230926010049.png

微信截图_20230926010057.png

微信截图_20230926010105.png

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

蜗窝科技

目录
相关文章
|
1天前
|
Linux
Linux源码阅读笔记13-进程通信组件中
Linux源码阅读笔记13-进程通信组件中
|
1天前
|
消息中间件 安全 Java
Linux源码阅读笔记13-进程通信组件上
Linux源码阅读笔记13-进程通信组件上
|
1天前
|
Linux
Linux源码阅读笔记10-进程NICE案例分析2
Linux源码阅读笔记10-进程NICE案例分析2
|
1天前
|
Linux 数据安全/隐私保护
|
1天前
|
Linux
Linux源码阅读笔记09-进程NICE案例分析1
Linux源码阅读笔记09-进程NICE案例分析1
|
2月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
|
28天前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
23天前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
30 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
18天前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。
|
1月前
|
存储 缓存 安全
【Linux】冯诺依曼体系结构与操作系统及其进程
【Linux】冯诺依曼体系结构与操作系统及其进程
132 1