操作系统基础知识
什么是操作系统
计算机系统由硬件和软件两部分组成。操作系统(OS,Operating System)是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。它在计算机系统中占据了特别重要的地位;而其它的诸如汇编程序、编译程序、数据库管理系统等系统软件,以及大量的应用软件,都将依赖于操作系统的支持,取得它的服务。
精简的说的话,操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。
为什么要有操作系统
现代的计算机系统主要是由一个或者多个处理器,主存、硬盘、键盘、鼠标、显示器、打印机、网络接口及其他输入输出设备组成。一般而言,现代计算机系统是一个复杂的系统。如果每位应用程序员都必须掌握该系统所有的细节,那就不可能再编写代码了(严重影响了程序员的开发效率,全部掌握这些细节可能需要一万年....),并且管理这些部件并加以优化使用,是一件极有挑战性的工作,于是,计算安装了一层软件(系统软件),称为操作系统(OS,Operating System)。它的任务就是为用户程序提供一个更好、更简单、更清晰的计算机模型,并管理刚才提到的所有设备。
总结:
程序员无法把所有的硬件操作细节都了解到,管理这些硬件并且加以优化使用是非常繁琐的工作,这个繁琐的工作就是操作系统来干的,有了它,程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用软件的编写就可以了,应用软件直接使用操作系统提供的功能来间接使用硬件。
操作系统位于计算机硬件与应用软件之间,本质也是一个软件。操作系统由操作系统的内核(运行于内核态,管理硬件资源)以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成,所以,单纯的说操作系统是运行于内核态的,是不准确的。
细说的话,操作系统应该分成两部分功能:
一:隐藏了丑陋的硬件调用接口,为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。应用程序员有了这些接口后,就不用再考虑操作硬件的细节,专心开发自己的应用程序即可。例如:操作系统提供了文件这个抽象概念,对文件的操作就是对磁盘的操作,有了文件我们无需再去考虑关于磁盘的读写控制(比如控制磁盘转动,移动磁头读写数据等细节)
二:将应用程序对硬件资源的竞态请求变得有序化,例如:很多应用软件其实是共享一套计算机硬件,比方说有可能有三个应用程序同时需要申请打印机来输出内容,那么 a 程序竞争到了打印机资源就打印,然后可能是 b 竞争到打印机资源,也可能是 c,这就导致了无序,打印机可能打印一段 a 的内容然后又去打印 c...,操作系统的一个功能就是将这种无序变得有序。
操作系统发展史
摘自《汤小丹 - 计算机操作系统(第三版)》
从第一台计算机诞生(1945 年)到 20 世纪 50 年代中期的计算机,属于第一代计算机。此时的计算机是利用成千上万个真空管做成的,它的运行速度仅为每秒数千次,但体积却十分庞大,且功耗也非常高。这时还未出现OS。计算机操作是由用户(即程序员)采用人工操作方式直接使用计算机硬件系统,即由程序员将事先已穿孔(对应于程序和数据)的纸带(或卡片)装入纸带输入机(或卡片输入机),再启动它们将程序和数据输入计算机,然后启动计算机运行。当程序运行完毕并取走计算结果之后,才让下一个用户上机。这种人工操作方式有以下两方面的缺点:
(1)用户独占全机。此时,计算机及其全部资源只能由上机用户独占。
(2)CPU 等待人工操作。当用户进行装带(卡)、卸带(卡)等人工操作时,CPU 及内存等资源是空闲的。
可见,人工操作方式严重降低了计算机资源的利用率,此即所谓的人机矛盾。随着 CPU 速度的提高和系统规模的扩大,人机矛盾变得日趋严重。此外,随着 CPU 速度的迅速提高而 I/O 设备的速度却提高缓慢,这又使 CPU 与 I/O 设备之间速度不匹配的矛盾更加突出。为了缓和此矛盾,曾先后出现了通道技术、缓冲技术,但都未能很好地解决上述矛盾,直至后来又引入了脱机输入/输出技术,才获得了较为令人满意的结果。
为了解决人机矛盾及 CPU 和 I/O 设备之间速度不匹配的矛盾,20 世纪 50 年代末出现了脱机输入/输出(Off-Line I/O)技术。该技术是事先将装有用户程序和数据的纸带(或卡片)装入纸带输入机(或卡片机),在一台外围机的控制下,把纸带(卡片)上的数据(程序)输入到磁带上。当 CPU 需要这些程序和数据时,再从磁带上将其高速地调入内存。类似地,当 CPU 需要输出时,可由 CPU 直接高速地把数据从内存送到磁带上,然后再在另一台外围机的控制下, 将磁带上的结果通过相应的输出设备输出。由于程序和数据的输入和输出都是在外围机的控制下完成的,或者说,它们是在脱离主机的情况下进行的, 故称为脱机输入/输出方式;反之,在主机的直接控制下进行输入/输出的方式称为联机输入/输出 (On-Line I/O) 方式。这种脱机 I/O 方式的主要优点如下:
(1)减少了CPU的空闲时间。 装带(卡) 、卸带 (卡) 以及将数据从低速 I/O 设备送到高速磁带 (或盘)上,都是在脱机情况下进行的,并不占用主机时间, 从而有效地减少了 CPU 的空闲时间,缓和了人机矛盾。
(2)提高了 I/O 速度。当 CPU 在运行中需要数据时,是直接从高速的磁带或磁盘上将数据调入内存的,不再是从低速 I/O 设备上输入,极大地提高了 I/O 速度,从而缓和了 CPU 和 I/O 设备速度不匹配的矛盾,进一步减少了 CPU 的空闲时间。
上世纪 50 年代中期发明了晶体管,人们开始用晶体管替代真空管来制作计算机,从而出现了第二代计算机。它不仅使计算机的体积大大减小,功耗显著降低,同时可靠性也得到大幅度提高,使计算机已具有推广应用的价值,但计算机系统仍非常昂贵。为了能充分地利用它,应尽量让该系统连续运行,以减少空闲时间。为此,通常是把一批作业以脱机方式输入到磁带上,并在系统中配上监督程序 (Monitor) ,在它的控制下使这批作业能一个接一个地连续处理。其自动处理过程是:首先,由监督程序将磁带上的第一个作业装入内存,并把运行控制权交给该作业。当该作业处理完成时,又把控制权交还给监督程序,再由监督程序把磁带(盘)上的第二个作业调入内存。计算机系统就这样自动地一个作业一个作业地进行处理,直至磁带(盘)上的所有作业全部完成,这样便形成了早期的批处理系统。由于系统对作业的处理都是成批地进行的,且在内存中始终只保持一道作业,故称此系统为单道批处理系统(Simple Batch Processing System)。如图所示为单道批处理系统的处理流程,由此不难看出,单道批处理系统是在解决人机矛盾以及 CPU 与 I/O 设备速度不匹配问题的过程中形成的。换言之,批处理系统旨在提高系统资源的利用率和系统吞吐量。但这种单道批处理系统仍然不能很好地利用系统资源,故现已很少使用。
20 世纪 60 年代中期,人们开始利用小规模集成电路来制作计算机,生产出第三代计算机。由 IBM 公司生产的第一台小规模集成电路计算机——360 机,较之于晶体管计算机,无论在体积、功耗、速度和可靠性上,都有了显著的改善。虽然在开发 360 机器使用的操作系统时,为能在机器上运行多道程序而遇到了极大的困难,但最终还是成功地开发出能在一台机器中运行多道程序的操作系统 OS/360。
在单道批处理系统中,内存中仅有一道作业,它无法充分利用系统中的所有资源,致使系统性能较差。为了进一步提高资源的利用率和系统吞吐量,在 20 世纪 60 年代中期又引入了多道程序设计技术, 由此而形成了多道批处理系统(Multiprogrammed Batch ProcessingSystem)。在该系统中,用户所提交的作业都先存放在外存上并排成一个队列,称为 “后备队列” ;然后,由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享 CPU 和系统中的各种资源。具体地说,在 OS 中引入多道程序设计技术可带来以下好处:
(1)提高 CPU 的利用率,当内存中仅有一道程序时,每逢该程序在运行中发出 I/O 请求后,CPU 空闲,必须在其 I/O 完成后 CPU 才继续运行;尤其因 I/O 设备的低速性,更使CPU 的利用率显著降低。在引入多道程序设计技术后, 由于同时在内存中装有若干道程序,并使它们交替地运行,这样,当正在运行的程序因 I/O 而暂停执行时,系统可调度另一道程序运行,从而保持了 CPU 处于忙碌状态。
(2)可提高内存和 I/O 设备利用率。为了能运行较大的作业, 通常内存都具有较大容量,但由于 80% 以上的作业都属于中小型,因此在单道程序环境下,也必定造成内存的浪费。类似地,对于系统中所配置的多种类型的 I/O 设备,在单道程序环境下也不能充分利用。如果允许在内存中装入多道程序, 并允许它们并发执行, 则无疑会大大提高内存和 I/O 设备的利用率。
(3)增加系统吞吐量。在保持 CPU、I/O 设备不断忙碌的同时,也必然会大幅度地提高系统的吞吐量,从而降低作业加工所需的费用。
多道批处理系统的优缺点:
虽然早在 20 世纪 60 年代就已出现了多道批处理系统,但至今它仍是三大基本操作系统类型之一。在大多数大、中、小型机中都配置了它,说明它具有其它类型 OS 所不具有的优点。多道批处理系统的主要优缺点如下:
(1)资源利用率高。由于在内存中驻留了多道程序,它们共享资源,可保持资源处于忙碌状态,从而使各种资源得以充分利用。
(2)系统吞吐量大。系统吞吐量是指系统在单位时间内所完成的总工作量。能提高系统吞吐量的主要原因可归结为:第一,CPU 和其它资源保持 “忙碌” 状态; 第二,仅当作业完成时或运行不下去时才进行切换,系统开销小。
(3)平均周转时间长。作业的周转时间是指从作业进入系统开始,直至其完成并退出系统为止所经历的时间。在批处理系统中,由于作业要排队,依次进行处理,因而作业的周转时间较长,通常需几个小时,甚至几天。
(4)无交互能力。用户一旦把作业提交给系统后,直至作业完成,用户都不能与自己的作业进行交互,这对修改和调试程序是极不方便的。
多道批处理系统需要解决的问题:
多道批处理系统是一种有效、但十分复杂的系统。为使系统中的多道程序间能协调地运行,必须解决下述一系列问题。
(1)处理机管理问题。在多道程序之间,应如何分配被它们共享的处理机,使 CPU 既能满足各程序运行的需要,又能提高处理机的利用率,以及一旦把处理机分配给某程序后,又应在何时收回等一系列问题,属于处理机管理问题。
(2)内存管理问题。应如何为每道程序分配必要的内存空间,使它们“各得其所”且不致因相互重叠而丢失信息,以及应如何防止因某道程序出现异常情况而破坏其它程序等问题,就是内存管理问题。
(3)I/O 设备管理问题。系统中可能具有多种类型的 I/O 设备供多道程序所共享,应如何分配这些 I/O 设备,如何做到既方便用户对设备的使用,又能提高设备的利用率,这就是I/O 设备管理问题。
(4)文件管理问题。在现代计算机系统中,通常都存放着大量的程序和数据(以文件形式存在),应如何组织这些程序和数据,才能使它们既便于用户使用,又能保证数据的安全性和一致性,这些属于文件管理问题。
(5)作业管理问题。对于系统中的各种应用程序,其中有的属于计算型,即以计算为主的程序;有的属于 I/O 型,即以 I/O 为主的程序;又有些作业既重要又紧迫;而有的作业则要求系统能及时响应,这时应如何组织这些作业,这便是作业管理问题。
为此,应在计算机系统中增加一组软件,用以对上述问题进行妥善、有效的处理。这组软件应包括:能控制和管理四大资源的软件,合理地对各类作业进行调度的软件,以及方便用户使用计算机的软件。正是这样一组软件构成了操作系统。据此,我们可把操作系统定义为:操作系统是一组控制和管理计算机硬件和软件资源,合理地对各类作业进行调度,以及方便用户使用的程序的集合。