在操做系统的基础上理解进程(为学习多线程打下基础)

一,操做系统

1.概念

任何计算机系统都包含一个基本的程序集合,称为操做系统(OS)。笼统的理解,操做系统包括:java

  • 内核(进程管理,内存管理,文件管理,驱动管理)web

  • 其余程序(例如函数库,shell程序等等)shell

2.OS定位

  • 在整个计算机软硬件架构中,操做系统的定位是:一款纯正的“搞管理”的软件
  • 如何理解 “管理”
    在这里插入图片描述
    上面的样例,能看到以下结论:
  1. 管理者的任务按照种类分两种:硬型基础设备管理和软性业务管理
  2. 按照目标对象分两种:一种对内的管理,一种对外业务进行管理
    而操做系统,也是一套系统,理解思路于此相似,咱们能够类比来看

在这里插入图片描述
上面有关OS的样例,咱们也能看到以下结论:架构

  • 管理者的任务种类分两种:硬件管理软件管理
  • 按照目标对象分两种:一种对内的管理,一种对外业务进行管理

3.设计OS的目的

那么,设计操做系统的目的是什么呢?类比银行系统,咱们就能理解并发

  • 与硬件交互,管理全部的软硬件资源(对内且对下)
  • 为用户程序(应用程序)提供一个良好的执行环境(对外且对上)

那咱们的所学的java在哪里呢?
在这里插入图片描述svg

二,进程

1.进程的初步认识

对于操做系统来讲,一个任务就是一个进程(Process)。函数

  • 课本概念:程序的一个执行实例,正在执行的程序等。
  • 内核观点:担当分配系统资源(CPU时间,内存)的实体。

如何理解进程?spa

如:张三去银行转帐,就要使用银行的资源(接待,转帐人员,银行电脑,必要时保安也能够跟着:) )为张三完成转 帐,而在银行内部,这一整套过程的执行,咱们统称为办理业务。操作系统

类比,一个程序刚开始就是一个在硬盘上的程序,加载运行时,是为了完成某些任务(如迅雷完成下载任务),而要 完成任务,就须要操做系统为该任务提供足够作的资源(如内存和CPU资源),而这一整套任务的执行,咱们能够叫 作进程设计

因此:进程是担当分配系统资源(CPU时间,内存)的实体,是具备动态特性的,如张三在办理转帐业务期间,这样 任务一直都是存在且状态变动的。
而张三去银行转帐也不是立马就能进行,须要先抽号,在大厅等待,由于当时可能会有不少人在大厅等待,因此就有 了进程等待队列。而张三抽到的号,能够称之为进程ID

下面,咱们尝试查看系统进程
编写一个java进程:

public class Test{
  public static void main(String[] args) throws Throwable{
     Thread.sleep(999999999);
  }
}

在cmd中编译并运行:

javac Test
java java Test

运行以后会启动java程序(进程),能够在任务管理器中查看到该进程:
在这里插入图片描述
这里的PID表明这个进程的代号,而咱们传说中的java虚拟机,本质上只是一个系统中的进程而已。具体能够在看看 以前的样例图

2.时间片

现代操做系统好比Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操做系统。所谓的多任务,就是操 做系统能够同时运行多个任务。

操做系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时 间后强制暂停去执行下一个任务,每一个任务轮流执行。
任务执行的一小段时间叫作时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个 任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。

这样每一个任务都能获得执行,因为CPU的执行效率很是高,时间片很是短,在各个任务之间快速地切换,给人的感受 就是多个任务在“同时进行”,这也就是咱们所说的并发。 如何理解?

假设张三准备办理转帐业务,但当他把全部资料给工做人员以后,工做人员告诉他,你如今办理不了,由于他如今需 要填写一张申请表,此时,工做人员将他的资料保存起来,让他去一边填写资料,填写完毕以后,再回来继续办理, 同时,张三去填表了,而工做人员继续给别人提供服务。这个过程叫作进程切换。
张三表填完了,继续回到柜台,工做人员拿出他以前的资料,继续给张三办理业务,这叫作进程的上下文保护与恢复 (想一想,为何要这麽作?由于进程的运行是在CPU上的,CPU有寄存器,保存的是进程运行的各类临时数据,为了 达到切换和便于恢复的目的,就有了将CPU寄存器保存和恢复的作法,归根结底是为了接着上次的位置继续运行)
后来,银行出台了规定,每一个人在柜台办理任务的时间不能超过10分钟(以防止其余人长时间等待),因此为了更好 的服务各我的员,银行工做人员将上面的切换与恢复的思路应用到各类业务中,因此长期来看,即使只有一个工做人 员,也能同时服务多个客户,这种机制叫作基于时间片的进程轮转管理机制,而上面的10分钟,就是银行轮转的时间 片,只要时间到了,客户酒的下去等待,让其余用户来办理业务
而上面的全部轮转与管理工做,在操做系统中,统一由一个叫作调度器的内核模块完成
而对每一个人来讲,在一段时间以内,可能全部人的业务都得以推动(即使没完成),而不至于你们长时间等待,这种 机制就叫作并发
若是银行财大气粗,工做人员比客户都多,那就好办了,一人一个工做人员,全部的任务真正同时处理,这种机制叫 作并行。

3.并发与执行

如今,多核CPU已经很是普及了,因为任务数量远远多于CPU的核心数量,因此,操做系统也会自动把不少任务轮流 调度到每一个核心上执行。对于

  • 并发:多个进程在一个CPU下采用时间片轮转的方式,在一段时间以内,让多个进程都得以推动,称之为并 发

  • 并行:多个进程在多个CPU下分别,同时进行运行,这称之为并行。

计算机操做系统中把并行性和并发性明显区分开,主要是从微观的角度来讲的,具体是指进程的并行性(多处理机的 状况下,多个进程同时运行)和并发性(单处理机的状况下,多个进程在同一时间间隔运行的)。
并发与并行相似于工厂中的流水线,要扩大产量,1是考虑建造多个工厂,这就是并行,2是考虑每一个工厂中新增流水 线,这就相似并发

4.内核态与用户态

通常的操做系统(如Windows、Linux)对执行权限进行分级:用户态和内核态。

  • 如上图所示,操做系统内核做为直接控制硬件设备的底层软件,权限最高,称为内核态,或核心态。
  • 用户程序的权限最低,称为用户态。

如何理解?
就比如上面的例子,张三去填表,本身写姓名,电话,邮箱等等,作着本身的事情,这叫作用户态
而张三经过窗口的工做人员,把本身的需求给工做人员,自此,张三在等,银行工做人员在忙,对张三来说,就叫作 陷入内核。那么内核态是什么意思?就是工做人员在帮你办理业务时的状态

5.进程中的上下文

上下文简单说来就是一个环境,进程在时间片轮转切换时,因为每一个进程运行环境不一样,就涉及到转换先后的上下文 环境的切换

  • 就是一个进程在执行的时候,CPU的全部寄存器中的值、进程的状态以及堆栈上的内容。

  • 切换时须要保存当前进程的全部状态,即保存当前进程的进程上下文,以便再次执行该进程时,可以恢复切换 时的状态,继续执行。

6.进程状态

在这里插入图片描述 就绪:进程处于可运行的状态,只是CPU时间片尚未轮转到该进程,则该进程处于就绪状态。 运行:进程处于可运行的状态,且CPU时间片轮转到该进程,该进程正在执行代码,则该进程处于运行状态。 阻塞:进程不具有运行条件,正在等待某个事件的完成。 能够对比张三去银行办理业务的状态