《Linux内核设计与实现》第3章读书笔记
第三章 进程管理
一、进程
1.进程就是处于执行期的程序,但并不局限于可执行代码。实际上,进程是正在执行的程序代码的实时结果。
2.执行线程是在进程中活动的对象
- 每个线程拥有一个独立的计数器、进程栈、一组进程寄存器
- 内核调度的对象是线程
3.在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存。
4.进程是调用fork()系统的结果,最后程序通过exit()系统调用退出执行。
二、进程描述符及任务结构
内核把进程的列表存放在叫做任务队列的双向循环链表中。链表中的每一项都是类型为task_struct、称为进程描述符的结构。
1.分配进程描述符
Linux通过slab分配器分配task struct,以达到对象复用和缓存着色的目的
2.进程描述符的存放
内核通过一个唯一的进程标识值或PID来标识每个进程,内核把每个进程的PID存放进它们各自的进程描述符中。
3.进程状态
进程描述符中的state域描述了进程的当前状态
- TASK_RUNNING(运行)-进程可执行,进程正在或者等待执行
- TASK_INTERRUPTIBLE(可中断)-进程被阻塞
- TASK_UNINTERRUPTIBLE(不可中断)-对信号不做响应
- _TASK_TRACED-被其他进程跟踪
- _TASK_STOPPED(停止)-进程停止执行
4.进程上下文
当一个程序执行了系统调用或者触发了某个异常,它就陷入内核空间。此时,我们称内核“代表进程执行”并处于进程上下文中。
三、进程创建
1.UNIX的进程创建方式
- fork()通过拷贝当前进程创建一个子进程
- exec()负责读取可执行文件并将其载入地址空间开始运行
2.写时拷贝
- 写时拷贝是一种可以推迟甚至免除拷贝数据的技术。内核此时并不复制整个进程地址空间,而让父进程子进程共享同一个拷贝。
- fork()的实际开销就是复制父进程的页表以及给子进程创建唯一的进程描述
四、线程在Linux中的实现
1.线程机制提供了在同一进程内共享内存地址空间运行的一组线程,这些线程可以共享打开的文件和其他资源。Linux系统中并没有专门的线程机制,线程仅视为与其他进程共享某些资源的进程。
2.创建进程
- 与普通进程创建类似,在调用clone()的时候需要传递一些参数标志来指明需要共享的资源
- 传递给clone()的参数标志决定了新创建进程的行为方式和父子进程之间共享的资源种类。
3.内核线程
内核线程和普通进程区别在于内核线程没有独立的地址空间,只在内核空间运行,从来不切换到用户空间去。
五、进程终结
1.该任务大部分依赖于do_exit(),该函数永不返回
2.删除进程描述符
该任务是和清理工作分开进行的,因为这样在进程终结之后系统仍然可以获得它的信息
通过release_task()实现进程描述符的删除
3.解决孤儿进程
- 概述:父进程在进程之前退出,就会遗留下子进程,也就是孤儿进程
- 解决方法:在当前的线程组内给孤儿进程寻找新的父进程;否则直接以init作为其父进程
- 调用顺序:do_exit()-->forget_original_parent()-->find_new_parent()-->ptrace_exit_finish()(这一函数是为被跟踪的进程寻找父进程,因为被跟踪的进程会以调试程序作为临时父亲)
《Linux内核设计与实现》第3章读书笔记的更多相关文章
- 《Linux内核设计与实现》第四周读书笔记——第五章
<Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...
- 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内核设计与实现第十周读书笔记
第十七章 设备与模块 关于设备驱动与设备管理,我们讨论四种内核成分. 设备类型 模块 内核对象 sysfs 17.1设备类型 在Linux以及所有Unix系统中,设备被分为以下三种类型: 块设备,块设 ...
- Linux内核设计与实现第八周读书笔记
第四章 进程调度 进程在操作系统看来是程序的运行态表现形式. 4.1多任务 多任务操作系统就是能同时并发地交互执行多个进程的操作系统. 多任务操作系统会使多个进程处于堵塞或者睡眠状态.这些任务尽管位于 ...
- Linux内核设计与实现第六周读书笔记
第三章 进程管理 3.1 进程 进程是处于执行期的代码.通常进程还要包含其他资源,像打开的文件.挂起的信号.内核的内部数据.处理器状态.一个或多个具有内存映射的内存地址空间及一个或多个执行线程,当然还 ...
随机推荐
- Daily Scrum10 11.14
昨天的任务已经完成,但是我们在完成任务的过程中确实遇到了困难.昨天我们发现无法连接sqlserver的时候,给罗杰老师发了邮件.老师也给我们提出了建议,给我们提供了一些参考.所以今天大家都在研究如何解 ...
- Daily Scrum (2015/10/31)
这几天我们组的进度有点慢,剩下这一周的我们必须要加油认真对待. 周末这两天我们是这样安排的: 成员 今日任务 时间 明日任务 符美潇 数据库部分代码的编写 1h 每周小组例会 潘礼鹏 团队博客作业 ...
- 20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 结对伙伴博客链接 刘辰同学对编程的积极程度很高,并且在编程能力上很不错,有 ...
- CS小分队第二阶段冲刺站立会议(5月31日)
昨日成果:查找相关C#资料,清楚一些bug 遇到问题:系统获取的图标分辨率太低,网上找来的获取图标的代码看不太懂 今日计划:完善获取文件图标功能,并且能够删除获取的图标文件
- 第二阶段Sprint1
昨天:进行第二阶段第一次站立会议,讨论冲刺阶段,目标,任务认领 今天:实现视频录制,共享平台的视频下载和上传 遇到的问题:调手机摄像头没问题,共享平台怎么办
- spring冲刺第三天
昨天完成了环境配置和初步的地图设想. 今天从网上找了有关这方面的例子,运行试验了一番.编写的地图画面在程序上运行了一下,有些错误,还需要很多方面的改进. 这些例子有很多地方都不太懂,但还是看完了.我认 ...
- beta冲刺(5/7)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:恺琳 组员6:翟丹丹 组员7:何家伟 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4 ...
- Leetcode题库——4.寻找两个有序数组的中位数
@author: ZZQ @software: PyCharm @file: findMedianSortedArrays.py @time: 2018/10/10 19:24 说明:给定两个大小为 ...
- tomcat启动问题排查
遇到tomcat错误时不一定是tomcat的配置问题,还有可能是项目的配置问题.检查下xml的servlet配置是不是出了问题. tomcat8.0使用注解的方式帮我注册了servlet了,这时候已经 ...
- 29_Java_数据库_第29天(JDBC、DBUtils)_讲义
今日内容介绍 1.JDBC 2.DBUtils 01JDBC概念和数据库驱动程序 * A: JDBC概念和数据库驱动程序 * a: JDBC概述 * JDBC(Java Data Base Conne ...