分布式系统概念和设计——Mach实例研究

news2024/10/6 4:05:31

分布式系统概念和设计

Mach实例研究

Mach主要抽象概述

  • 任务
    • 一个Mach任务是一个执行环境
    • 主要包括一个被保护的地址空间和一个内存管理的权能集合
    • 这些权能主要用于访问端口
  • 线程
    • 任务可以包含多个线程
    • 在共享内存的多处理器中,属于同一个任务的线程可以在不同的处理器上并行执行
  • 端口
    • 在Mach中,一个端口是一个具有相关消息队列的单点单方向通道
    • Mach程序员不能直接访问这些端口,端口也不是任务的一部分
    • 程序员可以获得端口权限处理权柄,这里权能是读取和写入端口数据的能力
  • 端口集
    • 一个端口集是属于同一任务的接收权限的端口集,可以用于从端口集中任意端口接收消息。
    • 和端口组不同,端口组是广播消息的目的地集合
  • 消息
    • Mach中的消息除了包含数据外,还包含端口权限
    • 内核采用存储管理技术在任务间高效的传输消息数据
  • 设备
    • 向文件服务器这样运行在用户级的服务器一定要访问设备
    • 内核为底层设备提供了底层接口
  • 内存对象
    • 在一个Mach任务的虚拟地址空间中,没一个区域都对应一个内存对象
    • 这种内存对象通常是在内存外实现的
    • 当时当内核执行虚拟内存分页时,就会访问内存对象,内核外的内存对象
    • 一个内存对象是一个抽象数据类型的实例,这一抽象数据类型包含了获取和存储
    • 当线程试图引用相应区域的地址而引发内存页缺失时就需要访问数据的操作
  • 内存缓存对象
    • 对于每一个被映射的内存对象,系统中存在一个内核管理的对象
    • 这一对象包含对存在于主存中相应区域的存储页的缓存,称为内存缓存对象
    • 它支持实现内存对象的外部分页器所需要的操作

端口命名和保护

  • Mach用端口来区别每个资源
  • 访问资源的请求会通过消息传递到某个端口上
  • Mach会让服务器管理很多端口
  • 如何保护资源不被非法访问的问题等同于如何保护响应的端口不被非法的读写数据
  • 在Mach中通过内核控制对端口权能的获取来保护端口的同时也通过网络服务器控制从网络控制信息的到达保护
  • 端口权能:
    • 发送权能:发送端口数据权限
    • 发送一次权限:内核收到发送消息后回收该权限
    • 接收权限:允许进程从某端口接收数据的权限

在这里插入图片描述

  • Mach的命名和保护方案使系统可以通过给定的用户级标识快速访问本地的消息队列
  • 缺点:
    • 当任务之间以消息的形式传递权能的时候,内核的开销会加大
    • 至少在接收方的任务命名空间及其核心表空间内,系统必须为发送权限分配一个本地的名字
    • 从安全角度考虑,网络服务器传输的端口权限信息必须经过加密。这样才能防止窃听方式的攻击

任务和线程

  • 一个任务是一个执行环境,任务自己不能自动执行任何动作。只有任务中的线程启动任务执行;
  • 当我们说任务执行某动作,我们说的是任务中的线程执行了某个动作;
  • 与任务直接相关的资源是任务的地址空间,线程,端口权限,端口集以及用于查找端口权限和端口集的本地名字即可
创建一个新任务

端口的自举

新任务的空间要么空

线程有子任务创建

调用内核操作

当任务被创建后,系统就赋予了一个内核端口

系统调用:

  • 直接内核陷入实现
  • 通过将消息传递到内核的端口上来实现
    • 优点,允许远程任务和线程像本地操作一样
    • 是网络透明的
异常处理

除了内核端口外,任务和线程还可以拥有一个异常端口

当异常发生时,内核向异常端口发送异常信息来报告该异常

接收这消息的线程可能试图解决这一问题(例如当地址空间越界,可以增大线程栈)

如果内核找到一个异常端口并且接收到已经成功处理应答,就会重新启动引发异常的线程,否则将终止。

任务和线程管理

在内核接口中有大量(过程,processes)的关于任务和线程的创建和管理

过程需要指导端口权限,并且消息传递系统能调度来请求目标内核的操作

系统可以分别这只调度优先级,线程和任务可以被挂起,解挂,终止

并且系统可以在外部设置,读出,或修改线程的执行状态

通信模型

消息

