操作系统

一个操作系统(OS)是系统软件,用于管理计算机硬件和软件资源,并提供通用服务的计算机程序。

分时操作系统调度任务以有效使用系统,并且还可以包括用于处理器时间,大容量存储,打印和其他资源的成本分配的计费软件。

对于输入和输出以及内存分配等硬件功能,操作系统充当程序和计算机硬件之间的中介[1] [2],尽管应用程序代码通常由硬件直接执行,并经常对系统进行调用。操作系统功能或被其中断。许多设备上都有操作系统,包括计算机 - 从手机和视频游戏机到网络服务器和超级计算机。

占主导地位的桌面操作系统是Microsoft Windows,市场份额约为82.74%。MACOS由苹果公司是排在第二位(13.23%),和品种的Linux是共同排在第三位(1.57%)。[3]在移动(智能手机和片剂组合)扇区,在2017年使用高达70%的谷歌的Android的[4] ,并根据第三季度2016数据,机器人在智能手机上是占主导地位的与87.5%的和生长速率每年10.3%,其次是Apple的iOS市场份额下降12.1%,每年下降5.2%,而其他操作系统仅为0.3%。[5] Linux发行版在服务器和超级计算领域占据主导地位。对于许多应用程序,存在其他专用类别的操作系统,例如嵌入式和实时系统。

内容
1 操作系统类型
1.1 单任务和多任务
1.2 单用户和多用户
1.3 分布式
1.4 模板化
1.5 嵌入式
1.6 实时
1.7 图书馆
2 历史
2.1 主机
2.2 微型计算机
3个 例子
3.1 Unix和类Unix操作系统
3.1.1 BSD及其后代
3.1.1.1 macOS
3.1.2 Linux
3.2 Microsoft Windows
3.3 其他
4个 组件
4.1 内核
4.1.1 程序执行
4.1.2 中断
4.1.3 模式
4.1.4 内存管理
4.1.5 虚拟内存
4.1.6 多任务处理
4.1.7 磁盘访问和文件系统
4.1.8 设备驱动程序
4.2 网络
4.3 安全
4.4 用户界面
4.4.1 图形用户界面
5 实时操作系统
6 作为业余爱好的操作系统开发
7 操作系统的多样性和可移植性
8 市场份额
9 另见
10 参考文献
11 进一步阅读
12 外部链接
操作系统的类型
单任务和多任务
单任务系统一次只能运行一个程序,而多任务操作系统允许多个程序以并发方式运行。这是通过分时实现的,其中可用处理器时间在多个进程之间分配。这些过程每个都由操作系统的任务调度子系统在时间片中重复中断。多任务处理可以以先发制人和合作类型为特征。在抢先式多任务处理中,操作系统会切断CPU时间并为每个程序分配一个插槽。类Unix操作系统,如Solaris和Linux,以及非类Unix操作系统,如AmigaOS - 支持抢先式多任务处理。通过依赖每个过程以定义的方式为其他过程提供时间来实现协作式多任务。16位版本的Microsoft Windows使用了协作式多任务处理。Windows NT和Win9x的32位版本,使用抢先式多任务处理。

单用户和多用户
单用户操作系统无法区分用户,但可能允许多个程序串联运行。[6]甲多用户操作系统延伸的多任务处理的设施识别过程和资源,例如磁盘空间,属于多个用户的基本概念,并且该系统允许多个用户在同一时间与系统进行交互。分时操作系统调度任务以有效使用系统,并且还可以包括用于多个用户的处理器时间,大容量存储,打印和其他资源的成本分配的计费软件。

分散式
甲分布式操作系统管理的一组不同的计算机和使它们看起来是单个计算机。可以相互链接和通信的联网计算机的开发产生了分布式计算。分布式计算在多台计算机上执行。当组中的计算机协同工作时,它们形成分布式系统。[7]

模板
在操作系统,分布式和云计算环境中,模板是指将单个虚拟机映像创建为客户操作系统,然后将其另存为多个正在运行的虚拟机的工具。该技术用于虚拟化和云计算管理,在大型服务器仓库中很常见。[8]

嵌入式
嵌入式操作系统设计用于嵌入式计算机系统。它们被设计为在PDA等小型机器上运行,具有较少的自主权。他们能够以有限的资源运营。它们非常紧凑,设计极其高效。Windows CE和Minix 3是嵌入式操作系统的一些示例。

即时的
一个实时操作系统是一个操作系统,保证来处理特定时刻的事件或数据的时间。实时操作系统可以是单任务或多任务,但是当多任务处理时,它使用专门的调度算法,以便实现行为的确定性。事件驱动系统根据优先级或外部事件在任务之间切换,而分时操作系统根据时钟中断切换任务。

图书馆
库操作系统是典型操作系统提供的服务(例如网络)以库的形式提供并由应用程序和配置代码组成以构建单核的操作系统:专用的单个地址空间,机器映像可以部署到云或嵌入式环境。

历史
主要文章:操作系统的历史
另请参见:居民监视器
早期的计算机是为了执行一系列单个任务而构建的,比如计算器。基本操作系统功能是在20世纪50年代开发的,例如驻留监视器功能,可以连续自动运行不同的程序以加速处理。直到20世纪60年代初,操作系统才以其现代和更复杂的形式存在。[9] 添加了硬件功能,可以使用运行时库,中断和并行处理。当个人计算机在20世纪80年代开始流行时,操作系统的概念与大型计算机上使用的操作系统类似。

在20世纪40年代,最早的电子数字系统没有操作系统。此时的电子系统是在一排机械开关上或通过插头板上的跨接线编程的。这些是专用系统,例如,为军队生成弹道学表或控制打孔纸卡上的数据打印工资核算。在发明了可编程通用计算机之后,引入了机器语言(由穿孔纸带上的二进制数字0和1的字符串组成),加快了编程过程(Stern,1981)。[ 完全引用需要 ]

