操作系统(英文:Operating System,简称:OS)是管理计算机硬件的程序,为应用程序提供基础,也是用户与硬件的接口。[3]从用户角度看,操作系统处于用户和硬件系统之间,用户通过它来使用计算机。[4]从资源管理上看,在一个计算机系统中,通常都含有多种硬件和软件资源,归纳起来可将这些资源分为四类:处理机、存储器、I/O设备以及文件(数据和程序)。操作系统的主要功能是对这些资源进行有效管理。[4]从资源抽象上看,操作系统是建立在硬件之上的软件集合,不仅增强了系统功能,也隐藏了硬件操作细节,实现了对硬件的多层次抽象。[4]
操作系统的发展历史包括多个里程碑,从最早的批处理操作系统到多任务操作系统,再到分布式操作系统和实时操作系统。[5]不同类型的操作系统适用于不同的应用场景,例如,适用于桌面和服务器环境的 Windows、macOS和Linux,适用于移动设备Android和iOS。随着技术的发展,操作系统也在不断地更新换代,以提高性能、安全性、易用性。操作系统的进步极大地推动了计算机的发展,也促进了互联网时代的到来,在计算机系统中扮演着极其重要的角色。[6]
操作系统定义
操作系统是计算机系统中的核心组成部分,它充当着管理和协调计算机硬件与软件资源的桥梁,管理着计算机的内存、进程、文件系统、网络通信等,为用户程序提供接口与环境,使其可以方便地访问计算机硬件资源。[7][4][2]
计算机系统的组成
随着计算机技术的迅速发展,计算机系统的硬件和软件资源越来越丰富。从功能上,可把计算机系统划分为四个层次:硬件、操作系统、实用程序和应用程序。这四层的关系表现为一种单向调用关系,即外层软件必须按照事先约定的方式调用内层软件或硬件提供的服务。通常把这种约定称为界面或接口。[8]

