操作系统和进程

1.系统

硬件——冯诺依曼体系
硬件和软件的结合位置——操作系统

1.1 冯诺依曼体系结构

我们常见的计算机(笔记本)、我们不常见的计算机(服务器)大部分都遵守冯诺依曼体系。
在这里插入图片描述

  • 输入单元:包括键盘,鼠标,扫描仪,写板等
  • 中央处理器(CPU):含有运算器和控制器等
  • 输出单元:显示器,打印机等

1.1.1 设想(类比)

1、健忘计算机科学家做菜过程

健忘的计算机科学家做菜
菜谱程序
原料进程在运行过程中需要的资源(文件、网络)
做菜的过程进程
计算机科学家CPU

2、CPU比作公司,则
(1)控制器:公司的老板、领导
(2)运算器:员工(干活的人)

3、CPU执行的指令类型
(1)逻辑处理:消耗时间短,比如程序中的逻辑运算符
(2)计算型:比如程序中n++
(3)数据操作:数据拷贝、IO
        在这里插入图片描述
补充:进程通常可以分为(1)计算型任务量 (2)IO型任务量

4、计算机效率
        在这里插入图片描述

1.1.2 强调

关于冯诺依曼,必须强调几点:

  • 这里的存储器指的是内存
  • 某些设备在不同的场景中,(输入、输出由于视角不同,表现可能不同)表现为输入设备,也可能表现为输出设备。比如:硬盘、头盔
    在这里插入图片描述
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)。
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
  • 一句话,所有设备都只能直接和内存打交道

1.2 操作系统(Operator System)

1.2.1 概念

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

  • 内核(进程管理,内存管理,文件管理,驱动管理)
  • 其他程序(例如函数库,shell程序等等)
    解释系统函数库:系统级别的接口(系统提供的一些用户程序可以调用的功能)

1.2.2 OS定位

在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件 (先描述 再组织)

  • 如何理解 "管理"
    在这里插入图片描述
    1.管理者的任务按照种类分两种:硬型基础设备管理软性业务管理
    2.按照目标对象分两种:一种对内的管理,一种对外业务进行管理

  • "管理" 的范畴
    (1)进程管理:通过一个 PCB 的结构体来保存进程,包括 PID(进程启动后系统分配)、进程名称、状态等
    (2)内存管理
    (3)驱动管理
             在这里插入图片描述
    (4)统计信息:系统可以统计系统资源信息,如内存、CPU、网络等
    (5)文件管理

  • OS
    在这里插入图片描述

    上面有关OS的样例,我们也能看到如下结论:
    1.管理者的任务种类分两种:硬件管理软件管理
    2.按照目标对象分两种:一种对内的管理,一种对外业务进行管理

1.2.3 设计OS的目的

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

在这里插入图片描述

eg:用户程序操作硬件过程
用户程序 —> 调用系统接口 —> 系统接口内部代码的执行 —> 调用某个驱动程序来让硬件干活 —>硬件做事

2. 进程(Process)

2.1 进程的初步认识

对于操作系统来说,一个任务就是一个进程(Process)。

  • 课本概念:程序的一个执行实例,正在执行的程序等。
  • 内核观点:担当分配系统资源(CPU时间,内存)的实体。
  • 如何理解进程?
  1. 如:张三去银行转账,就要使用银行的资源(接待,转账人员,银行电脑,必要时保安也可以跟着)为张三完成转账,而在银行内部,这一整套过程的执行,我们统称为办理业务
  2. 类比:一个程序刚开始就是一个在硬盘上的程序,加载运行时,是为了完成某些任务(如迅雷完成下载任务),而要完成任务,就需要操作系统为该任务提供足够做的资源(如内存和CPU资源),而这一整套任务的执行,我们可以叫做进程
  3. 所以:进程是担当分配系统资源(CPU时间,内存)的实体,是具有动态特性的,如张三在办理转账业务期间,这样任务一直都是存在且状态变更的。
  4. 而张三去银行转账也不是立马就能进行,需要先抽号,在大厅等待,因为当时可能会有很多人在大厅等待,所以就有了进程等待队列。而张三抽到的号,可以称之为进程ID

2.1.1 进程的属性

  1. 基本信息:PID(Process ID)、名称、关联的程序文件
  2. 运行信息:PC(程序计数器)、数据地址、代码地址、资源信息(打开的文件等)
  3. 记账信息:1.什么时候开始运行 2.实际运行时间
    任务管理器
  //Process Control Block
  class PCB{
      int pid;
      State state; //状态
      Priority priority; //优先级
      String addressDataZone; //数据区
      String addressCodeZone; //代码区
      long startAt; //进程开始时间
  }

2.1.2 程序和进程区别?

