摘要: 链接器和加载器做什么?任何一个链接器和加载器的基本工作都非常简单:将更抽象的名字与更低层的名字绑定起来,好让程序员使用更抽象的名字编写代码。地址绑定:从历史的角度编译时绑定链接时绑定加载时绑定运行时绑定都是为了节省代码。虚拟内存的出现,使分段出现?动态链接库的出现。链接器与加载器完成几个相关但概念上不同的动作。程序加载:将程序从辅助存储设备拷贝到主内存中准备运行。分配存储空间,设置保护位,或通过虚拟内存将虚拟地址映射到磁盘内存页上。重定位:汇编器为每个文件创建程序地址从0开始的目标代码,但是实际情况是会被加载到不同的地址,调整程序中的数据和代码以反映所分配地址的过程。 典型的过程是:多个子程序 阅读全文
posted @ 2013-08-27 21:23 李可以 阅读(385) 评论(0) 推荐(0) 编辑
摘要: 本章是从__链接和加载__这一章扣出来的。(好,暂停,在这里我要说一说我的想法,进程当然有基地址,然后硬件会给每个加载进内存的程序的代码和数据的地址进行调整。这样便支持了运行时绑定。可以注意到,出了动态链接库或者说共享库,程序代码不许要保留其他符号,保留的符号必然是DLL或这.a文件里的。而这样的文件正是链接程序生成的,链接程序为了生成这样的程序需要付出什么代价呢?每一个目标文件有基地址,代码段和数据段所有使用内存地址是num+pbase的格式。对一个目标文件而言pbase为0,num也肯定都为正。符号表仍然保留,是为了那些共享库。(头痛,其实还有外部引用问题。)多个目标文件链接时,将记录基地 阅读全文
posted @ 2013-08-27 15:42 李可以 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 有一个假想的对话如下。主:你想制作出一群能相互协作的纳米机器人?客:是的,我想把它们当作病毒杀手,并且构建人类的防御系统。主:有什么困难?客:困难在于识别,单个机器人不可能具有识别哪一个细胞(广义)是病毒还是正常的细胞,或者正常的细菌。主:为什么呢?客:单个机器人不应当携带太多的bit位,它无法运行一个操作系统,而是机器人协作来构成一个操作系统,如同一群鱼群。主:病毒之间有通信吗?客:我不知道,但是细菌绝对有。主:你看,以乙肝病毒举例,乙肝病毒之间并不需要相互通信,它们仅仅是入侵肝细胞,然后不停的复制。客:你的意识是不需要群体协作,只需要制作出一种特殊目的,针对特殊病毒的纳米机器人?主:对。客 阅读全文
posted @ 2013-08-27 11:51 李可以 阅读(333) 评论(0) 推荐(0) 编辑
摘要: 一、社会学《社会学》《社会学与生活》二、心理学《害羞心理学》《超越自卑》《为何家会伤人》三、计算机科学《计算机组成体系结构》《BOCHS源代码》《Linker and loader》 阅读全文
posted @ 2013-08-25 14:13 李可以 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 当《UNIX环境高级编程》和《鸟哥的私房菜》到我的桌头的时候,我忽然产生了厌倦的心。NO,我不是想做这个,我不是想学习这个操作系统的结构和接口。我想些一个操作系统,更一般的,一个分布式的操作系统,但是小核心的,纳米机器人。对,就是纳米机器人,但是我是想造福人类。纳米机器人就是用来构造一个集群,这个集群用来构成人体的防卫系统,用来杀死入侵的病毒,细菌。比如乙肝病毒,艾滋病毒,狂犬病毒。每一个纳米机器人仅仅是一个killer,它们如何确定哪一个是病毒,哪一个是细胞,这是集群的智慧。我完全不知道一个这样的机器人能够携带多少bit,但是我希望能有这样的一个系统,它的每个孩子,都不用携带太多bit。我能 阅读全文
posted @ 2013-08-25 13:43 李可以 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 已经是第几遍读C 陷阱与缺陷了,某种意义上,这不是一本常读常新的书,大概是因为读一遍过后就记住了。一、编译器在将程序分解成符号的时候,使用的是大嘴法。二、使用不对称边界有很多好处。三、缓冲输出与内存分配,缓冲输出数组不要建立在堆栈上。四、离开一定的上下文,某些类型错误的从本质上说是难于检测的。 阅读全文
posted @ 2013-08-24 19:50 李可以 阅读(198) 评论(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 李可以 阅读(479) 评论(0) 推荐(0) 编辑
摘要: 抽象数据类型(ADT)为类型的属性和可对类型执行的操作提供一个抽象的描述,这个米阿叔不受任何实现的约束,甚至不受任何特定编程语言的约束,这样一种正式的抽象描述被称为抽象数据类型。开一个实现该ADT的编程接口,即说明如何存储数据,并描述用于执行所需操作的函数集合,比如在c中,同时提供一个结构的定义和用来做做该结构的函数原型。编程代码来实现这个接口。列表:列表类型名称简单列表类型属性可保存一个项目序列类型操作把列表初始化为空列表确定类表是否为空确定列表是否已满确定列表中的个数想列表末尾添加项目遍历列表,处理列表中每个项目清空列表当用LIST movies时,我们是在建立一个列表,而不是一个指针,这 阅读全文
posted @ 2013-08-20 20:04 李可以 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 一、定义 1. 正则文法《离散数学及其应用》一书中,对正则文法做了如下的描述。形如 A—>aB或A—>a,其中A,B是非终结符,a是终结符。正则文法之所一成为正则文法因为文法生成的语言是正则的。 2. 正则集合正则集合是这样的集合:从空集,空串,单字符串开始,以任意顺序通过链接、并和克莱因闭包运算形成的。 3. 克莱因定理一个集合是正则的,当且仅当它可由一个有限状态自动机识别。二、正则表达式 1. 纯文本区分大小写,可以包含空格和数字。 2. 特殊字符 特殊字符包含一下几个. * [ ] ^ $ { } \ + ? | ( ) 共十四个。不能在字符串中使用,要想使用,需要用转义字符 阅读全文
posted @ 2013-08-19 16:44 李可以 阅读(716) 评论(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 李可以 阅读(460) 评论(0) 推荐(0) 编辑