硬件层由计算机的硬件资源组成,包括中央处理器、存储器和I/O设备。其中存储器包括主存和辅助存储器,辅助存储器又叫外存,包括磁盘、磁带、光盘等。[8]
操作系统是整个计算机系统的管理和控制中心。一个计算机系统如果没有操作系统,整个系统将无法工作。[8]
实用程序通常是常驻在磁盘上的程序,包括各种语言编译程序、文本编辑程序、调试排错程序、连接装配和装入程序等各类程序。这些实用程序为用户提供了一个良好的使用计算机系统的环境。[8]
应用程序是计算机系统的最外层软件,主要负责解决用户的实际问题,这些程序通常由用户或专门的软件公司编制,种类比较丰富。[8]
进程
进程又叫做任务,是操作系统中最基本、最重要的概念之一。进程的引入是为了描述系统中并发执行的各种活动,对于操作系统的理解、描述和设计都具有十分重要的意义。进程具有动态的特性,区别与程序的静态特点,进程有以下几种不同定义方式:[9]
进程是程序的一次执行过程进程是程序在一个数据集合上顺序执行时发生的活动。它是系统进行资源分配和调度的一个独立单位。[9]
线程
线程是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,它们共享进程的资源和地址空间。相较于进程,线程之间的切换开销更小,且可有效利用多核 CPU。线程允许一个应用程序并行执行多个任务。[3]
线程需要进程提供运行所需的资源,但线程之间可独立执行。线程拥有自己的程序计数器、寄存器和栈,线程切换只需要保存和恢复此状态。线程可分为用户线程和内核线程。用户线程需要在用户空间管理,可移植性强,但需要进程内调度。内核线程由内核管理调度,可直接调用系统调用,但不方便移植。[1]
地址空间
操作系统地址空间是操作系统管理和分配给各个进程的内存地址范围。地址空间由操作系统内核创建和管理,为每个进程分配独立的地址空间,以实现进程间的隔离。[3]
地址空间通常被划分为以下几个区域:
文本区:存放程序的机器代码,属性为只读。数据区:存放程序运行时的全局变量和静态变量,属性为可读写。堆区:运行时动态分配的内存区域,用于存放进程执行时申请的内存块,属性为可读写。栈区:用于存放函数调用时的 parameters、return address 等信息,属性为可读写。[1]
通过对地址空间的划分和保护,操作系统可以实现对每个进程的内存隔离,保证一个进程无法访问其他进程的内存,从而提高系统安全性和稳定性。[3]
文件
所有的计算机应用程序都需要存储和检索信息,这些信息在计算机系统中通过磁盘、光盘等物理介质进行存储。操作系统为信息存储和访问提供了标准的使用界面,为信息定义逻辑存储实体单元,称之为文件。同时,操作系统还负责将文件映射到物理设备当中。[10][11]
输入/输出
所有的计算机都有用来获取输入和产生输出的物理设备,输入/输出(I/O)系统负责在计算机系统内核和外部设备之间传输数据。I/O系统将外部设备抽象为文件,应用程序通过文件I/O接口访问设备。设备驱动程序负责控制硬件并实现文件I/O接口。[3][1]
I/O的主要特性是外部设备速度慢,上传输时 CPU必须等待I/O完成。操作系统通过缓冲区、缓存、中断、DMA等技术改进I/O性能。I/O系统还必须处理不同设备的数据表示,以及支持网络分布式文件系统的远程I/O操作。[1]
shell
shell是操作系统的用户界面,提供了用户与内核进行交互操作的一种接口。shell作为命令行解释器,可接受用户输入的命令,然后调用相应的应用程序。shell还提供了许多内建命令,如 ls, cp 等。Shell通过进程控制、输入输出重定向、管道等机制,连接多个命令实现强大功能。[3]
现在,许多个人计算机使用图形用户界面GUI。事实上,GUI与shell 类似,GUI 只是一个运行在操作系统顶部的程序。在 Linux 系统中,这个事实更加明显,因为用户可以在两个GUI 中选择一个:Gnome和KDE, 或者使用终端视窗。在Windows 中也可以用不同的程序代替标准的GUI桌面(Windows Explorer), 这可以通过修改注册表中的某些数值实现,不过极少有人这样做。[1]
内核
操作系统内核是操作系统的核心部件,它负责管理系统的进程、内存、设备驱动、文件系统以及其它关键组件,提供底层的系统服务。内核通常以内核空间的形式存在,与用户空间分离。当应用程序需要系统服务时,它们通过系统调用接口请求内核提供服务。[12]
常见的内核有:
Linux内核:开源的类Unix内核,广泛应用于服务器、嵌入式设备等领域。其可扩展性和可移植性使其成为最流行的内核之一。[13]Windows NT内核:微软Windows操作系统的内核,提供了进程线程管理、内存管理、I/O管理等功能。它支持各种Windows系统版本从Windows XP到最新版的Windows 11。[14]macOS内核:苹果macOS系统的Darwin内核,基于类Unix,管理系统的进程调度、内存分配、文件系统、驱动程序等。[15]
手工操作阶段
计算机技术起源于20世纪30年代,1946年诞生了世界上首台数字型计算机,开启了计算机发展的道路。[6]早期的计算机系统仅由硬件和应用软件组成,用户直接控制使用计算机硬件系统,没有操作系统,称为“手工操作”阶段。[8][5]随后计算机速度的提高和外部设备的进步,为提高计算机资源的利用率和用户的上机便利,逐步引入了操作系统。[5]
随着操作系统的发展,出现了多种不同的操作系统分类体系。根据用户的使用环境与功能特性、操作系统的体系结构以及操作系统的内核机构可采取不同的分类方式。[2]
单道批处理系统时代(20世纪20年代)
单道批处理系统的设计思想是:设计一个常驻主存的程序Monitor,操作员有选择地把若干用户作业合成一批,安装到输入设备上并启动Monitor,Monitor首先把第一道作业调入主存并启动该作业,一道作业运行结束后再把下一道作业调入主存并启动运行。[5]单批量加工体系在1955至1965年间首先采用了汇编语言,例如 FORTRAN和 Job,同时也是第一次采用操作系统,即 FMS, IBMSYS ,其在科学工程计算中的作用尤为突出,特别是在线批量和离线批量加工。[16]。
多道批处理与分时、实时系统时代(20 世纪 60 年代初)
多道批处理系统即在系统中同时存放多道作业,多道作业分时轮流占用处理器运行。在早期的批处理系统中,处理器与外部设备以串行方式工作,两者的利用率较低。随着外部设备功能加强,能够与处理器并行工作,外部设备工作完后通过“中断”通知处理器去做 I/0 后续工作。这样处理器在外设 I/0 的时候能够去运行其他程序,因此引入了“多道程序设计”的思想,使单道批处理系统发展为多道批处理系统[5]。多道批处理系统在1965-1980期间非常流行,它的操作系统表现出了复杂性和巨大的特征,因为它可以同时存储多个任务。它使用了一些新的技术,例如multiprogram-ming, SpooLing等[17]。