从1966年开始,大多数IBM大型计算机都使用OS / 360,包括Apollo程序使用的计算机。
在20世纪50年代早期,计算机一次只能执行一个程序。每个用户在一段有限的时间内单独使用计算机,并在预定的时间到达穿孔纸卡或穿孔带上的程序和数据。程序将被加载到机器中,并且机器将被设置为工作直到程序完成或崩溃。通常可以使用切换开关和面板灯通过前面板调试程序。据说阿兰·图灵在早期曼彻斯特Mark 1机器上是这方面的大师,他已经从通用图灵机的原理中得出了操作系统的原始概念。[9]

后来的机器带有程序库,这些程序库将链接到用户程序,以协助输入和输出等操作,并从人类可读的符号代码生成计算机代码。这是现代操作系统的起源。但是,机器一次只能运行一个作业。在英格兰的剑桥大学,工作队列曾经是一条洗衣线(晾衣绳),用不同颜色的衣夹挂着胶带,以表明工作重点。[ 引证需要 ]

改进的是1962年委托曼彻斯特地图集引入的阿特拉斯监督,“被许多人认为是第一个可识别的现代操作系统”。[10] Brinch Hansen将其描述为“操作系统历史上最重大的突破”。[11]

大型机
主要文章:IBM大型机操作系统的历史
到20世纪50年代,许多主要功能在大型计算机操作系统领域开创了先河,包括批处理,输入/输出中断,缓冲,多任务处理,假脱机,运行时库,链接加载以及用于对文件中的记录进行排序的程序。这些功能包括或不包含在应用程序编程人员选择的应用程序软件中,而不是包含在所有应用程序使用的单独操作系统中。1959年,SHARE操作系统作为IBM 704的集成实用程序发布虽然在709,7090和7094上很快被IBSYS / IBJOB 所取代,但后来又在709和7090大型机中出现了。

在20世纪60年代,IBM的OS / 360引入了跨越整个产品线的单一操作系统的概念,这对于System / 360机器的成功至关重要。IBM目前的大型机操作系统是这个原始系统的遥远后代,为OS / 360编写的应用程序仍然可以在现代机器上运行。[ 引证需要 ]

OS / 360还开创了操作系统跟踪所使用的所有系统资源的概念,包括主存储器中的程序和数据空间分配以及辅助存储器中的文件空间,以及更新期间的文件锁定。当进程因任何原因终止时,操作系统会重新声明所有这些资源。

用于S / 360-67的替代CP-67系统启动了一系列专注于虚拟机概念的IBM操作系统。IBM S / 360系列大型机上使用的其他操作系统包括由IBM开发的系统:COS / 360(兼容性操作系统),DOS / 360(磁盘操作系统),TSS / 360(时间共享系统),TOS / 360(磁带操作)系统),BOS / 360(基本操作系统)和ACP(航空控制程序),以及一些非IBM系统:MTS(密歇根终端系统),MUSIC(交互计算多用户系统)和ORVYL (斯坦福分时系统)。

Control Data Corporation在20世纪60年代开发了SCOPE操作系统,用于批处理。与明尼苏达大学合作,Kronos和后来的NOS操作系统是在20世纪70年代开发的,它支持同时批量和分时使用。与许多商业分时系统一样,它的界面是达特茅斯BASIC操作系统的扩展,是分时和编程语言的开创性工作之一。在20世纪70年代后期,Control Data和伊利诺伊大学开发了PLATO操作系统,使用等离子面板显示器和远程时间共享网络。柏拉图在当时具有非凡的创新性,具有实时聊天功能和多用户图形游戏。

1961年,Burroughs公司推出了带有MCP(主控制程序)操作系统的B5000。该B5000是一个堆栈机设计专门支持高级语言,没有机器语言或汇编,堪与MCP是第一个操作系统可以在高级语言所撰写- ESPOL,方言ALGOL。MCP还引入了许多其他突破性的创新,例如成为虚拟内存的第一个商业实现。在开发AS / 400期间,IBM对Burroughs采取了一种方法,允许MCP在AS / 400硬件上运行。Burroughs管理层拒绝了该提案,以保护其现有的硬件生产。MCP目前仍在Unisys ClearPath / MCP系列计算机中使用。

UNIVAC是第一家商业计算机制造商,生产了一系列EXEC操作系统[ 需要引证 ]。与所有早期主框架系统一样,这种面向批处理的系统管理磁鼓,磁盘,读卡器和行式打印机。在20世纪70年代,UNIVAC制作了实时基本(RTB)系统,以支持大规模的时间共享,也是在达特茅斯BC系统之后形成的。

通用电气和麻省理工学院开发了通用电气综合运营主管(GECOS),引入了环境安全权限级别的概念。在被霍尼韦尔收购后,它被重新命名为通用综合操作系统(GCOS)。

Digital Equipment Corporation为其各种计算机系列开发了许多操作系统,包括用于36位 PDP-10级系统的TOPS-10和TOPS-20时间共享系统。在广泛使用UNIX之前,TOPS-10在大学和早期的ARPANET社区中是一个特别受欢迎的系统。RT-11是PDP-11级小型机的单用户实时操作系统,RSX-11是相应的多用户操作系统。

从20世纪60年代末到70年代末期,一些硬件功能得到了发展,允许类似或移植的软件在不止一个系统上运行。早期的系统利用微编程在其系统上实现功能,以允许不同的底层计算机体系结构看起来与一系列中的其他计算机体系结构相同。实际上,360/40之后的大多数360(360/165和360/168除外)都是微编程实现。

自20世纪60年代以来,对这些系统的软件投入巨大,导致大多数原始计算机制造商继续开发兼容的操作系统以及硬件。值得称道的大型机操作系统包括:

伯勒斯MCP - B5000,1961至优利的ClearPath / MCP,本
IBM OS / 360 - IBM System / 360,1966年到IBM z / OS,现在
IBM CP-67 - IBM System / 360,1967到IBM z / VM
UNIVAC EXEC 8 - UNIVAC 1108,1967 ,到OS 2200 Unisys Clearpath Dorado,现在
微型计算机

PC DOS是一个早期的个人计算机操作系统,具有命令行界面。

