十八、操作系统

本文介绍了操作系统从批处理到分时操作的发展历程,强调了操作系统在管理硬件、实现多任务处理、虚拟内存和内存保护等方面的重要作用。从早期的Atlas到后来的Unix,操作系统不断进化,现代操作系统如Mac OS X, Win10, Linux, iOS和Android等,都具备多任务、虚拟内存和内存保护等功能。" 104794743,9308763,多线程实践与理论解析,"['并发编程', 'Java', '线程管理']
摘要由CSDN通过智能技术生成

1940、1950年,一个计算机每次只能运行一个程序,程序员在打孔纸卡上写程序,然后拿到一个计算机房间交给操作员。计算机空下来时,程序员放入程序,计算机运行程序、输出结果、停机。以前计算机慢,这种手动做法可以接受,运行一个程序需要几天乃至几周。但是计算机越来越快,指数级增长,放程序的时间比程序运行时间还长。我们需要一种方式让计算机自动运作,因此“操作系统(Operating System,OS)”诞生了。
操作系统”其实也是程序,但它有操作硬件的特殊权限,可以运行和管理其它程序。操作系统一般是计算机开启的第一个程序,其他程序都由操作系统启动。第一个操作系统出现于1950年,它加强了程序加载方式:多个程序可以放入计算机中,在执行完一个之后会自动执行下一个,这个过程叫做“批处理(batch processing)”。
计算变得越来越多越便宜,人们相互之间开始共享软件,但是有一个问题,那么时代的计算都是一次性的,程序写的代码特定地限定于这个计算机的配置(处理器、打卡器、打印机等计算机连接着的其他设备,这些统称为“外部设备,peripherals”),而每台计算机的配置各不相同。程序员和早期的外部设备打交道是非常底层的,需要了解设备的硬件细节,和现在程序的“即插即用(plug-and-play)”。为了让程序员写软件更加容易,操作系统充当软件和硬件之间交互的媒介:具体而言,操作系统提供API来抽象硬件,叫做设备驱动程序(device drivers)。程序员可以用标准化的机制进行输入输出硬件(input and output hardware,I/O)交互比如,程序员只需要调用print(highscore),操作系统就会使用设备驱动程序处理打印函数的具体细节。
在1950s计算机运行已经很快了,处理器经常闲着等待慢的外设,程序阻塞在I/O上但是处理器确没有工作。第一台超级计算机Atlas使用一个叫Atlas Supervisor的程序,这个程序不仅能像批处理系统一样一次加载多个程序,同时能通过调度(scheduling)在单个CPU同时运行几个程序;比如atlas执行一个print函数,在打印过程中,atlas supervisor将该程序休眠并运行另一个程序,在打印完毕后,altas将休眠的程序标记为可继续运行,之后在某时刻会安排给CPU运行,并执行print语句的下一行代码。因此Atlas可以同时执行打印数据、计算、读数据等多个程序。多个程序可以同时运行,在单个CPU上共享时间,操作系统的这种能力叫“多任务处理(multitasking)”。
同时运行多个程序时,每个程序会占一些内存。当切换到另一个程序时,我们不能丢失数据,所以我们要给每个程序分配专属内存块,如下图所示。如果一个程序请求更多内存,操作系统会决定是否同意,同意的话还要分配指定的内存块。但这有一个后果,那就是一个程序(例如程序A)分配到了非连续的内存块。
在这里插入图片描述
真正的程序可能会分配到内存中数十个地方,这让程序变得较难被程序员跟踪。为了掩盖这种复杂性,操作系统会使用虚拟内存(vitual memory)把内存地址虚拟化,程序可以假定内存总是从地址0开始,实际的物理内存地址被操作系统隐藏和抽象了。虚拟内存和物理内存之间的映射会由操作系统处理。在这里程序B要地址42,那么实际上请求的是地址1042。而对于程序A来说,程序员的视角下A有2000个连续地址。上述的内存分配机制叫做“动态内存分配(dynamic memory allocation)”,程序的内存大小可以因此灵活增减,为操作系统同时运行多个程序提供了极大的灵活性。
在这里插入图片描述
给程序分配专用的内存范围,不仅方便CPU进行多任务处理,还确保一个程序——假如有很多bug——可以只捣乱自己的内存而不影响其他程序的内存,这个机制就叫做“内存保护(memory protection)”。内存保护机制还可以防止恶意软件篡改自己程序的内存。Atlas是第一台支持虚拟内存和内存保护功能的系统。
到1970s计算机不仅能多任务处理,还能够让多用户使用“终端(terminal)同时访问,终端只是一套连接到主计算机的键盘和屏幕,没有处理能力。为了确保其中的任何一个人不完全占用所有计算机资源,开发了分时操作(time-sharing)系统,意思是每个用户只能用一小部分处理器、内存等。早期分时操作系统中,最有影响力的是Multics(多任务信息与计算系统)。Multics是第一个从设计时就考虑到安全的操作系统,可以避免用户访问不该访问的数据,这导致Multics的复杂度超过但是的平均水准,占用内存达到1Mb(在当时很多),达到总内存的一半。
由于Multics的复杂度过高,该系统的研究员Dennis Ritchie和Ken Thompson联手打造了新的操作系统,叫做Unix。他们想把操作系统分为两部分:操作系统的核心功能(动态内存分配、多任务和I/O),这一部分叫做内核(kernel);第二部分是一堆有用的工具,例如程序和运行库等。Multix会有错误恢复代码,而在Unix中不会有这个代码,如果内核出错就会调用一个函数让内核“恐慌”,机器崩溃,这就叫做“内核恐慌(kernel panic)”。Unix的简单性让越来越多开发人员使用Unix写程序和运行程序。
Unix发布后不久,针对Unix的不同编程语言的编译器和文字处理器也随之发布了,Unix开始流行。1980s时,计算机的价格更加廉价,一个个人可以负担。个人电脑的操作系统比学校和政府使用的大型主机更简单。微软的磁盘操作系统(MS-DOS)只有160kB,一张磁盘就可以容纳。虽然缺少“多任务”和“保护内存”的功能。微软在1985年发布的早期windows也缺乏内存保护的功能,在程序行为不当的时候就会直接蓝屏——这说明程序的崩溃十分严重以至于令系统也崩溃了。现代操作系统如Mac OS X,Win10,Linux,iOS和Android等,都具备“多任务”“虚拟内存”“内存保护”等机制,因此可以安全地运行多个程序。
以下是本节课的总结:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值