微视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线程负责内核线程的创建工作; 阅读详情

swapper是linux第一个线程,也就是0号线程。很多书里面都有详细介绍。
为什么linux启动之后,swapper线程就开始运行了呢?

我认为主要有两点:
第一点:静态部分。
swapper线程通过静态初始化,设置的地址空间是内核高1G的空间。也就是说其使用的正文段,数据段和linux使用的正文段和数据段是完全一致的。
第二点:动态部分。
堆栈寄存器等寄存器在内核启动阶段通过汇编语句设置。堆栈寄存器等寄存器在内核启动阶段通过汇编语句设置。
其中,最重要的是堆栈,定义好的堆栈部分不会被别的模块非法访问;另外一点就是,可以调用别的函数,建立栈帧,在函数返回时可以正常返回。

以powerpc为例:

start_here:
	/* ptr to current */
	lis	r2,init_task@h
	ori	r2,r2,init_task@l	//根据E500 ABI,r2保存当前进程的进程描述符地址
	/* Set up for using our exception vectors */
	/* ptr to phys current thread */
	tophys(r4,r2)
	addi	r4,r4,THREAD	/* init task's THREAD */
	CLR_TOP32(r4)
	mtspr	SPRN_SPRG_THREAD,r4 //SPRN_SPRG_THREAD在E500系列是SPRG3,保存thread的虚拟地址
	li	r3,0
	mtspr	SPRN_SPRG_RTAS,r3	/* 0 => not in RTAS */

	/* stack */
	lis	r1,init_thread_union@ha
	addi	r1,r1,init_thread_union@l
	li	r0,0
	stwu	r0,THREAD_SIZE-STACK_FRAME_OVERHEAD(r1) //根据E500 ABI,r1指向栈底-16.16代表预留一个最小栈帧

以x86为例:

.data
ENTRY(stack_start)
	.long init_thread_union+THREAD_SIZE
	.long __BOOT_DS

ready:	.byte 0

--------------------
/*
 * Enable paging
 */
	movl $pa(swapper_pg_dir),%eax
	movl %eax,%cr3		/* set the page table pointer.. */
	movl %cr0,%eax
	orl  $X86_CR0_PG,%eax
	movl %eax,%cr0		/* ..and set paging (PG) bit */
	ljmp $__BOOT_CS,$1f	/* Clear prefetch and normalize %eip */
1:
	/* Set up the stack pointer */
	lss stack_start,%esp //esp寄存器指向栈底, SS寄存器指向__BOOT_DS

/*
 * Initialize eflags.  Some BIOS's leave bits like NT set.  This would
 * confuse the debugger if this code is traced.
 * XXX - best to initialize before switching to protected mode.
 */
	pushl $0
	popfl

#ifdef CONFIG_SMP
	cmpb $0, ready
	jz  1f				/* Initial CPU cleans BSS */
	jmp checkCPUtype
1:
#endif /* CONFIG_SMP */

/*
 * start system 32-bit setup. We need to re-do some of the things done
 * in 16-bit mode for the "real" operations.
 */
	call setup_idt

linux源码分析(三)-start_kernel
https://www.cnblogs.com/yjf512/p/5999532.html

linux调度器源码分析 - 初始化(二)
https://www.cnblogs.com/tolimit/p/4311404.html

深入理解Linux启动过程 && 0号进程,1号进程
https://blog.youkuaiyun.com/ZAhqc_IT/article/details/81702067

 

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

相关推荐

Tessy单元测试软件安装与破解避坑指南(附个人使用路径设置详解)

本文详细介绍了Tessy单元测试软件的安装与配置全流程,包括系统需求、服务器连接设置、环境变量配置等关键步骤,帮助开发者避开常见陷阱。特别提供了个人使用路径设置详解,确保Tessy在嵌入式开发环境中高效运行,适用于汽车电子、工业控制等领域。

weixin_33709364的博客 345

深入理解 linux swapper 进程

