计算机操作系统体系结构

我是荔园微风,作为一名在IT界整整25年的老兵,今天给大家讲讲操作系统。

当今的操作系统趋向于越来越复杂,因为它们提供许多服务,并支持各种硬件和软件资源(请参见“操作系统思想:尽量保持简单”,以及“系统设计师与系统工程师”)。通过将操作系统的组件组织起来,并指定每一个组件的执行权限,操作系统体系结构能够帮助设计人员管理这些复杂性。在单内核设计中,操作系统的每一个组件都包含在内核中;在微内核设计中,只有必要的组件包含在内核中。(请参见“操作系统思想:体系结构”)。

操作系统思想:
尽量保持简单(Keep It  Simple,KIS)

复杂系统在设计、实现、测试、调试和维护等方面的费用都很昂贵。操作系统设计人员经常选择最简单的几种方法解决某一特定问题。尽管有时采用更复杂的方法可能会具有更好的性能,或者因为有一些其他改进值得采用这样一种方法。这种折中在计算方面是很普遍的。

对数组进行简单的线性搜索在程序中不算什么,但是与更精确和更复杂的二进制搜索相比,其运行速度要慢一些。树形数据结构比数组操作起来更复杂,但是它可以更容易、更快速地完成某些类型的插入和删除。

一般情况下,在解决操作系统问题和开发资源管理策略时,我们会交替考虑一些方法。当我们阅读这些讨论时,就会明白在简单性和复杂性之间的权衡折衷。当我们阅读这些解决方案时,可能倾向于喜欢某些方法。我们将来所使用的系统可能要求采用不同的方法。我们的原则是对普遍采用的一些方法从正反两方面列出其优缺点,帮助大家亲自做出业界最好的判断。

系统设计师与系统工程师

如果我们跻身于操作系统开发领域,并具有较高的地位,那么就可能会拥有一个头衔,例如系统设计师或系统工程师。几年前,在一次会议上,一名软件同行的专家作为来宾在会上进行演讲,他被介绍为系统设计师。他说道:“你们可能想知道系统设计师与系统工程师有什么区别”。

他用建筑做类比,谦逊地对这种差别做了解释,“当一名工程师建造一座大楼时,尽管它的构造非常棒,但却太难看,人们将其拆毁了;当一名设计师建造一座大楼时,虽然它的外观非常漂亮,但它却倒塌了!”

对操作系统设计者的启示:我们需要将体系结构和工程两方面综合起来考虑,这样才能确保系统既有好的构造,又有优美的外观。相比之下,前者更为重要。

操作系统思想:
体系结构

就像建筑师使用不同的方法设计大楼一样,操作系统设计人员也采用不同的方法来设计操作系统体系结构。有时,这些方法并不混杂使用,整个系统只使用一种体系结构方法。有时则混合使用这些方法,可以取几种体系结构风格的优点。设计人员所选择的方法在操作系统初始实现及演化中起着举足轻重的作用。以后进一步开发时再要改变采用的方法就会越来越困难,因此,在系统开发早期选择一个合理的方法是很重要的。一般地说,第一次就正确建造一座大楼比起造好之后再做修改要容易得多。

在软件系统中,比如操作系统,最常采用的体系结构方法之一是分层。采用这种方法,将软件分成模块,这些模块称为层,每一层都完成某些任务。每一层都调用它下一层所提供的服务,而这一层的实现却对它上面的一层隐藏起来。分层方法同时具有模块性和信息隐藏的软件工程技术的优点,为构建高质量的系统奠定了坚实的基础。整本书中都要讨论分层软件方法,我们先从计算机先驱 Dijkstra 曾经研制的THE系统谈起,接下来,分别介绍  Linux和 Windows XP 操作系统是如何使用分层方法的。

单内核体系结构

单内核操作系统(monolithic operating system)是最早出现的也是最常用的操作系统体系结构。在这种结构中,操作系统的每一个组件都包含在内核中,并能够直接与其他任何组件进行通信(即简单地通过函数调用来实现通信)。

