你真的理解什么是操作系统吗?

 

      20世纪50年代初,还没有应用程序与操作系统之分。计算机的能力非常有限,每次只能运行一个程序,这个程序会占据整台机器。而程序员要使用计算机运行自己的程序,必须事先预约时间段(身份低微的学生只能预约在半夜)。

      随着计算机变得越来越复杂,再靠非专业人员使用它们效率就会很低。于是,操作计算机的工作就交给了专业操作员,由他们将程序输入计算机,然后分发计算结果。操作系统最初就是为了将人工操作员的上述工作自动完成才诞生的。
硬件不断发展,控制它们的操作系统也日益完善。而随着硬件越来越强大和复杂,就有必要投入更多的资源来控制它们。第一批广泛使用的操作系统诞生于20世纪50年代末、60年代初,通常由制造硬件的同一家公司提供,并通过汇编语言与之紧密结合。IBM以及更小一些的公司如Digital Equipment和Data General都为自己的硬件提供过他们自己的操作系统。弗雷德·布鲁克斯(Fred Brooks),在上面的题词中曾引用到他的话,曾在1965年至1978年间管理IBM的System/360系列计算机和OS/360(该公司的旗舰操作系统)的开发。1999年,布鲁克斯因其对计算机架构、操作系统和软件工程的贡献而获得图灵奖。

         操作系统也是很多大学和业界实验室的研究目标。MIT(麻省理工学院)作为这方面的先驱,在1961年开发了一个名为CTSS(Compatible Time-Sharing System,兼容分时系统)的系统,该系统在当时非常先进,并且和与之竞争的其他产品相比而言,使用体验也很好。1969年,贝尔实验室的肯·汤普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)开始着手开发UNIX。他们曾开发过Multics系统,这是一个延续自CTSS,较之更完善但却不那么成功的系统。今天,除了微软开发的那些操作系统之外,大多数操作系统要么源自当初贝尔实验室的UNIX系统,要么是与UNIX兼容但独立开发的Linux版本。里奇和汤普森因为开发了UNIX而一起荣获1983年的图灵奖。
         现代的计算机实在是一个复杂的“怪物”。它由很多部件组成,包括处理器、内存、二级存储、显示器、网络接口等,如我们在图1.2中所见。为了有效地使用这些部件,需要同时运行多个程序,其中一些程序等待某些事件发生(如网页下载),另一些程序则必须实时做出响应(跟踪鼠标移动或在你玩游戏的时候刷新显器),还有一些会干扰其他程序(启动一个新程序,需要在已经很拥挤的内存中再开辟空间来运行)。简直一片混乱。
          要管理如此复杂的局面,唯一的办法就是用程序来管理程序,这是让计算机自己执行操作的又一个例子。这个程序就叫作操作系统。家用和工作中使用的计算机中最常见的操作系统是微软开发的各种版本的Windows。我们日常见到的台式计算机和笔记本电脑90%都运行着Windows。苹果电脑运行的是macOS。很多做幕后工作的计算机(当然也有前台运行的计算机)运行的是Linux。手机中也有操作系统,开始运行的是特定的系统,不过现如今通常是精简版的UNIX或Linux。例如,iPhone和iPad运行的iOS就源自macOS,其核心是一种UNIX的变体。而Android手机运行的是Linux,我的电视机、TiVo、亚马逊的Kindle和Google Nest运行的也是Linux。我甚至可以登录自己的Android手机,在上面运行标准的UNIX命令。
      操作系统控制和分配计算机资源。首先,它负责管理处理器,调度和协调当前运行的程序。它控制处理器在任意时刻执行着的程序间切换,包括应用程序和后台进程,如杀毒软件。它会将一个等待某个事件,比如等待用户在上面单击的对话框的程序挂起。它会阻止个别程序占据资源。如果一个程序占用处理器时间太多,操作系统会进行限制,以便其他任务也获得合理的资源。
一个典型的操作系统会同时运行数百个进程。其中有些是由用户启动的程序,但大多数还是一般用户看不到的系统任务。你可以通过macOS上的活动监视器(Activity Monitor)和Windows上的任务管理器(Task Manager),或者你手机上的类似程序,看到系统当前都运行着哪些程序。图6.1显示了我正在上面打字的Mac中运行的300左右个进程的一些。其中大多数都是相互独立的,因此非常适合于多核架构。

(此图为显示macOS上处理器活动的活动监视器)

453487d3a1c945549f1df7514cf41643.png

     其次,操作系统管理主存储器。它把程序加载到内存中以便执行指令。如果内存空间不足以让所有程序同时运行,它就会将某些程序暂时挪到磁盘上,等有了空间之后再挪回来。它确保不同的程序相互分离、互不干扰,从而一个程序不能访问分配给另一个程序或操作系统自身的内存。这样做既是为了保持清晰,同时也是一种安全措施,谁也不想让一个流氓程序或错误百出的程序出现在不该出现的地方。Windows中常见的“蓝屏死机”现象就是因为这种保护不够充分造成的。
