【linux内核分析与应用-陈莉君】进程的一生

Linux阅码场原创精华文章汇总 持续更新,敬请期待!(最后更新日期2018.10.27)Linux学习方法:宋宝华: 迭代螺旋法——关于Linux学习方法的血泪建议Linux任督二脉之进程管理郭健: L... 阅读详情

目录

 

1.进程与线程

2.TASK_STRUCT结构的统一性与多样性

3.进程API的实现

4.do_fork()的代码流程

5.进程的生命周期


1.进程与线程

2.TASK_STRUCT结构的统一性与多样性

推荐阅读

3.进程API的实现

我们可以看到fork()调用的sys_fork()中的do_fork(),
除了SIGCHLD参数以外,后面的三个参数空手而来,第二个和第二个参数似乎
也没有明确的目标,作为子进程,它完全有自己的个性,根本不想共享父进程
的任何资源,而是让父进程将所有的资源都给自己复制一份,父进程就真的
给它复制一份吗?老爸没有那么傻,而是假装复制了一下,也就是用一个指针
指过去了而已,等真正需要的时候,比如要写一个页面,这时候写时复制技术
就登场了,只有父子进程中不管谁想一个页面的时候,这个页面才被复制一份.

sys_vfork()比sys_fork()还狡猾,调用do_fork()时直接传递了两个标志过去,
CLONE_VFORK表示孩子优先老爸等待,于是父进程去睡觉了,等子进程结束以后
才会醒来;CLONE_VM,表示儿子干脆和父进程待在一个进程地址空间中,父子
进程共享地址空间,但是父进程的页表除外,sys_vfork()看起来很聪明,
但实际上聪明反被聪明误,因为写时复制的招数更高,也就是更高效,因此
它就没有了生存空间,直接被取代.

clone()调用的sys_clone(),线程就是这么诞生的,怎么克隆呢?听起来很神秘,
其实很简单,就是传递一堆参数告诉老爸想要和老爸共享什么资源,于是老爸就把
地址空间,文件系统,打开的文件,信号处理函数等因为儿子的一句话给分享了,
看起来就是四个参数的或:CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND.


如果我是一个内核线程,是不是我的出生更有优势呢?
没错.
用户空间对内核线程来说根本没有任何意义,早期内核中创建线程是通过kernel_thread()
创建的,目前内核中是采用kthread_create()创建的,其本质也是向do_fork()提供特定的
标志而创建.

TASK_STRUCT结构体带来的统一性,到底谁给进程,线程,内核线程的诞生带来了方便?
说到底还是因为它们在一个战壕中,也就是说它们用的都是TASK_STRUCT结构,也因此
它们的生命历程都有诸多的相似,不管是被调度到CPU上面去跑,还是分配各种资源,
最后的诞生都是调用了相同的函数do_fork().

4.do_fork()的代码流程

 

 

5.进程的生命周期

随着一句fork(),新进程呱呱落地,但是此时它只是老进程的一个克隆,然后随着exec的调用,
新进程脱胎换骨,离家独立,开始自己独立工作的职业生涯,就像人一样,进程也有生老病死,
它可以是自然后的死亡(运行到主函数的最后一个大括号)从容离我们而去,也可以是中途退场,
退场有两种方式:1.调用exit函数;2.主函数中调用return函数.无论哪种方式它都可以留下
遗言,放在返回值中保存下来,甚至进程还可能被谋杀,被其他进程通过另外的方式结束自己的
一生.进程死掉以后会留下空壳,wait站好最后一岗,打扫战场,使其最终归于无形,至此就是
进程完整的一生.


问题:
wait这个系统调用做了什么?

 

 

热测试芯片(TTC)在ASIC热设计中的关键作用与应用 热测试芯片(TTC)是半导体热管理领域的重要工具,通过物理仿真技术精确测量芯片温度分布。其核心原理是利用金属膜电阻和二极管传感器阵列,实现微米级空间分辨率和毫秒级动态响应。在工程实践中,TTC能有效预防热岛效应、优化散热设计,特别适用于AI加速芯片、3D堆叠封装等先进半导体器件。相比传统热仿真软件,TTC提供更真实的温度数据,帮助工程师在流片前发现潜在热问题。随着1mm微型单元技术的突破,TTC已能检测0.3mm²微小区域的热变化,满足GaN/SiC等宽禁带半导体器件的测试需求。 阅读详情

相关推荐

Unity特效序列帧输出全攻略:Recorder+Timeline保姆级教程(解决透明通道问题)