Apple Computer的 Mac OS 成为第一个具有图形用户界面的广泛操作系统。它的许多功能,如窗口和图标,后来在GUI中变得司空见惯。
第一台微型计算机不具备为大型机和迷你开发的复杂操作系统的能力或需求; 开发了简约的操作系统,通常从ROM加载并称为监视器。一个值得注意的早期磁盘操作系统是CP / M,它在许多早期的微型计算机上受到支持,并且被微软的MS-DOS密切关注,后者因为IBM PC选择的操作系统而广受欢迎(IBM的版本被称为IBM DOS或PC DOS)。在20世纪80年代,Apple Computer Inc.(现为Apple Inc.)放弃了它的流行Apple II系列微型计算机向Mac OS推出带有创新图形用户界面(GUI)的Apple Macintosh计算机。

1985年10月引入了英特尔80386 CPU芯片[12],具有32位架构和分页功能,为个人计算机提供了运行多任务操作系统的能力,如早期的小型机和大型机。微软通过聘请为数字设备公司开发VMS操作系统的Dave Cutler来回应这一进展。他将领导Windows NT操作系统的开发,该操作系统将继续作为微软操作系统产品线的基础。乔布斯苹果公司的联合创始人,创办了NeXT计算机公司,该公司开发了NEXTSTEP操作系统。NEXTSTEP稍后将被Apple Inc.收购并与FreeBSD的代码一起使用,作为Mac OS X的核心(最新名称更改后的macOS)。

在GNU项目开始由活动家和程序员理查德·斯托曼与创建一个完整的目标自由软件更换,以专有的UNIX操作系统。虽然该项目在复制UNIX各个部分的功能方面非常成功,但GNU Hurd内核的开发被证明是徒劳的。1991年,芬兰计算机科学专业学生Linus Torvalds与志愿者合作,通过互联网合作,发布了第一版Linux内核。它很快就与GNU 用户空间组件和系统软件合并形成一个完整的操作系统。从那时起,两个主要组件的组合通常被软件行业简称为“Linux”,这是Stallman和自由软件基金会仍然反对的命名惯例,更喜欢名称GNU / Linux。Berkeley Software Distribution,即BSD,是加州大学伯克利分校从20世纪70年代开始分发的UNIX衍生产品。它自由地分发并移植到许多小型计算机上,它最终也获得了在PC上的使用,主要是FreeBSD,NetBSD和OpenBSD。

例子
Unix和类Unix操作系统
主要文章:Unix

Unix系统的演变
Unix最初是用汇编语言编写的。[13] Ken Thompson基于他在MULTICS项目中的经验,主要根据BCPL撰写了B。B被C取代,Unix 用C语言重写,发展成为一个庞大,复杂的相互关联的操作系统系列,在每个现代操作系统中都有影响(见历史)。

在类Unix家族是一组不同的操作系统,与几家主要的子类别,包括系统V,BSD和Linux的。“ UNIX ” 这个名称是The Open Group的商标,它将许可证用于任何已被证明符合其定义的操作系统。“类UNIX”通常用于指代与原始UNIX类似的大量操作系统。

类Unix系统运行在各种计算机体系结构上。它们被大量用于商业服务器以及学术和工程环境中的工作站。免费的 UNIX变体,如Linux和BSD,在这些领域很受欢迎。

四个操作系统由The Open Group(Unix商标持有者)认证为Unix。HP的HP-UX和IBM的AIX都是原始System V Unix的后代,并且只能在各自供应商的硬件上运行。相比之下,Sun Microsystems的Solaris可以运行在多种类型的硬件上,包括x86和Sparc服务器以及PC。Apple的macOS是Apple早期(非Unix)Mac OS的替代品,是一种基于NeXTSTEP,Mach和FreeBSD的基于混合内核的BSD变体。

通过建立POSIX标准寻求Unix互操作性。POSIX标准可以应用于任何操作系统,尽管它最初是为各种Unix变体创建的。

BSD及其后代
主要文章:Berkeley Software Distribution

在第一台服务器的万维网跑NeXTSTEP的,基于BSD。
Unix系列的一个子组是Berkeley Software Distribution系列,包括FreeBSD,NetBSD和OpenBSD。这些操作系统最常见于Web服务器,尽管它们也可以用作个人计算机操作系统。互联网很大程度上归功于BSD,因为现在计算机通常用于通过网络连接,发送和接收数据的许多协议都在BSD中得到广泛实施和完善。在万维网还首次展示了多项运行基于BSD称为操作系统的计算机的NeXTSTEP的。

1974年,加州大学伯克利分校安装了第一个Unix系统。随着时间的推移,计算机科学系的学生和工作人员开始添加新程序以使事情变得更容易,例如文本编辑器。当Berkeley 在1978年安装了Unix 时接收了新的VAX计算机时,学校的本科生甚至更多地修改了Unix,以便利用计算机的硬件可能性。在美国国防部高级研究计划局的美国国防部花了兴趣,并决定资助该项目。许多学校,公司和政府组织都注意到并开始使用Berkeley的Unix版本而不是AT&T发布的官方版本。

史蒂夫乔布斯于1985年离开苹果公司后,组建了NeXT公司,该公司生产一种名为NeXTSTEP的BSD变体高端计算机。其中一台计算机被Tim Berners-Lee用作创建万维网的第一个网络服务器。

像Keith Bostic这样的开发人员鼓励该项目取代任何源自贝尔实验室的非免费代码。然而,一旦完成,AT&T起诉。经过两年的法律纠纷,BSD项目催生了许多免费衍生品,如NetBSD和FreeBSD(均为1993年)和OpenBSD(1995年来自NetBSD)。

苹果系统
主要文章:macOS
macOS(以前称为“Mac OS X”以及后来的“OS X”)是由Apple Inc.开发,销售和销售的一系列开放式核心图形操作系统,其中最新的预装在所有当前出货的Macintosh计算机上。macOS是原始经典Mac OS的继承者,自1984年以来一直是Apple的主要操作系统。与其前身不同,macOS是一种基于技术的UNIX操作系统,该技术是在20世纪80年代后半期在NeXT开发的,直到Apple于1997年初收购了该公司。该操作系统于1999年首次作为Mac OS X Server 1.0发布,随后于2001年3月通过客户端版本(Mac OS X v10.0“Cheetah”)。从那时起,已经发布了另外六个不同的“客户端”和“ 服务器 ”版本的macOS,直到两者在OS X 10.7“Lion”中合并。

