操作系统与程序运行以及进程简介
一、线程与操作系统
操作系统是对计算机硬件资源的管理程序,是应用程序与计算机硬件交互的中间层,其本质仍旧是运行于硬件电路上的程序
对计算机硬件来说不存在操作系统,只是处理器对指令的执行,不过操作系统是一个特殊一点的程序。 所以不管你用了多少技术,框架,模式,实现了怎么样的协议与功能,原理是什么,也只是人类意识层面上的内容,到底层只有指令。
所以,运行于计算机之上的这一切都只是程序
这些程序经过指定的步骤,从高级到低级,从人类可以理解到无法识别,最终转换为计算机可以识别的指令。
(一)、什么是程序
遵循某种语言的源代码经过编译、翻译等步骤转换后的一组计算机能识别和执行的指令,这就是程序。
操作系统将程序的一次运行抽象为进程
简言之,如果 你(处理器)按照 菜谱(程序)去 做菜(执行程序),这个过程就叫做 下厨做饭(进程)
还有一个概念是进程上下文,刚才说到现代系统还可以并发的执行多道程序,必然存在着CPU的切换,进程间的切换,也被称之为上下文切换。
通俗比喻:如果只有一个厨房,你做菜做一半了,然后需要让出来厨房让别人做,你需要做什么?收拾好你的食材,记住你刚才食材放置的位置以及处理的进度,哪个菜洗过了?盐放过了么?。。。等等这些数据就是进程上下文,当别人撤出去之后,你需要将这些状态还原,这就是上下文切换。
(二)、并发并行
下面这幅图可以很好地解释并发与并行
一个咖啡机两个队伍,就是并发;两个咖啡机,两个队伍,就是并行。
(三)、多线程
单核CPU
对于一个单CPU系统,对于多任务的实现就是并发,操作系统不断地进行着切换,将时间片分配给不同的程序,以看起来像多个程序是共同运行的。
然而单核场景下,尽管多线程在有些场景下可以提高CPU的利用率,但是对于单CPU系统(单核)系统,在有些场景下,反而会降低整体性能。
多核CPU
随着技术的发展, 能够装载的核心数目越来越多。对于多核CPU,能够真正的做到在同一瞬时,执行多个线程,是真正的并行。
所以很显然,这种场景对于真正的并行,不管你的程序任务是什么样子的,对于多线程程序,必然能够提高程序的执行速度。
二、总结
不管是进程还是线程,都是操作系统对于程序执行的抽象描述,是相关数据:寄存器状态、堆栈值等所有相关数据的集合。通过进程的相关信息的维护管理,操作系统保障多道程序可以顺利的切换执行;而对于多线程的应用程序,需要开发者对线程的数据等相关信息进行控制,以保证多线程间可以正确的运行。
保障资源的互斥访问是为了保证程序的正确性,否则再快的程序也没有意义;如果编写的程序非常的不合理,逻辑不清晰,反而可能会带来性能问题,而不是提高效率。所以多线程相关的技术的确很复杂,而且非常容易出错,而且学习成本很高,但是,他终归是为了提高CPU的利用率的同时并且保障临界资源的正确访问。
进行概念详解
(一)、进程
道程序出现之后,程序需要并发的执行,计算机的资源是共享的,而不再是某一程序运行后独享
(1)程序实体
1. 进程本身的信息(现在谁在用厨房?现在盆盆罐罐都被你放了什么?)
2. 可执行的代码是哪些?(菜谱步骤是什么?)
3. 程序运行所需要的数据是什么?(食材是什么?佐料又是什么?)
(2)进程特征
1. 动态性 2. 并发性 3. 独立性 4.异步性
(二)进程状态
(1)基本状态
创建、就绪、执行、阻塞、终止
其中核心是:就绪、执行、阻塞
如果一个正在执行的程序遇到了IO请求,这通常是比较耗时的,进程会进入阻塞状态,进入阻塞状态的进程一旦获得了想要的结果,比如IO完成,那么就再次进入就绪状态,等待CPU的临幸。
(2)挂起状态
比如资源不充足时,将一些不重要的进程暂时挂起,挂起是真正的暂停执行,是一种主动式的管理,阻塞则是被动的,挂起也意味着置换到外存中,而不是内存中。
一个静止阻塞的状态就相当于在外存中等待一个事件的完成,事件完成后,进入静止就绪状态,他此时还是不会得到CPU的调度,激活后才有机会得到CPU临幸
(3)终止状态的转换
(三)、PCB( process control block)进程控制块
进程是对于程序执行的抽象描述,那么进程控制块,这个对进程的描述,就相当于进程的元数据,用于描述进程本身。
所以说,他就是一个数据结构,记录了用于控制管理进程的各个数据项。
可见,在进程的整个生命期中,系统总是通过 PCB对进程进行控制的,亦即,系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的。
PCB是进程存在的惟一标志。
-
- 进程标识符
- 计算机状态
- 进程调度信息
- 进程控制信息
为了能对它们加以有效的管理,应该用适当的方式将这些PCB组织起来。目前常用的组织方式有以下两种。
(四)、进程掌控的三座大山
进程控制、进程同步、进程通信
(五)、总结
进程作为操作系统对程序执行的抽象,那么就使用了足够多的数据项对进程进行描述,所有的信息都是为了进程的管理、维护、调度、切换等。
进程看似复杂,原理也是如此,操作系统使用多个数据项(数据结构)对程序的执行进行描述,然后定义了一整套的操作逻辑与规则。
进程有状态信息,操作系统负责管理状态的切换,那么必然需要记录进程的状态信息,既然是轮流分配时间片,就好像去办理业务,排队等待一样,但是无数个场景下都有VIP的存在,进程也是,也有优先级的概念计算机的程序最终会转换为一条条的指令,每一条指令的执行都需要借助于程序计数器,程序计数器是用于存放下一条指令所在单元的地址的地方,所以想要知道并且记住程序执行的进度位置,还需要掌握程序计数器的值。
想要更好地管理进程,那么必然还会有一些统计信息,比如某进程运行了多久等记录统计信息,这些重要的信息都保存在进程的PCB中,所以说PCB是进程概念的核心,有了PCB程序才有并发执行的能力,通常,通常情况下,创建进程指的就是创建PCB。
简言之,操作系统对进程的抽象就是对于一组数据结构以及操作这些数据结构的规则逻辑的实现。
感谢: https://www.cnblogs.com/noteless/p/10350112.html