深入理解 linux swapper 进程

Linux中的特殊进程:idle进程(0号进程)、init进程(1号进程,被systemd 取代 )、kthreadd进程(2号进程) kthreadd线程是内核空间其他内核线程的直接或间接父进程,PID为2;idle进程是init进程和kthreadd进程(内核线程)的父进程;init进程是Linux中第一个用户空间的进程,PID为1;该进程是Linux中的第一个进程(线程),PID为0;init进程是其他用户空间进程的直接或间接父进程;kthreadd线程负责内核线程的创建工作; 阅读详情
AI摘要

本文概述了Linux中的关键进程,包括调度进程、init进程、页守护进程及其相关特性,如僵死进程和swapper进程的工作机制。

转载博文:

http://blog.youkuaiyun.com/bengda/article/details/7681327

LINUX进程小结

id为0的进程通常是调度进程,常常被称为交换进程(swapper),该进程为内核的一部分,他并不执行任何磁盘上的程序,因此也被称为系统进程。
id为1 init进程,在自举过程结束后由内核调用。
id为2 页守护进程

对于父进程已经终止的所有进程,他们的父进程都改变为init。
在一个进程终止时,内核逐个检查所有活动的进程,以判断他是否是正要终止进程的子进程,如果是,则将该进程id更改为1,这种方法保证了每个进程都有一个父进程。

如果子进程在父进程终止之前终止,父进程如何能做相应检验得到子进程的终止状态呢?对此的回答是:内核为每个子进程保存了一定量的信息,所以当终止进程的父进程调用wait或waitpid时,可以得到这些信息。
僵死进程:一个已经终止,但是其父进程尚未对其进行善后处理(获取终止子进程的有关信息,释放它仍占有的资源)的进程

一个由init进程领养的进程终止时会发生什么?他会不会变为一个僵死进程?
否!因为init被编写为无论何时只要有一个子进程终止,init就会调用一个wait函数取得其终止状态。这样就防止了系统中有很多僵死进程。

 

Swapper 进程:

http://blog.chinaunix.net/uid-26856484-id-3266514.html

进程0 :
所有进程的祖先叫做进程0 ,idle 进程或因为历史的原因叫做swapper 进程。它是在 linux 的初始化阶段从无到有的创建的一个内核线程。这个祖先进程使用静态分配的数据结构。
在多处理器系统中,每个CPU都有一个进程0,主要打开机器电源,计算机的BIOS就启动一个CPU,同时禁用其他CPU。运行的CPU 上的swapper进程初初始化内核数据结构,然后激活其他的并且使用copy_process()函数创建另外的swapper进程,把0 传递给新创建的swapper进程作为他们进程的PID.
进程1 :
由进程0创建的内核线程执行init() 函数,init() 一次完成内核的初始化。init()调用execve()系统调用装入可执行程序init ,结果 ,init 内核线程变成一个普通的进程,且拥有自己的每个进程内核数据结构。在系统关闭之前,init 进程一直存活,因为它创建和监控在操作系统外层执行的所有进程的活动。

 


 

嵌入式学习——2——进程(Process) 1、linux启动的第一个进程是0号进程,是静态创建的2、在0号进程启动后会接连创建两个进程,分别是1号进程和2和进程。3、1号进程最终会去调用可init可执行文件,init进程最终会去创建所有的应用进程。4、2号进程会在内核中负责创建所有的内核线程5、所以说0号进程是1号和2号进程的父进程;1号进程是所有用户态进程的父进程;2号进程是所有内核线程的父进程。 阅读详情

相关推荐

Linux内核进程,线程,进程组,会话组织模型以及进程管理

唤醒睡眠状态任意的线程可以用wake_up_process,它可和唤醒处于深度睡眠状态的线程。结合最开始的图和代码,我们可以得到如下结论:1.kthead衍生的内核线程没有session pid,说人话就是所有的内核线程没有都没有操作控制台,不能通过控制台去操作控制。2.idle任务不会出现在for_each_process的处理循环中。3.每cpu_rq就绪队列中,不会将idle统计到nr_running中。