在与macOS合并之前,服务器版本 - macOS Server - 在架构上与其桌面版本 完全相同,并且通常在Apple的Macintosh 服务器硬件上运行。macOS Server包括工作组管理和管理软件工具,可以简化对关键网络服务的访问,包括邮件传输代理,Samba服务器,LDAP服务器,域名服务器等。使用Mac OS X v10.7 Lion,Mac OS X Server的所有服务器方面都已集成到客户端版本中,产品重新命名为“OS X”(从名称中删除“Mac”)。服务器工具现在作为应用程序提供。[14]

Linux的
主要文章:Linux和Linux内核

Ubuntu,桌面Linux发行版
Linux内核起源于1991年,作为Linus Torvalds的一个项目,同时也是芬兰的一名大学生。他在计算机专业学生和程序员的新闻组上发布了有关他的项目的信息,并获得了成功创建完整功能内核的志愿者的支持和帮助。

Linux与Unix类似,但是在没有任何Unix代码的情况下开发,与BSD及其变体不同。由于其开放的许可证模型,Linux内核代码可用于研究和修改,因此可用于从超级计算机到智能手表的各种计算机器。虽然估计表明Linux仅用于所有“台式”(或笔记本电脑)PC的1.82%[15],但它已广泛用于服务器[16]和嵌入式系统[17],如手机。Linux已经在许多平台上取代了Unix,并且在大多数超级计算机上使用,包括前385。[18]许多相同的计算机也在Green500上(但顺序不同),Linux运行在前10名.Linux也常用于其他小型节能计算机,如智能手机和智能手表。Linux内核用于一些流行的发行版,如Red Hat,Debian,Ubuntu,Linux Mint和谷歌的Android,Chrome OS和Chromium OS。

微软Windows
主要文章:Microsoft Windows
Microsoft Windows是由微软公司设计的一系列专有操作系统,主要针对基于英特尔架构的计算机,估计在Web连接计算机上的总使用份额为88.9%。[15] [19] [20] [21]最新版本是Windows 10。

2011年,Windows 7超越了Windows XP,成为最常用的版本。[22] [23] [24]

Microsoft Windows于1985年首次发布,作为运行在MS-DOS之上的操作环境,MS-DOS是当时大多数英特尔架构个人计算机上提供的标准操作系统。在1995年,Windows 95发布,它只使用MS-DOS作为引导程序。为了向后兼容,Win9x可以运行实模式MS-DOS [25] [26]和16位Windows 3.x [27]驱动程序。Windows ME于2000年发布,是Win9x系列中的最后一个版本。后来的版本都基于Windows NT 内核。当前客户端版本的Windows在IA-32,x86-64上运行和32位ARM 微处理器。[28]此外,较旧的服务器版本Windows Server 2008 R2仍支持Itanium。过去,Windows NT支持其他体系结构。

Windows的服务器版本被广泛使用。近年来,微软已经花费了大量资金来推动Windows作为服务器操作系统的使用。但是,Windows在服务器上的使用并不像个人计算机那样普及,因为Windows与Linux和BSD争夺服务器市场份额。[29] [30]

ReactOS是一种Windows替代操作系统,它是根据Windows的原则开发的 - 不使用任何Microsoft代码。

其他
有许多操作系统在当时很重要但不再如此,例如AmigaOS ; 来自IBM和Microsoft的OS / 2 ; 经典的Mac OS,Apple的macOS的非Unix前身; BeOS ; XTS-300 ; RISC OS ; MorphOS ; Haiku ; BareMetal和FreeMint。一些仍然在利基市场中使用,并继续作为发烧友社区和专业应用的少数平台开发。以前来自DEC的OpenVMS仍由惠普公司积极开发。然而,其他操作系统几乎专门用于学术界,操作系统教育或研究操作系统概念。满足这两种角色的系统的典型示例是MINIX,而例如Singularity仅用于研究。另一个例子是奥伯伦系统在设计ETH苏黎世由尼古拉斯·沃斯,朱·加内奇和一组20世纪80年代的学生前者计算机系统研究所。它主要用于Wirth小组的研究,教学和日常工作。

其他操作系统未能赢得显着的市场份额,但已经引入了影响主流操作系统的创新,尤其是贝尔实验室的计划9。

组件
操作系统的组件都存在,以便使计算机的不同部分一起工作。所有用户软件都需要通过操作系统才能使用任何硬件,无论是像鼠标或键盘一样简单,还是像Internet组件一样复杂。

核心
主要文章:内核(计算)

内核将应用程序软件连接到计算机的硬件。
借助固件和设备驱动程序,内核可以对所有计算机的硬件设备提供最基本的控制。它管理RAM中程序的内存访问,它确定哪些程序可以访问哪些硬件资源,它设置或重置CPU的运行状态以便始终实现最佳操作,并组织数据以进行长期非易失性存储在磁盘,磁带,闪存等媒体上 使用文件系统

程序执行
主要文章:流程(计算)
操作系统提供应用程序和计算机硬件之间的接口,使得应用程序仅通过遵守编程到操作系统中的规则和过程就可以与硬件交互。操作系统也是一组简化应用程序开发和执行的服务。执行应用程序涉及由操作系统内核创建进程,该进程分配内存空间和其他资源,在多任务系统中建立进程的优先级,将程序二进制代码加载到内存中,并启动应用程序的执行。然后与用户和硬件设备进行交互。

