文章目录

  • 1.1 什么是操作系统
    • 1.1.1 程序是如何运行的
    • 1.1.2 操作系统
  • 1.2 操作系统运行环境
    • 1.2.1 计算机的基本硬件元素
    • 1.2.2 与操作系统相关的几种主要寄存器
    • 1.2.3 指令的执行
    • 1.2.4 中断
    • 1.2.5 处理机状态及特权指令
  • 1.3 操作系统的形成和发展
    • 1.3.1 操作系统发展的基础
    • 1.3.2 手工操作阶段
    • 1.3.3 批处理系统
    • 1.3.4 分时系统
    • 1.3.5 实时系统
    • 1.3.6 个人操作系统
    • 1.3.7 网络操作系统
    • 1.3.8 分布式操作系统
    • 1.3.9 嵌入式操作系统
    • 1.3.10 操作系统的发展趋势
  • 1.4 操作系统的功能和特性
    • 1.4.1 操作系统的功能
      • 1.4.2 操作系统的基本特征
  • 1.5 操作系统结构
    • 1.5.1 模块组合及层次结构
    • 1.5.2 微内核操作系统
    • 1.5.3 虚拟机结构
  • 1.6 Linux操作系统
    • 1.6.1 Linux发展历程
    • 1.6.2 Linux特点

第一章 绪 论

操作系统(Operating System,简称OS)是每台计算机必须安装的最基本的系统软件,为操纵硬件和程序的执行建立一个更实用的系统平台。本章首先介绍操作系统基本概念及在学习操作系统中涉及到的几个计算机基本概念,接着介绍了操作系统的发展过程,旨在从操作系统的的演变过程中对操作系统的基本概念有进一步的表述。接下来概述了操作系统的基本功能和基本特征以及体系结构

1.1 什么是操作系统

我们把没有装入任何软件的计算机称为裸机,裸机只是提供了计算机系统的物质基础,属于计算机硬件部分,这时的计算机不能上网、不能编程序,也不能帮助我们处理图片。我们要做的第一件事就是装入操作系统,一般而言大多数人都会选择Windows系统或Linux。可以试想一下,如果不装入操作系统,相信即使是顶尖的计算机好手也无法让计算机完成我们所要做的工作,这就是操作系统的作用所在。

1.1.1 程序是如何运行的

当一台计算机被加载了电源就会被启动运行,启动过程中首先会装载操作系统,然后运行用户想要运行的程序,为用户提供服务。那么对于专业的计算机人士来说,很想知道程序是如何在计算机中运行的,以便更好的控制和管理自己的程序。图1-1为程序的执行过程。

首先,程序员使用程序编程语言编写好要完成某项功能的程序,然后将其编译成计算机能够识别的机器语言程序,再由操作系统将其从外存中加载到内存,形成一个运行中的程序。程序要得到执行还要通过操作系统的调度将其放在CPU上执行,计算机执行程序时是按照程序的指令一条指令一条指令地执行的,而整个程序的执行过程还需要操作系统提供的服务,如输入输出数据,磁盘服务等。

1.1.2 操作系统

使用计算机的目的是方便、快捷、有效的工作。计算机的工作过程就是执行指令的过程,而计算机执行指令的过程可看成是控制信息在计算机各组成部件之间的有序流动过程,信息是在流动过程中得到相关部件的加工处理。而如何有条不紊地控制大量信息在计算机各部件之间有序地流动,又能方便用户使用,需要一个专门的系统去管理和控制这些部件及信息,这一系统就是操作系统。
正是操作系统把一个裸机变成一个可“操作”的、方便灵活的机器,我们把计算机加操作系统通常称之为虚拟机(virtual machine)或扩展机(extened machine)。而各种实用程序和应用程序运行在操作系统之上,它们以操作系统作为支撑环境,同时又向用户提供完成其任务所需要的各种服务。在一般情况下,实际呈现在用户面前的计算机系统已是经过若干层次软件改造的计算机,也就是装入了各种应用软件的计算机。

如图1-2所示,可把整个系统按功能上划分为四个层次。即硬件、操作系统、系统实用软件和应用软件。这个层次表现为一种单向的服务关系,即外层可以使用内层提供的服务,反之,则不行。在这个层次结构中,包围着系统硬件的一层是操作系统,它是最基本的系统软件,控制和管理着系统的硬件,向上层的实用程序和用户应用程序提供一个屏蔽硬件工作细节的良好使用环境,通过系统核心程序对系统中的资源进行管理,通过这些服务将对所有的硬件的复杂操作隐藏起来,为用户提供一个透明的操作环境。
当一台计算机(或网络)有多个用户时,因为用户间可能相互影响,所以管理和保护存储器、I/O设备以及其它设备的需求随之增加。而且用户往往不仅需要共享硬件,还要共享信息(文件、数据库等),此时操作系统的首要任务是跟踪资源的使用状况、满足资源请求、提高资源利用率,以及协调各程序和用户对资源的使用冲突。
因此,操作系统的作用可以归纳为三点:
1.管理系统资源
众所周知,一个计算机系统资源包括两大类:硬件资源和软件资源。硬件资源通常包括CPU、主存、输入/输出设备;现代计算机中软件资源包括计算机系统中的各类文件。相应地,操作系统的主要功能也正是针对这些资源进行有效地管理。
2.为用户提供一个良好的接口
操作系统是计算机与用户之间的一个接口,用户通过操作系统为用户提供的良好界面,以使用户无需了解许多硬件和系统软件细节,就能方便灵活地使用计算机。
3.应最大限度地发挥系统资源使用效率
由于多个用户共享系统资源,不可避免地会出现多个用户竞争资源,操作系统合理地为用户分配资源,合理地组织计算机的工作流程,提高资源的利用率和系统的吞吐量。
综上所述,我们可以给操作系统下一个定义:
操作系统是直接控制和管理计算机软硬件资源的最基本的系统软件,它可以合理地组织计算机的工作流程,用以方便用户充分、有效地利用这些资源并增强整个计算机的处理能力。

1.2 操作系统运行环境

操作系统是一个运行于硬件之上的系统软件,它和硬件有紧密的联系。为了更好的理解操作系统的工作原理,本节简要回顾一下现代个人计算机中与操作系统相关的基本硬件技术和概念。

1.2.1 计算机的基本硬件元素

构成现代个人计算机的基本硬件元素有以下4种:处理器(CPU)、存储器、输入输出控制与总线、外部设备等,这些基本元素的逻辑关系如图1-3所示。

处理器控制和执行计算机的指令操作,一台计算机中可以有多个处理器或单个处理器。多处理器和单处理器的计算机操作系统在设计和功能上都有较大区别,本书主要讨论单处理器的操作系统
存储器用来储存数据和程序。存储器可分为内存与外存,以及用于数据和程序暂时存储用的缓冲器与高速缓存(cache)等。
输入输出控制器与缓冲主要用来控制和暂时存储外部设备与计算机内存之间交换的数据和程序。
外部设备范围很广。它们是获取和输出数据与程序的基本单位,包括数字式设备和模拟式设备。不过,模拟式设备要通过模/数转换后才能把模拟信号输入到计算机,而计算机输出的数字信号则要通过数/模转换之后才能在模拟设备上显示或输出。
计算机系统的各种设备通过总线互相连接。总线是连接计算机各部件的通信线路。计算机系统的总线有单总线和多总线之分.单总线是指处理机、外部设备、存储器等都连接在一起的总线结构,而多总线则指把系统的CPU和内存分开连接,外部设备和外存等也用其他总线分开连接进行管理和数据传送的总线结构。显然,不同的总线结构对操作系统的设计和性能有不同的影响。

1.2.2 与操作系统相关的几种主要寄存器

寄存器与操作系统密切相关,因为它们是在处理机中交换数据的速度比内存更快,体积更小、价格更贵的暂存器件。典型的与操作系统相关寄存器包括以下几种:
1.数据寄存器
编程人员可以通过程序赋予数据寄存器众多的功能。一般来说,对数据进行操作的任何机器指令都被允许访问数据寄存器。不过,根据硬件设置的规定,这些寄存器也可能只被允许进行浮点运算或被其他某些规定所限制。
2.地址寄存器
地址寄存器一般用来存放内存中某个数据或指令的地址,或者存放某段数据与指令的入口地址以及被用来进行更复杂的地址计算。下面几种寄存器都可被认为是地址寄存器:
(1)地址标识位寄存器;
(2)内存管理用各种始地址寄存器;
(3)堆栈指针;
(4)设备地址寄存器等。
3.条件码寄存器
条件码寄存器也称标志寄存器。条件码寄存器的比特位由处理机硬件设置。例如,一次算术运算可能导致条件码寄存器被设置为正、负、零或溢出。
4.程序计数器PC
程序计数器内装有下一周期被执行指令的地址。
5.指令寄存器IR
指令寄存器内装有待执行指令。
6. 程序状态字PSW
程序状态字寄存器的各个比特位代表着系统中当前的各种不同状态与信息。例如CPU优先级、用户态或核心态、执行模式是否允许中断等。
7.中断现场保护寄存器
如果系统允许不同类型的中断存在,则会设置一组中断现场保护寄存器以便保存被中断程序的现场和链接中断恢复处。
8.过程调用用堆栈
堆栈被用来存放过程谓用时的调用名、调用参数、以及返回地址等。
寄存器被广泛应用于计算机系统中,它们与操作系统有着非常直接和密切的关系。事实上,操作系统设计人员只有在完全掌握和了解硬件厂商所提供的各种寄存器的功能和接口之后,才能进行操作系统设计。