分时系统中所谓的“分时”占用与“并发”运行的含义是:一台计算机与多台终端相连接,用户通过各自的终端和终端命令以交互的方式使用计算机系统。结合多道程序设计技术,系统使每个用户都能感觉到好像是自己在独占地使用计算机系统,而操作系统负责协调多个用户任务轮流占用处理器。[5]在协调用户分享处理器时,操作系统通常采用“时间片轮转”原则分配处理器给用户程序。分时技术是从70年代开始的,MIT的 Compatible Time Sharing System的分时系统,开创了一个多用户共享电脑资源的新时代。[17]
实时系统是指对来自外部的信息能在规定的时限内做出处理的系统。“实时”应用可分为两类:一类是实时控制,把计算机用于诸如飞行器的飞行自动控制。这类系统必须确保实时任务在确定时间内完成,又称强实时系统。各类控制系统计算机上运行的“嵌入式操作系统”都属于实时控制类实时系统。另一类是实时事务处理,是把计算机用于铁路订票系统、银行管理系统等需要及时响应的系统。[5]
多方式通用操作系统时代(20 世纪 60-70 年代)
多方式通用操作系统是在实时系统之后出现的,是同时兼有批处理、分时和实时功能中两种或三种的系统。在实际应用中,同时具有上述三种功能的系统不多见,通常是实时与批处理结合,或分时与批处理结合。此时,通常将批处理任务作为后台任务,实时或分时任务作为前台任务,从而形成所谓的前后台系统。当代同时具备两种上述功能的系统有很多,例如UNIX操作系统,Linux操作系统,Oracle公司的Solaris,Microsoft公司的Windows系列等等。[18]
个人桌面操作系统是一种单用户、多任务的操作系统,属于多方式通用操作系统的范畴。个人桌面操作系统主要供个人使用,采用图形化界面进行人机交互,界面友好且方便使用。常见的个人桌面操作系统有Windows、macOS、Ubuntu等。[2]
Windows系统是由美国 Microsoft 开发的商用操作系统,其具有良好的用户界面、精美的窗口和易于学习的特点。同时,公司具有良好的生态系统,可为用户提供多种应用程序。该系统具有门类齐全、功能齐全、使用方便、实用的特点。所以,Windows系统是当今电脑台式机中使用最多的一种。[19]

Ubuntu由英国 Canonical 公司发布并提供商业支持,是著名的Linux发行版之一,也是目前最多使用者的Linux版本。[20]
macOS 是一套由苹果公司在 Macintosh系列电脑上运行的操作系统。macOS是第一款在商业应用中取得成功的 GUI系统。[5]
网络与分布式系统时代(20 世纪 70 年代后期)
网络操作系统是实现网络通信与网络资源管理的操作系统。作为集团、单位和个人使用的计算机,其本身的信息资源是有限的,且都是分散和孤立在各地的,资源和数据无法相互利用和共享。为了实现异地计算机之间的数据通信和资源共享,需要将分布各地的计算机和终端设备通过数据通信系统联结在一起,形成计算机网络。网络操作系统一般建立在各个主机的本地操作系统基础之上,网络中的各台计算机都配有各自独立的操作系统,网络操作系统的功能是实现网络操作、资源共享和保护,以及提供网络服务和网络接口等。[18]
分布式操作系统可分为两类:一类是建立在紧耦合分布式系统基础之上的,另一类是建立在松散耦合计算机网络基础之上的。分布式计算机系统简称分布系统,是由多个分散的计算机经网络连接而成的统一的计算机系统[18]。近几年随着网络技术发展而火爆出现的云操作系统,便是以分布式操作系统的概念为基础,实现了分布式计算、分布式文件存储等功能。[18]
多机系统时代(20世纪 90 年代)
多机系统也叫多处理机操作系统,是指具有两个以上的处理机,并在其上建立的操作系统。多处理机操作系统是一个复杂的系统,它主要反映在多处理机的并发控制上,因此多处理机环境需要配备专门的操作系统,目前多处理机系统已经被服务器广泛采用。多处理机操作系统主要有两种类型:[18]

非对称多处理机:其中每台处理机指派专门的任务,有一台主处理机控制整个系统,其余的处理机则执行主处理机下达的任务,或执行预先规定好的任务,是一种主从关系。[18]对称多处理机:所有的处理机都是相同的,且都运行一个相同的操作系统副本,所有的处理机是对等的,没有主从之分,是多处理机系统的主要形式。[18]
嵌入式系统(21世纪初)
嵌入式操作系统是运行在嵌入式系统环境中的系统软件,是面向用户、产品、应用的系统。嵌入式系统对整个嵌入式系统及其所操作、控制的各种部件装置等资源进行统一协调、调度、指挥和控制。常见的嵌入式操作系统包括 Android 和 iOS 等。[8][2]
虚拟化与云计算(21世纪10年代)
虚拟化是一种将软件技术从运行环境中抽离出来的技术,云计算则是一种利用虚拟化和其他技术实现大规模数据中心部署、监控和控制的方法,虚拟化和云计算两个术语在一些场景下含义会重叠。[21]通过在云计算环境中使用虚拟化,可以在一系列通用计算硬件上以受控且一致的方法灵活地部署应用程序工作负载。通过在虚拟机中实现Web服务器等应用程序,可以动态地扩展在线计算能力,以匹配变化的负载。[21]
2006年Google提出“Google 101 计划”,并正式提出“云”的概念和理论。2006年8月,亚马逊公司基于开源虚拟化平台Xen,推出了弹性计算云服务(英文:Elastic Compute Cloud,简称:EC2)的公众测试版本,被认为是云计算技术的开端。[22][23]
微内核结构系统
微内核的设计思路是,除了必须放在内核空间中运行的,尽可能将操作系统与服务置于用户空间。[2]微核架构将系统代码优化压缩到最小,最大限度保留核心部分。操作系统的功能主要通过用户进程实现,即用户进程将请求发送到服务器,服务器完成操作后通过某种渠道反馈给用户进程。在微核架构下,操作系统核心负责处理客户端和服务器间的通信。系统包含若干模块,每个模块提供文件服务、业务流程、终端服务等功能,规模较小、易于管理。这些服务以用户程序为基础,不在内核中操作,也不能直接访问硬件。因此即使某个服务器故障或被攻击,也不会影响系统,仅导致相应服务器崩溃[24]。

