2013年5月12日

Ubuntu10.04下Linux内核编译的完整步骤

摘要: 1、在http://www.kernel.org/上下载最新的内核源代码linux-2.6.33.1.tar.bz2,放在/huangcheng/Linux内核 目录下,huangcheng是Linux OS的第一个用户名。 2、进入Linux内核源码所在的目录(cd Linux内核),解压该内核... 阅读全文

posted @ 2013-05-12 03:13 胡永光 阅读(226) 评论(0) 推荐(0) 编辑

浅尝异步IO

摘要: 关于异步IO 记得几年前使用MFC编程的时候,曾经使用过windows的异步socket。 当在socket句柄上设置好关心的事件(如,可读、可写)后,如果事件发生,则指定的窗口会收到一个指定的消息。 int WSAAsyncSelect(SOCKET s, HWND hWnd, unsig... 阅读全文

posted @ 2013-05-12 02:50 胡永光 阅读(124) 评论(0) 推荐(0) 编辑

linux异步IO浅析

摘要: 知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上。预先知道这些数据的位置,所以预先发起异步IO读请求。等到真正需要用到这些数据的时候,再等待异步IO完成。使用了异步IO,在发起IO请求到实际使用数据这段时间内,程... 阅读全文

posted @ 2013-05-12 01:29 胡永光 阅读(115) 评论(0) 推荐(0) 编辑

LINUX内核内存屏障

摘要: ================= LINUX内核内存屏障 ================= By: David Howells Paul E. McKenney ... 阅读全文

posted @ 2013-05-12 01:28 胡永光 阅读(149) 评论(0) 推荐(0) 编辑

linux内存屏障浅析

摘要: 内存屏障是一个很神奇的东西,之前翻译了linux内核文档memory-barriers.txt,对内存屏障有了一定有理解。现在用自己的方式来整理一下。 在我看来,内存屏障主要解决了两个问题:单处理器下的乱序问题和多处理器下的内存同步问题。 为什么会乱序 现在的CPU一般采用流水线来执行指令。... 阅读全文

posted @ 2013-05-12 01:24 胡永光 阅读(264) 评论(0) 推荐(0) 编辑

记一个linux内核内存提权问题

摘要: 前些天,linux内核曝出了一个内存提权漏洞。通过骇客的精心构造,suid程序将print的输出信息写到了自己的/proc/$pid/mem文件里面,从而修改了自己的可执行代码,为普通用户开启了一个带root权限的shell。这个过程还是挺有意思的,不得不佩服骇客们的聪明才智,故在此分享一下,... 阅读全文

posted @ 2013-05-12 01:23 胡永光 阅读(195) 评论(0) 推荐(0) 编辑

linux会话浅析

摘要: 说起会话,我们经常登录到linux系统,执行各种各样的程序,这都牵涉到会话。但是,一般情况下我们又很少会去关注到会话的存在,很少会去了解它的来龙去脉。本文就对linux会话相关的信息做一些整理,看看隐藏在我们日常使用的背后,都有些什么样的逻辑。 【会话的维系】 维系一个会话,最常见的有两种方... 阅读全文

posted @ 2013-05-12 01:22 胡永光 阅读(335) 评论(0) 推荐(0) 编辑

linux内核mem_cgroup浅析

摘要: memory cgroup mem_cgroup是cgroup体系中提供的用于memory隔离的功能。 admin可以创建若干个mem_cgroup,形成一个树型结构。可以将进程加入到这些mem_cgroup中。(类似这样的管理功能都是由cgroup框架自带的。) 为了实现memory隔离,... 阅读全文

posted @ 2013-05-12 01:20 胡永光 阅读(303) 评论(0) 推荐(0) 编辑

linux内核cfs浅析

摘要: linux调度器的一般原理请参阅《linux进程调度浅析》。 之前的调度器 cfs之前的linux调度器一般使用用户设定的静态优先级,加上对于进程交互性的判断来生成动态优先级,再根据动态优先级决定进程被调度的顺序,以及调度后可以运行的时间片。 反过来,随着进程的... 阅读全文

posted @ 2013-05-12 01:19 胡永光 阅读(177) 评论(0) 推荐(0) 编辑

浅谈动态库符号的私有化与全局化

摘要: 之前一篇《记一个链接库导出函数被覆盖的问题》中,描述了这样一个问题:动态库若想使用自己的符号,不受可执行程序(或其他动态库的影响),可以使用-Wl,-Bsymbolic链接参数或version_script来让动态库的符号自我解决,而不必通过全局符号表来动态解决。 之前的文章也提到,使用-Wl,... 阅读全文

posted @ 2013-05-12 01:13 胡永光 阅读(280) 评论(0) 推荐(0) 编辑

linux内核tmpfs/shmem浅析

摘要: 说起共享内存,一般来说会让人想起下面一些方法: 1、多线程。线程之间的内存都是共享的。更确切的说,属于同一进程的线程使用的是同一个地址空间,而不是在不同地址空间之间进行内存共享; 2、父子进程间的内存共享。父进程以MAP_SHARED|MAP_ANONYMOUS选项mmap一块匿名内存,for... 阅读全文

posted @ 2013-05-12 01:12 胡永光 阅读(380) 评论(0) 推荐(1) 编辑

linux IPv4报文处理浅析

摘要: 在《linux网络报文接收发送浅析》一文中介绍了数据链路层关于网络报文的处理。 对于接收到的报文,如果不被丢弃、不被网桥转发,会调用netif_receive_skb()提交给IP层; 而对于IP层向外发送的报文,则通过调用dev_queue_xmit()提交给数据链路层。 本文就以neti... 阅读全文

posted @ 2013-05-12 01:10 胡永光 阅读(896) 评论(0) 推荐(0) 编辑

linux memory lock浅析

摘要: linux内核提供了用于锁定内存的系统调用,如: mlock:lock一段地址范围内已map的内存 mlockall:lock进程虚拟地址空间内已map的内存,还可以选择对于此后新map的空间是否自动lock mmap+MAP_LOCKED选项:在mmap的同时,对相应地址范围进行mlo... 阅读全文

posted @ 2013-05-12 01:06 胡永光 阅读(688) 评论(0) 推荐(0) 编辑

由mmap引发的SIGBUS

摘要: 一直以来都觉得使用mmap读文件是非常高效、非常优雅的做法(参见《从"read"看系统调用的耗时》)。mmap之后,就可以通过内存访问的方式访问到文件里的内容,省去了read这样的系统调用。 却不曾想过,mmap以后,如果读文件出错会发生什么…… 今晚看到一篇介绍apache bug的文章,里... 阅读全文

posted @ 2013-05-12 00:32 胡永光 阅读(269) 评论(0) 推荐(0) 编辑

linux时钟浅析

摘要: 时钟的作用 尽管与CPU指令执行没有什么直接关系,时钟对于操作系统来说还是有着很重要的意义: 1、记录系统时间。很多应用程序需要知道日期和时间、由日期和时间构成的时间戳也会被打在文件上面、等等; 2、统计功能。如top之类的用户程序可以查看一段时间内的系统负载、以及各个进程占用CPU的时间... 阅读全文

posted @ 2013-05-12 00:28 胡永光 阅读(151) 评论(0) 推荐(0) 编辑

记一个链接库导出函数被覆盖的问题

摘要: 链接库的一个问题 前些天遇到这样一个问题:libD.so需要用到libS.a提供的方法,于是静态链接了libS.a。而libS.a和libD.so又都会被可执行文件bin所链接。(因为libD.so还提供给其他可执行程序使用,所以链接libS.a是必须的。而libD.so对于bin来说是可选的... 阅读全文

posted @ 2013-05-12 00:27 胡永光 阅读(173) 评论(0) 推荐(0) 编辑

linux seqlock & rcu 浅析

摘要: 在linux内核中,有很多同步机制。比较经典的有spin_lock(忙等待的锁即自旋锁)、mutex(互斥锁)、semaphore(信号量)等。并且它们几乎都有对应的rw_XXX(读写锁),以便在能够区分读与写的情况下,让读操作相互不互斥(读写、写写依然互斥)。而seqlock和rcu应该可以不算... 阅读全文

posted @ 2013-05-12 00:24 胡永光 阅读(121) 评论(0) 推荐(0) 编辑

在多线程程序里面fork

摘要: 在多线程程序里面fork?没错,尽管这是一种很奇怪、以至于几乎不会有人使用的玩法,并且存在死锁等不确定因素。不过讨论讨论倒也挺有意思。 进程A,创建了3个线程。 $ ls /proc/A/task/ | wc -l 3 这时候,A调用fork,创建了进程B。那么B有几个线程呢? $ ls /... 阅读全文

posted @ 2013-05-12 00:22 胡永光 阅读(176) 评论(0) 推荐(0) 编辑

浅谈linux定时器模型

摘要: 用户态的定时器设计 记得某段时间的工作中,经常会用到定时器。发现有些同学为了图方便,会这样实现定时器: while(1) { sleep_awhile(); while((timer = get_expired_timer())) do_timer_handle... 阅读全文

posted @ 2013-05-12 00:19 胡永光 阅读(176) 评论(0) 推荐(0) 编辑

linux网桥浅析

摘要: 什么是桥接? 简单来说,桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。 交换机就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。于是,与交换机相连的若干主机就能够通过交换机的报文转发而... 阅读全文

posted @ 2013-05-12 00:17 胡永光 阅读(166) 评论(0) 推荐(0) 编辑

导航