tugouxp的专栏 3114

微视linux swapper进程

swapper是linux第一个线程,也就是0号线程。很多书里面都有详细介绍。 为什么linux启动之后,swapper线程就开始运行了呢? 我认为主要有两点: 第一点:静态部分。 swapper线程通过静态初始化,设置的地址空间是内核高1G的空间。也就是说其使用的正文段,数据段和linux使用的正文段和数据段是完全一致的。 第二点:动态部分。 堆栈寄存器等寄存器在内核启动阶段通过汇编语句设置。...

shipinsky的博客 1300

深入理解Linux僵尸进程与孤儿进程:C++多进程编程实战与系统资源管理

在操作系统进程管理中,进程生命周期管理是核心基础概念。其原理基于父子进程间的资源继承与状态同步机制,通过fork()系统调用创建子进程,父进程需通过wait()系列函数回收子进程资源。这一机制的技术价值在于保障系统资源的有效释放,避免进程号等有限资源被无效占用。在C++后端开发、系统编程及服务器架构等应用场景中,若处理不当会产生僵尸进程,导致资源泄漏;或形成孤儿进程,由init进程自动接管。本文聚焦于Linux环境下进程状态管理的工程实践,通过C++代码示例演示如何制造、检测与避免僵尸进程,并深入探讨SIG

weixin_34357928的博客 350

Linux 为什么运行 swapper

linux 系统中,当 cpu 上没有要执行的任务时,往往会运行 swapper 进程,即 idle 状态,这时我们可以说 cpu 处于空闲状态。

Mercury_Lc的博客 1627

Linux内核0号进程:idle进程的诞生与启动全解析

在Linux内核中,当CPU没有任务可运行时,调度器需要选择一个进程来兜底,这就是idle进程(swapper)。该进程每个CPU都有一个,pid为0,永远处于可运行状态。要理解其诞生机制,需要从start_kernel到rest_init的启动主线说起。系统在完成核心初始化后,通过rest_init创建pid1和pid2,然后当前执行上下文直接演变为idle进程,整个过程没有fork。随后cpu_startup_entry进入do_idle死循环,通过hlt指令降低功耗。在实际生产环境中,可以通过/pro

weixin_28730131的博客 300

Windows服务器渗透必备:5款杀软在线识别平台实测对比(附避坑指南)

本文针对Windows服务器渗透测试中的关键环节,实测对比了五款主流的在线杀软识别平台。文章从实战场景出发,深入分析了各平台在识别准确率、响应速度、隐匿性及使用风险上的差异,并提供了详尽的避坑指南与高级隐匿技巧,旨在帮助安全人员快速、精准地识别目标环境安全防护,为后续行动奠定情报基础。

weixin_29322553的博客 433

linux 的 swapper 进程不能sleep,深入理解perf报告中的swapper进程

本文将要为您介绍的是深入理解perf报告中的swapper进程,教程操作步骤:一、前言1、在perf监控进程的系统调用时,会出现大量swapper进程2、官方描述该进程是当CPU上没有其他任务运行时,就会执行swapper。换句话说swapper意味着CPU啥事也没干,跑去休息去了3、本文来观察一下swapper在cpu上的表现二、环境准备组件版本OSUbuntu 16.04.4 LTSsyste...

weixin_31302227的博客 598

版电力系统故障录波_故障录波识图与典型故障波形分析

1、设置故障录波的目的故障录波装置是对电力系统运行状况进行监控的一种自动化设备。系统正常运行时,录波装置不启动录波,当系统发生故障时,通过启动录波装置迅速启动录波器录波,直接记录反应故障装置安装处系统故障的电气量。2、故障录波的作用(1)正确评价继电保护和自动装置的工作。(2)正确分析事故的原因并研究防止对侧。(3)发现继电保护和自动装置缺陷。(4)发现一次设备缺陷,及时消除隐患。(5)帮助寻找故...

weixin_42495661的博客 1万+