消息包含一个固定大小的头部,后面是一个变长的数据项列表

在这里插入图片描述

端口

一个Mach端口包含一个消息队列,具有接收权限的任务可以动态的设置消息队列的长度。

这个功能能使接受者实现某种形式的流控制。

当一个线程使用正常的发送权限向一个端口发送消息,而这个端口的消息满了,这个线程只能阻塞,直到有空为止。

发送端口权限

当消息中包含端口发送权限时,消息接受者就获得这一端口的发送权限

当接收权限被传输时,发送消息的任务自动放弃了这一端口的接收权限

因为同一端口接收权限在同一时刻的拥有者不能大于1个

监控链接

当发送消息和接收消息无效时,内核需要通知发送者和接受者。

内核记录了给定端口的发送权限数据和接受权限数目。

如果没有任务拥有特定端口的接收权限,那么本地任务端口命名中的所有发送权限将成为死名

当一个发送者试图指向一个不存在的端口名字,内核返回错误

通信实现

透明消息传递

端口只局限于内核上,从外部增加一层抽象——网络端口

网络端口的存在,消息可以在网络上传播——每个网络端口都有一个全局的唯一标识,只有网络服务器管理

在这里插入图片描述

开发性和协议驱动程序
传输协议
TCP/IP

TCP/IP通信模型是一种基于互联网的通信模型,由两个协议组成。TCP(Transmission Control Protocol,传输控制协议)是面向连接和可靠的传输协议,负责将数据在网络中进行分段、传输、重组、校验等操作。而IP(Internet Protocol,互联网协议)则是网络层协议,负责将数据在网络中进行路由选择、分组传输和转发等操作。

TCP/IP模型由四个层次组成,自下而上分别为:

  1. 网络接口层:负责将数据帧(Frame)转换为比特流(Bit stream)进行传输,同网卡进行交互。
  2. 网络层:负责将数据报(Packet)在网络中进行路由,将数据从源地址发送到目标地址。
  3. 传输层:TCP 和 UDP 使用这一层进行数据传输。TCP 为可靠传输,保证数据不会丢失或损坏,使用连接的方式进行通信;UDP 为不可靠传输,速度快,但无法保证数据传输的可靠性,采用无连接的通信方式。
  4. 应用层:该层为用户提供各种丰富的网络应用服务,如HTTP、FTP、SMTP和TELNET等协议。

TCP/IP模型通常被称为互联网模型,并且它是将TCP/IP协议族分割成了多个抽象层次的模型,每个层次能够提供自己的一系列功能

LAN

在局域网(Local Area Network,简称 LAN)中,有多种请求应答的交互模型,其中常见的有以下几种:

  1. CSMA/CD(Carrier Sense Multiple Access with Collision Detection)模型:是局域网中最为常见的交互模型,应用于以太网(Ethernet)等技术。它利用信道监听(Carrier Sense)机制,即网络设备在发送数据前需先监听网络信道,如果信道上没有数据传输,则发送数据;否则等待一定时间后再次监听信道,如果仍然有数据传输,则判断为冲突(Collision),发送设备需要停止发送并随机等待后再次发送。
  2. Token Ring 模型:是在 Token Ring 网络中应用的交互模型。在这种模型中,所有设备通过一种名为 Token 的信息标记轮廓式地传递数据。每个设备只有在收到 Token 后才可以发送数据,一个设备发送完数据后将 Token 发送给下一个设备。
  3. Polling 模型:是一种点对点的交互模型,在这种模型中,主机(Server)或中央控制器向目标设备发出查询命令,目标设备接收到查询命令后进行相应操作并返回查询结果。这种模型的效率较低,且必须有一个专门的控制器来调度多个设备的查询请求,因此在现代局域网中很少使用。
  4. Multicast 模型:是一种点对多点的交互模型,在这种模型中,源设备只需要发送一次数据,就可以将数据同时发送给多个目标设备,提高了通信效率。这种模型通常应用于视频、音频等多媒体数据传输场景中。

总之,不同的局域网交互模型有各自的优缺点和适用场景,需要根据具体的网络环境和应用需求选择合适的交互模型。

用户级网络驱动程序

内核为每一个设备提供一个抽象,包含一个将设备控制器的寄存器映射到用户空间的操作

以太网的情况:

  • 控制器使用的寄存器和包缓冲区可以被映射到网络服务器的地址空间内
  • 当中断发生时,在内核中运行的特殊代码会唤醒用户线程,这一线程可以处理中断