中断
主要文章:中断
中断是操作系统的核心,因为它们为操作系统提供了与其环境交互并对其做出反应的有效方式。替代方案 - 让操作系统“监视”需要操作的事件(轮询)的各种输入源 - 可以在具有非常小的堆栈(50或60字节)的旧系统中找到,但在具有大堆栈的现代系统中是不常见的。大多数现代CPU都直接支持基于中断的编程。中断为计算机提供了一种自动保存本地寄存器上下文,并运行特定代码以响应事件的方法。即使非常基本的计算机也支持硬件中断,并允许程序员指定可在该事件发生时运行的代码。

当收到中断时,计算机的硬件会自动暂停当前正在运行的程序,保存其状态,并运行先前与中断相关的计算机代码; 这类似于将书签放在书中以响应电话呼叫。在现代操作系统中,中断由操作系统的内核处理。中断可能来自计算机的硬件或正在运行的程序。

当硬件设备触发中断时,操作系统的内核通常通过运行一些处理代码来决定如何处理此事件。正在运行的代码量取决于中断的优先级(例如:一个人通常在接听电话之前响应烟雾探测器警报)。硬件中断的处理是一项任务,通常委托给称为设备驱动程序的软件,该软件可能是操作系统内核的一部分,是另一个程序的一部分,或两者兼而有之。然后,设备驱动程序可以通过各种手段将信息中继到正在运行

程序还可以触发对操作系统的中断。例如,如果程序希望访问硬件,它可能会中断操作系统的内核,从而导致控制权传递回内核。然后内核处理请求。如果程序希望获得额外的资源(或希望释放资源),例如内存,它会触发中断以引起内核的注意。

模式
主要文章:用户模式和主管模式

x86微处理器架构的权限环可在保护模式下使用。操作系统确定在每种模式下运行的进程。
现代微处理器(CPU或MPU)支持多种操作模式。具有此功能的CPU提供至少两种模式:用户模式和管理员模式。一般而言,管理员模式操作允许不受限制地访问所有机器资源,包括所有MPU指令。用户模式操作设置了对指令使用的限制,通常不允许直接访问机器资源。CPU也可能具有与用户模式类似的其他模式,例如虚拟模式以模拟较旧的处理器类型,例如32位处理器上的16位处理器或64位处理器上的32位处理器。

上电或复位时,系统以管理员模式开始。一旦加载并启动了操作系统内核,就可以建立用户模式和管理员模式(也称为内核模式)之间的界限。

内核使用管理程序模式进行低级别任务,这些任务需要不受限制地访问硬件,例如控制内存的访问方式,以及与磁盘驱动器和视频显示设备等设备进行通信。相反,用户模式几乎用于其他所有方面。应用程序(如文字处理程序和数据库管理器)在用户模式下运行,并且只能通过将控制权交给内核来访问机器资源,这是一个导致切换到管理员模式的过程。通常,通过执行软件中断指令(例如Motorola 68000)来实现对内核的控制转移TRAP指令。软件中断使微处理器从用户模式切换到管理程序模式,并开始执行允许内核控制的代码。

在用户模式下,程序通常可以访问一组受限制的微处理器指令,并且通常不能执行任何可能导致系统操作中断的指令。在管理程序模式下,通常会删除指令执行限制,允许内核不受限制地访问所有计算机资源。

术语“用户模式资源”通常是指一个或多个CPU寄存器,其包含不允许运行程序改变的信息。尝试改变这些资源通常会导致切换到管理程序模式,其中操作系统可以处理程序正在尝试的非法操作,例如,通过强制终止(“杀死”)程序。

内存管理
主要文章:内存管理
除此之外,多道程序设计操作系统内核必须负责管理程序当前使用的所有系统内存。这可确保程序不会干扰另一个程序已在使用的内存。由于程序时间共享,每个程序必须具有独立的内存访问权限。

许多早期操作系统使用的协作内存管理假定所有程序都自愿使用内核的内存管理器,并且不超过其分配的内存。这种内存管理系统几乎从未被看到,因为程序通常包含可能导致它们超出其分配的内存的错误。如果程序失败,则可能导致一个或多个其他程序使用的内存受到影响或被覆盖。恶意程序或病毒可能故意改变另一个程序的内存,或者可能影响操作系统本身的操作。通过协作式内存管理,只需一个行为不端的程序即可使系统崩溃。

内存保护使内核能够限制进程对计算机内存的访问。存在各种存储器保护方法,包括存储器分段和寻呼。所有方法都需要某种级别的硬件支持(例如80286 MMU),这在所有计算机中都不存在。

在分段和分页中,某些保护模式寄存器向CPU指定应允许正在运行的程序访问的内存地址。尝试访问其他地址会触发中断,导致CPU重新进入管理程序模式,使内核负责。这被称为分段违规或简称为Seg-V,并且由于难以为此类操作分配有意义的结果,并且因为它通常是行为不端程序的标志,所以内核通常会采取措施来终止违规程序,并报告错误。

Windows 3.1到ME版本具有一定程度的内存保护,但程序可以轻松避免使用它。一个一般性保护错误将产生,说明已经发生分段违例; 然而,无论如何,系统经常会崩溃。

虚拟内存
主要文章:虚拟内存
更多信息:页面错误

许多操作系统可以“欺骗”程序使用散布在硬盘和RAM周围的内存,就好像它是一个连续的内存块,称为虚拟内存。
使用虚拟内存寻址(例如分页或分段)意味着内核可以选择每个程序在任何给定时间可以使用的内存,从而允许操作系统将相同的内存位置用于多个任务。

如果程序试图访问不在其当前可访问内存范围内但仍然已分配给它的内存,则内核将以与程序超出其分配内存时相同的方式中断。(请参阅有关内存管理的部分。)在UNIX下,这种中断称为页面错误。

当内核检测到页面错误时,它通常会调整触发它的程序的虚拟内存范围,授予它访问所请求的内存的权限。这使得内核可以自由选择存储特定应用程序内存的位置,甚至是否实际已经分配了内存。

在现代操作系统中,较少访问的存储器可以临时存储在磁盘或其他介质上,以使该空间可供其他程序使用。这称为交换,因为多个程序可以使用内存区域,并且可以根据需要交换或交换该内存区域包含的内容。