1.2.3 指令的执行

每个CPU都有其一套指令集合。任何应用程序都只有通过指令的执行才能得以完成。执行指令的基本过程分为两部,即处理机从内存把指令读入的过程和执行的过程。其中,读指令是根据程序计数器PC所指的地址读入,而执行的指令则是指令寄存器IR中的指令。
我们把指令的读入和执行过程称为一个执行周期,如图1-4所示。指令的执行涉及到处理机与内存之间的数据传输,或者是处理机与外部设备之间的数据传输等。指令的执行也涉及到数据处理,例如算术运算或逻辑运算。另外,指令的执行还可以是对其它指令的控制过程。一条指令的执行可以是上述几种情况的组合。

1.2.4 中断

1.中断的概念
在日常生活中,经常会发生这种情况,当你正在做某件事时,发生了另外一件需要你去处理的紧急事件。这时你只能暂时放下前者,去处理后者,待处理完成后,再继续做原先的事。
计算机机系统中的中断概述与之类似。所谓中断,是指当CPU正在执行某一程序时,发生了异步事件,此时CPU将打断正在执行的程序,转去执行一段处理该事件的有关程序。被打断的程序可以在以后的某个时间继续执行。中断的特点是随机性,发生中断的时间或原因与现行的程序没有逻辑上的关系。这就必须保证现行程序被中断后能在以后继续正确执行。如图1-5 所示中断的执行过程。

我们把引起中断的事件称为中断源,中断源向CPU发出的请求处理信号称之为中断请求,发生中断时的现行程序的暂停点称为中断点,CPU暂停现行程序转去响应中断请求的过程称之为中断响应,处理中断源的程序谓之中断处理程序,CPU执行相关中断处理程序的过程称之为中断处理过程,而返回断点的过程称之为中断返回。
在有些情况下,尽管产生了中断请求,但CPU内部的处理机状态字PSW中的中断允许位已被清除,从而不允许CPU响应中断。这种情况叫禁止中断,也叫关中断。CPU禁止中断后只有等到PSW中的中断允许位被重新设置后才能接收中断,这一过程叫开中断。关中断和开中断都是由硬件实现的。
2.中断类型与中断优先级
根据中断源产生的条件,可把中断分为内中断和外中断。
外中断指来自处理机和内存外部的中断,包括I/O设备发出的中断、外部信号中断、各种定时器引起的时钟中断以及调试程序中设置的断点等引起的调试中断。
内中断主在指在处理机和内存内部产生的中断。内中断一般称为陷阱。它包括程序运算时引起的各种错误,如地址非法、数据溢出、用户执行特权指令指令等等,分时系统的时间片中断以及从用户态转入到核心态的切换等。
根据系统对中断处理的需要,操作系统一般对不同的中断赋予不同的处理优先级,以便在不同的中断同时发生是,按轻重缓急进行处理。各中断源的优先级在系统设计时给定,在系统运行时是固定的。
3.中断响应与中断处理
中断响应只能发生在两条相继的机器指令执行的间隙。如图1-6所示。

每当CPU执行完成一条指令,便立去查询有无中断请求。若无,则继续执行下一条指令。若有,则转入相应的中断处理程序。
系统一旦响应中断,便开始中断处理过程,它的主要工作是保护被中断程序的现场,以便以后可以恢复现场,保证现行程序能得到正确的执行,然后转去执行相应的中断处理子程序,系统为每类中断源都预先安排好了中断处理子程序,它的入口程序地址存于固定的存储单元中。

1.2.5 处理机状态及特权指令

1. 处理机的状态
在计算机系统中有两类程序运行:用户程序和系统程序。用户程序、系统程序执行时有不同的权限。
根据对系统资源和机器指令的使用权限,把处理机执行时的工作状态分为核态和用户态,有的操作系统还将系统程序执行时的机器的状态又分为核态和管态。其权限次序是:核态、管态、用户态。
核态(Kernel Mode): CPU执行操作系统程序时所处的状态。
在此状态下允许CPU使用全部资源和全部指令,其中包括一组特权指令(如涉及外设的I/O、改变处理机状态、修改存储保护的指令),实现对系统资源的分配与管理,为用户提供使用外部设备的服务。
管态比核态的权限低,在此状态下允许使用一些用户态下不能使用的资源,但不能使用修改CPU状态的指令。无核态时,管态执行核态的全部功能。
用户态(User Mode): 用户程序执行时CPU所处的状态。在此状态下禁止使用特权指令,不能直接使用系统资源与改变CPU状态,并且只能访问用户程序所在的存储空间。
当CPU执行用户程序时,CPU处于用户态,在执行的过程中出现了中断(或自陷)时,系统转去处理与中断有关的事件,这时CPU由用户态转换成核态(或管态),处理完中断后,返回断点继续执行用户程序,这时CPU由核态转换成用户态。
2.特权指令集
在核态下操作系统可以使用所有指令,包括一组特权指令:
允许和禁止中断;
在进程之间切换处理机;
存取用于内存保护的寄存器;
执行输入和输出操作;
停止一个中央处理机的工作。
在下列情况下,由用户态转向核态:
用户程序要求操作系统的服务,系统调用;
发生一次中断;
在用户程序中产生了一个错误的状态;
在用户程序中企图执行一条特权指令;
从核态转回用户态用一条指令实现,这条指令也是特权指令。一般情况下是中断返回指令。

1.3 操作系统的形成和发展

为了更好的理解操作系统的基本概念和功能,让我们首先回顾一下操作系统的形成和历史发展过程。
一个事物的产生总是有它的原因和其必然性的,操作系统也不例外。操作系统是伴随着计算机的产生而产生,并且随着计算机技术及其应用的发展而不断发展和完善的。随着计算机硬件经历从电子管时代、晶体管时代、集成电路时代、大规模和超大规模集成电路的发展历程,操作系统也完成了从无到有,从简单到复杂的演变过程。根据硬件结构和应用环境的需要,操作系统的发展经历了以下几个阶段:手工操作阶段、批处理系统、多道程序系统、现代操作系统等。

1.3.1 操作系统发展的基础

1.计算机体系结构的发展
计算机体系结构经历了从简单到复杂、从单机到多机、从集中到分散式的发展,它所依赖的物质基础是微电子技术和超大规模集成技术,也即硬件资源的发展促进了计算机体系结构的发展。
硬件体系结构的发展,给管理各种硬件资源提出了更高的要求,对系统各部分(I/O系统、主机系统、存储子系统、网络子系统)要进行人工管理是不可能的,需要有一个超强功能的软件来组织和统一协调各个部件的工作,这就是操作系统。
2.计算机软件资源的发展
软件的发展有两个重要的方面:一是支持用户进行系统开发,二是增强系统的管理和服务。计算机高级语言及其编译系统的发展打开了应用领域的大门,推动了应用系统的开发,随之而来的各种服务程序、实用程序、工具程序、娱乐程序使计算机系统中的资源概念发生了变化,资源不仅仅指硬件资源,还包括上述各类软件,以及由数据组成的数据库,文档信息等,这就是软件资源,对软件资源的管理和支持,操作系统同样责无旁贷。
3.应用环境与需求的发展
计算机用户的需求随着应用领域的扩大和深入,对计算机系统的要求也在改变。一般来说,希望系统的功能越强越好,系统的接口尽可能简单,速度尽可能快,最好能共享各种系统资源,有较高的可靠性和有效性,并且能按用户的需求重新组构或扩充等。而上述需求仍然在不断的变化,从而从另一方面促进了操作系统的发展。

1.3.2 手工操作阶段

从在20世纪40年代中期,数学家冯·诺依曼(John Von Neuman)提出了程序的概念,先后设计建造了电子管数字计算机,其主要特点是:计算机的主要器件是电子管,以汞延迟线、磁芯、磁环作为主存储器,以磁鼓或磁带作为外部存储设备,计算机总体结构以运行器为中心。这种计算机体积庞大,耗能严重,速度极慢,且价格昂贵。这时没有编程语言,上机完全是手工操作,操作系统更是闻所未闻,编程全部采用机器语言,通过在一些插板上的硬连线来控制其基本功能,计算机主要用于数值计算。
这种手工式处理方式存在着明显的缺点:
(1)上机用户独占全部资源,其他用户只能等待。
(2)手工操作的出错率比较高。
(3)随着计算机运行速度的提高,计算机的高速与慢速的手工操作之间形成矛盾。
直到50年代初期,出现了穿孔卡片,这时就可以不用插板,同时出现了脱机的输入/输出技术。该技术是指在进行程序的调试与执行时,程序员事先把写有程序的卡片装入卡片输入机,在一台外围机的控制下,把卡片上的数据输入到磁带上,当CPU需要时,再从磁带上把程序和数据送进计算机,然后启动计算机运行。类似,当需要输出时,可由CPU直接把数据送到磁带上,然后再在另一台外围机的控制下,将磁带机上的结果通过相应的输出设备输出。由于程序和数据的输入和输出都是在外围机的控制下完成的,或者说它们是在脱离主机的情况下进行的,故称为脱机输入/输出方式;反之,在主机的直接控制下进行的输入/输出的方式称为联机输入/输出方式。

