操作系统中的一些概念问题

操作系统是管理计算机软硬件资源的程序,也是计算机系统的核心和基石。操作系统负责管理和配置内存、确定系统资源供需优先级、控制输入输出设备、操作网络、管理文件系统等基本事务。操作系统还为用户提供了与系统交互的操作界面。

操作系统的类型非常多样,不同机器安装的操作系统可以从简单到复杂,从手机的嵌入式系统到超级计算机的大型操作系统。许多操作系统制造商对其覆盖范围有不同的定义。比如有的操作系统集成了图形用户界面,有的只使用文本界面,把图形界面当成不必要的应用。

操作系统理论是计算机科学中一个有着悠久历史的活跃分支。操作系统的设计和实现是软件产业的基础和核心。

现代操作系统通常具有所使用的绘图设备的图形用户界面,并添加不同于键盘的输入设备,例如鼠标或触摸面板。旧的OS或者以性能为导向的服务器通常没有这么友好的界面,而是使用命令行界面(CLI)和键盘作为输入设备。以上两个接口实际上都是所谓的shells,它们的功能都是接受和处理用户的指令(比如按下一个按钮或者在命令提示符上键入指令)。

选择要安装的操作系统通常与其硬件架构有很大关系。只有Linux和BSD可以运行在几乎所有的硬件架构上,而Windows NT只移植到DEC Alpha和MIPS Magnum上。在1990年代早期,个人电脑的选择仅限于Windows系列、类Unix系列和Linux,直到今天,Linux和Mac OS X仍是最重要的替代选择。

大型机和嵌入式系统使用多种操作系统。最近很多主机为了享受其他平台的资源,开始支持Java和Linux。最近,从用于传感器网络的Berkeley Tiny OS到可以运行Microsoft Office的Windows CE,各种思想流派对嵌入式系统展开了激烈的争论。

个人电脑:苹果麦金塔电脑-苹果OS X电脑,视窗系统(仅英特尔平台),Linux,BSD。

IBM兼容PC-Windows、Linux、BSD和Mac OS X(非正式支持)。

主机:Burroughs MCP-B5000,IBM OS/360-IBM System/360,un ivac exec 8-un ivac 1108。

嵌入式系统:嵌入式系统使用非常广泛的操作系统(如VxWorks、eCos、Symbian OS和Palm OS)以及一些精简版的Linux或其他操作系统。在某些情况下,OS是指一个巨大的通用程序,内置固定的应用软件。在很多最简单的嵌入式系统中,所谓的OS是指上面唯一的应用程序。

类Unix系统:所谓类Unix家族是指种类繁多的OS,包括System V、BSD、Linux等。由于Unix是开放集团的注册商标,所以指的是遵守这家公司定义的行为的操作系统。类Unix通常是指包含比原始Unix更多功能的操作系统。

Unix系统可以在多种处理器架构下运行,在服务器系统上有很高的利用率,比如大学或工程应用的工作站。自由软件的Unix变种,比如Linux和BSD,最近越来越流行,在个人台式电脑市场也有很大斩获,比如Ubuntu系统。

一些Unix变种,如惠普的HP-UX和IBM的AIX,都是只为自己的硬件产品设计的,而SUN的Solaris可以安装在自己的硬件或x86计算机上。苹果电脑的Mac OS X是由NeXTSTEP、Mach和FreeBSD***,衍生出来的微核心BSD系统,替代了苹果电脑早期的非Unix MAC OS。

经过几年的努力,免费开源的Unix系统逐渐蚕食专利软件的专业领域。例如,计算机动画运营巨头——SGI的IRIX系统已经被Linux家族和贝尔实验室R&D团队设计的Project No.9和Inferno系统所取代,它们都用于去中心化的表达环境。与其他Unix系统不同,它们选择内置的图形用户界面。Plan 9并不流行,因为它最初推出时并不是自由软件。后来免费开源软件许可证Lucent Public License发布后,开始有了大量的用户和社区。Inferno已经卖给维塔·四星龙,并在GPL/MIT许可下发行。

目前全球500强电脑中,472台使用Linux,6台使用Windows,其余为BSD等Unix。