单体内核结构系统
随着科技发展,硬件和平台性能大幅提升,操作系统种类和数量也在增加,其复杂度和功能不断提高。在此背景下,单体内核结构的操作系统诞生并被广泛应用,如UNIX和Windows NT/XP[24]。
单内核架构的操作系统通常包含文件管理、内存管理、设备驱动、CPU调度和网络协议处理等功能。随着内核越来越复杂,模块化成为主流,将内核划分为文件管理、内存管理、驱动、CPU调度、网络协议等模块。这些模块地址空间与核心相同,通过功能调用实现模块间通信。采用模块化后,通信接口不变时,结构变动不会影响其他模块,便于系统维护和升级。[2][24]

尽管单内核系统采用模块化设计,但所有模块在硬件基础上,以操作系统核心为支撑,为应用软件提供服务。模块之间没有级别差异[24]。
操作系统功能
操作系统通过管理计算机资源,提供计算机的基本功能。从资源管理的角度看,操作系统要对计算机系统内所有的资源进行有效和自动的管理,实现资源合理分配与高效使用。从用户角度来看,用户只需要通过操作系统所提供的简单接口就可以使用计算机中的资源。通常操作系统的基本功能包括以下4方面:存储管理,进程管理,设备管理,文件管理[25]。
存储管理
存储管理的主要内容存储管理的主要任务式为多道程序的运行提供运行空间,方便用户使用存储器,并提高内存的利用率。在计算机体系架构中,存储器存在一个层次体系。顶层的存储器(寄存器)读写速度较高,然而空间小,底层则相反。寄存器和CPU速度相当,然而容量比较小,大约在KB级别。[26]存储管理包括内存分配、存储保护、地址映射、内存扩充四方面内容。[5]

内存分配
内存分配的主要任务式为每道用户程序分配一定的内存空间。操作系统必须记录整个内存的使用情况,处理用户提出的申请,按照某种策略实施分配或回收空间。[27]内存必须容纳操作系统以及各种用户进程。早期的内存分配方式是连续内存分配,该方式下每个进程包含在一个独立的内存区域,下一个区域会容纳另一个进程。然而连续内存分配的方式下,由于会产生大量的“碎片”,导致了内存使用效率不高,尽管引入了类似“紧凑”的处理碎片的方法,其引起的系统开销一般会很大。于是之后有了“分页存储管理”以及“段页式存储管理”等不连续的空间分配方法。[26]
连续内存分配包括以下三种具体的方式:


固定分区分配:是将用户内存空间划分为若干个固定大小的区域,每个分区中只加载一个进程。固定分区分配根据分区大小的情况还可以分为等分区和不等分区两种情形。不等分区利用率更高。[26][28]动态分区分配:分区的长度和数量都是可变的。当进程加载到内存中时,可以为它分配正好是它所需要的内存。假设一个64MB的内存,操作系统占据最高位的8MB,之后依次加载进程A~D,它们的内存需求分别是22MB、14MB、4MB和12MB,操作系统将依次按照它们的请求进行连续分配。之后随着进程运行结束,依次释放相应内存,例如当进程C结束后,进程原本占据的4MB内存空间将会进入空闲状态。[26][28]
此外,在动态分区分配的方法中,当一个进程加载到内存中时,操作系统需要判定将哪个空闲块分配给该进程,这个判定过程常用到的算法有:首次适应法、最佳适应法、最坏适应法。[28]
Buddy系统:固定分区的方式限制了活动进程的数量,若可用分区数量与进程数量相差较大,则会使内存的使用效率较低。而动态分区方式维护成本高,带来的系统开销大。Buddy系统也叫伙伴系统,是一种混合使用固定分区与动态分区的系统,结合了固定分区与动态分区方式二者的优点。[26][28]
分页存储管理假设将内存划分为等长的固定大小的簇,进程也按簇划分成“页”,页分配到可用的内存簇“框”或“页框”中。[26][28]
存储保护
在多道程序设计环境下,每道程序都在自己的内存空间中运行,各道程序之间互不侵犯,互不干扰。[2]存储管理需要保证每道程序自身的代码与数据的安全。存储保护包括防止访问地址越界和控制正确存取,相应地有地址越界保护和信息存取保护两种方式。每道程序的地址空间限定了自己的合法访问范围。[2][27]每道程序只能访问自己的主存区而不能跳转到另一进程中的指令,尤其不能访问操作系统的任何部分。无特别许可,一个进程也不能访问其他进程的数据区。地址越界保护是指对进程执行时产生的所有主存访问地址进行检查,确保进程仅访问自己的主存区。信息存取保护是指进程访问自己的主存区时,对访问权限进行检查,从而确保数据的安全性和完整性,防止有意或无意的误操作而破坏主存信息。[27]
地址映射
逻辑地址指的是一个内存位置,该位置与指派给当前数据的实际地址无关。物理地址则是指绝对地址,是在内存中的实际位置。在多道程序设计环境下,每道程序都是动态加载进内存的。此外,为便于管理和提高内存的使用效率,每道程序都具有逻辑地址空间与物理地址空间。在程序运行过程中,必须将代码和数据的逻辑地址转换为内存的物理地址。这种逻辑地址到物理空间地址的转换称为地址映射。[26]