1.3.3 批处理系统

批处理系统是一种早期的大型机用操作系统。不过,现代操作系统大都具有批处理功能。批处理系统的特点是采用脱机服务方式,即用户将控制作业的意图、数据以及程序利用系统提供的作业控制命令书写成作业说明书提交给操作员,操作员将其输入外存,由OS控制、调度各作业的运行,最后输出结果。它是一种非人工的干预方式。有单道和多道批处理系统。
1.单道批处理系统
五十年代后期,推出了晶体管计算机,计算机的运行速度得到了很大提高,外部存储设备除磁鼓、磁带外,引入了磁盘。这个时期的计算机被称为第二代计算机。在此期间,程序和编程语言得到较大的发展。这个时期,计算机安装在专门的机房,有专人操作。然而,慢速的手工操作和高速的计算机运行之间的矛盾越来越严重,变得让人无法忍受。另外计算机硬件仍然十分昂贵,需要最大限度的利用机器资源。人们为了提高利用率,减少机时的浪费,于是出现了批处理操作系统的概念。
单道批处理系统的中心思想是使用一个称作监督程序的软件,通过使用这个软件,用户不再直接访问机器,而是把程序和数据以及用户对程序的控制意图写在卡片或磁带中,以作业的形式提交给计算机操作员,由操作员把这些作业按顺序组织成一批,并将整批作业放在输入设备上,供监控程序使用。首先,监控程序将磁带上的第一个作业装入内存,该作业完成处理后返回到监控程序,然后,监控程序自动加载下一个作业。这样在监控程序的控制下,系统可以连续运行,一直到这批作业处理完毕。这里的监控程序也就是操作系统的雏形。由于系统对作业的处理是成批进行的,且在内存中只能保持一道作业运行,故称之为单道批处理系统。
这种监督程序可以使作业间自动转换,减少了作业交接时间的浪费,但是它还没有真正形成对作业的控制和管理。如果一个用户的计算机作业非常庞大,在它运行期间,它将独占计算机系统所有资源,在它运行完成之前,任何其它用户的作业,哪怕是很短的作业也只能等待。
单道批处理系统提高了CPU的利用率,减少了操作员手工操作的出错率,比起人工操作有了很大的进步,单道批处理系统具有以下几个特征:
(1)自动性。如果情况顺利,磁带上的作业能够自动依次运行,无需人工干预。
(2)顺序性。磁带上的各道作业按照一定的顺序进入内存。
(3)单道性。监督程序每次只从磁带上调入一道作业进入内存运行,内存中仅有一道作业运行。
2.多道程序系统
进入60年代初期,计算机的应用形成两个领域,即面向科学与工程的复杂计算和面向字符处理的商务应用。为此,出现了通用计算机。这个时期被称为第三代计算机。其主要特点是:以中、小规模集成电路作为逻辑器件,主存储器除磁芯外,开始使用半导体存储器,外存储设备则以磁盘为主。著名的IBM Syetem360计算机则是一个代表,它是第一台采用集成电路的计算机,比第二代计算机有更好的性能价格比,也是一台大型通用计算机。通用计算机要达到通用性,必须功能强大,能够满足环境应用要求,处理和适应各种设备环境,才能发挥极大效能。所以必须有一个强有力的、功能复杂的监控程序来监管和协调系统的所有操作,安排和调度用户所提交的作业,分配系统所共用的各种软件和硬件资源。初始的监督程序不能完成这些功能,继而进一步发展成为一个强功能的程序集合,即现在所说的操作系统。
在IBMSystem 360上运行的OS/360操作系统被认为是真正的操作系统。因为它真正实现了资源管理,建立了资源管理的机制,直到现在,许多操作系统中的技术和结构还多少留有它的影子。尽管0S/360存在较大的隐患和不足,但它引入了—种新技术-多道程序技术,即在内存中同时存放多个程序使它们同时处于运行状态。在单处理机系统中,多道程序运行的特点是:
(1) 多道:计算机内存中同时存放多道相互独立的程序。
(2) 宏观上并行:同时进入系统的几道程序都处于运行过程中,即它们先后开始了运行,但都未运行完毕。
(3) 微观上串行:实际上,各道程序轮流使用CPU,交替执行。
图1-7(a)是单道程序运行过程,其中t2-t3和t6-t7两段时间内处理机在等待。图1-7(b)是两道程序运行过程(假设A、B程序请求的设备不同),其中t4-t5和t8-t9两段时间内处理机在等待,但是t2-t3和t6-t7两段时间内用户程序和外设在并行工作。显然,在多道程序系统中,CPU和外设之间可以并行运行,大大提高了CPU的利用率,从而提高了系统资源的利用率,这正是引入多道程序的目的。

下面我们用一个具体的例子来说明多道程序的运行过程与单道程序的差别。

例1-1: 设有A、B、C三道程序,其执行过程分别如下:
A:C11=30ms I12=40ms C13=10ms
B:C21=60ms I22=30ms C23=10ms
C:C31=20ms I32=40ms C33=20ms
其中,Cij表示内部计算过程,Iij表示I/O操作,三者的优先权顺序为ABC。
假设调度和启动I/O的执行时间忽略不计,同时假设每道程序请求的外设不冲突。如果是单处理机系统,三道程序顺序执行完成需花多少时间?如果是多道程序系统,三道程序同时驻留内存,完成三道程序执行共需多少时间?
解:三道程序并发执行时的工作情况如图1-8所示。其中只画出了三道程序在CPU上的程序情况,省略了外设的工作情况,阴影部分是CPU空闲时间。

由题可知,三道程序顺序执行完成需花费260ms。如果是多道程序系统,三道程序同时驻留内存,完成三道程序共需180ms。三道程序在执行过程中形成了一种重叠的运行方式,完成三道程序的执行,多道比单道节省了80ms。
3. 多道批处理系统
单道批处理系统克服了手工操作的缺点,实现了作业的自动过渡,但在单道批处理系统中,同一时刻内存中仅有一道作业运行。就有可能出现两种情况:对于以计算为主的作业,输入输出量少,外围设备空闲;然而对于以输入输出为主的作业,又会造成主机空闲。这样计算机资源的利用效率仍然不高。为了进一步提高资源的利用率,在60年代中期引入了多道程序设计技术,由此形成了多道批处理系统。
多道批处理系统具有以下几个特征:
(1)多道性。计算机内存中同时存放几道相互独立的程序。
(2)无序性。多个作业完成的先后顺序与他们进入内存的顺序并不是严格对应的。后进入内存的程序有可能比先进入内存的程序先完成。
(3)调度性。作业从提交给系统开始到完成需要两级调度,作业调度和进程调度。
随着多道批处理系统的出现,操作系统的发展更趋于完善了,如今它仍是三大基本操作类型之一。这也说明它具有其他类型的操作系统所不具备的优点:
(1)资源利用率高。内存中多道程序可以共享资源。
(2)系统吞吐量大。系统吞吐量是指系统在单位时间内所完成的总工作量。
由于在批处理操作系统中,CPU和其他资源能够保持忙碌状态,只有当作业完成或出错时才进行切换,从而减小了系统开销。
但是批处理系统中无交互能力。在批处理系统中,用户以脱机方式使用计算机,即用户在提交作业以后到作业完成这个过程中,无法进行干预,这样对于修改和调试程序存在很大障碍。
第二代的计算机主要用于科学计算,程序大多用FORTRAN语言和汇编语言编写。典型的操作系统是FMS(FORTRAN Monitor System)和IBM为7094机配备的IBSYS操作系统。

1.3.4 分时系统

多道程序系统解决了资源利用率的问题,但随着计算机的普遍使用,早期的批处理暴露了它的缺陷,如一个作业从提交到取回运行结果往往要很长时间。对于程序员更不能忍受的是,一个误用的逗号就会导致编译失败,程序员必须重新提交,重新等待,浪费很长的时间。同时越来越多的用户希望在使用计算机的过程中能够进行非常方便的人机交互,也就是说可以在程序运行时直接对计算机进行控制。除此之外,很多用户还十分怀念手工操作阶段自己可以独占计算机的良好感觉。用什么办法能使得既能保证计算机效率,又能方便用户使用呢?在20世纪60年代中期,随着键盘、显示器、和显示终端等交互设备的问世,以及计算机的小型和微型化,使用户可以直接与机器打交道,也使得这种愿望成为可能。第一个分时系统CTSS出现了,它是由麻省理工学院开发的。在分时系统中,一台计算机可以同时连接多个带有显示器和键盘的用户终端,同时允许用户通过自己的终端,以交互方式使用计算机,共享主机中的资源。由于调试程序的用户常常只发出简短的命令,而很少执行费时长的命令,所以计算机能够为一些用户提供快速的交互式服务,同时在CPU空闲时还能运行后台的大作业。比较著名的多用户分时系统是UNIX系统。
分时系统采用了分时技术,就是把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各个联机程序使用。若某个程序在分配给它的时间片内不能完成其任务,则该程序暂时中断,把处理机让给另一程序使用,等待下一轮时再继续运行。由于计算机速度很快,程序运行轮转的也很快,每个用户都感觉是自己独占了一台计算机,同时又可以通过终端向系统发出各种命令,来控制程序的运行。
分时系统与批处理系统相比,具有完全不同的特点:
(1)交互性。用户可以通过终端方便的进行人机对话,可以请求系统提供各种服务,特别对于远程终端用户,可以直接在自己的终端上提交、调试和运行程序。
(2)多用户同时性。允许在一台主机上连接多台终端,多个用户通过轮流运行自己的时间片来共享计算机资源。
(3)独立性。每个用户通过自己的终端独立使用计算机,都感觉自己一个人独占计算机资源。
(4)及时性:系统能及时响应用户的请求,这时的及时是指用户的请求能在用户能接受的时间范围内得到响应,这一范围通常为2~3秒。
分时和多道程序设计引发了操作系统中的许多问题。 如果存储器中有多个程序,必须保护它们不互相干扰,例如不会修改别人的数据。对多个交互用户,必须对文件系统进行保护,只有授权用户才可以访问某个特定的文件。还必须处理资源(如打印机)争用的问题。这些问题和其他问题以及可能的解决方法,在本书的后面部分会一一阐述。

