第一章 操作系统概述(四)



1.2 操作系统的发展

操作系统作为一种特殊的软件,伴随着计算机的发展从无到有、从简单到复杂,推动其发展的外部因素主要有两方面:应用和硬件。计算机系统的早期应用需要涉及到从硬件设计、算法设计、程序编写的全部环节,每个应用都要把绝大部分开发力量放在繁琐、重复的底层细节操作上,导致开发周期长、难以调试、运行效率低;正是对于把这些公共的底层操作抽取出来成为一个单独软件集合的努力催生了操作系统,而让应用开发更方便、运行更高效的不懈追求推动了操作系统的持续发展。硬件技术的不断发展既对操作系统的功能提出了新的挑战,也为操作系统的设计和实现提供了新的可能。操作系统的发展又反过来促进了应用和硬件的发展,处理器保护模式的发展,主要动力就是操作系统内核对自身的保护需要;近年来CPU增加的虚拟化技术支持,也是在操作系统以软件方式实现虚拟机后的一种硬件改进。由于操作系统对硬件资源的有效管理和访问接口简化,才使得应用软件脱离了底层细节的束缚,专注于业务逻辑开发和框架结构改进,从而得到快速的发展。

1.2.1 通用操作系统的发展轨迹

在计算机诞生之后的早期,软硬件的研发是一体的,计算机为了特定的计算用途而设计,当需要改变其计算任务时,通过以修改控制板上开关或跳线的方式实现,不存在现代意义的程序,当然也就没有操作系统的概念。当通用的可编程的计算机出现以后,程序设计才成为一个独立的过程逐渐发展。最早的编程形式是把二进制的机器指令序列和数据直接打到穿孔纸带(或纸卡)上,然后计算机利用相应的输入设备从纸带上读入程序和数据。这时的计算机一次只能执行一个任务,用户在一段时间内完全独占计算机资源,等到计算任务完成后,轮到下一个用户人工操作使用。

1、操作系统的雏形——单道批处理系统

作为操作系统雏形出现的“驻留监控”程序(resident monitor)在20世纪50年代出现,随着汇编语言、高级语言等符号语言出现,编程不再是把全部算法逻辑一次性编写成机器语言的程序,而是以文本形式编写源程序,通过汇编/编译、链接等过程形成可以执行的机器语言的程序。一些公共的功能可以先期编写完成,以函数库形式存储在系统中,用户计算任务的执行模式变为:用户提交源程序和数据,源程序经过汇编/编译生成目标程序,经过链接生成可执行,装入执行后读取数据并进行处理,产生最后计算结果。完整的用户计算任务被称为“作业”(job),其中的每个步骤被称为“作业步”,驻留监控程序的作用可以简单描述为:读入一个作业,按照要求顺序执行各个作业步,作业成功完成或失败终止后,读入下一个作业继续执行。这种无需人工干预而自动执行作业/作业步的处理方式被称为“批处理”(batch processing),由于减少了作业之间衔接时的人工操作而提高了系统效率。

批处理系统的使用方式与现代计算机系统的使用方式有很大区别,因此需要对于作业提交方式再进行一些简单说明。用户提交作业时,除了源程序和数据,还要提交一个作业说明书,其中包括作业相关的各种信息,例如完成作业所需的作业步,需要使用的系统资源,作业的类型、提交者、预期执行时间等;作业说明书的编写独立于源程序的编写,需要使用特定的作业控制语言(JCL:Job Control Language)编写,这是不同于普通编程语言的一种兼有描述和控制功能的语言,可以认为现代操作系统中的shell脚本、bat批文件与JCL有一定传承关系,但是也有很大区别,JCL中用于描述作业特征信息的部分在非批处理系统中不再需要。批处理系统中的监控程序具有基本的资源管理和调度功能,当选中一个作业执行时,会按照作业说明书要求依次执行每个作业步,而每个作业步都涉及到分配资源、装入相关程序并执行、回收资源的过程;调度功能则体现为当系统有空闲时,如果有多个待执行的作业,监控程序会根据一定的调度算法选择下一个作业进入执行状态,调度依据的信息一般来自作业说明书中包含的特征信息。

2、操作系统初具规模——多道批处理系统

早期的批处理系统中,作业之间也是顺序执行的,任何时刻系统中只有一道作业处于执行状态,其他已提交作业会处于等待状态,这种系统也被称为单道批处理系统。单道批处理虽然可以避免作业切换时人工操作带来的延迟,但是在一个作业执行过程中(更严格说是一个作业步执行过程中),如果程序需要有输入输出,那么在等待I/O设备时,CPU就处于“无事可做”的状态;考虑到计算机系统昂贵的价格,对计算资源的这种低效利用无疑是巨大的浪费。对此问题的解决方法就是多道批处理系统:在内存中同时载入多个作业相关的程序,CPU在执行其中一道程序时,其他程序处于等待状态;如果当前执行的程序需要进行输入输出时,启动相应I/O设备后暂停该程序的运行,让CPU转而执行其他可以继续执行的程序,这种微观上程序交替执行、宏观上多道程序同时向前推进的模式被称为并发。多道批处理系统引入并发机制的思想说起来简单,在实现时会大大增加监控程序的编写难度,而且需要至少两方面的硬件支撑:一是CPU支持对内存访问的保护,从而能避免装入内存的多道程序之间相互干扰以及对监控程序本身的破坏;二是硬件中断的机制,使得I/O设备能够独立工作,并在I/O任务完成后中断CPU当前执行的程序转入预设的处理例程进行善后处理。

