我是荔园微风,作为一名在IT界整整25年的老兵,今天给大家讲讲操作系统。
操作系统核心组件
用户借助于一个或多个应用程序与操作系统进行交互,常常是通过一个称为shell的特殊应用程序进行的,shell也叫作命令解释器。105今天的大多数shell,其实现或者是基于文本的接口,使用户能够从键盘发送命令;或者是GUI,允许用户单击和拖放图标,以便向操作系统请求服务(例如,打开一个应用程序)。
例如,微软公司的Windows XP提供了一个GUI,用户可以通过此GUI发送命令,但用户也可以采用另一种方法,打开一个接受输入命令的命令提示窗口。
包含操作系统核心组件的软件称为内核。典型的操作系统核心组件包括:
进程调度程序(process scheduler),它确定什么时候在处理器上执行进程以及执行多长时间。
内存管理程序(memory manager),它确定什么时候将内存分配给进程以及如何分配,同时也确定当主存储器变满时该怎么办。
I/O管理程序(I/O manager),分别为来自硬件设备或到硬件设备的请求提供输入和输出服务。
进程间通信(IPC)管理程序(interprocess communication manager),它允许进程之间互相通信。
文件系统管理程序(file system manager),它将存储设备上赋予名称的数据集组织起来,并为访问这些设备上的数据提供接口。
几乎所有的现代操作系统都支持多道程序设计环境,在这种环境中,多个应用程序可以同时执行。操作系统最基本的职责之一就是确定哪个处理器执行进程以及进程执行多长时间。
程序可以包含若干元素,这些元素共享数据,且可以同时执行。例如,Web浏览器可以包含若干单独的组件,分别用来读取Web页面的HTML,检索页面的媒体(例如,图像、文本和视频),在浏览器窗口中显示页面。这种程序组件称为线程(thread),它们独立地执行,但在公共内存空间中完成它们的任务。
一般情况下,许多进程竞争使用处理器。进程调度程序可以根据若干标准做出其决策,例如,可以根据进程的重要性、估算的进程运行时间或者它已经为获得处理器等待了多长时间等标准。
内存管理程序为操作系统和为进程分配内存。为了确保进程不妨碍操作系统和确保进程之间不互相干扰,内存管理程序阻止还没有为其分配内存的每一个进程访问内存。当今几乎所有的操作系统都支持虚拟内存。
操作系统的另一个核心功能是管理计算机的输入/输出(I/O)设备。输入设备包括键盘、鼠标、麦克风和扫描仪等,输出设备包括显示器、打印机和扬声器等。存储设备(例如,硬盘、可擦写光盘和磁带)和网卡既起着输入设备的作用,也起着输出设备的作用。当一个进程期望访问一个I/O设备时,它必须向操作系统发出系统调用。随后由设备驱动程序(devicedriver)来处理此系统调用,设备驱动程序是一个直接与硬件交互的软件组件,它常常包含设备专用的命令,以及用来完成请求的输入/输出操作的一些其他指令。
大多数计算机系统能够永久性地存储数据,即计算机关机之后数据仍能存留。因为相对来说主存储器较小,且计算机关机时主存储器中的数据会丢失,所以使用永久性的辅助存储设备,最常用的就是硬盘。当一个进程请求访问磁盘设备上的信息时,就发生了磁盘I/O,这是最常见的I/O 形式之一。
但是,辅助存储器比处理器和主存储器慢得多。操作系统的磁盘调度程序(diskscheduler)组件负责对磁盘I/O 请求重新排序,以便获得最佳性能,使进程等待磁盘I/O的时间最小。独立磁盘冗余阵列(Redundant Array of Independent Disk,RAID)系统通过一次使用多个磁盘为I/O请求提供服务,试图减少进程等待磁盘I/O的时间。
操作系统使用文件系统来组织并有效地访问存放在存储设备上的指定数据集,这些数据集称为文件。
进程(或线程)经常是互相协作来完成一个共同的目标,因此,许多操作系统都提供了进程间通信(IPC)和同步机制,以便简化这种并发程序设计。进程间通信使进程借助于进程(和线程)之间发送的消息进行通信,通过使用同步机制所提供的结构,可以确保进程(和线程)合适地共享数据。
操作系统目的
用户一定期望操作系统具有某些特性,例如:
效率(efficiency)
健壮性(robustness)
可伸缩性(scalability)
可扩展性(extensibility)
可移植性(portability)
安全性(security)
交互性(interactivity)
易使用性(usability)
高效的操作系统(efficient operating system)具有高吞吐量(throughput)和低平均周转时间。吞吐量是指在一定时限内处理器能够完成的工作量。由前述可知,操作系统的一个作用就是为多个应用提供服务,效率高的操作系统提供这些服务所花费的时间较短(请看下面“操作系统思想:性能”)。
健壮的操作系统(robust operating system)具有容错功能和可靠性,这样的系统不会由于单独的应用程序或硬件错误而发生故障,即使发生故障,也会很适度(即将工作损失减到最小,阻止损坏系统硬件)。这样一个操作系统将向每一个应用提供服务,除非它所依赖的硬件发生故障。
可伸缩的操作系统(scalable operating system)能够使用添加的资源,如果一个操作系统不是可伸缩的,那么它们很快就无法充分地利用补充的资源。可伸缩操作系统能够容易地调整其多道程序设计的道数。对多处理机系统来说,可伸缩性是特别重要的一个属性。如果向系统中添加更多的处理器,理想情况下,处理能力应该与进程数量成比例地增加,虽然实际上这种情况并不会发生。
可扩展的操作系统(extensible operating system)能很好地适应新技术,并提供对操作系统进行扩展的能力,以便完成原先设计时所不能完成的任务。
可移植的操作系统(portable operating system)设计时要使它能够运行于许多种硬件配置上。应用程序的可移植性也很重要,因为开发应用程序很昂贵,所以同样的应用程序应该运行于各种硬件配置中,这样就可以减少开发成本。要达到这种可移植性,操作系统起着至关重要的作用。
安全的操作系统(secure operating system)可以阻止用户和软件未经授权而访问服务和资源。保护(protection)指的是实现系统安全策略的一种机制。
交互式操作系统(interactive operating system)允许应用程序快速响应用户动作或者事件。
易使用的操作系统(usable operating system)有这样一种潜在的可能性,可以服务于相当大的用户群。这些操作系统一般都提供易于使用的用户界面,例如Linux、Windows XP和MacOSX等都是具有易使用特性的操作系统,因为它们每一种操作系统都支持大量的应用程序集,并提供标准的用户界面。许多实验用的和理论研究用的操作系统并不支持大量的应用程序集,或提供友好的用户界面,因此,就不能认为这些操作系统是易使用的操作系统。
操作系统思想:
性能
操作系统最重要的目标之一就是尽量使系统性能最优。在日常生活中,我们都会接触到性能,例如,我们测量汽车的汽油里程,我们记下各种速度记录,教授给学生评定成绩,雇员接受老板的绩效评估,公司总裁的业绩由公司的利润来衡量等。
高性能是操作系统成功必不可少的条件。但是,性能到底高不高,常常要看由谁来评判——有多种方法可以对操作系统性能进行分类。例如,如果是批处理系统,则吞吐量就是一个很重要的测量标准;如果是交互式分时系统,则快速响应显得更为重要。
有许多提高性能所采用的技术。例如,将处理器时间分配给进程,以提高按照交互性和吞吐量来衡量的系统性能。将内存分配给进程,以减少进程的执行时间。着重介绍通过对I/O请求重新排序来提高磁盘性能。根据若干重要的性能标准对系统进行评估。
作者简介:荔园微风,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。