嵌入式Linux开发之C语言学习秘诀

发布者:科技创客最新更新时间:2015-11-12 关键字:Linux  C语言 手机看文章 扫描二维码
随时随地手机看文章
随着从通信设备到航空装备和工业控制器等技术中对数据管理需求的不断增长,以及受到这些设备中不断增加的板载CPU、RAM和存储资源的推动,数据库管理系统(DBMS)软件在电子设备中越来越普及。设备上的数据库规模大小不一,从几个GB的数据到支持电信计费/信用系统的等级评定和余额管理应用,再到10GB以上的IP路由器的控制层数据库以及100GB以上的电信呼叫路由数据库。

数据库管理系统--曾经与商业应用、台式机和web应用几乎完全关联在一起--为了满足当今电子设备的需求而经过了长足的发展。设计师经常采用的内存数据库系统(IMDS)是在主存中存储记录,因此可以消除许多延时源,比如通过硬连线接进数据库管理系统的缓存和文件管理,这些源将数据永久存储在硬盘或闪存中(下图1显示了这些延时源)。因此与传统“硬盘上的”数据库管理系统相比,内存数据库系统的执行速度可以快好几个数量级。它们的设计也更简单,可以最大限度地减少对CPU周期的需求,进而允许使用更小功耗和更低成本的处理器。

 

 

图1:传统(磁盘上)数据库系统中的延时源。

然而,易失性有时是一个使人担心的因素。当发生断电或系统故障时,主存中的内容将消失。一些应用可以容忍这种风险。例如,存储在机顶盒中的基于RAM的电子节目指南在发生电源故障时会丢失,但利用有线电视头端或卫星接收机中的信息可以很快重建。然而,其它许多电子设备要求更高等级的数据库持久性和可恢复性。举例来说,一些医疗设备要求记录随时间变化的症状以支持临床决策--这些数据在发生电源故障时不能突然消失。网络路由器和交换机通常将配置数据永久地存储在闪存中。将这种配置数据保存在内存中也是有意义的,可以实现更快的重启--但数据需要是可恢复的。面临DRAM易失性挑战的还有“读取”指纹或脸部的扫描仪。为了允许或拒绝访问安全设施,扫描仪需要将这些数据与存储在设备上的内存数据库系统中的生物特征数据进行匹配。如果访问控制系统发生了故障,系统必须能够很快恢复。

应用例子:内存数据库系统和工业控制器

在工业控制系统中,在控制器中集成内存数据库系统可以支持‘扁平的’控制系统架构。数据在这种架构中存储和处理,一些控制决策在独立控制器层产生;而在相反(和传统)的层次化系统架构中,存储在控制器层的数据通常被限制用于控制变量。

 

 

内存数据库系统易失性解决方案

解决这种易失性问题已有相应的解决方案。以电池供电RAM形式出现的非易失性内存可以在系统断电时在DRAM芯片上保持数据不变,不过这种方法没有得到广泛普及,因为存在严格的温度要求、漏电流风险、有限的电池使用寿命和其它缺点。

内存数据库系统软件本身可以提供数据持久性机制。举例来说,借助事务日志功能,这种数据库系统可以在日志文件中创建一条条事务记录(对数据库进行的一组修改必须作为一个整体完成或失败),在发生故障后这些记录可以用来恢复数据库。但记录本身要求写入永久存储器,因此性能上会有些下降。

减轻易失性问题的另外一种内存数据库系统功能是数据库复制,即独立节点中的一个或多个备用内存数据库与主数据库保持同步。如果主节点失效,这些数据库的复制品之一将接替主节点的角色。虽然管理同步(和有可能发生的故障转移)的过程和节点之间的通信会引起一些延时,但同步可以很快发生。当复制品数量增加或节点间的物理距离增加时,性能成本也会增加。可以用不同的复制策略来管理延时。同步或“2-safe”复制方法要求数据库事务在复制节点和主节点上同时完成,而异步或“1-safe”复制方法允许事务在复制节点上完成之前提交给主数据库。异步方法提供更短的源保持时间,因此速度更快,但一致性和持久性差一些。

NVDIMMS:非易性RAM,无需电池

非易失性双列直插式内存模块或NVDIMM的出现增加了针对内存数据库持久性的一种新工具。NVDIMM采用标准记忆棒的形式,可插入现有的DIMM插座,因此简化了到现成平台的集成。通常它们包含标准DRAM、NAND闪存和超级电容电源。在正常工作时,这种技术提供了高速DRAM的性能。当发生断电事件时,超级电容提供的瞬时电能可用来将主存内容写入NAND闪存芯片,实现永久保存。当电源恢复时,NVDIMM将NAND闪存中的数据恢复到DRAM中。

