《Linux内核分析》之第三章读书笔记
进程管理
进程是处于执行期的程序以及相关的资源的总称,也称作任务。执行线程,简称线程,是在进程中活动的对象。 可以两个或两个以上的进程执行同一个程序 也可以两个或两个以上并存的进程共享许多资源 内核调度的对象是线程,而不是进程。
进程描述符及任务结构
内核把进程的列表存放在任务列表(task list)的双向循环链表中。 链表中每一项都是类型为task_struct的进程描述符的结构。 进程描述符中包含的数据能完整地描述一个正在执行的程序: 打开的文件 进程的地址空间 挂起的信号 进程的状态 more
分配进程描述符
Linux通过slab分配器分配task_struct结构-->达到对象复用和缓存着色的目的 每个任务的thread_info结构在它的内核栈的尾端分配。
进程描述符的存放
内核通过一个唯一的进程标识值或PID来标志每个进程。 PID是一个数,表示为pid_t隐含类型(其物理表示是未知或不相关的),实际上是一个int类型的。
进程状态
存在五种进程状态标志: TASK_RUNNING(运行) TASK_INTERRUPTIBLE(可中断) TASK_UNINTERRUPTIBLE(不可中断) _TASK_TRACED(被追踪) _TASK_STOPPED(停止)
各种状态之间存在转换的条件,若满足则进行转换,跟模拟电路中所学的状态机是一个道理。 通过st_task_state(task,state)函数来设置当前进程状态
进程家族树
Unix系统的进程之间存在一个明显的继承关系 在Linux中,所有的进程都是PID为1的init进程的后代。(在孤儿进程处理时,为其找新的父亲,则可将其设为init进程的子程序) 系统中的每个进程必有一个父进程 每个进程可以没有子进程也可以有多个子进程。 拥有同一个父进程的所有进程被成为兄弟。 每个task_struct都包含一个指向其父进程task_struct、叫做parent的指针,还包含一个成为children的子进程链表。
进程创建
产生进程的机制:首先在新的地址空间里创建进程,读入可执行文件,最后开始执行。fork函数所创建的子进程和父进程之间的区别在于PID、PPID和某些资源和统计量。fork和exec两个单独的函数来完成上句前半部分和后半部分的内容。 fork进程通过拷贝当前进程创建一个子进程。 exec负责读取可执行文件并将其载入地址空间开始执行。
写时拷贝 资源的复制只有在需要写入的时候才进行,在此之前,知识以只读方式共享。 fork的实际开销就是复制父进程的页表以及给子进程创建唯一的进程描述符。
fork clone通过系统调用实现fork,do_fork完成了创建中的大部分工作,它被定义在了kernel/fork.c文件中。 do_fork调用copy_process函数,让进程开始运行。 vfork与fork的区别在于:vfork不拷贝父进程的页表项。
创建线程
线程的创建和普通进程的创建类是,只不过在调用clone的时候需要传递一些参数标志来指明需要共享的资源。 内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,它们只在内核空间运行,从来不切换到用户空间去。 内核进程和普通进程一样,可以被调度,也可以被抢占。
进程终结
do_exit完成终结进程的大部分任务,定义于kernel/exit.c。do_exit永不返回。进程终止时所需要的清理工作和进程描述符的删除被分开执行。wait这一族函数都是通过唯一的系统调用wait4()来实现的。当最终需要释放进程描述符时,release_task会被调用。
孤儿进程造成的进退维谷
如果父进程在子进程之前退出,则会造成子进程没有父进程,则被成为孤儿进程。若这些孤儿进程无法找到新的父进程,则它就会在退出的时候永远处于僵死的状态,白白消耗内存空间。 解决的办法就是为其找到一个新的父进程,若不行,则让init做为它们的父进程。
《Linux内核分析》之第三章读书笔记的更多相关文章
- linux内核分析 1、2章读书笔记
一.linux历史 20世纪60年代,MIT开发分时操作系统(Compatible TIme-Sharing System),支持30台终端访问主机: 1965年,Bell实验室.MIT.GE(通用电 ...
- 《Linux内核分析》第三周学习笔记
<Linux内核分析>第三周学习笔记 构造一个简单的Linux系统MenuOS 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.stud ...
- 《Linux内核分析》第六周 读书笔记
<Linux内核设计与实现>CHAPTER3阅读梳理 [学习时间:3hours] [学习内容:进程的描述:进程的生命周期(包括创建.终结)] 一.进程(任务)描述 1.进程是处于执行期的程 ...
- 《Linux内核分析与设计实现》读书笔记一
第一章 Linux内核简介 1.1 Unix的历史 Unix的特点: Unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的: 在Unix中,所有的东西都被当做文件对待. Unix的内核和 ...
- 《Linux内核分析》第七周 读书笔记
<深入理解计算机系统>CHAPTER7阅读梳理 [学习时间:3hours] [学习内容:链接需要的代码&数据:链接机制:链接生成的目标文件] 一.链接概述 1.链接 定义:链接是将 ...
- 《linux内核》课本第五章读书笔记
- 《Linux内核分析》第三周学习报告
<Linux内核分析>第三周学习报告 ——构造一个简单的Linux系统MenuOS 姓名:王玮怡 学号:201351 ...
- 《Linux内核设计与实现》 Chapter4 读书笔记
<Linux内核设计与实现> Chapter4 读书笔记 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子 ...
- 《Linux内核分析》第八周学习笔记
<Linux内核分析>第八周学习笔记 进程的切换和系统的一般执行过程 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163 ...
- 《Linux内核分析》第七周学习笔记
<Linux内核分析>第七周学习笔记 可执行程序的装载 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
随机推荐
- 【面向对象版】HashMap(增删改查)
前言: 关于什么是HashMap,HashMap可以用来做些什么,这些定义类的描述,请参照[简易版]HashMap(增删改查)的内容. 这章节主要是面向实例,直接进行HashMap(增删改查)的演示. ...
- nginx配置文件httpd.conf详解
PS:Nginx使用有两三年了,现在经常碰到有新用户问一些很基本的问题,我也没时间一一回答,今天下午花了点时间,结合自己的使用经验,把Nginx的主要配置参数说明分享一下,也参考了一些网络的内容,这 ...
- 主从LDAP
yum -y install compat-openldap必须得安装这个 1:在主上 备份 cp /etc/openldap/slapd.conf /etc/open ...
- LDAP客户端
LDAP客户端通过与服务端关联起来,就可以使用服务端的系统账号登录系统,通过useradd 添加用户是在ldap里是没有显示的,ldap添加用户,在/etc/passwd里也是没有显示的,ldap添加 ...
- json对象
//数组var arr=[1,2,3,3];//json对象var obj={width:'200px',height:'200px',background:'green'}; alert(obj[' ...
- JavaWeb技术(三):JDBC中核心接口
一. DriverManager 接口 DriverManager 数据库连接驱动接口,用于获取数据库连接对象Connection import java.sql.Connection; impor ...
- 推荐大家使用的CSS书写规范、顺序
写了这么久的CSS,但大部分前端er都没有按照良好的CSS书写规范来写CSS代码,这样会影响代码的阅读体验,这里总结一个CSS书写规范.CSS书写顺序供大家参考,这些是参考了国外一些文章以及我的个人经 ...
- [Arduino] Arduino猪头笔记
1. 步进电机驱动 今天才发现....原来在不同的步进电机驱动模块里面,循环时钟是不一样的.... 步进电机驱动模块以及电路配置: 驱动代码的主要部分: int sp_param = 16383; d ...
- Zabbix(一)--zabbix 2.4.8 安装
zabbix依赖于LAMP,所以部署前要先保证这个平台. 安装服务端(Server) zabbix官网的rpm包都是按照功能分开一个个,比如: zabbix-server-2.4.7-1.el7.x8 ...
- Slight difference between C++ and C
In C++, results of assignment operation, prefix increment and prefix decrement are all lvalues, the ...