2013年5月11日

linux网络报文接收发送浅析

摘要: 对于linux内核来说,网络报文由网络设备来进行接收。设备驱动程序从网络设备中读取报文,通过内核提供的网络接口函数,将报文传递到内核中的网络协议栈。报文经过协议栈的处理,或转发、或丢弃、或被传送给某个进程。 网络报文的发送与之相反,进程通过系统调用将数据送入网络协议栈,或者由网络协议栈自己发起报... 阅读全文

posted @ 2013-05-11 19:55 胡永光 阅读(209) 评论(0) 推荐(0) 编辑

linux文件读写浅析

摘要: 在《linux内核虚拟文件系统浅析》这篇文章中,我们看到文件是如何被打开、文件的读写是如何被触发的。 对一个已打开的文件fd进行read/write系统调用时,内核中该文件所对应的file结构的f_op->read/f_op->write被调用。 本文将顺着这条路走下去,大致看看普通磁盘文件的读... 阅读全文

posted @ 2013-05-11 19:51 胡永光 阅读(253) 评论(0) 推荐(0) 编辑

linux slub分配器浅析

摘要: 在《linux内存管理浅析》中提到内核管理自己使用的内存时,使用了SLAB对象池。SLAB确实是比较复杂,所以一直以来都没有深入看一看。 不过现在,linux内核中,SLAB已经被它的简化版--SLUB所代替。最近抽时间看了一下SLUB的代码,略记一些自己的理解。 尽管SLUB是在内核里面实现的... 阅读全文

posted @ 2013-05-11 19:49 胡永光 阅读(161) 评论(0) 推荐(0) 编辑

linux文件系统实现浅析

摘要: 之前有两篇文章整理过linux虚拟文件系统的结构,和linux文件读写的流程。其中一些由具体文件系统类型来实现的地方并没有深入叙述,只是说这是由具体的文件系统来实现的。比如,读写文件的时候,文件的读写位置怎么对应到实际的磁盘块呢?这是由具体的文件系统来实现的;再比如,寻找一个文件路径的时候,怎么... 阅读全文

posted @ 2013-05-11 19:45 胡永光 阅读(120) 评论(0) 推荐(0) 编辑

linux虚拟文件系统浅析

摘要: 虚拟文件系统(VFS) 在我看来, "虚拟"二字主要有两层含义: 1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统. VFS隐藏了它们的实现细节, 为使用者提供统一的接口; 2, 目录结构本身并不是绝对的, 每个进程可能会看到不一样的目录结构. 目录结构是由"地址空间(names... 阅读全文

posted @ 2013-05-11 19:40 胡永光 阅读(119) 评论(0) 推荐(0) 编辑

linux页面回收浅析

摘要: 关于页面的使用 在之前的一些文章中,我们了解到linux内核会在很多情况下分配页面。 1、内核代码可能调用alloc_pages之类的函数,从管理物理页面的伙伴系统(管理区zone上的free_area空闲链表)上直接分配页面(见《linux内核内存管理浅析》)。比如:驱动程序可能用这种方式来... 阅读全文

posted @ 2013-05-11 19:34 胡永光 阅读(96) 评论(0) 推荐(0) 编辑

linux线程同步浅析

摘要: 一个程序问题 之前写过这样一个C程序:模块维护一个工作线程、提供一组调用接口(分同步调用和异步调用)。用户调用模块提供的接口后,会向工作队列添加一个任务。然后任务由工作线程来处理。 在同步调用情况下,接口调用后调用者被阻塞,等待工作线程处理完成后,将调用者唤醒。 伪代码如下: [调用接口] ... 阅读全文

posted @ 2013-05-11 19:30 胡永光 阅读(196) 评论(0) 推荐(0) 编辑

linux内存管理浅析

摘要: [地址映射](图:左中) linux内核使用页式内存管理,应用程序给出的内存地址是虚拟地址,它需要经过若干级页表一级一级的变换,才变成真正的物理地址。 想一下,地址映射还是一件很恐怖的事情。当访问一个由虚拟地址表示的内存空间时,需要先经过若干次的内存访问,得到每一级页表... 阅读全文

posted @ 2013-05-11 19:26 胡永光 阅读(111) 评论(0) 推荐(0) 编辑

剖析一个由sendfile引发的linux内核BUG

摘要: 在论坛上看到一个讲linux内核BUG的帖子,利用这个BUG,一个普通用户能够在运行某个程序之后,获得root权限。 示例的代码如下:http://www.securityfocus.com/data/vulnerabilities/exploits/36038-4.tgz 在ubuntu 9... 阅读全文

posted @ 2013-05-11 19:04 胡永光 阅读(286) 评论(0) 推荐(0) 编辑

比memcpy更快的内存拷贝