一般情况下,内核执行可以不受限制地访问计算机系统。OS/360,VMS 和Linux 等操作系统明显地具有单内核操作系统的特性。由于组件之间直接进行通信,所以单内核操作系统效率很高。因为单内核操作系统将组件集合在一起,所以无论如何,要查出bug和其他错误的来源都不是一件容易的事。而且,由于所有代码的执行都可以不受限制地访问系统,所以单内核系统尤其容易受到错误代码或者恶意代码的破坏。

分层体系结构

随着操作系统变得越来越大,越来越复杂,完全使用单内核设计就不太适用了。对操作系统进行分层可以解决这一问题,这种方法将执行相似功能的那些组件分组成层。每一层都只能与其相邻的上层或相邻的下层进行通信。较低的层使用一个将其实现隐藏起来的接口为较高的层提供服务。

分层的操作系统比单内核操作系统具有更好的模块性,因为对每一层的实现进行修改时,都不需要修改其他层。模块化系统具有整个系统都可以重用的自含式组件。每一个组件都将其完成作业的具体方式隐藏起来,并提供了一个标准接口,其他组件可以使用此接口请求这一组件的服务。模块性使操作系统具有结构化和一致性。

但是,采用分层方法,一个用户进程的请求可能需要传过许多层才能得到服务;因为必须调用额外的方法,才能将数据从一个层传递到邻接的层,所以与单内核操作系统相比,其性能会有所降低。在单内核操作系统中,要为与此相似的请求提供服务,可能只需要执行一次调用。另外,由于所有的层都可以不受限制地访问系统,所以分层的内核也容易遭到错误代码或恶意代码的破坏。THE操作系统是分层式操作系统的一个早期范例。107今天的许多操作系统,包括 Windows XP 和 Linux,都在一定程度上实施了分层。

微内核体系结构

微内核操作系统(microkernel operating system)体系结构只提供少量的服务,力图使内核较小,且可伸缩。一般情况下,这些服务包括底层内存管理、进程间通信以及基本的进程同步(进程同步使进程能够协作完成任务)。在微内核设计中,大多数操作系统组件(例如,进程管理、网络连接、文件系统交互和设备管理)在内核的外部执行,它们具有较低的权限级别。

微内核展示了高度的模块性,这样的系统可扩展、可移植和可伸缩。而且,因为微内核的执行并不依赖于每一个组件,所以如果一个或多个组件发生故障,也不会引起操作系统故障。但是,这种模块性的获得是以增加模块间的通信级数为代价的,这就降低了系统性能。虽然当今流行的操作系统很少有完全基于微内核设计的系统,但是,Linux和Windows XP等操作系统都包含模块组件。

网络操作系统和分布式操作系统

电信技术的发展深刻地影响了操作系统。网络操作系统(network operating system)使其进程能够访问驻留在网络上的其他计算机上的资源(例如,文件)。许多网络操作系统和分布式操作系统的结构经常是基于客户机/服务器模型的。在这种网络中,客户机借助于合适的网络协议请求资源,例如,文件和处理器时间。操作系统设计人员在设计这样的网络时,必须仔细地考虑如何管理数据和计算机之间的通信。

有些操作系统具有明显的网络操作系统的特性。在网络环境中,一个进程可以在创建此进程的计算机上执行,或者也可以在网络中的其他计算机上执行。在有些网络操作系统中,用户可以精确地指定他们的进程在哪里运行;在另外一些网络操作系统中,则由操作系统确定进程在哪里执行。例如,系统可能确定,如果一个进程在具有轻负载的计算机上执行,则会有更高的效率。

网络文件系统是网络操作系统的一个重要组件。在最低层次上,用户获得另一台机器上的资源是通过显式地连接到那台机器并检索文件获得的。较高层的网络文件系统使用户能够访问远程文件,就好像这些文件在本地系统上一样。网络文件系统的范例包括 Sun公司的网络文件系统(Network File System,NFS)以及卡内基·梅隆大学(CMU)的 Andrew 和Coda 文件系统。