微软视窗:微软视窗系列操作系统是微软为IBM机器设计的基于MS-DOS的图形操作系统。现在的Windows系统,比如Windows 2000,Windows XP,都是在现代的Windows NT内核中创建的。NT内核是从OS/2和OpenVMS借来的。Windows可以在32位和64位的英特尔和AMD处理器上运行,但早期版本也可以在DEC Alpha、MIPS和PowerPC架构上运行。虽然由于人们对开源操作系统兴趣的增加,Windows的市场份额有所下降,但到2004年,Windows操作系统已经占据了全球桌面操作系统90%的市场。[3]

Windows系统也用于低层和中层服务器,支持web service的数据库服务等部分功能。最近微软花了大量的研发资金让Windows具备运行企业大型程序的能力。

苹果Mac OS: Mac OS是运行在苹果Macintosh系列电脑上的操作系统。Mac OS是商业领域第一个成功的图形用户界面。

Chrome OS:谷歌Chrome OS是谷歌的一个轻量级计算机操作系统项目,基于谷歌浏览器Chrome的Linux内核。

进程管理:无论是常驻程序还是应用程序,都是以进程为标准运行的。当使用冯诺依曼结构构建计算机时,每个CPU在同一时间只能运行一个进程。早期的OS(比如DOS)不允许任何程序打破这种限制,DOS同时只有一个进程运行(虽然DOS声称拥有终止和等待暂停(TSR)的能力,可以部分且困难地解决这个问题)。现代操作系统,即使只有一个CPU,也可以利用多任务功能同时运行多个进程。进程管理是指操作系统调整复杂进程的功能。

因为大多数计算机只包含一个中央处理器,所以在单核的情况下,多进程只是快速切换进程,让每个进程都能运行。在多核或多处理器的情况下,所有进程都通过许多协作技术在每个处理器或内核上转换。同时运行的进程越多,每个进程可以分配的时间比例就越小。很多OS都会遇到这个问题,比如时断时续的音效或者鼠标跳脱(称为系统颠簸,OS只能保持运行自己的管理程序而耗尽系统资源,其他用户或者硬件程序无法运行的状态)。进程管理通常实践分时的概念,大多数操作系统可以通过指定不同的特权级别来改变每个进程的分时比例。特权越高,运行优先级越高,单位时间所占比例也越高。交互式OS还在一定程度上提供了反馈机制,使得直接与用户交互的进程拥有更高的特权值。

除了进程管理,OS还负责进程间通信(IPC)、进程异常终止、死锁检测和处理等难题。

进程下还是有运行线程的问题,但是大部分OS不会处理运行线程遇到的问题。通常情况下,OS只提供一组API供用户自行操作或者通过虚拟机的管理机制控制运行线程之间的交互。

内存管理:根据帕金森定律:“如果你给程序更多的内存,程序会想尽办法用完”,所以程序员通常希望系统给他无限的、无限快的内存。大多数现代计算机内存架构都是分层的,速度最快、数量最少的寄存器排在第一位,其次是缓存、内存和速度最慢的磁盘存储设备。操作系统的内存管理提供了搜索可用内存空间、配置和释放内存空间以及交换内存和低速存储设备的内容的功能。这种功能也称为虚拟内存管理,它极大地增加了每个进程可用的内存空间(通常为4GB,尽管实际的RAM量远小于此)。但也带来了略微降低运行效率的缺点,严重时甚至会导致流程崩溃。

内存管理的另一个关键活动是在CPU的帮助下管理虚拟位置。如果内存设备上同时存储有多个进程,操作系统必须防止它们相互干扰内存内容(除非它们通过一些协议在可控范围内运行,限制可访问的内存范围)。分区内存空间可以达到目的。每个进程只会看到整个内存空间(从0到内存空间的最大上限)都是为自己配置的(当然有些位置是OS保留的,禁止访问)。CPU预先存储了几个表,以便将虚拟位置与实际内存位置进行比较。这种方法称为分页配置。

通过为每个进程创建一个单独和独立的位置空间,操作系统还可以很容易地一次释放所有被进程占用的内存。如果该进程没有释放内存,操作系统可以退出该进程并自动释放内存。