1.3.5 实时系统

分时系统的出现解决了用户方便实用的需求,然而用户的需求是不断变化的。随着计算机的应用范围的扩大,计算机越来越多地被用于生产过程的控制和武器系统的实时控制。这两种控制系统都要求能实时采集现场数据,并对所采集的数据进行及时处理,进而自动控制相应的执行机构,以保证正常执行。除此之外,人们还经常需要对外来的实时信息进行控制,比如说飞机订票系统和银行业务系统。无论是生产过程的实时控制还是外来信息的实时控制,都要求系统能够在允许的时间范围内作出响应,并且对系统的可靠性要求也比较高,这样就导致了实时系统的出现。
实时就时“立即”或“及时”,具体的含义是指系统能够及时响应随机发生的外部事件,并以足够快的速度完成对事件的处理。实时系统的应用环境是需要对外部事件及时响应并处理的那些场合。按使用场合和作用,可以分为两类:
(1)实时控制系统:把计算机用于对飞行器,导弹发射等军事方面的自动控制,这时计算机要把测量系统测得的数据及时加工,并及时输出结果对目标进行跟踪或向操纵人员显示结果。
它主要的特点是:与被控制过程的速度相比,其反应速度足够快,工作安全可靠,容错机制比较完善,即使系统中软硬件发生故障,系统也能安全运行,操作简便。
(2)实时信息处理系统:把计算机用于预订飞机票,查询航班、航线、票价等事宜时,或把计算机用于银行系统、情报检索系统时,都要求计算机能对终端发来的服务及时予以正确的回答。
实时系统的主要特点是即时响应和高可靠性。实时系统的响应时间一般在秒级、毫秒级甚至更小。因为在一些关键系统中(如飞机的自动驾驶系统),信息处理的延误往往会带来不堪设想的后果。而可靠性在实时系统中比在非实时系统中更重要。非实时系统中的暂时故障可以简单地通过重新启动系统来解决,但实时系统是实时地响应和控制事件,性能的损失或降低都可能产生巨大的灾难,从资金损失到毁坏主要设备甚至危及生命。因此,在实时系统中,往往都采用了多级容错措施来保障系统的安全性及数据的安全性。
另外,用户控制在实时操作系统中通常比在普通操作系统中更广泛。在典型的非实时操作系统中,用户或者对操作系统的调度功能没有任何控制,或者仅提供了概括性的指导,诸如把用户分成多个优先级组。但在实时系统中,允许用户细粒度地控制任务优先级是必不可少的。用户应该能够区分硬任务和软任务,并且在每一类中确定相对优先级。实时系统还允许用户指定一些特性,例如使用页面调度还是进程交换、哪一个进程必须常驻主存、使用何种磁盘传输算法、不同优先级的进程各有哪些权限等。
实时系统其他的例子还包括机器人、空中交通管制,下一代系统还将包括自动驾驶汽车、具有弹性关节的机器人控制器、智能化生产中的系统查找、空间站和海底勘探等。
通常把批处理系统、实时系统和分时系统称为操作系统的三种基本类型。一些计算机系统兼有它们三者或其中二者的功能。
表1-1从多路性、独立性、及时性、交互性及可靠性几个方面列出了批处理系统、实时系统和分时系统的不同之处。

随着多道程序技术的推广及应用,后期的操作系统具有了多种方式和类型。多道批处理系统和分时系统的不断改进,实时系统的出现致使操作系统日益完善。在此基础上出现了通用操作系统。也就是说在一种操作系统中同时具有了批处理、分时处理和实时处理的功能。至此,操作系统的基本概念、功能、基本结构和组成都已经形成并日趋完善。
引入多道程序技术提高了系统资源的利用率,但同时要求有专门的软硬件机构来支持多道程序,支持内存的分块及防止作业的相互干扰。因此,这种通用操作系的设计是极其复杂的,隐患极多,难以排除,操作系统的设计者不得不以版本更新的方式来清除原版本中的隐患并增加新的功能。

1.3.6 个人操作系统

随着微电子技术和VLSI技术的迅速发展,大规模和超大规模集成技术用于计算机,将运算器、控制器和相应接口集成在—块基片上,产生了微处理器。计算机硬件价格急速下降,按照计算机硬件分代的概念趋于模糊,计算机的体系结构趋于灵活、小型、多样化。小型、微型计算机在运算速度、存储容量、外存容量和I/O接口等方面有了很大的发展。许多原来只有在大型计算机上实现的技术,逐步下移到小、微型计算机上,出现了面向个人用户的计算机,简称PC机,并同时向便携式计算机发展。计算机直接与用户交互,系统操作界面更加友好、灵活方便,功能支持更加强大,可靠性高、体积小、价格低,得到了越来越广泛的应用。此时的软件系统(包括操作系统)要求面向用户,使用户操作更方便灵活,无需了解计算机硬件及其内部操作。自1984年APPLE公司的Macintosh计算机系统引入图形界面(GUl)以来,视窗操作和视窗界面得以大大发展,从而形成了操作系统的用户界面管理功能模块。这个时期(1980一1994)被认为是第四代计计算机系统的发展过程,其配置的操作系统被称为现代操作系统。
个人计算机上的操作系统是一种联机的交互式的单用户操作系统。由于是个人专用,因此在多用户和分时所要求的对处理机调度、存储保护方面将会简单的多。然而,由于个人计算机的普及,对于提供更为方便友好的用户接口的要求会愈来愈迫切。随着多媒体技术的引入,要求计算机有一个具有高速数据处理能力的实时多任务操作系统。
目前,个人计算机操作系统层出不穷,它们有MS-DOS,UNIX,Linux,OS/2,WINDOWS,MAC等,其中有代表性的是MS—DOS,WINDOWS和UNIX、Linux。个人操作系统使计算机的使用环境和开发平台越来越灵活和高效。多媒体技术的出现和多媒体数据与信息的处理,给个人计算机操作系统提出了更高的要求。个人计算机操作系统要满足应用领域的各种要求,要满足信息社会中多种媒体信息的处理,要提供更灵活更友好的用户界面,它必须提供新的功能,支持各种不同类型的外部设备,这样的操作系统才会受到用户的欢迎,才会有强有力的生命力。

1.3.7 网络操作系统

由于网络的出现和发展,现代操作系统的主要特征之一就是具有上网功能。网络操作系统是建立在计算机网络的基础上的。通过通信设施将物理上分散的多个计算机系统互连起来,实现信息交换、资源共享、可互操作和协作。它具有这样的特征:
(1) 计算机网络是一个互连的计算机系统的群体。这些计算机系统在物理上是分散的,可在一个房间里、在一个单位里、在一个城市或几个城市里、甚至在全国或全球范围。
(2) 这些计算机是自治的,每台计算机有自己的操作系统,各自独立工作,它们在网络协议控制下协同工作。
(3)系统互连要通过通信设施(硬件、软件)来实现。
(4)系统通过通信设施执行信息交换、资源共享、互操作和协作处理,实现多种应用要求。互操作和协作处理是计算机网络应用中更高层次的要求特征。它需要有一个环境支持互连的网络环境下的异种计算机系统之间的进程通信,实现协同工作和应用集成。
网络操作系统与单处理机的操作系统没有本质的区别。它们需要一个网络接口控制器以及一些低层软件来驱动它,同时还需要一些程序来进行远程登陆和远地文件访问,但这些附加物并未改变操作系统的本质结构。网络操作系统的研制开发是在原来各自计算机操作系统的基础上进行的。按照网络体系结构的各个协议标准进行开发,包括网络管理、通信、资源共享、系统安全和多种网络应用服务等达到上述诸方面的要求。

1.3.8 分布式操作系统