程序:静态的可执行的命令,某些文件不属于程序。 (静态的)
进程:程序运行后,由操作系统管理 。(动态的、可运行的)

eg:xx.md 用 Typora 程序打开,相当于 Typora 程序运行变成 Typora 进程,进程内来处理文件(作为一个参数传入进程)。Typora 是把文件内容读取并渲染出来,并展示给我们(用户)看。

java文件、class文件属于程序吗?
答:不属于,java文件是普通文件,class文件是java的字节码文件。
java代码编译:javac xxx.java —— javac由程序变为进程来执行编译操作,xxx.java作为参数传入进程中。
java代码运行:java xxx —— java作为程序/进程,xxx作为参数传入,进程自动查找传入参数的 class 文件。

程序、内存和进程的关系?
    在这里插入图片描述

eg:java代码在运行过程中对源码修改并保存,但修改后并不影响已经运行的程序的输出,为什么?
答:在不关闭进程的情况下,修改代码,代码并不生效。因为代码执行时,进程已经加载资源到内存中了,故修改并不影响输出,即修改代码未生效。

2.1.3 程序的启动过程?(如何从程序变为进程)

Windows:双击程序(exe)进行启动

OS:

  1. 找到文件,检查文件是否合法(是否是exe文件)
  2. 创建一个PCB对象——描述
    PCB pcb = new PCB();
  3. 为进程分配一个唯一的pid
  4. 把程序文件按照指定格式加载到内存中
  5. 把pcb对象和之前加载的内容进行关联
    pcb.pc = pc; pcb.addressDataZone = addressDataZone;
  6. 填充基本的记账信息
    pcb.startAt = System.currentTime();
  7. 把pcb发到几个相关的数据结构中
    processQueue.push(pcb);
    processList.add(pcb);
    map.put(pcb.pid,pcb);
  class 模拟OS{
      private Queue<PCB> processQueue; 
      private LinkedList<PCB> processList;
      private Map<Integer,PCB> map;
  }

进程的切换/CPU调度

常见的发生进程切换的场景

  • 1.有一个更高优先级的进程进来——抢占式OS
  • 2.任务完成(进程结束)
  • 3.每个进程都事先分配好时间片,时间到达后,切换
  • 4.当前进程正在等待一个外部实践——阻塞

2.2 时间片

  • 操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。
  • 任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。
  • 这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发
    在这里插入图片描述

2.3 并发与并行

  • 并发:多个进程在一个CPU下采用时间片轮转的方式,在一段时间之内,让多个进程都得以推进。即一个CPU,在某一个时间段,由操作系统调度,在不同的进程间切换
  • 并行:多个进程在多个CPU下分别,同时进行运行。即多个CPU,在同一时间点同时执行多个任务的代码指令。

并发是假同时 并行是真同时

  1. 从微观角度上,并发性和并行性的区别

    进程的并发性(单处理机的情况下,多个进程在同一时间间隔运行的)和 并行性(多处理机的情况下,多个进程同时运行)。

  2. 并发与并行类似于工厂中的流水线,要扩大产量

    1. 考虑建造多个工厂,这就是并行
    2. 考虑每个工厂中新增流水线,这就类似并发

2.4 进程中的上下文

上下文简单说来就是一个环境,进程在时间片轮转切换时,由于每个进程运行环境不同,就涉及到转换前后的上下文环境的切换:

  • 就是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈上的内容。
  • 切换时需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。

时间片轮转调度时:
假设从进程1切换到进程2,上文就是进程1的环境信息,下文就是进程2的环境信息,切换时保存上文信息
假设从进程3切换回进程1,系统调度回进程1要进行恢复上下文信息,使用之前保存的进程1环境信息。

2.5 内核态与用户态

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

  • 操作系统内核作为直接控制硬件设备的底层软件,权限最高,称为内核态,或核心态
  • 用户程序的权限最低,称为用户态
            在这里插入图片描述

用户态到内核态的切换
                在这里插入图片描述

2.6 进程的状态

在这里插入图片描述
就绪:进程处于可运行的状态,只是CPU时间片还没有轮转到该进程,则该进程处于就绪状态。
运行:进程处于可运行的状态,且CPU时间片轮转到该进程,该进程正在执行代码,则该进程处于运行状态。
阻塞:进程不具备运行条件,正在等待某个事件的完成。
IO:包括本地文件IO 和 网络IO,分别对应本地文件数据的读写 和 网络数据的读写。

注意:
(1)就绪态和运行态由系统CPU执行程序指令来决定,用户程序无法指定就绪态还是运行态
(2)用户程序:为用户态,没有权限执行IO,只能调用系统接口完成。(eg:Scanner内部属性就有IO类)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值