计算机基础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最佳

posted @ 2020-10-05 18:22  傅克  阅读(492)  评论(0)    收藏  举报