计算机基础3--操作系统原理
2.进程管理之进程实体
为什么需要进程?
进程是系统进行资源分配和调度和调度的基本单位
进程作为程序独立运行的载体保障程序正常执行
进程存在使得操作系统资源的利用率大幅提升
多道程序设计
进程的实体
主存中的进程形态:
作为 进程控制块的形式存在
以下为一个进程控制块:
| 标识符 :标识符唯一标记一个进程,用于区别其他进程。例如:进程ID |
|---|
| 状态 :状态这个区域存储的就是【标记进程的进程状态,如:运行态、阻塞状态】 |
| 优先级 : |
| 程序计数器 :CPU中也有类似的设备,功能为【进程即将执行的下一条指令的地址】 |
| 内存指针 :指的是【程序代码、进程数据相关的指针,一个程序可能存在多个指针】 |
| 上下文数据 :功能为存储【进程执行时处理器存储的数据,如:寄存器高速缓存中的数据】 |
| IO状态信息 :功能为存储【被进程IO操作的文件列表】 |
| 记账信息 :功能为存储【使用处理器时间,时钟总和等】 |
| ............. |
总共可以归为4类:
进程标识,处理机状态,进程调度信息,进程控制信息
进程控制块(PCB):1.用于描述和控制进程运行的通用数据结构
2.记录进程当前状态和控制进程运行的全部信息
3.PCB的使得进程是能够独立运行的基本单位{每一个进程都依赖进程控制块而被操作系统所调度}
4.PCB是操作系统进行调度经常会读取的信息
5.PCB是常驻内存的,存放在系统专门开辟的PCB区域内
进程(Process)与线程(Thread)
进程是系统进行资源分配和调度的基本的单位。
线程是操作系统进行运行调度的最小单位,包含在进程之中,是进程中实际运行工作的单位。
一个进程可以并发多个线程,每个线程执行不同的任务。
(进程中的)线程共享进程的资源
总结两者进行对比
| 对比的属性 | 进程 | 线程 |
|---|---|---|
| 资源 | 资源分配的基本单位 | 不拥有资源 |
| 调度 | 独立调度的基本单位 | 独立调度的最小单位 |
| 系统开销 | 进程系统开销较大 | 线程系统开销小 |
| 通信 | 进程IPC | 读写同一进程数据通信 |
3.进程管理之无状态模型
就绪,阻塞,执行以及创建,终止。共5状态
1)就绪状态:
当进程被分配到除CPU以外的所有必要的资源后
在一个系统中多个处于就绪状态的进程通常排成一个队列---就绪队列
当进程被分配到除CPU以外所有必要的资源后
只要再获得CPU的使用权,就可以立即运行
其他资源都准备好,只差CPU资源的状态为就绪状态。
2)执行状态:
进程获得CPU,其程序正在执行称为执行状态
在单处理机(也就是单核CPU)中,在某一时刻只能有一个进程处于执行状态
3)阻塞状态
当进程因某种原因如:其他设备未就绪而无法继续执行,从而放弃CPU的状态未阻塞状态。
同样类似于就绪状态,在一个系统中存在多个处于阻塞状态的进程通常排成一个队列---阻塞队列
4)创建状态
分配PCB——>插入就绪队列
创建进程时拥有PCB但其他资源尚未就绪的状态被称为创建状态
操作系统提供fork函数接口创建进程
5)终止状态
系统清理——>PCB归还
进程结束由系统清理或者归还PCB的状态称为终止状态

4.进程管理之进程同步
1)为什么需要进程间的同步?
生产者和消费者问题--常见问题之一

图解生产者和消费者模式

错误原因是,两个进程并发执行了,它们同时对缓冲区中的数据进行了操作,导致了数据不一致
哲学家进餐的问题--常见问题之2

筷子相当于资源,哲学家相当于资源
两个模型的根源问题是:彼此之间没有通信
如果:生产者通知消费者我已经完成了一件生产
如果:哲学家向旁边的哲学家说我要进餐了
这里,就需要进程间的同步!! 【前面只是并发】
它的作用:
1.对竞争资源在多进程间进行使用的次序的协调
2.使得并发执行的多个进程之间可以有效使用资源和相互合作
2)进程间同步的原则
3)线程同步
虚拟内存不是欺骗进程,而是欺骗CPU
它的工作原理和swap是很相似的,都是要用到 磁盘的。而不是在 进程所分配的内存之间拼凑,拼凑出一个给新进程的内存!!!
这里 虚拟内存是把RAM当作了高速缓存来使用!而磁盘作为主存,需要用到的机器指令就从磁盘加载到RAM中,暂时不用的机器指令就放在磁盘中!
这里RAM这放的是 机器指令,不是数据
而swap,它解决的是 当使用虚拟内存之后,RAM还是将要不够用这个问题。也就是 RAM过载问题!
这时开始大量使用 磁盘代替RAM来进行存储!
当没有足够的RAM空间时,Linux内核会从中获取一些信息,并将其写入硬盘驱动器上的交换空间。这样Linux系统就可以释放一些RAM空间
看着swap和虚拟内存都是 用磁盘代替RAM来存机器指令,但是 前者可以大大提高运行效率,而后者则会大大降低执行效率。why?
报着这个问题,我比较详细的了解了上述的 “资料”
思考后的结论:
虚拟内存最终还是RAM和CPU进行交互,而swap存在磁盘和CPU进行交互
虚拟内存需要 某部分指令的时候,将指令从磁盘加载到RAM,然后CPU从RAM中读指令
而swap是 将RAM中的指令转移到磁盘后,空余出一部分空间然后 存储新的信息,避免RAM崩溃,而转移到磁盘的指令,则由 CPU从磁盘中读取指令来执行
先问 swap和虚拟内存之间的区别?为什么用swap比用虚拟内存慢?
如果答的不好,就问下面:
出一个经典问题,一行代码是如何交给CPU执行的?中间进行了那些交互,可以详细说说吗?
swap partition的一些缺陷:
必须在安装系统时定义swap partition的大小!
因此现代的Linux系统使用了swap file来代替swap partition
swap file 是可以自定义的文件,自定义大小!而且这个自定义可以设置为持久化{跨重启}。
另外还可以设置swappiness
swappiness是 交换比,当 RAM还剩余百分之XX时,开始交换
默认的swappiness是百分之60,一般设置为百分之10最佳

浙公网安备 33010602011771号