内存扩充
内存的容量是有限的。为满足用户的需要,可通过建立虚拟的存储系统来实现内存容量的逻辑扩充。其中,虚拟存储器是现代操作系统中实现内存扩充功能的一项重要技术。但该功能并非是从物理上实际地扩大内存的容量,而是从逻辑上实现对内存容量的扩充,使得用户所感觉到的内存容量比实际内存容量大得多。于是便可以让比内存空间更大的程序运行,或者让更多的用户程序并发运行。分页存储管理是实现虚拟存储器的重要手段。[29]
进程管理
在多道程序或者多用户的环境下,要组织多个作业同时运行,就要解决处理器管理的问题。在多道程序系统中,处理机的分配和运行都是以进程为单位的,所以对处理机的管理可归结为对进程的管理。进程管理则主要包括四方面:进程控制,进程同步,进程通信和进程调度。[2]
进程控制
对进程进行管理,首先需要建立一个专用数据结构来描述进程的相关信息,这个数据结构称为进程控制块(英文:Process Control Block,简称:PCB),该数据结构包含了管理进程所需要的信息。[2]进程通常包括运行(Running)、就绪(Ready)、等待/阻塞(Blocked)、创建(New)、结束(Exit)五种状态,各种状态之间的转换见。进程控制主要包括进程的创建、终止、挂起和恢复操作。进程可以通过系统调用或者fork操作来实现创建,也可以通过exec系统调用来加载并运行程序。当进程完成任务或者发生错误时,可以通过exit系统调用终止进程。操作系统还可以通过信号来中断或挂起一个正在运行的进程,并在需要时将其恢复。[30]

进程同步
由于进程间会共享操作系统的资源,所以需要进程同步来协调它们之间的操作顺序。最基本的同步原语是互斥量(Mutex),通过获取和释放互斥量可以实现对共享资源的互斥访问。另一个重要的同步机制是条件变量,进程在某条件不满足时等待,在条件改变时通过信号通知进程。[31]
进程通信
进程通信(英文:Inter-Process Communication,缩写:IPC)机制允许进程间传输信息。其中管道是最简单的通信方式,它通过一个写入端和读取端在进程间传递数据,在Linux系统中,pipe()函数调用是一种常见的管道操作。FIFO有时候也称为命名管道,相比于一般的管道,FIFO具有多个进程可以打开并进行读写的文件名。信号量也可以用于进程间的同步与互斥。共享内存允许进程访问统一内存区域,当一个进程改变了这块内存中的内容时,其他进程就会察觉到这个更改,可以高效地传输大量数据。消息队列则通过内核中的队列传递消息,不需要命名管道中的同步操作。实践中常使用 mgsget() 函数来创建和访问消息队列列,使用msgsnd()函数把消息添加到消息队列中,使用 msgrcv() 函数函数来从消息队列中获取消息,使用msgctl()函数来控制消息队列列。[30][31]哲学家进餐问题、读者-写者问题、理发师睡觉问题等都是经典的IPC问题。[31]
进程调度
操作系统需要对进程进行调度,将调度资源CPU时间分配给不同的进程。长期调度根据进程对资源的需求,将暂时不需要运行的进程交换到辅存中。短期调度则频繁地在就绪状态的进程间切换,确保每个进程都获取了一定的执行时间。调度算法会考虑进程的优先级和公平性等因素。[30]常用处理调度算法有先来先服务、非抢占及抢占的短进程优先、高响应比优先、时间片轮转、多级反馈队列及立即抢占的多级反馈队列等。[32]
设备管理
设备管理是指操作系统管理和控制外部设备的功能。外部设备也称I/O设备,在计算机系统中这部分设备大致可分为三类:人机交互类外部设备、存储类外部设备、网络通信类外部设备。[33],操作系统需要控制计算机的所有I/O设备,必须向设备发送命令,捕捉中断,并处理设备的各种错误。此外它还应该在设备和系统的其他部分之间提供简单且易于使用的接口。操作系统的硬件管理主要讨论的是如何对硬件编程。[33][34]实现I/O可采取的三种方式分别为:程序控制I/O、中断驱动I/O、使用DMA的I/O,[34]这些实现方式对应各自的I/O软件,软件层与包括了具体的设备,以及相应的设备控制器硬件层相连接。[34]

