分布式系统概念和设计
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模型由四个层次组成,自下而上分别为:
- 网络接口层:负责将数据帧(Frame)转换为比特流(Bit stream)进行传输,同网卡进行交互。
- 网络层:负责将数据报(Packet)在网络中进行路由,将数据从源地址发送到目标地址。
- 传输层:TCP 和 UDP 使用这一层进行数据传输。TCP 为可靠传输,保证数据不会丢失或损坏,使用连接的方式进行通信;UDP 为不可靠传输,速度快,但无法保证数据传输的可靠性,采用无连接的通信方式。
- 应用层:该层为用户提供各种丰富的网络应用服务,如HTTP、FTP、SMTP和TELNET等协议。
TCP/IP模型通常被称为互联网模型,并且它是将TCP/IP协议族分割成了多个抽象层次的模型,每个层次能够提供自己的一系列功能
LAN
在局域网(Local Area Network,简称 LAN)中,有多种请求应答的交互模型,其中常见的有以下几种:
- CSMA/CD(Carrier Sense Multiple Access with Collision Detection)模型:是局域网中最为常见的交互模型,应用于以太网(Ethernet)等技术。它利用信道监听(Carrier Sense)机制,即网络设备在发送数据前需先监听网络信道,如果信道上没有数据传输,则发送数据;否则等待一定时间后再次监听信道,如果仍然有数据传输,则判断为冲突(Collision),发送设备需要停止发送并随机等待后再次发送。
- Token Ring 模型:是在 Token Ring 网络中应用的交互模型。在这种模型中,所有设备通过一种名为 Token 的信息标记轮廓式地传递数据。每个设备只有在收到 Token 后才可以发送数据,一个设备发送完数据后将 Token 发送给下一个设备。
- Polling 模型:是一种点对点的交互模型,在这种模型中,主机(Server)或中央控制器向目标设备发出查询命令,目标设备接收到查询命令后进行相应操作并返回查询结果。这种模型的效率较低,且必须有一个专门的控制器来调度多个设备的查询请求,因此在现代局域网中很少使用。
- Multicast 模型:是一种点对多点的交互模型,在这种模型中,源设备只需要发送一次数据,就可以将数据同时发送给多个目标设备,提高了通信效率。这种模型通常应用于视频、音频等多媒体数据传输场景中。
总之,不同的局域网交互模型有各自的优缺点和适用场景,需要根据具体的网络环境和应用需求选择合适的交互模型。
用户级网络驱动程序
内核为每一个设备提供一个抽象,包含一个将设备控制器的寄存器映射到用户空间的操作
以太网的情况:
- 控制器使用的寄存器和包缓冲区可以被映射到网络服务器的地址空间内
- 当中断发生时,在内核中运行的特殊代码会唤醒用户线程,这一线程可以处理中断
内存管理
地址空间结构
每个区域是一段具有公共属性集的连续的逻辑地址空间
这些属性包含访问许可(读写执行),还包含可伸缩
系统允许栈空间向低地址扩展,堆可以向高空间地址扩展
内存共享:继承和消息传递
Mach通过内存继承机制,来允许UNIX fork机制的一般化
一个新的任务是从一个另一个任务创建的,这个任务是一个蓝图
从蓝图继承过来的区域包含同样的地址范围
写时复制
写时复制(Copy-On-Write,COW)机制是一种能够优化复制操作的技术。其基本思想是在内存中复制数据之前不会真正进行复制,而是等到对数据进行修改操作时以“复制一份副本”的方式,使修改后的数据可供使用,而原有数据仍保持不变。写时复制机制可以避免不必要的数据复制,节省内存空间,同时还可以提高系统的性能和并发性能,降低锁冲突的影响,提高系统的可扩展性。
写时复制机制通常应用于以下场景:文章来源:https://www.toymoban.com/news/detail-491468.html
- 文件系统中,常用于快照(Snapshot)技术。快照是文件系统的一项重要功能,它能够记录文件系统的状态并保存在特定时间点上的数据版本。写时复制技术可以在实现快照功能时避免整个文件系统的拷贝操作。
- 操作系统中,常用于进程(Process)复制。当需要创建一个新的进程时,写时复制机制会创建一个共享地址空间,以避免对进程空间的一次完全的复制。只有当进程对某个地址进行修改时,才会复制原有地址中的内容并创建一个新的共享地址空间。
- 数据库系统中,常用于高可用性的实现。在数据库服务器的主从备份(Master-Slave Replication)机制中,主服务器会将新写入的数据同步至备份服务器。在使用写时复制机制时,从服务器只有在收到主服务器发来的新数据后,才会进行一份完整的数据复制操作。
总之,写时复制机制是一个技术成熟、广泛应用的技术,它可以在处理大量数据和需要进行复制的场景中发挥作用,提高系统的性能、可扩展性和可靠性。文章来源地址https://www.toymoban.com/news/detail-491468.html
到了这里,关于分布式系统概念和设计——Mach实例研究的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!