对于内存数据库来说,NVDIMM的作用与电池供电型RAM是类似的,但没有后者所需的电池及其缺点。McObject公司以前就做过这方面的努力,其eXtremeDB内存数据库系统可以与电池供电型RAM一起工作。公司很想将使用NVDIMM的内存数据库系统作为主要存储器。目前有多家供应商可以提供NVDIMM。我们使用AgigA Tech公司的产品对eXtremeDB进行了测试,因为我们非常熟悉AgigA公司的母公司--赛普拉斯半导体。同时我们把测试仅限于AgigA的NVDIMM(比如没有测试来自Viking Technology和Smart Modular Technologies公司的NVDIMM),这主要是因为我们的时间和资源非常有限。因此本文中提到的测试只是从概念上证明,内存数据库系统可以与NVDIMM一起作为存储器,达到与使用传统DRAM相当的性能,并且能够利用NVDIMM的恢复功能恢复由于系统故障“丢失的”内存数据库。

测试还解决了在同时要求低延时和数据可恢复性的应用中使用内存数据库系统时经常出现的另外一个问题,即采用事务日志记录的内存数据库系统在多大程度上能保持其性能优于基于磁盘的数据库管理系统?对于后面这些涉及永久存储器 (内存数据库系统的事务日志存储,以及在采用磁盘上的数据库管理系统情况下的整个数据库)的测试,存储“设备”包含了用AGIGARAM NVDIMM配置的RAM盘。下面给出了使用RAM盘而不是传统硬盘或固态硬盘的理由。

测试中使用的AgigA Tech公司NVDIMM是设计用于Intel的Romley和Grantley平台(采用Sandy Brdige、Ivy Bridge、Haswell和Broadwell处理器架构)的。McObject在Intel Oak Creek Canyon参考主板中使用了4GB AGIGARAM DDR3-1600 NVDIMM,以及Intel奔腾双核CPU 1407 @ 2.8 GHz处理器和8GB的金士顿普通DDR3-1333 DRAM,运行的是Debian Linux 2.6.32.5操作系统。

测试应用程序执行5次数据库操作,每次循环构成一个数据库事务,并包含至少两个操作实例(见图2)。基准应用程序记录在两种数据库类型中的每一个(磁盘上的数据库管理系统和带事务日志的内存数据库系统,或“IMDS+TL”)和两种内存(NVDIMM和传统DRAM)情况下每毫秒完成的循环次数。测试应用程序使用了eXtremeDB自己的C/C++应用编程接口(API)。

 

图2:测试应用程序操作。

支持数据库恢复的测试应用程序代码可以充分利用eXtremeDB功能,而这种功能原本是增加来用于支持电池供电型RAM作为存储器。这种功能可以在系统重启后重新连接到NVRAM管理的eXtremeDB数据库,启动任何必需的清零工作,然后恢复正常工作。应用程序的恢复算法假设分配作为MCO_MEMORY_ASSIGN_DATABASE的数据库内存器件的内存块可以在应用程序崩溃或电源故障之后重新使用,方法是用另外的标志MCO_DB_OPEN_EXISTING重新打开它。

基准测试结果

从故障恢复是通过重启测试系统中间执行程序进行测试的。当系统恢复后,测试程序自动重新启动,访问前故障状态的eXtremeDB数据库(在恢复时,NVDIMM已经将数据库从闪存加载到DRAM),检查数据库的一致性并恢复操作,并从与系统重启之前使用的相同NVDIMM存储空间访问数据库。

在比较将NVDIMM用作主内存的“pure”内存数据库系统(没有事务日志)和使用传统DRAM的相同数据库配置下速度的测试中,两种存储类型之间的任何差距都是可以忽略的。待测所有数据库操作--插入、更新、删除、索引搜索和表格遍历--的性能差异都在所用测量技术的误差范围之内。有人可能将这种等效性归因于加载进CPU缓存的完整数据库,以及在那里发生而不是在DRAM或NVDIMM那里发生的数据访问。然而,接近12MB的测试数据库尺寸大大超过5MB的CPU缓存大小,测试应用程序则依靠随机密钥从数据库中寻找随机页。

剩余测试专注于事务日志对内存数据库系统性能的影响。内存数据库供应商提供事务日志来减轻“pure”内存数据存储的易失性。然而,事务日志要求永久存储(进行记录),这会影响到内存数据库系统的性能。正是出于这个理由,内存数据库系统供应商经常被问到,他们的产品性能在采用事务日志部署时是否仍然超过磁盘上的数据库管理系统。

