进程管理

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

进程描述符及任务结构

  内核把进程的列表存放在任务列表(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内核分析》之第三章读书笔记的更多相关文章

  1. linux内核分析 1、2章读书笔记

    一.linux历史 20世纪60年代,MIT开发分时操作系统(Compatible TIme-Sharing System),支持30台终端访问主机: 1965年,Bell实验室.MIT.GE(通用电 ...

  2. 《Linux内核分析》第三周学习笔记

    <Linux内核分析>第三周学习笔记 构造一个简单的Linux系统MenuOS 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.stud ...

  3. 《Linux内核分析》第六周 读书笔记

    <Linux内核设计与实现>CHAPTER3阅读梳理 [学习时间:3hours] [学习内容:进程的描述:进程的生命周期(包括创建.终结)] 一.进程(任务)描述 1.进程是处于执行期的程 ...

  4. 《Linux内核分析与设计实现》读书笔记一

    第一章 Linux内核简介 1.1 Unix的历史 Unix的特点: Unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的: 在Unix中,所有的东西都被当做文件对待. Unix的内核和 ...

  5. 《Linux内核分析》第七周 读书笔记

    <深入理解计算机系统>CHAPTER7阅读梳理 [学习时间:3hours] [学习内容:链接需要的代码&数据:链接机制:链接生成的目标文件] 一.链接概述 1.链接 定义:链接是将 ...

  6. 《linux内核》课本第五章读书笔记

  7. 《Linux内核分析》第三周学习报告

    <Linux内核分析>第三周学习报告                                    ——构造一个简单的Linux系统MenuOS 姓名:王玮怡  学号:201351 ...

  8. 《Linux内核设计与实现》 Chapter4 读书笔记

    <Linux内核设计与实现> Chapter4 读书笔记 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子 ...

  9. 《Linux内核分析》第八周学习笔记

    <Linux内核分析>第八周学习笔记 进程的切换和系统的一般执行过程 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163 ...

  10. 《Linux内核分析》第七周学习笔记

    <Linux内核分析>第七周学习笔记 可执行程序的装载 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...

随机推荐

  1. [转载] 深入理解Android之Java虚拟机Dalvik

    本文转载自: http://blog.csdn.net/innost/article/details/50377905 一.背景 这个选题很大,但并不是一开始就有这么高大上的追求.最初之时,只是源于对 ...

  2. apache目录浏览

    DocumentRoot "/Library/WebServer/Documents" <Directory "/Library/WebServer/Documen ...

  3. windows与linux之间文件的传输方式总结(转)

    当然,windows与linux之间文件的传输的两种方式有很多,这里就仅仅列出工作中遇到的,作为笔记: 方法一:安装SSH Secure Shell Client客户端 安装即可登录直接拖拉到linu ...

  4. .NET MVC TempData、ViewData、ViewBag

    说明: 原文作者贤新 原文地址:http://www.cnblogs.com/chenxinblogs/p/4852813.html ViewData和ViewBag主要用于将数据从控制器中传递到视图 ...

  5. coreData数据操作

    // 1. 建立模型文件// 2. 建立CoreDataStack// 3. 设置AppDelegate 接着 // // CoreDataStack.swift // CoreDataStackDe ...

  6. VScode常用几个前端插件live HTML previewer和debugger for chrome的配置

    之前一直都是用sublime Text和chrome配合来写前端的页面,自从知道了有liveReload这个神奇的插件之后感觉爽翻了啊.好吧跑远了........ 话说最近微软搞了个VScode,听说 ...

  7. Java 基础之-枚举

      目录(?)[-] 用法一常量 用法二switch 用法三向枚举中添加新方法 用法四覆盖枚举的方法 用法五实现接口 用法六使用接口组织枚举 用法七关于枚举集合的使用   DK1.5引入了新的类型-- ...

  8. hadoop2.6源码导入mvn出错Missing tools.jar问题解决方案

    1.定义JAVA_HOME:      JAVA_HOME=$(/usr/libexec/java_home) 2.拷贝文件      cd $JAVA_HOME      mkdir Classes ...

  9. VS2012开发工具BUG

    发现VS2012开发工具 新建立项目名称长度限制的一个bug, 向导方式名称长度限制56个,但建立好的项目名称长度是可以改的很长很长. 也有想是不是生成程序集的名称会有限制,同样这里生成程序集名称,及 ...

  10. 使用afinal下载文件并且在状态栏中显示下载的进度

    2013年10月23日,今天是在“我在找你信息服务有限公司”第一天上班,公司给提出了这样一个要求:下载本公司的app,并且在下载的过程中要在状态栏中显示下载的进度,并且,可以暂停和继续下载. 下面是我 ...