我们每天都在与计算机打交道,它改变了整个人类的生活。打开电脑后,我们想进入哪个主题,只需用鼠标点击一下相应的图标即可。这真是太方便了!但是你有没有想过,为什么计算机会那么听话,总是乖乖地完成你给它布置的任务,虽然偶尔也会“罢工”?在你实现超级体验的过程中,它又做了些什么?以上这些便捷,都要归功于一个被称为操作系统的软件层。它在计算机中的作用就是隐蔽机器的实际操作细节,用户只需关心输入及输出的结果。
先说一下什么是操作系统。我们都知道,现代计算机是一个复杂的系统,它是由许多设备组成的。操作系统的任务就是管理这些设备,并为用户程序提供一个较为简单的到硬件的接口。要准确地给它下定义是很困难的,但是我们可以从以下两个方面进行理解。第一个方面,它为用户提供一台等价的扩展机器,用户不再关注实际操作细节;第二个方面,它充当系统调度员的角色,记录计算机使用资源的情况,对资源请求进行授权、计算使用费用,并且为不同的程序和用户协调互相冲突的资源请求。
当然,以上的定义带有一些专业性的术语,也许大家不好理解,那么说一下我对操作系统的通俗理解。举下面两个例子。第一个例子,如果拿一个公司来说,总经理就相当于用户,而副总及秘书就是操作系统。老总(用户)关心的问题是自己布置的任务能否按质按量地完成,而具体实施细节却不必太在意;他的手下(操作系统)就必须认真地执行老总的命令,包括确定具体的实施方案、人员安排等。第二个例子,在高校的一个班级里面,教授相当于用户,而他的学生就是操作系统。教授(用户)只需把论文的题目布置下去,而不用关心学生们具体如何写;学生(操作系统)要选材、组织语言、将文章打印成稿等。
如今较为流行的操作系统有两种,一种是大家熟知的Windows,另一种是UNIX。一个完整的操作系统涉及到进程和线程、死锁、存储管理、输入/输出、文件系统等概念。以下对它们作简要的介绍。
进程和线程。进程是操作系统中最核心的概念,它是对正在运行程序的一个抽象,指的是并发程序的执行过程。线程是进程所拥有的,若干线程组成一个进程。拿日常生活中做饭来打比方。整个做饭这个过程就相当于一个进程,而淘米、洗菜、炒菜、煮饭等过程就各是一个线程。
死锁。计算机中的资源分为可抢占资源和不可抢占资源两类。死锁是在获取资源的过程中发生的,其规范定义是:如果一个进程集合中的每个进程都在等待只能由该组进程中的其它进程才能引发的事件,那么,该组进程是死锁的。这个定义听起来更是不好理解,那么你应该看过周星驰的电影《功夫》,里面那个火云邪神与包租公和包租婆的打斗场面特别令我印象深刻。在打斗的最后,三个人纠缠在了一起,谁也动不了,而只要有一个人放手,则三人均能动。这就是死锁的最好例证。
存储管理。操作系统中包括存储管理器,它的任务是记录哪些内存在使用,哪些内存是空闲的,以及管理主存和磁盘间的交换。对一个家庭来说,记账是至关重要的,我们必须要量入为出,跟踪好每一笔钱的来龙去脉,并且经常还要存钱(如果有多余的钱)。这就是存储管理。
输入/输出。控制计算机的所有输入/输出设备是操作系统的主要功能之一,它必须向设备发送命令,捕捉中断,并处理设备的各种错误。我们所熟悉的输入设备包括键盘、麦克风和VCD、DVD等,而输出设备则主要是显示屏。操作系统为我们提供了一个黑箱,我们只需关心对于黑箱的输入以及它给我们的输出。
文件系统。操作系统中处理文件的部分称为文件系统,它一直是操作系统中研究的重点。我们的电脑里面到处都可以见到文件的身影,小到文本文件、Word文件,大到音频文件、视频文件。操作系统所关心的就是如何保存这些文件、如何检索及处理这些文件。就像一个家庭的收入,是拿来存,是拿来投资,还是拿来购买最新家电等。
要设计一个操作系统是一项非常复杂的工程问题,要学好它同样不容易!本人本着通俗易懂的原则,将之介绍给了大家,请大家参考!随着不断的学习,我还将对它有更加深入的理解,到时再拿出来与大家分享!还希望到时能多多捧场,多多支持才对!
-------------------------------------------------------------------------------------------------
2015年4月3日修改:
今天重读此文,有几个地方需要修改:
1) 有关操作系统的通俗理解的比喻不是很恰当。很多人应该到乡村基去吃过饭,当你点餐的时候,你只需要把点餐票从窗口递进去,然后在那里等着,直到自己点的饭菜从窗口里面出来。在这个过程中,你是用户,而窗口里面的人和物就是操作系统。你只需要提出需求(也就是输入),具体的执行由窗口里面的服务员完成,你得到的饭菜(也就是输出)是他们的执行结果。
2) 在软件项目中,流行的操作系统有两种:Windows和Linux(UNIX的升级版)。由于Linux操作系统是开源和免费的,因此越来越得到大家的青睐。
3)有关进程和线程的比喻不是很恰当。各个线程之间是相互独立的,不会像淘米、洗菜、炒菜、煮饭一样有先后之分。在日常生活中,进程和线程的例子比比皆是。例如,一个很大的商场为了顾客进出方便,设计了好几个出入口,如果整个进出商场的过程是一个进程,那么从每个出入口进出商场的过程就是一个线程。
4)有关文件系统的说明,可以拿一个家庭来做比喻。如果把一个大房间里面的所有东西比喻为一个文件系统,那么电视、冰箱、空调、洗衣机、床等就是不同类型的文件。
5) 操作系统的意义在于让被认为是“很高深”的计算机走向了人民大众,让大家都感受到了科技的力量。也许,把操作系统比喻为一个家庭的“管家”还要更加的贴切。