第1章操作系统概述1.1操作系统的地位计算机系统由硬件和软件组成操作系统在硬件基础上的第一层软件是其它软件和硬件的接口游戏MIS。。。编译器命令解释器网络,数据库操作系统机器语言微程序物理设备1.2操作系统的定义操作系统是计算机系统中的一个系统软件,是一些程序模块的集合——它们能以尽量有效合理方式组织和管理计算机的软硬件资源,合理的组织计算机的工作流程,控制程序的执行并向用户提供各种服务功能,使得用户能够灵活,方便,有效的使用计算机,使整个计算机系统能高效的运行。有效:系统效率(如CPU用的充足与否)资源利用率(如内存,外部设备是否忙碌)合理:公平与否,如果不公平则会产生“死锁”或“饥饿”方便:用户界面1.3操作系统的特征并发:在计算机系统中同时存在多个程序,从宏观上看这些程序是同时在执行的。从微观上讲任何时刻只有一个程序在执行,微观上说这些程序在CPU上轮流执行。并行:(与并发相同,但多指硬件支持)共享:操作系统与多个用户的程序共同使用计算机上的资源操作系统特征随机性:操作系统必须随时对以不可预测的次序发生的事件进行响应考虑周密、设计适当操作系统特征1.4操作系统的发展操作系统发展是随着计算机硬件技术的发展而发展的目标:充分利用硬件1.4.1概述操作系统历史划分为4个阶段第0阶段硬件非常昂贵,没有操作系统控制台一个用户•一次完成一个功能(计算,I/O,用户思考/反应)•程序通过卡片装入•用户在控制台前调试程序•工作效率非常低•每一用户都要自行编写涉及到硬件的源代码•工作量大,难度高,易出错,需要大量人力和物力第1阶段硬件昂贵,人力便宜简单批处理:装入程序、运行、打印结果、撤出、再重复•用户把程序(卡片或磁带)交给负责调度的操作员(系统管理员)•常驻监控程序自动地装入程序、运行、撤出作业•需要存储管理、重定位和保护机制•硬件使用较为高效,但(从输出)调试困难CPU与I/O操作交叉覆盖•后期:Spool数据到磁盘上•早期:将慢速设备转到同CPU相连的快速磁带驱动器上增加:缓冲,DMA,中断处理作业被送(spool)到磁盘仍然是单个作业,利用率低多道程序批处理系统•在磁盘上多个作业等待运行•多道程序-同时运行多个作业-选择若干作业准备运行(调度)并装入内存(存储管理)-运行一个作业,当它等待时(如需安装磁带,等键按下)切换至内存中的另一个作业多道程序设计:多个用户共享系统增加:存储保护,重定位利用率高(多个作业)有必要采用并发程序设计技术操作系统成为研究焦点:需要处理复杂性•首次面对重大失败:-MULTICS于1963年开始,直至1969年才发布-IBM的OS/360发布时,带着已知的1000个错误•早期计算机:单控制方式-CPU负责计算,也负责传输•早期计算机的使用方式-一个用户独占全部资源-浪费:CPU与外设速度不匹配手工操作方式和高速机器之间的不匹配•提高资源利用率-多部件并行,多任务共享通道引入:传输和CPU相对独立中断引入:各部件的协调动作成为可能体系结构的发展可以支持OS多道程序运行模式第2阶段硬件较以前便宜,人力昂贵交互式分时处理•一台计算机,多个便宜终端-所有用户可与系统立即交互-调试比较方便•磁盘便宜,故可在线存放程序和数据-1张穿孔卡片=100个字节-1MB=10K卡片-OS/360有若干英尺长度的卡片•新问题-易于使用,提高人的生产力-合理的响应时间-引入文件系统,使用户可存取数据•解决-需要抢占式调度以便保持适当的响应时间-需要避免抖动(程序在内存中过于频繁的对换)-需要提供适用的安全检测•成功:一群计算机迷(Tomson,Ritchie)在贝尔实验室发展出了UNIX。(这样他们可以在一台无人使用的DECPDP-7小型计算机上玩星际探险游戏)•成功:KenThompson,DennisRitchie1983年图灵奖获得者1999年4月美国国家技术金奖第3阶段硬件非常便宜,人力昂贵目标:充分利用人和时间个人计算•CPU便宜到可在每台终端上安装,功能强大有效-成为大众的计算机•放弃多道程序、并发和保护机制,使OS回归简单•使用户再次与系统交互•增强文件系统•响应时间、保护更为重要网络•允许不同机器很容易共享资源-共享,安全操作系统的历史:变化!意味着技术总在改变要适应、折衷权衡1.4.2历史上的操作系统随历史线索,介绍一些重要的操作系统•真空管时代(1946年-1955年)•晶体管时代(1955年-1965年)•集成电路时代(1965年-1980年)•大规模集成电路时代(1980年-至今)第一台数字计算机英国数学家CharlesBabbage(1792-1871)设计Babbage投入了毕生精力但却没能让它成功地运行起来因为当时的技术不可能达到需要的精度当然,这个分析机没有操作系统二战对武器设计的需要美国、英国和德国等国家开始了电子数字计算机的研究工作哈佛大学的HowardAiken普林斯顿高等研究院的JohnNeumann(冯·诺依曼)宾夕法尼亚大学的J.PresperEckert和WilliamMauchley德国电话公司的KonraadZuse以及其他一些人都使用真空管成功地建造了运算机器真空管计算机(1945年-1955年)时期没有程序设计语言(甚至没有汇编),更谈不上操作系统程序员提前预约一段时间,然后到机房将他的插件板插到计算机里期盼着在接下来的时间中几万个真空管不会烧断从而可以计算自己的题目ENIAC计算机运算速度:1000次/每秒,数万个真空管,占地100平方米50年代早期出现了穿孔卡片程序写在卡片上然后读入计算机但计算过程则依然如旧晶体管计算机(1955年-1965年)时期50年代晶体管发明计算机比较可靠,可成批地生产用户可指望计算机长时间运行,完成一些工作FORTRAN1954年提出,1956年设计完成ALGOL1958年引入COBOL1959年引入设计人员、生产人员、操作人员、程序人员和维护人员之间第一次有了明确的分工要运行一个作业,先将程序写在纸上(用高级语言或汇编语言)然后穿孔成卡片,再将卡片盒交给操作员计算结果从打印机上输出操作员到打印机上撕下运算结果送到输出室程序员稍后可从取到结果然后,操作员从输入室的卡片盒中读入另一个任务如果需要FORTRAN编译器,还要把它取来读入计算机机时在走来走去时被浪费批处理操作系统-现代操作系统雏型为了改进主存和I/O设备之间的吞吐量IBM7094机引入了I/O处理机概念其思想是:在输入室收集全部的作业,用一台相对便宜的计算机如IBM1401计算机,将它们读到磁带上另外用较昂贵的计算机,如IBM7094来完成真正的计算基本控制卡片是现代作业控制语言和命令解释器的先驱第二代计算机典型的操作系统FMS(FORTRANMonitorSystem,FORTRAN监控系统)IBMSYS(IBM为7094机配备的操作系统)这些操作系统由监控程序,特权指令,存储保护和简单的批处理构成第三代集成电路计算机(1965年-1980年)时期60年代初期,计算机开始采用集成电路多数厂商有几条完全不同的生产线,生产不同的计算机开发和维护完全不同的产品,对厂商来说是昂贵的另外,新用户,在开始时只需要一台小计算机后来可能需要一台大的计算机而且希望能在新计算机上执行原有的程序这样,厂家和用户需要软件在不同型号的计算机之间兼容•1964年IBM宣布推出System/360计算机系统第一个采用小规模集成电路的主流机型•试图一次性地解决上述两个问题•由于所有的计算机都有相同的体系结构和指令集在理论上,为一型号编写的程序可以在其他型号机器上运行IBMSystem/360的若干问题•IBM无法写出同时满足互冲突需要的操作系统其实别人也一样不能完成这项工作任务•IBMOS/360文件系统中有类型字段,定义文件的类型,有定长、不定长记录、块状和非块状文件用户对于输出文件的大小,只有通过猜测•存储管理有基地址寄存器寻址方式,程序也可以访问和修改基地址寄存器,但是CPU生成的却是绝对地址,虽然不用进行动态再分配但程序却被钉死在调入内存时的物理地址上IBMSystem/360,庞大的软件怪兽•数千名程序员写的数百万行汇编语言代码系统自身占据了大量存储空间和一半的CPU时间•数百万行汇编代码中有成千上万处错误•IBM不断发行新的版本试图更正这些错误每个新版本在更正老错误的同时又引入新错误•所以随着时间的流逝,错误的数量大致保持不变多道程序设计技术(multiprogramming)•在IBM7094机上,若当前作业因等待I/O而暂停,CUP只能踏步直至该I/O完成对于CPU操作密集科学计算问题,浪费时间少对于商业数据处理,I/O等待时间常占80%-90%•解决办法将内存分几个部分,每部分放不同的作业当一个作业等待I/O时,另一个作业可以使用CPU在主存中同时驻留多个作业需要硬件进行保护以避免信息被窃取或攻击Spooling技术•程序卡片被拿到机房后能够很快将一作业从卡片读入磁盘•任何时刻当一作业运行结束操作系统就将一新作业从磁盘读出装入空出的内存区运行•Spooling技术(SimultaneousPeripheralOperationOnLine)•该技术也用于输出分时系统•第三代计算机实质是批处理系统•而从一作业提交到结果取回,往往长达数小时一个逗号的误用会导致编译失败而可能浪费程序员半天时间•问题的解决导致分时系统的出现(CTSS,CompatibleTimeSharingSystem)•分时系统实际上是多道程序的一个变种•分时系统的思想于1959年在MIT提出•每个用户有一个联机终端•在分时系统中,假设20个用户登录其中17个在思考或谈论或喝咖啡则CPU可给那三个需要的作业轮流分配服务•调试程序的用户常常只发出简短的命令而很少有长的费时命令•所以计算机能够为许多用户提供交互式快速服务同时在CPU空闲时还能在后台运行大作业•第一个分时系统由MIT的FernandoCorbato等1961年在一改装的IBM7090/94机上开发成功当时有32个交互式用户•IBM7090/94计算机有32K内存,系统用5K,用户用27K,用户存储映象在内存和一台磁鼓之间切换•1962年Manchester大学的Atlas计算机投入运行运行速度200kFLOPS•第一个有虚拟存储器(virtualmemory)和页面调度(paging)的机器•指令执行是管道式(pipelined)的MULTICS的灾难•1965年在ARPA的支持下MIT、贝尔实验室和通用电气公司决定开发一种“公用计算服务系统”,希望能够同时支持整个波士顿所有的分时用户。该系统称作MULTICS(MULTiplexedInformationandComputingService)•MULTICS设计目标是:便利的远程终端使用,大量终端通过电话线接入计算机主机高可靠的大型文件系统;大容量的用户信息共享;存储和构造层次化信息结构的能力•MULTICS研制难度超出了所有人预料长期研制工作达不到预期目标,1969年4月贝尔实验室退出,通用电气公司也退出了但最终,经过多年的努力,MULTICS成功地应用运行MULTICS的计算机系统在九十年代中陆续被关闭•MULTICS引入了许多现代操作系统领域概念雏形,对随后操作系统特别是UNIX的成功有着巨大的影响小型计算机,电子游戏和UNIX的成功•1969年,在贝尔退出MULTICS研制项目后,KenThompson和DennisM.Ritchie想申请经费买计算机从事操作系统研究,但多次申请得不到批准•项目无着落,他们在一台无人用的PDP-7上,重新摆弄原先在MULTICS项目上设计的“空间旅行”游戏•为了使游戏能够在PDP-7上顺利运行,他们陆续开发了浮点运算软件包、显示驱动软件,设计了文件系统、实用程序、shell和汇编程序•到了1970年,在一切完成后,给新系统起了个同MULTICS发音相近的名字UNIX•随后,UNIX用C语言全部重写,自此,UNIX诞生了UNIX•UNIX是现代操作系统的代表。