分布式操作系统 - 3.分布式进程管理

1.进程和线程管理

1.1 进程的概念

进程: 运行中的程序

例:4个程序组成的多道程序

  • 逻辑上, 4个独立的、 顺序的进程的概念模型
  • 物理上, 任意时刻只有一个是活动的

进程的本质:

  • 本质上实现了“并发透明性”与“虚拟处理器”
  • 从进程的角度,感知不到其他进程的存在
  • 从系统的角度,进程之间相互独立,互不干扰

1.2 进程的状态

  1. 进程a等待输入而暂停执行, 进入阻塞队列
  2. 时间片到, 进程a暂停执行, 进入就绪队列, 调度器选择另一个就绪进程b
  3. 启动进程b运行
  4. 当输入完成后,进程 a进入就绪队列

在这里插入图片描述

1.3 进程的实现 - 进程表(PCB)

进程管理 内存管理 文件管理
Registers
Program counter
Program status word
Stack pointer
Process state
Priority
Scheduling parameters
Pointer to text segment
Pointer to data segment
Pointer to stack segment
Root directory
Working directory
File descriptors
User ID
Group ID
Process ID
Parent process
Process group
Signals
Starting time
CPU time used
Children’s CPU time
Time of next alarm

1.4 多进程模型的问题

  • 进程切换开销大
  • 进程间通信开销大
  • 这是为实现透明性所付出的代价!

在这里插入图片描述

1.5 线程的概念

进程: 相关的运行资源的管理单位

  • 内存空间

  • 打开的文件

  • 子进程、 信号处理、 记账信息等

  • 资源分组

线程(线索): 在CPU上执行的脉络, 多线程是指操作系统的这样一种设计: 它允许在一个进程内部, 有多个执行路线“同时”进行

  • 程序计数器、 寄存器、 栈

  • 执行

1.6 线程模型

多线程进程: 一个线程被阻塞时, 可运行同一进程中的另一线程(阻塞→就绪→运行)

线程 → 进程; 进程 → 处理机;

在这里插入图片描述

每个线程可共享所属进程的资源

每个进程的项目 每个线程的项目
地址空间
全局变量
打开的文件
子进程
挂起警报
信号和信号处理器
计费信息
程序计数器
堆栈
寄存器
状态

每个线程拥有自己的栈:局部变量、返回地址

在这里插入图片描述

1.7 线程用途

(1)进程间通信(IPC)

大型应用程序需要进程间通信:进程间通信IPC中的上下文切换

缺点:切换开销大

解决方案:线程切换

在这里插入图片描述

(2)多线程服务器

举例: 多线程的Web服务器

在这里插入图片描述

多线程服务器的组织方式

(a)分派者 / 工作者模型

(b)团队模型

(c)管道模型

在这里插入图片描述

1.8 多线程的实现方式

(1)用户级线程

**用户级线程的优点 **

  • 切换开销小
  • 调度策略“因应用而异”
  • 与操作系统关联少, 可移植性好

用户级线程的缺点

  • 一个线程因系统调用阻塞, 导致整个进程阻塞
  • 纯ULT中, 由于一个进程只能分配 一个处理机, 所以ULT无法利用多处理机带来的并行运算优势

在这里插入图片描述

