3.1 进程

处于执行期的程序。

进程就是正在执行的程序代码的实时结果。内核需要有效而又透明地管理所有细节。

执行线程(简称线程):在进程中活动的对象。每个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器。

内和调度的对象是线程,而不是进程。

进程提供两种虚拟机制:虚拟处理器和虚拟内存。

3.2 进程描述符及任务结构

Linux通过slab分配器分配task_struct结构。

每个任务的thread_info结构在它的内核栈的尾端分配。结构中task域中存放的是指向该任务实际task_struct的指针。

内核通过一个唯一的进程标识值或PID来标识每个进程。

内核把每个进程的PID存放在它们各自的进程描述符中。

进程描述符中的state域描述了进程的当前状态。

内核调整某个进程的状态:

Set_task_state(task, state);

该函数将指定的进程设置为指定的状态。

当一个程序执行了系统调用或者触发了某个异常,它就陷入了内核空间。此时,我们称内核“代表进程执行”并处于进程上下文中。

除非在此间隙有更高优先级的进程需要执行并由调度器做出了相应调整,否则在内核退出的时候,程序恢复在用户空间会继续执行。

3.3 进程创建

Unix采用与众不同的实现方式,它把上述步骤分解到两个单独的函数中去执行:fork()、exec()。

1.fork()通过拷贝当前进程创建一个子进程。复制父进程的页表以及给子进程创建唯一的进程描述符。

Linux通过clone()系统调用实现fork()。

子进程作为父进程的一个单独的线程在它的地址空间里运行,父进程被阻塞,直到子进程退出或执行exec()。子进程不能向地址空间写入。

3.4 线程在Linux中的实现

线程机制支持并发程序设计技术,在多处理器系统上,它能保证真正的并行处理。

创建进程在调用clone()的时候需要传递一些参数标志来指明需要共享的资源。

内核线程和普通的进程间的区别在于内核线程没有独立的地址空间。它们只在内和空间运行,从来不切换到用户空间去。

内核进程和普通进程一样,可以被调度,也可以被抢占。

3.5 进程终结

任务大部分要靠do_exit()来完成。

在调用了do_exit()之后,尽管线程已经不能再运行了,但是系统还保留了它的进程描述符。

进程终结时所需的清理工作和进程描述符的删除被分开执行。

Wait()这一族函数是通过唯一的一个系统调用wait4()来实现的。

当最终需要释放进程描述符时,release_task()会被调用。

当一个进程被跟踪时,它的临时父亲设定为调试进程。此时如果它的父进程退出了,系统会为它和它的所有兄弟重新找一个父进程。

解决办法:在一个单独的被ptrace跟踪的子进程链表中搜索相关的兄弟进程——用两个相对较小的链表减轻了遍历带来的消耗。

