文章目录
- 一.计算机操作系统
- 二.进程/任务
- 三、进程控制块抽象(PCB)
- 四、进程调度相关属性
- 五、内存管理
一.计算机操作系统
概念:操作系统是一组做计算机资源管理的软件的统称.
目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等.
操作系统的分层示图
操作系统的两个最基本功能:
- 防止硬件被时空的应用程序滥用.
- 向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。
二.进程/任务
进程是操作系统资源分配的最基本的单位.
进程是重要的软件资源,由操作系统内核进行管理, 管理可以分为----描述+组织.
描述: 使用结构体 (C语言结构体特别的称之为 PCB 的进程控制块)来描述进程属性.
组织: 通过双向链表,将多个PCB进程控制块串联起来.
- 创建: 创建一个 PCB 这样的对象插入到双向链表中.
- 销毁: 将 PCB 结点删除.
- 任务管理器: 即就是将 PCB 表进行遍历.
总而言之, 进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
三、进程控制块抽象(PCB)
在计算机内部要管理任何事物,都需要将其抽象成一组有关联的、互为一体的数据。在 Java 中,我们可以通过类&对象来描述这一特征。
PCB中描述进程的一些特征:
- 进程的唯一标识—— pid;
- 内存指针,即指向自己占用的内存是那些。
- 文件描述附表,表述硬盘上的文件等资源。
上述两点,描述了进程持有那些硬件资源。 - 进程调度相关属性。
四、进程调度相关属性
- 进程的状态
- 就绪状态:随叫随到,进程随时准备进入 CPU 进行执行。
- 运行状态:正在 CPU 中执行的。
- 阻塞状态:出差了,进程短时间内无法到达 CPU 上执行。例如:进程正在进行密集的 IO 操作,读取数据。
- 优先级
- 对进程进行排序,优先执行哪一个进程,延后执行哪一个进程。
- 上下文(存档的内容)
操作系统中进程切换操作时,将进程执行的中间的状态记录并保存,下次运行时回复上次的状态。
进程的上下文就是 CPU 中的各个寄存器的值。
- 保存上下文: 就是将这些 CPU 寄存器中的值,记录保存到内存中。
- 回复上下文: 就是把内存中的寄存器中的值恢复到 CPU 中。
为了更好的理解上面的有关上下文的相关知识,我们需要知晓有关CPU 分配“分时复用” 的相关概念。
- 并行: 微观上的同一时刻,两个核心上的进程,同时进行。
- 并发: 微观上同一时刻,一个核心上只能运行一个进程,但是 CPU 可以对进程进行快速的切换。(切换速度相当快,宏观下难以察觉)
这样,我们就更好理解上下文中有关寄存器是如何工作的。
- 记账信息
操作系统统计进程在 CPU 上占用的时间和执行的指令数目,依据这些信息来决定下一阶段的进程如何调度。
五、内存管理
何为内存?
内存,物理上是一个内存条,可以用来存储许多数据。
内存可以想象为一个很大的走廊,走廊两边有许多房间,每一个房间的大小为 1byte 并且每一个房间都有着对应的编号。
内存编号就是我们所说的“地址”,在这里的“地址”指的是 “物理地址”。
在进程访问地址时,访问方式是随机访问,即随机访问地址中的内存空间,可以很快地访问到内存中任意地址上的数据。 但是,这样有很大的缺陷,如下图。
上图中的两个地址范围,分别为 进程1和进程2 的,倘若出现 BUG 就很有可能会出现内存访问的问题 当出现访问越界时就会出现因为 进程1 的 BUG 导致 进程2 的奔溃。为了解决这样的问题,我们引入了虚拟地址空间。
虚拟地址空间(主要是避免进程间互相产生影响)
在虚拟地址空间中,代码中不在使用真实的物理空间地址,而是通过操作系统与专门的硬件设备进行虚拟地址到物理地址的转换,如图:
有了虚拟地址空间后,一但进程访问越界,操作系统就会及时发现地址超出访问范围此时,就会向进程反馈错误,将进程1构成崩溃(其余的进程不会被影响)
到此, 文章结束, 如有不足, 欢迎提出. 如有错误, 欢迎指正!