具体的I/O操作由硬件层来完成,中断处理程序用于保存被中断进程的CPU环境,设备驱动程序负责实现系统对设备发出的操作指令,以及驱动设备工作的驱动程序,与设备无关的操作系统软件即内核I/O软件,是操作系统在设备管理中十分重要的一个部分,其负责实现与设备驱动器的统一接口、命名设备、设备的保护以及设备的分配与释放等。[34]用户层的软件则是实现了操作系统与用户交互的接口。
磁盘作为存储设备是计算机系统中的一种重要资源,同时也是操作最频繁的十分重要的设备。[35]磁盘被组织成柱面,每一个柱面包含若干磁道,磁道数与垂直堆叠的磁头个数相同。磁道又被分成若干扇区,软盘上大约每条磁道有8~32个扇区,硬盘上每条磁道上扇区的数目可以多达几百个。常用的磁盘调度算法有先来先服务、最短寻道时间优先、扫描算法、循环扫描算法、NStepSCAN以及FSCAN调度算法等。[34]
时钟 又称为定时器,由于各种各样的原因决定了它对千任何多道程序设计系统的操作都是至关重要的。时钟负责维护时间,并且防止一个进程垄断 CPU 。此外,时钟还具有维持正确的日时间、防止进程超时运行、CPU记账等几方面的功能。[34]
文件管理
操作系统对文件的文件基本操作包括创建、读取、写入和删除等,以及针对不同用户设置文件访问权限等权限管理。[11]
文件创建是指在文件系统中新增一个文件,操作系统会为新文件分配存储空间,并在目录中增加一个目录项。读取文件则是指程序逻辑打开某个存在的文件,并从中获取数据。写入文件是指程序逻辑向打开的文件中写入新的数据,如追加内容或覆盖原有内容。删除文件是指从文件系统中将某个文件删除,释放其占用的存储空间。[11][36]
针对不同用户,操作系统可以设置文件访问权限,如只读、读写或执行等权限。通过访问控制列表(ACL)为每个用户赋予文件访问权限,达到权限管理的目的。ACL 可以控制单个用户对文件或目录的访问权限。通过设置文件所有者、所属组及其他用户的读写执行权限,实现访问控制。[11][36]对不同类型的文件也可以设置默认的访问权限,如数据文件默认对所有用户读写,而可执行文件默认只有所有者可执行。权限管理是操作系统保证系统安全和文件安全的重要手段。[36]
文件系统是操作系统中实现对文件实施管理、控制与操作的一组软件,可以视为用户与计算机物理层面之间的一种映射,文件系统的传统模型为层次模型,每一层会使用下一层的功能特性来创建新的功能。[37]