转载博文: http://blog.youkuaiyun.com/bengda/article/details/7681327 LINUX进程小结 id为0的进程通常是调度进程,常常被称为交换进程(swapper),该进程为内核的一部分,他并不执行任何磁盘上的程序,因此也被称为系统进程。 id为1 init进程,在自举过程结束后由内核调用。 id为2 页守护进程 对于父进程已经终止的所有进

2万+

uCOS中的消息邮箱(:task与task之间传递一个数据(数据缓冲区))

程序需求,需要完成task与task之间  字符数组的数据传输 比如:在ucos中,串口2接收的字符数组是不定时的&不定长的;只有当接收到数据的时候_才将数据赋值给新数组 具体的程序示意如下: 图1:消息邮箱测试中的     向消息邮箱发送消息(OSMboxPost(Str_Box,(void*)rec);//发送消息--(向 消息邮箱_msg_key发送消息) ),实际项目需求的

faguoduifangui的博客 4540

18---进程管理

 说明:进程组,会话等会写在 C系统编程 系列博文中,Linux 运维系列的博文中不涉及这些内容 ========= 进程状态 D 不可终端的睡眠 S 可中断的睡眠 R 运行或就绪 T 停止 Z 僵尸 PID 为 0 的进程通常是调度进程,被称为交换进程(swapper) PID 为 1 的进程即 init,在 CentOS 7 上改为 systemd 早期的 init

小海银鱼的博客 536

ESP32 CAM安装配置 第四部份:通过使用ESPHome的方式ESP32 Cam加到HomeAssistant

这些包括 aec_value, aec2, ae_level, agc_gain, gain_ctrl, bpc, wpc, raw_gma, lenc, hmirror, dcw, colorbar 等。这些参数的可能值和具体效果会根据你的摄像头硬件和 ESPHome 的版本有所不同。在 ESPHome 中配置 ESP32 Cam 时,每个参数的可能值取决于具体的功能和支持范围。值的范围是 0 到 63,其中 0 是最差质量,63 是最佳质量。horizontal: 水平校正的强度,通常是一个数字值。

weixin_42895252的博客 3365

IPv6之001-IPv6是什么

技术本质:IPv6(Internet Protocol version 6)是互联网工程任务组(IETF)设计的网络层核心协议,用于替代IPv4核心使命:解决IPv4地址枯竭问题,重构互联网基础架构,支撑万物互联时代革命性特征fill:#333;color:#333;color:#333;fill:none;IPv6128位地址空间无状态自动配置原生IPsec加密协议头部精简。

老韩的Linux云计算架构师进阶之路 1393

Linux 为什么运行 swapper

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

Mercury_Lc的博客 1628

46、聚类算法在智能交通数据分析中的应用

本文探讨了聚类算法在智能交通数据分析中的应用,介绍了K-均值算法、K-中心点算法和基于模型的聚类算法的基本原理及特点,并结合实际交通数据讨论了其应用场景与挑战。通过聚类分析,能够从海量交通数据中发现隐藏模式,为交通管理和规划提供科学依据。文章还展示了具体的案例分析和实现流程,为未来智能交通系统的发展提供了参考。

zz67890的博客 133

linux 之0号进程、1号进程、2号进程

0号进程,通常也被称为idle进程,或者也称为swapper进程,其 pid 等于0。0号进程是linux启动的第一个进程,它的task_struct的comm字段为"swapper",所以也称为swpper进程。当系统中所有的进程起来后,0号进程也就蜕化为idle进程,当一个core上没有任务可运行时就会去运行idle进程。一旦运行idle进程则此core就可以进入低功耗模式了.

z20230508的博客 3192

【漏洞复现】用友NC-Cloud-反序列化-ResourceManagerServlet

NC Cloud是用友公司推出的大型企业数字化平台。支持公有云、混合云、专属云的灵活部署模式。NC Cloud完全基于云原生架构,技术先进、性能稳定、自主安全可控,支撑大中型以及超大型集团企业N层多site混合云部署方案,支持整个系统高可用、弹性扩展、双/多活,以及快速灾备恢复能力等。用友-NC-Cloud ResourceManagerServlet 接口存在反序列化漏洞,使得攻击者可以通过构造特定的请求远程执行恶意代码。此漏洞可能导致攻击者获取系统权限、执行任意命令,严重威胁系统的机密性和完整性。

漏洞复现 1366

工业视觉降本300%实战:C# + 开源YOLO如何干掉Halcon/VisionPro?

在当前制造业普遍追求“降本增效”的大背景下,工业视觉检测系统作为产线的眼睛,其成本问题日益突出。通过该方案,我们成功帮助一家电子厂将单条产线的视觉检测成本从15万降低至不足5千(主要为工控机硬件成本),降本幅度超过95%,且系统稳定性经受住了6个月连续生产的考验。:C#负责“工程化”和“业务逻辑”,YOLO负责“智能算法”,二者结合,完美覆盖了工业视觉从算法到落地的全链路。的组合,构建一套高性能、低成本、易维护的工业视觉解决方案,并彻底替代昂贵的付费库。” 这是一个典型的误区。工业相机/USB相机。

2601_94871597的博客 430

Android进程系列1---进程基础

内容预览.png 概述: 本文主要讲解进程基础,更深入的认识有血有肉的进程,内容涉及进程控制块,信号,进程FD泄露等等。仅供参考,欢迎指正。 一、从Linux看进程到底是什么? “进程四要素” —《Linux 内核源代码情景分析》描述如下: 有一段程序供其执行 拥有专用的系统堆栈空间 在内核存在对应进程控制块 拥有独立的用户存储空间 上面确实有点抽象,进程不仅仅是一段处在执行状态的...

Jimmy的专栏 949

12027.linux flash驱动之IS25LP01G/IS25WWP01G

一页:512字节 --> 扇区 4096字节 --> 块 32k,64k, 层层递进关系。

写给自己的笔记 2289

Linux--进程

我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另一个程序。当进程盗用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。进程A创建了进程B,那么A叫做父进程,B叫做子进程,父子进程是相对概念,理解为人类中的父子关系。关键区别二:vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行。进程是程序的一次运行活动,通俗点意思是程序跑起来了,系统中就多了一个进程。返回值为 0 ,代表当前进程是子进程;

weixin_59095264的博客 379

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linux0.11内核的进程管理机制

总结:本篇主要学了Linux0.11内核中的进程管理,包括从第一个进程的初始化、进程创建、进程调度、进程状态和进程终止。其中第一个进程为进程号是0的swap进程,它主要用来初始化Linux内核以及创建init进程。进程调度时,系统扫描running数组中的任务,选出剩余滴答数最大的进程进行切换,因为滴答数越大代表该进程的运行时间最短。而进程的终止是用户进程调用exit()系统调用,然后系统调用do_exit()方法终止进程。

guhong1995的博客 723

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux进程相关概念

什么是进程? 进程是程序的一次运行活动,通俗点意思是程序跑起来了,系统中就多了一个进程 如何查看系统中有哪些进程? a.使用ps指令查看实际工作中,配合grep来查找程序中是否存在某一个进程...

aaaaaaaa123345的博客 356

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Linux开发--进程

从是否运行进行判断:gcc xxx -o pro,磁盘中生成的pro文件,就是程序进程是程序一次运行活动程序是静态的概念,进程是动态的概念。每一个进程 都有一个非负整数表示唯一ID,叫pidpid=0,称为交换进程(swapper),作用--进程调度pid=1,init进程,作用 -- 系统初始化调用getpid()函数获取自身的进程idgetppid()-- 获取父进程idint main()pid_t pid;while(1);return 0;

mx_jun的博客 961

Linux进程详细介绍

writeback:Linux 采用内存页来缓存磁盘文件内容,从而提高系统整体IO访问性能,这就是我们熟知的pagecache机制,对于进程的一次写文件操作,内核只是简单的把修改写到内存,并把页面标记为脏页,然后直接返回,具体的回写操作,由内核周期性的启动线程来完成,这个我们称为writeback机制。ksoftirqd: 内核线程,在创建的时候是绑定cpu的,每一个core对应生成一个ksoftirqd 线程,它的作用就是处理softirq用,它的本质就是调用 __do_softirq。

xiaojie_std的专栏 871

解析 linux 进程 pid 0, pid 1, pid 2 关系及启动过程

Linux 中有 pid 0, pid 1 和 pid 2 三个特殊的进程。 本文以 Linux v2.6.39 为例,说明 Linux中这三个进程的关系及启动过程

m0_47696151的博客 1万+

Linux系统进程管理

进程定义:程序的一次动态执行 守护进程:在后台运行并提供系统服务的一些进程 父进程、子进程:当一个进程创建另一个进程时,第一个进程被称为新进程的父进程,而新进程被称为子进程   一、动态监控操作系统的命令:top up:系统运行时间 users:系统用户数 load average:CPU平均负载:1分钟 5分钟 15分钟 Tasks:总任务数 running:正在运行的任务...

我还是个孩子的博客 1012

Swapper使用

配置Swagger2 1、引入相关依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <scope>provided </scope&g

weixin_42453582的博客 3263

linux 的 swapper 进程不能sleep,UNIX操作系统的加锁解锁:等待事件及唤醒

加锁和解锁的基本思想是,当某个进程进入临界区,它将持有一个某种类型的锁(UNIX里一般来说是semaphore,Linux里一般是信号量和原子量或者spinlock)。当其他进程在该进程没有释放该锁时试图进入临界区(加锁),它将会被设置成睡眠状态,然后被置入等待该锁的进程队列(某个优先级的)。当该锁被释放时,也就是解锁事件发生时,内核将从等待该锁的进程优先级队列中寻找一个进程并将其置为就绪态,等待...

weixin_39574388的博客 310

Linux Swap 从 userspace 到 kernel详解

Linux Swap 从 userspace 到 kernel详解简介整体架构涉及的文件介绍与内存的联系与IO的联系主要的数据结构swap_info_structswp_entry_tswap_extentswap_cluster_infoswapper_spacesswap cacheSwapout/swapin 流程分析SwapoutSwapin附录 简介 Linux Swap 机制在很早之前...

qkhhyga2016的博客 7846

内存描述符

<br />在前面的系列博文中我们已经看到,内核中的函数以相当直截了当的方式获得动态内存:__get_free_pages()或alloc_pages()通过伙伴算法从分区页框分配器中获得页框,kmem_cache_alloc()或kmalloc()使用slab分配器为专用或通用对象分配内存,而vmalloc()或vmalloc_32()获得一块非连续的内存区。如果所请求的内存区得以满足,这些函数都返回一个页描述符或线性地址(即所分配动态内存区的起始地址)。<br /> <br />使用这些简单方法是基于以

云(存储),松(耦合) 3773

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

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

weixin_42364040的博客 673

linux 的 swapper 进程不能sleep,linux系统编程笔记

两个程序(没有任何关系)之间通信:使用有名文件通信。管道文件可以解决文件偏移量的麻烦问题。mkfifo(path,mode):管道文件:两种进程间通信的方式:无名管道和有名管道。所有进程共享内核运行空间。ftok(path,int项目id):给内核中的公共空间命名,参数path只要是系统所具有的路径就可以了,id可以随便给。它返回的是:-1表示失败,消息队列:msgget();他需要ftok的返回...

weixin_39670857的博客 171
上一篇: 微视linux CPU占用率高分析思路
下一篇: 慢慢欣赏linux ext3文件系统 理解buffer_head域成员b_size
天麓
博客等级 码龄22年 323粉丝 437原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值