VMWare克隆后Ubuntu Linux的“No such device eth0”错误
二 2nd
环境:VMWare ESX4.0,Ubuntu 9.10 Server
在本地为Ubuntu创建VMWare的虚拟机后,复制,创建一个新的克隆镜像,启动,网卡无效,显示错误”eth0: ERROR while getting interface flags: No such device”。
原因
新克隆的虚拟机镜像的网卡mac地址已经变更。打开虚拟机的.vmx文件,ethernet0.generatedAddress项记录了该虚拟机的mac地址。
查看所有适配器信息
ifconfig -a
发现除了原来的eth0外,Ubuntu已经将新网卡命名为eth1。
Ubuntu保存网卡mac地址和设备名的配置文件在
/etc/udev/rules.d/70-persistent-net.rules
网卡的网络配置保存在
/etc/network/interfaces
该配置文件中只有原来eth0的配置信息。
解决方案1
移动/删除rules文件。(未验证)
重启后Ubuntu会创建新的rules文件。
将新网卡辨认为eth0,沿用原eth0的网络配置。
如果网络配置是自动获取IP,则无需做其他修改。
sudo mv /etc/udev/rules.d/70-persistent-net.rules
/etc/udev/rules.d/70-persistent-net.rules.old
解决方案2
修改rules文件。(未验证)
sudo pico /etc/udev/rules.d/70-persistent-net.rules
原内容如下
# PCI device 0×1022:0×2000 (pcnet32)
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”,
ATTR{address}==”00:0c:29:50:xx:xx”, ATTR{type}==”1″, NAME=”eth0″
# PCI device 0×1022:0×2000 (pcnet32)
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”,
ATTR{address}==”00:0c:29:36:xx:xx”, ATTR{type}==”1″, NAME=”eth1″
删除eth1的配置,用eth1的mac地址替代eth0的mac地址。
# PCI device 0×1022:0×2000 (pcnet32)
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?*”,
ATTR{address}==”00:0c:29:36:xx:xx”, ATTR{type}==”1″, NAME=”eth0″
重启后Ubuntu同样会将新网卡辨认为eth0,沿用原eth0的网络配置。
如果网络配置是自动获取IP,则无需做其他修改。
解决方案3
修改interfaces文件。(已验证)
sudo pico /etc/network/interfaces
将所有的eth0替换为eth1。
如果是静态地址则同时修改相应设置。
Why and How to Use Netlink Socket
一 29th
Use this bidirectional, versatile method to pass data between kernel and user space.
Due to the complexity of developing and maintaining the kernel, only the most essential and performance-critical code are placed in the kernel. Other things, such as GUI, management and control code, typically are programmed as user-space applications. This practice of splitting the implementation More >
NFS(网络文件系统)的建立与配置方法
一 28th
网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操作。
在嵌入式Linux 的开发过程中,开发者需要在Linux 服务器上进行所有的软件开发,交叉编译后,通用FTP 方式将可执行文件下载到嵌入式系统运行,但这种方式不但效率低下,且无法实现在线的调试。因此,可以通过建立NFS,把Linux 服务器上的特定分区共享到待调试的嵌入式目标系统上,就可以直接在嵌入式目标系统上操作Linux 服务器,同时可以在线对程序进行调试和修改,大大的方便了软件的开发。因此,NFS 的是嵌入式Linux 开发的一个重要的组成部分,本部分内容将详细说明如何配置嵌入式Linux 的NFS 开发环境。
嵌入式Linux 的NFS 开发环境的实现包括两个方面:一是Linux 服务器端的NFS 服务器支持;二是嵌入式目标系统的NFS 客户端的支持。因此,NFS 开发环境的建立需要配置Linux 服务器端和嵌入式目标系统端。
一、Linux 服务器端NFS 服务器的配置
以root 身份登陆Linux 服务器,编辑/etc 目录下的共享目录配置文件exports,指定共享目录及权限等。
执行如下命令编辑文件/etc/exports:
# vi /etc/exports
在该文件里添加如下内容:
/home/work 192.168.0.*(rw,sync,no_root_squash)
然后保存退出。
添加的内容表示:允许ip 地址范围在192.168.0.*的计算机以读写的权限来访问/home/work 目录。
/home/work 也称为服务器输出共享目录。
括号内的参数意义描述如下:
rw:读/写权限,只读权限的参数为ro;
sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。
no_root_squash:NFS 服务器共享目录用户的属性,如果用户是 root,那么对于这个共享目录来说就具有 root 的权限。
接着执行如下命令,启动端口映射:
# /etc/rc.d/init.d/portmap start
最后执行如下命令启动NFS 服务,此时NFS 会激活守护进程,然后就开始监听 Client 端的请求:
# /etc/rc.d/init.d/NFS start
用户也可以重新启动Linux 服务器,自动启动NFS 服务。
在NFS 服务器启动后,还需要检查Linux 服务器的防火墙等设置(一般需要关闭防火墙服务),确保没有屏蔽掉NFS 使用的端口和允许通信的主机,主要是检查Linux 服务器iptables,ipchains 等选项的设置,以及/etc/hosts.deny,/etc/hosts.allow 文件。
我们首先在Linux 服务器上进行NFS 服务器的回环测试,验证共享目录是否能够被访问。在Linux服务器上运行如下命令:
# mount –t NFS 192.168.0.20:/home/work /mnt
# ls /mnt
命令将Linux 服务器的NFS 输出共享目录挂载到/mnt 目录下,因此,如果NFS 正常工作,应该能够在/mnt 目录看到/home/work 共享目录中的内容。
二、嵌入式目标系统NFS 客户端的配置
在Linux 服务器设置好后,还需要对客户端进行相关配置。在配置内核时选择Load an Alternate Configuration File输入配置文件的路径和文件名添加内核对NFS的支持:
选中networking options-》IP:kernel level auloconfiguralion项
选中file systems-》network file systems-》下的root file system on NFS
和NFS file system support重新编译内核下载bootloader和kernel到开发板上
在嵌入式目标系统的Linux Shell 下,执行如下命令来进行NFS 共享目录挂载:
# mkdir /mnt/NFS //建立Linux 服务器输出共享目录的挂载点;
# mount –t NFS 192.168.0.20:/home/work /mnt/NFS –o nolock
# cd /mnt/NFS
# ls
此时,嵌入式目标系统端所显示的内容即为Linux 服务器的输出目录的内容,即Linux 服务器的输出目。
录/home/work More >
杀生丸和铃的对话
一 26th
35 名刀所选择的真正主人
是杀殿和铃的第一次相遇,杀殿又一次抢夺铁碎牙失败,还好是天生牙结界保护了他。受伤到一处树林休养,这个时候铃出现了。杀殿以为是妖怪,很恐怖地变身前表情。。。铃没有被吓倒,反而拿了水,鱼,蘑菇过来(莫非她以为杀殿是鱼???)
杀:你别白费心思了……人类的食物不合我胃口
铃:…(什么也没有说)
这个时候杀殿真的还是那么冷漠啊……
后来还在晚上为杀殿偷鱼的时候被人打,脸被打伤了。原来铃亲眼目睹了自己全家人被土匪杀掉的情景,一个人孤苦生活,很自闭,不说话也不哭。咳,很可怜的MM啊~~没有偷到鱼,铃只好拿点象草根之类的东西过来???!!!
杀:我不要…我已经说了什么都不要….
铃:….(很失望的表情)
杀:脸上的伤是怎么来的? 不想说也没有关系…..(语调慢慢柔和了)
铃:……(呲牙咧嘴却无比天真烂漫的一笑)
杀:(扭过头来看她)…有什么好高兴的….只是问一下情况而已…
铃很快乐地回到村庄 .这个时候钢牙的狼群却来攻击村庄. 铃往杀殿所在的林子中跑(这个时候就已经觉得杀殿是可以依靠的人了呢),结果还是被狼群咬死. 杀殿此时已经复原,走出了林子,闻到了狼和血的味道,又回去了,看到了铃的尸体.
杀: (拔出了天生牙)原来如此…能看见,这些家伙是那个世界的使者吗…要试试看吗,天生牙的力量…..
说完就挥了下去.其实可能很大一部分都是出于尝试心理,但后来弥勒也说过,没有一颗救人的心,天生牙也是没有用的….杀铃缘分可能是天注定呢….杀殿居然救了他最厌恶的人类…..然后就把铃抱起来….啊..好羡慕….
杀:哼…天生牙….让我救了人类吗….
自己都觉得诧异呢….
52 无法阻止的妖怪本性
杀殿好象是专门去阻止发狂的犬夜叉呢….
邪见发现杀殿又自己走掉了很抓狂呢….这一切都是因为这个人类女孩吗,真是的,人类女孩随便丢掉就好了啊……
后来杀殿回来…..
铃:啊…杀生丸大人回来了….
杀:铃,你有乖乖的吗? (天,经典台词,百看不厌)
铃:我和啊恩都很乖的,可是邪见大人好象很消沉….
66 奈落的结界 神乐的决心
刚一开始….月黑风高….(??!!)(因为是朔日啊…..)一颗流星突然飞过…..铃马上双手放在双肩上,开始许愿
铃: 我能永远跟杀生丸大人在一起….
杀: 铃,跟上来…(语气真的很温柔呢……)
75 豹猫四犬王的阴谋
一开始….
铃: 这是哪里?
邪: 被称为龙骨精的大妖怪封印之地…..但是好象什么也没有发生过….杀生丸大人,你确定这是犬夜叉干的吗?
杀: 我不知道是不是他干的, 不过…..
邪: 那个….龙骨精真的是被犬夜叉打败的吗?您父亲毫不容易才封印了龙骨精,犬夜叉竟然打败了他…..
后来铃和邪见下水抓鱼, 杀殿在一旁静静地看….TV里杀殿就是一直这么专注地看着铃的吧……
铃:杀生丸大人..看啊,好多鱼….(好可爱 ….)
杀:铃,和啊恩在这里等着.
铃:好!我会等着的!快回来哟…..一定哟!!!
77 妖猫族与牙之双剑
在最后….很经典的铃的歌……
铃: 在山川, 在森林, 在风中, 在梦里 你在哪里啊,杀生丸大人
还有邪见大人在跟随….
杀: 铃…(出现的恰倒好处呢, 我怀疑他一定是在旁边把歌都听完了才说的…)
铃: 啊, 杀生丸大人,….
杀: 我们走了…..(真的是很温和….)
铃: 恩!! (继续唱)我会一直等待着您回来….杀生丸大人,请快回来了吧……
很温馨呢….
79 邪见的铁碎牙抢夺计划
很好玩的一集, 邪件还回忆了最初见到杀殿的情况…….杀殿为什么要杀掉所有挡路的人呢…..后来改变得还真是大呢…..
铃:…..(肚子咕唧叫)
杀:铃!
铃:恩,杀生丸大人!
杀:如果你饿了,就自己去找点东西吃….
铃:好~~
多样化服务质量需求下分布式对象存储系统的设计
一 21st
摘要
近年来,云存储和对象存储是存储界新兴的两门技术。云存储平台由一系列大规模的相互关联的数据服务器组成,为用户提供稳定而且巨大的存储空间。在传统的存储设备中文件单纯以数据块的形式存放在存储设备中。存储设备维护从逻辑数据块到物理数据块的映射。存储设备管理数据块,但是并不能识别文件,和文件相关联的元数据只是文件系统的一部分。用户对文件的请求被传达到设备,但是用户对服务质量的需求并没有反映到设备上,在设备调度的时候并没有正确反映出用户需求。这篇文章主要是想从服务质量的角度,使用面向对象的分析方法来讨论集群和网格存储系统的设计。这里集合了多篇看似不同类型的文章在不同方向上所做的努力,想找到一种唯一的存储平台。这种存储平台下,所有的数据被组织到一起供人类分析和轻易使用。当前,一些深刻的变革正在发生,设备变成了智能设备,数据对象也有了自主的思想和行为。但是这些对象的群体性行为却很少被提及。构想中的系统,在这样一个由多种不同类型的对象组成的生态系统中引入了群体意识。由单纯的块存储发展到对象存储,存储设备认识了数据对象,现在我们把所有数据对象当作一个群体,更进一步来优化存储系统。在构想中的系统中,我们考虑的是存储系统对服务质量的满足,而不单单是提高吞吐量。
1. 服务质量的分类
存储服务的质量是在早期的存储系统中没有明确的一个概念。存储系统发展到现在存储容量和性能得到了很大的提升,但是围绕着存储系统的应用也是同步增长并对存储系统提出了更高的甚至是无上限的要求。现今的存储系统的应用表现在几个方面:一是应用呈现多样化,如,视频、游戏、文档、邮件、即时消息保存、博客、微博客等等;二是客户数量增多,现代人更多的接触网络使得网络应用迅速普及,同时对分布式或者云存储云计算等提出了更高的要求。面对这样庞大的数据请求,我们必需对它们进行一定的分类。人类在看待纷繁复杂的客观世界的时候,也是对各种事物先进行分类,并根据分类给予定义。正所谓名不正则言不顺。
事实上在早期的存储中,对数据请求也是有一定在分类的,只不过对这些所有请求可能都划归为了一类,进行了统一的操作和管理。传统的文件系统在进行文件服务的时候并不意识到是由哪个应用在发起请求,而在下端则进行了统一的磁盘调度管理。对文件检索以及分布式的文件系统更是没有做足工作。后来在NAS的基础上出现几种网络文件系统,并针对特定的应用环境做过一定的优化。但是其本质思想仍然和传统的文件系统一样,不能应对多样化的服务质量需求。由于文件数量爆发性增长,对文件检索的要求越来越越高,检索也从文件级别深入到语义级别,传统的文件系统在文件检索方面同样表现不好。现今的存储架构中,网络以成为其中非常重要非常关键的一个组成部分。带宽作为一种资源和存储资源一样,也要受到重视。一个存取请求应该连同对服务质量的需求一起发送给存储设备,让存储系统能在后台对资源做出一个最优的调度策略。
对于现今复杂而不断变化的存储系统及前端请求,使用面向对象的设计与开发方法可能更有效并且更易于使用和扩展。在对象存储系统中,数据对象的请求要比块级请求或者文件请求能传送更多的信息给下层,包括服务质量需求等,同时又给了更多的调度自由给下层,所以下层可以更好的来优化调度。在传统的存储架构中,当多个客户同时发起文件请求或者块级请求时,作为存储设备并不知道这些请求对服务质量的要求,通常只对先到达的请求做出响应,这显然不能满足多种应用下多种服务质量的需求。在应用对象存储的系统模型中,可以对服务质量大致做三个级别的区分:
对象级服务质量。对象级服务质量是针对最一般类型的服务质量需求说的。例如,对于一个视频文件对象,最一般的操作就是文件的播放,这一操作需要保证从存储设备到客户端一个比较稳定的4M/s的数据传输带宽。
对话级服务质量。同样对于视频文件来说,我们定义了最一般的播放操作的服务质量需求,这时给它一个4M/s的带宽已经足够了。但是对于视频文件的复制、上传和下载等操作,我们还需要定义特定的对话级的服务质量,在这种请问下可能需要分配不同的带宽。由于这种特殊的服务质量需求只存在于这种特殊的对话期,所以命名为对话级服务质量。
操作级服务质量。一个对话中可能要完成很多个操作。在更特殊的情况下,客户应用程序可能会在特定操作下请求一定量的数据,而这种操作可能有一个特定的服务质量需求,可以给此种操作定义操作级服务质量。
这里定义了三个级别的服务质量,对于具体的文件对象来说又可以灵活运用。在此基础上可以加上权限管理,例如对于一般权限只给予对象级服务质量,而对话级和操作级服务质量需要更高的客户权限。另外,部分客户可能需要统计意义上的服务质量,例如他们可能需要一定时间内的平均带宽或者平均响应时间。还要注意到,服务质量的级别和服务质量的属性是相互独立的。例如,上面对于视频文件的服务质量更多的考虑到带宽和带宽波动,但是对于一个游戏服务器更多的可能还要考虑到延迟。对于不同的服务质量属性可以在不同的服务质量级别上给予不同的定义,这相当于一个二维或多维的数组。
在给不同种服务质量属性在不同服务质量级别给予定义后,一个客户在请求某一个文件对象时,同时会告知对象存储设备他对服务质量的要求。对象存储设备在对客户权限进行验证并批准该请求后,在满足服务质量的前提下还要在后台做一定的资源调度上的优化。
2. 数据进化与动态资源管理
2.1 数据对象的进化
数据对象在其出生到死亡的生存期内并不是一成不变的,而是不断发展变化的。我们称这种发展变化的行为为数据进化。数据进化主要表现在三个,这三个方面也是数据对象的三个行为:
数据更新。客户在使用数据对象的时候会进行数据的更改。这一行为在分布式的架构中变得有些复杂。如果有多个用户在同时更新数据对象,如果数据对象分布在多个存储设备上,如果数据对象在多个存储服务器上存在镜像,在这些情况下简单的数据更新将不能满足需要,必需制定一个数据更新的规则来约束用户行为。我们可以把数据对象分解成很多小的数据对象,分别存储在不同的存储介质上,这样就可以增加在读取数据时的并行度。另外,在这种方式下,如果多个用户同时请求修改数据,可以把各个小的数据对象的修改权限分配给各个用户,每个小的数据对象在同一时刻只能有一个用户获得修改权限。当服务器得到各个用户的修改行为后,再更新服务器上的数据,同时把各个用户的修改行为发布给当前请求该数据对象的用户更新各用户得到的数据。
数据生存状态变化。数据对象在生存于存储介质上的。在分布式系统中,一个数据对象可能被分解为许多小的数据对象分散的存储在不同的存储介质上。也可能在多个存储服务器上留有数据的镜像。数据对象有其一定的健壮性,当数据对象在不同的存储设备上有多个备份或者有较多的冗余编码,我们就可以认为这个数据对象是健壮的。一个数据对象越健壮,数据遭到丢失或者破坏后恢复的可能性越大,但同时要对这个数据对象做任何更改也将更加困难。数据对象的健壮性也跟其所生存的存储设备的健壮性有关。一个数据对象在生存期内其健壮性是可能根据需要或系统运行状态发生变化的。对一个数据对象的访问除开网络带宽等,在存储设备上的访问速度也会影响读写性能。冗余编码越多可能造成的读写时的计算开销越大,也使I/O性能降低。把数据对象分解为小块数据对象存储可增加读写时的并行度,对提高I/O性能很有帮助,但是会减小多个I/O之间的并行度。数据在存储介质中的连续性会影响寻址的速度,但是也要视情况而定。当用户请求一个视频对象时,一般只需要4M/s的带宽,远远小于一个存储系统的带宽。这时把视频数据对象连续存放在存储设备中以减小寻道时间意义也不大,因为在为该视频对象请求服务的同时存储系统必然还要服务其它的客户请求。找到真正需要连续访问的数据可能才是行之有效的选择。
属性变化。数据对象属性的变化可能有很多方面。数据对象的属性包括了一些和数据检索相关的属性,这些属性造成了数据对象的语义相关性。这种语义可能是人为添加的,比如标签,也可能是系统经过数据深入挖掘自动生成的主义相关。
2.2 基于瓶颈的带宽控制
一个存储系统所拥有的资源主要有存储介质和网络带宽。要设计一个自适应的存储系统云,就要根据系统运行状态自动调整资源的调度。而调度的依据就是找到系统运行的瓶颈,并且找到系统优化的方法。必需有一种机制能把系统各部分的运行状态反馈给控制系统。
可能产生瓶颈的地方主要包括三个部分:客户端网络带宽、系统网络带宽和存储设备带宽。对各个瓶颈段分析如下:
如果客户端网络带宽的总和大于存储系统的网络带宽,那么瓶颈就在系统带宽上。解决的办法只有减小数据质量,或者减小分配给客户的带宽,或者在存储系统云中的其它服务器上生成数据镜像,由其它服务器同时提供数据服务。
如果瓶颈出现在存储设备上,就得增加数据访问的并行性,数据对象分解成很多小的数据对象并且尽量让数据对象连续存放在存储介质上。
如果瓶颈出现在客户端网络带宽上,则可相应减小分配给客户的带宽,让系统有更多的带宽给其它客户服务。
2.3 数据对象的自我迁移和复制
一个数据对象可以自己动态的复制和移动自己(的身体),由系统自己决定是否这样做,而不是由特殊的工具。为了满足新的性能表现,可靠性、健壮性和效率等要求,一个数据对象可以自发的移动自己到新的设备上、或者在新的设备上制作一个副本或者重组自己在某个设备上的数据块分布情况等。
设备对象和数据对象的关系并不是谁从属于谁,而是一个数据对象寄生在设备对象上。我们可以用一个比较形象的例子来说明这个问题。我们把数据对象比作一个集体,一个集体由多个个人组成,正如把数据对象分成小的数据对象分开存放一样;设备对象就像房子,由多个单间房子一起组成一栋楼,由多栋楼组成一个楼群,这些就像更高级的设备对象。我们把人可以一起住进单间房子里,但是召唤这些人的时候他们必需得从一间房子里出来,必然花更多时间。如果每个人分开住,召唤的时候他们一次就可以全部从房子里出来。但是如果这些房子都在一栋楼上,他们可能在楼道发生拥挤,这时可以把他们分开住进不同的楼房子。这个调度过程完全由这个集体的领导完成,由这个集体自己优化,用户要做的只需要去请求这个集体。如果在远处的某个用户要请求这个集体,那么在这个路程上就得花费不少代价,这时就可以在离这个用户比较近的公寓制作和一个这个集体一样的副本,这个过程也由这个集体自己决定。一个能自动完成这些调度的数据对象就是一个智能的数据对象。
数据对象不仅应该被视为有独立个体行为的对象,它同时还应该有其群体行为。优秀的数据对象才得到更多的进化,才能占据更优的存储设备。
2.4 发生数据转移复制的几种情况
数据对象能做的调节就是移动和复制自身,来提高性能以满足一定的用户需求。发生数据转移或复制的情况有下面几种:
磁盘调度效率降低。不论数据是以什么形态组织在存储设备上,随着存储设备使用时间的变长,都会导致数据对象在磁盘上的分布变得散乱。这将会导致磁盘寻道时间变长,影响磁盘工作效率。数据对象要自发的定期整理碎片,或者在一定条件的触发下整理磁盘碎片。
数据服务器太远。分布式存储系统就是要让使用者无论在何处都可以快速的访问相关的数据资源。由于使用者的地理位置的不同,可能某个用户要访问远处的某个数据对象,网络的传输将会影响用户得到的性能。数据对象要识别这种因为地域差异导致的性能下降,统计用户使用情况后再决定是否在离用户较近的服务器上创建一个同样的自身拷贝或者决定是否将自身移动到这个服务器上。当前社会人口流动性大增,用户可能在某一地域性服务器上存放了个人数据。但是当他移动到别一地域时,这一数据就变成了远程数据,对其访问将受到远距离网络传输的影响。数据对象需要能根据访问者的这种数据变化,积极的移动到用户所在地域的服务器上。或者如果用户跨跃较大的地域,就应该在不同地域的服务器上创建相同的数据副本。当然,这一数据对象的移动或者副本的创建也可以在受权的条件下完成,或者可以在用户手动操作的情况下完成。
存储设备对象对数据块的存储位置优化。对于磁盘调度来说把数据对象完全按顺序存放也许并不是最优的性能优化办法。例如,对于视频文件的播放需要4M/s的数据传输率已经足够,不一定要保证数据连续存放就可以达到这个传输速率。如果有两个视频文件都需要4M/s的传输速率,而磁盘连续访问的数据传输速度正好可以达到8M/s,这时何不把两个视频文件切碎后交叉存放,这样在磁盘连续访问的时候就可以同时很好的服务两个用户请求。如何实现数据块最优化排序在算法上存在一定的难度。是找到语义相关联对象还是找到性能需求相吻合的对象放在一起还需要争论。
2.5 设备对象的属性
在设计这样一个分布式对象存储系统的时候,是使用虚拟存储设备还是真实存储设备呢?使用虚拟存储设备相对于使用物理存储设备没有的好处有:虚拟存储设备的容量是可以变动的;它的生存环境也是可以夸多个物理存储设备;可靠性等都可以优于物理存储设备。但是使用虚拟存储设备将会在系统层次上多加一层,并增加系统复杂度,所以并不一定是很好的选择。增加虚拟存储设备这样一个中间层抽象,由于其属性的不确定性,反倒给数据对象识别宿主的属性带来困扰。所以放弃虚拟存储设备这样一个中间层可能是更好的选择。而且虚拟存储技术的相关理论还可以很好的运用到数据对象和设备对象的设计中来。在构想中的系统里,数据对象是有其自主行为的。它们识别设备对象,根据设备对象的属性来选择是否“寄宿”。设备对象同样拥有管理数据对象的一定的权力。所以我们有必要给多种多样的存储设备分类,并确定它们的属性。我们认为存储系统总是处于工作状态,所以更多的要分析其动态性能而不是其静态性能。
剩余容量。我们分析的是剩余容量而不是设备总的容量,总的容量并不是数据对象能否存储在设备中的判断依据。
剩余存储带宽。同上面一样,我们需要的是获知剩余的存储带宽。但是这是一个无法准确预计的值。存储总带宽是跟用户请求相关的,和数据在物理存储设备上的分布情况有关。要想得到一个合理的估计需要得到一定的统计数据。
剩余网络带宽。存储设备总是接在网上的,用户通过网络访问数据对象。网络带宽也是存储系统的资源之一。网络带宽也同样是个不确定的值,跟当前网络的阻塞请问有关。要尽量避免阻塞,合理的利用网络。
位置属性。网络速度具有一定的区域性质。存储设备的位置也会影响数据对象的访问。
以上属性是由存储系统中的设备对象中总结而来,但是并不是每一种调和对象都包含上面所有属性。设备对象大致包括:单盘对象、RAID对象(包括RAID1、RAID2等,这些RAID对象有它们特殊的级别属性),光纤对象(在有光纤组成的存储系统中,光纤同网络一样是存储系统中一种需要适当分配和调度的资源),网络设备对象等。
3. 对象存储集群架构
我认为,当前存储系统的架构,在硬件结构的组织上没有发生太大变化。对存储所做的努力大部分集中在其逻辑结构上,集中在其资源管理的算法上。为了能够支持从任何地方任何时间访问数据对象,我们把数据服务器按地域组织。每个地域包含一个区域性的元数据服务器,集中管理该区域内的数据对象和客户的信息。
一个区域性的元数据服务器维护所有在其范围内的所有对象,包括管理安全保护相关信息以及区域内及区域外的数据对象的访问权限信息。区域性的元数据服务器为每个数据对象提供其所在设备对象的查找服务。同时,区域性的元数据服务器还管理所有在该区域注册的设备对象,并保存所有用户访问信息来为数据迁移或复制等提供依据。区域性的元数据服务器是分布式工作的,当一个数据对象在一个元数据服务器上查找失败时,将会到其它区域的元数据服务器上查找。
4. 总结
上面所描述的存储系统架构是在综合几篇文章的思想的基础上,加上我自己的猜想架构而成的。基本含盖了一个完整的对象存储系统云的设计。主要创新的思想是运用了类与对象的分析方法,让各种对象在抽象的层次上生动起来。所有对象,包括各种不同属性的数据对象和设备对象,在抽象意义上都似乎有了自主的意识和行为。由这些对象又组成了一个完整的动态的系统,不断的根据用户的需求的变化和内部属性的变化做着调整。在系统的基础上,它们又有了群体意识,合作起来以求达到最好的服务质量。这个系统的设计过程是脚踏实地的,其实现也是有根据的,不是一个单纯的幻想。
5. 参考文献
David H.C. Du. University of MinnesotaIntelligent Storage for Information Retrieval. Proceedings of the International Conference on Next Generation Web Services Practices (NWeSP’05), 2005.
Yingping Lu, D. H. Du, and T. Ruwart. Qos provisioning framework for an osd-based storage system. In Proceedings of the Conference on Mass More >
普适计算的编程模式
一 21st
摘要: 介绍在普适计算的编程中遇到的问题。从传统的编程模式讲起,介绍了几种当前流行的普适计算编程模式,并比较它们的优劣点。最后,对各种编程模式做了一个总结。
关键词:普适计算;编程模式
1、前言
导致普适计算编程困难的一个很重要的原因是执行中的程序的运行环境随着用户的不断移动而一直在变化,甚至特定地理位置中的环境变量也随着时间推移而不断的在变化。这导致包括软件应用和设备功能在内的服务不能保证可用性。这就需要程序行为要能够频繁的随着环境的变化而调整,以保证其可用性。这篇文章将讨论在普适计算中适用的编程方法。
2、普适计算在编程上遇到的挑战
普适计算给我们带来了对未来美好生活的向往,但是同时也让我们面对一些棘手的问题。其中一个非常显著的问题是,用户的移动性和各种新设备的不断出现导致程序的运行环境不断的在发生变化。这导致很难确定服务包括软件服务和硬件设施服务的可用性。快速变化的运行环境需要程序不断根据当前环境调整自身行为,是导致困难和挑战产生的主要原因。
总体说来,建立这样的应用需要两部分协调工作:环境信息的收集、管理和传送;应用程序运行逻辑。做这样的划分可以极大的减小开发者在收集信息花费的精力和提高程序的工作效率。
3、传统的编程模式
在讨论普适计算编程之前,先回顾一下普适计算出现之前的编程模式,从中得到一些启发。
在汇编语言编程中所有底层机器的细节都没有得到屏蔽,程序员不得不理解和操作各个CPU内部寄存器和标志位。在比较两个数的大小的时候,我们关心的是数据间的逻辑关系,而不是一次减法操作会影响到哪些标志位。
在C语言编程中,程序员从复杂的寄存器操作中解放出来,可以精力集中在关注数据间的关系。然后提出数据结构的概念,其主要思想有三个:
数据赋予其意义后它才有了生命;
数据可以而且经常需要按一定结构组织起来描述一个事物;
程序可以分解成数据和对数据的操作。
C语言被称为面向过程的编程语言,站在面向对象编程的对立面。但是事实上,我们在使用C语言的时候都是在做模块化的程序设计。把每个工作主题分成一个模块,并给模块外部提供接口和服务。对于模块的使用者来说,不需要知道模块内的工作细节。
在模块化程序设计中,每个模块维护自己内部的数据。内部数据不论是全局还是局部都不会对其它模块有影响。每个模块完成自己相对独立的功能,并给外部提供接口和服务。 当模块同时为几个对象提供服务时还可以为每个对象创建其私有数据。那么对象和私有数据难道只能出现在C++或Java等面向对象的编程语言里?实事上在模块化的编程中已经产生的了封装和对象的概念。面向过程的C语言也能够在一定程度上实现“对象化的编程”。
面向对象的程序设计是一种思想,而不仅仅局限在C++或者Java。一般面向对象的编程语言和面向过程的编程语言相比有下面几个优点:
对数据和操作的封装更为严密。
增加了继承、多态和重载的概念。
面向对象的程序设计集合了之前程序设计理论的很多优点。但是对面复杂多变的普适计算应用环境仍然不能满足需求。
传统编程模式应用在普适计算中表现出它的不足。主要是因为,程序运行方式要随着环境变化而变化。不论是面向对象还是面向过程,都要依靠条件跳转实现。如果条件跳转情况复杂程序就变得复杂,不能针对特定应用环境独立开发。程序员需要考虑复杂多变的应用环境,使得程序开发无法进行。而且一旦有任何新的环境变量或者需要支持新的设备还要重新编写程序。
4、普适计算的编程模式
由于传统编程模式无法解决在普适计算中的程序设计中的复杂性,一些适用于普适计算的编程模式被提出来。这些编程模式关注于解决在较高的抽象层次上支持动态的变化的运行环境。让程序员可以真正关注程序运行的逻辑。
4.1基于环境变量的编程
在这种开发模式中,开发者把环境变量的定义和特定环境下和程序行为拆分开来。程序员只开发特定环境下和程序,然后组装起来运行。 在基于环境变量的编程模式中,使用内容过滤操作来选择特定程序组件去执行,这个内容过滤操作是基于环境信息和用户需求的。内容过滤操有两个问题要解决:一是使用什么方式来选取程序组件;二是如何切换程序组件。在这种编程模式中,开发者需要知道资源的状态,这显得有些不切实际而且定义大量的不同环境变量下的程序使问题变得非常复杂。而且环境变量情况复杂,经常有未预计到的情况出现,程序员将疲于应付枯燥的环境变量。
4.2基于设备间的关系
这种编程模式试图从较高的抽象层考虑问题。程序运行的环境不断的在变化:不停的有用户迁移;在同一地理空间也因设备的加入和移出而发生变化;随着技术的提高空间中的设备能力也会得到提高。所以很明显我们需要管理好空间中普遍存在的资源。
我们把不同的资源对应更具体的应用。在传统的编程中,程序员被普适计算中复杂的情况过度限制了,导致他们不能清晰的表达他们的需求,他们经常疲于处理细节和同步问题而不知道如果没有这些问题他们到底需要的是什么。这种编程模式通过强调程序元素之间的关系来更好的适应环境的变化。一种应用环境对应着一系统组件的组合。环境的变化对应这种组合关系的变化。
这种模式把关系分为:对象关系、设备关系和抽象关系。
5总结和展望
这篇文章从不同的抽象层讨论了各种编程模式。最有生产效率的编程环境是那些允许你在不同层次上进行抽象的编程环境。程序设计最一般的最有效的模式就是让程序组件化,让各个开发人员关注特定的事物,而不是面对着整个复杂的系统束手无策。在组件化的设计中,让各个功能或设备独立又协调的工作在一起组成一个大的可伸缩的自动调整的系统,这就是普适计算要达到的目标。
6参考文献
[1] Qingsong Yao, Shan Chang, Yong Qi, Li Ming. New Programming Model for Pervasive Computing .
[2] JuanF.Navas, Jean-PhilippeBabau, OlivierLobry. MinimalyetEffectiveReconfigurationInfrastructuresin Component-BasedEmbeddedSystems.
新购虚拟主机
一 21st
域名已经续过费,现在也购了主机。这个站现在访问速度还不错,只在教育网内访问访问有问题,不过用搜狗浏览器也可以访问。
我一直是不大称职的博主,对不起独立博客的称号。建站的目的也只因对技术的向往,而不是传播我不太成熟的思想。这里不得不提到yo2,挂了这么久真是令人大为失望。一直寄希望国内能够走出个yo2,虽然wordpress不是出自yo2之手,但是还是希望国内能够有个令人带有激情的公司。yo2休克,但是来自中国的后来人迟早还是会冲上来的。
yo2挂了这么久,我也是一直以来都没有理会过我的小站,就算前几天想要从自己的网站上找资料也是束手无策。话说google欲离开中国,却终于没有停止在中国的服务。我也该效仿一下,把这个服务器给重建起来。博客数据好在乘着yo2抽风的时候备份了一下,但是友链却丢了。开博怎能没有友链,正所谓无兄弟不游戏,我会再把各位朋友的链接找回来,多多益善。我的挑战书还没开始写,不会这么早挂掉。希望等到梦想实现的那天,全世界都充满斗志。
李小龙《龙争虎斗》
一 21st
李:来,踢我。踢吧。
徒弟踢出一脚。
李:这不是表演,我跟你说过,要利用你冷静的头脑。再来一次。
徒弟:嘿。(踢时大叫一声)
李:我说的是要利用你冷静的头脑,而不是愤怒,我们再来一次。
李:慢点,慢点,好,你放松了。你现在觉得怎么样?
徒弟:让我想一想。
李:(马上用手拍徒弟的脑门)别想,快点。反应要快,就像是直觉地把手指向月亮。(再次拍徒弟脑门)记住,反应慢了就只能够看到手指,而决不能看到月亮的光华了。你现在明白了吗?
徒弟笑着微微点头,然后向李鞠躬。
李:(第三次拍徒弟脑门)你在鞠躬的时候,眼睛不能够看自己,而要看对方。
李小龙的哲学
十二 21st
——敌不动,我不动。敌预动,我先动。
——尽其在我,简单是美。
——清空你的杯子,方能再行注满。
——以无法为有法,以无限为有限。
——如果知识随着传统模式走,你就只能生存在传统的阴影下,了解的只是老路子,你并不了解你自己。
——对某件事视作毫无价值,也是勇敢的表现;对某件事视为绝对成功或视为当然时,这同样是勇敢的表现;但是如果对某件事束手无策的话,那么便是畏缩了。对敌亦是一样,只要用信心去鼓舞自己,纵使失败,精神上仍是胜利的。
——别人告诉我说一个天才可以创造自己的机会,事实上,一个人的深切期望不但可以创造自己的机会,甚至可以创造自己的天才。
——我绝不会说我是天下第一,可是我也绝不会承认我是第二。
——修练功夫的目的不是致力于击破石块或木板,我们更关心的是用它影响我们的整个思想和生活方式。
——仅学习某门派某人之机巧,即使发挥至极限,也非真正的搏击。所谓成熟是指自我最深的觉悟,而非以做观念上的俘虏。
——一个人有了自尊心,他才可以明确地去“指导”自己向正确的道路迈进。所以,人应该不断地维持自己的尊严,尊严可以发掘自己的潜能,和促进自己的工作效果。不但这样,我们每天要重复估计自己的潜能,看看是否有所增加。
——有时,尊严是不容易得到的,为了某些利益,可能会抛弃一切尊严;或为了虚名,尊严也不顾了。总括地说,世人一般所热心的是沽名钓誉。
——沽名钓誉或妄自尊大均不足为法,所以人生的第一件大事便是了解自己。
——自我了解是最为困难的,我们很容易发觉到想发挥自己的才干实际上是满途荆棘,所以一个有天才的人应该尽量发展他的事业,迫使自己去创造新业,所得的成就是万世不没的。
——一般人最大的通病便是太自满,一味以为自己了不起,于是便缺乏上进心了。另一种人则太不知足,贪得无厌,毫无自律可言,更谈不上自我警惕。贪婪的人无法掩盖他自己丑恶的面目,他的身体是透光的,他生活在戏剧化的人生里,结果使自己陷于不能自拔的深渊。
——想要增加自己的信心和尊严,只要多作实际行动,实际行动可以表现自己的才干,同时你会懂得和洽地与人相处。
——光是知道是不够的,必须加以运用;光是希望是不够的,非去做不可。
李小龙在西方受到广泛尊崇的重要原因,是他不仅有高超的武术功力还拥有武术的哲学精神。现在世界上仍然有许多以李小龙为宗师的会馆,他们一般遵循李的武学思想,把练功夫分为三个层次,一是思想,二是功夫知识,三才是技巧。有思想的拳头造就他的不凡。这提示我们,一切、总是有人跑来问我:“李振藩——你真的有那么厉害吗?”,我说:“噢,如果我告诉你我很厉害,也许你会说我在吹牛。但是如果我告诉你我并不厉害,你肯定知道我在撒谎。”
——随着时间的流逝,英雄人物也和普通人一样会死去,会慢慢地消失在人们的记忆中。而我们还活着。我们不得不去领悟自我,发现自我,表达自我。拥有使用武力的权力者,官员,军人,警察,法官等,一定要由明智的思想所控制。没有理智的武力很可能会变成暴力。
——我们为什么会害怕?这是由于我们做事不能当机立断,一旦犹豫不决的时候,我们便会畏缩。但如果能够对某件事作明确的判断时,不论有无价值,我们都不会畏缩。
——想要增加自己的信心和尊严,只要多作实际行动,实际行动可以表现自己的才干,同时你会懂得和洽地与人相处。
——让你的思维如水一般没有束缚,招式变幻的伟大可以在水中得到启迪。
世界上最柔的东西莫过于水,然而它却能够穿透最为坚硬的东西,可以存在于任何空间,没有什么能够超越它,例如滴水穿石,这就是“柔德”所在,所以说弱能胜强,柔可克刚。