分布式操作系统(distributed operating system)是一个单一的操作系统,它管理多个计算机系统上的资源。分布式系统(distributed system)给人一种假像,将多台计算机视为单一的一台功能强大的计算机,这样一个进程可以访问所有的系统资源,而与进程在分布式系统的计算机网络内的位置无关。分布式操作系统常常很难实现,并且需要复杂的算法才能使进程进行通信和共享数据。分布式操作系统的范例有麻省理工学院(MIT)的Chord 操作系统和阿姆斯特丹自由大学(Vrije Universiteit in Amsterdam)的Amoeba 操作系统。

作者简介:荔园微风,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/17842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

267 基于matlab的信号处理GUI人机交互

基于matlab的信号处理GUI人机交互,利用GUI功能完成包括振幅调制AM(Amplitude Modulation),双边带调幅信号DSB(double sideband),单边带信号SSB(single sideband )&#x…

《TCP/IP网络编程》(第十一章)进程间通信

进程间通信意味着两个不同的进程间可以交换数据,它使得不同的进程能够协同工作,实现复杂的系统功能。 1.通过管道实现进程间通信 下图是基于 管道(PIPE) 的进程间通信结构模型 管道不属于进程的资源,属于操作系统的资…

数字化工厂怎么收集,处理数据?

数字化工厂的数据收集与处理 数字化工厂是现代化工厂,利用数字技术和数据分析提高效率和优化流程。数据分析作为数字化工厂的核心技术,对数据的获取与处理至关重要。在数字化工厂中,数据的来源包括企业内部信息系统、物联网信息以及外部信息&…

美光EMMC芯片丝印型号查询 8LK17/D9PSK, OXA17/JY997

问题说明 最近在使用美光EMMC的时候,发现通过芯片丝印查询不到 芯片的规格说明书; 经过查阅资料,发现美光的EMMC芯片 “由于空间限制,FBGA 封装组件具有与部件号不同的缩写部件标记”,需要通过官网查询丝印的FBGA cod…

Autosar Dcm配置-特定NRC实现方式-基于ETAS软件

文章目录 前言工具配置代码编写总结 前言 项目开发过程中,诊断服务一般客户需求或系统需求都会有特定NRC(一般为NRC22-条件不满足),也就会有特定的条件,需要手动加代码实现。本文介绍ETAS工具中配置的接口及简单实现。 工具配置 对于每一个…

特朗普竞选带火PoliFi,以Bitget为例

以特朗普系列Meme币为代表的政治金融(PoliFi)概念币市场正在掀起热潮,前美国总统特朗普(Donald Trump)在本月稍早公开力挺加密货币,接着又在周二宣布接受比特币、以太币、SOL、USDC、DOGE…等政治献金,让相关通证高涨。 据CoinGecko数据&…

鸿蒙开发接口图形图像:【@ohos.display (屏幕属性)】

屏幕属性 屏幕属性提供管理显示设备的一些基础能力,包括获取默认显示设备的信息,获取所有显示设备的信息以及监听显示设备的插拔行为。 说明: 开发前请熟悉鸿蒙开发指导文档: gitee.com/li-shizhen-skin/harmony-os/blob/master/…

【C++】继承(二)深入理解继承:派生类默认成员函数与友元、静态成员的奥秘

目录 派生类的默认成员函数①派生类的构造函数②派生类的拷贝构造函数③派生类的赋值构造④派生类的析构函数 继承与友元继承与静态成员 前言 我们在上一章讲解了: 继承三部曲,本篇基于上次的基础继续深入了解继承的相关知识,欢迎大家和我一起学习继承 派…

探索Python中的随机数生成与统计分析

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、随机数的魅力与实用性 1. 随机数生成基础 2. 批量生成随机数 二、随机数的高级应用&a…

windows中每日定时执行python脚本,解决问题