本文提供Unity特效序列帧输出的完整解决方案,重点讲解如何结合Recorder与Timeline工具,实现带透明通道的PNG序列帧高效输出。通过保姆级教程,详细解析摄像机隔离、层级设置、参数配置等关键步骤,并深度解决透明通道丢失等常见问题,帮助特效师和动画师打通引擎创作与后期合成的工作流。

tensorflowjs6的博客 429

进程通信之管道通信

进程通信、管道通信、半双工、mkfifo、FIFO、有名管道、无名管道

weixin_50803498的博客 1426

轨迹规划——带抛物线过渡的直线插补

带抛物线过渡的直线插补

doudou2weiwei的博客 1984

Linux利用管道通信实现一个写端对应多个读端

利用管道通信实现一个写端对应多个读端,写端往随机管道中写,对应读端读取数据

CHJBL的博客 538

基于浏览器插件的拼多多买家订单导出方法

基于浏览器插件的拼多多买家订单导出方法

2501_93542170的博客 1718

同步整流buck电路图设计:手把手入门必看

从零开始拆解同步整流Buck电路图及其原理,手把手带你画出关键拓扑、选型MOSFET、分析续流路径。重点讲清占空比控制逻辑与体二极管导通损耗的规避方法,让buck电路图及其原理真正落地可调、稳定可靠。

weixin_33308579的博客 995

Linux管道通信多次读写,linux进程通信之(二):管道的读与写

为了更好的理解管道的读与写,请看下面的一段程序:#include#include#include#include#includeint main(){int pipe_fd[2];pid_t pid;char buf_r[100];char *p_wbuf;int r_num;memset(buf_r,0,sizeof(buf_r));//把一段内存清0if(pipe(pipe_fd)<0)...

weixin_36013970的博客 1560

【Linux】Petalinux使用QSPI FLASH引导启动

1. 预分配Flash空间使用Flash引导Petalinux做的系统,也有进阶的做法。部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。1. 预分配Flash空间根据生成的bit文件大小估算BOOT.BIN文件的大小,为Flash大概分配四个分区:boot、bootenv、kernel、bootscr,分别存放BOOT.BIN文件、u-boot的环境变量、内核文件(image.ub/zImage/uImage等)、启动脚本boot.scr。

Tesseract_9527的博客 3375

linux管道pipe详解

管道 管道的概念: 管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。有如下特质: 1. 其本质是一个伪文件(实为内核缓冲区) 2. 由两个文件描述符引用,一个表示读端,一个表示写端。 3. 规定数据从管道的写端流入管道,从读端流出。 管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。 管道的局限性

oguro的博客 9万+

从零构建高精度电子秤:HX711与STM32的时序通信陷阱与实战避坑指南

本文详细解析了使用STM32F103C8T6与HX711模块构建高精度电子秤的通信时序陷阱与实战解决方案。重点探讨了微秒级延迟实现、数据读取算法、校准方法和滤波优化,帮助开发者避开常见通信问题,提升电子秤的测量精度和稳定性。

data3的博客 782

分子动力学仿真软件:LAMMPS_(16).应用案例分析

通过以上四个应用案例,我们详细介绍了如何使用LAMMPS进行不同系统的分子动力学仿真。从简单的液体水仿真到复杂的纳米管仿真,每个案例都包含了详细的步骤说明和代码示例。读者可以通过这些示例实际操作并验证结果,从而更好地理解LAMMPS的功能和使用方法。希望这些案例能够为读者在分子动力学仿真领域的研究和应用提供帮助。

kkchenjj的博客 837

Linux:带你理解进程间通信--管道

管道进程间通信管道匿名管道命名管道管道的特性匿名管道与命名管道的区别: 进程间通信 进程间通信(IPC)是什么? 操作系统为用户提供的几种进程间的通信方式 为什么操作系统要为用户提供进程间通讯方式呢? 进程间因为每一个进程都有一个虚拟地址空间,在保证了进程独立性的同时,却使得进程间无法直接通信。因此需要操作系统来提供进程间通信方式,并且因为通信场景不同,提供的方式也有多种 如何提供进程间通信方式? 给多个进程之间提供一个大家都能访问到的传播介质,并且操作系统在提供进程间通信方式的时候也根据通信

AngelDg的博客 5967

【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南

【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南

WW、forever的博客 1964

【Linux内核分析与应用-陈莉君老师】课程相关索引

1.【Linux内核分析与应用-陈莉君老师】动手实践-把虚拟内存转换成物理地址 2.【Linux内核分析与应用-陈莉君老师】从程序到进程 3.【linux内核分析与应用-陈莉君老师】进程的一生 4.【Linux内核分析与应用-陈莉君老师】进程的调度 ...