粗看起来,分布式系统与计算机网络系统没有多大区别。分布系统也可以定义为通过通信网络将物理上分布的具有自治功能的数据处理系统或计算机系统互连起来,实现信息交换和资源共享,协作完成任务。但是有这样一些明显的区别应予考虑:
(1)作为计算机网络,现在已制定了明确的通信网络协议体系结构及一系列协议族。无论是广域网WAN、局域网LAN,即ISO/OSI开放式系统互连体系结构及一系列标准协议(或IEEE、CCITT相应的标准等),计算机网络的开发都遵循协议,而对于各种分布式系统并没有制定标准的协议。当然,计算机网络也可认为是一种分布式系统。
(2)分布式系统要求一个统一的操作系统,实现系统操作的统一性。为了把数据处理系统的多个通用部件合并成为一个具有整体功能的系统,必须引入一个高级操作系统。各处理机有自己的私有操作系统,必须有一个策略使整个系统融为一体,这就是高级操作系统的任务。它可以有两种形式出现,一种形式是在每个处理机的私有操作系统之外独立存在,私有操作系统可以识别和调用它,另外一种是在各处理机私有操作系统的基础上加以扩展。对于各个物理资源的管理,高级操作系统和各私有操作系统之间,不允许有明显的主从管理关系。在计算机网络中,实现全网的统一管理的网络管理系统已成为越来越重要的组成部分。
(3)系统的透明性。分布式操作系统负责全系统的资源分配和调度、任务划分、信息传输控制协调工作,并为用户提供一个统一的界面,标准的接口,用户通过这一界面实现所需要的操作和使用系统资源,至于操作定在哪一台计算机上执行或使用哪台计算机的资源则是系统的事,用户是不用知道的,也就是系统对用户是透明的。但是对计算机网络,若一个计算机上的用户希望使用另一台计算机上的资源,则必须明确指明是哪台计算机。
(4)分布式系统的基础是网络。它和常规网络一样具有模块性、并行性、自治性和通用性等特点,但它比常规网络又有进一步的发展。因为分布式系统已不仅是一个物理上的松散耦合系统,同时还是一个逻辑上紧密耦合的系统。分布式系统由于更强调分布式计算和处理,因此对于多机合作和系统重构、健壮性和容错能力有更高的要求,希望系统有更短的响应时间、高吞吐量和高可靠性。
20世纪90年代出现的网络计算(network computing)的趋势和高速网络的出现已使分布式系统变得越来越现实。特别是SUN公司的Java语言和运行在各种通用操作系统之上的Java虚拟机和Java OS的出现,更进一步加快了这一趋势。另外,软件构件技术的发展也将加快分布式操作系统的实现。

1.3.9 嵌入式操作系统

随着人们对新技术和物质生活的更高追求,操作系统的使用已不仅仅限于计算机领域。近几年,嵌入式系统已经成为了操作系统的一个最新发展趋势。嵌入式系统可以被广泛地用于PDA、移动电话、家用VCD等电子产品中。它们固化在汽车、电梯、电视、录像机、游戏机、CD机等我们身边一切不注意的小东西上。除此之外嵌入式操作系统在工业机器人、医药设备、电话系统、卫星、飞行系统等领域同样扮演了重要的角色。什么是嵌入式操作系统呢?一般来说,嵌入式系统是指那些“执行专用功能并被内部计算机控制的设备或者系统。嵌入式系统不能使用通用型计算机,而且运行的是固化的软件,用术语表示就是固件(Firmware),终端用户很难或者不可能改变固件。也就是说,镶嵌在普通PC
以外的所有电子设备中的操作系统都是嵌入式操作系统。嵌入式系统包括硬件和软件两部分。硬件包括处理器/微处理器、存储器及外设器件和I/O端口、图形控制器等。软件部分包括操作系统软件(OS)(要求实时和多任务操作)和应用程序编程。有时设计人员把这两种软件组合在一起。应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。
嵌入式系统的核心是嵌入式微处理器。嵌入式微处理器一般就具备以下4个特点:
(1)对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核的执行时间减少到最低限度。
(2)具有功能很强的存储区保护功能。这是由于嵌入式系统的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断。
(3)可扩展的处理器结构,以能最迅速地扩展出满足应用的最高性能的嵌入式微处理器。
(4)嵌入式微处理器必须功耗很低,尤其是用于便携式的无线及移动的计算和通信设备中靠电池供电的嵌入式系统更是如此,如需要功耗只有mW甚至μW级。
嵌入式计算机系统同通用型计算机系统相比具有以下特点: 
(1)嵌入式系统通常是面向特定应用的。嵌入式CPU与通用型的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,它通常都具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,移动能力大大增强,跟网络的耦合也越来越紧密。
(2)嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
(3)嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用中对处理器的选择更具有竞争力。
(4)嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。
(5)为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。
(6)嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发。

1.3.10 操作系统的发展趋势

随着计算机技术的飞速发展,新型机器的层出不穷,按照硬件划分时代的概念已经模糊,分代已无多大意义。计算机科学在快速的发展,随着人们对计算机的应用和认识,对于计算机的使用需求更加广泛而复杂,所以操作系统下一步的发展,给我们带来了无限的遐想。当前,操作系统主要的发展类型将趋向:巨型化、微型化、网络化和智能化。

1.4 操作系统的功能和特性

从操作系统的定义可知,操作系统是直接控制和管理计算机软硬件资源的最基本的系统软件,那么操作系统具有哪些功能和与其它软件不同的特点呢?

1.4.1 操作系统的功能

操作系统是计算机系统资源的管理者,如何最大限度的发挥计算机系统资源的使用效率,如何为用户提供一个方便的使用环境是操作系统要解决的主要问题,也是使用计算机的目标。一般情况下我们将计算机资源分为硬件资源和软件资源。前者主要包括处理机、存储器(内存和外存)、输入输出设备。而后者主要包括各种程序和数据,它们都以文件形式存储在外存储器。因此,常规的操作系统通常具有如下五个方面的功能:
1.进程管理
主要是对处理机的管理。为了提高CPU的利用率,采用多道程序技术,为了描述多道程序的并发执行,就引入进程的概念,通过进程管理协调多道程序之间的关系,以使多道程序可以以最高的效率执行,并且使CPU资源得到最充分的利用。主要的功能包括如下
(1)进程控制。在多道程序环境下,每个程序的运行都必须为之对建立一个或几个对应的进程。进程控制主要包括进程的创建、进程的撤消、进程的阻塞与唤醒。
(2)进程的同步控制。引入多道程序后,由于进程之间的相互限制和相互依赖,导致进程之间出现了两种关系:互斥与同步,进程管理必须提供相应的同步机构,协调进程之间的运行,以保证进程执行结果的正确性。
(3)进程通信。多个进程之间具有相互合作的关系,由此它们之间必须交换一定的信息。进程通信的任务就是用来实现相互合作的进程之间的信息交换。
(4)调度。系统中同时存在多个进程,它们都要求得到CPU的处理,进程调度的主要任务就是按照一定的算法,从多个就绪队列中选中一个进程,使之得到执行。
2.存储管理
由于内存的需求量大,而内存价格又昂贵,且受CPU寻址能力的限制,内存容量有限。因此,当多个程序共享内存时,如何为它们分配内存空间,使它们彼此隔离、互不侵扰,并且可以在一定条件下互相调用。当内存不够用时,如何把当前运行的数据及程序即时调出内存,需要运行时再从外存调入内存等等,都是存储管理的任务。
3.设备管理
指除CPU和内存外的所有I/O设备的管理。除了进行实际I/O操作的设备外,还包括诸如设备控制器、DMA(直接存储访问,direct memory access)控制器、通道等支持设备。设备管理的首要任务是为这些设备提供驱动程序或控制程序,以使用户不必详细了解设备及接口的技术细节,就可方便地对这些设备进行操作。其另一个任务就是利用中断技术、DMA技术和通道技术,使外围设备尽可能与CPU并行工作,以提高设备的使用效率,并提高整个系统的运行速度。
4.文件管理
主要指对程序和数据等软件资源进行的管理。程序和数据是以文件的形式存放在外部存储器的,当需要时再把它们装入内存(OS本身也是文件)。文件是软件资源,有效地组织、存储、保护文件,以使用户方便、安全访问它们,如何对文件系统进行优化,这些都是文件管理的任务。
5.用户接口
除对系统资源的管理外,操作系统还必须向用户提供直接使用OS的手段。目前的操作系统都提供三种方式的接口:一种是命令接口,用户可通过该接口向系统发出命令以控制程序运行,该接口又进一步分为联机用户接口和脱机用户接口。前者由一组键盘操作命令以及命令解释程序所组成。后者由一组控制命令组成。第二种是程序接口,即提供一组广义指令(系统调用)供用户程序和其他系统程序调用。每当应用程序要求操作系统提供某种服务(功能)时,便调用具有相应功能的系统调用。第三种是图形接口,这是较晚出现的操作系统提供的,它采用了图形化的操作界面,用非常容易识别的各种图标来将系统的各项功能、各种应用程序和文件直观的标示出来,用户可用鼠标方便完成操作,而不用花费大量时间记忆各种命令的名字与格式,使得计算机操作变得更为方便。目前主流的OS都提供了图形用户的接口。

1.4.2 操作系统的基本特征