深入理解Linux内核个人小结3--进程

进程---程序执行的一个实例 一.  进程的静态特性    1.进程与线程:       Linux2.6内核版本支持多线程,现在大部分多线程应用程序都是使用pthread库编写的。  Linux2.6内核加入了对内核线程组的概念,每个进程描述符多加了一个tgid字段。       Linux通过轻量级进程来实现对多线程的支持,线程之间可以共享一些资源(地址空间、打开的文件等)。线

我是小强的专栏 715

Flink SQL数据血缘实战:如何用Calcite追踪字段级数据流向(附源码示例)

本文深入探讨了如何利用Apache Calcite解析Flink SQL执行计划,实现字段级数据血缘的追踪。通过扩展Calcite的元数据处理器,特别是针对Flink特有的Snapshot等节点,文章提供了从获取优化后的逻辑计划到提取并可视化血缘关系的完整实战方案,并附有核心源码示例,帮助开发者构建实时数仓的数据治理能力。

weixin_29032337的博客 142

别再纠结了!手把手教你根据项目需求选对目标检测框架(MMDetection/Detectron2/YOLOv8实战对比)

本文详细对比了三大目标检测框架MMDetection、Detectron2和YOLOv8的适用场景与实战技巧,帮助开发者根据项目需求精准选型。从毕业设计到工业落地,分析不同场景下的核心需求与框架优势,提供决策树和避坑指南,确保技术选型与项目目标高度匹配。

weixin_30342209的博客 554

《深入理解Linux内核》读书笔记-第三章-进程(2) .

进程切换: 为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行,这种行为被称为进程切换、任务切换或上下文切换。 硬件上下文: 尽管每个进程可以拥有属于自己的地址空间,但所有进程必须共享CPU寄存器。因此,在恢复一个进程的执行之前,内核必须确保每个寄存器装入了挂起进程时的值。 进程恢复执行前必须装入寄存器的一组数据称为硬件上下文。硬件

lengwuqin的专栏 501

AWS S3文件上传性能优化:Java SDK多线程与分段上传实战指南

本文详细介绍了如何通过Java SDK优化AWS S3文件上传性能,重点讲解多线程并发上传与分段上传(Multipart Upload)技术的实战应用。通过动态调整分段策略、线程池配置及内存优化技巧,可显著提升大文件上传效率,实测显示组合方案比单线程上传提速近5倍。文章还涵盖加密上传、断点续传等高级场景解决方案,并提供了完整的性能对比测试数据。

d6e7f8的博客 1016

《深入理解Linux内核(第三版)》笔记(一),第二章内存寻址

笔记(一) 对应原书第二章,内存寻址

系统!内核! 953

OAI数据集申请下载全攻略:从个人NDA账号注册到数据包下载的保姆级避坑指南

本文提供OAI数据集申请下载的完整指南,涵盖从个人NDA账号注册到数据包下载的全流程。重点解析login.gov验证陷阱、浏览器兼容性问题、NDA权限申请技巧及nda-tools高效使用方法,帮助医学影像研究者避开常见技术障碍,快速获取全球骨关节炎研究数据库OAI的宝贵数据资源。

weixin_28698059的博客 752

【Origin+Python】使用External Python批量出图代码参考2

不使用part2 的代码,自己打开一个origin2022的界面。这里主要介绍一些进阶代码以及使用盗版origin要如何。3 批量绘制相同设置的曲线图。然后就是没有水印的图片了。

zeng001201的博客 1908

深入理解Linux内核之主调度器(下)

