目录
- 一、进程的概念
- 二、CPU分时机制
- 三、并发与并行
- 1.并发
- 2.并行
- 四、pcb的概念
一、进程的概念
什么是进程?
进程就是进行中的程序,即运行中的应用程序。比如:电脑上打开的LOL、QQ…… 这些都是一个个的进程。
什么是应用程序?
应用程序就是程序员写的代码,在应用程序还没有运行的时候,这些代码就是一堆存储在硬盘里的机器指令。
应用程序是怎么运行的?
操作系统将程序的代码(也就是机器指令)从硬盘加载到内存中,然后CPU从代码的指定位置开始进行处理,这样一个程序就开始运行了,进程也就产生了。
二、CPU分时机制
要了解程序的并发与并行,首先要了解CPU的分时机制。
什么是CPU的分时机制?
单核CPU只有一个核心,一个核心意味着在一段时间内只有一个程序可以运行,也就是说,QQ和LOL不能同时运行。那如果我们想一边玩LOL,一边聊QQ,岂不是实现不了?但我们现在并没有遇到这样的情况,我们可以一边打游戏,一边聊QQ,同时还可以听歌。这是因为CPU的分时机制,正因为有了分时机制,我们才可以实现多个程序一起运行。
CPU的分时机制:
每个程序运行一小段时间(即一个时间片),然后换下一个程序运行,以此类推。但是,CPU的运行速度很快,所以我们在使用的时候感觉不到程序是在切换运行,而是感觉多个程序同时在运行。这是因为有分时机制,才让我们可以一起运行多个程序。
三、并发与并行
并发与并行都是用来形容多个程序一起运行的,但是它们的差别很大。
1.并发
并发:多个程序在同一个时间段一起运行。
一个核心在同一时间点只能处理一个程序,但是我们又不可能等程序A全部执行完才能执行程序B。如果我们现在使用电脑时,运行完QQ后,才可以运行LOL,想必大家会很难受的。因此程序是轮流运行的,在同一个时间段,可以让QQ和LOL轮流运行,一个程序运行一小会,这就是分时机制。因为CPU的处理速度非常快,所以我们其实感觉不到程序在轮流运行,给我们的感觉就像是同时运行。
如图,一个箭头代表只有一个核心,在A时间到B时间这个时间段,由于CPU的分时机制,三道程序轮流运行,这就是并发。
2.并行
并行:多个程序在同一个时间点一起处理。
一个核心在一个时间点只能处理一个程序,如果有多个核心,那么就可以每个核心都运行一个程序,这样就实现了多个程序在同一时间点一起处理。
如图,有三个核心,在A时间点,三个核心同时运行三道程序,这就是并行。
四、pcb的概念
pcb的产生其实就是因为CPU的分时机制,接下来先看看关于CPU分时机制的一点疑惑。
(1)对CPU分时机制的疑问:
如果此时有两个进程在运行(LOL和QQ),LOL运行完一个时间片后,接下来该QQ来运行下一个时间片,QQ运行完后又轮到LOL。问题来了,当QQ第二次运行的时候,怎么知道它上次运行到了哪里?怎么知道接下来从哪里开始运行?这就是对于CPU分时机制的疑问。
(2)对CPU分时机制疑问的解决:
为了解决上述问题,操作系统就要对运行中的程序(即进程)进行一些描述:描述LOL在上个时间片用完的时候运行到了哪里?上个时间片用完的时候LOL的运算数据保存在哪里?下一个时间片应该从哪里开始运行?LOL程序存在于内存中的哪个位置?等等诸多信息。因为如果不知道这些数据,那么等到下一次再运行LOL的时候,怎么知道该从哪里继续运行呢。
(3)什么是pcb?
pcb(进程控制块)的作用就是保存程序运行时的信息(也就是进程信息),在Linux中pcb就是task_struct结构体,结构体里面就记录了这个进程的各个信息,里面记录的描述信息有:内存指针,上下文数据,程序计数器,进程状态,IO信息,记账信息等。通过这些信息使得下一次轮到这个进程运行的时候,程序可以正常进行。