linux编程
文章平均质量分 71
vivi
这个作者很懒,什么都没留下…
展开
-
autotools使用总结
最近在因为修改了strongswan的某些源码,需要重新编译。像strongswan这样的开源项目,一般都使用autotools来自动生成Makefile。以前只接触过简单Makefile的编写,因此初学autotools觉得有点复杂。autotools包括autoscan、autoconf、automake、aclocal、autoheader等,流程图如下:由于strongswan的发布版中中,已经写好了configure.in文件,因此autoscan的步骤可以省略。我在修改了源码里的Make.am后原创 2011-03-14 17:11:00 · 6687 阅读 · 0 评论 -
epoll精髓
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __转载 2011-12-09 00:56:46 · 1920 阅读 · 0 评论 -
linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR) linux内核的三种调度方法:1,SCHED_OTHER 分时调度策略,(默认的)2,SCHED_FIFO实时调度策略,先到先服务3,SCHED_RR实时调度策略,时间片轮转 linux内核的三种调度方法:1,SCHED_OTHER 分时调度策略,2,SCHED_FIFO实转载 2011-10-25 09:09:05 · 2523 阅读 · 0 评论 -
在Linux中设置线程的优先级
如何在Linux中设置线程的优先级我们使用int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);来创建线程,但是如何设置线程的优先级呢?在讨论这个问题的时候,我们先要确定当前线程使用的调度策略,posix提供了int转载 2011-10-25 08:42:53 · 15068 阅读 · 0 评论 -
互斥同步-临界区,互斥量,信号量,事件的区别
四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线程有一些事件已转载 2011-05-12 21:10:00 · 1860 阅读 · 2 评论 -
linux进程调度浅析
操作系统要实现多进程,进程调度必不可少。有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一样,脱离了实际环境,这些结论是比较片面的。 而进程调度究竟有多重要呢? 首先,我们需要明确一点转载 2011-09-11 16:26:20 · 2521 阅读 · 1 评论 -
在用户空间发生中断时,上下文切换的过程
所谓上下文切换,实质就是寄存器堆的切换过程。这其中一部分需要硬件来切换,一部分需要软件来处理。当在用户空间发生中断时,首先由 x86 CPU 从硬件角度进行处理,然后才是 linux 内核的处理。当中断处理完毕,返回到用户空间时,最后的步骤也是交给 CPU 硬件来处理的。1、原创 2011-07-15 10:45:06 · 4394 阅读 · 0 评论 -
Futex同步机制
引子在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序",那futex是什么?和glibc又有什么关系呢?1. 什么是FutexFutex 是Fast U转载 2011-07-14 19:12:41 · 1441 阅读 · 0 评论 -
POSIX NTPL 线程库简介
在Linux操作系统中,本地POSIX线程库(NPTL)是一种软件特性,它可让Linux的内核,高效地运行那些使用POSIX风格的线程所编写的程序。测试中,NPTL在一个IA-32处理器上,成功地同时跑了10万个线程,启动这些线程只用了不到2秒。比较起来,在不支持NPTL的内核上转载 2011-07-14 18:38:33 · 8705 阅读 · 0 评论 -
《程序员的自我修养》笔记--可执行文件的装载
程序执行时所需要的指令和数据必须都在内存中才能正常运行,最简单的办法就是将程序运行时所需要的指令和数据全部都装入内存,这样程序就能顺利执行,这就是最简单的静态装入的方法。但是程序所需要的内存数量可能大于物理内存,静态装入就不太现实。后来研究发现,程序运行时具有局部性原理,所以我们可以将程序最常用的部分驻留在内存中,而将一些不太常用的数据存放在磁盘上,这就是动态装载的原理。覆盖装入和页映射是两种典型的动态装入方法。覆盖装入就是如果两个模块不会同时运行,则可以使这两个模块共用一块内存,需要哪个模块的时候就装入。原创 2011-05-06 15:21:00 · 2110 阅读 · 0 评论 -
《程序员的自我修养》笔记--目标文件详解
从源程序到目标文件的生成过程最简单的编译命令是gcc helloworld.c,它包含了以下几个步骤:预处理、编译、汇编、链接,下面分别简介。预处理:处理#define宏定义、#if #ifdef等条件编译指令、#include预编译指令,删除注释,添加行号和文件名标识,保留所有的#pargma编译器指令,经过预编译后的文件为.i文件。预编译命令为:gcc -E hello.c -o hello.i或者cpp hello.c > hello.i编译:把预处理完得文件进行一系列的词法分析、语法分析、语意分析及原创 2011-05-06 12:42:00 · 2541 阅读 · 0 评论 -
gcc编译过程+Makefile反思
看了一段时间的《程序员自我修养》了,也算对程序的编译,链接,装载的原理有了初步的了解。十分惭愧的是,今天想自己写一个简单的Makefile,竟然很模糊,无法十分自如的写出(平时都用一个已经写好的样板改),这里做一个反思。 假设有a.c文件,要把它编译成可执行文件a。 编译+汇编: 试了一下,以下三种写法都行:gcc -c a.c -o a.ogcc -c -o a.o原创 2011-06-05 17:24:00 · 1774 阅读 · 1 评论 -
大“内”高手【共享内存与线程局部存储】
<br />城里的人想出去,城外的人想进来。这是《围城》里的一句话,它可能比《围城》本身更加有名。我想这句话的前提是,要么住在城里,要么住在城外,二者只能居其一。否则想住在城里就可以住在城里,想住在城外就可以住在城外,你大可以选择单日住在城里,双日住在城外,也就没有心思去想出去还是进来了。<br /><br />理想情况是即可以住在城里又可以住在城外,而不是走向极端。尽管像青蛙一样的两栖动物绝不会比人类更高级,但能适应于更多环境的能力毕竟有它的优势。技术也是如此,共享内存和线程局部存储就是实例,它们是为了防转载 2011-04-04 11:13:00 · 884 阅读 · 0 评论 -
select,poll,epoll实现分析—结合内核源代码
select,poll,epoll都是IO多路复用的机制。所谓I/O多路复用机制,就是说通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据原创 2012-05-06 20:31:53 · 11274 阅读 · 4 评论