《Linux内核设计与实现》第3章读书整理
第三章、进程管理
3.1进程
1.进程就是处于执行期的程序,但进程并不仅仅局限于一段可执行程序代码
2.执行线程:
简称线程,是在进程中活动的对象。每个线程都拥有一个独立的程序计数器、进程栈和一组进程计数器。
3.在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存。
4.程序本身并不是进程,进程是处于执行期的程序以及相关的资源的总称。
5.fork():使进程在创建它的时候开始存活;
Exec():创建新的地址空间,并把新的程序载入其中;
Exit():退出执行。
3.2进程描述符及任务结构
1.进程描述符:
内核把进程的列表存放在叫做任务队列的双向循环链表中。链表中的每一项都是类型为task_struct,称为进程描述符的结构。
2.进程描述符中包含的数据能完整地描述一个正在执行的程序:它打开的文件,进程的地址空间,挂起的信号,进程的状态,还有其他更多信息。
3.2.1分配进程描述符
Linux通过slab分配器分配task_struct结构。
由于现在用slab分配器动态生成task_struct,所以只需在栈底或栈顶创建一个新的结构struct thread_info。
每个任务的thread_info结构在它的内核栈的尾端分配。结构中task域中存放的是指向该任务实际task_struct的指针。
3.2.2进程描述符的存放
内核通过一个唯一的进程标识值或PID来标识每个进程。
在内核中,访问任务通常需要获得指向其task_struct的指针。
3.2.3进程状态
(五种进程状态)
TASK_RUNNING(运行)
TASK_INTERRUPTIBLE(可中断)
TASK_UNINTERRUPTIBLE(不可中断)
_TASK_TRACED
_TASK_STOPPED(停止)
3.2.4设置当前进程状态
使用set_task_state(task,state)函数
3.2.5进程上下文
可执行程序代码是进程的重要组成部分。这些代码从一个可执行文件载入到进程的地址空间执行。一般程序在用户空间执行。当一个
程序执行了系统调用或者触发了某个异常,它就陷入了内核空间,此时,我们称内核“代表进程执行”并处于进程上下文中。
3.2.6进程家族树
继承关系
3.3进程创建
Unix采用了与众不同的实现方式,它把其他操作系统的步骤分解到两个单独的函数中去执行:fork()和exec();
Fork()通过拷贝当前进程创建一个子进程。
Exec()函数负责读取可执行文件并将其载入地址空间开始运行。
3.3.1写时拷贝
只在有需要写入的时候,数据才会被复制,从而使各个进程拥有各自的拷贝。
3.3.2 fork()
Linux通过clone()系统调用实现fork()
do_fork完成了创建中的大部分工作,该函数调用copy_process()函数,然后让进程开始运行。
3.3.3 vfork()
除了不拷贝父进程的页表项外,vfork()系统调用和fork()的功能相同。
vfork()系统调用的实现是通过向clone()系统调用传递一个特殊标志来进行的。
3.4线程在Linux中的实现
3.4.1创建线程
线程的创建和普通进程的创建类似,只不过在调用clone()的时候需要传递一些参数标志来指明需要共享的资源:
Clone(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND,0);
传递给clone()的参数标志决定了新创建进程的行为方式和父子进程之间共享的资源种类。
3.4.2内核线程
在后台执行一些操作
3.5进程终结
3.5.1删除进程描述符
进程终结时所需的清理工作和进程描述符的删除被分开执行。在父进程获得已经终结的子进程的信息后,或者通知内核它并不关注
那些信息后,子进程的task_struct结构才能被释放。
3.5.2孤儿进程造成的进退维谷
如果父进程在子进程之前退出,必须有机制来保证子进程能找到一个新的父进程,否则这些成为孤儿的进程就会在退出时永远处于
僵死状态,白白的耗费内存。
《Linux内核设计与实现》第3章读书整理的更多相关文章
- 《Linux内核设计与实现》第四周读书笔记——第五章
<Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...
- linux及安全《Linux内核设计与实现》第一章——20135227黄晓妍
<linux内核设计与实现>第一章 第一章Linux内核简介: 1.3操作系统和内核简介 操作系统:系统包含了操作系统和所有运行在它之上的应用程序.操作系统是指整个在系统中负责完成最基本功 ...
- LINUX内核设计与实现第三周读书笔记
LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年, ...
- 《Linux内核设计与实现》Chapter 3 读书笔记
<Linux内核设计与实现>Chapter 3 读书笔记 进程管理是所有操作系统的心脏所在. 一.进程 1.进程就是处于执行期的程序以及它所包含的资源的总称. 2.线程是在进程中活动的对象 ...
- 《Linux内核设计与实现》Chapter 1 读书笔记
<Linux内核设计与实现>Chapter 1 读书笔记 一.Unix的特点 Unix从Multics中产生,是一个强大.健壮和稳定的操作系统. 特点 1.很简洁 2.在Unix系统中,所 ...
- 《Linux内核设计与实现》Chapter 2 读书笔记
<Linux内核设计与实现>Chapter 2 读书笔记 一.获取内核源码 1.使用Git 我们曾经在以前的学习中使用过Git方法 $ git clone git://git.kernel ...
- 《Linux内核设计与实现》Chapter 5 读书笔记
<Linux内核设计与实现>Chapter 5 读书笔记 在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口的作用是: 使应用程序受限地访问硬件设备 提供创建新进程与已 ...
- 《Linux内核设计与实现》Chapter 18 读书笔记
<Linux内核设计与实现>Chapter 18 读书笔记 一.准备开始 一个bug 一个藏匿bug的内核版本 知道这个bug最早出现在哪个内核版本中. 相关内核代码的知识和运气 想要成功 ...
- 《linux内核设计与实现》第一章
第一章Linux内核简介 一.unix 1.Unix的历史 Unix是现存操作系统中最强大和最优秀的系统. ——1969年由Ken Thompson和Dernis Ritchie的灵感点亮的产物. — ...
- Linux内核设计与实现 第十七章
1. 设备类型 linux中主要由3种类型的设备,分别是: 设备类型 代表设备 特点 访问方式 块设备 硬盘,光盘 随机访问设备中的内容 一般都是把设备挂载为文件系统后再访问 字符设备 键盘,打印机 ...
随机推荐
- python redirect和render的区别
render是渲染变量到模板中,而redirect是HTTP中1个跳转的函数,一般会生成302状态码.
- [java基础]一文理解java多线程必备的sychronized关键字,从此不再混淆!
java并发编程中最长用到的关键字就是synchronized了,这里讲解一下这个关键字的用法和容易混淆的地方. synchronized关键字涉及到锁的概念, 在java中,synchronized ...
- 关于解决Python中requests模块在PyCharm工具中导入问题
问题引入: 今天在学习Python网络请求的时候,导入requests模块时一直报红色波浪线,如图: 反复折腾,一直以为自己没有安装requests模块,反复安装反复卸载: 安装方法: 首先 cd 进 ...
- DataStream_操作基本类型数据的流对象
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; imp ...
- 算法与cpu
cpu中的控制单元对应算法中的控制: cpu重的计算单元对应算法中的顺序计算:
- magento2.2.5安装
首先肯定要去下载源码,然后配置虚拟主机访问,例:http://magento.cn 这里我们采用命令行安装: php bin/magento setup:install --admin-firstna ...
- 洛谷P1144 最短路计数
题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶点数与边数. 接下来M行 ...
- mysql索引优化-order/group
为排序使用索引 KEY a_b_c (a,b,c) order by 能使用索引最左前缀 -order by a -order by a,b -order by a,b,c -order by a d ...
- 使用HostAliases 添加pod 的/etc/hosts
默认的pod 的/etc/hosts 无法自动数据 [root@master1 ~]# kubectl exec smsservice-5c7ff5f74-bc969 -n testihospital ...
- 深入浅出的webpack4构建工具--webpack4+vue+route+vuex项目构建(十七)
阅读目录 一:vue传值方式有哪些? 二:理解使用Vuex 三:webpack4+vue+route+vuex 项目架构 回到顶部 一:vue传值方式有哪些? 在vue项目开发过程中,经常会使用组件来 ...