磁盘和文件系统:所谓文件系统,通常是指管理磁盘数据的系统,可以以目录或文件的形式存储数据。每个文件系统都有自己特殊的格式和功能,比如日志管理或无磁盘重组。

操作系统有很多种内置文件系统。例如,Linux有各种各样的内置文件系统,如ext2、ext3、ext4、ReiserFS、Reiser4、GFS、GFS2、OCFS、OCFS2、NILFS和谷歌文件系统。Linux还支持非本地文件系统,如XFS、JFS、FAT系列和NTFS。另一方面,Windows可以支持的文件系统只有FAT12、FAT16、FAT32和NTFS。NTFS系统是Windows上最可靠、最高效的文件系统。其他FAT家族都比NTFS老,对文件长度和分区磁盘容量有很大的限制,因此造成很多问题。UNIX的文件系统大多是UFS,UNIX的一个分支Solaris最近开始支持一种新型的ZFS。

上述文件系统大多有两种构建方法。该系统可以构建在日志文件系统或非日志文件系统中。日志文件系统可以以更安全的方式运行系统恢复。如果没有建立日志的文件系统遇到突然的系统崩溃,导致数据创建中途停止,系统需要专门的文件系统检查工具来撤销;日志类型可以自动回复。微软的NTFS和Linux的ext3、ext4、reiserFS和JFS都是日志文件系统。

每个文件系统都实现了相似的目录/子目录架构,但是在相似性下有很多差异。微软用“\”符号创建目录/子目录关系,文件名忽略大小写区别;UNIX系统用“/”创建目录模式,文件名大小写不同。

网络:很多现代OS都具备运行主流网络通信协议TCP/IP的能力。换句话说,这样的操作系统可以进入网络世界,与其他系统共享文件、打印机和扫描仪等资源。

很多OS也支持过去网络启蒙时代的各种网络通信协议,比如IBM创立的SNA,DEC在其系统中设定的DECnet架构,微软为Windows制定的专用通信协议。还有许多为特殊功能开发的通信协议,如NFS系统,它可以在网络上提供文件访问。现在大量的UDP协议用于流媒体和游戏消息传输。

安全性:大多数操作系统都包含一些信息安全机制。信息安全机制主要基于两个概念:

操作系统为外界提供了直接或间接访问多种资源的通道,如本地磁盘驱动器上的文件、受保护的特权系统调用、用户的私有数据以及系统运行的程序提供的服务。

操作系统能够授权资源访问请求。允许认证请求,拒绝不能通过的非法请求,并对该请求授予适当的权限。某些系统的身份验证机制只是简单地将资源分为特权和非特权,每个请求都有一个唯一的标识号,比如用户名。资源请求通常分为两类:

内部资源:通常是来自正在运行的程序的资源请求。在某些系统上,程序一旦可以运行,就可以做任何事情(比如DOS时代的病毒),但通常OS会给程序一个识别码,当程序发出请求时,会检查其代码与所需资源的访问权限之间的关系。

外部来源:来自非本地计算机的资源请求,例如远程登录到本地计算机或一些网络连接请求(FTP或HTTP)。为了识别这些外部请求,系统可以对该请求提出认证要求。通常会要求输入用户名和相应的密码。该系统有时使用其他认证方法,如磁卡或生物数据。在某些情况下,如网络通信,资源(如匿名FTP服务器或P2P服务)通常无需身份验证即可访问。

除了允许/拒绝形式的安全机制之外,高安全性系统还将提供记录选项,允许记录各种访问资源的请求(例如,“谁读过这个文件?”)。

由于军事和商业组织在计算机上记录敏感数据,安全机制一直是操作系统历史上长期关注和讨论的问题。美国国防部(DoD)建立了可信计算机系统评估计划(TCSEC ),该计划确立了评估安全机制有效性的基本原则。这对于操作系统作者来说非常重要,因为TCSEC是一个标准程序,用于评估、分类和选择处理、存储和获取敏感或机密数据的计算机系统。