(2)内核级线程(KLT

**内核级线程(Kernel Level Thread, KLT) **

  • 操作系统全权负责线程管理
  • 操作系统内核提供API

在这里插入图片描述

**内核级线程的优点 **

  • 一个线程阻塞, 其它线程不受影响
  • 可以利用多处理机优势
  • 操作系统内核本身也可以实现为多线程

**内核级线程的缺点 **

  • 线程切换和管理开销大, 性能优势有损失

不同实现方法开销对比(VAX机, UNIX系统)

操作 ULT KLT 进程
仅生成一个线程 34 948 11,300
唤醒等待实体 37 441 1,840

(3)轻量级进程(LWP)

轻量级进程(Light Weight Process, LWP)

  • 线程的创建、 调度、 同步都实现在用户级
  • KLT被用作线程“代理”
  • 试图综合ULT与KLT的优点

在这里插入图片描述

1.9 Job、 Process、 Thread的相互关系

在这里插入图片描述

2.虚拟化技术

2.1 虚拟化技术

**虚拟化在分布式系统中的作用 **

  • 支持遗留软件(legacy software)
  • 减少软件平台和机器类型的数量
  • 高移植性和灵活性

虚拟化系统结构

(a) 程序、 接口、 和系统之间的通用结构

(b) 在系统B之上的虚拟化系统A的通用结构

在这里插入图片描述

2.2 虚拟化系统提供4种接口

(1)硬件虚拟化: 由机器指令组成的硬件和软件间接口 (通用指令)

  • 可被任何程序调用

(2)硬件虚拟化: 由机器指令组成的硬件和软件间接口(特权指令)

  • 只可被特权程序(如OS内核) 调用

(3)OS虚拟化: 由系统调用(如OS提供) 组成的接口

(4)编程虚拟化: 由子程序库调用组成的接口

  • 通常构成应用程序接口 (API).
  • 很多情况下, 上述系统调用隐藏在 API中

在这里插入图片描述

2.3 虚拟机体系结构

**两种虚拟化方式 **

  1. 构建一个运行时系统, 如 Java运行环境, 或者, 进程 虚拟机
  2. 完全屏蔽硬件, 提供另一种机器指令界面, 称为虚拟监控器(VMM) , 如VMware 系统, Xen系统(可提供给不同的程序, 多操作系统并发)

在这里插入图片描述

2.4 虚拟化技术的比较

虚拟化技术 优点 缺点
硬件虚拟化 每个虚拟机都构成一个独立完整的计算环境。 虚拟机的性能高、 安全性好、 隔离性好。 不同的处理器需采用不同的虚拟软件。 软件成本高、 很难实现真正的物理级兼容性
操作系统虚拟化 每台计算机只虚拟一种操作系 统。 管理简单、 性能较高, 安 全性中等。 只能支持同一操作系统下的不同应用。 主操作系统决定虚拟操作系统的安全性
虚拟化PC 每台PC机可提供2个操作系统的虚拟组合, 在X86体系结构上应用比较成功。 性能取决于PC机的硬件配置 硬件兼容性不全面, 性能和安全性较差。
编程虚拟化 兼容性取决于JVM。 支持跨平台应用, 大幅度减少应用程序移植的工作量。 大并发程序执行的性能、 可靠性、 安全性存在风险

3.客户进程设计

3.1 用户接口

客户程序: 用户接口

在这里插入图片描述

3.2 网络化用户接口

带专用协议的网络化应用程序

支持访问远程应用程序的通用方案

在这里插入图片描述

举例: X-Window图形接口系统

  • X-kernel: Windows manager

在这里插入图片描述

3.3 客户程序对分布透明性的支持

存取透明性

  • 客户存根程序(stub):代理程序
  • 隐藏客户和服务器主机之间的硬件差异和通信

在这里插入图片描述

位置透明性、迁移透明性、重定位透明性

  • 命名系统:全局逻辑名字
  • 重新绑定机制:当服务器改编为之后,通知客户重新自动绑定

举例: 使用客户端解决服务器复制透明性的方案

在这里插入图片描述

复制透明性

  • 客户代理(proxy),转化到来的请求

在这里插入图片描述

**失败透明性 **

  • 重新连接: 通信失败时, 重试
  • 本地数据缓存: 例, 脱机方式

**并发透明性、 持久透明性 **

  • 需要客户软件的支持很少
  • 并发透明性: 事务监控器(中介服务器) 实现并发控制和恢复
  • 持久透明性一般完全由服务器处理

4.服务器进程设计

4.1 基本概念

服务器:为一组客户提供专门服务的进程

A server is a process implementing a specific service on behalf of a collectionof clients. In essence, each server is organized in the same way: it waits for anincoming request from a client and subsequently ensures that the request istaken care of, after which it waits for the next incoming request.

设计问题一:服务器的组织形式

  • 迭代服务器: 服务器自己处理请求
  • 并发服务器: dispatcher与worker

设计问题二:客户机如何接入服务器

  • End point(port)

4.2 服务器设计

(1)Client-to-Server两种绑定策略

  • (a) 静态:由daemon进程负责(如,DCE)
  • (b) 动态:由superserver进程负责(如,Unix inetd;YARN)

在这里插入图片描述

(2)设计问题三:服务中断处理策略

客户重启: 中断连接

客户发送out-of-band命令

发送方法:

  • 利用单独另外的控制端点, 或者,
  • 利用同一链路, 如, TCP中发送urgent data

(3)设计问题四:服务器设计为无状态/有状态

Client-to-Server两种连接方式

  • 无状态服务器:服务器不保存客户程序的状态,如,Web服务器
  • 有状态服务器:保存客户程序的状态,如,NFS文件服务器
    • 文件使用表(客户,文件,可更新否)
    • 服务器重启时:回复故障前状态

用无状态服务器实现有状态服

  • 仿真方式: 例: Read文件Open, Read, Close

Cookie: 客户的标识数据

  • 在Web服务器中记录客户的行为历史信息, 利用Cookie机制进行管理
  • 对用户是透明的。 如保存用户的登录信息
  • 缺点: 违反隐私权, 有安全性隐患(仿冒ID)

4.3 服务器集群

服务器集群: 一组由网络连接的机器, 每台机器上运行一个或多个服务器进程

系统结构:逻辑上由三层组成

在这里插入图片描述

TCP转发原理

在这里插入图片描述

**负载平衡策略 **

  • 轮转法
  • 内容感知的请求分布

4.4 分布式服务器

配置可动态变化的机器群

访问点也可以变化

实现技术 :MIPv6支持移动节点的机制

移动节点

  • 原籍网络(home network)
  • 原籍地址(home address) : 稳定、 不变化
  • 原籍代理(home agent) : 特别的路由器
  • 暂住地址(care of address) : 临时的网络地址

路由优化

在这里插入图片描述

4.5 服务器机群管理

通用方法

  • 在普通节点上通过远程登录:监控、 安装、 改变组件
  • 在管理机操作:收集信息、 升级组件、 增减节点

4.6 例:PlanetLab -协作型分布式系统

VMM – 虚拟机监控器

Vserver – 虚拟服务器(程序库、 通信)

在这里插入图片描述

节点管理器: 管理工具

  • 节点拥有者: 提供资源
  • 切片授权者: 子资源管理
  • 管理授权者: 节点管理
  • 服务提供者: 使用者

在这里插入图片描述

实体间的管理关系

  1. 节点拥有者把它的节点加入到管理授权者的范围下, 以适当地限制使用
  2. 管理授权者提供必要的软件, 在PlanetLab系统中增加节点
  3. 服务提供者向管理授权者注册, 对后者提供的节点表示信任
  4. 服务提供者联系切片授权者, 请求在一组节点上创建一个切片
  5. 切片授权者需要对服务提供者进行授权认证
  6. 节点拥有者为切片授权者提供切片创建服务。 实质上是向切片授权者委托资源管理
  7. 管理授权者向切片授权者委托切片创建

5.代码迁移

5.1 代码迁移目的

**操作传送(operation shipping) **

  • 代码迁移(code migration)
  • 进程迁移(process migration)

**目的: **

  • 改进性能
    • 负载平衡, 例: 网格计算
    • 减少通信量, 例, query shipping
    • 并行性, 例, 并行搜索Web
  • 灵活性:动态配置分布式程序
  • 攻击

5.2 代码迁移的原因

实现客户与服务器通信的动态配置原理:客户首先取得必需的软件, 然后调用服务器

在这里插入图片描述

代码迁移的主要问题是: 安全性问题, 易受攻击

5.3 代码迁移模型

**进程的组成 **

  1. 代码段: 指令集
  2. 资源段: 外部资源引用, 文件、 打印机、 设备等
  3. 执行段: 状态, 私有数据、 SP, PC等

**移动方式 **

  • 弱移动性: 只移动代码段
  • 强移动性: 移动代码段、 执行段

发起方式

  • 发送者发起: 上载程序(MapReduce)
  • 接收者发起: 下载程序(applet)

代码迁移的分类

在这里插入图片描述

5.4 局部资源

**代码迁移过程中对资源如何处理? **

**“进程-资源”绑定关系 **

  • By-identifier: 通过标识符, 如URL
  • By-value: 引用资源的值, 如标准函数库
  • By-type: 引用某个类型的资源, 如打印机

**“资源-机器”绑定关系 **

  • Unattached: 独立于机器, 如数据文件
  • Fastened: 与机器有关联, 难以移动, 如局部数据库
  • Fixed: 与机器密切绑定, 不能移动, 如硬件设备

解决对局部资源引用的方法

  • GR: 建立全局引用。 例, URL
  • MV: 移动资源
  • CP: 拷贝资源的值
  • RB: 重新绑定局部可用资源。

在这里插入图片描述

5.5 异构系统中的代码迁移

**异构系统: 不同的硬件和操作系统 **

弱移动性: 重新编译源代码, 生成新的代码段

强移动性:

  • 避免执行段中有平台相关的数据

    例: 迁移栈(migration) 方法

    1. 迁移只能发生在固定点: 子程序调用
    2. 程序栈保存在迁移栈中
    3. 在迁移时, 全局数据和迁移栈内容发给目标机器
  • 虚拟机方法。 在虚拟机上执行源代码或中间代码, 支持可移植语言

迁移栈方法的工作原理

在这里插入图片描述

5.6 D‘Agents中的代码迁移

D’Agent, 也称为Agent Tcl

**支持代码迁移的中间件平台系统 **

  1. sender发起的弱迁移性
  2. 进程迁移执行的强迁移性
  3. 进程克隆执行的强迁移性

**Agent: 可在不同机器上迁移的程序 **

  • 解释型语言: Tcl, Java,等
  • 脚本(Script) :指令序列

举例: 独立进程执行的弱迁移,向远程机器交付一个脚本

proc factorial n {                    # 计算n的阶乘n!
if ($n <= 1) { return 1; }            # fac(1) = 1
expr $n * [ factorial [expr $n – 1] ] # fac(n) = n * fac(n – 1)
} 

set number …      # tells which factorial to compute
set machine …     # identify the target machine
agent_submit $machine –procs factorial –vars number –script {factorial $number }
agent_receive …   # receive the results (left unspecified for simplicity)

举例: sender发起的强迁移

tcl Agent迁移到另一台机器上执行UNIX who 命 令

all_users $machines
proc all_users machines {
set list ""                   # Create an initially empty list
foreach m $machines {         # Consider all hosts in the set of given machines
agent_jump $m                 # Jump to each host
set users [exec who]          # Execute the who command
append list $users }          # Append the results to the list
return $list                  # Return the complete list when done
}
set machines …                # Initialize the set of machines to jump to
set this_machine              # Set to the host that starts the agent
# Create a migrating agent by submitting the script to this machine, from where
# it will jump to all the others in $machines.
agent_submit $this_machine –procs all_users -vars machines script { all_users $machines }
agent_receive …               #receive the results (left unspecified for simplicity)

5.7 实现技术

**D‘Agents系统体系结构 **

  • 服务器: agent管理, 授权,通信管理
  • RTS内核: agent模型, 启动和结束agent, 迁移操作, agent间通信
  • 解释器: 解释器组件, 安全性模块, 内核接口, 代理运行状态

在这里插入图片描述

**D‘Agents 中代理的状态构成 **

  • 4张表: 纪录数据状态
  • 2个栈 : 记录执行命令
状态 描述
全局解释器变量表 agent 解释器需要的变量
全局系统变量表 返回代码, 错误代码, 错误消息串等
全局程序变量表 程序中用户定义的全局变量
过程定义表 Agent执行的脚本定义
命令栈 当前执行命令的命令栈
调用祯栈 激活记录栈, 每条命令一个

猜你喜欢

转载自blog.csdn.net/wdnshadow/article/details/128122416
今日推荐