上述测试力求回答这个问题。用于永久存储的“硬盘”实际上是一个将NVDIMM用作内存的RAM盘(基于内存的磁盘类存储器)。这种做法一方面是想进一步测试AgigA Tech公司的产品(也就是说,为了确认它是否能创建RAM盘,并有一个数据库系统能与它交互),另一方面也是想证明采用事务日志的内存数据库系统性能为何能够超过磁盘上的数据库管理系统。

除了它们使用的存储器件(磁盘上的数据库管理系统用的是硬盘或固态硬盘,内存数据库系统用的是DRAM)外,内存数据库系统与磁盘上的数据库管理系统还有很重要的区别。内存数据库系统取消了缓冲管理、文件I/O和传统数据库管理系统架构中固有的其它开销源。取消硬盘--代之以RAM盘--可以消除因存储器件的物理操作引起的开销,从而突出内存数据库系统的流线型设计的延时效应,它比磁盘上的数据库管理系统更为复杂的处理强得多。

测试表明,对于插入、更新和删除操作来说,采用事务日志的内存数据库系统性能明显超过传统磁盘上的数据库管理系统(同样,两者都使用RAM作为它们的“永久”存储)。图3显示了每种配置条件下单位为循环/毫秒的结果,以及通过IMDS+TL所表现出来的性能翻倍。举例来说,在数据库删除测试中,IMDS+TL要比磁盘上的数据库管理系统快12.77倍。图3还显示了关闭事务日志、让eXtremeDB作为将NVDIMM用作主存的“pure”IMDS进行操作的性能影响。

 

 

图3:结果。

数据库索引搜索和表格遍历表明,在从磁盘上的数据库管理系统转移到IMDS+TL时,几乎没有性能上的变化。这种结果是在预料之中的,因为与插入、更新和删除操作相比,这种数据库“读取”操作不会改变数据库内容,在性能方面的成本通常低得多。

讨论

NVDIMM在用作内存数据库系统存储器时可以匹配传统DRAM的速度,同时提供完整的内存数据库持久性。那么为什么还有人要用带延时诱导事务日志的内存数据库系统呢?这里有多种理由,包括成本,因为GB规模的NVDIMM成本要大于DRAM;想要使用非Intel Romley和Grantley的平台;要求的数据库大小(AgigA Tech公司的NVDIMM支持高达128GB的总内存容量)。如上述数字所示,增加事务日志实现数据持久性将降低内存数据库系统的性能,但IMDS+TL组合在插入、更新和删除操作时仍能超越传统磁盘型数据库管理系统的性能。

今后用户会遇到的另外一个问题是他们所选的内存数据库系统是否支持将NVDIMM用作主要内存。如前所述,McObject的eXtremeDB内存数据库系统包括许多功能--在产品开发早期就加入的,用于支持与电池供电型RAM的交互--这些功能可以用NVDIMM平顺地恢复数据库。使用没有这些功能的内存数据库系统可能导致更高的复杂性,并且在实现可工作的解决方案之前需要很大的开发和测试工作量。

另外值得注意的是,本文讨论的数据库持久性--也就是确保数据库和所有提交的事务能在发生系统故障事件时得到恢复--有别于高可用性,或不停工操作的能力。虽然两种技术都是想帮助数据库经受住故障,但如前所述,高可用性通常是通过复制实现的,故障转移时间单位是毫秒。相反,持久性--带事务日志的内存数据库系统或将NVDIMM用作主存所能达到的--不保证消除停工时间。使用NVDIMM或事务日志进行数据库恢复通常是自动的,但两者最有可能的使用场景是在意外的系统宕机之后,这意味着冷重启(如重新启动)这样的时长为分钟级的过程。开发人员在考虑用这些技术克服易失性问题时应该理解数据库高可用性和持久性之间的区别。

关键字:Linux  C语言 引用地址:嵌入式Linux开发之C语言学习秘诀

上一篇:基于ARM9的嵌入式网络语音通信终端
下一篇:先进的IDE支持富媒体嵌入式系统

推荐阅读最新更新时间:2024-05-03 00:06