尽管每种类型的操作系统都具有自己的特征,但作为现代操作系统,都具有三个重要特征:并发性、共享性和不确定性。这三个特点是互相联系和互相依赖的,他们是互相独立的用户如何使用有限的计算机资源的反映。
1.并发性
并发性是指程序的并发执行,也就是在主存中同时存放多道程序,它们同时处于运行状态。并发性是操作系统的主要特征之一。这种并发性不仅体现在操作系统程序与用户程序一起并发运行,就连操作系统本身的各种程序之间也是并发运行的,它们为用户提供并发服务。
应当指出,通常的程序是静态实体,它们是不能并发执行的。为了使多个程序能够并发执行,在操作系统中引入了进程的概念,来描述程序的执行过程和共享资源的基本单位。关于进程在后面的部分会作详细阐述。
还有一点需要注意的是,并行性和并发性是两个既相似又有区别的概念。并行性指两个或多个事件在同一时刻发生。是针对于多处理机的计算机系统来说的。而并发性指两个或多个事件在同一时间间隔内发生。也就是在单处理机的情况下,宏观上有多个程序在同时运行,但微观上每一时刻仅能有一道程序执行,也就是说这些程序只能分时交替执行。
OS中程序的并发执行使系统变的更为复杂,以致使系统中必须增设若干新的功能模块,分别用于处理机、内存、外设以及文件系统等资源的管理。
2.共享性
并发运行的程序可共享系统资源。这种共享分为两种方式,互斥共享方式和同时访问方式,对于系统中的一些资源,比如打印机,在一段时间里只允许一个进程使用,进程对此资源的共享是互斥的,只有一个进程使用完之后,另一个进程才能够使用。而对于另外一些资源,如磁盘设备,可以被多个进程同时访问。
并发和共享是互为存在的条件,只有程序并发执行,才能谈得上资源共享,反过来,如果不能对资源共享进行有效的管理协调,程序并发执行的效率也会降低,甚至无法执行。
3.不确定性
不确定性,也称为OS的随机性,它是指OS面对的是各类随机事件。在多道程序环境下,允许多个程序并发执行。内存中每个进程在何时获得处理机运行,何时以因某种原因,如打印机请求而暂停,以及进程以怎样的速度向前推进,每道程序总共需要多少时间完成,等等,都是不可预知的。
OS的不确定性是并发与共享的必然结果。人们不能对于所运行的程序的状态以及硬件设备的情况做任何的假定,因而一般来说我们无法确切地知道系统正处于什么状态。为了随机响应和正确无误地处理各种随机事件,OS必须事先安排好对各种可能事件的处理。

1.5 操作系统结构

操作系统是一个庞大的软件工程项目,需要采用工程化的方法进行开发,而一个庞大的软件开发首要的任务就是体系结构的设计。而随着操作系统应用领域的扩大,以及操作系统硬件平台的多样化,操作系统的体系结构也在不断更新。从内核功能和结构特点区分,目前通用机上常见操作系统的体系结构主要有如下几种:模块组合结构、层次结构、微内核结构和虚拟机结构。

1.5.1 模块组合及层次结构

在传统的软件开发中,整个软件的实现以过程集合的方式实现,系统中的每一个过程模块根据它们要完成的功能进行划分,然后按照一定的结构方式组合起来,协同完成整个系统的功能。
操作系统刚开始发展时是以建立一个简单的小系统为目标来实现的,但是为了满足其他需求又陆续加入一些新的功能,因此,操作系统功能由一系列模块堆砌而成,如图1-9所示,任何模块之间可进行任意调用,因此这种操作系统称为整体式内核结构。整体式内核结构的操作系统不进行任何的数据封装和隐藏,在具有较高效率的同时,存在着难以扩展和升级的缺点。CP/M和MS-DOS属于此类结构的操作系统。
为了弥补模块组合结构中模块间调用存在的固有不足之处,就必须减少模块毫无规则的相互调用、相互依赖的关系,尤其要清除模块间的循环调用。从这一点出发,层次结构的设计采用了高层建筑结构的理念,如图1-10,层次式内核结构的操作系统将模块功能划分为不同层次,下层模块封装内部细节,上层模块调用下层模块提供的接口。UNIX,LINUX,VAX/VMS,MULTICS等属于层次结构操作系统。层次化使操作系统结构简单,易于调试和扩展。在分层结构中由于在层与层之间的调用关系是严格遵守调用规则。每一层只能够访问位于其下层所提供的服务,利用它的下层提供的服务来实现本层的功能并为其上的层提供服务,操作系统每执行一个功能,通常要自上而下的穿越很多层,这会降低系统的执行效率。
不管整体式结构,还是层次式结构,它们的操作系统都包括了许多将其用于各种可能领域时需要的功能,故被称为宏内核操作系统,以至可以认为该内核本身便是一个完整的操作系统。以UNIX为例,其内核包括了进程管理、文件系统、设备管理、网络通信等功能,用户层仅仅提供一个操作系统外壳和一些实用工具程序。

1.5.2 微内核操作系统

传统上,所有的操作系统代码都在内核中,这会导致内核中一个错误就会拖累整个系统。例如,由于所有的设备驱动都在内核中,一个有故障的音频驱动就会造成事个系统的停机。相反,如果把整个设备驱动和文件系统分别作为普通用户进程,这模块中的错误虽然会使这些模块崩溃,但是不会使得整个系统死机。为了实现系统的可靠性,将操作系统中能实现最基本核心功能的部分放入内核中,只有这个微小有内核运行在内核态上。由于操作系统核心常驻内存,而微内核结构精简了操作系统的核心功能,内核规模比较小,一些功能都移到了外存上,所以微内核结构十分适合资源相对有限嵌入式的专用系统。微内核操作系统(Microkernel Operating System)结构是多线程的,能支持多处理机运行的系统,故非常适用于分布式系统环境。当前比较流行的、,几乎全部都采用了微内核结构,如 MACH,MachOS, Windows等操作系统。

  1. 微内核操作系统
    如图1-11,在微内核OS中是将很多通用操作的功能从内核中分离出来(如文件系统,设备驱动,网络协议栈等),只保留最基本的内容放入微内核中,另外绝大部分放在微内核外的各种服务器中来实现。微内核结构由一个非常简单的硬件抽象层和一组比较关键的原语或系统调用组成;这些原语,仅仅包括了建立一个系统必需的几个部分;如线程管理,地址空间和进程间通信等。
    (1) 进程(线程)管理
    大多数的微内核OS,对于进程管理功能的实现,都采用“机制与策略分离”的原理。例如,为实现进程(线程)调度功能,须在进程管理中设置一个或多个进程(线程)优先级队列;能将指定优先级进程(线程)从所在队列中取出,并将其投入执行。由于这一部分属于调度功能的机制部分,应将它放入微内核中。应如何确定每类用户(进程)的优先级,以及应如何修改它们的优先级等,都属于策略问题,可将它们放入微内核外的进程(线程)管理服务器中。
    (2)低级存储器管理
    通常在微内核中,只配置最基本的低级存储器管理机制。如用于实现将用户空间的逻辑地址变换为内存空间的物理地址的页表机制和地址变换机制,这一部分是依赖于机器的,因此放入微内核。而实现虚拟存储器管理的策略,则包含应采取何种页面置换算法,采用何种内存分配与回收策略等,将放在微内核外的存储器管理服务器中去实现。


(3) 中断和陷入处理
大多数微内核操作系统都是将与硬件紧密相关的一小部分放入微内核中处理。此时微内核的主要功能,是捕获所发生的中断和陷入事件,并进行相应的前期处理。如进行中断现场保护,识别中断和陷入的类型,然后将有关事件的信息转换成消息后,把它发送给相关的服务器。由服务器根据中断或陷入的类型,调用相应的处理程序来进行后期处理。
2. 微内核操作系统优点
(1) 提高了可扩展性
由于微内核OS的许多功能是由相对独立的服务器软件来实现的,当开发了新的硬件和软件时,微内核OS只须在相应的服务器中增加新的功能,或再增加一个专门的服务器。与此同时,也必然改善系统的灵活性,不仅可在操作系统中增加新的功能,还可修改原有功能,以及删除已过时的功能,以形成一个更为精干有效的操作系统。
(2)增强了可靠性
这一方面是由于微内核是出于精心设计和严格测试的,容易保证其正确性;另一方面是它提供了规范而精简的应用程序接口(API),为微内核外部的程序编制高质量的代码创造了条件。此外,由于所有服务器都是运行在用户态,服务器与服务器之间采用的是消息传递通信机制,因此,当某个服务器出现错误时,不会影响内核,也不会影响其它服务器。
(3)增强了可移植性
随着硬件的快速发展,出现了各种各样的硬件平台,作为一个好的操作系统,必须具备可移植性,使其能较容易地运行在不同的计算机硬件平台上。在微内核结构的操作系统中,所有与特定CPU和I/O设备硬件有关的代码,均放在内核和内核下面的硬件隐藏层中,而操作系统其它绝大部分(即各种服务器)均与硬件平台无关,因而,把操作系统移植到另一个计算机硬件平台上所需作的修改是比较小的。
(4) 提供了对分布式系统的支持
由于在微内核OS中,客户和服务器之间以及服务器和服务器之间的通信,是采用消息传递通信机制进行的,致使微内核OS能很好地支持分布式系统和网络系统。事实上,只要在分布式系统中赋予所有进程和服务器惟一的标识符,在微内核中再配置一张系统映射表(即进程和服务器的标识符与它们所驻留的机器之间的对应表),在进行客户与服务器通信时,只需在所发送的消息中标上发送进程和接收进程的标识符,微内核便可利用系统映射表,将消息发往目标,而无论目标是驻留在哪台机器上。
(5) 融入了面向对象技术
在设计微内核OS时,采用了面向对象的技术,其中的“封装”,“继承”,“对象类”和“多态性”,以及在对象之间采用消息传递机制等,都十分有利于提高系统的“正确性”、“可靠性”、“易修改性”、“易扩展性”等,而且还能显著地减少开发系统所付出的开销。
3. 微内核操作系统存在的问题
应当指出,在微内核OS中,由于采用了非常小的内核,以及客户/服务器模式和消息传递机制,这些虽给微内核OS带来了许多优点,但由此也使微内核OS存在着潜在的缺点。其中最主要的是,较之早期OS,微内核OS的运行效率有所降低。
效率降低的最主要的原因是,在完成一次客户对OS提出的服务请求时,需要利用消息实现多次交互和进行用户/内核模式及上下文的多次切换。然而,在早期的OS中,用户进程在请求取得OS服务时,一般只需进行两次上下文的切换:一次是在执行系统调用后,由用户态转向系统态时;另一次是在系统完成用户请求的服务后,由系统态返回用户态时。在微内核OS中,由于客户和服务器及服务器和服务器之间的通信,都需通过微内核,致使同样的服务请求至少需要进行四次上下文切换。第一次是发生在客户发送请求消息给内核,以请求取得某服务器特定的服务时;第二次是发生在由内核把客户的请求消息发往服务器时;第三次是当服务器完成客户请求后,把响应消息发送到内核时;第四次是在内核将响应消息发送给客户时。
实际情况是往往还会引起更多的上下文切换。例如,当某个服务器自身尚无能力完成客户请求,而需要其它服务器的帮助时,其中的文件服务器还需要磁盘服务器的帮助,这时就需要进行八次上下文的切换。
为了改善运行效率,可以重新把一些常用的操作系统基本功能,由服务器移入微内核中。这样可使客户对常用操作系统功能的请求所发生的用户/内核模式和上下文的切换的次数,由四次或八次降为两次。但这又会使微内核的容量明显地增大,在小型接口定义和适应性方面的优点也有所下降,同时也提高了微内核的设计代价。

