目录
1.什么是程序?
一套做数据处理的步骤。程序 = 指令+ 数据。是一套静态的步骤。(比如说菜谱)
程序是静态的,一般表现为一个或一组文件
2.什么是进程?
1.站在用户角度的视角(⭐)
英文本意就是:过程
进程是程序的一次执行过程——按照菜谱的一次做菜的过程,进程是动态的。
一个程序,可以进行多次执行(表现为多个进程);甚至可以“同时”执行(多个进程同时存在)
进程是程序在“运行阶段”的视角主题
2.站在 OS(操作系统)实现的角度看什么是进程(⭐)
进程是 OS 进行资源分配的基本单位
进程是 OS 进行资源分配的最小实体
1.OS 的职责:协调者/管理者
2.资源:被 OS 管理的资源(硬件资源、软件资源)
3.分配的实体/单位:分配的时候,只考虑到这一层级
4.基本/最小:允许有更高层次的单位,但最低到进程
换言之
同一个进程中的资源是共享的(如果存在比进程更低级的单位,是共享的);不同进程之间的资源是隔离的。
A 进程只能访问 A 进程自己的资源(这里主要讨论内存);A 进程无法访问 B 进程的资源(内存);更无法访问被 OS 直接管理的资源。
3.理解进程
1.动态过程 2.绑定一个程序 3.允许同时存在 4.OS 内部进行资源申请的最小个体
OS 要管理进程,进程是 OS 内部非常核心的一个概念。可以把 OS 的职责做个简单的划分:
1. OS 进行CPU 协调的模块——进程管理模块:主要负责进程的调度工作——主持不同进程在 CPU 运行的时间划分。
实践中,OS 需要负责把 进程 A 从 CPU 上拿下来,把 进程B 放到 CPU 上通过修改 PC 寄存器的值,让 CPU 去执行属于 B 的指令。
2. OS 进行内存协调的模块——内存管理模块:主要负责内存空间的分配工作——进程通信的问题
3. 硬盘最为主要的二级存储,是比较重要的一个IO 设备——OS 进行硬盘上的数据的协调模块:把硬盘上的数据抽象成文件(包含文件夹/目录)的概念。——文件夹管理模块
4.网络管理模块
5.其他硬件——以文件驱动的形式进行管理——驱动管理
3.进程管理/进程调度
同一个颜色代表一个进程
做好进程调度,我们面临的问题
1.需要把进程(程序执行的过程)这个抽象的概念,用数据表示处理——面向对象的思想
变成数据,才能被计算机进行处理(才能被 OS 这个软件进行处理)
OS 需要管理多个进程,通过数据结构组织起来管理List、Map、Queue
2.需要对进程做个区分:哪些可以分配给 CPU ,哪些暂时还没准备好
通过对进程状态做状态划分(⭐),来区分出处于不同情况下的进程——进程状态/状态的转义(随着时间的变化,进程的情况也在变化)
新建(进程处于正在创建中)
就绪(万物具备,只欠CPU)
运行(进程的指令正在 CPU 运行着)
阻塞(进程由于等待外部条件,所以暂时无法继续)
结束(进程的所有指令执行结束,但 PCB 暂时保留,OS 还需要做一些其他的工作的时候)
所有运行状态必须是从就绪状态变过去的。进程的 CPU 必须经过 OS 系统分配才能得到。
每个状态的转化过程:
=> 新建:随着程序的启动运行
新建 => 就绪:进程的初始化工作全部完成(这个工作是由 OS 的指令完成的)
就绪 => 运行:进程被 OS 选中,并分配了 CPU 之后
运行 => 结束:进程的最后一条指令执行结束(粗略的理解,就是 main 方法执行结束了)
运行 => 就绪:1.被高优先级的进程抢占了 2.时间片耗尽 3.进程可以执行一些 OS 提供的系统调用,主动放弃
运行 => 阻塞:等待一些外部条件:等待 IO 设备;进程休眠一段时间哎
阻塞 => 就绪:外部条件满足:IO 数据来了;休眠时间到了
结束 => :进程 PCB 彻底被 OS 回收了
站在 OS 角度,同一时刻,处于不同的状态下的进程不止一个。
就绪队列(一般只有一个):装所有处于就绪状态的进程,都是等待备CPU 分配的进程
阻塞队列(一般每个条件都可以有一个):等待某些外部条件的进程组成的队列
3.现在手上有等待分配 CPU 的所有进程列表——就绪队列,那么选择哪个进程上 CPU?
要求:要有消息,保证公平性,要让更紧急的任务被更紧急的处理,低成本解决
先来先服务、优先级划分(进程PCB 中需要管理一个优先级属性)、短作业优先级...
4. OS 什么时候会介入进程调度:需要选择一个新的进程,进行CPU 分配
1.一个新的进程刚出狱就绪状态时,当该进程的优先级较高时——具备这种能力的 OS 被称为抢占式(实时)
2.运行状态的进程 => 结束。一个进程结束了
3.OS 每隔一段时间,会调度一次:进程的时间片耗尽
4.进程主动放弃 CPU:运行 => 阻塞;运行 => 就绪
5.OS 具体怎么进程切换:通过上下文切换——保护上一个进程的上下文 + 恢复下一个进程的上下文
上下文概念:
可以用环境这个词去理解
讨论到进程调度中,上下文指的是:以 PC 寄存器所代表的一组寄存器中的值
保护上下文:把寄存器中的值,保存到内存的某个位置
恢复上下文:把内存中之前保护的值,写入寄存器中
4.由进程管理,引出的一些 OS 概念
1.并行 VS 并发
并行:进程真的同时在执行(从微观角度的同一时刻,是由多个指令在执行的,所以只会在多CPU 多核场景下)
并发:进程假的同时在执行(微观上,一次只执行一个进程;宏观上,多个进程在“同时”执行)
2.用户态 VS 内核态
CPU 正在执行的是 OS 的指令时,就进入到内核态。执行普通进程的指令时,就在用户态。
管理的核心就是权限的划分
- 内核态的指令权限高(所有硬件都能访问)
- 用户态的指令权限低(只能访问 OS 规定的资源)
CPU 本身就有权限开关,所以可以做到
内核态指令可以访问所有内存,用户态指令只能访问进程自己的内存
用户态和内核态之间的转换,是通过1)系统调用:操作系统实现一组访问。2)CPU 中断进程 OS 的指令。
用户态的性能较好,内核态的性能较差
执行流:拥有独立 pc 的一套指令;不同的执行流从现象上看起来的完全独立的