进程管理

3.1进程
1.进程:进程就是处于执行期的程序,实际上,进程就是正在执行的程序代码的实时结果;
2.执行线程,简称线程,是进程中活动的对象(每个线程拥有独立的程序计数器、进程栈、和一组进程寄存器),内核调度的对象是线程,不是进程
3.进程提供的两种虚拟进制:虚拟处理器和虚拟内存
4.程序本身不是进程
5.调用fork(),该系统调用通过复制一个现有进程来创建一个全新的进程;接这调用exce()函数,可以创建新的地址空间,并把程序载入其中;最后,程序通过exit()系统调用退出调用。这个函数会终结进程并将其占用的资源释放掉
*fork()实际上是由clone()系统调用实现的

3.2进程描述符及任务结构
1.双向循环链表中,每一项都是类型为task_struct,称为进程描述符的结构;该结构定义在<sched.h>文件中
2.进程描述符中包含的数据能完整地描述一个正在执行的程序
3.每个任务的thread_info结构在它的内核栈的尾端分配。结构中task域中存放的是指向该任务实际的task_struct的指针
4.进程描述符的PID的最大值实际就是系统中允许同时存在的进程的最大数目;
5.进程描述符中的state域描述了进程的当前状态;必然处于五个状态的一种:
task_running
task_interruprtion
task_uninterruption
task_traced
task_stopped
*调整某个进程的状态,这时使用set_task_state函数:
6.进程只有通过这些接口才能陷入内核执行——对内核的所有访问都必须通过这些接口
系统中的每个进程必有一个父进程,相应的,每个进程也可以拥有零个或者多个子进程。拥有同一个父进程的所有进程被称为兄弟。进程间的关系存放在进程描述符中

3.3进程创建
1.首先,fork()通过拷贝当前进程创建一个子进程。子进程与父进程的区别仅仅在于PID、PPID和某些资源的统计量;exec()函数负责读取可执行文件并将其载入地址空间开始运行;
2.linux通过clone()系统调用实现fork();do_fork完成创建中的大部分工作,定义在kernel/fork.c文件中
3.除了不拷贝父进程的页表项外,vfork()系统调用和fork功能相同;vfork()系统调用的实现是通过向clone()系统调用传递一个特殊标志来进行的

3.4线程在linux中的实现
1.创建线程:与普通进程的创建类似,只不过调用clone()时候需要传递一些参数标志来指明需要共享的资源,参数标志决定了新创建进程的行为方式和父子进程之间共享的资源种类
2.内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,它们只在内核空间进行,从来不切换到用户空间。内核进程和普通进程一样,可以被调度,也可以被抢占
3.kthread内核进程通过clone()系统调用而创建。新的进程将运行threadfn函数,传递的参数为data

3.5进程终结
1.在调用do_exit()之后,尽管线程已经僵死不能再运行,但是系统还是保留了它的进程描述符。
2.wait()这一组函数通过唯一的一个系统调用wait4()来实现
3.linux如何存放(task_struct)和表示进程(thread_info);创建(fork());,实际上最终clone()

