进程的定义
- 一个进程实体包括三部分:程序段,数据段,pcb,这个进程实体就简称为进程
进程的特征
-
动态性
- 进程由创建而产生,由调度而执行,由撤销而消亡
- 有一定生命期
- 进程的实质是进程实体的执行过程
-
并发性
- 指多个进程实体能够同时存在内存中,且能够在一段时间内同时运行。这也正是引入进程概念的目的
-
异步性
- 每个进程都是按各自独立的、不可预知的速度向前推进
- 正是由于有异步性,os 才会引进相应的同步机制,才能保证进程并发执行的结果是可再现的
-
独立性
- 进程是独立运行,独立接受调度的基本单位
进程的基本状态及转换
- 创建、就绪、执行、阻塞、终止
- 切记,创建完并非立即执行,而是就绪状态,当 CPU 调度时才转变为执行状态
- 执行->就绪,是由于时间片用完,让出 CPU 资源,变回就绪状态
- 就绪状态:指进程已经处于准备好运行的状态,那具体什么是准备好呢?即进程已分配到除 CPU 以外的所有必要资源后,只要再获得 CPU,便可立即执行
- 创建、静止就绪、活动就绪、执行、静止阻塞、活动阻塞、终止
- 创建 -> 活动就绪:在当前系统的性能和内存的容量均允许的情况下,完成对进程创建的必要操作后,进程便为活动就绪状态
- 创建 -> 静止就绪:不分配给新建进程所需资源,主要是主存,所以该进程被安置在外存,不参与调度,状态转为静止就绪状态
操作系统内核
定义
将一些与硬件紧密联系的模块(如中断处理程序等)、各种常用设备的驱动程序、运行频率较高的模块(如时钟管理,进程调度),都安排在紧靠硬件的软件层次中,将它们常驻内存,即通常称为 OS 内核。
目的或者有点有两个:
- 对这些软件进行保护,防止遭受其他应用程序的破坏
- 提高 OS 的运行效率(因为常驻内存)
OS 内核两大功能:
-
支撑功能
-
中断处理
- 内核最基本的功能
- 各种类型的系统调用、键盘命令的输入、进程调度、设备驱动等,都依赖于中断
-
时钟管理
- 内核的一项基本功能
- 例如时间片轮转调度中,每当时间片用完时,便由时钟管理产生一个中断信号,促使调度程序重新进行调度
- 实时系统中的截止时间截止、批处理系统中的最长运行时间控制等也依赖于时钟管理
-
原语操作
- 所谓原语,就是由若干条指令组成的,用于完成一定功能的一个过程。
- 原子操作是指一个操作中的所有动作要么全做,要么全不做。它是一个不可分割的基本单位。
-
- 资源管理功能,包括进程管理、 存储器管理、设备管理
进程和线程的区别
从调度性、并发性、系统开销、拥有资源、独立性、支持多处理机系统方面比较
-
调度性
- 线程是调度的基本单位,是能独立运行的基本单位,线程切换代价低
- 只有从一个进程中的线程切换到另一个进程中的线程时,才会引起进程的切换
-
拥有资源
- 进程是拥有资源的基本单位,而线程仅有一点必不可少,能保证独立运行的资源而已
- 那线程拥有哪些必不可少的资源呢?如线程控制块 TCB,程序计数器,保留局部变量,少数状态参数和返回地址等的一组寄存器和堆栈
- 多个线程共享所属进程拥有的资源
-
并发性
- 进程之间可以并发执行,一个进程中的多个线程之间也可以并发执行
-
独立性
- 同一进程下的线程之间的独立性低,不同进程之间的独立性高
- 每个进程都拥有一个独立的地址空间和其他资源,除了共享全局变量外,不允许其他进程的访问
- 同一进程的不同线程,共享进程的内存地址空间和资源,如一个线程的堆栈可以被其他线程读写
-
系统开销
- 创建和撤销进程,系统要为之分配和回收 PCB 以及其他资源如内存空间和 I/O 设备
- 而线程由于共享进程所拥有的资源,所以线程的创建、撤销快,上下文切换也快
- 线程之间的同步和通信也比进程的简单
-
多处理机系统支持
- 传统的进程,即单线程进程,无论有多少处理机,该进程只能运行在一个处理机上
- 但对于多线程进程,就可以将一个进程中的多个线程分配到多个处理机上,并行执行
多进程和多线程的应用场景
首先,多进程单线程模型,简称为多进程;单进程多线程模型,简称为多线程。
多进程模型
优点
- 编程相对容易;通常不需要考虑锁和同步资源的问题。
- 更强的容错性:比起多线程的一个好处是一个进程崩溃了不会影响其他进程。
- 有内核保证的隔离:数据和错误隔离。
- 对于使用如C/C++这些语言编写的本地代码,错误隔离是非常有用的
- 采用多进程架构的程序一般可以做到一定程度的自恢复(master守护进程监控所有worker进程,发现进程挂掉后将其重启)
案例
- nginx主流的工作模式是多进程模式(也支持多线程模型)
- 几乎所有的web server服务器服务都有多进程的,至少有一个守护进程配合一个worker进程,例如apached,httpd等等以d结尾的进程包括init.d本身就是0级总进程,所有你认知的进程都是它的子进程;
- chrome浏览器也是多进程方式。
- redis也可以归类到“多进程单线程”模型(平时工作是单个进程,涉及到耗时操作如持久化或aof重写时会用到多个进程)
多线程模型
优点
- 创建速度快,方便高效的数据共享
- 多个线程之间可以共享相同的地址空间
适用场景
- 线程间有数据共享,并且数据是需要修改的(不同任务间需要大量共享数据或频繁通信时);
- 提供非均质的服务(有优先级任务处理)事件响应有优先级;
- 单任务并行计算,在非CPU Bound的场景下提高响应速度,降低时延;
- 与人有IO交互的应用,良好的用户体验(键盘鼠标的输入,立刻响应)
如何选用
单进程多线程和多进程单线程,2种模式如何取舍?
- 进程线程间创建的开销不足以作为选择的依据,因为一般我们都是使用线程池或者进程池,在系统启动时就创建了固定的线程或进程,不会频繁的创建和销毁;
- 首先,根据工作集(需要共享的内存)的大小来定;如果工作集较大,就用多线程,避免cpu cache频繁的换入换出;比如memcached缓存系统;
- 其次,选择的依据根据以上多线程适用的场景来对比自身的业务场景,是否有这样场景需求:数据共享、提供非均质的服务,单任务拆散并行化等;
- 如果没有必要,或者多进程就可以很好的胜任,就多用多进程,享受单线程编程带来便利;
- RCU的发明者,Paul McKenny 在《Is Parallel Programming Hard, And, If So, What Can You Do About It?》说过: 能用多进程方便的解决问题的时候不要使用多线程。
引用出处
https://blog.csdn.net/PirLCK/...
汤小丹-计算机操作系统(第四版)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。