08 2013 档案

摘要:读阮一峰翻译的《lisp为什么这么先进》最后一段话非常有感触。程序的形式,应该仅仅反映它所要解决的问题。代码中其他任何外加的形式,都是一个信号,(至少对我来说)表明我对问题的抽象还不够深。我是这样来理解的,假如我想在一堆数据里检索某一个字符是否存在。应该怎么写呢?if(search(string,text)==ture)print "yes"elseprint "no"可是马上问题升级了,这个对象在内存中吗?假如在磁盘的文件系统中,我是否应该先fopen一下。可是这一堆数据我分开存放了,不是存放在一个文件中。再假如,我是在一个数据中心,这一堆数据,其实是 阅读全文
posted @ 2013-08-29 15:59 李可以 阅读(286) 评论(0) 推荐(0)
摘要:觉得这一章写的很乱,我懒得看windows的知识,也懒得看ibm的知识,所以直接上unix吧。一、目标文件中都有什么?一个目标文件包含五类信息。头信息:关于文件的整体信息,诸如代码大小,翻译成该目标文件的源文件名称和创建日期等。目标代码:程序和数据重定位信息:一个位置列表,链接器在修改目标代码的地址时会对他进行调整。符号:该模块定义的全局符号(导出),以及从其它模块导入的符号,或者由链接器定义的符号。调试信息:目标代码中与链接无关但会被调试器使用到的其他信息。二、设计一个目标文件格式。一个目标文件可能是可链接的(可重定位的),可执行的,可载入的(共享库)。一个可链接的目标文件包含目标代码所需的 阅读全文
posted @ 2013-08-28 21:22 李可以 阅读(715) 评论(0) 推荐(0)
摘要:链接器和加载器,以及编译器和汇编器与体系结构的细节密切相关,这包括硬件体系结构和操作系统对目标计算机在体系结构方面的约定。硬件体系结构的两个方面影响到连接器:程序寻址和指令格式。应用程序二进制接口ABI包含了应用程序在这个系统下运行时必须遵守的编程约定,ABI包含一系列的系统调用和使用这些系统调用的方法,以及可以使用的内存地址和使用机器寄存器的规定。ABI要求每个程序包含一个该程序各例程使用的所有静态数据的地址表。内存地址直接顺序和对齐,大端小端,无须争论,小端指低位在低字节,对齐是必须的。过程调用和可寻址性对于局部和全局静态数据,编译器可以为一个例程引用的所有静态变量创建一个指针表。如果某个 阅读全文
posted @ 2013-08-27 23:46 李可以 阅读(233) 评论(0) 推荐(0)
摘要:链接器和加载器做什么?任何一个链接器和加载器的基本工作都非常简单:将更抽象的名字与更低层的名字绑定起来,好让程序员使用更抽象的名字编写代码。地址绑定:从历史的角度编译时绑定链接时绑定加载时绑定运行时绑定都是为了节省代码。虚拟内存的出现,使分段出现?动态链接库的出现。链接器与加载器完成几个相关但概念上不同的动作。程序加载:将程序从辅助存储设备拷贝到主内存中准备运行。分配存储空间,设置保护位,或通过虚拟内存将虚拟地址映射到磁盘内存页上。重定位:汇编器为每个文件创建程序地址从0开始的目标代码,但是实际情况是会被加载到不同的地址,调整程序中的数据和代码以反映所分配地址的过程。 典型的过程是:多个子程序 阅读全文
posted @ 2013-08-27 21:23 李可以 阅读(418) 评论(0) 推荐(0)
摘要:本章是从__链接和加载__这一章扣出来的。(好,暂停,在这里我要说一说我的想法,进程当然有基地址,然后硬件会给每个加载进内存的程序的代码和数据的地址进行调整。这样便支持了运行时绑定。可以注意到,出了动态链接库或者说共享库,程序代码不许要保留其他符号,保留的符号必然是DLL或这.a文件里的。而这样的文件正是链接程序生成的,链接程序为了生成这样的程序需要付出什么代价呢?每一个目标文件有基地址,代码段和数据段所有使用内存地址是num+pbase的格式。对一个目标文件而言pbase为0,num也肯定都为正。符号表仍然保留,是为了那些共享库。(头痛,其实还有外部引用问题。)多个目标文件链接时,将记录基地 阅读全文
posted @ 2013-08-27 15:42 李可以 阅读(503) 评论(0) 推荐(0)
摘要:有一个假想的对话如下。主:你想制作出一群能相互协作的纳米机器人?客:是的,我想把它们当作病毒杀手,并且构建人类的防御系统。主:有什么困难?客:困难在于识别,单个机器人不可能具有识别哪一个细胞(广义)是病毒还是正常的细胞,或者正常的细菌。主:为什么呢?客:单个机器人不应当携带太多的bit位,它无法运行一个操作系统,而是机器人协作来构成一个操作系统,如同一群鱼群。主:病毒之间有通信吗?客:我不知道,但是细菌绝对有。主:你看,以乙肝病毒举例,乙肝病毒之间并不需要相互通信,它们仅仅是入侵肝细胞,然后不停的复制。客:你的意识是不需要群体协作,只需要制作出一种特殊目的,针对特殊病毒的纳米机器人?主:对。客 阅读全文
posted @ 2013-08-27 11:51 李可以 阅读(352) 评论(0) 推荐(0)
摘要:一、社会学《社会学》《社会学与生活》二、心理学《害羞心理学》《超越自卑》《为何家会伤人》三、计算机科学《计算机组成体系结构》《BOCHS源代码》《Linker and loader》 阅读全文
posted @ 2013-08-25 14:13 李可以 阅读(145) 评论(0) 推荐(0)
摘要:当《UNIX环境高级编程》和《鸟哥的私房菜》到我的桌头的时候,我忽然产生了厌倦的心。NO,我不是想做这个,我不是想学习这个操作系统的结构和接口。我想些一个操作系统,更一般的,一个分布式的操作系统,但是小核心的,纳米机器人。对,就是纳米机器人,但是我是想造福人类。纳米机器人就是用来构造一个集群,这个集群用来构成人体的防卫系统,用来杀死入侵的病毒,细菌。比如乙肝病毒,艾滋病毒,狂犬病毒。每一个纳米机器人仅仅是一个killer,它们如何确定哪一个是病毒,哪一个是细胞,这是集群的智慧。我完全不知道一个这样的机器人能够携带多少bit,但是我希望能有这样的一个系统,它的每个孩子,都不用携带太多bit。我能 阅读全文
posted @ 2013-08-25 13:43 李可以 阅读(330) 评论(0) 推荐(0)
摘要:已经是第几遍读C 陷阱与缺陷了,某种意义上,这不是一本常读常新的书,大概是因为读一遍过后就记住了。一、编译器在将程序分解成符号的时候,使用的是大嘴法。二、使用不对称边界有很多好处。三、缓冲输出与内存分配,缓冲输出数组不要建立在堆栈上。四、离开一定的上下文,某些类型错误的从本质上说是难于检测的。 阅读全文
posted @ 2013-08-24 19:50 李可以 阅读(233) 评论(0) 推荐(0)
摘要:一、起因这两天比较有意思,客户那里的代码遇到了一个jvm的bug崩溃了,所以老板让我升级JVM,这是一个处理器架构和x86不同的处理器,我改怎么安装呢?我百度了OpenJDK,并且按照http://hg.openjdk.java.net/jdk7/build/raw-file/tip/README-builds.html解决了大量的依赖关系。花费了大量的时间。但是最后还是失败了。所以我向OpenJDK的邮件列表,和centos的邮件列表发了两封邮件。第一封是这样写的:[Build OpenJDK] How can I build OpenJDK7 in my platform not x86E 阅读全文
posted @ 2013-08-23 16:06 李可以 阅读(489) 评论(0) 推荐(0)
摘要:抽象数据类型(ADT)为类型的属性和可对类型执行的操作提供一个抽象的描述,这个米阿叔不受任何实现的约束,甚至不受任何特定编程语言的约束,这样一种正式的抽象描述被称为抽象数据类型。开一个实现该ADT的编程接口,即说明如何存储数据,并描述用于执行所需操作的函数集合,比如在c中,同时提供一个结构的定义和用来做做该结构的函数原型。编程代码来实现这个接口。列表:列表类型名称简单列表类型属性可保存一个项目序列类型操作把列表初始化为空列表确定类表是否为空确定列表是否已满确定列表中的个数想列表末尾添加项目遍历列表,处理列表中每个项目清空列表当用LIST movies时,我们是在建立一个列表,而不是一个指针,这 阅读全文
posted @ 2013-08-20 20:04 李可以 阅读(374) 评论(0) 推荐(0)
摘要:一、定义 1. 正则文法《离散数学及其应用》一书中,对正则文法做了如下的描述。形如 A—>aB或A—>a,其中A,B是非终结符,a是终结符。正则文法之所一成为正则文法因为文法生成的语言是正则的。 2. 正则集合正则集合是这样的集合:从空集,空串,单字符串开始,以任意顺序通过链接、并和克莱因闭包运算形成的。 3. 克莱因定理一个集合是正则的,当且仅当它可由一个有限状态自动机识别。二、正则表达式 1. 纯文本区分大小写,可以包含空格和数字。 2. 特殊字符 特殊字符包含一下几个. * [ ] ^ $ { } \ + ? | ( ) 共十四个。不能在字符串中使用,要想使用,需要用转义字符 阅读全文
posted @ 2013-08-19 16:44 李可以 阅读(790) 评论(0) 推荐(0)
摘要:了解完linux下的文件系统之后,顺便对FAT32也研究一下。假如一个FAT32表如下所示。文件的簇应该保留在目录中,根据此簇,应该能得到一个块。要找到文件的下一块,就要根据簇在FAT中寻找,所以FAT中存储的不是本簇的簇号,而是下一簇的簇号。每个簇都是4字节。、CLEAR?FAT中存储的值有几个特殊值。0x?0000000 空闲簇0x?0000001 保留簇0x?0000002 - 0x?FFFFFEF 被占用的簇;指向下一个簇0x?FFFFFF0 - 0x?FFFFFF6 保留值0x?FFFFFF7 坏簇0x?FFFFFF8 - 0x?FFFFFFF 文件最后一个簇windows只使... 阅读全文
posted @ 2013-08-18 15:09 李可以 阅读(494) 评论(0) 推荐(0)
摘要:一.文件系统结构前一篇文章,讲了磁盘的结构,了解磁盘的结构之后,更容易了解内存和磁盘之间的I/O。磁盘被分成磁道和扇区。一个扇区就是的数据块大小通常为512B。为了改善I/O效率,内存和磁盘之间的I/O转移是以块为单位而不是以字节为单位的。每块(簇)为一个或多个扇区。文件系统能轻松的存储,定位,提取数据,它的设计有两个问题。定义文件系统的接口,定义文件极其属性,文件所允许的操作、组织文件的目录结构。创建数据结构和算法来将逻辑文件系统映射到物理外存设备上。1.1.基本文件系统 基本文件系统只需要向合适的设备驱动程序发送一般命令就可对磁盘上的物理块进行读写,每个块由其数值磁盘地址来表示。(驱动器. 阅读全文
posted @ 2013-08-18 13:55 李可以 阅读(657) 评论(0) 推荐(0)
摘要:1.磁盘一个磁盘有多块磁盘片磁盘片,上下都有磁质材料,通过在磁片上进行磁记录可以保存信息。磁盘表面被逻辑的划分为圆形的磁道,磁道进一步划分成扇区。位于同一个磁臂位置的磁道构成了柱面。一块磁盘可能包含上万个同心柱面,每个磁道可能包含数百个扇区。 磁盘有几个性能参数:传输速率:在驱动器和计算机之间的数据传输速率。定位时间寻道时间 移动磁臂到所要柱面所需时间。 (磁臂只能前后移动。) 2. 旋转等待时间 等待所要的扇区到磁臂下所需要的时间。(旋转移动。)2.低级格式化 一个逻辑块号由柱面号,柱面内的磁道号,磁道内的扇区号组成。 一个新的磁盘是一个白板... 阅读全文
posted @ 2013-08-17 10:55 李可以 阅读(429) 评论(0) 推荐(0)
摘要:我所理解的80386编程模型一:缘起 这是我第二次读赵炯博士的《linux0.11内核完全注释3.0》了,在3.0版本里作者在前几章加了一些介绍性的知识。比如第三章的“内核编程语言和环境”以及第四章“80x86保护模式及其编程”,我觉得讲的是极好的。第一遍看的时候,花了好多时间,记得看懂了,但是过了一段时间又忘了,这就是没有记笔记的原因。这一次看的时候,收获也很大,所以我想做一个笔记备忘一下。二:逻辑地址 2.1 80386中的逻辑地址 在8086中,一个程序的逻辑地址的形式是有段基址:段内便宜组成,比如代码段中CS:IP,数据段的DS:SI,堆栈的ES:SP。其物理地址是通过段地址左移... 阅读全文
posted @ 2013-08-09 17:19 李可以 阅读(566) 评论(0) 推荐(0)
摘要:现在是一个C1362板卡通过PCIe总线连接在一台intel服务器上。首先制作好从PCIe启动的bootrom,制作命令如下。tile-mkboot -o gx36_undisk.bootrom -c --hv-bin-dir /TileraMDE/tile/boot/ --hvc gx36.hvc vmlinux=/TileraMDE/tile/boot/vmlinux classifier=/TileraMDE/tile/boot/classifier initramfs.cpio.gz=/TileraMDE/tile/boot/initramfs.cpio.gz其中gx36.hvc文.. 阅读全文
posted @ 2013-08-08 14:57 李可以 阅读(919) 评论(0) 推荐(0)