操作系统讲座

Author: 徐良贤 教授 Date: 1995-10-13

        操作系统的重要性几乎人人皆知,但对未经过计算机专业培训的电脑爱好者,却对操作系统的基本理论缺乏系统了解,为此,特请上海交通大学计算机科学与工程系徐良贤教授为我们补上这一课。操作系统基本原理内容繁多(包括其最新发展方向),要在20讲里作一系统讲解,还真不容易,万事开头难,就从概述讲起吧。
        (一)操作系统概述
        计算机系统由硬件(物理设备)和软件(程序和文档)组成,硬件包括CPU和各种外围设备,软件又可分成系统软件、应用软件和支撑软件。在计算机系统中,所有这些软、硬件资源(泛称资源)必须要有一个统一的管理者来协调它们正确、可靠、高效地工作,这就是操作系统的使用。
        操作系统是将物理机器(课机)改造成可靠性高,使用方便,功能齐全的理想机器的一套系统软件。操作系统设计的好坏直接影响计算机系统的性能,操作系统还必须面面俱到地考虑系统的各个方面,别人不管的所有杂务事情它都得管,任何遗漏或考虑不周都会影响系统的工作。主要计算机厂商对操作系统的设计都倾注了全力。因为操作系统的好坏对其产品在市场上的竞争能力是个关键。用户选择机器也很留意所配置的操作系统,所以操作系统是计算机系统中最关键的系统软件之一。
        用户使用计算机实际上是通过操作系统进行的,如图所示。操作系统可用分时或批处理的方式将单个CPU的机器提供给多个用户(直至几百个用户)同时使用。操作系统提供用户使用器的手段(或称界面)主要有三种:终端命令,系统调用和作业控制语言。
        用户可直接在以分时工作方式的多个终端上打入终端命令使用机器,机器应及时响应终端命令,并在终端上显示工作过程和运行结果,是一种联机交互的工作方式。
        用户可在编写的程序中(高级语言或低级语言)使用系统调用来调用操作系统提供的各种功能,如文件的打开、关闭,数据的输入、输出等。
        在批处理方式下,用户提交的作业需包含用作业控制语言编写的作业说明书,随同程序和数据提交机房,作业进入机器运行时就是按作业说明书给定的工作步骤执行程序,用户只需随后去机房取结果。
        目前计算中心中的计算机系统大都兼有此三种用户界面,前台是分时终端作业,后台是批处理作业,系统调用则是基本的功能调用。
        以上讨论均是从单个CPU的机器考虑的,随着计算机科学技术的发展,多CPU系统和计算机网络系统已逐步替代单机的使用环境,操作系统也需从单机系统向多机系统发展。这样操作系统的类型可归纳成:
        ·批处理操作系统
        ·分时操作系统
        ·实时操作系统
        ·多处理操作系统
        ·网络操作系统
        ·分布 式操作系统
        本文对各类操作系统及其简单原理作一介绍,以帮助读者对主要的计算机系统软件__操作系统有一个比较完整的了解。
        (二)操作系统的结构
        \[1991321]  操作系统是负责管理计算机系统资源的最基本的系统软件,用户是通过调用操作系统的功能来使用计算机的。那么系统应该具有那些功能呢?主要有:
        ·命令解释      ·中断处理           ·输入/输出处理
        ·出错处理      ·作业/进档调度      ·资源管理
        ·保护          ·多路存取           ·杂务工作
        ·为用户提供友好界面
        如何设计和构造这样一个繁琐而有相当规模的软件呢?通常采用模块分层方法,如下图所示:在硬件基础上分层次构造操作系统的各个部分。
        最内层是系统核,这部分程序提供了操作系统基本单元__进程的运行环境,是操作系统中调用最为频繁的一段程序,它的运行效率对系统性能影响大,一般采用汇编语言编制,可由人工精雕细刻,这部分程序不宜过大。
        第二层是存储管理,在计算机上运行的程序和有关数据必须存放在存储器中,操作系统程序和用户程序都存放在同一个存储器中,必须对存储器进行严格的管理,使各种程序能有条不紊地工作,互相不会冲突。
        第三层是设备管理,负责系统的输入、输出工作。由于I/O设备从机械、电气到电子、光学,品种五花八门,性能相差很大,设备管理必须能统一管理它们,待有新的设备接入,也不应重写设备管理程序。另外具体设备的使用方法各不相同,有的可能比较复杂,但在设备管理程序的统一管理下,用户仅需用简单的命令,即可实施复杂的输入、输出操作。
        第四层是文件系统。众所周知不论是系统程序或用户程序都是以文件形式存放和存取的,为的是便于检索和管理,因此必须由专门的文件系统来组织和管理各类文件。
        第五层是作业管理,这一层是对用户提交的作业进行统一管理。保证用户能满意地使用机器。
        上述五层的程序组成了操作系统的主干部分,其调用关系一般是从外层到内层。这样,读者对操作系统的体系结构有了初步的了解,接下来将逐层说明它们的工作原理和实现方法。
        (三)对进程的理解
        \[2001401]
        前面提到的进程是操作系统操作的基本单元,理解进程概念是掌握操作系统的关键。原先我们熟悉的是程序,看到的也是一段一段的程序。程序和进程到底是什么关系呢?程序是静态的文本,而进程是动态的过程,只有程序的执行才会形成进程。举一个形象的例子:一部电影的拷贝相当于一套程序,该拷贝的一次完整放映过程才形成一进程。所以说进程是一个动作的序列,用进程来描述操作系统的动态实质才是贴切的。再用一个具体例子说明:在计算机中心,一个班级的学员可以同时在一台机器的许多终端上上机,他们可能使用同一种语言(Pascal或C)编辑、编译和调试各自的程序,机器提供的实际上是同一套Pascal或C的编译程序,学员们是共享该编译程序来编译和调试各自独立的程序。用每位学员各自独立的进程来描述该过程是清晰和确切的,若用程序来说明这一过程则不尽恰当。
        当然进程的实体还是程序,可用右图来描述一个进程(process),主要由进程控制块(PCB)和进程体两部分组成。进程控制块包含了该进程的所有控制和管理信息,包括进程的标识、位置、状态、优先级、通信等信息及现场保护区,这些都是操作系统管理进程所必需的信息。进程体包含该进程工作的程序、数据和工作区。程序可以由多个进程共享,也可以是某个进程独有。操作系统中不论是系统程序还是用户程序,都统一用进程表示,由它们平等地竞争占用CPU。这样有利于操作系统的统一处理,其区别只是控制信息的不同,如优先级的高低,工作区域的分开等,这就可实施对不同进程的区别对待。操作系统还要考虑进程之间的联系和通信,这是因为所有进程并不完全各自独立。例如,一个用户作业可由多个进程协作完成,这些进程之间就会有先后次序的要求,如最一般的输入,计算和输出三个进程,虽然大部分时间可以同时做:输入后一个数据,对前一个数据进行计算,输出再前一个数据的计算结果。但对同一个数据(如第一个数据),必须先输入,再计算,最后才能输出,此时对三个进程必须有次序限制,即这三个进程之间必须有同步关系。另外,系统中的不少设备是由多个进程共享的,当一个进程在使用某设备时,其它要求使用该设备的进程必须等待,即这些进程必须互斥地使用该类设备。
        为了达到上述要求,进程得并发执行。即使在单个CPU的机器上,也是每个进程在CPU上一次从头做到尾的,而是多个进程轮流占使用CPU,即多个进程都已开始,但都未结束,处于执行过程之中,这就是操作系统动态调度进程运行的实质。任一进程在其生命期内总是处于就绪、执行、等待三种状态之一。所有准备就绪,但尚未抢到CPU运行的进程处于就绪状态,正在CPU上运行的进程处于执行状态(单CPU的机器只有一个执行进程),所有因等待某种条件·如输入/输出)而暂时无法执行的进程处于等待状态。如图所示?
        (四)操作系统的最内层--系统核
        核是操作系统的最内层,与硬件关系密切,用来提供进程运行的基本环境;核也是操作系统中执行最频繁的一段程序,大部分操作系统的核是用汇编语言编写的,以保证高执行效率。系统核通常由三部分程序组成:
        ·初级中断处理程序
        ·处理机分派程序
        ·同步原语的实施程序
        初级中断处理程序对各类中断进行前端处理。众所周知,使用计算机主要是通过中断头驱动的,终端命令的执行,系统调用的响应都是通过中断进入操作系统,调用各种服务功能,因而对中断的处理是操作系统的核心内容之一。中断的处理过程如右图所示:当有叫断请求时,系统应及时响应中断,即暂停当前正在执行的程序,并将CPU中各主要寄存器的内容保存到执行进程控制块PCB的现场保护区中,然后按不同的中断请求转到相应中断处理子程序处执行,实现该中断要求的服务,完成后恢复原执行进程各控制寄存器的内容,就可继续中断前的工作。中断处理过程通常是由硬件和软件结合实现的,如图所示。
        中断请求              ─
        ↓                 ↑
        中断响应              硬
        暂停执行现程序          件
        ↓                 实
        保护现场              现
        ↓                 ↓
        识别中断源             ─
        ↓                 ↑
        转入中断处             软
        理子程序              件
        ↓                 实
        恢复现场,继续          现
        中断前的工作           ↓
        ─
        不同机器的中断机制不安完全相同,中断的类型也详简不一,但主要的类型应包含:
        ·输入输出中断--与外部设备协同工作所产生的中断,有时也称外部中断。
        ·进管中断--程序执行中迁到系统调用命令,自动进入操作系统的相应服务程序,有时也称自愿中断。
        ·断点跟踪中断--为便于调试程序可按用户意愿在程序中设置断点,当执行到这些断点时会发生中断,再由用户决定如何处理。
        ·硬件故障中断--由于物理设备的故障引起的中断,如掉电等。
        ·程序性中断--在程序执行中引起无法继续执行的错误所产生的中断,如除法的除数为零,遇非法指令(即机器不会执行的指令)等。
        显然,不同的中断应有不同的优先级,故障性中断应有较高的优先级,系统应考虑多重中断机制。
        处理机分派程序又称低级调度程序,负责调度就绪进程依次占用处理机运行,常用的调度策略有:
        ·先到先服务--就绪进程从队尾排入。
        ·时间片轮转--进程在处理机上只能运行给定的时间片数,随后再排入就绪队列队尾。
        ·优先级法--为各进程指定优先级别,就绪队列总是按优先级从高到低排列。
        也可混合使用上述策略,得到更有效更合理的调度策略。
        同步原语的实施程序是为进程之间的通信和同步提供工具,这是进程正常运行所必须的?
        (五)存储管理
        存储管理是紧跟核的第二层,因为计算机中运行的各种系统程序和用户程序必须驻留在存储储器中。如何确保这些程序准确地依次执行,互相不干扰,不冲突,就必须对存储器进行严格的管理。存储管理应能解决以下方面的问题:
        ·地址重定位__程序员或用户编制的程序,不会改变它的地址,均视作以自然顺序编排的地址,即从0或1开始的自然地址,称为逻辑地址或相对地址。当程序输入计算机后,必须在存储器中占有唯一的固定地址。不同程序的相同的逻辑地址必须对应到存储器中不同的固定地址,程序物理地址或绝对地址。从逻辑地址转成存储器物理地址的工作称地址重定位。
        ·存储器的组织和分配__各类程序共享同一存储器,系统必须精心安排和合理分配,使得既不会互相冲突又能充分利用存储空间。
        ·存储器的保护__各类程序必须在自己的地址范围内运行,不能随意侵占其它程序的地址空间,特别是用户程序不能干扰系统程序的运行。
        ·存储器的扩充__计算机主存储器的容量有一定限制。存储器的扩充就是为了解决在小容量的主存中能运行大的作业。可以采用虚拟存储技术来实现存储器的扩充。
        针对以上问题,在操作系统中常用的存储管理方法分别为:
        *界地址管理
        界地址管理是将每个作业程序在主存中的工作区域用其下界地址和上界地址围 起来。地址重定位只要将其逻辑地址加上下界地址就是主存中的物理地址。存储器的保护只要检查每次形成的物理地址不超出上、下界地址范围。通过对上、下界地址的管理可确保各作业的程序工作在各自的地址空间中,不会发生冲突。读者会注意到:界地址管理并不能解决存储器的扩充问题。因为界地址不能超越主存的地址空间。
        界地址管理按不同要求可有不同的实现方案:
        ·单连续存储管理__运用于个人计算机的单用户单作业情况。主存中的用户空间全部提供给一个用户作业使用。一个作业完成,再做第二个作业。任何时刻主存中只有一个作业的程序。这样就只要设置一个下界地址,因为上界地址与主存的上界相同。
        ·固定分区存储管理__允许多个作业同时存放在主存的固定区域,区域的大小可以相同也可以不同,但事先已固定。各作业按尺寸装入合适的区域依次执行。由于作业的大小与固定区域的大小不一定相符,所以固定分区方式的内存空间利用率不高。
        ·可变分区存储管理__按照进入机器的各个作业的大小,在主存中动态地划分区,此时分区的大小和数量都是不固定的,只要主存中有足够的空间,就允许新的作业进入。由于分区的大小是按作业的实际需要确定,主存空间的利用率较高。
        *页式管理
        页式管理是将存储器地址空间划分成相同尺寸的页,并顺序编号,称为页号。程序以页为单位存放。不同程序不能存放在同一页中,所以每个作业的程序都占据整数个页。这些页可分布在主存中的任何位置,不需要连续存放。
        主存分成页后,它的地址格式应分成页号和页内地址两部分,页的尺寸一般为512~4096,均为2n,因此两部分地址仍为连续的线性地址,即高位部分对应于页号,低位部分是页内地址。
        每个作业的程序在主存中占用的页分布在不同的位置,为了能方便地找到这些页,可为每个作业建立一张页表,地址重定位要先找到该作业的页表,再从页表中查到主存中的实际页号,最后通过页内地址找到要执行的指令或数。页表集中存放在操作系统的工作区中。建立一个新作业,就要将它的页表填入工作区,执行该作业时,每取一条指令或取一个操作数,必须先找到工作区中页表的对应项,再按页号在实际页中找出要执行的指令或数,所以要二次访问主存,比界地址管理要增加一倍的访内时间,为此应采用称为联想存储器或快表的高速存储部件,可使访问速度提高一个数量级。
        页式管理能全部满足存储管理的四个要求。它如何能扩充主存呢?用户作业的大小是体现在该作业的页表的数量上,前面已提到,页表中的页毋需全部装入主存,只要将当前运行所需要的页装入即可运行,而当所需要的页不在主存时,可通过缺页中断,将所需页调入,当主存无空闲页时,也可将暂时不用的页调出,这就是所谓的滚进滚出。可以说虚拟存储技术是通过页表的调用来实现的。
        *段式管理
        段式管理是按程序的自然段为单位存放(如主程序段,若干子程序段,数据段等)程序。用户作业由若干程序段组成,每个程序段在主存中必须连续存放,不同程序段可存放在主存的任何位置。段式管理过程与页式管理基本相同,所区别的只是地址格式和段表的内容不同。
        *段页式管理
        段页式管理兼有段式程序自然分段和页式主存页面分配的优点。用户作业的程序仍按自然段划分,每一段中再以页来分配。为每个用户作业设置一个段表,每个自然段占一段表项,每一段表项又对应一个页表,页表项即为该段程序占有的页及其在主存中的确切位置。段页式的地址转换需三次访问主存,先找段表,再找段内页表,才能找到主存实际页内的内容,所以段页式快表的作用就更为明显。
        页式、段式、段页式存储管理都能实现虚拟存储技术,代价是增设了页表和段表,且用滚进滚出的开销换取大的虚拟存储空间。读者应注意的是采用这些方案必须运行足够大的作业,运行小作业的效率肯定是很低的。
        ?(六)操作系统的设备管理
        存储管理的外层是设备管理,负责系统的输入输出工作。由于计算机的外围设备五花八门,性能各异,所以设备管理是操作系统中最繁琐的部分。为了统一地管理各类设备,操作系统的设备管理程序应能统一处理各类设备的操作,包括以后加入的新设备,就需要引入虚设备的概念,使操作系统与有统一的数据结构和表示方式的虚设备打交道,待要实施输入输出时,再由虚设备与实际的输入输出设备连接。设备管理需建立如下的数据结构:
        ·设备控制块(DCB):系统为每台设备建立一张DCB表,如图1所示。
        图1:DCB
        设备名
        设备类型
        当前状态
        占用进程名
        请求队列指针
        操作方式
        ·虚设备控制块(VCB):系统应设置足够数量的统一的VCB表,如图2所示,便于设备管理程序的统一处理。
        图2:VCB
        编号
        操作方式
        连接设备名
        勾链指针
        ·输入输出请求块(IORB):用户进程每要求一次输入输出操作,就形成一个IORB(IORB内容见图3),并挂入相应设备的请求队列中,此后用户进程可继续执行。
        图3:IORB
        目的地或源地
        传送信息量
        操作方式
        请求进程名
        勾链指针
        除了对设备的统一管理,还有速度的调配问题。由于输入输出设备的速度与CPU的速度相差甚远,输入输出工作就成为系统工作的瓶颈,严重影响系统的效率。因此采用以下技术解决外设与CPU的速度不匹配问题:
        ·缓冲技术:在存储单元中设置一定数量的缓冲区,当某进程要求输入/输出时,可先将数据送入缓冲区,使执行进行不必等待,仍继续执行,随后再由输入/输出设备从容地从缓冲区中逐个取出数据输入/输出。这样就可大大减少进程的等待时间。恰当选择缓冲区的数量可明显地提高解题的速度。
        ·通道技术:通道是一台处理机,它专门为主机(更大的处理机)的输入输出服务。主机要求输入输出时,只要给通道发一命令,具体的工作全由通道处理机完成,而主机则可集中做它的计算工作,这也就是为什么计算中心的主机能同时为几百个用户服务,因为它连接多台通道处理机来处理所有费时又繁琐的输入输出工作。
        ·假脱机技术(Spooling):是一种有效地利用高速外设(磁盘等)来提高低速处理(打印机、绘图仪等)执行效率的技术。从低速外设输入或向低速外设输出的数据先放入输入器或输出器中,进程可方便地从输入器中读取数据或按序由输出器中逐个输出结果。Spooling是一项性能价格比很高的技术,得到了广泛的应用。?
        (七)文件系统
        \[2072061]  操作系统的第四层是文件系统。文件是具有名字的一组信息序列,可按名方便地存取文件。使用计算机主要通过文件来进行,操作系统必须负责文件的处理,组织和管理,为此设计的一套程序称为文件管理系统,统称文件系统。
        从用户角度组织文件称为文件的逻辑结构。有流式结构和记录式结构。前者犹如一篇散文,是一种字符流形式;后者像学生成绩册,每位学生构成一个记录,也可按记录存取。系统对文件的组织,即文件在存储器中存放的格式称为文件的物理结构,可分成顺序结构、链接结构和索引结构,分别表示连续存放。通过指针勾链各分散的存放区域和用索引表指示各分散存放块。
        文件由文件控制块(FCB)和文件体组成。FCB应包含文件的主要控制信息,如图1所示。
        文件的组织,存取和查找都是通过目录进行的,现在常用的文件目录结构是多级树型目录,如图2所示。文件目录的目录项通常由文件的FCB组成。为管理方便,将目录也组成文件,称为目录文件。树型目录中的子目录,如图中Bin,Clev,User…均由目录文件组成,叶子结点即图中圆圈表示的都是具体的文件。树型目录结构中不同子目录下的文件可以同名,所以,指定某一文件,必须给出包含路径名的全名,以确保唯一性,如图中\User\Mary\Prog.c与\User\Jame\Prog.C是两个具有相同文件名的不同文件,因为它们的路径名\User\Jame和\User\Mary是不同的。
        文件系统应提供对文件进行各种操作的程序,如文件的建立与撤消,文件的打开与关闭,文件的顺序读写与随机读写等,用户可通过终端命令或系统调用来调用这些程序对文件进行各种操作。
        文件系统必须考虑文件的共享,保护和完整性问题。应能使不同的用户对文件有不同的使用权限,这在具体应用中是非常重要的。文件系统中普遍采用的文件是将用户分成几种类型,如文件主,伙伴和普通用户三种。对文件允许操作的权限也分成若干等级,如只能执行,只能读和执行,能写、读和执行三级。在建立文件时可指定给不同类型用户以不同等级的权限。如对某一文件指定rwxr-xr--权限,说明对文件主能读、写和执行,对伙伴只能读和执行,而对普通用户只能读。
        文件的完整性就是要确保在任何情况下不会丢失文件,否则可能会造成不可弥补的损失。文件系统主要采用转贮的方法,即定时将计算机内的文件转贮到外部介质上,如磁带、磁盘等。不少重要的系统,每天都要做转贮工作,以备突然性灾难性事故后仍能保存文件最新的备份。转贮又有全量转贮和增量转贮两种方法,后者只是将上次转贮后复化过的文件加以转贮,这种工作量小,但恢复比较麻烦。
        (八)作业管理
        \[2082141]  作业管理是操作系统的最外层,主要负责将用户提交的作业,逐个送入机器,作业再分解成内部执行的进程竞争CPU运行。对于分时系统的作业,是由用户直接在终端上联机进入,作业一级的管理不是很明显。而批处理系统的作业是由用户将程序、数据和作业说明书提交机房,再装入机器运行的。故对作业来说,除了进程运行的三个基本状态外,还有作业的提交,准备和完成状态,如图所示。实际系统中通常是多道作业并行运行,故处于后备状态的作业不止一个。如何在用户提交的许多作业中选择若干个作业投入运行,也有一个调度问题,称为作业调度或高级调度。作业调度的策略与进程调度有关但不全相符,常用的作业调度算法有:
        ·先到先服务(FCFS):严格按提交次序执行。
        ·资源搭配法:将要求不同类型资源的作业搭配运行,如将计算量大的作业和输入输出量大的作业,因分别占用CPU和I/O设备量大,搭配着运行可充分发挥各设备的作用。
        ·最高响应比优先法:计算或给定作业的等待时间和运行时间,选择等待时间/执行时间比例高的先进入,可见是兼顾了短作业和长作业的响应时间。
        ·多队列循环法:可将不同类型的作业,如长作业、短作业和使用紧缺资源的作业,各自排成队列,可在各队列中各选一个作业进入。
        类似的算法还可有好多,系统可按响应时间,负荷均衡,吞吐量和优先级别等的不同要求选择不同的算法。
        分时系统使用的终端命令语言与批处理系统中使用的作业控制语言有很大的区别。前者是在终端上打入的交互式命令,并能对系统的动作及时作出响应;后者编制的作业说明书一旦提交就无法对作业运行进行更多的控制,这就不仅要求作业控制语言功能更强、更复杂,而且对作业说明书的编写要求较高,要包括计账信息、调度信息、输入输出信息和过程信息等。下面通过一个作业说明书的简单例子使读者有个感性认识:
        (1)JL:A102,ABCD,65,25000;
        (2)SQ:KH1,GD2,CD3;
        (3)BY:C,A202,A203,36;
        (4)ZR:A203;
        (5)QD:1,36;
        (6)CL:Y;
        (7)36CL:W;
        说明:(1)建立一个作业A102,属于用户ABCD,优先级为65,要求主存单元25K。
        (2)申请外设:宽行打印机1台,光电输入机2台,磁带机3台。
        (3)编译C语言文件A202,得到的目标码文件A203,编译出错算标号36。
        (4)装入目标码文件A203。
        (5)在启动点1启动程序执行,遇意外算标号36。
        (6)有条件批离,即已完成运行。
        (7)无条件批离,即遇出错情况。
        为了减轻用户需要额外掌握作业控制语言的负担,有的系统考虑把所有这些语言统一成单种语言,就好象MS-DOS中的.BAT文件可用DOS命令集中的大部分命令组成一样。
        ?(九) MS-DOS
        \[2092221]  MS-DOS是个人计算机(PC机)上的单用户、单作业磁盘操作系统,由微软公司(Microsoft)开发,后由IBM公司作为它的个人计算机的微机操作系统,所以也称PC-DOS,得到了极为广泛的应用。MS-DOS从1981年10月发表第一版以来至今已发展到第六版,在功能上有很大的提高。从第三版以后就考虑了网络环境下的使用。
        MS-DOS采用层次__模块结构,由于个人计算机对操作系统的功能要求比较低,主要是进行文件和设备管理,其它部分比较简单,可拼入上述程序模块,故系统主要由三个模块和一个引导程序组成,如图所示。
        ·命令处理程序Command.com,解释执行用户从键盘上打入的各种命令·DOS系统的命令分成内部命令,外部命令和系统实用程序三部分,并可由这些命令组成批处理命令(.BAT文件)。内部命令应是往常使用的基本命令,这些命令的处理程序常驻内存,当系统盘取走后,内部命令仍能照常执行,而且速度快。外部命令和系统实用程序一般不常驻内存,执行这些命令必须调用磁盘上的相应文件,如盘已取出就无法执行。系统实用程序是一套功能较完整、规模较大的程序,如EDLIN,LINK和DEBUG等,它们本身还包含有一系列子命令。随着计算机硬件的飞速发展,存储容量不断扩大,新的DOS版本内部命令的功能和数量也在不断扩大,不秒老版本中的外部命令在新版本中作为内部命令。
        ·文件系统IBMDOS.COM:主要处理磁盘文件,是DOS系统的主要服务程序,包含了近百条系统调用的处理程序。DOS系统中的文件的逻辑结构是流式结构,物理结构是通过位表(FAT)的链接结构。文件控制块与文件目录项不全一致,但都包含了文件的名、类型、属性、长度和建立或修改日期、时间待主要数据。
        ·ROMBIOS是将DOS的基本输入输出处理程序固化在只读存储器(ROM)芯片中,实际上是安装在系统底板上的一个固件(firmware)。它与BIOS接口模块IBMBIO.COM配合实现DOS的各种输入输出功能。IBMBIO是ROMBIOS的扩充部分,可用来改变基本输入输出操作,校正已固化的BIOS,增加新的处理子程序和设备以及用户自动设计的BIOS等。ROMBIOS也随着DOS版本的更新而不断更新自己的版本。扩充网络功能后,出现NETBIOS,可见BIOS是DOS系统的核心部件。
        引导程序配合ROMBIOS自举系统,使机器开启电源后能自动建立起系统供用户使用,使用户避免繁琐的系统启动操作。
        ?(十)UNIX
        \[2102301]
        UNIX是一个多用户分时操作系统,是由AT&C公司bell实验室的Ken Thompson和D.M.Rittchie于六十年代末开发的,1972年Ritchie研制了C语言来编写UNIX程序,他们两人也因此获得了计算机界的最高奖_图林奖。目前,不仅在小型机、微机上配置了UNIX操作系统,在大LP型机器上也能很好地运行UNIX。
        UNIX操作系统的结构如图1所示,分成内核和核外程序两部分。内核部分有我们前面讲的进程管理、存储管理、设备管理的文件系统,它们也频繁调用一个用汇编语言编写的小核心,其它程序都用C语言编写,近年来不少公司用C++语言改写了UNIX的内核程序。核外程序通过系统调用访问内核。所有核外程序都在Shell命令语言解释程序的管理和控制下为各终端用户服务。UNIX提供用户的统一界面称Shell(外壳)命令语言,有很强的功能,能满足不同层次用户的使用要求。
        UNIX的进程采用进程族派生方法动态生成,系统初启时只建立O#进程和1#进程,然后为每个终端建立一个Shell进程,等用户打入命令再建立相应的子进程执行命令。UNIX中进程遥控制块内容较多,为了节省内存空间将它分成常驻内存部分proc和非常驻内存部分User。仅当进程运行时才需把它的User结构调入内存,可充分利用有限的内存空间。 在UNIX中并不设置固定的时间片,而是采用动态优先数的调度方法,这样能既合理又有效地达到分时的效果。
        UNIX系统的存储管理采用虚地址空间的段式管理。将在核心态下工作的系统程序与用户态下工作的用户程序分割开,各自在不同的内存空间中运行,有利于存储空间的保护。
        UNIX的文件系统很有特色,它也采用流式逻辑结构,物理结构则采用能自动扩张的索引结构。目录结构采用可带勾链的树型结构。文件控制块称为inode,文件目录项由文件名和对应的inode指针组成,而不直接用inode,这样目录文件可相对短些。文件系统除基本系统外(根树),还可动态装卸多个子系统(子树),使用户能方便地自带文件子系统(介质)随时装上初卸下使用。
        UNIX的设备统一分成字符块设备,简称块设备和字符设备两类,分别有各自的设备管理程序,使用对应的两种缓冲区。设备与文件处理用相同方法,可把设备看成特殊的文件同样处理。
        UNIX操作系统并没有采用许多新的算法和技术,但它各部分的配合非常贴切,功能得到充分的发掘,所以它的性能可与比它大得多的系统相当,不少新的系统,包括DOS的后期版本都借用了UNIX的不少技巧和方法。