Edidaughter的博客 840

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...

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

linux应用软件epub,Linux操作系统原理与应用(第2版)

Linux操作系统原理与应用(第2版) 下载 mobi epub pdf☆☆☆☆☆陈莉君,康华 著下载链接在页面底部发表于2021-05-03类似图书 点击查看全场最低价图书介绍出版社: 清华大学出版社ISBN:9787302278368版次:2商品编码:11894570包装:平装丛书名: 21世纪高等学校规划教材 ,开本:16开出版时间:2012-01-01用纸:胶版纸页数:255字数:4310...

weixin_33872754的博客 536

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

陈莉君教授: 回望踏入Linux内核之旅(下篇)

从机制与策略探究Linux内核设计之道 2011年的Linux内核开发者大会邀请我做主题发言,但给大家分享些什么,起初选定Linux的安全,因为那几年的项目是这方面的。但是,当我着手准备讲稿时,才发现安全是个太广的话题,根本难以把握。于是想起自己常常告诉别人的话,从自己最熟悉的地方下手。于是,还是从自己最熟悉的Linux内核入手吧。但是,内核也是太大的话题,漫无边地,怎样才能在有限的...

weixin_30825199的博客 249

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Linuxer精华文章汇总

&#13; &#13; &#13; &#13; &#13; &#13; &#13; 持续更新,敬请期待!Linux任督二脉之进程管理郭健: Linux进程调度技术的前世今生之“前世”郭...

Linux阅码场 710

一次触摸屏中断调试引发的深入探究

首先非常感谢陈莉君老师的赏识,题目名字也是陈老师帮忙起的。            大家好,我叫张昺华,中间那个字和“饼”字一个读音,嘿嘿,相信不少人都不认识我的第二个字吧...

Linux阅码场 1499

权威发布|恭喜 Apache Doris PPMC 陈明雨入选 2021 中国开源先锋 33 人之心尖上的开源人物...

...

ucanuup_的博客 5164

(进程间通信)linux c语言实现命名管道

匿名管道是父子进程的方法,而有名管道是不同进程的方法,这个“有名”就是mkfifo()函数给的。 先运行写进程,后进行读进程,管道不能进行两边同时进行读写,所以是半双工的。 (匿名管道是内存上的特殊文件,命名管道是硬件上的特殊文件,这个特殊文件进程结束之后打开没有东西,共享文件是硬件上的普通文件,这个文件进程结束之后打开可以看到东西) 写进程代码: /******************...

天泉证道 2546

进程间通信--管道

一、管道的概念     管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称之半双工管道。管道的这一特点决定了其使用的局限性。     数据只能由一个进程流向另一个进程(其中一个写管道,另一个读管道);如果要进行全双工通信,需要建立两个管道。     管道只能用于父子进程或兄弟进程间的通信,也就是说管道只能用于具有亲缘关系的进程间的通信,无亲缘关系的进程不能使用管道。

空。 1699

【linux内核分析与应用-陈莉君】内核同步概述

1.内核同步机制的引入 如果把内核看做不断地对各种请求进行响应的服务器的话,那么正在CPU上执行的进程发出中断请求 的外部设备等相当于客户,正如服务器一直要响应客户的请求一样,内核 ...

Edidaughter的博客 553

Linux的管道,一个写一个读

#include #include #include #include #include #include int main() { int fd[2]; int fdin; char buf[PIPE_BUF]; int pid,len; if(pipe(fd) { perror("pipe error!"); exit(1); } pid = fork(); if(pid {

龙山三人团 871

Linux题(1)

1.下列关于管道(Pipe)通信的叙述中,正确的是()    正确答案: C    A.一个管道可以实现双向数据传输 B.管道的容量仅受磁盘容量大小限制 C.进程对管道进行读操作和写操作都可能被阻塞 D.一个管道只能有一个读进程或一个写进程对其操作   2.下面有关内核线程和用户线程说法错误的是?  正确答案: C    A.用户线程因 I/O 而处于等待状态时,整个进程就会被调度程

u010273362的博客 5699

pipe创建匿名管道`

pipe创建的管道为匿名管道,匿名管道只能在有关系的进程之间使用,例如父进程和子进程,由同一个父进程创建的子进程或称为兄弟进程 #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;unistd.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; //pipe 创建的匿名管道只能在有血缘关系的进程之间进行使用 // 例如 父进程和子进程 同一个父进程创...

andrewbytecoder 920
上一篇: 【Linux内核分析与应用-陈莉君】从程序到进程
下一篇: 【Linux内核分析与应用-陈莉君】进程的调度
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值