1.5.3 虚拟机结构

最初,人们认为分时系统能提供两个功能:①多道程序处理能力;②提供一个比裸机有更方便扩展界面的计算机,提供这个功能的系统被称为虚拟机管理程序,它可以运行在裸机上,并且具备多道程序的功能,向上层提供了若干台虚拟机,如图1-12所示。
这些虚拟机是裸机通过(分时)复用硬件资源时间,得到了相同的硬件复制品,因此每台虚拟机都与裸机相同,所以每台虚拟机上都可以运行一台裸机所能够运行的任何类型的操作系统,不同的虚拟机可以运行不同的操作系统。当每一个操作系统运行用户程序执行一个系统调用时,该调用被陷入到其所在的操作系统上在,而不是虚拟机管理程序上,似乎它运行在实际的机器上,而不是在虚拟机上。
在20世纪90年代,由于人们对虚拟机的复兴,出现了一种新的类型的虚拟机管理程序,如图1-13,与运行在裸机上的虚拟机管理程序不同,这类虚拟机管理程序作为一个应用运行在Windows、Linux或其它操作系统之上,这些系统称为宿主机操作系统。在这虚拟机管理程序启动后,它从安装盘中读入供选择的客体操作系统,并安装在一个虚拟盘上,该盘实际只是宿主操作系统文件系统中的一个大文件。客户端操作系统启动时,它完成在硬件上相同的工作,如启动一些后台进程,然后是GUI。由管理程序翻译客户端的二进制程序,翻译后的程序块可以立即执行。


虚拟化可以在同一台机器上运行不同类型的操作系统,如,一些虚拟机运行大型的批处理系统,另一些运行交互式的分时系统;也可以在同一台机器上运行许多的服务器,如邮件服务器、Web服务器、FTP服务器等,而不会由于一个服务器崩溃,影响到其它的系统;对于Web托管公司可以提供租用虚拟机,一台物理机器就可以运行许多虚拟机,而租用虚拟机的客户端就可以运行自己想用的操作系统和软件,从而支付少量的费用。
虽然虚拟机操作系统有着诱人的特性,但是最突出的一个问题是实现比较困难。如果要实现的是底层硬件的完全拷贝,也即它要模拟硬件几乎所有的特性,那将是相当困难的一件事情。因此现代许多商业虚拟机采用映射部分指令结合直接调用宿主操作系统功能的方法,但这样必然会导致虚拟机性能的损失,所以虚拟机操作系统在业界是属于非主流的,但是在学术界有着重要意义, 因为它是研究操作系统技术的理想平台。

1.6 Linux操作系统

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

1.6.1 Linux发展历程

1991年初, Linus Torvalds(生于1969年12月28日)就读于芬兰的赫尔辛基大学(University of Helsinki),当时他正在学习操作系统设计这门课程,他可以通过终端使用学校提供的是UNIX操作系统服务器,但学校服务器很紧张,Torvalds常常用不上终端。为了能更好地学习计算机知识,Linus 使用贷款购买了一台386 兼容电脑和Minix操作系统。
为了能通过Modem 拨号连接到学校的主机上,并且有更好的性能,直接从硬件启动自己的程序,他使用汇编语言和C语言并利用80386 CPU的多任务特性编制出一个终端仿真程序。Torvalds可以使用这个终端仿真程序登录到学校的电脑上,收发、阅读电子邮件,参加Minix讨论组。此后为了把文件保存在磁盘中,查看终端仿真程序下载的文件,他还编写了软盘驱动器、键盘等硬件设备相应的驱动程序,开发了自己的文件系统,为了将自己的文件上传到Minix系统中,他让自己的文件系统可以和Minix文件系统兼容。随着学习的深入,他的系统功能的增加,他认识到 MINIX 系统功能简单,于是,他开始有了编制一个操作系统的想法。
为了能更好地开发这个操作系统,Torvalds决定通过网络寻求帮助,于是1991年7月3日他在一个名为“comp.os.minix”讨论组中发了一个帖子:
“各位网友好! 我现在正在Minix系统下做一个项目,对POSIX标准很感兴趣。有谁能向我提供一个(最好)是机器可读形式的最新的POSIX规则?能有FTP地址就更好了。”
POSIX是Portable Operating System Interface(可移植操作系统接口)的简称,POSIX是由IEEE(Institute of Electrical and Electronic Engineers)操作系统开发标准,POSIX为不同平台下的应用程序提供了相同的API(Application Programming Interface:应用编程接口),一个完全符合POSIX标准的应用程序将能运行在不同的符合POSIX标准的操作系统。
这个帖子引起了赫尔辛基工学院的助教Ari Lemke(阿里·莱姆克)的注意,Ari Lemke表示愿意在他们学校的FTP服务器上为Torvalds提供空间,建一个子目录,以便Torvalds可以把他的操作系统发布上去,让感兴趣的人们下载。
Torvalds全身心地投入到系统的开发中去,他自己回忆说:
“这花费了我大量的精力:编程―睡觉―吃饭(饼干)―编程,那个夏天我除了伏在电脑面前,其他什么都没做。有时候或许是夜晚?我会从床上爬起来,直接坐到离床仅几英尺远的电脑旁。毫不夸张地说,我和电脑之外的世界几乎没有任何联系”
1991年9月17日,这是计算机发展史上值得纪念的一天, Torvalds将自己的开发的系统源程序完整地上传到FTP服务器上,供大家下载测试。Torvalds将这个具有划时代意义的操作系统命名为:Linux,v0.01版本。
在开始发布源代码时,Torvalds就制定了这样的版权规则:
(1)任何人可以免费使用该操作系统,但不得将其作为商品出售;
(2)任何人可以对该操作系统进行修改,但必须将其修改以源代码的形式公开;
(3)如果不同意以上规定,任何人无权对其进行复制或从事任何行为。
显然,Torvalds在Linux诞生时确定的版权规则体现了开放源代码运动的基本思想,在Linux诞生的初期有力地促进了它的传播、发展、完善,吸引网络上越来越多的程序高手加入到Linux的测试、开发中来。但是,由于这里的版权规则禁止销售Linux,实际上又阻碍了Linux的推广、传播,因为软件分发需要时间、精力、物质、资金的投入,如果一味禁止分发者获得回报,必然阻碍Linux的推广和传播,使得Linux最终局限在计算机软件爱好者的小范围内传播,无法到达普通计算机用户手中。
不久,Linux的机遇又出现了。Torvalds有机会聆听了自由软件运动之父Richard Stallman (理查德·斯托曼,生于1953年)的一次演讲,促使他考虑转向GNU的GPL(通用公共许可证, General Public License,即“反版权” 概念)。
从0.12版本开始,Torvalds把GNU GPL作为Linux的版权声明,把Linux奉献给了自由软件,奉献给了GNU,从而铸就了包括Linux在内的自由软件今天的辉煌。从此,Linux走上迅速发展的康庄大道。

1.6.2 Linux特点