有效利用主存储器需要良好的工程技术。一种技术是在需要时仅将程序的一部分加载到内存,而在程序处于非活动状态时再把它转存回磁盘,这个过程称为交换(swapping)。编写程序时就好像整台计算机都归它自己使用一样,并且拥有无限的主存。软件和硬件的结合提供了这种抽象,使编程变得非常容易。操作系统必须支持这种“假象”,方法就是硬件的帮助下,在程序内存地址和真实内存的真实地址间转换,将程序块换入换出。这种机制被称为虚拟内存(virtual memory)。就像“虚拟”这个词的大多数用法一样,它的意思是给人一种现实的错觉,但不是真实的东西。
图6.2显示了我的计算机如何使用它的内存。进程根据它们所使用的内存数量排序。在本示例下,浏览器进程占用了大部分的内存,这是典型的一种情况,浏览器往往需要大量的内存。一般来说,你拥有的内存越多,你的电脑就感觉越快,因为它在内存和二级存储之间交换的时间就越少。如果你想让电脑运行得更快,增加主存可能是最划算的做法,不过通常会有物理上的上限,另外有些电脑无法升级。
       第三点,操作系统管理存储在二级存储上的信息。文件系统是操作系统中的一个主要组成部分,提供了我们在使用计算机时所看到的文件夹和文件的熟悉层次结构。我们将在本章的后面部分回到文件系统,因为它们有足够多有趣的属性,值得进行更深入的讨论。

1173d1ead5404b7282d974482e9885d0.png

 最后,操作系统管理和协调计算机外接设备的活动。一个程序可以假设它有完全属于自己的非重叠窗口。操作系统维护屏幕上的多个窗口的复杂任务,确保每个窗口都能显示正确的信息,而且在这些窗口被移动、缩放或隐藏后再次显示时,都能准确地恢复原貌。它把键盘和鼠标的输入送往需要这些输入的程序。它处理通过有线或无线网络连接进进出出的流量。它将数据发送给打印机,以及从扫描仪取得数据。
注意到我说过操作系统也是一种程序。它跟我们在上一章讲到的其他程序一样,都是用同一类编程语言编写的,最常用的是C和C++。早期的操作系统很小,因为内存小,并且工作比较简单。最早的操作系统每次只运行一个程序,所以仅需要进行有限的交换。没有太多内存可供分配,通常少于100KB。而且也没有太多外部设备需要管理,跟今天我们拥有的外设比起来显然要少得多。今天的操作系统已经非常庞大,动辄包含数百万行代码,也非常复杂了,因为它们执行的任务本身就非常复杂。
就以UNIX操作系统第6版为例进行比较,它是今天很多操作系统的鼻祖。它在1975年的时候是一个包含9000行C语言和汇编语言的程序,由两个人编写。今天的Linux已经有超过1000万行的代码,是几千人历经几十年工作的成果。Windows 10被猜测大约有5000万行,尽管没有权威公布的数据。当然,就这么直接拿来比也不太合适,毕竟现在的计算机要复杂得多,而且处理更复杂的环境和更多的设备。操作系统包含的组成部分同样也有差别。
既然操作系统也是一种程序,那么从理论上说你也可以写出自己的操作系统来。事实上,Linux最早就是由芬兰大学生林纳斯·托瓦兹(Linus Torvalds)在1991年写出来的,他当时的想法就是从头编写一个自己的UNIX版本。他在互联网上发布了自己写的一个早期草稿程序(仅小于1万行代码),邀请别人试用和帮助开发。自那时起,Linux就逐渐成为软件业中一支重要的力量,很多大大小小的公司都在使用。上一章提到过,Linux是开源软件,所以任何人都可以使用它并做出贡献。今天,Linux除了核心的全职开发人员之外,还有成千上万的贡献者。托瓦兹仍然保持着整体的控制权,并且是技术决策的最终仲裁者。
你可以在硬件上运行不同于最初预期的操作系统,在原本打算安装Windows的计算机上运行Linux就是一个很好的例子。你可以在磁盘上存储多个操作系统,并在每次打开计算机时决定运行哪个操作系统。这种“多重引导”功能可以在苹果的boot Camp中看到,它使运行Windows而不是macOS的Mac成为可能。
你甚至可以在一个操作系统的控制下运行另一个虚拟操作系统。使用VMware、VirtualBox和Xen(开源的)等虚拟操作系统软件,可以在一台macOS主机上运行另一个客户操作系统,比如Windows或Linux。主机操作系统会拦截客户操作系统的请求,代替它执行那些需要具备操作系统级权限才能执行的操作,如访问文件系统或网络。主机在执行完操作后,将结果返回给客户机。当主机和客户都为相同的硬件编译时,客户系统在大多数情况下以完全的硬件速度运行,并且感觉几乎与在裸机上一样快。
 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值