读书笔记(chapter3)的更多相关文章

  1. 《深入PHP与jQuery开发》读书笔记——Chapter3

    <深入PHP与jQuery开发>第三章学习笔记 1.PHP的魔术方法(在对象中发生某些例行事件时会自动调用这些方法) PHP提供了魔术方法__construct()(构造函数),在新对象被 ...

  2. Flask Web开发读书笔记

    开篇:目前想自学Flask Web开发--基于Python,找了几本书准备啃啃,同时也会分享读书笔记.希望和大家一起进步. Flask是小型框架,可以算是微框架,但是他的功能还是比较多 Flask有三 ...

  3. 锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]

    1.表单验证插件Validation   2.表单插件Form   3.动态事件绑定插件livequery 可以为后来的元素绑定事件   类似于jQuery中的live()方法     4.jQuer ...

  4. jQuery开发技术笔记

    HTML DOM 加载步骤    1. 解析 HTML 结构     2.加载外部脚本和样式表文件     3.解析并执行脚本代码     4.构造 HTML DOM 模型     5.加载图片等外部 ...

  5. 《锋利的jQuery》读书笔记(DOM+事件)

    前阵子买了一批书,就从锋利的jQuery看起吧,书中一些太过常规以及没有强记必要性的操作就不记录了. 1.DOM加载后执行JS $(document).ready(function(){ //.... ...

  6. 《锋利的jQuery》读书笔记

    jQuery理念:write less, do more! 第 一 章一:jQuery简介 a:轻量级 b:强大选择器 c:DOM封装 d:ajax封装 e:不污染顶级变量 只建立一个jQuery对象 ...

  7. <<敏捷开发>>读书笔记

    1.走进敏捷 * 组织成功 增加业务专家,较少bug和测试的交流成本,即使取消不好的技术 首先发布最有价值的特性,时常发布新的版本,即使改进软件 * 技术成功 结对编程,代码审核,确保同一份代码有不同 ...

  8. 【锋利的Jquery】读书笔记十一

    项目进度太赶,天天公司加班12小时,没时间看书充电.2016年再更新一篇吧.现在凌晨2点36分. 2017加油哦 jquery合适的选择器 $("#id") 无疑是最佳提高性能的方 ...

  9. 【锋利的Jquery】读书笔记七

    第七章  jquery插件 管理cookie的插件--cookie jquery插件太多没什么好讲的,百度太多 说以下 cookie插件 <!DOCTYPE html> <html& ...

  10. 【锋利的Jquery】读书笔记六

    ajax优点缺点 json格式的严格 { "people": [ { "firstName": "Brett", "lastNam ...

随机推荐

  1. Linux 小知识翻译 - 「路径设置」

    这次聊聊路径的使用,这里的路径是「命令搜索路径」的简称. 在Linux上执行命令的时候,本来是需要命令的所在位置的绝对路径的,就像「/usr/bin/passwd」这样. 但是,对于经常使用的命令,如 ...

  2. January 21st, 2018 Week 3rd Sunday

    Your attitude, not your aptitude, will determine your altitude. 决定你人生高度的,不是你的才能,而是你的态度. Actually, at ...

  3. 初识Python - Python的历史(转)

    声明: 本文转自维基百科 如有意见请联系删除 综述 该编程语言 的Python是在20世纪80年代末的设想,和实施是在1989年12月开始由吉多·范罗苏姆在CWI在荷兰的继任者农行能够异常处理,并与接 ...

  4. spring4整合xfire1.2.6的问题解决

    历史原因,需要用xfire发布webservice,项目用了spring4,整合几个坑,记录下(其他的配置忽略,相关资料比较多): 1. xfire定义bean的时候,用了 singleton 属性, ...

  5. 基于tomcat插件的maven多模块工程热部署(附插件源码)

    内容属原创,转载请注明出处 写在前面的话 最近一直比较纠结,归根结底在于工程的模块化拆分.以前也干过这事,但是一直对以前的结果不满意,这会重操旧业,希望搞出个自己满意的结果. 之前有什么不满意的呢? ...

  6. jQuery的收尾

    一  后台管理布局增删改 二  常用事件 三  jQuery扩展 一  后台管理布局增删改(多种方法) <!DOCTYPE html> <!-- saved from url=(00 ...

  7. js对象属性与Bom

    1JavaScript 的对象 1.1字符串 1.2Array对象 1.3Date对象 1.4Math对象 1.5Function对象(重点) 2 Bom对象 1   JavaScript对象 在Ja ...

  8. LCA转换成RMQ

    LCA(Lowest Common Ancestor 最近公共祖先)定义如下:在一棵树中两个节点的LCA为这两个节点所有的公共祖先中深度最大的节点. 比如这棵树 结点5和6的LCA是2,12和7的LC ...

  9. ethereum/EIPs-1193 Ethereum Provider JavaScript API 如metamask更新后的接口

    eip title author discussions-to status type category created requires 1193 Ethereum Provider JavaScr ...

  10. day04流程控制之while

    while语法: while 条件:  缩进的循环体 # 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件. # 如果条件为假,那么循环体不执行,循环终止 示例一: "&qu ...