云计算与并行计算复习.docx
《云计算与并行计算复习.docx》由会员分享,可在线阅读,更多相关《云计算与并行计算复习.docx(19页珍藏版)》请在冰豆网上搜索。
![云计算与并行计算复习.docx](https://file1.bdocx.com/fileroot1/2022-11/30/cbeb1682-5c8b-48af-8e65-2e05e104ecfe/cbeb1682-5c8b-48af-8e65-2e05e104ecfe1.gif)
云计算与并行计算复习
云计算与分布式系统期末复习
1.云计算的概念,来源以及与并行计算的关系
云计算的概念从集群、网格和效用计算发展而来。
云是虚拟计算机资源池。
云可以处理各种不同的负载,包括批处理
式后端作业和交互式用户界面应用。
云通过迅速提供虚拟机或物理
机允许负载被快速配置和划分。
云支持冗余,自恢复,高可扩展编程
模型,以允许负载从许多不可避免的硬件/软件错误中恢复。
最终,
云计算系统可以通过实时监视资源来确保分配在需要时平衡。
来源:
数据爆炸促发了云计算的思想。
集群和网格计算并行使用大量计算机可以解决任何规模的问题。
效
用计算和 SaaS(SoftwareasaService)将计算资源作为服务进行
按需付费。
云计算利用动态资源为终端用户传递大量服务。
云计算是一种高吞吐量计算范式,它通过大的数据中心或服务器
群提供服务。
云计算模型使得用户可以随时随地通过他们的互连设
备访问共享资源。
云计算避免了大量的数据移动,可以带来更好的网络带宽利用率。
而且,机器
虚拟化进一步提高了资源利用率,增加了应用程序灵活性降
低了使用虚拟化数据中心资源的总体成本。
云计算使用虚拟化平台,通过按需动态配置硬件、软件和数据集,将弹性资源
放在一起,主要思想是使用数据中心中的服务器集群和大规模数据库,将桌面
计算移向基于服务的平台,利用其对提供商和用户的低成本和简单性。
云应用的所有计算任务被分配到数据中心的服务器上。
这些服务器
主要是虚拟集群的虚拟机,由数据中心资源产生出来。
云平台是通过虚拟化分布的系统。
公有云和私有云都是在互联网上开发的。
公有云构建在互联网之上,任何已付费的用户都可以访问。
公有云属于服
务提供商,用户通过订阅即可访问。
私有云构建在局域网内部,属于一个独立的组织。
由客户管理,而且其可
访问范围限制在所属客户及其合作者之中。
混合云由公有云和私有云共同构成
公有云促进了标准化,节约了资金投入,为应用程序提供了很好的灵活性;私有云尝
试进行定制化,可以提供更高的有效性、弹性、安全性和隐私性;混合云则处于两者
中间,在资源共享方面进行了折中。
云的核心是服务器集群(或虚拟机集群)。
集群节点用作计算节点,少量的
控制节点用于管理和监视云活动。
用户作业的调度需要为用户创建的虚拟集群
分配任务。
数据中心和超级计算机在网络需求方面也不相同。
超级计算机使用客户设
计的高带宽网络,如胖树或 3D 环形网络;数据中心网络主要是基于 IP 的商业
网络
云平台设计目标:
可扩展性、虚拟化、有效性和可靠性
2.云平台提供的服务类型
6 层的云服务,范围从硬件、网络和配置到基础设施、平台和软件应用
上三层
Iaas(基础设施即服务)Paas(平台即服务) Saas(软件即服务)
硬件即服务(HaaS) 网络即服务(NaaS) 位置即服务(配置即
服务)(LaaS)。
数据中心的虚拟化资源形成互联网云,向付费用户提供硬件,软件,存储,网
络和服务以运行他们的应用。
云计算提供了一个虚拟化的按需动态供应硬件,软件和数据集的弹性资源平台.
①基础设施即服务(IaaS):
这个模型将用户需要的基础设施(即服务器,存储,
网络和数据中心构造)组合在一起。
用户可以在使用客户机操作系统的多个虚拟
机上配置和运行指定的应用。
②平台即服务(PaaS):
这个模型使用户能够在一个虚拟的平台上配置用户制定
的应用。
PaaS 包括中间件,数据库,开发工具和一些运行时支持(如 Web2.0
和 Java)。
3.软件即服务(SaaS):
这是指面向数千付费云用户的初始浏览器的应用软件。
SaaS 模型应用于业务流程,工业应用,客户关系管理,企业资源计划,人力资
源和合作应用。
3.Google 的核心技术(……包括默认文件?
?
大小)
谷歌的云计算应用程序的构成要素包括存储大量数据的 GFS、为应用程序开发
者提供的 MapReduce 编程框架、用于分布式应用程序锁服务的 Chubby 和为
访问结构化或半结构化数据的 BigTable 存储服务。
Google MapReduce(Map:
对一组数据元素进行某种重复式的处理,Reduce:
对
Map 中间结果进行某种进一步的结果整理)(MapReduce 把 what need to do 与
how to do 分开了)
(设计思想:
scale out not up,assume failures are common,moving processing to
data,process data sequentially and avoid random access)上升到架构:
统一架构,为
程序员隐藏系统层细节。
Google GFS google gfs是一个基于分布式集群的大型分布式文件系统,为
MapReduce 计算框架提供底层数据存储和数据可靠性支撑。
Master上保存了 GFS 文件系统的三种元数据:
①命名空间,即整个分布式文件系
统的目录结构。
②Chunk与文件名的映射表3.Chunk 副本的位置信息,每个
Chunk 默认有 3 个副本。
GFS 中每个数据块划分缺省为 64MB。
每个数据块会分别在 3 个不同的地方复
制副本;每一个数据块,仅当 3 个副本都成功时,才认为数据保存成功。
每个
数据块再划分为 64KB 的子块,每个子块有一个 32 位的校验和。
BigTable:
GFS 是一个文件系统,难以提供对结构化数据的存储和访问管理。
为此 Google 在 GFS 之上又设计了一个结构化数据存储和访问管理系统-----
BigTable,为应用程序提供比单纯文件系统更方便,更高层的数据操作能力。
BigTable 对存储在表中的数据不做任何解释,一律视为字符串,具体数据结构
的实现由用户自行定义。
BigTable 查询模型(row:
string,column:
string,time:
int64)->结果数据字符串。
支持
查询,插入和删除操作。
4.怎样分析与计算系统的可用性
可用性表示系统对用户可用的时间百分比,即系统正常运行的时间百分比。
可用性分析:
HA(highaccessibility)是所有集群,网络,P2P 网络和云计算系统所期望的。
如果系统有一个长的平均故障时间(Mean Time To Failure,MTTF)和短的修复时
间(Mean Time To Repair,MTTR),那么这个系统就是高度可用的。
系统可用性形
式化定义如下:
系统可用性=MTTF/(MTTF+MTTR)(大多数集群通过转移故障节点来达到高
可用性的目的)。
5.虚拟化的基本概念,硬件虚拟化的基本类型,虚拟
化软件,目前市场上开源的 vmare 版本所支持的指
令集
虚拟化:
虚拟化是一种计算机体系结构技术,其中,多个虚拟机共享同一台物理硬件机
器。
虚拟化的思想是分离软硬件以产生更好的系统性能。
虚拟化技术通过在同一个硬件主机上多路复用虚拟机的方式来共享
昂贵的硬件资源
硬件虚拟化:
硬件虚拟化分为:
全虚拟化和基于主机的虚拟化。
全虚拟化不需要修改主机操作系统。
它依赖于二进制翻译来陷入和虚拟化一些
敏感,不可虚拟化的指令执行。
客户操作系统和他们的应用由非临界和临界指
令构成。
在基于主机的系统虚拟化中,主机操作系统和客户操作系统同时存在,虚拟化
软件层处于两者之间。
主机操作系统仍旧负责管理硬件。
客户操作系统安装并
运行在虚拟化层之上。
特定的应用可运行在虚拟机中。
半虚拟化:
半虚拟化需要修改客户操作系统。
半虚拟化虚拟机在用户程序中提供了特殊的
API,要求真正修改操作系统。
完全虚拟化:
xen 的完全虚拟化与半虚拟化的区别是,完全虚拟化需要 cpu 支持硬件虚拟化,而半虚拟
化不需要 cpu 支持硬件虚拟化。
也就是,cpu 支持了硬件虚拟化,xen 配置完成后就是完全虚拟化,cpu 不支持就是半虚拟
化。
三种实现技术:
1、模拟软件 emulation 通过模拟器模拟所有的指令,不通知虚拟化出来
的操作系统 它的运行环境。
2、虚拟化一部分特权指令或者使用二进制日志转换技术。
3、让 cpu 支持硬件虚拟化。
被虚拟化出来的操作系统上执行的指令,会运行在被虚拟化出来的硬件上,就是完全虚拟
化。
CPU,内存和 I/O 设备的虚拟化
VMM(虚拟机监视器),它负责管理计算机系统的硬件资源。
每次应用程序访问硬
件时,VMM 都会捕获该访问请求
CPU、内存和 I/O 设备的虚拟化
为支持虚拟化,处理器利用硬件辅助虚拟化,引入一种特殊的运行模式和指令,
使得VMM 和客户操作系统可运行在不同模式中,客户操作系统及其应用程
序的所有敏感指令会陷入到 VMM 中。
虚拟化的硬件支持
现代操作系统和处理器允许多个进程同时运行。
如果处理器中没有保护机制,
那么不同进程的所有指令都可以直接访问硬件,很容易导致系统崩溃。
因此,
所有处理器都至少需要两种模式(用户模式和管理模式)来确保对临界区硬件
的受控访问。
运行在管理模式的指令称为特权指令,其他指令为非特权指令。
CPU 虚拟化
虚拟机的非特权指令直接在物理主机中运行
关键指令可以分为三类:
特权指令、控制敏感指令和行为敏感指令。
特权指令
需要在特权模式中执行,当在特权模式之外执行特权指令时会发生陷入。
控制
敏感指令尝试改变使用资源的配置。
行为敏感指令根据资源的配置情况会有不
同的行为,包括在虚拟内存中进行的负载和存储操作。
VMM 运行在管理模式时,CPU 支持在用户模式运行虚拟机的特权指令和非特
权指令,则该 CPU 体系结构是可虚拟化的。
RISC 的所有控制敏感指令和行为
敏感指令都是特权指令,RISC 的 CPU 体系结构是天然可虚拟化的。
内存虚拟化
客户操作系统和 VMM 分别维护从虚拟内存到物理内存的映射和从物理内存到
机器内存的映射,共两级映射。
客户操作系统仍旧负责从虚拟地址到虚拟机的
物理内存地址的映射,VMM 负责将客户物理内存映射到实际的机器内存上
I/O 虚拟化
I/O 虚拟化包括管理虚拟设备和共享的物理硬件之间 I/O 请求的路由
选择。
实现 I/O 虚拟化有三种方式:
全设备模拟:
一个设备的所有功能或总线结构(如设备枚举、识别、中断和
DMA)都可以在软件中复制。
半虚拟化:
是 Xen 所采用的方法,是广为熟知的分离式驱动模型,由前端驱动
和后端驱动两部分构成。
前端驱动运行在 DomainU 中,而后端驱动运行在
Domain0 中,它们通过一块共享内存交互。
直接 I/O 虚拟化:
让虚拟机直接访问设备硬件。
它能获得近乎本地的性能,并
且 CPU 开销不高。
6.KVM 实现原理(怎样实现硬件虚拟化的监控),内
存虚拟化的基本机制,I/O 虚拟化实现方式
KVM 的实现原理:
KVM 是一个基于 Linux 的半虚拟化系统,是 Linux2.6.20 内核的一部分。
内存
管理和调度由存在的 Linux 内核执行,KVM 则负责其余部分,这使得 KVM 比
其他需要控制整个机器的 hypervisor 简单许多。
KVM 是一个基于硬件辅助的半
虚拟化工具,对性能进行了改进,且支持未修改的客户操作系统,如
Windows,Linux,Solaris 和其他 Unix 变种。
CPU,内存和 I/O 设备的虚拟化
VMM(虚拟机监视器),它负责管理计算机系统的硬件资源。
每次应用程序访问硬
件时,VMM 都会捕获该访问请求
CPU、内存和 I/O 设备的虚拟化
为支持虚拟化,处理器利用硬件辅助虚拟化,引入一种特殊的运行模式和指令,
使得VMM 和客户操作系统可运行在不同模式中,客户操作系统及其应用程
序的所有敏感指令会陷入到 VMM 中。
虚拟化的硬件支持
现代操作系统和处理器允许多个进程同时运行。
如果处理器中没有保护机制,
那么不同进程的所有指令都可以直接访问硬件,很容易导致系统崩溃。
因此,
所有处理器都至少需要两种模式(用户模式和管理模式)来确保对临界区硬件
的受控访问。
运行在管理模式的指令称为特权指令,其他指令为非特权指令。
CPU 虚拟化
虚拟机的非特权指令直接在物理主机中运行
关键指令可以分为三类:
特权指令、控制敏感指令和行为敏感指令。
特权指令
需要在特权模式中执行,当在特权模式之外执行特权指令时会发生陷入。
控制
敏感指令尝试改变使用资源的配置。
行为敏感指令根据资源的配置情况会有不
同的行为,包括在虚拟内存中进行的负载和存储操作。
VMM 运行在管理模式时,CPU 支持在用户模式运行虚拟机的特权指令和非特
权指令,则该 CPU 体系结构是可虚拟化的。
RISC 的所有控制敏感指令和行为
敏感指令都是特权指令,RISC 的 CPU 体系结构是天然可虚拟化的。
I/O 虚拟化
I/O 虚拟化包括管理虚拟设备和共享的物理硬件之间 I/O 请求的路由
选择。
内存虚拟化
客户操作系统和 VMM 分别维护从虚拟内存到物理内存的映射和从物理内存到
机器内存的映射,共两级映射。
客户操作系统仍旧负责从虚拟地址到虚拟机的
物理内存地址的映射,VMM 负责将客户物理内存映射到实际的机器内存上
内存虚拟化机制
客户操作系统和 VMM 分别维护从虚拟内存到物理内存的映射和从物理内存到
机器内存的映射,共两级映射。
进一步,也应该支持 MMU 虚拟化,并且对客
户操作系统透明,客户操作系统仍旧负责从虚拟地址到虚拟机的物理内存地址
的映射,但是客户操作系统并不能直接访问实际硬件内存,VMM 负责将客户
物理内存映射到实际的机器内存上。
8、I/O 虚拟化实现方式
I/O 虚拟化包括管理虚拟设备和共享的物理硬件之间 I/O 请求的路由选择。
实现 I/O 虚拟化有三种方式:
全设备模拟:
一个设备的所有功能或总线结构(如设备枚举、识别、中断
和 DMA)都可以在软件中复制。
半虚拟化:
是 Xen 所采用的方法,是广为熟知的分离式驱动模型,由前端
驱动和后端驱动两部分构成。
前端驱动运行在 DomainU 中,而后端驱动运行
在 Domain 0 中,它们通过一块共享内存交互。
直接 I/O 虚拟化:
让虚拟机直接访问设备硬件。
它能获得近乎本地的性能,
并且 CPU 开销不高。
内存虚拟化的页表机制
由于客户操作系统的每个页表在 VMM 中都有一个独立页表与之对应,
VMM 中的页表称为影子页表。
嵌套的页表在虚拟内存系统中额外增加了一层
映射。
MMU 负责由操作系统定义的虚拟地址到物理地址的转换。
然后,使用
Hypervisor 定义的其他页表将物理内存地址转换为机器地址。
VMware 使用影子
页表进行虚拟内存到机器内存的地址转换。
当客户操作系统修改了虚拟内存到
物理内存的映射时,VMM 会及时更新影子页表。
4.内存迁移的实现功能
内存的迁移实现的功能
内存迁移在虚拟机迁移时很重要,因此内存迁移一个重要的功能是实现虚拟
机的迁移,可以将虚拟机的内存实例从一个物理节点迁移至另一个物理节点
5.云平台处理的应用类型
6.互联网配置云系统的方式(……私有云,)
公有云、私有云、混合云
7.单一系统镜像包括哪些内容
(1)单系统镜像特征:
单一系统 、单一控制、对称性、位置透明性
(2)单系统镜像(SSI)包括单一入口、单文件层次、单一 I/O 空
间、单一网络机制、单一控制点、单一作业管理系统、单一内存空
间和单一进程空间。
(3)SSI 额外特征:
单一作业管理系统所有集群作业能够由任意节点提交到单一作业管理
系统。
单一用户接口用户通过单一图形界面使用集群。
单一进程空间各节点的所有用户进程形成单一进程空间,并且共享统一
进程认证机制。
SSI 集群化的中间件在集群应用的三个层次上,中间件支持各种 SSI 特
征。
管理级该级处理用户应用程序,并且提供
作业管理系统。
编程级该级提供单一文件层次(NFS、xFS、
AFS、Proxy)和分布式共享内存
实现级该级支持单一进程空间、检查点机
制、进程迁移和单一 I/O 空间。
8.虚拟化软件层的基本功能
虚拟化实现的层次
引入虚拟化后,不同用户应用程序由自身的操作系统(即客户操作系统)管理,
并且那些客户操作系统可以独立于主机操作系统同时运行在同一个硬件上,这
通常是通过新添加一个称为虚拟化层的软件来完成,该虚拟化层称为 hypervisor
或虚拟机监视器(VirtualMachineMonitor,VMM)
指令集体系结构级:
代码解释和动态二进制翻译
硬件抽象级:
虚拟化一个计算机硬件资源
操作系统级:
在单一物理服务器上创建隔离的容器和操作系统实例
库支持级:
库接口的虚拟化
应用程序级:
进程级虚拟化、高级语言
(High Level Language,HLL)虚拟机
虚拟化软件层的主要功能是将一个主机的物理硬件虚拟化为可被各虚拟机
互斥使用的虚拟资源。
(这可以在不同的操作层实现)
虚拟化软件通过在计算机系统的不同层插入虚拟化层来创建虚拟机抽象。
通常
的虚拟化层包括指令集体系结构(Instruction Set Architecture,ISA)级、硬件抽
象级、操作系统级、库支持级和应用程序级
编程题
Word count 传统串行处理方式
//没有读取文件
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package wordcount;
import java.util.*;
/**
*
* @author PANJINTIAN
*/
public class WordCount {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String[]text=new String[]{"hello world","hello every one",
"say hello to every one in the world"
};
Hashtable ht=new Hashtable();
for(int i=0;i<3;i++)
{
StringTokenizer st=new StringTokenizer(text[i]);
while(st.hasMoreTokens())
{
String word=st.nextToken();
if(!
ht.containsKey(word))
{
ht.put(word, new Integer
(1));
}
else
{
int wc=((Integer)ht.get(word)).intValue()+1;
ht.put(word, new Integer(wc));
}
}
}
for(Iterator itr=ht.keySet().iterator();itr.hasNext();)
{
String word=(String)itr.next();
System.out.print(word+":
"+(Integer)ht.get(word)+"; ");
}
}
}
读取文件并且打印数量最多的前三个:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package wordcount;
import java.util.*;
import java.io.*;
/**
*
* @author PANJINTIAN
*/
public class WordCount {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
FileReader fr=null;
try{
fr=new FileReader("C:
\\Users\\PANJINTIAN\\Desktop\\wordCount.txt");
}
catch(IOException e)
{
System.out.println("can not read the file.");
}
BufferedReader bf=new BufferedReader(fr);
Hashtable ht=new Hashtable();
String s=null;
try{
while((s=bf.readLine())!
=null)
{
StringTokenizer st=new StringTokenizer(s);
while(st.hasMoreTokens())
{
String word=st.nextToken();
if(!
ht.containsKey(word))
{
ht.put(word, new Integer
(1));
}
else
{
int wc=((Integer)ht.get(word)).intValue()+1;
ht.put(word, new Integer(wc));
}
}
}
int max=0;
int fmax[]=new int[3];
String fword[]=new String[3];
int number;
String key=null;
String Mword=null;
for(int i=0;i<3;i++)
{
for(Iterator itr=ht.keySet().iterator();itr.hasNext();)
{
key=(String)itr.next();
number=(Integer)ht.get(key);
if(number>=max)
{
max=number;
Mword=key;
}
}
fmax[i]=max;
fword[i]=Mword;
ht.remove(Mword);
max=0;
}
for(int i=0;i<3;i++)
{
System.out.println(fword[i]+":
"+fmax[i]);
}
}
catch(IOException e)
{
System.out.println("error happens in reading file");
}
}
}
从文件读入文本并将结果写入另外一个文件中
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package wordcount;
import java.util.*;
import java.io.*;
/**
*
* @author PANJINTIAN
*/
public class WordCo