存档

‘应用程序’ 分类的存档

关于ELF的辅助向量

2013年2月5日 没有评论 7,900 次浏览

elf是Linux系统下最通用的可执行程序的文件格式,关于elf文件的加载与动态链接已很多的相关资料,而本文尝试着重介绍一下其中的一个点,即辅助向量(Auxiliary... [阅读更多]

如何追踪函数的完整调用过程

2013年2月5日 2 条评论 11,365 次浏览

何追踪函数的完整调用过程?对于软件编程人员来说,这一个有趣的话题,而在stackoverflow上就恰好有这么一个讨论,本文就对这个讨论里的内容进行一下实际操作与转述。 我们知道两个命令,ltrace和strace,其中ltrace用于追踪记录动态库函数的调用执行,而strace用于追踪记录系统调用函数的调用执行,看示例: #... [阅读更多]

64位Linux下的系统调用

2013年2月4日 没有评论 10,850 次浏览

AMD64,由AMD公司提出来的64位技术,由于它能很好的向下兼容32位,因此在与Intel公司的纯64技术IA64(即无法向下兼容)进行竞争的过程中占据着绝对的市场优势,当然,Intel公司不会自甘落后,因此也相继推出了IA32E(后被正式命名为EM64T,Extended... [阅读更多]

32位Linux下的系统调用

2013年2月4日 没有评论 6,878 次浏览

我们知道,Linux系统分为用户态和内核态,当用户态的应用程序请求执行内核态代码获取相关内核服务时,需要通过系统调用的形式来完成,比如利用系统调用getuid()请求获取执行程序的真实用户ID号。 当然,getuid()只是glibc封装的库函数,我们也可以直接通过syscall函数(这里是指glibc库里的syscall接口,请和后面文章将提到的syscall指令区分开)进行调用: #... [阅读更多]

gcc的编译过程及相关简介

2013年1月23日 没有评论 10,065 次浏览

我们知道,在平常编译程中所使用的gcc或g++只是一套工具集的外包封装,具体的编译工作并不是由gcc本身来完成的,而gcc为了完成整个编译工作,它直接或间接调用的工具主要包括预处理器/分析编译器/汇编器/连接器(preprocessor/parser-compiler/assembler/linker),比如cpp,cc1,cc1plus,as和ld等等。 如何查看gcc在编译过程的细节?这很简单,带上-v或-###参数(两者有差别,具体请看man手册:man... [阅读更多]

gcc中的weak和alias

2013年1月20日 没有评论 12,420 次浏览

在看glibc源代码的时候,能看到很多对函数的属性修饰,比如weak_alias(注:我当前看的是2.17版本的glibc源代码)宏里的weak和alias: /* Define ALIASNAME as a weak alias for NAME. If weak aliases are not... [阅读更多]

Linux native AIO与eventfd、epoll的结合使用

2013年1月9日 没有评论 12,451 次浏览

在前面的示例libaio_test.c和native_aio_test.c中,可以看到对磁盘aio请求(本文的aio都指此类)的使用有阻塞等待,这明显之处为对io_getevents()函数(当然,其它函数,比如io_submit()也有一定程度的阻塞)的调用,它会等待并获取已完成的io请求,如果当前没有或少于指定数目的io请求完成,那么就会等待直到timeout。 io_getevents()函数的等待会导致整个进程的阻塞使得程序无法继续向下执行,如果程序还有其它阻塞点,那么有必要想办法把这多处等待合而为一同时进行,从而提高并行性,也就是通常所说的select/epoll等这类多路复用技术。 本文就以epoll为例,介绍一下在linux下,如何把aio结合并应用到epoll机制里。我们知道,epoll机制的最大好处就是它能够在同一时刻对多个文件描述符(通常是由众多套接字形成的描述符集合)进行监听,并将其上发生的读/写(或错误等)事件通知给应用程序,也就是做到时间上的复用。如果能够把aio也放到epoll机制里,即把aio当作epoll机制里的“一路io”,那么就能使得aio与其它可能的等待操作(比如:读/写套接字)共同工作,从而达到时间复用的目的。 作为epoll机制里的“一路io”,需要一个文件描述符来反馈对应的发生事件,而对于纯aio而言,是没有文件描述符作为代表的,因此linux系统上多出了一个eventfd()的系统调用: #include... [阅读更多]

异步I/O之native AIO篇

2013年1月6日 6 条评论 10,160 次浏览

本文介绍Linux下另外一种异步I/O,即由Linux内核实现提供的native... [阅读更多]

异步I/O之glibc AIO篇

2013年1月1日 2 条评论 6,019 次浏览

Linux下可用的异步I/O(以下简称为AIO)有两种,一种由Glibc实现提供,另一种是由Linux内核实现提供,而本文介绍的是glibc内的AIO。 在介绍AIO之前,需要对Linux上的各种不同I/O模型有一个较好的了解,而在这里:http://www.ibm.com/developerworks/cn/linux/l-async/,已经有了很详细的解释,这无需多说。 先来看示例,从感观上来进行认识: /** ... [阅读更多]

read/write数据读写传输方式

2012年8月9日 1 条评论 5,157 次浏览

利用系统调用函数read()/write()是我们平常用得最多的一种数据读写方式,大多数情况下我们并没有考虑这种数据读写方式的执行效率,因为在很多并不以数据频繁读写为性能瓶颈的应用程序中函数read()/write()消耗的执行时间可以忽略,但是它们内在具体实现和执行效率到底如何呢?下面我们就来进行详细的分析。 函数read()/write()定义在头文件unistd.h内,原型如下: #include... [阅读更多]