文件目录是一种记录了所有文件的名字及其存放的辅助空间地址信息的一种数据结构,能够实现对文件的“按名存取”,提高文件访问的速度。[38][10]在现代操作系统中,最通用且实用的文件目录无疑是树形结构目录,充分利用树形逻辑结构的特点,将主目录作为根目录,把数据文件作为树叶,其它的目录均作为树的结点。在每个文件目录中,只能有一个根目录,每个文件和每个目录都只能有一个父目录。[37]
文件分配管理是文件管理的主要功能之一,即如何在外部存储介质上为创建文件而分配空间、为删除文件而回收空间、对空闲空间进行管理。有效利用外存空间与提高对文件的访问速度是文件分配管理的核心问题。通常的分配方式包括连续分配、链接分配与索引分配三种。[37]连续文件分配易于实现,在创建文件时在磁盘上分配连续的块。链接分配采取离散的分配方式,能够解决连续文件分配中容易出现的“碎片”问题,Microsoft公司的FAT文件系统即是链接分配的典型案例。索引分配为每个文件分配一个索引块,再将分配给该文件的所有盘块号记录于索引块中,便能同时解决连续文件分配的碎片问题与链接分配的直接存取效率低的问题。[37]
| - | 连续分配 | 链接分配 | 索引分配 | |
|---|---|---|---|---|
| 需要预分配 | 必须 | 可能 | 可能 | |
| 固定或者可变大小 | 可变 | 固定 | 固定 | 可变 |
| 部分大小 | 大 | 小 | 小 | 中等 |
| 分配额度 | 一次性 | 从低到高 | 高 | 低 |
| 分配的时间 | 中等 | 长 | 短 | 中等 |
| 分配表大小 | 一个条目 | 一个条目 | 大 | 中等 |
用户界面
用户通过操作系统提供的接口使用计算机的系统资源,以用户的视角可将操作系统接口分为两种类型:一种是提供给操作计算机的用户的操作接口,另一种是提供给编程人员使用的低级接口——系统调用。[39]命令行形式的命令解释程序,用户友好的图形用户接口和使用批处理系统或分时系统时的作业运行控制命令是操作接口的三种主要形式。系统调用则是用户态的程序调用操作系统内核服务或请求系统资源的接口,进程控制、文件管理、设备管理等都可以由用户通过系统调用来实现。[39][40]
命令解释程序即常见的命令行界面,只提供文字命令,用户需要通过键入命令来操作计算机。其优点是对系统资源消耗少,运行迅速,可以进行批处理和自动化操作。缺点是需要记忆大量命令,不直观,对新手不友好。早期的DOS系统和Unix系统采用命令行界面。[39]
图形用户接口(英文:Graphical User Interface,简称:GUI)通过图形元素如窗口、图标、菜单和指针进行操作。其优点是直观和易于上手,操作简单方便。缺点是消耗更多系统资源。当代大多数操作系统如Windows、Mac OS和Linux的桌面环境都采用图形用户界面。[39]
命令行界面适合执行特定任务的高效操作;图形用户界面更直观易用,可以降低新用户的学习成本。此外作业运行控制命令通常用于对各种正在运行的进程进行监控和管理,自动完成复杂的作业,UNIX的shell程序是典型的作业运行控制命令。[41]
安全问题与防范策略
系统的活动程序组按照规定策略来使用系统资源是可靠系统必需的要求,同时还需要防止用户有意地、恶意地违反访问限制,对操作系统的进程必须加以保护,以便免受其他进程活动的干扰。同时操作系统的安全还需要考虑到系统运行的外部环境。[42]
常见的安全问题包括有注册表等系统文件读写、安全漏洞造成的病毒入侵以及磁盘管理策略造成的写文件隐患等。针对通用操作系统,传统的安全保护方法有镜像法与主动还原法,其中镜像法有简单镜像法与HPA镜像法,该方法存在无法预防的问题。主动还原法是在镜像法上的改进,每次启动均主动进行镜像或备份还原。[43]针对网络操作系统,相应的操作系统安全对策包括漏洞扫描技术、信息数据加密技术、防火墙、入网访问控制等。[44]
用户权限管理与访问控制
操作系统通过用户账户和访问控制机制来实现对系统资源的权限管理。用户账户用于标识合法用户,每个账户配置用户名和密码,注册时可以配置账户类型,如管理员、普通用户等。管理员账户拥有最高权限,可以访问系统中的全部资源;普通用户只被授予访问部分资源的权限。[42]
访问控制以用户账户为基础,通过账户的身份识别来控制用户对资源的访问。主要的访问控制机制有以下几种:
自主访问控制:允许用户自己对所创建的资源设置访问权限;强制访问控制:系统根据事先定义的安全策略统一设置访问权限;基于角色的访问控制:根据用户的角色设定权限,方便权限管理。[42][45]
访问控制机制需要区分不同的访问操作,如读、写、执行等,针对文件系统、内存等不同类型的资源设置相应的访问控制列表,达到权限管理的目的。[42]
大型机操作系统
用于大型机的操作系统位于操作系统的高端,这些巨大的计算机通常可见于大型公司的数据中心。它们与个人计算机最主要的区别在于其强大的I/O处理能力,拥有1000个磁盘和数百万吉字节的数据存储的大型机十分普遍。[46]

大型机广泛应用于高端Web服务器、大型电子商务服务站点和事务交易服务器领域。这些操作系统主要提供三类服务:批处理、事务处理和分时。[42]
批处理系统用于处理不需要交互式用户干预的周期性作业,例如,保险公司的索赔处理或连锁商店的销售报告;事务处理系统则处理大量小型请求,例如银行的支票处理或航班预订,每秒可能需要处理成百上千个业务;分时系统则允许多个远程用户同时在计算机上运行作业,例如在大型数据库上的查询。[42]
服务器操作系统
服务器操作系统是大型机操作系统的下一个层次。它们在服务器上运行,服务器可以是较大型的个人计算机、工作站,甚至是大型机。它们通过网络同时为若干个用户服务,并且允许用户共享硬件和软件资源。服务器可提供打印服务、文件胀务或Web服务。 Internet提供商运行抒许多台服务器机器,为用户提供支持,使Web站点保存Web页面井处理进来的请求。典型的服务器操作系统有Solaris、FreeBSD、Linux和Windows Server 201x。[42]
个人计算机操作系统
个人计算机操作系统是最广为人知的一类操作系统。现代个人计算机操作系统都支持多道程序处理,通常几十个程序开始运行,为单个用户提供良好的支持。这类操作系统广泛用于文字处理、电子表格、游戏和Internet访问。[42]