【读书笔记】Linux内核设计与实现(第三章)的更多相关文章

  1. Linux内核设计与实现 第三章

    1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作都是由内核来实现的. Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线程,线程不过是一种特殊的 ...

  2. LINUX内核设计与实现第三周读书笔记

    LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年, ...

  3. linux及安全《Linux内核设计与实现》第一章——20135227黄晓妍

    <linux内核设计与实现>第一章 第一章Linux内核简介: 1.3操作系统和内核简介 操作系统:系统包含了操作系统和所有运行在它之上的应用程序.操作系统是指整个在系统中负责完成最基本功 ...

  4. 2013337朱荟潼 Linux第一章读书笔记——Linux内核简介

    一.Unix历史 二.Linux足迹 类Linux系统.非商业化产品.用途广泛 三.操作系统和Linux内核简介 1.操作系统 (1)是指在整个最基本功能系统中负责完成最基本功能和系统管理的部分. ( ...

  5. Linux内核设计与实现 第十七章

    1. 设备类型 linux中主要由3种类型的设备,分别是: 设备类型 代表设备 特点 访问方式 块设备 硬盘,光盘 随机访问设备中的内容 一般都是把设备挂载为文件系统后再访问 字符设备 键盘,打印机 ...

  6. 《linux内核设计与实现》第一章

    第一章Linux内核简介 一.unix 1.Unix的历史 Unix是现存操作系统中最强大和最优秀的系统. ——1969年由Ken Thompson和Dernis Ritchie的灵感点亮的产物. — ...

  7. Linux内核设计与实现 第五章

    1. 什么是系统调用 系统调用就是用户程序和硬件设备之间的桥梁. 用户程序在需要的时候,通过系统调用来使用硬件设备. 系统调用的存在意义: 1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备 ...

  8. linux及安全《Linux内核设计与实现》第二章——20135227黄晓妍

    第二章:从内核出发 2.1获取源代码 2.1.1使用git Git:内核开发者们用来管理Linux内核源代码的控制系统. 我们使用git来下载和管理Linux源代码. 2.1.2安装内核源代码(如果使 ...

  9. 【读书笔记】Linux内核设计与实现(第一章&第二章)

    http://pan.baidu.com/s/1hqYAZNQ OneNote做的笔记没法儿带着格式一起导进来.所以上传到百度云,麻烦老师下载一下了. 下次不再用OneNote.

  10. 《Linux内核分析》之第三章读书笔记

    进程管理 进程是处于执行期的程序以及相关的资源的总称,也称作任务.执行线程,简称线程,是在进程中活动的对象. 可以两个或两个以上的进程执行同一个程序 也可以两个或两个以上并存的进程共享许多资源 内核调 ...

随机推荐

  1. Alpha冲刺! Day9 - 砍柴

    Alpha冲刺! Day9 - 砍柴 今日已完成 晨瑶:继续补充gitkraken教程. 昭锡:实现主页基本布局. 永盛:进一步了解了框架,为框架生成的模型填充了假数据到数据库. 立强:文章模块基本实 ...

  2. Win10上启动UICrawler自动遍历时报 "org.openqa.selenium.WebDriverException: An unknown server-side error occur red while processing the command. Original error: Could not sign with default certifi cate."

    操作步骤: 1.直接启动 Appium (我用的是 version 1.10.0) 2.打开命令窗口,切换到 UICrawler 所在路径 3.执行命令 java -jar UICrawler-2.2 ...

  3. ByteArrayInputStream与ByteArrayOutputStream_操作数组的流

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  4. centos7下安装docker(13.1docker存储--data volume)

    我们现在知道docker 有两种存储方式:storage driver和data volume stroage driver这种存储方式主要是存储那些无状态的数据,是镜像层和容器层组成的,而data ...

  5. 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165318

    2018-2019-2 <网络对抗技术>Exp0 Kali安装 Week1 20165318 下载地址 Kali官网,选择Kali Linux 64 bit VMware 安装步骤 以下步 ...

  6. 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(四)数据库安装(单节点)

    一.卸载CentOS自带的MySQL 1.1 查看之前是否安装过mysql [root@master mysql]# rpm -qa|grep -i mysql mysql-libs--.el6.x8 ...

  7. k8s监控api调用

    k8s监控api调用 curl -s --cacert /etc/kubernetes/ssl/ca.pem -basic -u fengjian:fengjian --insecure -X GET ...

  8. Web 前端怎样入门?(转)

    转自知乎https://www.zhihu.com/question/32314049/answer/100898227

  9. 如何优雅地使用Sublime Text3(转)

    转自http://www.jianshu.com/p/3cb5c6f2421c/ Sublime Text:一款具有代码高亮.语法提示.自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插件扩 ...

  10. 20175310 《Java程序设计》第1周学习总结(1)安装虚拟机

    20175310 <Java程序设计>第1周学习总结(1)安装虚拟机 开学前老师在蓝墨云班课上上传了预备作业,其中有一个就是安装Linux操作系统,参考了<>,下载安装Virt ...