什么是进程/任务(Process/Task)
每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运 行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的,进程可以 说是计算机科学中最重要和最成功的概念之一。 进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程; 同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
CPU 分配 —— 进程调度(Process Scheduling)
为了便于讨论和理解,我们大部分的场景下假设是单CPU单核的计算机。
操作系统对CPU资源的分配,采用的是时间模式 —— 不同的进程在不同的时间段去使用 CPU 资源。
内存分配 —— 内存管理(Memory Manage)
操作系统对内存资源的分配,采用的是空间模式 —— 不同进程使用内存中的不同区域,互相之间不会干 扰。
进程间通信(Inter Process Communication)
如上所述,进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到对方存 在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备”隔离性 (Isolation)“。
但现代的应用,要完成一个复杂的业务需求,往往无法通过一个进程独立完成,总是需要进程和进程进 行配合地达到应用的目的,如此,进程之间就需要有进行“信息交换“的需求。进程间通信的需求就应运 而生。
目前,主流操作系统提供的进程通信机制有如下:
- 管道
- 共享内存
- 文件
- 网络
- 信号量
- 信号
其中,网络是一种相对特殊的 IPC 机制,它除了支持同主机两个进程间通信,还支持同一网络内部非同 一主机上的进程间进行通信。
调度的概念
首先,我们应该了解到:
- 进程是资源分配的基本单位
- 线程是CPU调度的基本单位
一个单核CPU在某一时刻只能允许一个线程执行,但是现在的计算机总是有一大堆进/线程等待执行。这就需要某种规则来决定处理这些进/线程的顺序,这就是调度要研究的问题。
进程的状态
运行态:当前正在占有CPU的进/线程;
就绪态:具备运行条件,等待系统分配CPU的进/线程;
阻塞态:不具备运行条件,正在等待某外部事件发生的进/线程。
所谓进程调度,就是指在处于就绪态的一堆进/线程里,按照一定的调度算法,选出一个进/线程并给它分配CPU时间让它运行,从而实现多进程/多线程的并发执行。
进程切换的基本流程:
- 首先用户态必须切换到内核态;
- 保存当前进程的状态,包括在其PCB中保存CPU各寄存器值,以便日后重新执行;
- 调度算法选定一个新进程;
- 新进程的内存地址空间重新装入MMU(内存管理单元);
- 新进程开始执行。
调度算法
时间片轮转法
轮转调度(RR):每个进程被分配一个时间段,称为时间片,即允许该进程在该时间段内运行。如果在时间片结束时该进程还在运行,则剥夺其CPU并分配给另一个进程;如果该进程在时间片结束前阻塞或结束,则立即进行进程切换。
轮转调度算法对每个进程都一视同仁,就好比大家都排好队,一个一个来,每个人都运行一会儿再接着重新排队等待运行。
例如谈女朋友,张三同时谈了七个女朋友,每天陪不同的女朋友
周一 | 周二 | 周三 | 周四 | 周五 | 周六 | 周天 | |
女朋友1 | 吃饭 | wating | wating | wating | wating | wating | wating |
女朋友2 | wating | 看电影 | wating | wating | wating | wating | wating |
女朋友3 | wating | wating | 逛街 | wating | wating | wating | wating |
女朋友4 | wating | wating | wating | 吃饭 | wating | wating | wating |
女朋友5 | wating | wating | wating | wating | 看电影 | wating | wating |
女朋友6 | wating | wating | wating | wating | wating | 散步 | wating |
女朋友7 | wating | wating | wating | wating | wating | wating | 逛街 |
张三给女朋友排了张表,每天作为一个时间片,每天见一个女朋友,其他时间他的女朋友就在等待着与张三见面处于等待状态,见面得那天就是就绪态。
时间片轮转调度就如同这般按部就班进行调度,排好队一个一个来,这个进程结束,在轮到下个进程。