掌上计算机
嵌入式操作系统
嵌入式操作系统在用于控制设备的计算机中运行,这种类型的计算机不同于一般意义上的计算机,不允许用户安装软件,典型的例子有微波炉、电视机、汽车、DVD录刻机、MP3播放器等。主要的嵌入式操作系统有嵌入式Linux、QNX和VxWorks等。[42]
传感器节点操作系统
传感器是一种内建有无线电的电池驱动的小型计算机,它们能源有限,必须长时间工作在无人的户外环境中,通常所处的条件比较恶劣。在建筑物周边保护、国土边界保卫、森林火灾探测、气象预测测量温度和降水等场景下都会使用到这类传感器。[42]
实践中需要为这些传感器配置微小传感器节点网络,而每个节点是一种可以彼此通信且使用无线通信基站的微型计算机,节点上运行着一个小型但真实的操作系统,通常这个操作系统是事件驱动的,可以响应外部事件,必须小且简单。一种用于传感器节点的知名操作系统是TinyOS。[42]
实时操作系统
实时操作系统的特征是将时间作为关键参数,且必须满足严格的最终时限。这类系统在工业控制、民用航空、军事以及类似应用中发挥作用。这些领域内,对操作系统的实时性要求很高,例如汽车在装配线上移动时,必须在限定时间内完成规定的操作,如果焊接机器人焊接操作太迟或太早,都会毁坏汽车。[42]
发展趋势
操作系统是计算机系统中至关重要的组成部分,它们不断地发展演进以满足不断增长的计算需求和新技术的挑战。随着云计算、人工智能、大数据、物联网等新技术的快速发展,操作系统也呈现出新的发展趋势。未来操作系统的发展会呈现出专用化、小型化、网络化、虚拟化以及智能化的趋势。[47][48][49][50]
专用化趋势
计算机技术在各个行业的延伸可快速发展,对移动计算机、网络计算机等技术的发展起到了很大的推动性作用。在计算机高速发展的背景下,也对操作系统的专用化提出了新的要求,需要科学分类各个组成部分,提升计算机的工作效率,深化计算机在各个行业的作用。 在未来,专用的通信设备,嵌入式的操作系统将会出现在人们的生活 当中。虽然嵌入式的操作系统与通用操作系统有着很大的相似度,但 是嵌入式的操作系统单独存在于其他领域。在人们的日常生活中,利 用一台计算机可以控制家中所有的电气,有效的联通家庭电气,为使 用者提供更大的便利。[47]
小型化趋势
过去的传统的计算机体型庞大,之后随着科技的进步,其体型被逐步的缩小,笔记本电脑、平板电脑都是体型较小的计算机。计算机的操作系统也是如此,目前占据绝大多数的仍然是通用型的操作系统, 但是在面对社会多样化需求的背景下,计算机操作系统的规模将会日 益缩小,且纳米技术的出现,更是为操作系统的小型化提供了可行的 实施条件。[47]
网络化趋势
在人们的日常生活中,网络已经逐渐渗透进人们的日常生活当中, 随着网络技术的进一步发展和创新,操作系统的应用也网络的依赖性 也会逐步的增强。在未来发展中,网络操作计算机系统将会出现,可以更加高效的实现网络资源共享。[47][50]
虚拟化趋势
操作系统虚拟化允许多个不同的应用在共享操作系统内核的环境中隔离运行,作为一种轻量级虚拟化技术,操作系统虚拟化在很多应用领域都具有巨大的潜力。在保证应用性能的同时,虚拟化的系统开销很小,并且有效地提升了系统资源利用率,使得在单一主机上同时运行数千个容器成为可能。未来的操作系统虚拟化技术将致力于解决应用兼容性、镜像体积与资源隔离的问题,在目前的操作系统虚拟化具有启动快速、部署方便、资源占用少、运行效率高等优点的基础上,开发操作系统更高的性能潜力。[48]
智能化趋势
参考资料 52
- 参考 1
- 参考 2
- 参考 3
- 参考 4
- 参考 5
- 参考 6
- 参考 7
- 参考 8
- 参考 9
- 参考 10
- 参考 11
- 参考 12
- 参考 13
- 参考 14
- 参考 15
- 参考 16
- 参考 17
- 参考 18
- 参考 19
- 参考 20
- 参考 21
- 参考 22
- 参考 23
- 参考 24
- 参考 25
- 参考 26
- 参考 27
- 参考 28
- 参考 29
- 参考 30
- 参考 31
- 参考 32
- 参考 33
- 参考 34
- 参考 35
- 参考 36
- 参考 37
- 参考 38
- 参考 39
- 参考 40
- 参考 41
- 参考 42
- 参考 43
- 参考 44
- 参考 45
- 参考 46
- 参考 47
- 参考 48
- 参考 49
- 参考 50
- 参考 51
- 参考 52