“虚拟内存”为程序员或用户提供了一种感觉,即计算机中的RAM数量远远超过实际存在的RAM。[31]

多任务处理

本节不引用任何来源。请通过向可靠来源添加引文来帮助改进此部分。可以质疑和移除未供应的材料。 (2018年12月)(了解如何以及何时删除此模板消息)
主要文章:计算机多任务处理和处理管理(计算)
更多信息:上下文切换,抢先式多任务处理和协作式多任务处理
多任务是指在同一台计算机上运行多个独立的计算机程序; 给出它正在同时执行任务的外观。由于大多数计算机一次最多只能做一两件事,这通常是通过分时完成的,这意味着每个程序都使用计算机执行时间的一部分。

操作系统内核包含一个调度程序,它确定每个进程花费多少时间执行,以及执行控制应该传递给程序的顺序。控制由内核传递给进程,允许程序访问CPU和内存。之后,通过某种机制将控制权返回给内核,以便允许另一个程序使用CPU。这种所谓的内核和应用程序之间的控制传递称为上下文切换。

管理计划时间分配的早期模型称为协作式多任务处理。在这个模型中,当内核将控制权传递给程序时,它可以在显式地将控制权返回给内核之前执行所需的时间。这意味着恶意程序或故障程序不仅可能阻止任何其他程序使用CPU,而且如果它进入无限循环,它可能会挂起整个系统。

现代操作系统将应用程序抢占的概念扩展到设备驱动程序和内核代码,以便操作系统也可以抢先控制内部运行时间。

管理抢占式多任务处理的理念是确保所有程序都定期在CPU上运行。这意味着必须限制所有程序在不被中断的情况下允许在CPU上花费的时间。为此,现代操作系统内核利用定时中断。一个保护模式定时器被触发回归到监督模式在指定的时间过去之后内核设置。(参见上面关于中断和双模式操作的部分。)

在许多单用户操作系统上,协作式多任务处理是完全足够的,因为家用计算机通常运行少量经过良好测试的程序。该AmigaOS是个例外,从它的第一个版本具有抢占式多任务。Windows NT是第一个强制执行抢占式多任务处理的Microsoft Windows版本,但在Windows XP(因为Windows NT专门针对专业人员)之前它没有进入家庭用户市场。

磁盘访问和文件系统
主要文章:虚拟文件系统

本节不引用任何来源。请通过向可靠来源添加引文来帮助改进此部分。可以质疑和移除未供应的材料。 (2018年12月)(了解如何以及何时删除此模板消息)

文件系统允许用户和程序通常通过使用目录(或“文件夹”)来组织和排序计算机上的文件。
访问存储在磁盘上的数据是所有操作系统的核心功能。计算机使用文件将数据存储在磁盘上,文件以特定方式构建,以便更快地访问,提高可靠性,并更好地利用驱动器的可用空间。文件存储在磁盘上的具体方式称为文件系统,并使文件具有名称和属性。它还允许它们存储在目录树中排列的目录或文件夹的层次结构中。

早期的操作系统通常支持单一类型的磁盘驱动器和仅一种文件系统。早期的文件系统的容量,速度以及它们可以使用的文件名和目录结构的种类都受到限制。这些限制通常反映了它们所针对的操作系统的限制,使得操作系统很难支持多个文件系统。

虽然许多更简单的操作系统支持访问存储系统的有限选项,但UNIX和Linux等操作系统支持称为虚拟文件系统或VFS的技术。UNIX等操作系统支持各种存储设备,无论其设计或文件系统如何,都允许通过通用的应用程序编程接口(API)进行访问。这使得程序无需了解他们正在访问的设备。VFS允许操作系统通过特定的使用方式为程序提供访问无限数量设备的程序,这些设备上安装了各种各样的文件系统。设备驱动程序和文件系统驱动

通过设备驱动程序访问连接的存储设备,例如硬盘驱动器。设备驱动程序了解驱动器的特定语言,并能够将该语言转换为操作系统用于访问所有磁盘驱动器的标准语言。在UNIX上,这是块设备的语言。

当内核具有适当的设备驱动程序时,它可以以原始格式访问磁盘驱动器的内容,该格式可能包含一个或多个文件系统。文件系统驱动程序用于将用于访问每个特定文件系统的命令转换为操作系统可用于与所有文件系统通信的标准命令集。然后,程序可以基于分层结构中包含的文件名和目录/文件夹来处理这些文件系统。他们可以创建,删除,打开和关闭文件,以及收集有关它们的各种信息,包括访问权限,大小,可用空间以及创建和修改日期。

