操作系统(OS)及进程(Process)

一、操作系统(Operating System / OS)

多用户—多任务场景     OS的主要职责就是协调——专门的软件来作协调工作

1、当硬件(资源)会被多个任务“同时”访问

     OS协调不同的任务对硬件资源的访问

     OS管理着硬件资源,分配给不同的任务去使用

     注:OS是一个管理(硬件/软件)资源的软件,是一个协调者(管理的含义就是做协调),是一个分配者,分配的主体就是任务,站在任务的角度,就是一切硬件资源都需要找OS申请后才能被授权使用。

            OS原来主要研究的就是“管理学”,如何高效,公平,低耗,稳定的进行资源的分配,协调工作以及在其中遇到的种种问题。

二、进程(Process)

1、什么是程序?

        一套做数据处理的步骤。程序 = 指令 + 数据

        是一套静态的步骤——菜谱

     什么是进程?

        进程是程序的一次执行进程——按照菜谱的一次的做菜的过程(动态)

        进程是程序在“运行阶段”的视角主体

2、站在OS实现的角度看什么是进程

      进程是OS进行资源分配的基本单位

      进程是OS进行资源分配的最小实体

      简单的说,同一过程中的资源是共享的,如果存在比进程更低级的单位,是共享的,不同进程之间的资源是隔离的。例:A进程只能访问A进程自己的资源(这里主要讨论内存),A进程无法访问B进程的资源(内存),更无法访问被OS直接管理的资源。

    注:

  (1)OS的职责:协调者/管理者

  (2)资源:被OS管理的资源(硬件资源、软件资源)

  (3)分配的实体/单位:分配的时候,只考虑这一层次

  (4)基本/最小:允许有更高层次的单位,但最低到进程

3、理解程序

(1)动态过程

(2)绑定着一个程序

(3)允许同时存在

(4)OS内部进行资源申请的最小个体

4、OS的职责划分

    OS要管理进程,把OS的职责做个简单的划分:

 (1)OS进行CPU协调的模块——进程管理模块:主要负责进程的调度工作,主持不同进程在CPU运行的时间划分。实践中,OS需要负责把进程A从CPU上拿下来,把进程B放到CPU上via修改PC寄存器的值。

 (2)OS进行内存协调的模块——内存管理模块:主持内存空间的分配工作,进程通信的问题

 (3)OS进行硬盘上数据的协调的模块(硬盘是主要的二级存储,是比较重要的一个 IO 设备) ——文件管理模块:OS一般不直接管理硬盘上的数据,一般是委托文件系统(Filesystem)进行抽象管理,把硬盘上的数据抽象为文件(包含文件夹/目录)的概念。

 (4)网络管理模块

 (5)其他硬件——以文件驱动的形式进行管理——驱动管理

5、要做好进程调度,我们面临哪些问题?

(1)需要把进程(程序执行的过程)这个抽象的概念,用数据表示处理——面向对象的思想,变成数据,才能被计算机进行处理(才能被OS这个软件进行处理)

6、进程状态转移图

新建(进程处于正在创建中)    就绪(万事俱备,只欠CPU)

运行(进程的指令真正在CPU运行着) 阻塞(进程由于等待外部条件,所以暂时无法继续)

结束(进程的所有指令执行结束,但PCB暂时保留,OS还需要做一下其他工作的时候)

   注:所有运行状态必须是从就绪状态过去的

         进程的CPU必须经过OS系统分配才能得到

  —> 新建:随着程序的启动运行

  新建 —> 就绪:进程的初始化工作完全完成(这个工作是由OS的指令完成的)

  就绪 —> 运行:进程被OS选中,并分配了CPU之后

  运行 —> 结束:进程的最后一条指令执行结束(粗略的理解就是main方法执行结束)

  运行 —> 就绪:1、被高优先级的进程抢占了 2、时间片耗尽 3、进程可以执行一些OS提供的系统调用,主动放弃

  运行 —> 阻塞:等待一些外部条件;等待IO设备;进程休眠一段时间......

  阻塞 —> 就绪:外部条件满足;IO数据来了;休眠时间到了......

  结束 —>:进程PCB彻底被OS回收了

 站在OS角度,同一时刻,处于不同的状态下进程不止一个

  处于新建,有n1个

  处于就绪,有n2个(就绪队列一般就一个)

  处于运行,只有1个(单CPU单核的情况下)

  处于结束,有n3个

  处于阻塞,有n4个(阻塞队列一般每个条件都可以有一个)

 7、如何选择就绪队列中的哪个进程上CPU

       要有消息、要保证公平性,要让更紧急的任务被更紧急的处理,低成本解决......

8、OS什么时候会介入进程调度:需要选择一个新的进程,进行CPU分配

(1)一个新的进程刚处于就绪状态时,当该进程的优先级较高时——具备这种能力的OS被成为抢占式(实时)

(2)运作状态的进程 —> 结束,一个进程结束了

(3)OS每隔一段时间,会调度一次:进程的时间片耗尽

(4)进程主动放弃CPU:运行 —> 阻塞、运行 —> 就绪

9、OS具体怎么进程切换:通过上下文切换——保护上一个进程的上下文(Context) + 恢复下一个进程的上下文   Context Switch CS

     保护上下文:把寄存器中的值保存到内存的某个位置

     恢复上下文:把内存中之前保护的值,写入寄存器

10、并行(parallel) vs   并发(concurrent)

       并行:进程真的同时在执行(微观角度的同一时刻,是有多个指令在执行的,所以只会在多CPU多核场景下)

      并发:进程假的同时在执行(微观上,表现为一次只执行一个进程,但宏观上,多个进程在“同时”进行)

11、用户态(user space) vs  内核态(kernel space)

      CPU正在执行的是OS的指令时,就进入到内核态,反之,正在执行的是普通进程的指令时,就在用户态

      管理的核心就是权限的划分

      内核态的指令权限高(所有的硬件都能访问),可以访问所有内存;用户态的指令权限低(只能访问OS规定的资源),只能访问进程自己的内存。CPU本身就有权限开关,所以可以做到

 注:用户态的性能较好,内核态的性能较差

12、执行流(execution)

      拥有独立pc的一套指令,不同的执行流从现象上看起来是完全独立的

13、线性地址 vs 物理地址

      物理地址:真实的内存中的地址

      线性地址:物理地址被OS进行转换后的一个地址

      OS分配出来的空间只是线性地址空间,实际的物理内存,可以延迟到,要访问这段内存的时候再分配

14、进程间通信(Inter-Process Communication/IPC)

(1)进程A  进程B

        理论上,进程之间是独立的,但实际上,往往是多个进程之间互相配合,来完成复杂的工作,所以就有了进程之间交换数据的必要性

        所以OS需要提供一套机制,用于让A、B进程之间进行必要的数据交换——进程间通信

(2)进程间通信的常见方式

    ①管道(pipe)

    ②消息队列(message queue)

    ③信号量(semaphore)

    ④信号(signal)

    ⑤共享内存(shared memory)

    ⑥网络(network)

15、再研究OS实现的时候,可能面临的一些问题:

      在分配内存的时候,如何避免出现死锁(dead lock)的问题

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薰衣草2333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值