内存管理

地址空间结构

每个区域是一段具有公共属性集的连续的逻辑地址空间

这些属性包含访问许可(读写执行),还包含可伸缩

系统允许栈空间向低地址扩展,堆可以向高空间地址扩展

内存共享:继承和消息传递

Mach通过内存继承机制,来允许UNIX fork机制的一般化

一个新的任务是从一个另一个任务创建的,这个任务是一个蓝图

从蓝图继承过来的区域包含同样的地址范围

写时复制

写时复制(Copy-On-Write,COW)机制是一种能够优化复制操作的技术。其基本思想是在内存中复制数据之前不会真正进行复制,而是等到对数据进行修改操作时以“复制一份副本”的方式,使修改后的数据可供使用,而原有数据仍保持不变。写时复制机制可以避免不必要的数据复制,节省内存空间,同时还可以提高系统的性能和并发性能,降低锁冲突的影响,提高系统的可扩展性。

写时复制机制通常应用于以下场景:

  1. 文件系统中,常用于快照(Snapshot)技术。快照是文件系统的一项重要功能,它能够记录文件系统的状态并保存在特定时间点上的数据版本。写时复制技术可以在实现快照功能时避免整个文件系统的拷贝操作。
  2. 操作系统中,常用于进程(Process)复制。当需要创建一个新的进程时,写时复制机制会创建一个共享地址空间,以避免对进程空间的一次完全的复制。只有当进程对某个地址进行修改时,才会复制原有地址中的内容并创建一个新的共享地址空间。
  3. 数据库系统中,常用于高可用性的实现。在数据库服务器的主从备份(Master-Slave Replication)机制中,主服务器会将新写入的数据同步至备份服务器。在使用写时复制机制时,从服务器只有在收到主服务器发来的新数据后,才会进行一份完整的数据复制操作。

总之,写时复制机制是一个技术成熟、广泛应用的技术,它可以在处理大量数据和需要进行复制的场景中发挥作用,提高系统的性能、可扩展性和可靠性。

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

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

相关文章

【案例实战】SpringBoot整合Redis实现缓存分页数据查询

正式观看本文之前,设想一个问题,高并发情况下,首页列表数据怎么做? 类似淘宝首页,这些商品是从数据库中查出来的吗?答案肯定不是,在高并发的情况下,数据库是扛不住的,那么…

Java解析XML文件(DOM4J解析xml文件)

内容重点1:DOM4J创建、解析、修改XML文件 内容重点2:DOM4J模拟解析web.xml配置文件,实现实例化servlet 1、什么是xml Xml(Extensible Markup Language) 一种扩展性标示语言,出现的意义其实与JSON字符串的意义相似,是新一代的数据交换标准…

怎么加密共享文件夹?局域网共享文件夹加密方法

相信很多企业都在使用局域网共享文件夹,它可以很方便地实现各部门之间的沟通协作。但是由于使用人员众多,数据安全非常难以得到保障。那么我们该怎么加密局域网共享文件夹呢? 共享文件夹加密 首先,我们先来了解一下共享文件夹加密…

某农业大学数据结构A-第13周作业

1.拓扑排序 【问题描述】 拓扑排序的流程如下: 1. 在有向图中选一个没有前驱的顶点并且输出之; 2. 从图中删除该顶点和所有以它为尾的弧。 重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止。后一种情况则…

渲染模式差异和选择

传统服务端渲染 在过去传统开发中,页面渲染任务是由服务端完成的,服务器负责获取数据,拼装页面,客户端仅负责内容显示,使用这种方式的典型技术有 JSP、PHP、ASP.NET 等等。 客户端渲染 CSR Vue.js、React 这类框架之…

专访蘑菇物联沈国辉:做工业AI时代的推动者

在中国制造迈向高质量发展的进程中,数智化转型会成为破局之道。在这其中,蘑菇物联除了是一个本分的答题者,还是一个善于发现问题的贡献者。 作者|思杭 编辑|皮爷 出品|产业家 从广州造纸厂到广州造船厂,从第一橡胶厂到电池厂&a…

利用R语言通过百度地图API进行批量地理编码

利用R语言通过百度地图API进行批量地理编码 当您有大量的地点名称需要在地图上来呈现时,首先要在在线地图上找到该地址的坐标,通常是指经纬度,如果能够用代码来实现,便少了许多费时费力的体力活儿,以下将详细介绍地理…