摘要: 偶然间看到一个叫xmemcpy的工具,用做内存拷贝。号称在拷贝120字节以内时,比glibc提供的memcpy快10倍,并且有实验数据。 这让人感觉很诧异。一直以来都觉得memcpy是很高效的。相比于strcpy等函数的逐字节拷贝,memcpy是按照机器字长逐字进行拷贝的... 阅读全文

posted @ 2013-05-11 18:51 胡永光 阅读(382) 评论(0) 推荐(0) 编辑

linux中断处理浅析

摘要: 最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着"重要的事马上做, 不重要的事推后做"的异步处理思想. 于是整理一下~ 第一阶段--获取中断号 每个CPU都有响应中断的能力, 每个CPU响应中断时都走相同的流程. 这个流程就是内核提供的中断服务程序. 在进入... 阅读全文

posted @ 2013-05-11 18:46 胡永光 阅读(106) 评论(0) 推荐(0) 编辑

linux内核SMP负载均衡浅析

摘要: 需求 在《linux进程调度浅析》一文中提到,在SMP(对称多处理器)环境下,每个CPU对应一个run_queue(可执行队列)。如果一个进程处于TASK_RUNNING状态(可执行状态),则它会被加入到其中一个run_queue(且同一时刻仅会被加入到一个run_queue),以... 阅读全文

posted @ 2013-05-11 17:49 胡永光 阅读(119) 评论(0) 推荐(0) 编辑

linux组调度浅析

摘要: cgroup与组调度 linux内核实现了control group功能(cgroup,since linux 2.6.24),可以支持将进程分组,然后按组来划分各种资源。比如:group-1拥有30%的CPU和50%的磁盘IO、group-2拥有10%的CPU和20%的磁盘IO... 阅读全文

posted @ 2013-05-11 17:08 胡永光 阅读(160) 评论(0) 推荐(0) 编辑

linux线程浅析

摘要: 关于linux线程 在许多经典的操作系统教科书中, 总是把进程定义为程序的执行实例, 它并不执行什么, 只是维护应用程序所需的各种资源. 而线程则是真正的执行实体. 为了让进程完成一定的工作, 进程必须至少包含一个线程. 如图1. 进程所维护的是程序所包含的资源(静... 阅读全文

posted @ 2013-05-11 16:25 胡永光 阅读(68) 评论(0) 推荐(0) 编辑

神奇的vfork

摘要: 一段神奇的代码 在论坛里看到下面一段代码: int createproc(); int main() { pid_t pid=createproc(); printf("%d\n", pid); exit(0); } int createproc() { pid_t pid; if(!(pid... 阅读全文

posted @ 2013-05-11 15:54 胡永光 阅读(122) 评论(0) 推荐(0) 编辑

linux异步信号handle浅析

摘要: 在初学linux编程的时候,一直觉得异步信号handle是个很神奇的东西,用户程序可以使用singal之类的系统调用为某某信号注册一个信号处理函数(handle函数)。 程序的二进制代码在内存中都有着确定的执行流程,为什么收到异步信号以后,程序会被“中断”,然后跳转到这... 阅读全文

posted @ 2013-05-11 15:43 胡永光 阅读(121) 评论(0) 推荐(0) 编辑

linux进程状态浅析

摘要: 众所周知,现在的分时操作系统能够在一个CPU上运行多个程序,让这些程序表面上看起来是在同时运行的。linux就是这样的一个操作系统。 在linux系统中,每个被运行的程序实例对应一个或多个进程。linux内核需要对这些进程进行管理,以使它们在系统中“同时”运行。linu... 阅读全文

posted @ 2013-05-11 15:41 胡永光 阅读(113) 评论(0) 推荐(0) 编辑

linux进程调度浅析

摘要: 操作系统要实现多进程,进程调度必不可少。 进程调度是对TASK_RUNNING状态的进程进行调度(参见《linux进程状态浅析》)。如果进程不可执行(正在睡眠或其他),那么它跟进程调度没多大关系。 所以,如果你的系统负载非常低,盼星星盼月亮才出现一个可执行状... 阅读全文

posted @ 2013-05-11 15:01 胡永光 阅读(147) 评论(0) 推荐(0) 编辑

posix多线程有感--进程调度策略(SCHED_OTHER,SCHED_FIFO,SCHED_RR)

摘要: linux内核的三种调度策略:SCHED_OTHER 分时调度策略,(默认的)SCHED_FIFO实时调度策略,先到先服务SCHED_RR实时调度策略,时间片轮转 实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过nice和counter值决定权值,nice越小... 阅读全文

posted @ 2013-05-11 13:25 胡永光 阅读(197) 评论(0) 推荐(0) 编辑

linux 进程优先级设置

摘要: 注意:一下均是非实时进程的优先级的设置 nice(1): 以指定优先级运行程序 nice [OPTION] [COMMAND [ARG]...] nice –n 1 ls renice(8): 调整运行进程的优先级 renice priority [[-p] pid ...] ... 阅读全文

posted @ 2013-05-11 12:31 胡永光 阅读(305) 评论(0) 推荐(0) 编辑

导航