linux内核分析 第3章读书笔记
第三章 进程管理
一、进程
1.进程
进程就是处于执行期的程序。
进程就是正在执行的程序代码的实时结果。
进程是处于执行期的程序以及相关的资源的总称。
进程包括代码段和其他资源。
2.线程
执行线程,简称线程,是在进程中活动的对象。
内核调度的对象是线程而不是进程。
Linux对线程并不特别区分,视其为特殊的进程。
3.虚拟处理器和虚拟内存
在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存。
包含在同一个进程中的线程可以共享虚拟内存,但是每个都拥有各自的虚拟处理器。
4.几个函数
fork():创建新进程
exec():创建新的地址空间并把新的程序载入其中
clone():fork实际由clone实现
exit():退出执行
wait4():父进程查询子进程是否终结
wait()、waitpid():程序退出执行后变为僵死状态,调用这两个消灭掉。
二、进程描述符及任务结构
内核把进程的列表存放在叫做任务队列的双向循环链表中。
链表中的每一项都是进程描述符。
进程描述符的类型为task_struct。
1.分配进程描述符
Linux通过slab分配器分配task_struct结构——能达到对象复用和缓存着色的目的。
slab分配器——动态生成,只需在栈底或者栈顶创建一个新的结构struct thread_info。
每个任务的thread_info结构在它的内核栈的尾端分配。
结构中task域中存放的是指向该任务实际task_struct的指针。
2.进程描述符的存放
内核通过一个唯一的进程标识值PID来标识每个进程。
pid类型为pid_t,实际上就是一个int类型,最大值默认设置为32768,上限私改/proc/sys/kernel/pid_max。
pid存放在各自进程描述符中。
3.进程状态
进程描述符中的state域是用来描述进程当前状态的。共有五种状态,标志如下:
TASK_RUNNING(运行):进程是可执行的,或者正在执行,或者在运行队列中等待执行
TASK_INTERRUPTIBLE(可中断):进程正在睡眠/被阻塞
TASK_UNINTERRUPTIBLE(不可中断):睡眠/被阻塞进程不被信号唤醒
TASK_TRACED:被其他进程跟踪的进程
TASK_STOPPED(停止):进程停止执行;进程没有投入运行也不能投入运行。
接收到SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU等信号时,或者调试时收到任何信号,都可以进入这种状态。
4.设置当前进程状态
用set_task_state(task,state)函数。
5.进程上下文
程序执行系统调用或者触发异常后,会陷入内核空间,这时候内核代表进程执行,并且处于进程上下文中。
进程对内核的访问必须通过接口:系统调用和异常处理程序
6.进程家族树
所有的进程都是pid为1的init进程的后代。
内核在系统启动的最后阶段启动init进程。
系统中的每一个进程必有一个父进程,可以拥有0个或多个子进程,拥有同一个父进程的进程叫做兄弟。
这种关系存放在进程描述符中,parent指针指向父进程task_struct,children是子进程链表。
三、进程创建
1.一般操作系统产生进程的机制:
在新的地址空间创建进程
读入可执行文件
执行
2.Unix的机制:
fork()和exec()。
fork():通过拷贝当前进程创建一个子进程。
exec():读取可执行文件并将其载入地址空间开始运行。
linux内核分析 第3章读书笔记的更多相关文章
- Linux内核分析第四章 读书笔记
Linux内核分析第四章 读书笔记 第一部分--进程调度 进程调度:操作系统规定下的进程选取模式 面临问题:多任务选择问题 多任务操作系统就是能同时并发地交互执行多个进程的操作系统,在单处理器机器上这 ...
- Linux内核分析第一二章读书笔记
linux读书笔记(1,2章) 标签(空格分隔): 20135328陈都 第一章 Linux内核简介 Unix的历史 Unix 虽然已经使用了40年,但计算机科学家仍然认为它是现存操作系统中最强大和最 ...
- linux内核分析 第4章读书笔记
第四章 进程调度 一.抢占与非抢占 1.非抢占式进程调度 进程会一直执行直到自己主动停止运行 2.抢占式进程调度 Linux/Unix使用的是抢占式的方式,强制的挂起进程的动作就叫做抢占. 二.进程优 ...
- Linux内核分析第四章读书笔记
第四章 进程调度 进程调度程序:确保进程能有效工作的一个内核子程序 决定将哪个进程投入运行,何时运行已经运行多长时间 进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统 原则:只 ...
- Linux内核分析第三章读书笔记
第三章 进程管理 3.1 进程 进程就是处于执行期的程序 进程就是正在执行的程序代码的实时结果 线程:在进程中活动的对象.每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是 ...
- Linux内核分析第五章读书笔记
第五章 系统调用 在操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口在应用程序和内核之间扮演了使者的角色,保证系统稳定可靠,避免应用程序肆意妄行. 5.1 与内核通信 系统调用在用户空 ...
- linux内核分析 第5章读书笔记
第五章 系统调用 一.与内核通信 系统调用在用户控件进程和硬件设备之间添加了一个中间层,作用有: 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进程都运行在虚拟系统中,而在用 ...
- linux内核分析 第18章读书笔记
十八章 调试 一.内核调试概述 1.需要面对的 一个确定的bug 一个藏匿bug的内核版本 相关的内核代码的知识和运气 2.艰难的调试工作 重现bug很困难:大部分bug通常都不是行为可靠而且定义明确 ...
- linux内核分析 第7章读书笔记——《深入理解计算机系统》
第七章 链接 --<深入理解计算机系统> 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行. 一.编译器 大多数编译系统提供编译驱动 ...
随机推荐
- CCCC L2-022. 重排链表
题解:直接list模拟,头尾两个指针,分别将头尾元素push到另一个list里面,输处输入方式同上一篇 坑:第一发卡了第二个样例,第二发卡了第4个,莫名其妙,所以把两个代码合起来,然后强行ac了. # ...
- PHPExcel exception: “Could not close zip file … ”报错
Q: PHPExcel exception: “Could not close zip file … ” A:目录没有写权限,chmod 对$phpExcel->save($dir)中报错路径设 ...
- Linux 工具,一本好书 大牛的博客
http://linuxtools-rst.readthedocs.io/zh_CN/latest/base/index.html http://design-patterns.readthedocs ...
- sql server中的工作线程
/*在SQL SERVER 2005 及以后版本中, 使用'MAXworker thread' 来配置可用的线程数,默认设置为0 ,即自动控制线程数 计算最大工作线程数: 对于32 位系统:逻辑CPU ...
- U盘安装win10操作系统
https://www.zhihu.com/question/39207359 1:进入微软官方网站,点击立即下载工具,下载完成mediacreationtool,双击打开,接受协议 https ...
- Andrew Ng-ML-第十二章-机器学习系统设计
1.确定执行的优先级 图1.邮件垃圾分类举例 选择100个单词作为指示是否是垃圾邮件的指标,将这些单词作为特征向量,只用0/1表示,出现多次也只用1表示,特征变量用来表示邮件. 通常情况下,会选择训练 ...
- 软件包管理:rpm命令管理-安装升级与卸载
严格区分大小写 卸载命令不许再包的目录下执行.
- 【CUDA并行程序设计系列(1)】GPU技术简介
http://www.cnblogs.com/5long/p/cuda-parallel-programming-1.html 本系列目录: [CUDA并行程序设计系列(1)]GPU技术简介 [CUD ...
- windows配置iis网站域名
1.在iis 中添加网站,网站名和主机名设置为test.com 2.在C:\Windows\System32\drivers\etc找到host文件,添加 127.0.0.1 test.com 127 ...
- EditPlus 中文版停止更新
经过一段时间的考虑,我决定了终止 EditPlus 的中文版翻译工作. 感谢各位网友在这么长时间内对本汉化项目的关注.