数据结构的一些总结---利用Python实现

大家好,我是北山啦,本文简单介绍Python数据结构的相关内容,简单就是很简单的那种 文章目录 查找线性查找 O(n)二分查找(Binary Search) O(logn) 排序排序Low B三人组冒泡排序选择排序插入排序 排序NB三人组快速排序归并排序 数据结构栈和队列…

[Day 3 of 17]Building a document scanner in OpenCV

a computer vision-powered document scanner 计算机视觉驱动的文档扫描仪,三个步骤: 边缘检测edges通过边缘,找到代表待扫描纸张的轮廓contour应用透视转换(a perspective transform)获得文档自上而下的视图 How to Build a Kick-Ass Mob…

录音转文字的方法有哪些?这三个录音转文字的方法有哪些

你是否曾经遇到过这样的场景:在开会或者采访时,需要记录重要信息,但是手写记录或打字速度跟不上对话节奏,甚至难以记录所有细节。此时,录音转文字软件就派上用场了。然而,市场上有太多种选择,到…

【Vue3 生态】Vue Router 路由知识概览

前言 在 Web 前端开发中,路由是非常重要的一环,但是路由到底是什么呢? 从路由的用途上讲 路由是指随着浏览器地址栏的变化,展示给用户不同的页面。 从路由的实现原理上讲 路由是URL到函数的映射。它将 URL 和应用程序的不同部分…

低代码平台——提高研发效率的神器

一、前言 听起来像是一个噱头,但是低代码确实是一个能够快速提高研发效率的神器。 通过使用低代码平台,研发人员可以节省好几个月的时间,将前后端各种功能可视化以搭积木的形式快速完成。今天,我们将深入探讨低代码开发平台的特点…

两阶段目标检测指南:R-CNN、FPN、Mask R-CNN

动动发财的小手,点个赞吧! Source[1] 多阶段(Two-stage)物体检测 计算机视觉中最基本和最广泛研究的挑战之一是目标检测。该任务旨在在给定图像中绘制多个对象边界框,这在包括自动驾驶在内的许多领域非常重要。通常&am…

一种看门狗复位电源的电路

如下是一个看门狗复位电源的电路: 满足掉电能被监测到,掉电后利用法拉电容保持后级模组继续工作一段时间。 看门狗可以关闭电源 320ms 20ms ,对后级模组起到断电复位作用。 同时复位电源拉低的是VCC_4V 而非超级电容所在的VCC_4V_IN,并不会…

SpringBoot项目的事务实现

说明:当业务中的某个功能,需要多个操作组合执行才能完成时(如删除部门,部门下的员工也需要同步删除时),为了保证数据的一致性,需要对这些组合操作添加事务。(参考:http:/…

从电源 LED 读取智能手机的秘密?

研究人员设计了一种新的攻击方法,通过记录读卡器或智能手机打开时的电源 LED,使用 iPhone 摄像头或商业监控系统恢复存储在智能卡和智能手机中的加密密钥。 众所周知,这是一种侧信道攻击。 通过密切监视功耗、声音、电磁辐射或执行操作所需…

一、elasticsearch的简介与安装

目录 一、Elasticsearch下载 二、安装 三、启动 四、安装可视化插件(elasticsearch-head) 1、下载地址 2、解压缩下载好的压缩文件 3、进入解压缩目录 五、解决跨域问题 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方…

端午节出行的小贴士——行之安,乐之逍

亲爱的朋友们, 随着端午节的到来,想必许多人已经开始期待那份出游的快乐与解脱。无论你是期待漫步在宁静的田野小径,还是在繁华的城市中探索,这篇文章都会给你一些实用的端午节出行建议,帮助你尽情享受旅程。 首先&a…

Airtest图像识别测试工具原理解读最佳实践 | 京东云技术团队

1 Airtest简介 Airtest是一个跨平台的、基于图像识别的UI自动化测试框架,适用于游戏和App,支持平台有Windows、Android和iOS。Airtest框架基于一种图形脚本语言Sikuli,引用该框架后,不再需要一行行的写代码,通过截取按…

如何利用数据化营销助力新零售企业发展?”

​“新零售”这个概念诞生至今已有5年,但对于其具体的定义,行业内仍然有许多争议。有人认为“新零售”是对传统零售模式的颠覆;也有人认为“新零售”就是将线上和线下相结合。不论如何,在这个不断变化的行业中,新零售企…