上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 26 下一页
摘要: Iometer简介 Iometer 是一个工作在单系统和集群系统上用来衡量和描述I/O子系统的工具。 Iometer 既是工作负载生成器(也就是说,它可以进行输入输出操作,以便增加系统的负荷),它还是一个测量工具(也就是说,它检查并且记录I/O 操作的性能和对系统的影响)。它可以被配置为模拟任何程序或者基准测试程序的磁盘和网络I/O的负载,或者用来产生整个综合的I/O负载。它也可以用来产生并测... 阅读全文
posted @ 2013-04-19 14:07 ydzhang 阅读(965) 评论(0) 推荐(0)
摘要: 链表(list)和哈希表(hlist)是内核常用到的两个工具,负责组织内核中很多的数据结构,如在进程管理中用于组织进程,文件系统中的inode节点链表,dentry链表,vfsmount链表等等。 链表使用struct list_head内嵌结构来将其寄生的结构组织成双向循环链表,并且表头跟普通节点的结构相同,非常容易理解。 但哈希表不同,其表头跟普通节点采用不同的数据结构,并且节点的组织也不是... 阅读全文
posted @ 2013-04-19 14:07 ydzhang 阅读(590) 评论(0) 推荐(0)
摘要: 在项目中遇到一个问题,当客户端通过SUN RPC进行远程过程调用时,服务器如何获取调用方的IP地址,由于RPC是socket的封装,在send/recv的调用中都能获取数据包的源IP地址,故RPC肯定又能提供这样的接口。 最开始的需求源于DNFS的存储节点周期性的向元数据服务器发送心跳信息,当收到心跳信息后,服务器需要辨别心跳信息来自哪一个存储节点,WCW师兄的方法是在调用参数中增加IP地址... 阅读全文
posted @ 2013-04-19 14:07 ydzhang 阅读(2084) 评论(0) 推荐(0)
摘要: l 符号表链接过程的本质就是把多个不同的目标文件之间相互粘在一起。在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量(函数,变量统称符号)的地址的引用。符号是链接过程中的粘合剂,整个链接过程是基于符号引用完成的,链接过程中很关键的一部分就是符号的管理,每一个目标文件都会有一个相应的符号表(Symbol Table),这个表里面记录了目标文件中用到的所有符号。每个定义的符号有一个对应的值,叫做符号值,对于变量和函数来说,符号值就是它们的地址。符号主要包括定义在本文件内的全局符号,在本文件中引用的全局符号(但定义在其它文件),段名,局部符号,行号信息(目标文件指令与源代 阅读全文
posted @ 2013-04-19 14:06 ydzhang 阅读(610) 评论(0) 推荐(0)
摘要: Linux可执行文件为ELF格式,ELF格式文件主要分为以下几类:1. 可重定位文件(Relocatable File),这类文件包含了代码和数据,可以被用来链接成可执行文件或共享目标文件,静态链接库也可以归为这一类,如.o文件。2. 可执行文件(Executable File),这类文件包含了直接执行的程序,如/bin/bash等。3. 共享目标文件(Shared Object File),链接器可以使用这种文件跟其他的可重定位文件和共享目标文件链接,产生新的目标文件;动态链接器可以将几个共享目标文件与可执行文件结合,作为进程映像的一部分来运行,如glibc***.so。4. 核心转储文件( 阅读全文
posted @ 2013-04-19 14:06 ydzhang 阅读(985) 评论(0) 推荐(0)
摘要: 程序设计的模块化是程序员们一直在追求的目标,因为当一个系统十分复杂时,我们不得不将一个复杂的系统逐步分割成小的系统以达到各个击破的目的。复杂的软件也是如此,程序员把每个源代码模块独立的编译,然后按照需要将它们组装起来,这个组装模块的过程就是链接。链接的主要内容就是把各个模块之间相互引用的部分都处理好,使得各个模块之间能够正确地链接,链接过程主要包括地址和空间分配,符号决议和重定位等步骤。链接过程如下图所示: 如程序模块main.c中使用了另外一个模块中的func.c中的函数foo(),在main.c中的每一次调用foo函数时都必须知道foo的确切地址,但由于每个模块都是单独编译的,在编译mai 阅读全文
posted @ 2013-04-19 14:06 ydzhang 阅读(157) 评论(0) 推荐(0)
摘要: 编译器是将高级语言翻译成机器语言的一个工具,编译过程是对预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件,编译流程如下图所示。以C语言语句 array[index] = (index+4) * (2 + 6)为例进行分析。1 词法分析首先源代码程序被输入到扫描器(Scanner),扫描器进行词法分析,运用类似于有限状态机的算法将源代码的字符序列分割成一系列的记号(Tokens)。如上述的语句将被分割成:array [ index ] = ( index + 4 ) * ( 2 + 4 )等记号,词法分析产生的记号一般包括关键字,标识符,字面量(数字,字符串等) 阅读全文
posted @ 2013-04-19 14:06 ydzhang 阅读(263) 评论(0) 推荐(0)
摘要: 以helloworld为例分析gcc编译过程:#include <stdio.h>int main(){ printf(“Hello World\n”); return 0;}通常我们使用gcc来生成可执行程序,命令为:gcc hello.c,生成可执行文件a.out实际上gcc hello.c可以分解为4个步骤,分别是预处理(Preprocess),编译(Compilation),汇编(Assembly)和链接(Linking),如下图所示:1 预编译gcc –E hello.c –o hello.i,以下为预处理后的输出文件hello.i的内容# 1 "hello.c 阅读全文
posted @ 2013-04-19 14:06 ydzhang 阅读(437) 评论(0) 推荐(0)
摘要: 1. UNIX系统中的设备以文件的形式呈现,用户可以像使用普通文件一样使用设备;2. UNIX-III以普通文件的方式呈现命名管道;3. Killiam的进程文件系统中,进程对应着特殊目录,目录中有进程的相关信息,可通过文件操作来控制进程;4. PLAN9中的服务对应着特殊目录,可通过文件操作来访问系统服务;5. 基于FUSE的一些MultimediaCoding,Compress文件系统,能让用户透明的访问需要编解码的多媒体文件,需要解压缩的压缩文件等;6. 语义文件系统将额外的属性与文件相关联,并建立索引,以丰富文件的访问接口,提供高效的查找服务;以上方式都是在不改变用户接口的情况下提供特 阅读全文
posted @ 2013-04-19 14:06 ydzhang 阅读(144) 评论(0) 推荐(0)
摘要: /** 使用信号实现父子进程之间的同步** TELL_WAIT(): set things up for TELL_xxx & WAIT_xxx * TELL_PARENT(): tell parent we are done* WAIT_PARENT(): wait for parent* TELL_CHILD(): tell child we are done* WAIT_CHILD(): wait for child** SIGUSR1: the signal parent sends to child* SIGUSR2: the signal child sends to pa 阅读全文
posted @ 2013-04-19 14:06 ydzhang 阅读(737) 评论(0) 推荐(0)
上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 26 下一页