操作系统概述

目录

为什么需要操作系统呢?

程序,进程,任务,作业是什么?

什么是程序?

什么是进程?

操作系统的主要职责

进程管理/进程调度

进程管理引出的一些操作系统的概念

进程间的通信


为什么需要操作系统呢?

举个栗子:

在早期我们只有一台计算机,但是却有很多人需要使用它,这时候我们就需要有人来安排谁先使用谁后使用以及使用时间的长短,而这个人就相当于我们的操作系统。

所以在多用户-多任务的场景下,操作系统(OS)的主要责任就是协调,它是一个专门的软件来协调计算机的工作。

随着时代的发展人们发现作业在被执行的过程可以被拆开,操作系统需要协调不同任务对硬件资源的访问,也就是是操作系统管理着硬件资源,分配给不同的任务去使用。

再举个栗子:

    JobA  ia1  ia2  ia3  ia4  ia5  

    JobB  ib1  ib2  ib3  ib4  ib5

    早期的作业系统:ia1~5 ib1~5

    后来的操作系统:ia1 ia2 ib1 ib2 ia3 ia4 ib3 ib4 ia5 ib5

    这也就意味这硬件(资源)会被多个任务“同时”访问

由此我们可以得出:

从职责视角来看

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

从地位角度来看

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

程序,进程,任务,作业是什么?

什么是程序?

程序通俗的来讲就是一个菜谱,它是一套做数据处理的步骤,程序 = 指令 + 数据

程序是静态的,一般是表现为一个或者一组文件

什么是进程?

进程就是程序的一次执行过程,也就是按照菜谱做菜的过程(动态),所以一个程序,可以进行多次执行(表现为多个进程),甚至可以“同时”执行(多个进程同时存在)

进程是动态的

站在操作系统实现的角度,进程是操作系统进行资源分配的基本单位或者最小单位,换言之,同一个进程中的资源是共享的(如果存在比进程更低级的单位,是共享的);不同进程之间的资源是隔离的

让我们总结一下什么是进程?

    1.动态过程

    2.绑定着一个程序

    3.允许同时存在

    4.操作系统内部进行资源申请的最小个体

操作系统的主要职责

操作系统要管理进程,进程是操作系统内部非常核心的一个概念,我们可以把操作系统的职责做个简单的划分:

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

    2.操作系统进行内存协调的模块——内存管理模块:主持内存空间的分配工作——进程通信的问题

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

    4.网络管理模块

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

进程管理/进程调度

负责CPU的分配,天然的以时间线作为主轴去理解。

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

    一.需要把进程这个抽象的概念,用数据表示处理——面向对象的思想。变成数据,才能被计算机进行处理(才能被操作系统这个软件进行处理)

class Process / PCB Process Control Block{ //对一个进程的对象化(进程在管理过程中重要的数据的抽象)

      1.关联程序的信息(哪个进程下的哪个程序文件等)

      2.关于运行的一些信息

         1.哪个用户启动的

         2.进程工作目录

         3.什么时候开始的,什么时候结束的

       3.分配的资源

          CPU:CPU的占用率:之前过去的一段时间里

          内存:分配出去的内存(内存不一定连续)

          ……

       4.调度1时用到的信息

}

若操作系统需要管理多个进程,通过数据结构组织起来管理(List,Map,Queue)

  二.需要对进程做个区分,哪些现在可以分配CPU了,哪些现在还暂时没有准备好,通过对进程做状态划分,来区分出处于不同情况下的进程——进程状态/状态的转义(随着时间的变化,进程也在变化)

      我们的进程有哪些状态呢?

      新建(进程处于正在创建中),就绪(万物具备,只欠CPU),运行(进程的指令真正在CPU运行着),阻塞(进程由于等待外部条件,所以暂时无法继续),结束(进程的所有指令执行结束,但PCB暂时保留,czxt还需要做一些其他工作的时候)

所有运行状态必须是从就绪状态变过去的,进程的CPU必须经过操作系统分配才能得到 

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

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

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

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

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

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

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

结束—>:进程PCB彻底被操作系统回收了

以上我们看到的是一个进程自己的状态

站在操作系统角度,同一时刻,处于不同的状态的下的进程不止一个。

举个栗子:

处于新建,有n1个

处于就绪,有n2个

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

处于结束,有n3个

处于阻塞,有n4个

就绪队列:装有所有处于就绪态的进程,这里装的都是等待被分配CPU的进程,就绪队列一般就一个

阻塞队列:等待某些外部条件的进程组成的队列,阻塞队列一般每个条件都可以有一个

  三.现在手上有等待分配CPU的所有进程列表——就绪队列,下一个问题,选择哪个进程上CPU?要求:要有效率,要保证公平性,要让更紧急的任务被更紧急的处理,低成本解决…

先来先服务

优先级划分(进程PCB中需要管理一个优先级的属性)

短作业优先

  四.操作系统什么时候会介入进程调度:需要选择一个新的进程,进程CPU分配

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

      2.运行状态的进程—>结束,一个进程结束了

      3.操作系统每隔一段时间会调度一次:进程的时间片被耗尽

      4.进程主动放弃CPU

          (1)就绪 ->阻塞

          (2)运行 ->就绪

     五.操作系统怎么进程切换:通过上下文切换(Context Switch)——保护上一个进程的上下文 + 恢复下一个进程的上下文

      上下文指的是:以PC寄存器所代表的一组寄存器中的值

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

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

进程管理引出的一些操作系统的概念

这些概念都没有特别精确的定义,一定要因地制宜的理解这些概念

    1.并行(parallel)vs 并发(concurrent)

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

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

     2.用户态(user space)vs 内核态(kernel space)

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

          操作系统管理的核心就是权限的划分,内核态的指令权限高(所有的硬件都能访问),用户态的指令权限低(只能访问操作系统规定的资源)

进程间的通信

理论上,进程之间是独立的,但实际中,往往是多个进程之间互相配合,来完成复杂的工作。

例如使用MySQL的场景,通过Workbench进程和mysql服务器进程进行通信,来实现数据的增删查改。所以就有了进程之间交换数据的必要性了

当下的问题:操作系统进行资源分配是以进程为基本单位进行分配的,包括内存。分配给A进程的内存不会分配给B进程。所以,进程A,B之间直接通过内存来进行数据交换的可能性完全不存在了。所以操作系统需要提供一套机制,用于让A,B进程之间进行必要的数据交换——进程间通信。

进程间通信的常见方式:

1. 管道(pipe)—— linux会接触一些
2. 共享内存(shared memory)
3. 文件(message queue)
4. 网络(network)——workbench 和 mysql 通信的方式
5. 信号量(semaphore)
6. 信号(signal)

在研究操作系统实现时,可能面临的一些其他问题:

1.在分配资源时,如何避免出现死锁(dead lock)的问题

哲学家问题描述死锁

某个哲学家主要的时间是在思考哲学问题,思考的间隙时不时的要吃饭,吃饭需要筷子(资源),哲学家会去申请筷子(资源),哲学家申请到两个资源之后(左边的筷子 + 右边的筷子),就可以开始吃饭了。吃完之后需要释放资源

如果这个过程没有被精心设计过,可能被遇到以下极端情况:

A  get  1  success    A  try  5  ,5已经被分配,则A等待

B  get  2  success     同理…

C  get  3  success  

D  get  4  success  

E  get  5  success  

解决方法:银行家算法(打破死锁的几个充分条件)

 

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值