作业系统
操作系统( OS )是管理计算机硬件和软件资源的系统软件,并为计算机程序提供通用服务。
分时的操作系统计划任务有效地使用系统,还可能包括用于分配处理器时间,批量存储,外围设备和其他资源的会计软件。
对于硬件函数,例如输入,输出和内存分配,操作系统充当程序和计算机硬件之间的中介,尽管应用程序代码通常是由硬件直接执行的,并且经常将系统调用到OS功能或被中断。它。操作系统都在许多包含计算机的设备上找到 - 从蜂窝电话和视频游戏机到Web服务器和超级计算机。
截至2023年9月,在个人计算机市场中,微软Windows的主要市场份额约为68%。 Apple Inc.的Macos排在第二位(20%),包括Chromeos在内的Linux品种共同排名第三(7%)。截至2023年9月,在移动领域(包括智能手机和平板电脑)中, Android的份额为68.92%,其次是苹果的iOS和iPados ,占30.42%,其他操作系统为0.66%。 Linux分布在服务器和超级计算扇区中占主导地位。许多应用程序都存在其他专业类的操作系统(特殊用途操作系统),例如嵌入式和实时系统。还存在以安全为中心的操作系统。一些操作系统的系统要求低(例如轻量重量Linux分布)。其他人可能有更高的系统要求。
某些操作系统需要安装,或者可能会预装购买的计算机( OEM插图),而另一些操作系统可能直接从媒体(IE Live CD )或闪存(即USB Stick)运行。
操作系统类型
单任务和多任务处理
单任务系统一次只能运行一个程序,而多任务操作系统允许多个程序同时运行。这是通过分时间隔来实现的,其中可用的处理器时间在多个过程之间分配。这些过程通过操作系统的任务安排子系统在时间切片中反复中断。多任务可以用先发制人和合作类型来表征。在先发制人的多任务处理中,操作系统将CPU时间切开,并为每个程序提供一个插槽。 Unix型操作系统(例如Linux)以及非Unix的诸如Amigaos的非unix-pupport先发制性多任务处理。合作多任务是通过依靠每个过程以定义的方式为其他过程提供时间的。 Microsoft Windows的16位版本使用了合作的多任务处理; Windows NT和Win9X的32位版本都使用了先发制的多任务处理。
单用户和多用户
单用户操作系统没有区分用户的设施,但可能允许多个程序同时运行。多用户操作系统将多任务处理的基本概念与识别流程和资源(例如磁盘空间,属于多个用户)等设施扩展了,该系统允许多个用户同时与系统进行交互。时间共享操作系统计划任务有效地使用该系统,还可能包括为多个用户分配处理器时间,批量存储,打印和其他资源的成本分配的会计软件。
分散式
一个分布式操作系统管理一组不同的网络计算机,并使它们看起来是一台计算机,因为所有计算均分布(在组成型计算机之间进行了分配)。
嵌入
嵌入式操作系统设计用于嵌入式计算机系统。它们旨在在自主权较少的小型机器上操作(例如PDA )。它们的设计非常紧凑且非常有效,并且能够以有限的资源运行。 Windows CE和Minix 3是嵌入式操作系统的一些示例。
即时的
实时操作系统是一个操作系统,可确保在特定时刻通过特定时刻处理事件或数据。实时操作系统可能是单个或多任务处理,但是在多任务处理时,它会使用专门的调度算法,从而实现行为的确定性。这样的事件驱动的系统根据任务的优先级或外部事件在任务之间进行切换,而时间共享操作系统根据时钟中断切换任务。
图书馆
图书馆操作系统是典型操作系统提供的服务,例如网络,以库的形式提供,并与应用程序和配置代码组成以构造Unikernel :专用的,单个地址空间,机器图像可以将其部署到云或嵌入式环境中。
历史
早期计算机是为执行一系列单个任务(例如计算器)而构建的。基本的操作系统功能是在1950年代开发的,例如居民监视器功能,可以自动运行不同的程序以加快处理。直到1960年代初期,操作系统才以其现代和更复杂的形式存在。添加了硬件功能,从而可以使用运行时库,中断和并行处理。当个人计算机在1980年代变得流行时,为它们的概念类似于在大型计算机上使用的操作系统。
在1940年代,最早的电子数字系统没有操作系统。这段时间的电子系统是在机械开关行或插件上的跳线上编程的。这些是专用系统,例如为军方生成弹道表,或控制着从打孔卡上的数据中打印薪资支票。在发明了可编程通用计算机后,引入了机器语言(由打孔纸带上的二进制数字0和1组成),引入了加速编程过程(Stern,1981)。
在1950年代初期,计算机一次只能执行一个程序。每个用户在有限的时间内唯一使用计算机,并将在计划的时间和纸牌或打孔胶带上的数据和数据到达。该程序将被加载到计算机中,并将机器设置为工作,直到程序完成或崩溃为止。通常可以使用拨动开关和面板灯通过前面板通过前面板进行调试。据说艾伦·图灵(Alan Turing)是曼彻斯特早期的马克1机器上的大师,他已经从通用图灵机器的原理中得出了操作系统的原始概念。
后来的机器带有程序库,该库将链接到用户的程序,以协助操作,例如输入,输出和编译(从人类可读符号代码生成机器代码)。这是现代操作系统的起源。但是,机器一次仍然跑了一份工作。在英格兰的剑桥大学,工作队列曾经是一条洗衣服(晾衣绳),录像带上挂着不同的彩色服装,以表明工作优先级。
到1950年代后期,人们会认识到作为操作系统的程序开始出现。通常被指定为最早的可识别例子是GM-NAA I/O ,于1956年在IBM 704上发布。乔治·赖克曼(George Ryckman)在1959年发行的第一个已知示例是股份操作系统,这是1959年发行的GM-NAA I/O的开发。
计算机操作系统的开发实质上有助于有效地在计算机上和计算机上获取程序或一系列程序的问题。
早期系统讨论中经常发现的最著名的例子之一是Atlas主管,该主管于1962年在Atlas上运行。它在1961年12月的一篇文章中被称为描述该系统的文章,但“操作系统的背景“系统以时尚的运行”的方式“更像是”。 Atlas团队本身使用了“主管”一词,该术语与“监视器”一起广泛使用。布林奇·汉森(Brinch Hansen)将其描述为“操作系统史上最重要的突破”。
大型机
在整个1950年代,许多主要功能都在大型计算机的操作系统领域率先开创,包括批处理处理,输入/输出中断,缓冲,多任务,假设,运行时库,链接加载,链接加载和用于对文件中进行分类记录的程序。这些功能由应用程序编程器选项包括或不包括在应用程序软件中,而不是所有应用程序使用的单独操作系统。 1959年,股份操作系统作为IBM 704的集成实用程序发布,后来在709和7090大型机中发布,尽管它迅速被IBSYS /IBJOB迅速取代了709、7090和7094,这反过来又影响了后者的影响7040-PR-150( 7040/7044 )和1410-PR-155( 1410 / 7010 )操作系统。
在1960年代,IBM的OS/360介绍了跨越整个产品线的单个OS的概念,这对于系统/360机器的成功至关重要。 IBM当前的大型机器人操作系统是该原始系统的遥远后代,现代机器与为OS/360编写的应用程序向后兼容。
OS/360还开创了一个概念,即操作系统跟踪所使用的所有系统资源,包括辅助存储中主内存和文件空间中的程序和数据空间分配,以及更新期间的文件锁定。当由于任何原因终止流程时,所有这些资源将由操作系统重新宣称。
S/360-67的替代CP-67系统启动了集中在虚拟机概念上的IBM操作系统。 IBM S/360系列大型机上使用的其他操作系统包括由IBM开发的系统: DOS/360 (磁盘操作系统), TSS/360 (时间共享系统), TOS/360 (磁带操作系统), BOS/360 (基本操作系统)和ACP (航空公司控制程序),以及一些非IBM系统: MTS (密歇根州终端系统),音乐(交互式计算的多用户系统)和OrvyL (Stanford timeslaining System)。
控制数据公司在1960年代开发了范围操作系统,用于批处理处理。与明尼苏达大学合作,克罗诺斯(Kronos )和后来的NOS操作系统是在1970年代开发的,该系统支持同时批量生产和分时使用。像许多商业分时系统系统一样,它的界面是达特茅斯基本操作系统的扩展,这是分时和编程语言中开创性的努力之一。在1970年代后期,控制数据和伊利诺伊大学开发了柏拉图操作系统,该操作系统使用了等离子体面板显示器和长距离时间共享网络。柏拉图的时间为实时聊天和多用户图形游戏而引人注目。
1961年, Burroughs Corporation使用MCP (主控制计划)操作系统引入了B5000 。 B5000是一台堆栈机,旨在专门支持没有汇编器的高级语言;确实,MCP是第一个专门用高级语言编写的操作系统( ESPOL , Algol的方言)。 MCP还引入了许多其他突破性的创新,例如是虚拟内存的第一个商业实施。 MCP今天仍在Unisys Company的MCP/ClearPath计算机系列中使用。
第一家商用计算机制造商Univac生产了一系列的Exec操作系统。像所有早期的主框系统一样,这种面向批处理的系统托管磁性鼓,磁盘,读卡器和线条打印机。在1970年代,Univac生产了实时基本(RTB)系统,以支持大规模共享,也以卑诗省达特茅斯系统为图案。
通用电气开发的通用电气综合运营主管(GECO),主要支持批处理处理。在霍尼韦尔(Honeywell)收购后,它更名为一般综合操作系统(GCO)。
Bell Labs ,通用电气和MIT开发了多重信息和计算服务( Multics ),该信息介绍了环形安全特权级别的概念。
数字设备公司为其各种计算机系列开发了许多操作系统,包括36位PDP-10类系统的TOUP-10和TOPS-20时间共享系统。在广泛使用UNIX之前,Tops-10是大学和早期Arpanet社区中特别受欢迎的系统。 RT-11是PDP-11类微型计算机的单用户实时OS, RSX-11是相应的多用户OS。
从1960年代后期到1970年代后期,几个硬件功能不断发展,允许类似或移植的软件在多个系统上运行。早期系统已利用微型程序在其系统上实现功能,以便允许不同的基础计算机架构看起来与系列中的其他功能相同。实际上,在360/40之后的大多数360年代(360/44、360/75、360/91、360/95和360/195之外)都是微序列化的实现。
自1960年代以来制造的这些系统的大量投资使大多数原始计算机制造商继续开发兼容操作系统和硬件。著名支持的大型机组操作系统包括:
- Burroughs MCP - B5000,1961至Unisys 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,在场
微型计算机
第一个微型计算机没有针对大型机和微型计算机开发的精心操作系统的能力或需求。开发了简约的操作系统,通常是从ROM加载的,并被称为显示器。一个值得注意的早期磁盘操作系统是CP/M ,它在许多早期的微型计算机上得到了支持,并由Microsoft的MS-DOS密切模仿,该MS-DOS被广泛流行,因为它是为IBM PC选择的操作系统(IBM的版本称为IBS版本) IBM DOS或PC DOS )。
在1980年代,Apple Computer Inc.(现为Apple Inc. )与其流行的Apple II系列微型计算机一起推出了Apple Macintosh 。 Macintosh具有创新的图形用户界面(GUI)和鼠标;它运行了一个后来称为(经典)Mac OS的操作系统。
1985年10月,引入了Intel 80386 CPU芯片,具有32位体系结构和要求功能,为个人计算机提供了运行多任务操作系统(如较早的SuperMinicomputers and Mainfames of SuperminiComputers and Mainframes)的能力。微软通过雇用了为数字设备公司开发VMS操作系统的Dave Cutler来回应这一进展。他将领导Windows NT操作系统的开发,该操作系统将继续作为Microsoft操作系统系列的基础。苹果公司的联合创始人史蒂夫·乔布斯(Steve Jobs)创立了Next Computer Inc.,该公司开发了NextStep操作系统。 NextStep后来将被Apple Inc.收购,并使用FreeBSD的代码作为Mac OS X的核心(最新名称更改后MacOS)。
GNU项目由激进主义者和程序员Richard Stallman创立,目的是为专有UNIX操作系统创建完整的免费软件替换。尽管该项目在复制UNIX各个部分的功能方面非常成功,但GNU Hurd内核的开发被证明没有生产力。 1991年,芬兰计算机科学专业的学生Linus Torvalds与志愿者通过Internet合作的合作发布了Linux内核的第一个版本。它很快与GNU用户空间组件和系统软件合并,以形成完整的操作系统。从那时起,这两个主要组成部分的组合通常被软件行业称为“ Linux”,这是Stallman和Free Software Foundation的命名约定,而偏爱GNU/Linux这个名称。伯克利软件分销(称为BSD )是从1970年代开始的加利福尼亚大学伯克利分布的UNIX衍生产品。自由分发并移植给许多微型计算机,最终还获得了PC的关注点,主要用作FreeBSD , NetBSD和OpenBSD 。
例子
UNIX和UNIX式操作系统
Unix最初是用汇编语言编写的。肯·汤普森(Ken Thompson)基于他在Multics项目中的经验,主要基于BCPL 。 B被C替换为C ,并在C中重写的UNIX替换为一个大型,复杂的相关操作系统家族,这些家族在每个现代操作系统中都具有影响力(请参阅历史记录)。
类似Unix的家族是一组多样化的操作系统,其中包括系统V , BSD和Linux在内的几个主要子类别。名称“ Unix ”是开放组的商标,该商标旨在与已显示符合其定义的任何操作系统一起使用。 “类似于Unix的”通常用于指类似于原始Unix的大型操作系统。
Unix状系统在各种计算机架构上运行。它们大量用于业务服务器以及学术和工程环境中的工作站。 Free Unix变体(例如Linux和BSD )在这些领域很受欢迎。
五个操作系统由开放组(UNIX商标持有人)认证为UNIX。 HP的HP-UX和IBM的AIX都是原始系统V Unix的后代,旨在仅在其各自的供应商的硬件上运行。相反, Sun Microsystems的Solaris可以在多种类型的硬件上运行,包括X86和SPARC服务器以及PC。 Apple的MacOS是Apple早期(非Unix)经典Mac OS的替代品,是一种基于Hybrid内核的BSD变体,该变体源自NextStep , Mach和FreeBSD 。 IBM的Z/OS UNIX系统服务包括基于Mortice Kerns的互额产品的外壳和实用程序。
通过建立POSIX标准来寻求UNIX互操作性。 POSIX标准可以应用于任何操作系统,尽管最初是针对各种Unix变体创建的。
BSD及其后代
UNIX家族的一个子组是伯克利软件分销系列,其中包括FreeBSD , NetBSD和OpenBSD 。这些操作系统最常见于网络服务器,尽管它们也可以充当个人计算机操作系统。 Internet的大部分存在归功于BSD,因为计算机现在常用的许多协议通过网络连接,发送和接收数据都在BSD中广泛实现和完善。首先在许多基于BSD的OS的计算机上也证明了全球网络。
1974年,伯克利分校安装了第一个Unix系统。随着时间的流逝,计算机科学系的学生和员工开始添加新的程序,以使事情变得更容易,例如文本编辑。当伯克利(Berkeley)在1978年收到新的VAX计算机并安装了UNIX时,该学校的本科生修改了UNIX,以利用计算机的硬件可能性。美国国防部的国防高级研究项目局提出了兴趣,并决定为该项目提供资金。许多学校,公司和政府组织都注意到并开始使用伯克利的UNIX版本,而不是AT&T分发的官方。
史蒂夫·乔布斯(Steve Jobs)于1985年离开苹果公司(Apple Inc.)成立了Next Inc. ,该公司生产的高端计算机以BSD为NextStep的变体运行。这些计算机之一被蒂姆·伯纳斯·李(Tim Berners-Lee)用作创建万维网的第一个网络服务器。
像基思·波斯蒂奇(Keith Bostic)这样的开发人员鼓励该项目替换贝尔实验室(Bell Labs)起源于贝尔实验室的任何非免费代码。但是,一旦完成,AT&T起诉。经过两年的法律纠纷,BSD项目催生了许多自由衍生品,例如NetBSD和FreeBSD (均在1993年)和OpenBSD (1995年的NetBSD)。
苹果系统
MACOS (以前为“ Mac OS X”及后来的“ OS X”)是Apple Inc.开发,销售和销售的开放核心图形操作系统系列,其中最新的已预加载已在所有当前运送的Macintosh计算机上。 MACOS是原始经典Mac OS的后继产品,该Macos自1984年以来一直是苹果的主要操作系统。与其前身不同,MacOS是一种基于技术的Unix操作系统,该技术已在1980年代下半年及其下一个技术开发直至苹果公司于1997年初购买了该公司。该操作系统于1999年首次以Mac OS X Server 1.0发布,随后在2001年3月由客户版本( Mac OS X V10.0“ Cheetah” )发行。从那时起,已经发布了六个不同的“客户端”和“服务器”版本,直到两者在OS X 10.7“狮子”中合并为止。
在与MACOS合并之前,服务器版-MacOS Server在架构上与其桌面对应物相同,通常在Apple的Macintosh Server硬件系列上运行。 MACOS服务器包括工作组管理和管理软件工具,可简化访问密钥网络服务,包括邮件传输代理,桑巴服务器, LDAP服务器,域名服务器等。使用Mac OS X V10.7狮子,Mac OS X服务器的所有服务器方面都集成到客户端版本中,并将产品重新命名为“ OS X”(从名称中删除“ Mac”)。现在将服务器工具作为应用程序提供。
Z/OS UNIX系统服务
首次引入了MVS/ESA系统产品版本4版本3的开放升级,1993年2月宣布,支持POSIX和其他标准。 Z/OS UNIX系统服务建立在MVS服务的顶部,无法独立运行。虽然IBM最初引入了满足FIPS要求的开放式开放,但现在几个Z/OS组件需要UNIX服务,例如,TCP/IP。
Linux
Linux内核起源于1991年,是Linus Torvalds的项目,而芬兰的大学生。他在针对计算机学生和程序员的新闻组上发布了有关其项目的信息,并获得了成功创建完整且功能性内核的志愿者的支持和帮助。
Linux类似于Unix ,但与BSD及其变体不同,没有任何UNIX代码。由于其开放许可证模型, Linux内核代码可用于研究和修改,这导致其在从超级计算机到智能手表的广泛计算机上使用。尽管估计表明Linux仅在所有“台式机”(或笔记本电脑)PC中仅2.81%使用,但已被广泛用于服务器和嵌入式系统(例如手机)。
Linux已在许多平台上取代了UNIX,并在大多数超级计算机上使用,包括前500名列表中的所有500个最强大的超级计算机- 到2017年,所有竞争对手都取代了所有竞争对手。 Linux也常用于其他小型能源效率的计算机,例如智能手机和智能手机等小型计算机。 Linux内核用于一些流行的分布,例如Red Hat , Debian , Ubuntu , Linux Mint和Google的Android , Chromeos和Chromiumos 。
微软Windows
Microsoft Windows是由Microsoft Corporation设计的专有操作系统家族,主要针对基于X86架构的计算机。截至2022年,其在所有平台上的全球市场份额约为30%,在台式机/笔记本电脑平台上,其市场份额约为75%。最新版本是Windows 11 。
Microsoft Windows于1985年首次发行,是一个在MS-DOS之上运行的操作环境,这是当时大多数Intel Architection个人计算机上运行的标准操作系统。 1995年, Windows 95发布了仅使用MS-DOS作为引导程序。为了向后兼容,Win9x可以运行Realone MS-DOS和16位Windows 3.x驱动程序。 Windows ME于2000年发行,是Win9x系列中的最后一个版本。后来的版本都基于Windows NT内核。 Windows的当前客户版本在IA-32 , X86-64和ARM微处理器上运行。过去,Windows NT支持其他体系结构。
Windows的服务器版本被广泛使用,但是,Windows在服务器上使用的用法并不像Windows与Linux和BSD竞争服务器市场份额那样广泛。
ReactOS是一个Windows-Alternative操作系统,正在根据Windows的原理开发,而无需使用Microsoft的任何代码。
其他
当时有许多工作系统很重要,但不再如此,例如Amigaos 。来自IBM和Microsoft的OS/2 ;经典Mac OS ,Apple Macos的非unix前体;贝斯; XTS-300 ; RISC OS ;形态; haiku ; Baremetal and Freemint 。一些仍在利基市场中使用,并继续开发为发烧友社区和专业应用程序的少数派平台。
IBM Z/Architeuction Mainframe计算机的Z/OS操作系统仍在使用和开发中,而OpenVMS (以前是DEC )仍在VMS Software Inc.中。 IBM IBM AS/400和IBM Power Systems中端计算机的IBM I操作系统仍在使用和开发中。
然而,其他操作系统几乎完全在学术界,操作系统教育或对操作系统概念进行研究。扮演两个角色的系统的一个典型示例是minix ,而例如奇异性纯粹用于研究。另一个例子是Niklaus Wirth , JürgGutknecht在EthZürich设计的Oberon系统,以及1980年代以前计算机系统研究所的一群学生。它主要用于Wirth小组的研究,教学和日常工作。
其他操作系统未能赢得大量市场份额,但引入了影响主流操作系统的创新,尤其是Bell Labs的计划9 。
成分
操作系统的组件都存在,以使计算机的不同部分共同起作用。所有用户软件都需要通过操作系统才能使用任何硬件,无论是像鼠标或键盘一样简单,还是像Internet组件一样复杂。
核心
借助固件和设备驱动程序,内核提供了对所有计算机硬件设备的最基本控制水平。它管理RAM中程序的内存访问,它确定哪些程序可以访问哪些硬件资源,设置或重置CPU的操作状态,以始终以最佳操作,并且它组织了长期非挥发性存储的数据使用磁盘,磁带,闪存等媒体上的文件系统。
程序执行
该操作系统提供了应用程序和计算机硬件之间的接口,因此应用程序只能通过遵守被编程到操作系统的规则和过程来与硬件进行交互。操作系统也是一组服务,可简化应用程序程序的开发和执行。执行应用程序程序通常涉及通过分配内存空间和其他资源的操作系统内核创建过程,该过程在多任务系统中建立了该过程的优先级,将程序二进制代码加载到内存中,并启动执行应用程序程序,然后与用户和硬件设备进行交互。但是,在某些系统中,应用程序可以要求操作系统在同一过程中执行另一个应用程序,无论是子例程还是在单独的线程中,例如,链接,链接和附加OS/360的设施和后继者。
中断
中断(也称为中止,异常,故障,信号或陷阱)为大多数操作系统对环境做出反应提供了一种有效的方法。中断导致中央处理单元(CPU)的控制流量从当前运行的程序变为中断处理程序,也称为中断服务例程(ISR)。中断服务例程可能会导致中央处理单元(CPU)具有上下文开关。计算机处理方式的详细信息因体系结构而异,以及中断服务例程的详细信息因操作系统而异。但是,几个中断功能很常见。体系结构和操作系统必须:
- 将控件转移到中断服务程序。
- 保存当前运行过程的状态。
- 在维修中断后恢复州。
软件中断
软件中断是事件发生的过程的消息。这与硬件中断形成鲜明对比 - 这是向中央处理单元(CPU)的消息,事件发生了。软件中断类似于硬件中断 - 与当前正在运行的过程相比有所变化。同样,硬件和软件中断执行中断服务例程。
通常会发生软件中断的事件。预计会发生时间切片,因此内核必须执行上下文开关。计算机程序可能会在几秒钟后将计时器设置为即可在太多数据导致算法花费太长时间的情况下关闭。
软件中断可能是错误条件,例如畸形的机器指令。但是,最常见的误差条件是按零划分并访问无效的内存地址。
用户可以将消息发送到内核以修改当前运行过程的行为。例如,在命令行环境中,按中断字符(通常为Control-C )可能会终止当前运行过程。
为了生成X86 CPU中断的软件中断,可以使用INT汇编语言指令。语法是INT X
, 在哪里X
是中断向量表的偏移数(以十六进制格式)。
讯号
为了在类似于Unix的操作系统中中断软件,kill(pid,signum)
系统呼叫将向另一个过程发送信号。pid
是接收过程的过程标识符。signum
是要发送的信号号(以助记符格式)。 (磨料的名称kill
之所以选择是因为早期实施仅终止了该过程。)
在类似于Unix的操作系统中,信号为过程提供了异步事件的发生。为了进行异步交流,需要中断。一个过程需要异步与另一个过程进行交流的原因解决了经典读者/作者问题的变化。作者从外壳接收管道,以将其输出发送到读者的输入流。命令行语法是alpha | bravo
.alpha
当准备就绪时,将写入管道,然后在等待队列中睡觉。bravo
然后将移动到现成的队列,并很快将从其输入流读取。内核将生成软件中断以协调管道。
信号可以分为7个类别。类别是:
- 当过程正常完成时。
- 当过程具有错误例外。
- 当一个过程用尽系统资源时。
- 当过程执行非法指令时。
- 当过程设置警报事件时。
- 从键盘中止过程时。
- 当一个过程具有调试的跟踪警报时。
硬件中断
输入/输出(I/O)设备比CPU慢。因此,如果CPU必须等待每个I/O完成,则将减慢计算机的速度。取而代之的是,计算机可以实现I/O完成的中断,避免需要进行轮询或忙碌等待。
有些计算机需要每个字符或单词中断,耗资大量CPU时间。直接内存访问(DMA)是一个体系结构功能,可允许设备绕过CPU并直接访问主内存。 (与体系结构分开,设备可以直接或通过总线直接从主内存进行直接访问。)
输入输出
中断驱动的I/O
当计算机用户在键盘上键入键时,通常该字符立即出现在屏幕上。同样,当用户移动鼠标时,光标会立即在屏幕上移动。每个击键和鼠标移动都会产生一个称为中断驱动的I/O的中断。当过程导致每个字符或单词传输的单词中断时,就会发生中断驱动的I/O。
直接内存访问
硬盘驱动器,固态驱动器和磁带驱动器等设备可以以足够高的速率传输数据,以中断每个字节或单词转移的CPU,并且使CPU传递设备和内存之间的字节或单词,需要太多的CPU时间。相反,数据是在设备和内存之间通过硬件(例如通道或直接内存访问控制器)传输的。只有在传输所有数据时才交付中断。
如果计算机程序执行系统调用以执行块I/O写操作,则系统调用可能会执行以下说明:
- 将CPU寄存器(包括程序计数器)的内容设置为过程控制块。
- 在设备状态表中创建一个条目。操作系统维护此表,以跟踪哪些过程正在等待哪些设备。表中的一个字段是过程控制块的内存地址。
- 将要发送到设备的所有字符放入内存缓冲区中。
- 将内存缓冲区的内存地址设置为预定的设备寄存器。
- 将缓冲区大小(整数)设置为另一个预定的寄存器。
- 执行机器指令开始写作。
- 执行上下文切换到就绪队列中的下一个过程。
在写作发生时,操作系统将在正常情况下将上下文切换到其他过程。当设备完成编写时,设备将通过断言中断请求中断当前运行的过程。该设备还将将整数放在数据总线上。接受中断请求后,操作系统将:
- 按下程序计数器的内容(寄存器),然后将状态寄存器寄存到呼叫堆栈上。
- 将其他寄存器的内容推向呼叫堆栈。 (或者,寄存器的内容可以放在系统表中。)
- 从数据总线中读取整数。整数是对矢量表的偏移。然后,向量表的说明将:
- 访问设备状态表。
- 提取过程控制块。
- 执行上下文切换回编写过程。
当写作过程的时间切片过期时,操作系统将:
- 从呼叫中弹出堆放状态寄存器和程序计数器以外的寄存器。
- 从呼叫中弹出状态寄存器。
- 从呼叫中弹出下一个指令的地址,然后将其设置回程序计数器。
随着程序计数器现在重置,中断的过程将恢复其时间切片。
模式
现代计算机支持多种操作模式。具有此功能的CPU至少提供两种模式:用户模式和主管模式。总体而言,主管模式操作允许对所有机器资源(包括所有MPU说明)进行无限制的访问。用户模式操作设置了使用指令使用的限制,并且通常不允许直接访问机器资源。 CPU也可能具有类似于用户模式的其他模式,例如虚拟模式以模拟较旧的处理器类型,例如32位ON上的16位处理器,或64位One上的32位处理器。
在电源或重置时,系统以主管模式开始。一旦加载并启动了操作系统内核,就可以建立用户模式和主管模式之间的边界(也称为内核模式)。
内核使用主管模式用于需要无限制访问硬件的低级任务,例如控制内存的访问方式,并与磁盘驱动器和视频显示设备等设备进行通信。相比之下,用户模式几乎用于其他所有内容。应用程序(例如文字处理器和数据库管理器)在用户模式下运行,并且只能通过将控制转换为内核来访问机器资源,该过程导致切换到主管模式。通常,通过执行软件中断指令(例如摩托罗拉68000)来实现控制对内核的转移TRAP
操作说明。该软件中断会导致处理器从用户模式转换为主管模式,并开始执行允许内核控制的代码。
在用户模式下,程序通常可以访问一组受限制的处理器指令,并且通常无法执行任何可能导致系统操作中断的说明。在主管模式下,通常会删除指令执行限制,从而使内核无限制地访问所有机器资源。
术语“用户模式资源”通常是指一个或多个CPU寄存器,其中包含不允许运行程序更改的信息。尝试更改这些资源的尝试通常会导致改用主管模式,在该模式下,操作系统可以处理该程序正在尝试的非法操作;例如,通过强行终止(“杀死”)程序。
内存管理
除其他外,多编程操作系统内核必须负责管理程序当前正在使用的所有系统内存。这样可以确保程序不会干扰其他程序已经使用的内存。由于程序时间共享,因此每个程序必须具有独立的内存访问权限。
许多早期操作系统使用的合作记忆管理假设所有程序都自愿使用内核的内存管理器,并且不会超过其分配的内存。这种内存管理系统几乎再也看不到了,因为程序通常包含可能导致它们超过其分配的内存的错误。如果程序失败,则可能导致一个或多个其他程序使用的内存受到影响或覆盖。恶意程序或病毒可能有目的地改变另一个程序的内存,或者可能影响操作系统本身的操作。通过合作的内存管理,仅需一个行为不当的程序即可崩溃系统。
内存保护使内核可以限制对计算机内存的访问。存在各种内存保护方法,包括内存分割和分页。所有方法都需要一定程度的硬件支持(例如80286 MMU),这些硬件在所有计算机中都不存在。
在分割和分页中,某些受保护的模式寄存器指定到CPU,其内存地址应允许运行程序访问什么。尝试访问其他地址的尝试触发了一个中断,这会导致CPU重新输入主管模式,从而使内核负责。简而,并报告错误。
Windows版本3.1通过我具有一定程度的内存保护,但是程序可以轻松规避使用它的需求。将产生一般的保护断层,表明发生了违反细分的情况;但是,系统通常会崩溃。
虚拟内存
使用虚拟内存寻址(例如分页或分段)意味着内核可以在任何给定时间选择每个程序可能使用的内存,从而允许操作系统使用相同的内存位置用于多个任务。
如果程序试图访问不在其当前可访问内存范围内但已分配给它的内存,则内核的中断方式与该程序超过其分配的内存相同。 (请参阅内存管理部分。)在Unix下,这种中断称为页面故障。
当内核检测到页面故障时,它通常会调整触发它的程序的虚拟内存范围,从而授予其访问所请求的内存。这使内核可支配的权力可以对特定应用程序的存储器存储何处,甚至是实际分配的。
在现代操作系统中,可以暂时存储在磁盘或其他媒体上,以使其他程序可用于使用该空间。这称为交换,因为多个程序可以使用内存区域,并且该内存区域包含的内容可以按需交换或交换。
“虚拟内存”为程序员或用户提供了这样一种看法,即计算机中的RAM比实际情况要大得多。
多任务
多任务是指在同一计算机上运行多个独立的计算机程序,从而使其同时执行任务。由于大多数计算机最多可以一次或两件事可以完成,因此通常是通过时间共享来完成的,这意味着每个程序都使用计算机的一部分执行时间。
操作系统内核包含一个调度程序,该程序确定每个过程的执行时间以及在哪个订单执行控制中应传递给程序。控件由内核传递到一个过程,该过程允许程序访问CPU和内存。后来,通过某种机制将控制返回到内核,以便可以允许另一个程序使用CPU。这种所谓的内核和应用程序之间的控制传递称为上下文开关。
管理时间分配计划的早期模型称为合作多任务处理。在此模型中,当控件由内核传递给程序时,它可能会在明确返回控件中的内核之前执行。这意味着恶意或故障程序可能不仅可以阻止任何其他程序使用CPU,而且如果进入无限循环,它可以悬挂整个系统。
现代操作系统将抢占率的概念扩展到设备驱动程序和内核代码,以便操作系统对内部运行时也具有先发制人的控制。
管理先发制人多任务的哲学是确保在CPU上定期给所有程序的哲学。这意味着所有程序都必须在允许在CPU上花费多少时间而不会中断的时间限制。为此,现代操作系统内核利用定时中断。受保护的模式计时器由内核设置,该计时器在指定时间经过后触发返回主管模式。 (请参阅上文中的中断和双模式操作。)
在许多单一用户操作系统上,合作多任务处理非常适合,因为家庭计算机通常运行了少数经过良好测试的程序。 Amigaos是一个例外,其第一个版本具有先发制人的多任务处理。 Windows NT是Microsoft Windows的第一个版本,该版本强制执行先发制人的多任务处理,但是直到Windows XP (由于Windows NT是针对专业人士),它才能到达家庭用户市场。
磁盘访问和文件系统
访问存储在磁盘上的数据是所有操作系统的主要功能。计算机使用文件将数据存储在磁盘上,这些文件以特定方式构成,以便更快地访问,更高的可靠性以及更好地利用驱动器的可用空间。将文件存储在磁盘上的特定方式称为文件系统,并使文件具有名称和属性。它还允许它们存储在排列在目录树中的目录或文件夹的层次结构中。
早期操作系统通常支持一种类型的磁盘驱动器,只有一种文件系统。早期文件系统的容量,速度以及可以使用的文件名和目录结构的种类有限。这些限制通常反映了他们设计的操作系统中的限制,因此操作系统很难支持多个文件系统。
尽管许多简单的操作系统支持访问存储系统的有限选项,但UNIX和Linux(Linux)的操作系统支持称为虚拟文件系统或VFS的技术。 UNIX之类的操作系统都支持各种各样的存储设备,无论其设计或文件系统如何,可以通过通用的应用程序编程接口(API)访问它们。这使得程序不需要对他们访问的设备有任何了解。 VFS允许操作系统通过使用特定的设备驱动程序和文件系统驱动程序,可以在其上安装了无限数量的设备,并提供无限数量的设备。
连接的存储设备(例如硬盘驱动器)可以通过设备驱动程序访问。设备驱动程序了解驱动器的特定语言,并能够将该语言转换为操作系统用于访问所有磁盘驱动器的标准语言。在UNIX上,这是块设备的语言。
当内核具有适当的设备驱动程序时,它可以以原始格式访问磁盘驱动器的内容,该格式可能包含一个或多个文件系统。文件系统驱动程序用于将用于访问每个特定文件系统的命令转换为操作系统可以用来与所有文件系统交谈的标准命令集。然后,程序可以根据层次结构中包含的文件名和目录/文件夹处理这些文件系统。他们可以创建,删除,打开和关闭文件,并收集有关它们的各种信息,包括访问权限,大小,自由空间以及创建和修改日期。
文件系统之间的各种差异使支持所有文件系统的支持困难。允许在文件名,案例灵敏度以及各种文件属性的存在中允许字符,这使每个文件系统的单个接口实现成为艰巨的任务。操作系统倾向于建议使用(并因此支持本地)文件系统专门为其设计;例如,Windows和Reiserfs中的NTF , Reiser4 , Ext3 , Ext4和Linux中的BTRF 。但是,实际上,通常可以使用第三方驱动程序来支持大多数通用操作系统中最广泛使用的文件系统(例如,NTFS在Linux通过NTFS-3G中可用,Ext2/3可用,Reiserfs和Reiserfs可用在Windows中通过第三方软件)。
在现代操作系统中,对文件系统的支持高度不同,尽管几乎所有操作系统都有支持和驱动程序的几乎所有常见的文件系统。操作系统在文件系统支持上以及可能安装的磁盘格式上有所不同。在Windows下,每个文件系统通常在某些媒体的应用中受到限制。例如,CD必须使用ISO 9660或UDF ,并且与Windows Vista一样,NTFS是可以安装操作系统的唯一文件系统。可以将Linux安装到许多类型的文件系统上。与其他操作系统不同,Linux和UNIX允许使用任何文件系统,无论其存储在哪个媒体中,无论是硬盘驱动器,光盘( CD , DVD ...),USB闪存驱动器,甚至包含在另一个文件系统上的文件中。
设备驱动程序
设备驱动程序是开发的一种特定类型的计算机软件类型,旨在与硬件设备进行交互。通常,这构成了与设备通信的接口,通过硬件连接到的特定计算机总线或通信子系统,向设备中的数据提供或接收数据,另一端是操作系统和操作系统和操作系统的必需接口软件应用程式.这是一个专门的与硬件有关的计算机程序,它也是操作系统的特定于操作系统,它可以使另一个程序(通常是操作系统软件包或应用程序软件软件包或计算机程序在操作系统内核下运行,与硬件设备透明地交互),并且通常提供对于任何必要的异步时间依赖时间的硬件接口需求所需的必要中断处理。
设备驱动程序的关键设计目标是抽象。每种硬件模型(即使在同一类设备中)都不同。制造商还发布了更新的模型,这些制造商提供了更可靠或更好的性能,并且这些较新的型号通常受到不同的控制。现在和将来,计算机及其操作系统都无法知道如何控制每个设备。为了解决此问题,操作系统本质上决定了如何控制每种类型的设备。然后,设备驱动程序的功能是将这些操作系统强制性函数调用转换为设备特定呼叫。从理论上讲,如果有合适的驱动程序可用,以新的方式控制的新设备应正确运行。该新驱动程序可确保从操作系统的角度来看,该设备似乎像往常一样运行。
在Vista之前的Windows版本和2.6之前的Linux版本下,所有驱动程序的执行都是合作的,这意味着,如果驱动程序进入无限环路,则会冻结系统。这些操作系统的最新修订结合了内核抢先,其中内核会中断驾驶员以赋予其任务,然后将自己与流程分开,直到收到设备驱动程序的响应,或者给予更多任务。
联网
当前,大多数操作系统都支持各种使用它们的网络协议,硬件和应用程序。这意味着运行不同操作系统的计算机可以使用有线或无线连接来共享计算,文件,打印机和扫描仪等资源的通用网络。网络本质上可以允许计算机的操作系统访问远程计算机的资源,以支持与这些资源直接连接到本地计算机相同的功能。这包括从简单通信到使用网络文件系统,甚至共享其他计算机的图形或声音硬件的所有内容。某些网络服务允许透明地访问计算机的资源,例如允许网络用户直接访问计算机命令行接口的SSH 。
客户端/服务器网络允许在称为客户端的计算机上的程序通过网络连接到另一台计算机,称为服务器。服务器向其他网络计算机和用户提供(或主机)各种服务。这些服务通常是通过服务器IP地址以外的端口或编号访问点提供的。每个端口号通常与一个运行程序的最多关联,该程序负责处理该端口的请求。作为用户程序的守护程序可以通过将请求传递给操作系统内核来访问该计算机的本地硬件资源。
许多操作系统也支持一个或多个供应商特定或开放的网络协议,例如, IBM系统上的SNA ,数字设备公司的系统上的DECNET以及Windows上的Microsoft特定协议( SMB )。也可以支持针对特定任务的特定协议,例如用于文件访问的NFS 。像ESOUND或ESD这样的协议可以轻松地通过网络扩展,以在远程系统的声音硬件上提供本地应用程序的声音。
安全
安全的计算机取决于许多技术正常工作。现代操作系统可访问许多资源,这些资源可用于在系统上运行的软件以及通过内核等外部设备(例如网络)。
操作系统必须能够区分应允许处理的请求,以及其他不应处理的请求。虽然某些系统可以简单地区分“特权”和“非特权”,但系统通常具有请求者身份的形式,例如用户名。为了建立身份,可能会有一个认证过程。通常必须引用用户名,并且每个用户名可能都有密码。可以使用其他身份验证方法,例如磁卡或生物识别数据。在某些情况下,尤其是网络的连接,可能根本无法访问资源(例如通过网络共享读取文件)。请求者身份的概念也涵盖了授权;请求者登录到系统可访问的特定服务和资源与请求者的用户帐户或请求者属于的各种用户组相关。
除了允许或禁止安全模型外,具有高度安全性的系统还提供审核选项。这些将允许跟踪访问资源的请求(例如,“谁一直在读该文件?”)。仅当必须通过中断操作系统内核执行所有可能的有害请求时,才有可能进行内部安全性或已运行程序的安全性。如果程序可以直接访问硬件和资源,则无法确保它们。
外部安全性涉及来自计算机外部的请求,例如连接的控制台处的登录或某种网络连接。外部请求通常通过设备驱动程序传递到操作系统的内核,可以将它们传递到应用程序上或直接执行。操作系统的安全性长期以来一直是一个关注的问题,因为在商业和军事性质的计算机上拥有高度敏感的数据。美国政府国防部(DOD)创建了信任的计算机系统评估标准(TCSEC),该标准是设定评估安全有效性的基本要求的标准。这对于操作系统制造商来说至关重要,因为TCSEC用于评估,分类和选择被考虑用于处理,存储和检索敏感或分类信息的受信任操作系统。
网络服务包括诸如文件共享,打印服务,电子邮件,网站和文件传输协议(FTP)之类的产品,其中大多数可能会损害安全性。在安全的前线是硬件设备,称为防火墙或入侵检测/预防系统。在操作系统级别上,有许多软件防火墙以及入侵检测/预防系统。大多数现代操作系统都包括软件防火墙,默认情况下启用。可以配置软件防火墙以允许或拒绝在操作系统上运行的服务或应用程序的网络流量。因此,人们可以安装和运行不安全的服务,例如Telnet或FTP,而不必受到安全漏洞的威胁,因为防火墙会拒绝所有试图连接到该端口上的服务的流量。
一种替代策略,也是不符合Popek和Goldberg虚拟化要求的系统中唯一可用的沙盒策略,是操作系统不作为本机代码运行用户程序,而是模拟处理器或为P提供主机- 基于代码的系统,例如Java。
内部安全性与多用户系统尤其重要。它允许系统的每个用户拥有其他用户无法篡改或阅读的私有文件。如果要进行审核,内部安全也至关重要,因为程序可能会绕过操作系统,包括绕过审计。
使用者介面
每个由个人操作的计算机都需要用户界面。用户界面通常称为外壳,如果要支持人类互动,则至关重要。用户界面查看目录结构并从操作系统请求服务,该服务将从输入硬件设备(例如键盘,鼠标或信用卡读取器)中获取数据,并请求操作系统服务以显示提示,状态消息等上的输出硬件设备,例如视频监视器或打印机。用户界面的两种最常见形式在历史上是命令行界面,其中计算机命令按在线键入线,以及存在视觉环境(最常见的是wimp )的图形用户界面。
图形用户界面
大多数现代计算机系统都支持图形用户界面(GUI),并且通常包括它们。在某些计算机系统(例如经典Mac OS的原始实现)中,GUI已集成到内核中。
从技术上讲,图形用户界面不是操作系统服务,但是将对一个人的支持纳入操作系统内核可以通过减少GUI执行其输出功能所需的上下文开关的数量来使GUI更快地响应。其他操作系统是模块化的,将图形子系统与内核和操作系统分开。在1980年代,UNIX,VM和许多其他人拥有这种方式建立的操作系统。 Linux和MacOS也是这样构建的。 Microsoft Windows的现代版本(例如Windows Vista)实现了主要在用户空间中的图形子系统;但是, Windows NT 4.0和Windows Server 2003之间版本的图形绘制例程主要存在于内核空间中。 Windows 9X在接口和内核之间几乎没有区别。
许多计算机操作系统允许用户安装或创建所需的任何用户界面。 X窗口系统与GNOME或KDE等离子体5结合使用,是在大多数UNIX和UNIX样(BSD,Linux,Solaris)系统上常见的设置。已经为Microsoft Windows发布了许多Windows Shell更换,这些Windows提供了随附的Windows Shell的替代方案,但Shell本身不能与Windows分开。
随着时间的流逝,许多基于Unix的GUI都存在,最多源自X11。 Unix(HP,IBM,Sun)的各个供应商之间的竞争导致了很多分散,尽管在1990年代进行了标准化的努力,以使Cose和CDE出于各种原因失败,并最终因广泛采用GNOME和K桌面环境而黯然失色。 。在免费提供软件的工具包和桌面环境之前,主题是普遍的工具包/桌面组合(并且是开发CDE的基础)。
图形用户界面会随着时间的推移而发展。例如,Windows几乎每次发布新的主要版本Windows都会修改其用户界面,并且Mac OS GUI随着1999年的Mac OS X的引入而发生了巨大变化。
实时操作系统
实时操作系统(RTOS)是一种用于具有固定截止日期(实时计算)的应用程序的操作系统。这些应用包括一些小型嵌入式系统,汽车发动机控制器,工业机器人,航天器,工业控制和一些大规模计算系统。
大规模实时操作系统的一个早期示例是美国航空公司和IBM为SABER航空公司预订系统开发的交易处理设施。
固定截止日期的嵌入式系统使用实时操作系统,例如VXWORKS , PIKEOS , ECOS , QNX , MONTAVISTA Linux和RTLinux 。 Windows CE是一种实时操作系统,可与桌面Windows共享类似的API,但没有共享桌面Windows的代码库。 Symbian OS还具有从8.0B版本开始的RTOS内核(EKA2)。
一些嵌入式系统使用棕榈OS , BSD和Linux等操作系统,尽管此类操作系统不支持实时计算。
操作系统开发是一种爱好
爱好操作系统可能被归类为尚未直接从现有操作系统派生的代码,并且几乎没有用户和活跃的开发人员。
在某些情况下,Hobby Development支持“自制”计算设备,例如,由6502微处理器供电的简单单板计算机。或者,开发可能是用于广泛使用的体系结构。操作系统的开发可能来自全新的概念,也可以通过对现有操作系统进行建模来开始。无论哪种情况,业余爱好者都是她/他自己的开发人员,或者可能与一个喜欢兴趣的小组相互互动。
操作系统和可移植性的多样性
如果将应用程序写在特定操作系统上,并且已移植到另一个操作系统,则该应用程序所需的功能可以通过该OS(函数的名称,参数的含义等)以不同的方式实现适应,更改或以其他方式维护。
可以通过针对Java或QT等软件平台编写应用程序来避免支持操作系统多样性的成本。这些抽像已经体现了适应特定操作系统及其系统库的成本。
另一种方法是使操作系统供应商采用标准。例如, POSIX和OS抽象层提供了降低移植成本的共同点。