缓冲区计算(精选十篇)
缓冲区计算 篇1
燃气- 蒸汽联合循环发电与常规火力发电相比, 具有热效率高、自动化程度高、低污染、启停速度快、调峰性能好、投资建设周期短、占地面积小等一系列优点。天然气燃气- 蒸汽联合循环是理想的发电方式。随着燃气- 蒸汽联合循环发电优势的逐步体现, 世界各国燃气轮机发电装机容量逐步增长[1]。
常规联合循环机组通常以天然气作为主燃料, 燃油作为备用燃料。机组运行过程中, 当天然气供应出现中断时, 需要切换到备用燃料运行。为了有效防止燃机负荷降低过快, 保证机组安全运行, 防止电网波动, 为故障排除赢取时间, 需要设置燃料缓冲系统。
2 系统设计
某燃气- 蒸汽联合循环电站配置为三台阿尔斯通Alstom GT26 燃气轮机, 三台余热锅炉, 两台阿尔斯通生产的300MW级汽轮机。机组燃料为天然气, 备用燃料为轻油。因电站地处中东地区, 环境干球温度较高, 为了提高机组出力, 燃机设置了蒸发冷却和高压喷雾相结合的进气冷却系统, 余热锅炉设置了补燃系统。因阿尔斯通Alstom GT26 燃机燃料切换时间较长, 设置了燃料切换缓冲系统, 流程见图1。
燃机燃烧天然气正常运行时, 增压机前后隔离阀打开, 缓冲系统增压机工作, 把来自供气母管的天然气增压缩到设定压力。当缓冲系统高压管束达到整定压力时, 高压管束前隔离阀关闭, 增压机停止运行, 缓冲系统储气完毕。当天然气供应中断需要进行燃料切换时, 高压管束后隔离阀打开, 天然气经减压阀减压到燃机入口压力要求, 继续为燃机提供天然气供应, 直至燃机完全切换到燃油工况运行。燃料切换缓冲系统可保证燃机在燃料切换时平稳运行, 保证机组安全运行, 防止电网波动。
3 燃料切换曲线
Alstom GT26 燃气轮机典型燃料切换过程见图2。
Alstom GT26 燃气轮机典型燃料切换过程如下:
(1) 燃机在天然气运行工况下降负荷, 由满负荷运行降到60%-95% 负荷之间运行;
(2) 启动燃油推进泵, 燃油注水系统, 切换至备用燃料轻油, 天然气流量逐渐减小, 燃油流量逐渐增加;
(3) 燃机在燃油运行工况下升负荷至满负荷运行。
由于本项目燃机设置了蒸发冷却、高压喷雾系统, 余热锅炉设置了补燃系统, 燃料切换过程更为复杂, 具体切换过程见图3。
本项目具体燃料切换过程如下:
(1) 燃机在满负荷工况下运行, 燃机蒸发冷却、高压喷雾系统, 余热锅炉补燃系统全开, 燃料切换开始时, 首先关闭余热锅炉补燃系统;
(2) 关闭燃机燃机蒸发冷却、高压喷雾系统;
(3) 燃机在天然气运行工况下降负荷, 由满负荷运行降到60%-95% 负荷之间运行, 由于业主要求燃料切换时全厂负荷不能低于600MW, 燃机降负荷至80%;
(4) 启动燃油推进泵, 燃油注水系统, 切换至备用燃料轻油, 天然气流量逐渐减小, 燃油流量逐渐增加;
(5) 燃机由燃油80% 运行负荷下升至满负荷运行。
4 缓冲系统计算
根据以上切换程序, 各步骤的数据整理见表1。
根据以上燃料切换数据, 整个燃料切换过程天然气消耗量可以式1 计算:
由于天然气经缓冲系统增压后温度会上升, 增压后的天然气温度设为T, 则高压管束容积可用式2 计算:
式中:V—高压缓冲管束容积 (m3)
M—燃料切换过程天然气消耗量 (式1)
ρ—天然气标准状态密度 (Kg/Nm3)
ΔP—ΔP=10· (P1-P2)
P1—高压缓冲管束最大工作压力 (MPa)
P2—燃机进口需求压力 (Mpa)
T0—标准状态温度, T0=273K
T —高压缓冲管束内气体温度 (K)
根据以上计算结果, 选择高压管束储气容量, 选择合适的管束直径、长度及管束数量。
5 结论
(1) 本工程Alstom-GT26 三拖二燃气- 蒸汽联合循环机组设置了燃料切换缓冲系统, 可以有效防止机组快速甩负荷, 燃料切换过程中机组出力不低于600MW, 保证机组及电网平稳安全运行。
(2) 本文介绍了燃料切换缓冲系统的工作原理、系统流程及设备设置, 在实际工程设计中具有广泛应用价值。
(3) 本文介绍了燃料切换缓冲系统的具体计算方法, 为缓冲系统设备选型提供了良好的理论依据。
摘要:燃气-蒸汽联合循环机组热效率高、环保效果好, 在全世界范围内得到了广泛应用。常规联合循环机组以天然气为主燃料, 燃油为备用燃料, 为满足燃气轮机燃料切换, 需要设置燃料缓冲系统。本文通过某工程Alstom GT-26机组, 详细介绍了燃料切换缓冲系统的设计及计算方法。
关键词:联合循环,燃料切换,缓冲系统,计算方法
参考文献
福州,不设时间缓冲区 篇2
在此次限购大潮中,福州限购政策也是突然袭击,让还沉浸在假期的人们措手不及。
限购10月6日晚间发布,并于7日起实施。新政没有给市场留下任何缓冲区,有人预言福州楼市会“一夜变天”。
首付比例仅提高10%
从福州出台的政策来看,在二线城市中不算太严格。本轮新政规定福州五区的市民对144平米以下房源限购2套,同时提升了首套房和二套房的首付比例,指出本市五城区户籍居民购买首套房首付比例不低于30%;非本市五城区户籍居民首付比例不低于40%。
此外,对拥有1套住房且相应贷款未结清的本市五城区户籍家庭购买第2套商品住房,申请商业性个人住房贷款首付比例不低于40%。
中原地产福州公司总经理蔡俊表示,由于该政策中对首付比例仅提高10%,这和其他城市相比,还是比较温柔的。这个政策出台对福州新房价格涨幅起到一定的压制作用,成交量也会有一定的影响。
同时,他还认为,房价涨上去了之后,再想下降的可能性就比较低。前期福州新房的销售量较好,各大开发商业绩完成较好,资金充裕,不会因为这个政策出台,就出现抛售、降价潮。
蔡俊认为,房价还是会稳定、缓慢往上增长,建议刚需、刚改购房者不要过多的观望。从以往政策历史来看,政策执行了一两年之后,也会取消。政策执行过程中会对房价有一定的压制作用,但是政策放开之后,房价又会反弹。
购房者被“卡”
9月28日出台“榕七条”,10月6日突发布“限购令”,让不少购房者,不是被限购了,就是被限贷了。
福州五区商品房史无前例地出现零签约,就是出现在此次“限购令”的首日。福州房地产交易中心网站公布的数据显示,10月7日也就是限购的首日,五个行政区住宅签约量“挂零”,而8日五区成交套数也仅为53套,远少于10月1日的167套。??
相比于五区楼市的骤减,未限购的闽侯新房交易量却有大幅提升。在限购首日,闽侯住宅签约套数高达123套,这样的签约量达到了数周以来的高峰。8日闽侯仍然保持了上升的势头,签约套数达到167套,面积15563平方米。
前阵子卖房找好买家的王女士就比较被动了。“外地人在福州只能买一套房,我的买家属于这种情况,现在已经被限购了,不能再买我手上小户型的那套房子。买家必须真实办离婚才能再买房,但买家不想去办离婚,现在只能买一套福州五区的房子,我没有别的办法也只能同意让他们解约了。”
王女士说,“现在也只能让中介继续挂,再找新买家,可是现在符合条件的买家也少了。”由于她名下的这套小户型没办法卖掉,自己也凑不到钱,没办法置换已经看中的稍大的房子,“等找到买家了,我看中的那套房子也不知道会出现什么情况了。”
或许好多的购房者们也和王女士及她的买家一样,被新政卡得措手不及。据悉,目前福州中介行业协会正在与政府有关部门,就限购缓冲问题紧急协商。
缓冲区计算 篇3
在同一种投影变换过程中, 无论如何转换, 转换后的z值大小关系是保持不变的。但在使用D 3 D进行三维游戏开发的过程中, 通常会采用两种投影变换方式, 正交投影变换和透视投影变换.在实现UI界面或者某些特殊标记会使用正交投影, 而普通的游戏对象则采用透视投影, 但是对于两种投影方式而言, z坐标的转换过程并不是遵循同样的标准, 所以在世界坐标下的z坐标并不能完全反映两种不同变换方式下他们的前后关系, 而在游戏开发中, 那么我们又需要一个转换统一的z坐标来实现渲染时的相互遮挡, 这样就有必要能够判断不同变换下的z坐标大小。
本文我们通过研究两种不同投影变换下z坐标的转换过程, 得出一个从正交投影相对于透视投影下的z坐标对应关系的公式, 从而在游戏开发中可以在进行世界坐标设定时, 能直接得到其转换后的关系, 来更直观的设置游戏对象的先后关系。
两种投影方式中, 其中正交投影的投影方式是在一个长方体观察体内进行, 它不会根据远近缩放物体, 而透视投影则是在一个视锥观察体中进行, 会根据物体距离视点的远近缩放物体.我们先来推导出D 3 D渲染下的正交投影变换过程中Z坐标的转换计算。下面是一个正交投影变换的示意图:
n和f是正交投影过程中的远近裁减面, 也就代表了我们裁剪面距离视点的最小和最大距离, 投影之前, 顶点P的坐标为 (x, y, z) , 投影之后P′的坐标为 (x, y, n) , 这样每个顶点的Z坐标将进行变换成n, 而对于深度缓冲中保存的z值而言, 在正交投影变换中, 变换后的Z′值是和距离呈线性关系, 那么有线性公式为
而变换后Z值的范围在[0, 1]之内, 这样近裁减面变换后为0, 远裁剪面变换后则是1, 则可以得到方程组
而对于透视投影变换来说, 稍微麻烦一点, 透视投影变换是在一个视锥体中进行, 下面是示意图:
与正交投影不同, 透视投影的过程中, 变换后的z′值与视点到平面的距离并非线性关系, 在距离近裁剪面比较近时增加z值的精度, 远时精度则减小。
透视投影变换时, 可以得到其公式为z′=a*1/ (-z) +b
从两种投影变换中z的转换关系可以看出, 正交投影变换z值和投影距离是线性变换, 而透视投影则是非线性, 从图可以看出在距离近裁剪面更近的地方z值分布更多, 而在比较远的距离处z值就很散, 这样就会导致深度缓冲采用z-Buffer时, 在近摄像机距离会比较准确, 而在比较远处则会出现一定范围无法判断的情况, 而且当两个裁剪面距离更大时, 这样的问题会更严重, 所以尽量保持投影裁减距离在1000以内, 相对能接受, 如果深度缓冲采用w-Buffer就在距离分布上是均匀的, 但是现在显卡基本上都支持z-buffer而非w-buffer, 所以游戏编程中, 出于效率的考虑, 还是采用z-buffer, 而且从图形效果上而言, 玩家总是对近距离的境况要求更高。
推导出两种投影方式z坐标的变换公式后, 游戏开发中就能在设定使用正交投影变换的对象时, 将其转换成采用透视投影的z坐标来设定, 如此就可以在游戏中建立一个前后关系明确的z轴标尺。
在正交投影变换的游戏对象设定其z o值时, 可以用透视投影相应的z p值来转换。在同等转换后的深度缓冲中的z值而言, 可以得到下面等式:
在使用D3D进行游戏开发时, D3D把具体的投影变换的细节封装起来了, 但实际上在实际编程中要解决一些比较高端的问题, 通常需要对变换的过程有深入了解, 再探索出这样一个公式, 在游戏开发中就不会困扰于不同投影变换对深度缓冲的处理。
参考文献
[1]AndréLaMothe.3D游戏编程大师技巧.人民邮电出版社.2005
[2]胡静妍, 李霖, 李雄科.基于DirectX的地貌晕渲实现机制研究[J].测绘科学.2004, (04)
故宫缓冲区内二手房的升值空间 篇4
那么,这个保护方案对地产投资有什么影响呢?美丽家园房产经纪公司的宫萍指出,缓冲区的确立为今后该区的房产建设圈定了一个严格的限制范围,也就是说该范围内的预期房产供给量将会越来越少。而这种房产供应量的稀缺性对于该区二手房投资市场来说无疑是一个利好消息。同时,政府对缓冲区内环境和基础设施的改造会直接导致该区域内的二手房升值。具体来说,保护方案有四方面的利好。
首先,故宫缓冲区的居住环境得到进一步的改善。由于故宫缓冲区作为最古老的北京城区,绝大部分的房产都是历经几十年甚至上百年的老公房,长期失修,人口密度大,有些地段接近4万人/平方公里,给旧城改造带来了巨大的压力;但是,缓冲区确立之后,有关部门通过“产权”交换,将年久失修的四合院集中到有能力修缮的人群当中,这样,既可以符合保护方案的要求,又可以让缓冲区内的整体居住环境获得进一步的改善,从而有助房产价格的上涨。
其次,目前故宫缓冲区的房产供需比例为1:6左右,但仍有加剧趋势。从故宫缓冲区内的房产存量来看,主要应该集中于鼓楼、安定门内、新街口南北大街等区域;而目前这些区域的房产基本处于供不应求状态,供需比例在1:6~1:9之间,并且随着缓冲区内危房改造的慢慢推进,以及区域新房供应量的极度紧缺,促使缓冲区内的房产供求矛盾将会进一步加剧。供需比例的扩大将会直接影响区域房产价格走势出现变动,这种走势的变动就是通过房价的上涨来体现。
再次,房屋售价租金比基本维持在180:1,仍然存在合理的上涨空间。从缓冲区的房屋售价租金比来看,近几年基本维持在180:1左右,比如鼓楼、地安门、新街口区域的房屋售价租金比分别为180:1、175:1、170:1,这样的房屋售价区间同房产市场成熟国家的房屋售价租金比200:1仍然存在一定的上升空间,这种空间的上升可以通过售价和租金两方面的不同变化呈现个性差异,或者是售价提升;或者是租金上涨,抑或是售价与租金都将上涨。但从缓冲区的实际情况来看,售价与租金将会共同上行。
最后,缓冲区周边日益完善的商业环境将会带动房价继续上涨。从缓冲区周边的商业环境来看,紧邻北京两个最大的商业区,一个是西单商业区,另一个就是王府井商业区。西单商业区可以辐射到金融街商圈;王府井商业区可以辐射建国门区域,同时东方广场屹立于王府井的最东端。金融街商圈聚集着大量的金融机构或金融企业,比如四大国有商业银行、国内各大证券公司,而且金融街正以其更加优惠的政策吸引海外金融机构入住;另外,东方广场也以其独特的魅力吸引着众多的大型外资企业和国内知名公司,比如德勤、毕马威等四大国际会计事务所纷纷入住。正是因为缓冲区周边拥有众多的企业办公聚集地,这必将带动缓冲区的房产需求进一步增加,从而促使缓冲区的房价未来具有较大的上扬空间。
缓冲区溢出利用与保护防御方法 篇5
程序运行时,系统会分配一段相邻的内存区域用于存储各种类型的数据,这段内存空间叫做缓冲区。而缓冲区溢出就是在大缓冲区中的数据向小缓冲区复制的过程中,由于没有注意小缓冲区的边界,“撑爆”了较小的缓冲区,从而冲掉了和小缓冲区相邻内存区域的其他数据而引起的内存问题。成功地利用缓冲区溢出漏洞可以修改内存中变量的值,甚至可以劫持进程,执行恶意代码,最终获得主机的控制权。
近20年来,缓冲区溢出漏洞已成为计算机系统安全漏洞的主要形式之一,利用缓冲区溢出漏洞进行攻击占了远程网络攻击的绝大多数,这种攻击可以使蠕虫病毒进行迅速的传播,是一种非常严重的安全威胁。如在2010年的5个月里,国家漏洞数据库就记录176条缓冲区溢出漏洞,其中136就是高危漏洞,在CWE前25个最危险的软件错误列单中排第三位。因此对缓冲区溢出的原理、攻击利用方式的分析以及提出有效地保护防御方法具有极其重要的意义。
2 缓冲区溢出攻击利用方式
随便往缓冲区中填东西造成它溢出一般只会出现Segmentation Fault错误,而不能达到攻击利用的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户Shell,再通过Shell执行其他命令。如果该程序属于Root且有Suid权限的话,攻击者就获得了一个有Root权限的Shell,便可以对系统进行任意操作了。
要执行一次攻击,攻击者必须找到合适的代码攻击利用内存和寄存器中所需的数据使程序控制跳转到那个位置。攻击者通过反汇编二进制文件,或在调试器调试程序,从程序的文档和源代码收集信息程序的脆弱代码和其运行时的行为。原则来讲攻击时所针对的缓冲区溢出的程序空间可为任意空间。但因不同地方的定位相异,所以也就催生了多种转移方式,包括函数激活记录、指针借用、长跳转缓冲区等。
(1)函数激活记录
当程序执行调用一个函数,堆栈就会被分配函数的参数、返回地址、先前的堆栈的指针、保存寄存器以及局部变量。在堆栈里,在当前函数返回后返回地址会指向下一条用来执行的指令。攻击者就可以在堆栈超出其所分配的内存中发生溢出,同时调整返回地址以改变程序控制选择的方向。
(2)指针借用
指针借用包括修改指针的值,比如函数,数据,或者虚拟的指针,它们都能修改异常处理器。攻击者可以在溢出的堆、栈或者含有嵌入函数指针的对象中使用指针借用。这种攻击方式对那些使用方法来防止返回地址修改的程序尤其有效,因为它并不能改变保存的返回地址。
(3)长跳转缓冲区
另一种用来劫持程序控制的方法是运用长跳转缓冲区。C标准库提供的setjmp/longjmp来实现不合逻辑的跳转。setjmp功能保存了能被长调转使用的jmp_buf类型的变量(这是一个数组类,这个变量存储了最近setjmp调用的环境变量。攻击者可以运用程序调用长跳转,它将跳转到攻者的代码里。
(4)缓冲区溢出利用
如果我们在buffer里包含我们自己想要执行的代码,用包含正确执行的机器码填充缓冲区,并将程序的返回地址覆盖成buffer的起始地址,再通过返回地址让程序跳转到系统栈里执行我们输入的代码,这就是缓冲区溢出的一种利用。举一个如下例子,关键代码如下
程序读取password.txt文件内容,然后复制内容与定义的密码比较,不同则提示密码错误,相同则提示密码正确。拟准备向password.txt文件里植入二进制的机器码,并用这段机器码来调用Windows的一个API函数Message Box A,最终在桌面上弹出一个“overflow”的消息框。要达到上面的结果,就要完成几个工作。首先,得分析并调试漏洞程序,获得淹没返回地址的偏移。其次,要获得buffer的起始地址,并将其写入password.tx的相应偏移处,用来冲刷返回地址。最后,写入可执行的机器代码,用来调用API弹出一个消息框。按照对栈结构的分析,可得出图1所示的栈帧中的状态。
在password.txt中写入恰好44个字符,那么第45个隐藏的截断符null将冲掉authenticated低字节中的1,从而突破密码验证的限制。想要覆盖掉返回地址则需要44+3*4=56个字符。在password.txt中写入11组“4321”共44个字符,用Olly Dbg加载这个生成的PE文件进行动态调试,程序提示密码正确,查看字符串拷贝函数过后的栈状态,得到buffer数组的起始地址为0x0012FB7C,将buffer的起始地址写入password.txt文件中的第53-56位,这样在password函数返回时就会跳到输入的字符串开始执行。
3 缓冲区溢出保护与预防方法
对于解决缓冲区溢出的问题,从最好的开发方法到被攻击后恢复的自动化框架,研究人员已经提出了多方面的方法,主要包括编写正确的代码、进行数组边界检查、运行仪器测试、静态动态分析等。
(1)编写正确的代码
编写正确安全的代码是减少漏洞最好的解决途径。实际工作中有时程序员往往会片面追求性能而忽视代码的正确性和安全性。C和C++语言没有提供内在的内存越界访问保护,因此在编程时选择Java语言或者NET环境可以在运行时进行边界检测就能消除中这个问题。C标准库函数包括strcpy,strcat,gets由于不执行边界检测所以是不安全的。采用这些函数较为安全的版本如strcpy_s,strcat_s函数也是另一个好的编码方式。除此之外,源代码、二进制代码分析工具以及网络工具是一个程序员防止程序被攻击的利器。
(2)进行数组边界检查
数组边界检查可以完全防止缓冲区溢出的产生和被攻击利用。只要数组不能被溢出,溢出的利用攻击也就无从谈起。为了实现数组边界检查,所有对数组的读写操作都应该被检查,以确保对数组的操作都在正确安全的范围内。常见的实现数组边界检查方法包括编译器检查,存储器存取检查,使用类型安全语言等。但是这也势必会增加程序员的负担,程序员必须运用启发式地去定义安全的临界缓冲池,然后运用边界检查去检测缓冲池。
(3)运行仪器测试
为了发现缓冲区溢出,程序运行时可以充分运用运行仪器测试技术来防止程序被攻击。
编译时间技术像Stack Guard和Return Addres Defender(RAD)用插入代码来检查返回地址是否被修改。Stack Guard在返回地址前面放置了一个标记,然后在函数返回后查看标记的值。而RAD创建一个返回地址存储仓全局数组,在函数开头处中拷贝返回地址,然后它在函数收尾处检查是否被修改。
Solar Designer和Pax利用一个不可执行的栈来与缓冲区溢出作斗争。通过使目标程序的数据段地址空间不可执行,使攻击者即使向缓冲区植入了代码也不能被执行。
(4)静态和动态代码分析
静态代码分析一个程序的源代码或者反汇编成二进制代码可以辨认缓冲区溢出漏洞。
其他解决方法采用静态分析和动态分析相结合的方法来发现缓冲区溢出漏洞。研究人员已经提出过一个用来先选择可以缓冲池,制造缓冲区溢出,然后再根据结果分析应用程序对的可疑性。这种技术定义了在本地缓冲池调用不安全库函数以及读写用户输入函数的位置。然后它计算攻击者将覆盖用来插入的攻击字符串的返回地址。
对于缓冲区溢出,微软公司也逐渐加大了保护力度。Windows操作系统自XP SP2开始加入随机化PEB(Process Environment Block)管理结构的机制、SEH(Structure Exception Handling)的保护、VEH(Vecto Exception Handling)链表指针-Rtlp Call Out Entry List的保护和堆块结构Cookie的保护等缓冲区溢出保护技术。而Windows 7操作系统不仅继承了XP SP2在缓冲区溢出防护上的成果,同时针对其不足进行了改进,形成了一套较为完善的溢出保护体系。在Windows平台下,针对缓冲区溢出保护的关键技术包括地址空间布局随机化(Address Space Layout Randomization,ASLR)、安全结构化异常处理(Safe Structured Exception Handling,Safe SEH)、GS Stack Protection、DEP/NX(x64)等。
4 总结
缓冲区溢出攻击是目前出现频繁,危害极大的攻击手段,对于缓冲区溢出的研究对于了解系统弱点,掌握攻击方法从而进行安全防护具有极其重要的意义。本文详细描述了缓冲区溢出的原理,缓冲区溢出的攻击利用方式以及对缓冲区溢出实例的分析,最后总结了缓冲区溢出保护和防御方法。
参考文献
[1]http://cwe.mitre.org/top25/archive/2011/2011_cwe_sans_top25.pdf.
[2]James C.Foster.Buffer Overflow Attacks—Detect,Exploit,Prevent[M].2006.12.
[3]Chen Aihong,Peng Weimin.Analysis of the principle and using technology of heap overflow[J].Computer&Digital Engineering,2008(9):117-119,127.
[4]蒋涛.缓冲区溢出原理及防护[J].计算机安全,2005,6:56-59.
[5]韩慧妍.Windows环境下缓冲区溢出漏洞的利用[J].电脑开发与应用,2008,21(4):48-50.
[6]吴雪阳,樊龙,陈晶波.Windows系统缓冲区溢出研究[J].网络安全技术与应用,2010,12:71-74.
[7]C.Cowan et al.,“Buffer Overflows:Attacks and Defenses for the Vulnerability of the Decade,”Proc.Foundations Intrusion Tolerant Systems[Organically Assured and Survivable Information Systems](OASIS03),IEEE CS,2003,pp.227-237.
[8]J.Wilander and M.Kamkar,“A Comparison of Publicly Available Tools for Dynamic Buffer Overflow Preven-tion,”Proc.10th Network and Distributed System Security Symp.(NDSS03),Usenix,2003,pp.149-162.
[9]H.Ozdoganoglu et al.,“SmashGuard:A Hardware Solution to Prevent Security Attacks on the Function Return Address,”IEEE Trans.Computers,Oct.2006,pp.1271-1285.
梵净山缓冲区灌木资源初步调查 篇6
1 自然概况
梵净山自然保护区位于贵州省铜仁地区印江、江口、松桃三县交界处。地处北纬27°49′50″~28°1′30″, 东经108°45′55″~108°48′30″, 总面积41900hm2, 其中核心区25800hm2, 缓冲区2800hm2, 其间分布着丰富的植物资源。该保护区为中亚热带山地季风气候, 年均温5.0~17℃, 年降水量1100~2600mm, 雨季集中在4~10月份。气候特点为春温多变, 夏季酷热, 秋雨寒秋, 冬季严寒, 适宜植物生长。
2 调查方法
笔者采用实地野外调查及文献参考的方法, 于2012年4~8月对梵净山缓冲区的灌木资源进行了详细深入的调查。在实地野外调查中主要采用2种方法。线路调查法:在梵净山缓冲区内按不同方向选择几条具有代表性的路线, 沿途记录所遇到的灌木种类、采集标本、实物拍照等;样地调查法:在调查范围内选取8个10m×10m有代表性的样地, 在样地内对每一样方的灌木作细致的调查研究, 记录样方内所有灌木和灌木个体的种名、胸径、树高、枝下高、冠幅等, 并挂牌、标号。对每个个体定位并按比例绘于坐标图上, 同时记录样地的生境及群落特征。同时, 参考《贵州植物志》[2]、《中国高等植物图鉴》[3]、《中国植物志》[4]、《常用中草药彩色图鉴》[5]等工具书对采集的标本进行分类鉴定、查阅相关文献资料, 对调查的结果进行分析总结。
3 结果与分析
3.1 梵净山缓冲区灌木树种资源极为丰富
对调查结果进行分析, 结果显示, 梵净山缓冲区灌木树种资源比较丰富, 共有灌木植物222种, 隶属39科78属 (含变种、变型和亚种, 下同) , 全为被子植物。在调查得出的39科灌木植物种, 各科所含种数多少不一, 含种数最少科的仅有1种 (如古柯科) , 含种数最多的蔷薇科有58种。含10种 (包含10种) 以上的灌木优势科有5个, 分别是蔷薇科 (58种) 、百合科 (20种) 、卫矛科 (19种) 、杜鹃花科 (13种) 、五加科 (10种) 。以上5个科的灌木植物种类多达120种, 占总种数的54.05%。梵净山缓冲区的灌木植物中含10种以下6种以上 (包含6种) 的科有芸香科 (9种) 、忍冬科 (8种) 、大戟科 (7种) 、樟科 (7种) 等18个, 共有灌木植物67种, 占总数的30.18% (见表1) 。可见, 梵净山缓冲区的灌木植物优势科属基本与我国灌木植物优势科属构成大致相同, 具有我国典型灌木植物的科属特征, 表明梵净山缓冲区科属构成合理。
3.2 梵净山缓冲区灌木植物, 根据其用途进行分类
梵净山缓冲区灌木树种资源按用途可以分为观赏类、药用类、油脂类、食用类、工业类、纤维类、饲料类等7大类[6,7]。从表2中显示结果得知, 观赏类、医药类和食用类三类灌木种类较多, 分别占总数的21.17%、37.39%和14.86%;工业类、纤维类、油脂类和饲料类的灌木植物种数虽然较少, 它们的用途却非常广泛, 油脂类的灌木植物榨出的油可以供食用 (如山胡椒、野花椒、花椒、油茶等) , 纤维类的灌木植物的纤维可以编筐或织布 (如水麻、黄牛奶树、荚蒾等) , 工业类的灌木植物可以为某些工业产品提供原料, 饲料类的灌木植物 (如盐肤木、刺槐) 是牲口直接和间接的食物, 因为饲用灌木生物量高、适口性好, 营养成分含量丰富且较高, 牛羊猪都喜食, 特别是山羊对灌木嫩枝叶的采食量占全部日粮的50%~80%[8,9]。
4 梵净山缓冲区灌木植物资源的保护措施
4.1 加大灌木资源保护的宣传力度, 提高保护意识
当地群众的灌木保护意识淡薄, 滥砍乱伐现象经常发生, 在当地还有用火烧田坎的习惯, 这些行为都对灌木造成了极大的威胁。今后可利用广播、报纸等形式向周边居民大力宣传、教育有关灌木植物资源对生态环境与人类生存的相关性、重要性, 使当地群众自觉地形成和增强保护资源的思想意识。
4.2 加强梵净山及周边地区的保护
严禁在梵净山周边地区建立污染性的工厂, 造成灌木植物生长的污染;不要盲目引进外来物种等破坏梵净山的植被。应对梵净山及周边地区的开发建设进行科学合理的规划, 尽量避免因不合理开发利用及环境污染对梵净山生态系统造成不利影响。
4.3 加强对梵净山缓冲区灌木植物资源的保护
对梵净山的灌木植物资源应有计划、有步骤、有针对性地进行采集和开发利用, 以免造成资源枯竭[10]。在灌木植物资源区建立保护制度, 做好灌木植物资源的管理工作。对某些珍稀或濒危灌木植物资源种类可采取就地建立保护区、迁徙异地、引种驯化等多种方法加以保护;通过大量野外调查和室内种类鉴定, 筛选有价值的灌木种类进行引种驯化。
参考文献
[1]程文全, 李斌.小陇山林区优良灌木资源分布调查及保护利用技术[J].林业实用技术, 2007 (2) :13-15.
[2]《贵州植物志》编委会.贵州植物志[M].贵州:贵州人民出版社, 1992.
[3]中国科学院植物研究所.中国高等植物图鉴[M].北京:科学出版社, 1983.
[4]中国科学院中国植物志编辑委员会.中国植物志[M].北京:科学出版社, 1978.
[5]吴家荣, 邱德文.常用中草药彩色图鉴[M].贵阳:贵州科技出版社, 2006-12-1.
[6]许瑞平.内蒙黄土高原灌木资源及主要灌木种的开发利用[J].内蒙古自治区水利科学研究院, 1997, (4) :34-36.
[7]廖雯, 左经会.贵州梵净山国家自然保护区药用种子植物区系研究[J].安徽农业科学, 2008, 36 (34) :15038-15042.
[8]蒋建生, 梁兆彦, 张桂荣等.开发优质饲用灌木建立长期人工灌草丛草地[J].草业科学, 14 (3) :49-53.
[9]曹国军, 文亦芾.我国灌木类饲用植物资源及其可持续利用对策[J].草业与畜牧, 2006 (10) :1311-1315.
缓冲区计算 篇7
2000年发布的USB 2.0规范,将USB接口的传输速度提高了40倍。传输速度的提升使得USB设备控制器的设计指标也随之提高,虽然协议中对于缓冲区的设计要求并没有本质上的改变,但是由于总线带宽与传输速度的提高,各个芯片供应商均推出了自己的缓冲区设计方案。为了提高USB接口的数据存取速度,通常使用异步FIFO来设计端点缓冲区。这里首先简要介绍USB中端点的概念,并给出一款异步FIFO的设计方案。然后根据USB四种传输类型的特点,提出基于该FIFO结构的不同类型的端点缓冲区的设计方案。特别是对于控制端点提出了一种新型的双向异步FIFO结构,在保证控制传输的前提下,减小了将近1/2的电路面积。最后给出在Synopsys平台下电路的VLSL实现结果。
1 USB协议中的端点及实施方案
1.1 USB设备的端点
USB主机和设备之间传输的数据是以信息包的格式来传输的,可分为令牌包、数据包、握手包和特殊包。在数据包中包括了主机和设备通信的数据分组。图1是一个典型的USB数据包的格式。
PID域是为了增加USB通信的健壮性而设定的数据分组的辨识符;CRC16域是对数据分组进行CRC校验的结果。DATA域是实际传送的数据内容。USB设备控制器会将接收到的主机数据包放入指定的端点缓冲区;或者从指定的端点取出待发送的数据组装成USB信息包发送到主机。
由此可见,所谓端点实际上是主机与设备之间通信的来源或目的,所有的传输都要传送到设备的端点,或是由设备的端点发出。一系列相互独立的端点在一起就构成了USB逻辑设备。从物理层的角度来看,端点是一块存储器区域,用以缓冲实际接收到或待发送的数据包。
USB协议中定义了四种传输类型,分别是控制传输、批量传输、中断传输和同步传输。所有USB设备控制器都应该支持控制传输,其他三种传输方式根据不同的应用背影而用于不同类型的设备。按照传输类型可将端点分为控制端点、批量端点、中断端点和同步端点。其中控制端点较为特殊,只有它可以双向的传输数据,而其他端点只能传输单方向的数据。
1.2 使用异步FIFO设计USB端点
由于USB设备控制器的缓冲区空间是对应各个不同的端点。每个端点所对应的传输方式、传输方向也不同。通常控制端点会连接控制器的MCU单元,而其他类型的端点一般连接设备端的接口。可见USB的端点缓冲区实际上是在串行接口引擎时钟和设备时钟或MCU时钟的两个时钟域之间传输数据。而使用异步FIFO来实现该结构显然是一个不错的选择。
图2是本文所采用的异步FIFO的结构框图。该异步FIFO由一块双端口SRAM、写地址/满逻辑和读地址/空逻辑、以及为了消除亚稳态的两级同步电路组成。左端口在写时钟下进行数据的写入操作;右端口在读时钟下实现数据的读出操作。
对于异步FIFO的设计,产生准确的空满标准是设计中的核心任务,它与FIFO是否能稳定工作息息相关。写满不溢出,读空不多读[1]是异步FIFO空满标志判断的基本原则。传统的判断方法是另外设置一个状态位,作为最高位,其余位作为地址位,当读写指针的地址位和状态位全部吻合时,FIFO 处于空状态;当读写指针的地址位相同而状态位相反, FIFO处于满状态。这种异步FIFO由于是通过直接比较二进制读写指针来判断满和空的,在跨时钟传递时会有毛刺产生。下面将介绍一种通过直接比较格雷码指针的方法生成FIFO的空满信号,从而消除了毛刺,提高了电路的稳定性。
比如要设计一个深度为8的异步FIFO,需要使用3 b的格雷码计数器对读写指针计数,与二进制类似,还是需要使用一个状态位来判断满和空状态。此时FIFO的格雷码指针跳变情况如表1所示。
观察表1可知,当读指针为4′b0011时(二进制为4′b0010),此时比他多一个周期所对应的格雷码为4′b1111(二进制为4′b1010)。两者的高二位恰好相反,但低位完全相同。对比表1左右两列可知当读写指针相差一个周期即FIFO满时对应的格雷码指针的最高两位相反,而低位则完全相同;当两者完全相等时对应为FIFO的空状态。图3给出的是在设计的FIFO的深度为8时,在Modelsim中的仿真波形。由图3可知,当FIFO从空到满时,对应的格雷码写指针为4′b1100,而同步后的读指针为4′b0000;当从满被读空时,读指针为4′b1100;由此可见仿真的FIFO的空满信号与设计一致。
2 基于FIFO结构的优化端点设计方案
2.1 基于新型FIFO结构设计控制端点
上文已经论述过控制端点是一个双向传输的端点,但是在同一时刻只能是单向的数据传输。该端点主要是用于USB设备的枚举过程,主机发送一个信息包,设备负责回应一个信息包。对于该端点的设计现有的方案都是采用双FIFO来实现双向传输的。一个FIFO用以接收主机发送过来的数据包;另外一个FIFO用以向主机发送数据包。在传输数据包时总有一个FIFO处于空闲状态,这样会造成存储器资源的浪费。为此,本文提出一种新型的异步FIFO结构,该结构使用一块双端口SRAM来实现控制端点的单工双向传输,而传统的双FIFO结构需要两块SRAM用来实现双向传输。由于SRAM占据了FIFO的大部分面积,在实现控制传输的功能下少用了一块SRAM,可以预见最终的电路实现面积会减小将近1/2。
图4是本文所设计的新型异步FIFO结构,该FIFO的实现是基于一块双端SRAM。在上文所提到的异步FIFO结构的基础上增加一套读写指针逻辑和满空判断标志。这个电路可以看作是原来电路模块的复制,即两者设计完全一致。这两个新增的指针模块用以产生访问SRAM的地址和用以产生满和空的格雷码指针。这样在同一方向对于SRAM的访问就会有两个地址,其中一个是读地址,另一个是写地址。这样需要设计一个选择器,用以选择当前访问SRAM的是读地址或写地址。这个选择器的选择端可以根据不同方向的读写使能信号来切换。这是由于在同一时刻不可能出现一个方向的读/写使能均有效的现象。
对于图4的数据路径可简介如下,方向0在其写使能信号的控制下,往FIFO内写入数据,写满之后方向1控制其读使能将方向0写入的数据读出来。然后方向1控制其写使能将数据写入双端口SRAM,方向0负责把SRAM内的数据读出。
对于USB的控制端点,其接收的最大数据包为64 b。故本文设计的双向FIFO使用的sram亦为64 b。使用memory complier生成。图5是设计的双向FIFO在Modelsim下的仿真波形图。该波形显示了方向0写数据,方向1读数据和方向1写数据,方向0读数据的过程。
2.2 其他端点的优化设计
对于USB设备控制器的其他端点,由于其与控制端点有所不同。控制端点是一个双向端点,而非控制端点单向的传输。故对于非控制端点对应的缓冲区的容量设定,应使USB的带宽利用率尽量达到最高。由于USB规范中规定缓冲区必须有足够的空间,可以为全(高)速设备容纳一个时间片所能传输的数据量的两倍的容量。这样USB在处理一个数据分组的同时,可以接收下一个数据分组。以此种重叠技术可以提高总线利用率。如果批量端点的缓冲区的深度设计为1 024 B。就可以得到最大的带宽利用率。
图6是其他端点所采用的双缓冲FIFO方案示意图。在状态1,req0控制访问FIFO0,req1控制访问FIFO1;在状态2,req0切换到访问FIFO1,req1切换到访问FIFO0。基于双缓冲FIFO的设计方案可使其他端点的带宽利用率达到最高,满足高速传输的需求。
3 电路的ASIC实现结果
对上述设计方案采用Verilog硬件描述语言进行设计。仿真工具为Modelsim SE 6.2b,前仿真通过后,对设计好的电路使用Design Complier进行综合。综合所使用的工艺库是SMIC 0.18 μm工艺库。
对于控制端点,考虑到其主要处在SIE时钟和MCU时钟之间,对其所加的时钟约束分别为60 MHz和30 MHz;此外还对传统的双缓冲FIFO结构进行了综合,两者所加约束完全一致。将两者的电路的综合结果对比如表2所示。
对比表2可知在保证控制端点功能的前提下,本文所采用的新型FIFO结构比传统双FIFO结构在电路的实现面积方面减小了45.3%。
对于其他端点所采用的双缓冲FIFO方案保证了传输速度,但却是以牺牲面积为代价换来的。表3给出了批量(Bulk)传输端点(两个深度为512 B的FIFO)的实现面积报告。
4 结 语
USB设备控制器端点缓冲区的性能,直接关系到总线的带宽利用率。这里分析了USB的四种传输类型并根据其特点灵活的设计了不同的方案,并给出了最终电路的ASIC实现结果。特别是针对控制端点所提出的一种新方案具有一定的通用性,该方案可以应用在其他类似场合的设计中。
参考文献
[1]吴昆,黄坤,傅勇.一种基于格雷码的异步FIFO设计与实现[J].计算机与数字工程,2007,35(1):22-24.
[2]National Semiconductor Corporation.USBN9602 Datasheet[EB/OL].http://www.nationalsemiconductor.com,1998.
[3]Zhou Wei,Huang Hong,Sun Chengshou.Novel On-chip Com-munication Data Channel Architecture Used in USB 2.0[A].8thInternational Conference Proceeding of Solid-State and Integrat-ed Circuit Technology[C].2006:1 505-1 507.
[4]田力,沈绪榜,张盛兵.USB设备控制器缓冲区特性和实现方案[J].微电子学与计算机,2003(3):29-31.
[5]Philips Semiconductors.ISP1583 Datasheet[EB/OL].ht-tp://www.philips.com,2005.
[6]Scott H.Asynchronous Design Methodologies:An Overview[J].Proc.of the IEEE,1995,83(1):69-93.
[7]付华杰,刘丽君,张遂南.基于FPGA的USB设备控制器设计[J].现代电子技术,2008,31(24):49-51.
[8]付华杰,陈艳宁,张遂南.嵌入式高速USB设备接口结构设计[J].现代电子技术,2008,31(4):150-152.
[9]Clifford E Cummings.Simulation and Synthesis Techniquesfor Asynchronous FIFO Design[A].Proceedings of Synop-sys Users Group Conference[C].San Jose,USA,2002.
缓冲区计算 篇8
在纸质图件的绘制过程中, 图面整饰是其中最重要的课题。合理的颜色配置, 恰当的线条文字参数方案, 合适的花边、图面注释等整饰效果, 既能反映用户对该图件相关信息的需求, 又能做到图面干净整洁、美观大方, 一直是图面整饰工作的追求。要做到这些, 通常需要大量的编辑工作来支持。
Mapgis软件作为自主开发的国产软件, 多年来一直在相关软件测评中名列前茅, 已经在国土部门拥有大量忠实的客户群体。应用Mapgis建立土地利用数据库, 再根据数据库提取数据整饰输出应用到生产实践中一直是Mapgis使用者最日常的工作。当出图数量比较多时, 图面整饰工作量就显得比较庞大, 如果能够利用建库过程中留下的一些整饰成果, 能大大降低图面整饰的工作量, 但图面整饰操作常用的Mapgis编辑系统在处理一些问题时并不能提出一个很好的解决办法, 而空间分析系统却在这些方面能提供帮助。
1 利用点缓冲区分析保留点位
图面整饰中的注记主要是图形属性信息的文字反映方式, 为方便用图人读图而存在。Mapgis编辑系统提供了属性转注记的方法, 但用这种方法得到的注记拥有相对固定的位置, 这样直接转换得到的注记往往存在注记压盖问题, 并不能直接运用, 还需要进行偏移等操作以保证图面整洁, 操作本身非常简单, 但当出图数量过大时, 这步操作就要耗费编辑人员大量的时间。其实同样的操作在数据入库之前外业上图时已经做过了, 因为外业任务繁重, 参与人员众多, 整饰工作分散所以压力不大, 等数据入库修改至出图, 往往只剩下一两个技术人员跟随, 此时工作量就非常成问题, 但数据库经过多次检查修改后, 外业上图时的数据已经不可用。图面注记中编辑工作量最大的是地类码图斑号注记的迁移, 原外业上图为入库需要已经做了这步工作, 但数据已经变化而不可用, 笔者发现, 如果能把这些外业上图时经过偏移的注记的位置信息保留下来, 能极大的节约后面的工作量, 进过分析发现, Mapgis空间分析功能可以帮助做到这点。
一般来讲, 直接通过属性转注记得到的注记位置跟面文件的label点位置一样, 通常这种直接得到的注记位置可能出现图1 (a) 所示偏移。
一种是同一文件之间的相互压盖, 一种是与其他注记文件之间的相互压盖, 这种情形在出图时需要进行注记偏移以保证图面的清晰明了。偏移后的效果如下图1 (b) 。
通过对注记的迁移, 图面立即干净清爽许多。但数据库经过检查修改以后, 属性肯定会有变化, 再通过属性输出注记, 又回到前面两幅图的情形, 前面做的注记迁移工作前功尽弃。如何保留这些点位, 空间分析功能可以提供解决办法。操作过程如下。
(1) 打开平台空间分析子模块, 导入经过偏移的地类图斑注记文件。 (2) 求全部点的缓冲区, 注意缓冲区半径不要过大。这样就得到一个带有注记文件属性的区文件。当然, 我们可能只需要随意用到其中一两个字段。 (3) 数据库进过检查修改后, 地类图斑面属性已经发生变化。打开根据文件赋属性工具, 把新面的地类号图斑号属性赋给第二步得到的缓冲区文件。 (4) 用属性转注记功能, 把第三步得到的缓冲区文件中的地类码图斑号属性转成地类图斑注记, 与检查修改后的新面属性保持了一致, 而且点位得以保留。
以上操作都是批量处理, 工作量非常小。需要注意的是, 如果在检查修改的过程中有面的增删, 必须同步对已经完成偏移的注记文件增删, 这步工作有一点工作量, 但比起铺天盖地的注记偏移来讲, 实在不值一提。
2 利用线缓冲区分析造平行线
在进行县或以上级挂图的整饰时, 我们通常都会对县界或以上级境界进行醒目的加边处理以突出其轮廓。这步工作就需要用到平行线的构造。Mapgis编辑系统中有平行线构造工具, 但因为境界线往往走势变化比较曲折, 用编辑工具根本不能完成对境界线的平行造线, 但Mapgis空间分析功能中的线缓冲区分析却可以轻易的完成。用编辑工具的平行造线功能生成的平行线通常会有些不太合理的情况产生, 如图2。
但是利用空间分析功能里的缓冲区分析构造出来的平行线却可以很好的解决这个问题。如图3。
3 结语
Mapgis是一个功能强大、工具丰富的拥有自主开发平台的国产化成熟软件, 其应用也越来越广泛, 但是许多直接面对需求的功能不一定能直接从工具中找到或者一些工具本身开发出来未必是用做该用途, 虽然mapgis同时支持多种语言的二次开发, 但如果能巧妙运用现有工具达到目的, 可大大省去二次开发的工作同时又达到目的。
参考文献
[1]郑贵洲, 吴信才.MAPGIS图层在地图数据处理和管理中的作用[J].科技资讯, 2000 (3) .
汤米的缓冲贴纸 篇9
有一个小孩在杭亭顿海湾教会里参加聚会,听完我介绍的儿童银行之后便向我走来。他和我握手,然后说道:“我是汤米,今年6岁,我想向你的儿童银行借钱。”
我回答道:“汤米,贷款给小孩是我的目标之一,而且到目前为止,所有的孩子都还清了他们的借款。你要用这笔钱来做什么呢?”
汤米说:“我从4岁起,就认为自己能促进世界和平。我要制造一种贴在车后面的缓冲贴纸,上面写着‘请为我们孩子维护和平’,然后是我的签名‘汤米’。”
我说:“我可以支持这个构想。”他需要454美元以制造1000张贴纸。马克·汉森儿童免息贷款基金开了一张支票给印制贴纸的厂商。
汤米的父亲在我旁边耳语:“如果他没有偿清贷款,你会没收他的脚踏车吗?”
我说:“不会的,我不会那样做,每个孩子生下来都是诚实、有道德感且做事有原则的,但他们必须再学些别的东西。我相信他会把钱偿还给我们。”如果你的孩子已经超过9岁,那就让他们为诚实、有道德感及有原则的人工作,赚自己的零用钱,这样他们就会很早掌握这个原则。
我们给了汤米一份我所有录音带的拷贝,他每卷都听了21遍,并把所有的内容都铭记在心。录音带里有这样一句话:“一定要先向顶尖人物推销。”汤米便说服他父亲载他去里根的住所,汤米按了门铃,守门人出来了,汤米用了两分钟,把他的贴纸介绍得令人难以抗拒,守门人把手伸入口袋,掏出一块五给汤米,说:“拿去,我要买一张,等一下,我去把前任总统找来。”
我问汤米说:“为什么你会请前任总统买你的贴纸?”汤米回答道:“是你在录音带里说要请每一个人都来买的啊!”我说:“是啊!是啊!真是不好意思!”
汤米又寄了一张贴纸给戈尔巴乔夫,并在信中附了一张一块五美元的账单。戈尔巴乔夫寄给汤米一块五及一张他的照片,上面写着:“汤米,为和世界平勇往直前!”并签上了“米契尔·戈尔巴乔夫总统”。
我告诉汤米:“汤米,我拥有好几家公司,你长大后,我要雇你呢!”
他回答说:“开什么玩笑!我长大后,我才要雇用你呢!”
《橘县纪录报》周日版刊出了一则有关汤米、儿童免息贷款银行及我的特写报导。执笔的记者萧·马堤访问汤米,6小时后,完成了这篇精彩绝伦的专访报导。马堤问汤米,他认为自己将会对世界和平造成什么样的影响?汤米回答道:“我想我年纪还不够大,我认为一个人要到八九岁才能停止世界上所有的战争。”
马堤问道:“谁是你心目中的英雄?”
汤米说:“我爸爸、乔治·本恩斯、瓦理·裘纳及马克·汉森。”汤米显然在选择偶像方面品味非凡。
三天后,我接到问候卡公司的来电,一位叫贺轩的专门代表传真了《纪录报》上的那篇特写文章给我,他们将在旧金山举行一个研讨会,希望汤米能参加演说,因为他们知道汤米为自己立下了9个目标:
1.用电话询问价钱(棒球卡的报酬);
2.印制贴纸;
3.贷款计划;
4.想出与人打交道的方法;
5.拿到领袖的住址;
6.写信给所有的美国总统及其他国家的领袖,并附赠一张贴纸;
7.和每个人谈论和平;
8.致电每个书报摊以介绍自己的产品;
9.和学校洽谈。
贺轩希望我的公司——“看谁正说话”能承办汤米前往研讨会的演说事宜。因为两周的筹划时间实在太短了,汤米的演说遂胎死腹中,但发生在贺轩、我自己及汤米之间的协调过程却十分有趣且振奋人心。
琼恩·睿勃斯打电话给汤米,想邀请汤米上她主持的综合电视节目。之前,也有人把《纪录报》上有关汤米的专访传真一份给她。
琼恩在电话里说:“汤米,我是琼恩·睿勃斯,我要你上我拥有百万观众群的电视节目。”
汤米说:“太棒了!”他压根儿不知道琼恩·睿勃斯是何方神圣。
琼恩说:“我会付给你300美元。”
汤米回答说:“太棒了!”因为反复聆听我“推销致富”的录音带,汤米已深知个中诀窍,他继续向琼恩推销并说道:“琼恩,我只有8岁大,我不可能一个人去上你的节目,你可以顺便提供我妈妈的旅费,对不对?”
琼恩回答道:“没问题。”
汤米又说:“还有,我刚看了一出《富豪名士生活剪影》的节目,提到在纽约时要住川普大饭店,琼恩,你会帮我们安排一切,不是吗?”
琼恩回答:“当然。”
“这个节目也提到,在纽约时要去一睹帝国大厦及自由女神像,你可以帮我们弄到入场券是不是?”
“是的。”
“太好了!我有没有跟你说,我妈妈不会开车?我们可以坐你的豪华轿车,对不对?”
琼恩说:“当然没问题。”
汤米上了琼恩·睿勃斯的节目,主持人、录影的工作人员,现场及电视机前的观众都被他的表现大大折服。汤米是如此帅气、风趣且率真,他也是一个不凡的自我激励者。
他所说的故事,非常吸引人且具有说服力,以至于观众当场就从皮包里拿出钱来购买贴纸。
节目最后,琼恩俯身向前问汤米:“汤米,你真的认为你的贴纸会带来世界和平吗?”
汤米脸上洋溢着灿烂的笑容,他热切地说:“目前为止,我只卖了两年的贴纸就使柏林墙倒了,我做得还不赖吧!你说是不是?”
至今,汤米已经售出2500多张缓冲贴纸,也已经还清了他向马克·汉森儿童免息贷款银行所贷的454美元。
(转载自中国学生网)
用双向链表来模拟数据库缓冲区 篇10
数据库内存被分为若干大小相等的块, 称之为帧, 每块对应一个帧号。数据库中的数据被分为若干与帧大小相等的块, 称之为页, 每页对应一个页号。正常情况下, 页数要远远多于帧数, 因此需要多次实现页面在内存中的换 入换出。根据局部性原理, 一个在前面使用过的页面很可能接下来也要使用, 换句话说就是最近没使用过的页面接下来使用的概率也不大, 因此该程序主要依据LRU (最少页面使用 置换 )算法来实现页面的替换, 从而降低IO次数, 提供页面的命中率, 进而增加程序的运行效率。
该问题的实验数据为50万行的数据, 每行有读写标志位和页号 (页号为0-49999中的一个整数)。读写标志位指明了该页是只读的还是需要修改的 (写) 的, 实验结果给出了运行时间、I/O次数、命中率等结果。
2 程序设计
双向链表也叫双链表, 是链表的一种, 它的每个数据结点中都有两个指针, 分别指向直接后继和直接前驱 。所以 ,从双向链表中的任意一个结点开始, 都可以很方便地访问它的前驱结点和后继结点, 因此在删除节点的时候双向链表速度较快。
为了快速确定该页是否在缓冲区里, 如果在缓冲区, 该页所在的具体帧号, 定义了一个结构体数组:
刚开始数组a的页号和帧号初始化为-1, 表示所有的页都不在缓 冲区 , 如果页号 为page_id的页在缓 冲区 , a[page_id] .i=1, a [page_id] .j= 所在的帧 号。缓冲 区里有1024个帧, 因此可以定义一个全局变量n,初始化为0, 然后每读入一个不在缓冲区的页, n++, 等到n=1023的时候表明缓冲区已满, 再读入一个不在缓冲区的页的时候需要LRU替换算法。通过结构体a可以得出新读入的页的3种情况:
(1) 缓冲区未 满并且这 页未在缓 冲区 , 直接把该 页加入缓冲区。
(2) 该页在缓 冲区里 , 则先删掉 该页的数据 , 然后把该页的数据添加到链表头。
(3) 缓冲区已 满 , 该页不在缓 冲区 , 需要替换LRU算法替换, 将尾节点换掉。
计算命中和IO次数时可以定义全局变量hit和count, 初始化为0, 对于第一 种情况 , 一定有IO没有命中 , 即count++, hit不变。第二 种情况 (该页在缓 冲区里 ) 一定没有IO, 有命中 , 即hit++ , count不变。第 三种情况 ( 缓冲区已满, 该页不在缓冲区, 需要替换LRU算法替换) 这时由于页不在缓冲 区 , 需要把该 页读进缓 冲区 , 一定有次IO, 即count++。如果被 替换出去 的页被写 过 , 则需要把 该页重新 写回磁盘, 又产生一次IO, count++, 如果该页没被写过, 则直接替换掉即可。第三种情况没有命中, hit保持不变即可。
计算程序 运行时间 时 , 可以采用Get Tick Count() 函数 ,Get Tick Count返回从操 作系统启 动到现在 所经过的 毫秒数 ,它的返回值是DWORD。通过程序运行时调用Get Tick Count()和程序运行完成调用Get Tick Count() 即可算的程序的运行时间。
3 程序实现
首先建立MFC程序, 起名“数据库缓冲区模拟”, 为界面添加控件如图1所示。
其中“trace文件路径”后面的编辑框的ID为“IDC_EDIT1” (就是即系 统默认的名 字 ), “打开trace文件”按 钮ID为“IDC_BUTTON1”, 通过快捷键“CTRL” + “W”为列表控件添加变量名字“m_list”, “实验开始时间”到“命中页数”这5行后面都有一个静态文本框, ID为“IDC_STATIC1”到“IDC_STATIC5”。
由于程序用双向链表来实现 , 先建一个 头文件“doublelist.h”来实现链 表的操作 , 文件内容 如下 :
接下来需要在“数据库缓冲区模拟Dlg.h”中添加信息,首先需要定义全局常量const int max_frame=1024;将缓冲区里面的帧数为1024, 这样如果缓冲区里帧的数量需要变化的时候只需要修改该常量即可, 而无需有其他改变。然后在CMyDlg类里定义 变量n (缓冲区里 已经使用的 帧数 ), count, hit,数组a, 为按钮添加消息相应函数, 文件内容如下所示:
接下来实现“数据库缓冲区模拟Dlg.cpp”文件, 首先需要包含刚实现的“double list.h”头文件, 如下所示:
然后修改初始化函数, 添加需要初始化的信息, 如列表控件的初始化、状态栏编程等, 代码如下:
最后, 双击“打开trace文件路径”按钮, 添加消息响应函数, 该函数的主要流程为获得文件的路径, 打开文件, 解析文件里面的数据, 根据数据分为3种情况作出处理, 关闭文件、销毁链表、计算所需要的数据。具体实现如下:
至此, 整个程序已经完成。
4 程序结果
实验用时有可能误差1秒, 主要是计算的时候需要时间以及Get Tick Count() 返回的是毫秒数, 换算成秒时可能刚好差一秒。
“序号”指的是数 据集里的 第几行 , 读写页号 指的是数据集里的数据,“是否发生页面替换”指的是根据LRU算法该页发生的情况,“帧号“指的是该页在缓冲区所在 的帧号 ,如图2所示。
摘要:主要采用双向链表及LRU(最少页面使用置换)算法来模拟数据库缓冲区中页面的换入换出情况,统计了IO次数,命中页数等信息。可以学到双向链表的使用方法及其在插入删除操作过程中速度上的优势、LRU算法的实现过程、MFC中的列表等控件的使用方法等。
相关文章:
缓冲包装结构02-27
缓冲溢出02-27
外汇缓冲政策02-27
头脉冲试验02-27
车钩缓冲装置02-27
缓冲包装设计02-27
缓冲能力02-27
对采购缓冲条方案和建议02-27
强化型缓冲带水质净化技术试验研究02-27