计算机科学速成课 Crash Course Computer Science 第十八集 操作系统 Operating Systems

GitHub链接:https://github.com/WilliamWuLH/My-notes-about-CCCS

如果你觉得不错可以 ⭐Star 和 Fork ❤

计算机科学速成课 Crash Course Computer Science

第十八集 操作系统 Operating Systems

由于计算机速度越来越快导致放入程序的时间比程序运行时间还长,所以需要一种方式让计算机自动运作,于是操作系统(operating system)诞生了。

操作系统简称OS,也是一个程序,但是它有操作硬件的特殊权限,可以运行和管理其他程序,操作系统一般是开机第一个启动的程序,其他所有程序都有操作系统启动。

批处理

操作系统开始于1950年代,那时计算机开始变得更加强大更加流行,第一个操作系统加强了程序加载方式,之前只能一次给一个程序,现在可以一次多个,当计算机运行完一个程序,会自动运行下一个程序,这样就不会浪费时间,找到下一个程序,这叫批处理(batch processing)。

外部设备

电脑变得更快更便宜,开始出现在世界各地,特别是大学和政府办公室,很快人们开始分享软件,但存在一个问题:在哈佛1号和ENIAC那个时代,计算都是一次性的,程序员只需要给那“一台”机器写代码,处理器,读卡器,打印机都是已知的,但随着电脑越来越普遍,计算机配置并不总是相同的,比如计算机可能有相同CPU但是有不同的打印机,这对程序员很痛苦,不仅要担心写程序,还要担心程序怎么和不同型号打印机交互,以及计算机连着的其他设备,这些统称“外部设备”(peripherals)。

设备驱动程序

和早期的外部设备交互是非常底层的,程序员要了解设备的硬件细节,更困难的是,程序员很少能拿到所有型号的设备来测代码,所以一般是阅读手册来写代码并祈祷能正常运行。为了程序员写软件更容易,操作系统充当软件和硬件之间的媒介,更具体地说,操作系统提供API来抽象硬件,叫做“设备驱动程序”(device drivers),程序员可以用标准化机制和输入输出硬件(I/O)交互。

多任务处理

1950年代末,电脑速度很快,处理器经常闲着,等待慢的机械设备(比如打印机和读卡器),程序阻塞在I/O上。50年代后期,英国曼彻斯特大学开始研发世界上第一台超级计算机——Atlas,需要一种方式来最大限度的利用机器的速度,解决方案是一个程序叫Atlas Supervisor,于1962年完成,这个操作系统不仅像更早期的批处理系统一样能自动加载程序,还能在单个CPU上同时运行几个程序,通过调度来实现。Atlas可以在CPU上运行一个程序,同时另一个程序在打印数据,同时另一个程序读数据,操作系统的这种能力叫做“多任务处理”(multitasking)。同时运行多个程序有个问题:每个程序都会占用一部分内存,当切换到另一个程序时我们不能丢失数据,解决办法是给每个程序分配专属内存块。如果一个程序请求更多内存,操作系统会决定是否同意,如果同意要分配哪些内存块,这很灵活但是可能导致程序分配到非连续的内存块。

虚拟内存

真正的程序可能会分配到内存中数十个地方,为了隐藏这种复杂性,操作系统会把内存地址进行“虚拟化”,叫做“虚拟内存”(virtual memory),程序可以假定内存总是从地址0开始,而实际物理位置被操作系统隐藏和抽象了。这种机制使程序的内存大小可以灵活增减,叫做“动态内存分配”(dynamic memory allocation),对程序来说,内存看起来是连续的,它简化了一切,为操作系统同时运行多个程序提供了极大的灵活性。

内存保护

给程序分配专用的内存范围的另一个好处是这样隔离起来会更好,如果一个程序出错并开始写乱七八糟的数据,它只能捣乱自己的内存而不会影响到其他程序,这叫“内存保护”(memory protection),防止恶意软件(如病毒)也很有用。Atlas既有“虚拟内存”也有“内存保护”,是第一台支持这些功能的计算机和操作系统。

分时操作系统

到1970年代,计算机足够快且方便,计算机不仅能同时运行多个程序,还能让多用户能同时访问。多个用户用“终端”来访问计算机,“终端”只是键盘+屏幕,连到主计算机,终端本身没有处理能力,冰箱大小的计算机可能有50个终端,能让50个用户使用。这时的操作系统不但要处理多个程序,还要处理多个用户。为了确保其中一个人不会占满计算机资源,开发了分时操作系统(time-sharing),意思是每个用户只能用一小部分处理器,内存等,因为电脑很快,即使拿到1/50的资源也足以完成许多任务。

Multics & Unix

早期分时操作系统中,最有影响力的是Multics(多任务信息与计算系统),于1969年发布。Multics是第一个从设计时就考虑到安全的操作系统,开发人员不希望恶意用户访问不该访问的数据,这导致Multics的复杂度超过当时的平均水准,操作系统会占大约1Mb内存(当时很多),Multics的研究人员之一Dennis Ritchie曾说过:“One of the obvious things that went wrong with Multics as a commercial success was just that it was sort of over-engineered in a sense. There was just too much in it.”。所以Dennis和另一个Multics研究员Ken Thompson联手打造新的操作系统,叫做Unix。他们想把操作系统分成两部分:首先是操作系统的核心功能,如内存管理,多任务和输入/输出处理,这叫做“内核”(kernel);第二部分是一堆有用的工具,但它们不是内核的一部分(比如程序和运行库)。

紧凑的内核意味着功能没有那么全面,Multics的另一位开发者Tom Van Vleck回忆说:“I remarked to Dennis that easily half the code I was writing in Multics was error recovery code. We left all that stuff out of Unix. If there’s an error, we have this routine called panic, and when it is called, the machine crashes, and you holler down the hall, ‘Hey, reboot it.’ ”。内核如果崩溃,没有办法恢复,所以调用一个叫“恐慌”(panic)的函数。

起初只是打印“panic”一词然后无限循环,这种简单性意味着Unix可以在更便宜更多的硬件上运行,使得Unix在Dennis和Ken工作的贝尔实验室大受欢迎,越来越多开发人员用Unix写程序和运行程序,工具数量日益增长。

发展

1971年发布后不久,就有人写了不同编程语言的编译器,甚至文字处理器,使得Unix迅速成为1970~1980年代最流行的操作系统之一。到1980年代早期,计算机的价格降到普通人买得起,这些叫做“个人电脑”或“家庭电脑”,这些电脑比大型主机简单得多,因此操作系统也需要简单,微软的磁盘操作系统(MS-DOS)只有160kB,一张磁盘就可以容纳,于1981年发布,成为早期家用电脑最受欢迎的操作系统,虽然缺少“多任务”和“保护内存”这些功能,意味着程序经常使系统崩溃,但还是可以接受,因为用户可以重启。微软1985年发布的早期Windows也缺乏“内存保护”,当程序行为不当时就会“蓝屏”,代表程序崩溃非常严重,把系统也带崩溃了。

如今的计算机有现代操作系统,比如Mac OS X,Windows 10,Linux,iOS和Android。虽然大部分设备只有一个人使用,操作系统依然有“多任务,虚拟内存,内存保护”,因此可以同时运行多个程序。

你可能感兴趣的:(计算机科学速成课,Crash,Course,Computer,Scie)