由于需要一个每天定时执行的任务,所以需要定时启动,网上看了很多方法,感觉不能在python脚本种写个while true 定时执行,占资源不说还不可靠。 最后考虑通过系统工具定时启动,发现linux中有crontab,windows…

前端 CSS 经典:水波进度样式

前言&#xff1a;简单实现水波进度样式&#xff0c;简单好看。 效果图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" cont…

git:Unable to negotiate问题解决

场景说明&#xff1a; 安装了Gitblit(自架的代码仓库服务)发现部分电脑无法推代码&#xff0c;报错误如下&#xff1a; Unable to negotiate with **** port 22: no matching host key type found. Their offer: ssh-rsa 并排队了账户权限问题。 解决方案&#xff1a; 1.打开问…

5.28 学习总结

一.CSS学习(一) 一、CSS简介 1、什么是CSS CSS&#xff1a;Cascading Style Sheet 层叠样式表是一组样式设置的规则&#xff0c;用于控制页面的外观样式 2、为什么使用CSS 实现内容与样式的分离&#xff0c;便于团队开发样式复用&#xff0c;便于网站的后期维护页面的精确…

iptables练习题

目录 练习题1. 显示当前的iptables规则2. 允许所有来自192.168.1.0/24的TCP流量到本机的22端口&#xff08;SSH&#xff09;3. 禁止所有来自10.0.0.0/8的ICMP流量4. 允许所有出站流量5. 拒绝所有来自外部的HTTP流量&#xff08;80端口&#xff0c;tcp协议&#xff09;6. 删除IN…

数据恢复与取证软件: WinHex 与 X-Ways Forensics 不同许可证功能区别

天津鸿萌科贸发展有限公司从事数据安全业务20余年&#xff0c;在数据恢复、数据取证、数据备份等领域有丰富的案例经验、专业技术及良好的行业口碑。同时&#xff0c;公司面向取证机构及数据恢复公司&#xff0c;提供数据恢复实验室建设方案&#xff0c;包含数据恢复硬件设备及…

期货学习笔记-斐波那契学习1

斐波那契数列介绍 斐波那契数列是1、1、2、3、5、8、13、21、34、55、89…据说这是数学家莱昂纳多 斐波那契研究兔子繁殖时发现的一个神奇数列&#xff0c;似乎大自然在按照这个数列进行演化&#xff0c;一个斐波那契数字是由该数列相邻的前两个数字相加得到的 在斐波那契交易…

基于STM32实现智能交通灯控制系统

目录 引言环境准备智能交通灯控制系统基础代码示例&#xff1a;实现智能交通灯控制系统 GPIO控制交通灯定时器配置与使用红外传感器检测车辆用户界面与显示应用场景&#xff1a;城市交通管理与自动化控制问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在STM32嵌…

14.Redis之JAVASpring客户端

1.引入依赖 此时就会引入操作 redis 的依赖了~~ 2.yml配置 spring:redis:host: 127.0.0.1port: 8888 3.准备 前面使用 jedis,是通过 Jedis 对象里的各种方法来操作 redis 的.此处Spring 中则是通过 StringRedisTemplate 来操作 redis .最原始提供的类是 RedisTemplateStrin…

洛谷 P1346电车

题目来源于&#xff1a;洛谷 解题思路&#xff1a; 可以把一个路口看作一张图中的一个点&#xff0c;轨道是图中的边&#xff08;注意&#xff1a;这是有向图&#xff09;&#xff0c;每一条边的权值就是这个边所联通的点是否需要按按钮&#xff08;需要按按钮就是1&#xff0…

关于NLTK

一、NLTK简介 下图来自NLTK官网&#xff1a;https://www.nltk.org/index.html NLTK&#xff0c;全称为Natural Language Toolkit&#xff0c;是一个用于处理和分析自然语言文本的Python库。它提供了一系列丰富的工具和资源&#xff0c;包括词汇资源&#xff08;如WordNet&am…