多道批处理系统已经具备了现代操作系统的主要特征,前述的操作系统内核主要功能都已经有所体现:内存管理实现多道程序的装入和保护,处理机管理实现作业之间、内存中程序之间的两级调度,设备管理和文件管理功能无需赘述;加上内存保护模式引入,在核心态执行的内核已经基本成型。但是由于单纯批处理系统的“脱机”操作模式,还有一个现代操作系统的重要特征没有引入,就是后来出现的分时系统中的抢占式调度。

3、现代操作系统成型——分时系统

分时系统的发展源于交互式“联机”操作的需求,批处理系统的操作方式会带来很多不便,例如一个用户提交作业中如果有源程序错误,则会导致该次提交作业执行失败,而用户只有拿到执行结果后(典型时间是1个工作日,也可能更久)才能知道,需要修改错误后再次提交作业,如果还有其他错误还会多次迭代,导致操作周期很长而且不直观。如果使用联机方式,可以及时看到执行结果并进行相应修改工作,则可以大大提高开发效率;早期单道系统中不会采用联机方式,因为这样会导致CPU不仅要等待低速I/O设备、还要等待更低速的“人”;当多道程序技术成熟后,这就不再成为问题了,因为某些内存中程序等待用户联机操作不会影响后台其他计算任务的执行。分时系统主要面向多个用户同时联机操作,之所以要支持多个用户同时操作是因为两点:首先计算机很贵,其次计算机的能力相对于单个用户太强了。分时系统的基本思想很简单:每个联机用户的计算任务都会获得一个比较短的“时间片”(一般在数十个毫秒的量级),在此时间内CPU执行该任务的程序,如果时间片用完了程序还没有因为输入输出等原因主动放弃CPU,则操作系统会强制暂停该程序执行,转而执行其他用户的计算任务,从而保证在有多个联机用户同时操作情况下,每个用户操作的延迟都是可以忽略的。这种调度方式被称为抢占式调度,区别于多道批处理系统中一般采用的非抢占式调度——只有当前程序执行不下去了才会去执行下一个程序。

核心态运行、多道程序并发执行、抢占式调度、能同时兼顾脱机方式的计算任务和联机方式的交互操作,这些特征就已经构成了现代意义的操作系统。同时具备这些特征的早期操作系统中最广为人知的当属Unix,其基本架构在1970年代就已定型。Unix影响了大部分当前主流操作系统,其后的操作系统发展在内核功能方面再无突破性的改变,内核功能最大的扩展应该是网络功能的加入,但在本书中只有很少章节会涉及网络方面的内容;图形用户界面的引入虽然从根本上改变了用户使用计算机的方式,但是并不一定需要在内核中扩展功能。当然在之后的漫长发展过程中,随着硬件技术的进步和应用领域的扩展还有很多结构和算法优化,但从内核的总体功能和结构看都是稳定的,这也是本书此类原理类教材可以存在的理由。

【参考:http://en.wikipedia.org/wiki/Operating_system

就通用操作系统内核的基本结构和功能而言,从没有操作系统,到单道批处理系统、多道批处理系统、分时系统,再到集大成的Unix之类的操作系统,这已经可以当作一个比较完整的发展史了,但是对读者而言可能还会有疑问:这之后的几十年的重要发展在哪里?我们日常使用的操作系统又在哪里?下面我们就从典型的微机操作系统以及其他类型操作系统两方面再来认识操作系统的发展。

【说明】对此部分内容的几点说明,1、在发展过程描述中,有意不指明早期的系统的名字(即使有些系统相当有名并且影响深远),因为离开当时的硬件设备根本无法真正理解特定的系统是什么样子的,通过隐去具体早期系统名字,希望引导读者更关注于操作系统的发展脉络,现代操作系统是如何演变成今天的样子的。可能会有人认为这是一部分常识性内容,我个人观点是,记住几个名字、几个时间点,不知道相应系统的主要特征,这种“常识”对于构建自己的知识体系毫无意义。2、很久以来我个人都认为批处理系统是一种过时系统,作业有关概念应该作为一种历史上出现过的东西简单介绍;虽然现代系统中仍然存在类似的非交互式计算需求,但在应用和内核层面的具体实现方法上都与早期作业有很大区别。所以在调度算法等章节中应该把限于早期批处理系统的知识单列为“过时”内容加以介绍,避免干扰对现代操作系统的理解和认识。3、在本书中实际是把微机上的主流操作系统作为现代操作系统的范例,很可能会有人认为失于片面且不够先进。我个人有一个朴素的评判标准:作为一个人工产品,其技术含量的高低当然看其开发者团队的整体技术实力,有哪一种“高大上”的操作系统,其开发者从团队规模、平均技术能力、管理水平等方面与Windows、Linux、OS X等系统相比,能够达到哪怕是数量级上的接近?认为大型机上的操作系统比起我们日常使用的系统更为先进的观点,我认为仅仅是出于对于自己不能了解系统的神秘感。当然我不否认由于硬件发展的超前和应用需求的苛刻,这种系统会有一些特定的特性领先于微机操作系统,但这很难说是技术水平的领先,而且对于本书目标而言根本无关紧要。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值