1.多用户、多任务
Linux支持多个用户同时使用同一台计算机,用户可以分为不同的类型,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务是指Linux可以同时同时并独立地运行几个任务,它可以在还未执行完一个任务时又执行另一项任务。Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Windows系统,用户可以使用鼠标对其进行操作。
2.免费、开源
Linux是一个免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变。这让Linux吸收了无数程序员的精华,不断壮大。
另外,由于Linux源代码公开,也使用户不用担心有“后闸”等安全隐患。同时,给各教育机构提供极大的方便,从而也促进了Linux的学习、推广和应用。
3.系统安全、稳定
Linux的内核采用模块化机制,内核高效、稳定,其设计非常精巧,分成进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分;其独特的模块机制可根据用户的需要,实时地将某些模块插入或从内核中移走,使得Linux系统内核可以裁剪得非常小巧,很适合于嵌入式系统的需要。
Linux采取了许多安全技术措施,其中有对读、写进行权限控制、审计跟踪、核心授权等技术,这些都为安全提供了保障。
4.丰富、安全的网络功能
互联网是在Unix的基础上繁荣起来的,Linux是类Unix的操作系统,支持各种标准的Internet网络协议,其网络功能也非常强大。Linux的网络功能和其内核紧密相连, Linux中大量网络管理、网络服务等方面的功能,可使用户很方便地建立高效稳定的防火墙、路由器、工作站、服务器等。为提高安全性,它还提供了大量的网络管理软件、网络分析软件和网络安全软件等。
5.支持多种平台
Linux能支持x86、ARM、MIPS、ALPHA和PowerPC等多种体系结构的微处理器。目前已成功地移植到数十种硬件平台,几乎能运行在所有流行的处理器上。完全兼容Unix目前,在Linux中所包含的工具和实用程序,可以完成UNIX的所有主要功能。
此外,Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。嵌入式Linux为开发者提供了一套完整的工具链(Tool Chain),能够很方便地实现从操作系统到应用软件各个级别的调试。。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。另一方面,由于Linux有很好的文件系统支持(例如,它支持Ext2、FAT32、romfs等文件系统),是数据备份、同步和复制的良好平台,这些都为开发嵌入式系统应用打下了坚实的基础。
6.Linux的不足
由于在现在的个人电脑操作系统行业中,微软的Windows系统仍然占有大部分的份额,绝大多数的软件公司都支持Windows。这使得Windows上的应用软件应有尽有,而其他的操作系统就要少一些。
软件支持的不足是Linux最大的缺憾,但随着Linux的发展,越来越多的软件厂商会支持Linux,它应用的范围也越来越广。可以预见这只小企鹅的前景将是十分光明的。
1.6.3 Linux内核结构
Linux采用模块机制,可以方便地将模块装入内核或从内核中卸下。整个Linux系统内核由许多过程组成,每个过程可以独立编译,然后用连接程序将其连接为单独的目标程序,每个过程对其他过程都是可见的,不同的人可参与不同过程的开发。
Linux内核由5个主要的子系统组成,如图1-14所示。
(1)进程调度(SCHED)子系统控制着进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程是指仅等待CPU资源的进程,如果某个进程在等待其他资源,则该进程是不是可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。
(2)内存管理(MM)子系统允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的时候,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将当前使用的程序块保留在内存中,其余的程序块则保留在磁盘上。必要时,操作系统负责在磁盘和内存之间交换程序块。
内存管理从逻辑上可以分为与硬件无关的部分和与硬件相关的部分,与硬件无关的部分提供了进程的映射和虚拟内存的对换;与硬件相关的部分为管理内存硬件提供了虚拟接口。
(3)虚拟文件系统(Virtual File System,VFS)隐藏了各种不同硬件的具体细节,为所有设备提供了统一的接口,VFS还支持多达数十种不同的文件系统,这也是Linux较有特色的一部分。
虚拟文件系统分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如EXT2,FAT等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。
(4)网络接口(NET)子系统提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序两部分。网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备进行通信,各种可能的硬件设备都有相应的设备驱动程序。
(5)进程间通信(IPC)子系统支持进程间各种通信机制。
从图1-14可以看出,处于中心位置的是进程调度,所有其他的子系统都依赖于它,因为每个子系统都需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进城被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功的完成消息的发送,当消息被发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其他子系统(内存管理、虚拟文件系统及进程间通信)以相似的理由依赖于进程调度。除了图1-12所显示的依赖关系外,内核中的所有子系统还要依赖一些共同的资源,这些资源包括所有子系统都用到的过程,例如,分配和释放内存空间的过程,打印警告或错误信息的过程,系统的调试例程等等。这些过程在图中没有显示。

操作系统(一)——绪论相关推荐

  1. 408 知识点笔记——操作系统(绪论、进程管理)

    文章目录 1 绪论 2 进程管理 1 绪论 [实时操作系统] 实时的含义是指计算机对于外来信息能够以足够快的速度进行处理,并在被控制对象允许的时间范围内做出快速反应 实时操作系统的主要特点是提供 及时 ...

  2. 操作系统 - 1. 绪论

    目录 操作系统基本概念 概念 特征 功能 操作系统的分类与发展 手工操作 单道批处理系统 多道批处理系统 分时系统 实时系统 操作系统的运行环境 CPU 运行模式 中断和异常的处理 系统调用 程序的链 ...

  3. 笔记本实体机安装FreeBSD操作系统(KDE-Plasma5桌面环境+NVIDIA显卡驱动)

    笔记本实体机安装FreeBSD操作系统 1.绪论 2.安装过程 2.1 刻录FreeBSD启动U盘 2.2 安装xorg服务以及nvidia显卡驱动程序 2.3 安装sddm管理器以及KDE-plas ...

  4. STM32实现四驱小车(一)硬件与软件准备

    目录 一. 绪论 二. 轮式机器人概述 三. 硬件准备 1. 机械底盘 2. 电机选择 3. 驱动板 4. 传感器 5. 电池 四. 软件准备--UCOS-III操作系统 一. 绪论 匆匆忙忙的202 ...

  5. 《Operating System Concepts(操作系统概念)》课程学习(1)——Chapter 1 Introduction(第1章 绪论)

    操作系统概念 Operating System Concepts 说起操作系统,我想在坐的各位同学都不会陌生.因为无论我们想用计算机干什么,首先要做的就是启动操作系统,任何软件的运行都离不开操作系统的 ...

  6. 【操作系统】第一章 绪论

    你好呀,这里是初九,感谢你的支持与关注,一起努力学习吧~ 本文目录 1.0 导语 1.1 操作系统做什么? 1.2 计算机硬件系统的组成 1.3 计算机系统的体系结构 1.4 OS的执行 1.5 OS ...

  7. Linux操作系统基础教程 第一章 绪论

    第一章 绪论 一. Unix 家族中的一员 ① UNIX , 1971 年由 AT&T 发布, 73 年重写, 70 年代末, AT&T 成立了 Unix 系统实验室( Unix Sy ...

  8. 操作系统--第一章 绪论(408计算机考研)

    文章目录 零:考纲 1. 操作系统(OS,Operating System)的概念.特征和层次结构 2.操作系统的发展和分类 3.操作系统的运行环境 4.操作系统的体系结构 一:操作系统的基本概念 1 ...

  9. 操作系统第一章笔记---绪论

    本文内容整理自西安交通大学软件学院田丽华老师的课件,仅供学习使用,请勿转载 操作系统系列笔记汇总:操作系统笔记及思维导图汇总附复习建议_Qlz的博客-CSDN博客 文章目录 文章目录 文章目录 本章思 ...

  10. 操作系统 清华大学 向勇 (一)绪论

    index:  1-2 什么是操作系统   1-3 为什么学习OS   1-4 怎么学习操作系统   1-5 操作系统实例   1-6操作系统历史 1-7操作系统的结构 1-2 什么是操作系统 1.没 ...

最新文章

  1. ImageMagick之PDF转换成图片(image)
  2. mysql评论与回复一起查_mysql 查询所有评论以及回复
  3. Eclipse—在Eclipse中如何发布创建的JavaWeb工程
  4. VBA读取固定文件夹中txt内容
  5. nodejs中md5加密模块
  6. css3-d ,动画,圆角
  7. 于歆杰pdf 电路原理_buck电路原理(于歆杰 电路原理pdf)
  8. 英语学习详细笔记(九)分词
  9. win7系统计算机找不到u盘启动,联想f12后没有u盘启动怎么办_联想f12没有usb启动项如何解决-win7之家...
  10. VLC保存网络流到本地和fiddler下载视频
  11. 现代 C++ 编译时 结构体字段反射
  12. cubic算法优化_安卓cpu优化tcp拥塞算法cubic和reno怎么选择?
  13. Hbuilder mui 相册拍照图片上传
  14. 闪耀DTCC | 合作伙伴北京中亦安图倾情加盟 DTCC2018!
  15. 开源海思开发板(HIVIEW开发板)
  16. 9.11 作业自动化安装linux
  17. csdn过滤广告谷歌浏览器插件
  18. css案例 - 评分效果的星星✨外衣
  19. 【Go语言学习】——HTTP客户端和服务端
  20. html更改地图放大缩小图标,百度地图之添加控件——比例尺、缩略图、平移缩放...

热门文章

  1. 电脑分区后,电脑提醒没有权限在此位置保存文件怎么办?
  2. Mac mini 2018 win10 外接显卡终极教程
  3. 电平转换电路的分析-MOS管、三极管
  4. 最低成本DIY视频遥控车方案:ESP32-CAM视频遥控车
  5. R语言dplyr包bind_cols函数把两个dataframe数据的列横向合并起来、最终列数为原来两个dataframe列数的加和(Combine Data Frames)
  6. css实现3D动画效果——正方体变六边形
  7. 用python画六边形
  8. Tomcat-线程模型及设计精髓
  9. 浅析ERP系统--质量
  10. matlab按图像边缘抠图_有哪些高效的抠图方法?