内部信息安全:内部信息安全可以看作是防止正在运行的程序随意访问系统资源的手段。大部分OS都允许普通程序直接操作电脑的CPU,所以出现了一些问题,比如如何强行停止像OS一样可以处理事务的程序,运行同样的特殊指令。毕竟在这种情况下,OS只是另一个平等的程序。为通用OS生产的CPU通常在硬件层面一定程度上践行特殊指令保护的理念。通常情况下,特权级别较低的程序在想要运行一些特殊指令时会被阻止,比如直接访问硬盘等外部设备。因此,程序必须要求操作系统运行特殊指令来访问磁盘。因此,操作系统有机会检查该程序的身份,并相应地接受或拒绝其请求。

在不支持特殊指令架构的硬件上,另一个也是唯一的保护方法是,OS不直接使用CPU运行用户的程序,而是通过模拟一个CPU或者提供一个p代码系统(伪代码运行机),让程序像Java一样运行在虚拟机上。

内部安全机制在多用户计算机中尤为重要:它允许每个系统用户拥有自己的个人文件和目录,其他用户不能随意访问或删除。因为任何程序都有可能绕过OS的监控,更有可能绕过侧录程序的监控,而具有强制力的内部安全机制在侧录启动时也是非常重要的。

外部信息安全:通常,一个操作系统会为其他网络上的计算机或用户提供(托管)各种服务。这些服务通常由端口或操作系统网络地址后面的数字接入点提供。通常,此服务包括文件共享(NTFS)、打印共享、电子邮件、web服务和文件传输协议(FTP)。外部信息安全的最前沿是硬件设备,如防火墙。许多种类的软件防火墙通常设置在操作系统内部。软件防火墙可以设置为接受或拒绝操作系统上运行的服务与外部世界之间的连接。因此,任何人都可以安装并运行一些不安全的网络服务,如Telnet或FTP,并设置一种机制来阻止除一些私有通道之外的所有其他连接,以防止不良连接。

用户界面:今天的大多数操作系统都包括一个图形用户界面。有几种比较老的OS将图形用户界面与核心紧密结合,比如最早的Windows和Mac OS实现产品。这种方式可以提供更快的图形响应能力,而且不需要切割模块就很省力,但是会有很强的副作用,比如图形系统崩溃会导致整个系统崩溃,比如死亡蓝屏。许多现代OS已经模块化,将图形界面的子系统从核心中分离出来(已知Linux和Mac OS X最初就是这样设计的,Windows的一些扩展版本最终也采用了这种方法)。

许多操作系统允许用户安装或创建任何他们喜欢的图形界面[6]。大多数Unix和Unix派生的系统(BSD、Linux和Minix)通常用GNOME或KDE桌面环境安装X Window系统。然而,一些操作系统没有这样灵活的图形用户界面,例如Windows。这种OS只能通过额外的程序来改变其图形用户界面,甚至根本只改变菜单风格或颜色配置等部分【出处请求】。

图形用户界面与时俱进。例如,Windows每次新版本上市都会改变其图形用户界面,Mac OS的GUI也将在Mac OS X上市时进行重大变革。

驱动程序:所谓设备驱动程序,是指一种设计用来与硬件交互的计算机软件。通常是设计良好的设备交互接口,利用与该硬件相连的计算机集排子系统或通信子系统,为该设备提供订购和接收信息的功能;并最终向操作系统或应用程序提供消息。驱动程序是为特定硬件和特定OS设计的软件,通常以操作系统核心模块、应用软件包或普通计算机程序的形式运行在OS内核下,以达到与硬件透明平滑交互的效果,并提供一个硬件在处理异步时变硬件接口时所需的中断处理程序。

驱动程序设计的主要目的是抽象操作。任何一个硬件模块,哪怕是同一种设备,在硬件设计上都有很大的差异。厂商推出的较新模块通常更可靠、更高效,控制方式也会有所不同。计算机及其操作系统往往无法预测现有设备和新设备的区别,因此无法知道它们的操作方法。为了解决这个问题,OS通常会主动制定各个设备的操作模式,而驱动程序的作用就是将那些OS制定的行为描述翻译成设备能够理解的自定义操作方式。

一旦安装了理论上合适的驱动程序,相应的新设备就可以无误地运行。这个新的驱动可以让这个设备完美的贴合在OS中,让用户意识不到这是OS原本没有的功能。