细读操作系统——0:概论

97 阅读9分钟
  • 什么是操作系统:

    操作系统是管理计算机硬件的软件,位于计算机用户与计算机硬件之间。操作系统的目的是提供环境,以便用户能够便捷而高效地执行程序。

  • 操作系统的功能

    1. 在用户视角:操作系统的作用对于用户不同的使用界面有所不同。

      • 对于坐在PC机前的用户,操作系统有显示器,键盘,鼠标和主机;这类系统让单个用户单独使用资源,目的是优化用户的工作或游戏。对于这种情况,操作系统的首要目的是用户使用方便,次要才是性能,再次要才是资源利用
      • 对于坐在与大型机相连的终端前,其他用户通过其他终端会访问到同一个计算机,并且共享资源以及可以交换信息。这种操作系统的目的是优化资源的利用率:确保所有的CPU时间,内存,IO都可以有效的被利用,并且确保没有用户使用超过额外的资源。
      • 对于某些没有用户界面的设备,如家电、汽车等嵌入式计算机,操作系统无需用户干预即可执行。
    2. 在系统视角:操作系统与硬件紧密相连,因此可将操作系统看作资源分配器。资源指很多,如CPU时间,内存空间,文件存储空间,IO设备等等。操作系统管理这些资源,当有冲突时确保公平、流畅的运行。

  • 计算机系统的运行

    当计算机电源启动,BIOS开始运行(Basic IO system,存储在主板上的固件,负责初始化硬件和引导操作系统),BIOS检查电脑硬件是否正常,之后对一些设置参数初始化;最后BIOS分析得到用户设置的能开机的磁盘,到该磁盘中读取MBR(主引导记录);之后BIOS结束,MBR启动

    MBR主要作用是:载入内核文件,例如硬盘中可能有两个MBR,一个指向win,一个指向Linux,不同的MBR引导不同的OS。

    一旦内核加载到内存并执行,就开始为系统提供服务。启动时还会加载其他系统进程或者系统后台程序,其生命周期与内核一样。

    事件发生通常通过硬件或软件的终端来通知;硬件随时通过系统总线向CPU发起中断;软件也可以通过系统调用发出中断。当CPU被中断时,它停止正在做的事,立即转到固定位置再继续执行,当执行完毕后,重新执行被中断的计算。

    中断机制的作用是将控制转移到合适的中断服务程序。中断为了快速,只定义了少量的中断,并且通过中断处理程序的指针表快速找到对应的中断程序;通常指针表位于低地址内存,包含鼠标中断、键盘中断、缺页中断等等。

  • 存储结构

    内存就是字节数组,并且每个字节都有地址。对内存的交互就是针对特定的内存地址,调用一系列load & store指令来实现。load将内存字节或字保存在寄存器中,而store将寄存器的内容保存到内存。

    一个典型的指令执行周期是:首先从内存中获取指令,并存储到指令寄存器中,接着该指令可能被解码,也可能加载数据到内部寄存器,指令执行完毕将结果存到内存。

    理想情况下,程序和数据都应该永久驻留在内存中,但是由于内存空间不足,以及内存易失,大多数计算机系统都提供外存来扩充内存。

    最为常用的外存设备是磁盘或硬盘。除了以上三个存储结构(寄存器,内存,磁盘),还可能有高速缓存,CD-ROM,磁带等存储系统。各种存储系统的差异是速度,价格,大小,易失性。

  • IO结构

    据说操作系统的大部分代码专门用于IO管理,这是由于IO对系统的可靠性和性能都至关重要。

    每个通用计算机都有一个CPU和多个设备控制器组成。他们通过总线连在一起。每个设备控制器管理某一特定类型的设备。同时每个设备控制器维护一定量的本地缓存和一组特定用途的寄存器。设备控制器的作用就是在外围设备和本地缓存之间进行数据传递。通常OS会为每个设备控制器提供一个驱动程序,驱动程序对下负责操作设备控制器,对上提供统一访问接口。

    传统做法是设备控制器将内容写到本地缓冲区,写完后触发中断,由CPU通知设备驱动程序再去复制缓冲区的内容。这对少量数据的IO是OK的,但是对于大量数据的IO,会带来大量开销。为了解决这个问题,可以采用DMA(Direct Memory Access)。DMA可以在没有CPU参与的情况下,将数据从本地缓存转移到内存中,转移完后才产生一个表示转移结束的中断。

  • 计算机系统体系结构

    • 单处理器系统:

      一个CPU作为主处理器,但会带有其他专用的处理器,如磁盘控制器,图形控制器等。所有这些专用的处理器执行有限的指令集,而并不执行用户进程。例如:磁盘控制器的微处理器,接收来自CPU的请求,执行自身的磁盘调度算法,之后将结果供CPU调用,但过程中无需CPU参与磁盘调度算法执行。

    • 多处理器系统:

      由两个或多个紧密通信的CPU组成。优点有:增加吞吐量、规模经济(单个多比多个但更便宜,因为可以共享外设、大容量存储和电源供给)、增加可靠性

      多处理器系统有两种类型:

      • 非对称处理:每个处理器有各自特定的任务,一个主处理器(Boss processor),其他处理器向主处理器要任务;处理器间是主从关系
      • 对称处理(SMP-Symmetric MultiProcessing):每个处理器都参与完成操作系统的所有任务,处理器间为对等关系。
    • 集群系统:

      这种系统将多个CPU组合在一起,不同于多处理器,它由多个独立的系统组成。集群通常用于提供高可用服务。集群也可以分成两类,对称集群中,每个设备都运行应用程序,非对称集群中,一台机器在运行应用程序,另一台处于热备份模式。

  • 操作系统的结构

    操作系统最重要的一点是具有多道程序能力。由于单个程序无法让CPU和IO始终忙碌,于是单台机器通常有多个运行程序。多道程序设计通过安排作业,使得CPU总有一个在执行任务,从而提高利用率。

    操作系统在内存中保存有多个任务,但由于主存太小不能容纳所有作业,因此作业首先保存在磁盘的作业池,作业池包含磁盘上的,等待分配内存的所有进程。内存的作业集是作业池的一个子集,从内存到作业集,OS会选一个作业。

    分时系统是多道程序设计的延伸,同时具备了可交互的功能。

  • 操作系统的执行

    操作系统是中断驱动的,如果没有进程需要执行,没有IO设备需要服务,而且没有用户需要响应,那么操作系统就会静静地等待某个事件的发生。

    由于操作系统和用户共享计算机的硬件和软件,需要确保用户程序的出错仅仅影响自己。但是由于共享,一个程序的bug可能会对多个进程造成不利影响;例如,如果一个进程陷入死循环,那么这个死循环可能阻止许多其他进程的正确运行;一个错误程序可能修改另一个程序数据甚至操作系统本身。

    预防措施1:双重模式:区分操作系统代码和用户代码的执行;计算机硬件通过一个模式位标识当前模式。这种防护模式其实是:将会危害操作系统的指令作为特权指令,并且硬件只有在内核模式下才允许执行特权指令。很明显切换用户模式的指令为特权指令,其他例如IO控制,定时器管理和中断管理等也是。

    模式概念可以扩展,从而超过两个。支持虚拟化技术的CPU往往有一种单独的模式,用于表示虚拟机管理器正在控制系统。这种模式的特权多于用户模式,但少于内核模式;可以改变CPU状态,以便创建和管理虚拟机。

    系统调用为用户程序提供手段,以便请求操作系统完成某些特权指令。

  • 定时器

    操作系统应该维持控制CPU,防止用户程序陷入死循环,或者不将控制返回给操作系统。为了实现这个目标,可以使用定时器。定时器可以设置为:在知道的周期后,中断计算机。定时器一般由一个时钟+计时器实现,始终每次滴答,计时器减一。

    在将控制交到用户前,操作系统需要确保定时器设置好以便产生中断。

  • 存储管理的高速缓存

    工作原理:信息通常保存在一个存储系统中,使用时会被临时复制到更快的存储系统中。

    有一招 可编程的内部寄存器 可以为内存提供高速缓存。程序员通过寄存器分配与寄存器替换的算法,觉得哪些信息在此寄存器中,哪些在内存中。 还有的高速缓存完全通过硬件实现。例如 大多数系统都有一个指令的高速缓存,避免CPU为了得到下一个指令花费许多周期从内存中获取。