• 引论(一)


      现代计算机系统是一个复杂的系统,包括一个或多个处理器,主存,磁盘,打印机,键盘,鼠标,显示器,网络接口以及其他输入,输出设备组成。如果每位应用程序员都不得不掌握系统所有的细节,那就不可能再编写代码了。管理所有这些部件并加以优化使用,是一件挑战性极强的工作。所以,计算机安装了一层软件,称为操作系统,它的任务是为用户程序提供一个更好,更简单,更清晰的计算机模型,并管理好刚才提到的这些设备。

      用户与windows,linux交互的程序,基于文本的通常称为shell,基于图形的则称为图形用户界面,它们实际上并不是操作系统的一部分,虽然这些程序使用操作系统来完成工作。

      多数计算机有两种运行模式:内核态和用户态。软件中最基础的部分是操作系统,它运行在内核态(也称为管态,核心态)。该模式下,操作系统对具有对所有硬件的完全访问权,可以执行机器能够运行的任何指令。软件的其余部分运行在用户态下。在用户态下,只使用了机器指令的一个子集。特别的,那些会影响机器的控制或可进行IO操作的指令,在用户态中的程序是禁止的。

      用户接口程序,shell或者GUI,处于用户态程序中的最低层次,允许用户运行其他程序,例如web浏览器,音乐播放器等。这些程序也大量使用操作系统。

      有时,在嵌入式系统(该系统没有内核态)或解释系统(如基于java的操作系统,它采用解释方式而非硬件方式区分组件)中,上述区别是模糊的。

      在许多系统中,一些用户态运行的程序协助操作系统完成特权功能。例如,经常有一个程序提供用户修改其口令之用、但是这个程序并不是操作系统的一部分,也不在内核态运行,不过它明显的带有敏感功能,并且必须以某种方式给与保护。在某些系统中,这种想法被推向了极致,一些传统上被认为是操作系统的部分(如文件系统)在用户空间运行。在这类系统中,很难划分出一条明显的界限。在内核态中运行的当然是操作系统的一部分,但是一些在内核外运行的程序也有争议地被认为是操作系统的一部分,或者至少与操作系统密切相关。

    1.1 什么是操作系统

      操作系统是一种运行在内核态的软件,尽管这个说法并不总是符合事实。操作系统执行两个基本上独立的任务,为应用程序提个一个资源集的清晰抽象,并管理这些硬件资源,而不仅仅是一堆硬件。

    1.1.1 作为扩展机器的操作系统

      在机器语言一级上,多数计算机的体系结构(指令集,存储组织,io和总线结构)是很原始的,而且编程是很困难的,尤其是输入输出操作而言。例如使用NEC PD765控制器芯片来进行磁盘IO操作。PD765有16跳命令,每一条命令向一个设备寄存器装入长度从1到9个字节的特定数据。这些命令用于读写数据,移动磁头臂,格式化磁道,以及初始化,检测状态,复位,校准控制器及设备等。

      最基本的命令是read和write。它们均需要13参数,这些参数封装于9个字节中。这些参数所指定的信息有:预读取的磁盘数,磁盘的扇区数,物理介质的记录格式,扇区间隙以及对已删除数据地址标志的处理方法等。当操作结束后,控制器芯片在7个字节中返回23个状态以及出错字段。

      很显然,这太复杂了。一般程序员不想涉及磁盘编程的这些具体的细节。相反,程序员需要的是一种简单的,高度抽象的处理。在磁盘的情况下,典型的抽象是包含了一组已命名文件的一个磁盘。每个文件可以打开进行读写操作,然后进行读写,最后关闭文件。诸如记录方式,电机的状态等细节,不应该提供给应用程序员的抽象描述中。

      抽象是管理复杂性的一个关键。好的抽象可以把一个几乎不可能管理的任务划分为两个可管理的部分。其第一部分是有关抽象的定义和实现,第二部分是随时用这些抽象解决问题。几乎每个计算机用户都理解的一个抽象是文件。文件是一种有效的信息片段,诸如数码照片,电子邮件或web页面。操作系统的任务是创建好的抽象,并实现和管理它所创建的抽象对象。

      硬件是丑陋的。真实的处理器,内存条,磁盘和其他装置都是非常复杂的。对于那些为使用某个硬件和其他装置而不得不编写软件的人们而言,他们使用的是困难,可怕,特殊和不一致的接口。有时这是由于需要兼容旧的硬件,有的是为了节省成本,但是,有时硬件设计师们并没有意识到(或者在意)他们给软件的设计带来了多大的麻烦。操作系统的一个主要任务是隐藏硬件,呈现给程序良好,清晰,优雅,一致的抽象。

      操作系统的实际客户是应用程序。它们直接与操作系统及其抽象打交道。用户与用户接口所提供的的抽象打交道,或者是命令行shell或者是图形接口。

    1.1.2 作为资源管理者的操作系统

      把操作系统看作是向应用程序提供基本抽象的概念,是一种自顶上下的观点。按照另一种自底向上的观点,操作系统则用来管理一个复杂系统的各个部分。现代计算机包含了处理器,存储器,时钟,磁盘,鼠标,网络接口,打印机以及许多其他设备。从这个角度看,操作系统的任务是在相互竞争的程序之间有序的控制对处理器,存储器以及其他io接口设备的分配。

      当一个计算机有多个用户时,管理和保护存储器,io设备以及其他资源的需求变得强烈起来,因为用户可能会互相干扰。另外,用户通常不仅仅共享硬件,还要共享信息(文件,数据库等)。操作系统的一种观点认为,操作系统的主要任务是记录那个程序在使用什么资源,对资源请求进行分配,评估使用代价,并且为不同的程序和用户调解互相冲突的资源请求。

      资源管理包括以下两种不同方式实现多路复用(共享)资源:在时间上复用和在空间上复用。当一个资源在时间上复用时,不同的程序或用户轮流使用它。例如,cpu,系统中只有一个cpu,但是有多个程序要在该cpu上运行,操作系统首先把cpu分配给某一个程序,然后是下一个,如此进行下去,最终,轮到第一个程序再次运行。至于资源是如何实现时间复用---谁应该是下一个以及运行多长时间等----则是操作系统的任务。

      另一类是空间复用。每个客户都得到资源的一部分,从而取代了客户排队。例如,通常在若干个运行程序之间分割内存,这样每一个运行程序都可同时入住内存(例如,为了轮流使用cpu)。假设有足够的内存可以存放多个程序,那么内存中同时存放若干个程序的效率,比把所有内存都分配给一个程序的效率要高的多,特别是,如果一个程序只需要整个内存的一小部分时,结果更是这样。当然,如此的做法会引起公平,保护等问题,这有赖于操作系统解决它们。有关空间复用的资源还有磁盘。在许多个系统中,一个磁盘同时为许多个用户保存文件。

      

      

      

      

  • 相关阅读:
    Rest
    docker-4
    Arrays.asList
    docker-3
    docker
    docker
    linux-ss
    jackson
    Java将图片的路径转为Base64,VUE前端显示
    java base64视频存到本地或服务器
  • 原文地址:https://www.cnblogs.com/ZGreMount/p/14027524.html
Copyright © 2020-2023  润新知