文件系统之间的各种差异使得难以支持所有文件系统。文件名中允许的字符,区分大小写以及各种文件属性的存在使得为每个文件系统实现单个接口成为一项艰巨的任务。操作系统倾向于建议使用专门为它们设计的文件系统(以及原生支持); 例如,Windows中的NTFS和Linux中的ext3和ReiserFS。但是,实际上,第三方驱动程序通常可用于支持大多数通用操作系统中使用最广泛的文件系统(例如,NTFS可通过NTFS-3g在Linux中使用,以及通过第三方软件在Windows中提供ext2 / 3和ReiserFS。

现代操作系统对文件系统的支持差异很大,尽管有几种常见的文件系统几乎所有操作系统都包含支持和驱动程序。操作系统因文件系统支持和可能安装的磁盘格式而异。在Windows下,每个文件系统通常限于应用于某些媒体; 例如,CD必须使用ISO 9660或UDF,以及Windows Vista,NTFS是唯一可以安装操作系统的文件系统。可以将Linux安装到许多类型的文件系统上。与其他操作系统不同,Linux和UNIX允许使用任何文件系统,无论它是否存储在何处,无论是硬盘驱动器,光盘(CD,DVD …),USB闪存驱动器,还是包含位于另一个文件系统上的文件中。

设备驱动程序
主要文章:设备驱动程序

本节不引用任何来源。请通过向可靠来源添加引文来帮助改进此部分。可以质疑和移除未供应的材料。 (2018年12月)(了解如何以及何时删除此模板消息)
一个设备驱动程序是一种特定类型的计算机软件,用于与硬件设备进行交互。通常,这构成了用于与设备通信的接口,通过硬件连接到的特定计算机总线或通信子系统,向设备提供命令和/或从设备接收数据,以及在另一端,操作的必要接口。系统和软件应用程序。它是一种专用的依赖于硬件的计算机程序,它也是特定于操作系统的,它使另一个程序,通常是在操作系统内核下运行的操作系统或应用程序软件包或计算机程序能够与硬件设备透明地交互,

设备驱动程序的关键设计目标是 抽象。每种型号的硬件(甚至在同一类设备中)都是不同的。较新型号也由制造商发布,提供更可靠或更好的性能,而这些新型号通常以不同方式进行控制。无论是现在还是将来,都不能指望计算机及其操作系统知道如何控制每个设备。为了解决这个问题,操作系统基本上决定了应该如何控制每种类型的设备。然后,设备驱动程序的功能是将这些操作系统强制函数调用转换为特定于设备的调用。理论上,如果有合适的驱动器,则以新方式控制的新设备应该能够正常工作。从操作系统的角度来看,这种新驱动程序可确保设备看起来像往常一样运行。

在Vista之前的Windows版本和2.6之前的Linux版本中,所有驱动程序执行都是合作的,这意味着如果驱动程序进入无限循环,它将冻结系统。这些操作系统的最新版本包含内核抢占,其中内核中断驱动程序以为其提供任务,然后将其自身与流程分离,直到它从设备驱动程序接收响应,或者为其提供更多任务。

联网
主要文章:计算机网络

本节不引用任何来源。请通过向可靠来源添加引文来帮助改进此部分。可以质疑和移除未供应的材料。 (2018年12月)(了解如何以及何时删除此模板消息)
目前,大多数操作系统支持各种网络协议,硬件和使用它们的应用程序。这意味着运行不同操作系统的计算机可以使用有线或无线连接参与公共网络以共享资源,例如计算,文件,打印机和扫描仪。网络基本上允许计算机的操作系统访问远程计算机的资源,以支持与这些资源直接连接到本地计算机时相同的功能。这包括从简单通信到使用网络文件系统甚至共享另一台计算机的图形或声音硬件的所有内容。一些网络服务允许透明地访问计算机的资源,例如SSH允许联网用户直接访问计算机的命令行界面。

客户端/服务器网络允许计算机上的程序(称为客户端)通过网络连接到另一台称为服务器的计算机。服务器向其他网络计算机和用户提供(或托管)各种服务。这些服务通常通过服务器IP地址之外的端口或编号访问点提供。每个端口号通常与最多一个正在运行的程序相关联,该程序负责处理对该端口的请求。作为用户程序的守护进程可以通过将请求传递给操作系统内核来访问该计算机的本地硬件资源。

很多操作系统支持一个或多个供应商特定的或开放的网络协议为好,例如,SNA在IBM系统,DECnet的从系统数字设备公司和微软特定的协议(SMB在Windows上)。还可以支持特定任务的特定协议,例如用于文件访问的NFS。ESound或esd 等协议可以通过网络轻松扩展,以便在远程系统的声音硬件上提供本地应用程序的声音。

安全
主要文章:计算机安全
安全的计算机取决于许多正常工作的技术。现代操作系统提供对许多资源的访问,这些资源可供系统上运行的软件使用,也可通过内核访问网络等外部设备。[ 引证需要 ]

操作系统必须能够区分应该允许处理的请求和不应该处理的其他请求。虽然一些系统可以简单地区分“特权”和“非特权”,但系统通常具有请求者身份的形式,例如用户名。为了建立身份,可能存在认证过程。通常必须引用用户名,并且每个用户名可能都有密码。可以使用其他认证方法,例如磁卡或生物识别数据。在某些情况下,尤其是来自网络的连接,可以在完全不进行身份验证的情况下访问资源(例如通过网络共享读取文件)。此外,通过这一概念涵盖的请求者身份是授权 ; 一旦登录到系统,请求者可访问的特定服务和资源与请求者的用户帐户或请求者所属的各种配置的用户组相关联。[ 引证需要 ]

除了允许或禁止安全模型之外,具有高安全性的系统还提供审计选项。这些将允许跟踪访问资源的请求(例如,“谁一直在读取此文件?”)。只有在必须通过对操作系统内核的中断执行所有可能有害的请求时,才能实现内部安全性或已经运行的程序的安全性。如果程序可以直接访问硬件和资源,则无法保护它们。[ 引证需要 ]

外部安全涉及来自计算机外部的请求,例如在连接的控制台上登录或某种网络连接。外部请求通常通过设备驱动程序传递到操作系统的内核,在那里它们可以传递到应用程序或直接执行。操作系统的安全性长期以来一直受到关注,因为计算机上的高度敏感数据,无论是商业还是军事性质。美国政府 国防部(DoD)创建了可信计算机系统评估标准(TCSEC),该标准为评估安全有效性设定了基本要求。这对操作系统制造商至关重要,因为TCSEC用于评估,分类和选择正在考虑用于处理,存储和检索敏感或机密信息的可信操作系统。

网络服务包括文件共享,打印服务,电子邮件,网站和文件传输协议(FTP)等产品,其中大多数都可能具有安全性受损。安全的第一线是称为防火墙的硬件设备或入侵检测/预防系统。在操作系统级别,可以使用许多软件防火墙以及入侵检测/防御系统。大多数现代操作系统都包含默认启用的软件防火墙。可以将软件防火墙配置为允许或拒绝进出操作系统上运行的服务或应用程序的网络流量。因此,可以安装并运行不安全的服务,例如Telnet或FTP,并且不必受到安全漏洞的威胁,因为防火墙会拒绝所有尝试连接到该端口上的服务的流量。

另一种策略,以及不符合Popek和Goldberg虚拟化要求的系统中唯一可用的沙盒策略,是操作系统不将用户程序作为本机代码运行的地方,而是模拟处理器或为p提供主机基于代码的系统,如Java。

内部安全与多用户系统尤其相关; 它允许系统的每个用户拥有其他用户无法篡改或读取的私人文件。如果审计是有用的,内部安全也是至关重要的,因为程序可能会绕过操作系统,包括绕过审计。

用户界面
主要文章:操作系统用户界面

Bash命令行的屏幕截图。在’prompt’之后输出每个命令,然后它的输出显示在下面,沿着屏幕向下移动。当前命令提示符位于底部。
每个要由个人操作的计算机都需要用户界面。用户界面通常被称为shell,如果要支持人工交互,则必不可少。用户界面查看目录结构并从操作系统请求服务,该服务将从输入硬件设备(例如键盘,鼠标或信用卡读卡器)获取数据,并请求操作系统服务在输出硬件上显示提示,状态消息等。设备,例如视频监视器或打印机。用户界面的两种最常见形式历来是命令行界面,其中计算机命令是逐行输入的,以及图形用户界面,其中存在视觉环境(通常是WIMP)。

图形用户界面

KDE Plasma 5图形用户界面的屏幕截图。程序采用屏幕上的图像形式,文件,文件夹(目录)和应用程序采用图标和符号的形式。鼠标用于导航计算机。
大多数现代计算机系统都支持图形用户界面(GUI),并且通常包括它们。在某些计算机系统中,例如经典Mac OS的原始实现,GUI被集成到内核中。

虽然从技术上讲,图形用户界面不是操作系统服务,但将一个支持结合到操作系统内核中可以通过减少GUI执行其输出功能所需的上下文切换的数量来允许GUI更具响应性。其他操作系统是模块化的,将图形子系统与内核和操作系统分开。在20世纪80年代,UNIX,VMS和许多其他公司拥有以这种方式构建的操作系统。Linux和macOS也是以这种方式构建的。现代版本的Microsoft Windows(如Windows Vista)实现了一个主要位于用户空间的图形子系统; 但是Windows NT 4.0和Windows NT 4.0之间版本的图形绘制程序Windows Server 2003主要存在于内核空间中。Windows 9x在界面和内核之间几乎没有区别。

许多计算机操作系统允许用户安装或创建他们想要的任何用户界面。在X Window系统会同GNOME或KDE等离子体5是在大多数Unix和一个常见的设置类Unix(BSD,Linux和Solaris)系统。已经为Microsoft Windows发布了许多Windows shell替代品,它们提供了所包含的Windows shell的替代品,但shell本身不能与Windows分离。

随着时间的推移,已经存在许多基于Unix的GUI,其中大部分源自X11。各种Unix(HP,IBM,Sun)供应商之间的竞争导致了大量的碎片化,尽管在20世纪90年代将COSE和CDE标准化的努力由于各种原因而失败,并且最终被GNOME和K桌面环境的广泛采用所黯然失色。。在基于免费软件的工具包和桌面环境之前,Motif是流行的工具包/桌面组合(并且是开发CDE的基础)。

图形用户界面随着时间的推移而发展。例如,Windows几乎每次发布新的主要版本的Windows时都修改了其用户界面,并且随着1999年推出Mac OS X,Mac OS GUI发生了巨大变化。[32]

实时操作系统
主要文章:实时操作系统
实时操作系统(RTOS)是一种用于具有固定期限(实时计算)的应用程序的操作系统。这些应用包括一些小型嵌入式系统,汽车发动机控制器,工业机器人,航天器,工业控制和一些大型计算系统。

大型实时操作系统的早期示例是由美国航空公司和IBM为Sabre航空公司预订系统开发的交易处理设施。

具有固定期限的嵌入式系统使用实时操作系统,如VxWorks,PikeOS,eCos,QNX,MontaVista Linux和RTLinux。Windows CE是一个实时操作系统,它与桌面Windows共享类似的API,但不共享桌面Windows的代码库。[ 引证需要 ] Symbian OS还有一个从版本8.0b开始的RTOS内核(EKA2)。

一些嵌入式系统使用Palm OS,BSD和Linux等操作系统,尽管这些操作系统不支持实时计算。

操作系统开发作为一种爱好
另请参见:业余爱好者操作系统开发
操作系统开发是计算爱好者可以参与的最复杂的活动之一。[ 引证需要 ]业余爱好操作系统可以被归类为其代码尚未直接从现有操作系统派生而且具有少量用户和活跃开发者的操作系统。[33]

在某些情况下,爱好开发支持“ 自制 ”计算设备,例如,由6502微处理器供电的简单单板计算机。或者,开发可以用于已经广泛使用的架构。操作系统开发可以来自全新的概念,或者可以通过对现有操作系统建模来开始。在任何一种情况下,业余爱好者都是他/她自己的开发者,或者可能与一些有兴趣的小型,有时非结构化的个人互动。

业余爱好操作系统的示例包括Syllable和TempleOS。

操作系统的多样性和可移植性
应用程序软件通常编写用于特定操作系统,有时甚至用于特定硬件。[ 引证需要 ]当移植应用程序以在另一个OS上运行时,该应用程序所需的功能可以通过该OS(函数的名称,参数的含义等)以不同的方式实现,这需要对应用程序进行调整,更改或否则保持。

Unix是第一个不是用汇编语言编写的操作系统,因此它非常便于与原生PDP-11不同的系统。[34]

通过针对诸如Java或Qt之类的软件平台编写应用程序,可以避免支持操作系统多样性的这种成本。这些抽象已经承担了适应特定操作系统及其系统库的成本。

另一种方法是操作系统供应商采用标准。例如,POSIX和OS抽象层提供了降低移植成本的共性。

市场份额
更多信息:操作系统的使用份额
也可以看看
图标 计算机科学门户
信息技术门户
计算机网络门户
操作系统的比较
崩溃(计算)
管理程序
可中断的操作系统
操作系统中重要出版物清单
操作系统列表
计算机科学先驱名单
Live CD
操作系统术语表
微控制器
移动设备
移动操作系统
网络操作系统
面向对象的操作系统
操作系统项目
系统指挥官
系统映像
操作系统的时间表

你可能感兴趣的:(OS)