计算机操作系统体系结构

我是荔园微风,作为一名在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深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Dynadot API调整一览

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

DISCO: Disentangled Control for Realistic Human Dance Generation

NTU&Microsoft CVPR24https://github.com/Wangt-CN/DisCo 问题引入 提高human motion transfer模型的泛化性;给出 f , g f,g f,g作为参考图片的前背景,然后给出单个pose p p t pp_t ppt​或者pose序列 p { p 1 , p 2 , ⋯ , p T } p \{p_1,p_2…

撤销最近一次的提交,使用git revert 和 git reset的区别

文章目录 工作区 暂存区 本地仓库 远程仓库需求:已推送到远程仓库,想要撤销操作git revert (添加新的提交来“反做”之前的更改,云端会残留上次的提交记录)git reset(相当于覆盖上次的提交)1.--…

HIGT:用于全景切片图像分析的层次交互图-Transformer

文章目录 HIGT: Hierarchical Interaction Graph-Transformer for Whole Slide Image Analysis摘要方法实验结果 HIGT: Hierarchical Interaction Graph-Transformer for Whole Slide Image Analysis 摘要 在计算病理学领域,全景切片图像(WSIs&#xf…

JavaEE-Spring Controller(服务器控制以及Controller的实现和配置)

Spring Controller 服务器控制 响应架构 Spring Boot 内集成了 Tomcat 服务器,也可以外接 Tomcat 服务器。通过控制层接收浏览器的 URL 请求进行操作并返回数据。 底层和浏览器的信息交互仍旧由 servlet 完成,服务器整体架构如下: Server&…

调整表格大小

方法一:使用鼠标拖动表格边框或右下角的调整控点 在Word文档中,选中要缩小的表格,将鼠标指针放在表格的边框线上,直到指针变成双箭头的形状。 按住鼠标左键,拖动边框线,调整表格的宽度或高度。如果同时按住…

01 一文理解,Prometheus详细介绍

01 一文理解,Prometheus详细介绍 介绍 大家好,我是秋意零。 Prometheus 是一个开源的系统监控和报警工具包,最初由SoundCloud开发,并在2012年作为开源项目发布。Prometheus 目前由Cloud Native Computing Foundation&#xff08…

python爬虫之pandas库——数据清洗

安装pandas库 pip install pandas pandas库操作文件 已知在本地桌面有一名为Python开发岗位的csv文件(如果是excel文件可以做简单修改即可,道理是通用的) 打开文件: 打开文件并查看文件内容 from pandas import DataFrame import pandas as pd data_c…

AIGC 010-CLIP第一个文本和图像对齐的大模型!

AIGC 010-CLIP第一个文本和图像对齐的大模型! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 不客气的说CLIP和扩散模型的成功让计算式视觉领域几乎所有工作都重新做了一遍。 CLIP(对比语言-图像预训练)论文提出了一种新的对比学习方法&a…

【C++课程学习】:二叉树的基本函数实现

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 🍉二叉树的结构类型: 🍉1.创建二叉树函数(根据数组&am…

如何将云服务器上操作系统由centos切换为ubuntu

本文将介绍如何将我们购买的云服务器上之前装的centos切换为ubuntu,云服务器以华为云为例,要切换的ubuntu版本为ubuntu20.04。 参考官方文档:切换操作系统_弹性云服务器 ECS (huaweicloud.com) 首先打开华为云官网,登录后点击右…

机器学习(五) -- 监督学习(5) -- 线性回归1

系列文章目录及链接 上篇:机器学习(五) -- 监督学习(4) -- 集成学习方法 - 随机森林 下篇:机器学习(五) -- 监督学习(5) -- 线性回归2 前言 tips&#xff1…

树莓派指令

1.常用指令 2.在终端窗口编辑文本文件 2.1nano编辑器 在文本里ctrlG就可以查看更多的快捷按键 2.2vi编辑器 进入默认为命令模式

Spring-Cloud-OpenFeign源码解析-04-调用流程分析

在Spring-Cloud-OpenFeign源码解析-03-FeignClientFactoryBean分析到,通过Autowired或者Resource注入FeignClient实例的时候,实际上返回的是JDK动态代理对象,具体的实现逻辑在InvocationHandler的invoke方法中 回看ReflectiveFeign.newInsta…

怎么简单的把图片缩小?图片在线改大小的方法

在日常工作中经常需要在网上上传图片,但是一般网上不同的平台对上传的图片大小和尺寸都会有限定的要求,不符合要求无法正常上传使用。所以当遇到图片太大的问题时,该如何快速修改图片大小,有很多的小伙伴都很关注这个问题的解决方…

macOS上用Qt creator编译并跑shotcut

1 简介 Shotcut是一个开源的跨平台的视频编辑软件,支持WIN/MACOS/LINUX等平台,由于该项目的编译较为麻烦,踩坑几许,因此写此文章记录完整编译构建过程,后续按此法编译,可减少走弯路,提高生产力。…

Springboot项目打包:将依赖的jar包输出到指定目录

场景 公司要对springboot项目依赖的jar包进行升级,但是遇到一个问题,项目打包之后,没办法看到他里面依赖的jar包,版本到底是不是升上去了,没办法看到。 下面是项目打的jar包 我们通过反编译工具jdgui,来…

Compose Button移除水波纹效果

一、背景 在使用Compose实现Button按钮时,设计要求移除按钮的水波纹效果,只保留按压效果,经查Compose1.4.3版本中,并没有直接移除水波纹的能力 二、遇到问题 经过多次尝试,使用Compose的Button组件始终无法实现目标效…

SpringBoot基础篇

1:parent 目的:减少依赖配置 开发SpringBoot程序要继承spring-boot-starter-parentspring-boot-starter-parent中定义了若干个依赖管理继承parent模块可以避免多个依赖使用相同技术出现依赖版本冲突继承parent的形式也可以采用引入依赖的i形式实现效果…

《java数据结构》--栈的详解

一.栈的认识 栈是一种不同于链表和顺序表的储存数据结构,它对存储数据和取出数据有着特殊的要求🤔。 首先栈只能从一端存储数据,也就是从一端进,还从这一端出这也是栈最大的特点,这也导致在栈中存取数据都必须遵循先…