4.进程上下文切换 前面选择了一个合适进程作为下一个进程,接下来做重要的上下文切换动作,来保存上一个进程的“上下文”恢复下一个进程的“上下文”,主要包括进程地址空间切换和处理器状态切换。 注:这里的上下文实际上是指进程运行时最小寄存器的集合。 如果切换的next进程不是同一个进程,才进行切换: __schedule i f (likely(prev != next)) { ... context_switch //进程上下文切换 } 4.1 进程地

LieBao 377

MATLAB船舶开尔文尾迹三维仿真建模

开尔文尾迹介绍 Kelvin最早研究舰船在水面运动在水面上形成波纹的原理,主要针对静水中点源运动的尾迹问题,并给出尾迹的张角和波高分布情况。由 Kelvin 的理论,一般情况下假设由一个理想点源来代替舰船,开尔文尾迹由分歧波和横断波组成,分歧波向船的两侧扩散,而横断波主要向船的后方传播,在相遇的地方两波相干形成尖头波,且尖头波位于尾迹角16°到19.5°之间,又因为尖头波波长过短,以至于无法单独的区分出每个尖头波的波前,所有的波前在视觉效果上就连成一条直线表现为亮线,称为开尔文臂,开尔文臂以船身对称,且角度

qq_19512613的博客 3844

Linux深入理解内存管理36

Linux深入理解内存管理36(基于Linux6.6)---临时页表映射过程介绍

ListQ的博客 991

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

深入理解Linux内核-第七章 进程调度 http://blog.youkuaiyun.com/sailor_8318/article/details/2460177

深入理解Linux内核-第七章 进程调度 Sailor_forever分析整理 sailing_9803@163.com 转载请注明 http://blog.youkuaiyun.com/sailor_8318/archive/2008/05/20/2460177.aspx   【摘要】本章首先分析了Linux调度的基本分时策略,然后介绍了RR、FIFO、OTHER等三种调度算法以及与之相关的基本时间

诺尔曼 988

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

《深入理解Linux内核》--第七章:进程调度:读书笔记

零、感想 进程调度涉及的 priority、进程的状态(TASK_RUNNING、TASK_INTERRUPT、TASK_UNINTERRUPT、TASK_STOPPED)。Linux系统有个PID为0的进程——swapper进程(只有在CPU不能执行其他进程才执行)。 在多处理器系统中涉及 调度域,比较值得注意的是Intel的超线程技术(包括几个内部寄存器的拷贝,当前线程在访问...

love19820823 113

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

深入理解Linux内存映射机制

创建时间:2008-08-31 文章属性:原创 文章提交:wzt (wzt_at_xsec.org) 深入理解Linux内存映射机制 Author: wzt EMail: wzt@xsec.org Site: http://www.xsec.org & http://hi.baidu.com/wzt85 Date: 2008-6-13 一. 绪 论 二. X86的硬件

风之伤 983

Linux内核页表管理机制

本文深入解析Linux内核页表管理机制,重点阐述了ARM64架构下的双页表系统设计。主要内容包括: 页表组织架构: 采用TTBR0/TTBR1双页表机制,用户空间和内核空间分别维护 每个进程独立拥有用户页表(mm->pgd),内核共享全局页表(swapper_pg_dir) 核心优势: 进程切换时仅需切换TTBR0用户页表 保持TTBR1内核页表不变,避免TLB失效 显著提升系统调用性能 关键实现: 硬件通过虚拟地址高位自动选择TTBR 内核启动时静态初始化swapper_pg_dir 进程切换时通过

zqh1630的专栏 305

深入理解Linux CPU热插拔:smpboot流程、同步机制与故障排查

CPU热插拔是现代多核系统动态管理计算资源的核心机制,其本质是通过操作系统内核协调硬件与软件状态,实现CPU核心的在线与离线操作。该技术基于状态机驱动,涉及硬件初始化、固件协议、内核线程创建及状态同步等多个层面,其中smpboot流程是CPU上线的关键环节,负责将离线核心唤醒为可调度实体。在工程实践中,理解cpu_operations抽象层与完成量同步机制至关重要,它们确保了不同架构(如x86/APIC与ARM/PSCI)下启动流程的一致性。然而,在混合架构或虚拟化环境中,固件接口不一致、资源竞争或同步超时

weixin_34049948的博客 445
上一篇: android Thread/Handler 实现
下一篇: 深入理解 bootloader 启动linux atags/boot param 传递
windtakers
博客等级 码龄17年 94粉丝 197原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值