单片机C语言中的表达式语句及复合语句
1. 表达式语句 在表达式的后边加一个分号“;”就构成了表达式语句 ,如: a=++b*9; x=8;y=7; ++k; 可以一行放一个表达式形成表达式语句,也可以一行放多个表达式形成表达式语句,这时每个表达式后面都必须带“;”号,另外,还可以仅由—个分号“;”占一行形成一个表达式语句,这种语句称为空语句。 空语句在程序设计中通常用于两种情况: (1)在程序中为有关语句提供标号,用以标记程序执行的位置。例如采用下面的语句可以构成一个循环。 repeat:; : goto repeat; (2)在用while语句构成的循环语句后面加一个分号,形成一个不执行其它操作的空循环体。这种结
[单片机]
C语言宏定义技巧
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。 typedef unsigned char boolean; /* Boolean value type. */ typedef unsigned long int uint32; /* Unsigned 32 bit value */ typedef unsig
[单片机]
51单片机——SPI、DS1302时钟 C语言入门编程
SPI: 写时序: 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302, 数据输入从低位(位0)开始。(先写低位) 读时序: 在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。(先读低位,读取后将IO设置为0,否则读出的数据会出错) DS1302: DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态 RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM指示决定采用24或12小
[单片机]
51单片机——SPI、DS1302时钟 <font color='red'>C语言</font>入门编程
单片机:按键(使用中断)控制数码管的数字加减(c语言
本实验的目的: 使用中断实现通过编号为8和C的按键控制数码管数字的加减,加至15之后再循环到0,减到0之后保持0不变。 #include reg52.h sbit WEI=P2^7; sbit DUAN=P2^6; void delay(int t) { while(t--); } unsigned char code dofly_DuanMa ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9 unsigned char code dofly_WeiMa ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,
[单片机]
学习C语言的几点建议
初学C语言的朋友应该首先了解C语言关键的核心概念(结构化、三个执行流程、优先级、指针、文件、共用体、 函数、作用域、重载等 ),只有弄明白了这些才能在今后的学习中游刃有余的把握C语言的精髓。这几个概念就 像逻辑线一样,把整个C语言的体系贯穿起来,给人一种“结构化”的思想体系。下面我简要谈一下这几个核心 概念。 1、从宏观角度来看,结构化是C语言的编程思想基础,就是说C语言每一个功能模块就是一个结构,每 一个结构实现一个运算或一个算法,这个结构就用大括号表示“{ }”,大括号里面的就是算法。尤其注意的是 大括号的“}”括在那里,就决定在哪里结束算法功能。这些是初学者
[单片机]
s3c2440液晶屏驱动 (非内核自带) linux-4.1.24
对于,不想逐一检查内核自带驱动,想自己编写驱动。 1,make menuconfig 去掉 编译到内核,改为 M 编译为 模块(因为要用到里面的3个.ko 驱动) Device Drivers --- Graphics support --- Support for frame buffer devices --- M S3C2410 LCD framebuffer support 2,make uImage && make modules 生成新内核 和 模块文件 烧写新内核或使用 nfs bootm 使用编译为 M 模块的内核启动。 复制 3个 ko 文件到 文件系统,这里用的是 NFS 网络文件
[单片机]
嵌入式Linux系统中MMC卡驱动管理技术研究
引 言 MMC(Multitmedia Card)是一种体积小巧、容量大、使用方便的存储器,目前在手机等嵌入式系统中有着广泛的应用。MMC通过卡内的一个集成片内控制器对MMC卡进行控制和管理,当主机正确地驱动MMC卡后,就可以像磁盘一样方便地存取数据。本文所研究与实现的Linux驱动程序,以Intel XScale的PXA250为硬件平台,在遵循MMC卡通信协议规范的基础上,实现了卡的底层读写。然后对传统的块设备驱动程序中的单块读写进行了改进,实现了集群读写技术,提高了卡的读写速度;同时增加了电源管理功能,满足了嵌入式系统低功耗的需求;增加了即插即用功能,方便了用户的使用。 1 MMC卡驱动程序的体系结构 MMC 卡仅通过
[单片机]
嵌入式<font color='red'>Linux</font>系统中MMC卡驱动管理技术研究
TQ2440 学习笔记—— 11、嵌入式编程基础知识【arm-linux-objcopy、objdump选项】
1、arm-linux-objcopy 选项 arm-linux-objcopy 被用来复制一个目标文件的内容到另一个文件中,可以使用不同于源文件的格式来输出目的文件,即可以进行格式转换。 常用arm-linux-objcopy 来将ELF格式的可执行文件转换为二进制文件。 arm-linux-objcopy 的使用格式如下: 2、arm-linux-objdump 选项 arm-linux-objdump 用于显示二进制文件信息,常用来查看反汇编代码 使用格式如下:
[单片机]
TQ2440 学习笔记—— 11、嵌入式编程基础知识【arm-<font color='red'>linux</font>-objcopy、objdump选项】
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved