凡东's profile凡东的共享空间PhotosBlogNetwork Tools Help

Blog


    July 18

    关于服务器 (转载)


    在这个全民上网的时代,对于个人电脑的了解与使用,大多数的人都能够说出个大致,但是对于处于网络应用核心的服务器,大部分人的第一感觉还是比较神秘。那么到底什么是服务器呢?

      什么是服务器?

      从理论定义来看,服务器是网络环境中的高性能计算机,它侦听网络上其它计算机(客户机)提交的服务请求,并提供相应的服务。为此,服务器必须具有承担服务并且保障服务质量的能力。

      但是这样来解释仍然显得较为深奥模糊,其实服务器与个人电脑的功能相类似,均是帮助人类处理信息的工具,只是二者的定位不同,个人电脑(简称为 Personal Computer,PC)是为满足个人的多功能需要而设计的,而服务器是为满足众多用户同时在其上处理数据而设计的。而多人如何同时使用同一台服务器呢? 这只能通过网络互联,来帮助达到这一共同使用的目的。

      我们再来看服务器的功能,服务器可以用来搭建网页服务(我们平常上网所看到的网页页面的数据就是存储在服务器上供人访问的)、邮件服务(我们发 的所有电子邮件都需要经过服务器的处理、发送与接收)、文件共享&打印共享服务、数据库服务等。而这所有的应用都有一个共同的特点,他们面向的都 不是一个人,而是众多的人,同时处理的是众多的数据。所以服务器与网络是密不可分的,可以说离开了网络,就没有服务器;服务器是为提供服务而生,只有在网 络环境下它才有存在的价值。而个人电脑完全可以在单机的情况下完成主人的数据处理任务。

     

    图1.网络应用中的服务器

      服务器的硬件构成:

      其实说起来服务器系统的硬件构成与我们平常所接触的电脑有众多的相似之处,主要的硬件构成仍然包含如下几个主要部分:中央处理器、内存、芯片组、I/O总线、I/O设备、电源、机箱和相关软件。这也成了我们选购一台服务器时所主要关注的指标。

      整个服务器系统就像一个人,处理器就是服务器的大脑,而各种总线就像是分布与全身肌肉中的神经,芯片组就像是脊髓,而I/O设备就像是通过神经系统支配的人的手、眼睛、耳朵和嘴;而电源系统就像是血液循环系统,它将能量输送到身体的所有地方。

    图2.服务器硬件组成直观图
    服务器的整体设计目标:

      对于一台服务器来讲,服务器的性能设计目标是如何平衡各部分的性能,使整个系统的性能达到最优。如果一台服务器有每秒处理1000个服务请求的能力,但网卡只能接受200个请求,而硬盘只能负担150个,而各种总线的负载能力仅能承担100个请求的话,那这台服务器得处理能力只能是100个请求/秒,有超过80%的处理器计算能力浪费了。

          所以设计一个好服务器的最终目的就是通过平衡各方面的性能,使得各部分配合得当,并能够充分发挥能力。我们可以从这几个方面来衡量服务器是否达到了其设计 目的:R:Reliability——可靠性;A:Availability——可用性;S:Scalability——可扩展性;U: Usability——易用性; M:Manageability——可管理性,即服务器的RASUM衡量标准。

      由于服务器在网络中提供服务,那么这个服务的质量对承担多种应用的网络计算环境是非常重要的,承担这个服务的计算机硬件必须有能力保障服务质 量。这个服务首先要有一定的容量,能响应单位时间内合理数量的服务器请求,同时这个服务对单个服务请求的响应时间要尽量快,还有这个服务要在要求的时间范 围内一直存在。

          如果一个WEB服务器只能在1分钟里处理1个主页请求,1个以外的其他请求必须排队等待,而这一个请求必须要3分钟才能处理完,同时这个WEB服务器在1 个小时以前可以访问到,但一个小时以后却连接不上了,这种WEB服务器在现在的Internet计算环境里是无法想象的。

          现在的WEB服务器必须能够同时处理上千个访问,同时每个访问的响应时间要短,而且这个WEB服务器不能停机,否则这个WEB服务器就会造成访问用户的流失。

      为达到上面的要求,作为服务器硬件必须具备如下的特点:性能,使服务器能够在单位时间内处理相当数量的服务器请求并保证每个服务的响应时间;可 靠性,使得服务器能够不停机;可扩展性,使服务器能够随着用户数量的增加不断提升性能。因此我们说不能把一台普通的PC作为服务器来使用,因为,PC远远 达不到上面的要求。这样我们在服务器的概念上又加上一点就是服务器必须具有承担服务并保障服务质量的能力。这也是区别低价服务器和PC的差异的主要方面。

          在信息系统中,服务器主要应用于数据库和Web服务,而PC主要应用于桌面计算和网络终端,设计根本出发点的差异决定了服务器应该具备比PC更可靠的持续 运行能力、更强大的存储能力和网络通信能力、更快捷的故障恢复功能和更广阔的扩展空间,同时,对数据相当敏感的应用还要求服务器提供数据备份功能。而PC 机在设计上则更加重视人机接口的易用性、图像和3D处理能力及其他多媒体性能。

    图3.服务器系统架构图

    July 14

    转 人生规划

    20岁以前,大部份的人是相同的,升学读书升学读书...,建立自己基础。在父母亲友,社会价值观影响及误打误撞的情况下完成基本教育。
      选择读书,应该一鼓作气,在您尚未进入产业时,能读多高就多高,毕竟何时进入产业,您都是社会新鲜人。
      但是一旦您已经有工作经验而又有心进修,当然管道很多,相对的挣扎也多。
      因为您不知现在的年纪、条件、资历……再去做进修这样的投资是否值得?
      如果,您认定一辈子要当上班族,学历对您而言相信是很重要的,否则,时间宝贵,不容许您再走错路。
      20 ~ 25岁,您要懂得掌握与规划自己的未来,决定了就是一条无悔的不归路。
      刚得到法律付予您的种种权力,相对的您要尽您的义务及学习面对责任的承担。
      这时候的您,是喜悦、矛盾与痛苦交战,喜悦来自于开始被赋予一些自主权,矛盾来自于与父母割不断的脐带关系,痛苦的是开始要尝试错误。
      您要开始为自己的未来规划,如升学、就业、感情……拿回自己对人生的主控权,而非一直受人左右影响的去摇摆自己的未来。


    【学会人际关系,多认识积极的朋友,十年后这些朋友都将是产业的中坚】

      25 ~ 30岁,您像一块海绵,努力吸收也甘心被压榨,为的只是自我的成长。
      这时候的您,应是工作取向,薪水待遇。升迁调职您应该是斤斤计较。因为唯有努力付出,相对的您才敢积极争取,社会新鲜人的动力应该让您冲出自己的一片天,也因为没有经验,所以不懂挫折。
      因为资源不多,所以一切尽人事,听天命。现在的您:领取别人的薪水,学习别人的经验,付出自己的青春,建构自己的未来。


    【学会累积经验,接触机会,良师益友的提携更是提升您成长的大利器】

      30 ~ 35岁,您要学习判断机会、掌握机会,不能再有尝试错误的心态。
      这时候的您,应是事业取向和家庭取向,工作应该从体力转换为脑力。
      您应该看到的是远景,而非现况,面对的是宽广人生,而非局限于自我。
      结婚是许多人面临人生第一次的重大抉择,面对婚姻,很多人以为结婚就是一个责任的结束,殊不知正是学习的开始。
      就像一些刚上市上柜公司,以为目标达成了,忘了自己的企业责任,忽略本业。反而是一个恶梦的开始。
      人的本业不就是经营自己的家庭,赚钱的目的不就希望给家人更好的生活,但这可不能成为忽略家人的借口,一个经营不好家庭的人,纵使赚到全世界,他得到的只是表面的掌声,在他人生的这个圆,永远有一个缺口。
      家应该是您最大的精神支柱。动力来源和坚强后盾!


    【时间管理,转化心境;转化用头脑去工作,不要用身体去工作】

      35 ~ 40岁,您要享受给人希望,功德无量的格局。
      这时候的您,应是企业取向,工作只是一种休闲,更可转化为对他人的责任。如果您专注于研究,您应该不只穷毕生之力。
      24小时不眠不休的去做苦力您应该有成立研究机构,带领一群人做更多研发的雄心壮志。
      如果您是企业主管,您应该不只停留在汲汲营营,斤斤计较,您应该有能力担负主导周遭的员工、家人,带领他们享受更好的生活。
      格局的大小,会影响您成就的多少,做一个有影响力的人,而非被影响的人。


    【不论目前您多风光。多有成就,在您心中是否画得出十年后的你?】

      静心思考!我们现在所有努力的目的不就是为了父母、另一半、小孩……?
      工作,不应该等于是人生,更不应该是需要经营一辈子的事。
      试问健康、财富、自我成长、人际关系和时间自由,什么是您努力工作的动力?
      我相信没有人愿意放弃任何一点。
      这些正是促使我们年轻人前进的动力。
      十年后,您是提早完成它?还是提早放弃它?


    【宁可因梦想而忙碌,不要因忙碌而失去梦想】

      我看周遭有太多优秀甚于我数倍的朋友,可惜的是终日汲汲营营,投入更多的时间、精神、资源,却没有享受到应得的代价,原因无他,努力错方向,找错机会,拒绝机会而己。
      Jordan 打了一辈子的篮球,是很难在棒球场上找到自己的舞台。不要让忙碌蒙蔽了您的双眼再回头:廉颇老矣,尚能饭否?


    【你的时间在那里,成就就在那里】

      当您一个人成功,您只享受到一个人的快乐!
      懂得分享与付出,真正的快乐来自于:周遭的亲友因您的成长而提升,不论是精神或物质。
      真正的成功来自于:周遭的亲友因您付出获得改善,给人希望功德无量。
      我们不是在做慈善事业,尚没有能力普渡众生,但是,我们可以发挥一己之力,对亲友,对那些有缘相遇的陌生朋友。
      伸出您的手,在他们需要的时候!
      太多人在等生命中的贵人,聪明如您,何不先从帮助他人开始?
      “有人4、50岁了,还喜欢说出自某某名校,我觉得奇怪,他们把学校的那几年当成生命的巅峰,其实他出了校门便已开始走下坡路了。 ”

    上岸拽舟

    当我们要完成某一个目标时,尤其是当我们没有做过这些事情时,没有经验可以参考。那么我们必须按照一定的方法,借助一定的工具去做,有调理有准备的去做。

    当我们完成了某个目标时,就不能盯着方法和工具不放,应该着眼于目标本身,实现目标的方法很多,这好像就是大道无为,道法自然。

    July 13

    转载 什么是堆栈溢出

    堆栈这个问题是这么引出的。

    在农业信息监控那个项目中,采用了stc89c58rd+这个芯片,片外没有ram,当我定义了uchar xdata a[3000],程序不正常执行,后来修改了内存模式改为compact模式,可以了,在网上查了下,说是堆栈溢出的问题。为什么在large模式下会产生了堆栈溢出呢?

    从物理上讲,堆栈是就是一段连续分配的内存空间。在一个程序中,会声明各种变量。静态全局变量是位于数据段并且在程序开始运行的时候被加载。而程序的动态的局部变量则分配在堆栈里面。

    从操作上来讲,堆栈是一个先入后出的队列。他的生长方向与内存的生长方向正好相反。我们规定内存的生长方向为向上,则栈的生长方向为向下。压栈的操作push=ESP-4,出栈的操作是pop=ESP+4.换句话说,堆栈中老的值,其内存地址,反而比新的值要大。请牢牢记住这一点,因为这是堆栈溢出的基本理论依据。

    在一次函数调用中,堆栈中将被依次压入:参数,返回地址,EBP。如果函数有局部变量,接下来,就在堆栈中开辟相应的空间以构造变量。函数执行结束,这些局部变量的内容将被丢失。但是不被清除。在函数返回的时候,弹出EBP,恢复堆栈到函数调用的地址,弹出返回地址到EIP以继续执行程序。

    在C语言程序中,参数的压栈顺序是反向的。比如func(a,b,c)。在参数入栈的时候,是:先压c,再压b,最后压a.在取参数的时候,由于栈的先入后出,先取栈顶的a,再取b,最后取c。(PS:如果你看不懂上面这段概述,请你去看以看关于堆栈的书籍,一般的汇编语言书籍都会详细的讨论堆栈,必须弄懂它,你才能进行下面的学习)

    好了,继续,让我们来看一看什么是堆栈溢出

    运行时的堆栈分配

    堆栈溢出就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界。结果覆盖了老的堆栈数据。

    比如有下面一段程序:
    程序一:
    #include
    int main ( )
    {
    char name[8];
    printf("Please type your name: ");
    gets(name);
    printf("Hello, %s!", name);
    return 0;
    }

    编译并且执行,我们输入ipxodi,就会输出Hello,ipxodi!。程序运行中,堆栈是怎么操作的呢?在main函数开始运行的时候,堆栈里面将被依次放入返回地址,EBP。我们用gcc -S 来获得汇编语言输出,可以看到main函数的开头部分对应如下语句:

    pushl %ebp
    movl %esp,%ebp
    subl $8,%esp

    首先他把EBP保存下来,,然后EBP等于现在的ESP,这样EBP就可以用来访问本函数的局部变量。之后ESP减8,就是堆栈向上增长8个字节,用来存放name[]数组。现在堆栈的布局如下:

    内存底部     内存顶部
    name    EBP   ret
    <------ [ ]  [ ]  [ ]
    ^&name
    堆栈顶部    堆栈底部

    执行完gets(name)之后,堆栈如下:

    内存底部    内存顶部
    name    EBP   ret
    <------ [ipxodi\\0 ] [ ]  [ ]
    ^&name
    堆栈顶部     堆栈底部

    最后,main返回,弹出ret里的地址,赋值给EIP,CPU继续执行EIP所指向的指令。

    堆栈溢出

    好,看起来一切顺利。我们再执行一次,输入ipxodiAAAAAAAAAAAAAAA,执行完
    gets(name)
    之后,堆栈如下:

    内存底部     内存顶部
    name    EBP ret
    <------ [ipxodiAA] [AAAA]  [AAAA].......
    ^&name
    堆栈顶部     堆栈底部

    由于我们输入的name字符串太长,name数组容纳不下,只好向内存顶部继续写‘A’。由于堆栈的生长方向与内存的生长方向相反,这些‘A’覆盖了堆栈的老的元素。如图我们可以发现,EBP,ret都已经被‘A’覆盖了。在main返回的时候,就会把‘AAAA’的ASCII码:0x41414141作为返回地址,CPU会试图执行0x41414141处的指令,结果出现错误。这就是一次堆栈溢出。

    在上面的例子中,这导致CPU去访问一个不存在的指令,结果出错。事实上,当堆栈溢出的时候,我们已经完全的控制了这个程序下一步的动作。如果我们用一个实际存在指令地址来覆盖这个返回地址,CPU就会转而执行我们的指令。

    在UINX系统中,我们的指令可以执行一个shell,这个shell将获得和被我们堆栈溢出的程序相同的权限。如果这个程序是setuid的,那么我们就可以获得root shell。

    July 11

    BSP 概念解析 (转载)

     

    有的文章中把对各种处理器寄存器的操作和器件的驱动统称为bsp,所以很多提到与处理器有关。

     

     

     

    下面是转载

     

    Drew在这里按照自己的理解来解释一下BSP( Board Support Package),仅供参考:

      BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。 BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层OS保持正确的接口,良好的支持上层OS。

    例如:

    VxWorks中的网卡驱动,首先在config.h中包含该网卡,然后将网卡含网卡的信息的参数放入数组 END_TBL_ENTRY endDevTbl [] 中,系统通过函数muxDevLoad( )调用这个数组来安装网卡驱动。

    而在Linux中的网卡驱动,是在space.c中声明该网络设备,再把网卡驱动的一些函数加到dev结构中,由函数ether_setup()来完成网卡驱动的安装。

      纯粹的BSP所包含的内容一般说来是和系统有关的驱动和程序,如网络驱动和系统中网络协议有关,串口驱动和系统下载调试有关等等。离开这些驱动系统就不能正常工作。

      Tornado中BSP的编译和上层应用程序不同,用命令行或直接在Tornado环境下Build,在Tornado下不能跟踪调试。

      用户也可以添加自己的程序到BSP中,但严格来说不应该算BSP.一般来说这种做法不建议。因为一旦操作系统能良好运行于最终的主板硬件后,BSP也就固定了,不需要做任何改动。而用户自己在BSP中的程序还会不断的升级更新,这样势必对BSP有不好的影响,对系统造成影响,同时由于BSP调试编译环境较差,也不利于程序的编译调试。

     

    上层程序

    Tools - Applications

    I/O System

    VxWorks Libraries

    TCP/IP


     

    Wind Kernel

    BSP

     


    SCSI Controllerr

    Serial Controller

    Clock Timer

    Ethernet Controller

    .. ..

    硬件

     

    BSP在嵌入式系统和Windows系统中的不同


      其实运行与PC机上的windows或linux系统也是有BSP的。只是PC机均采用统一的X86体系架构,这样一定操作系统(windows, linux..)的BSP相对x86架构是单一确定的,不需要做任何修改就可以很容易支持OS在x86上正常运行,所以在PC机上谈论BSP这个概念也没什么意义了。

      而对嵌入式系统来说情况则完全不同,目前市场上多种结构的嵌入式CPU(RISC)并存(PPC,ARM,MIPS....),为了性能的需要,外围设备也会有不同的选择和定义。一个嵌入式操作系统针对不同的CPU,会有不同的BSP,即使同一种CPU,由于外设的一点差别(如外部扩展DRAM的大小,类型改变),BSP相应的部分也不一样。
      所以根据硬件设计编写和修改BSP,保证系统正常的运行是非常重要的。


    BSP和PC机主板上的BIOS区别

     

      BSP和PC机主板上的BIOS区别很大,BIOS主要是负责在电脑开启时检测、初始化系统设备(设置栈指针,中断分配,内存初始化..)、装入操作系统并调度操作系统向硬件发出的指令,它的Firmware代码是在芯片生产过程中固化的,一般来说用户是无法修改。其实是为下载运行操作系统做准备,把操作系统由硬盘加载到内存,并传递一些硬件接口设置给系统。在OS正常运行后,BIOS的作用基本上也就完成了,这就是为什么更改BIOS一定要从新关机开机。

      PC机BIOS的作用更象嵌入式系统中的Bootloader(最底层的引导软件,初始化主板的基本设置,为接收外部程序做硬件上的准备)。与 Bootloader不同的是BIOS在装载OS系统的同时,还传递一些参数设置(中断端口定义,...),而Bootloader只是简单的装载系统。

      BSP是和操作系统绑在一起运行在主板上的,尽管BSP的开始部分和BIOS所做的工作类似,可是大部分和BIOS不同,作用也完全不同。此外BSP还包含和系统有关的基本驱动(串口,网口...),此外程序员还可以编程修改BSP,在BSP中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放到BSP中。

      而BIOS程序是用户不能更改,编译编程的,只能对参数进行修改设置。更不会包含一些基本的硬件驱动。



    BSP在嵌入式开发中的位置和作用

    BSP开发处于整个嵌入式开发的前期,是后面系统上应用程序能够正常运行的保证。

    大概步骤如下:

    1.硬件主板研制,测试。

    2.操作系统的选定,BSP编程。

    3.上层应用程序的开发。

    BSP部分在硬件和操作系统,上层应用程序之间。所以这就要求BSP程序员对硬件,软件和操作系统都要有一定的了解。这样才能做好BSP编程。

    熟悉工具方面:电表,示波器,逻辑分析仪。硬件仿真器,仿真调试环境。

    语言方面:汇编语言,C语言。

    July 09

    考虑问题的方式

    最近几个月一直在做一个项目,作了一个电子产品a,我们是技术部,不能把产品直接推向市场,
    或者说我们的产品需要邦定服务,和服务一起推出去,总之就是需要其他部门我们才能得到认可。
    困难是很大的。一 这种产品是否真的有市场,其他部门是否真的看好这款产品。二 就算是款看好的
    产品,是否给你推还是问题,如果后期效果不好,他们是有责任的。
    最让我长眼的不是这些,而是他们之间的交流。那天技术部的负责人给3拨人进行了演示这款产品。
    1,2,3。给1演示时,1似乎一直在思考,不予反对,不予赞同,任由我们这边的负责人发挥。
    第二拨就不一样了,遇到对手了。他们的基调从刚开始了解了这个产品后就态度明确,不看好。
    两位领导进行了很长时间的讨论,总算看到高手了。任何一款产品都有它的可取之处,也有它的不足之处,
    不同的人看到的不一样,看中的也不一样。高手就是不被对方引导,始终保持自己的观点。
    总是从自己关注的那一点去讨论,说服对方。当然谁也不会说服对方。
    “任何产品的推出都有一段时间,例如我们的大头贴,现在很流行。”

    我觉得这两种产品是有区别的,大头贴面向的是年轻人,容易接受新鲜事物。你们这款产品呢,
    人群不明确,一直插着电源,放在父母家里或送女朋友,他们都怕这些电子产品。
    我觉得你们需要的卡,运营商不会给。
    成本也太高,不过有一天产品p,推广开后,你们这个可能很有市场。目前我觉得不行。
    况且这款产品,产品p的厂家也可以做,并且可以比你们做得更好。

    “他们的重点不在这,我们可以与厂家,运营商共同合作”。
    “他们不会和你合作,他们会直接与运营商合作”
    总之似乎是谁也没说服谁,但是我们是求人家帮推广的,实际上当然是我们没达到目的了,不过事后
    想想,即使他们觉得还可以也不会立即答应我们的,先小人后君子更好些吧。
    第3拨就是中层及的了,很容易就被我们的东西吸引了,很感兴趣,但这是一时的。
    厉害的能够一接触到就有自己的想法了,然后就是刚开始被人引导了,然后慢慢又有自己的想法了,
    再后来就是一直没反过劲来。
    还有一个原因就是地位会影响这个人的判断,第2拨的那个人的职位和我们技术负责人相当,甚至还高,
    第3拨都不及,所以说起话来多少有些顾虑。
    不过最让人有感触的是地位,工作性质不同后考虑问题的角度发生了很大的变化。
    第2拨的那位觉得这个产品不好的理由是,人的接受程度,人的思考方式,其他厂家,运营商的想法。
    而我们考虑的是这个产品能完成什么功能。
    人跟人的差距咋就这么大呢!

    去与留

        来公司已经1年半了,我的工作和公司现有的业务差别甚远,很多同事都这么认为,更与甚者,劝我离开公司,找一个和我专业对口的公司发展,我也曾动摇过。
    跟上面也提过一次,一番谈话让我选择了留下来。是啊 ,自己当时选择这个公司,也知道和自己的专业是不对口的 ,,那为什么还是来了呢?不禁问自己,不是想进行非技术方面的的一种尝试么?不是想在项目管理方面
    走一条捷径么?那为什么在这时会考虑放弃呢,一件事情的成功也许不是一年两年的,前途固然风险很大,
    但一旦成了,却会缩短到达的日期。高风险,高收入么,这词现在很流行。
    我留下来了,技术固然不如其他同学了,工资也不满意了,但还是没有动,这也许就是在赌。
    还有另外一种思路有时会闪在脑子里,走过一个地方应该留下什么,或收获些什么,不能够无声息的走了,
    那岂不是白过了。本来时间就是有限的,经不起这么白折腾,还是当收获了想收获的东西时,在考虑吧。
     
    July 01

    DRAM的理解

     
    内存RAM的理解
    无论是SRAM还是DRAM都是一个矩阵式的存储结构,有行地址和列地址。
    SRAM的存储容量小,采用的是触发器的结构,所以掉电不丢失,但价钱昂贵,行线和
    列线在地址线上是分开的。如A0~Ai为行地址,Ai~Aj为列地址。这和容量小是有必然关系的。
    DRAM容量大,为什么?采用的是mos管储能的方式,结构简单,所以可以做到大容量,
    但是漏电现象是不可避免的,所以需要定时刷新控制电路辅助。
    采用的仍然是行列地址共同作用的方式,但容量大了,地址线势必变大,所以在DRAM中
    ,行线列线是复用的,通过RAS和CAS两个管脚信号决定是行地址还是列地址,
    WE用来决定是读操作还是写操作。为1时进行读操作,为0时进行写操作。
    采用这种DRAM进行设计时,处理器内部一般具有相应的电路与之配套,否则使用起来是很困难的。
    在arm9上一般都会用到,在arm9处理器上有相应的管脚与之相连,所以连线非常简单。
    上面这篇文章以实例介绍了DRAM的电路设计方法。不错。
     
    而这个地址中的文章详细的介绍了内存的读写过程,很不错,虽然没看太明白。

    arm 2440 学习笔记

     
    三星2440开发板核心板主要包括 :
    一个2440芯片,一个12M晶振,一个32.768KHZ的晶振。
        12M的晶振用来给arm内部所需的各种电路提供时钟,倍频到几百兆的频率。
        两种方式为arm内部提供所需的时钟,一种是通过晶振,第二种是通过外部时钟        EXECLK,选用一种时另一种接高电平。
        OM[0,1]管脚复位时的高低电平决定了芯片的工作模式。
    一个MIC5219,电源芯片提供了1.3v的电压。
    两片HY57V561620 SDRAM,组成了64Mram。
    一片nandflash K9F1208 ,64M。nandflash 均为串行flash。容量大。
     
    以上这些就是核心板,3.3V电源是从主板引过来。
    这个核心板子上要学习的就是ram和flash的引线。地址线,数据线的连接。