feisky

云计算、虚拟化与Linux技术笔记
posts - 951, comments - 261, trackbacks - 1, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

2013年3月25日

摘要: 虚拟文件系统(VFS)为用户空间提供了文件系统相关的接口,用户程序可以通过标准的Unix文件系统调用对不同介质上的不同文件系统进行读写操作。通用文件系统接口VFS使得用户可以直接使用open()、read()和write()而无需考虑具体的文件系统和实际物理介质。标准系统调用也可以在不同的介质和文件系统之间执行,VFS负责这种不同介质和不同文件系统之间的协调,并对上提供一种通用的访问方法。之所以这种通用接口对所有类型的文件系统都可以操作,是因为内核在它的底层文件系统之上建立了一个抽象层。这个抽象层提供了一个通用文件系统模型,支持各种文件系统。VFS定义了所有文件系统都支持的基本数据结构和接口,阅读全文

posted @ 2013-03-25 21:53 feisky 阅读(234) 评论(0) 编辑

2013年3月19日

摘要: 1. 页内核把页作为内存管理的基本单位,而MMU也以页为单位管理系统中的页表。不同的系统,页的大小可能不同,一般Linux系统的页大小是4K,可以通过getconf PAGE_SIZE命令或者下面的C程序获取页大小: 1: #include <unistd.h> 2: #include <stdio.h> 3: 4: int main(int argc, char** argv) 5: { 6: printf("System page size: %d\n", getpagesize()); 7: return 0; 8: }内...阅读全文

posted @ 2013-03-19 21:52 feisky 阅读(403) 评论(0) 编辑

2013年3月13日

摘要: 几个重要的名词HZ:系统定时器频率HZ用来定义系统定时器每隔1秒产生多少个时钟中断Tick:HZ的倒数,系统定时器两次时钟中断的时间间隔Xtime:记录Wall time值,也就是UTC时间,是一个struct timeval结构,在用户空间通过gettimeofday读取Jiffies:记录系统开机以来经过了多少次Tick,定义为unsigned long volatile __jiffy_d...阅读全文

posted @ 2013-03-13 20:31 feisky 阅读(324) 评论(0) 编辑

2013年3月12日

摘要: Linux 2.6中断下半部机制分析作者:流星摘要 本文主要从使用者的角度对Linux 2.6内核的下半部机制softirq、tasklet和workqueue进行分析,对于这三种机制在内核中的具体实现并未进行深入分析,倘若读者有兴趣了解,可以直接阅读Linux内核源代码的相关部分。说明 本文档由流星自网上收集整理,按照自由软件开放源代码的精神发布,任何人可以免费获得、使用和重新发布,但是你没有限制别人重新发布你发布内容的权利。发布本文的目的是希望它能对读者有用,但没有任何担保,甚至没有适合特定目的的隐含的担保。更详细的情况请参阅GNU通用公共许可证(GPL),以及GNU自由文档协议(GFDL阅读全文

posted @ 2013-03-12 23:46 feisky 阅读(177) 评论(0) 编辑

摘要: 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问。尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作、信号量(semaphore)、读写信号量(rw_semaphore)、spinlock、BKL(Big Kernel Lock)、rwlock、brlock(只包含在2.4内核中)、RCU(只包含在2.6内核中)和seqlock(只包含在2.6内核中)。1、内核如何为不同的阅读全文

posted @ 2013-03-12 23:46 feisky 阅读(272) 评论(0) 编辑

2013年3月11日

摘要: 中断的上半部和下半部 中断是系统硬件与处理器通信的一种机制。当硬件设备发生中断的时候,内核会被打断,并执行中断对应的处理函数。在执行中断服务程序的时候,内核处于中断上下文。此时,如果不禁止中断,该中断处理程序仍有可能被其他中断事件所打断。因此,我们希望中断服务程序执行的越快越好。而通常一个中断服务程序要做很多的事情,比如网卡中断发生时,不仅要对网卡作应答,还要将网络数据包拷贝到系统内存,并作相应...阅读全文

posted @ 2013-03-11 23:28 feisky 阅读(294) 评论(0) 编辑

摘要: 什么是系统调用系统调用是用户空间与内核空间之间交互的接口,用户空间不能直接访问内核空间,而必须通过系统调用才可访问,这是为了保证内核空间的稳定性和安全性。系统调用与用户编程接口API用户空间的程序通常不直接使用系统调用,而是通过API间接调用系统调用。API封装了系统调用,但不是每一个API接口都会用到系统调用。API和系统调用并没有严格对应关系,一个API可能恰好只对应一个系统调用,比如read()API和read()系统调用;一个API也可能由多个系统调用实现;有时候,一个API的功能可能并不需要内核提供的服务,那么此时这个API也就不需要任何的系统调用,比如abs()。另外,一个系统调用阅读全文

posted @ 2013-03-11 21:02 feisky 阅读(197) 评论(0) 编辑

2013年3月6日

摘要: 这篇文章用一个C程序的例子和Systemtap脚本比较了FIFO和RR两种实时调度测量的特点,原文见http://blog.chinaunix.net/uid-24774106-id-3379478.html 原文作者:manuscola.bean@gmail.com 最近花了10几天的时间,将linux进程调度相关的内核代码看了两遍左右,也看了一些讲述linux进程调度的一些文章,总想写个系列文章,把进程调度全景剖析一遍,但是总是感觉力不逮己,自己都不敢下笔写文章了。算了,还是不难为自己了,就随便写写自己的心得好了。 在用户空间,或者应用编程领域 ,Linux提供了一些API或者系统调用来.阅读全文

posted @ 2013-03-06 23:02 feisky 阅读(251) 评论(0) 编辑

摘要: 最近几天结合源码看了很多linux进程调度的文章,虽然掌握了个大概,但是越看,细节越多,写这篇文章的信心也就越不足,曾有系列文章叫鼠眼看linux进程调度,很符合我现在的心境,就像盲人摸象,学到一些东西,很惊喜,但是总有一种力不从心的惶恐。但是好久没写博文了,还是写一篇。写的不对的地方,请大家批评指正。 CPU是一种宝贵的资源,Linux是多任务的OS,这种多任务要求,对于每个任务或者说进程来说,就好像它独占了CPU。想想如果只有一个CPU,但是有80个处于TASK_RUNNING状态的进程,在这八十个进程选择进程,切换进程是多么困难。如果你理解不了这种难度,你可以想想如果你同时有80个女朋.阅读全文

posted @ 2013-03-06 21:34 feisky 阅读(226) 评论(0) 编辑

2013年3月5日

摘要: 内核经常需要在后台执行一些操作,这种任务就可以通过内核线程(kernel thread)完成--独立运行在内核空间的标准进程。内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,mm指针被设置为NULL;它只在 内核空间运行,从来不切换到用户空间去;并且和普通进程一样,可以被调度,也可以被抢占。实际上,内核线程只能由其他内核线程创建,在现有的内核线程中创建一个新的内核线程的方法:1. kernel_thread int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); kernel_thread通过d..阅读全文

posted @ 2013-03-05 22:30 feisky 阅读(183) 评论(0) 编辑

摘要: 前段时间在学习内核的进程管理方面的东西,看了进程创建和进程调度的代码,想写个大而全的东西,即有内核代码分析,又有一些实验在效果上证明内核的代码。 但是这篇文章很难产,感觉自己还是驾驭不了这个宏大的主题。 好久没写文章了,今天就放弃这个想法,写一个简单的东西。 我们都知道fork创建进程的时候,并没有真正的copy内存,因为我们知道,对于fork来讲,有一个很讨厌的东西叫exec系列的系统调用,它会勾引子进程另起炉灶。如果创建子进程就要内存拷贝的的话,一执行exec,辛辛苦苦拷贝的内存又被完全放弃了。 内核采用的策略是写时拷贝,换言之,先把页表映射关系建立起来,并不真正将内存拷贝。如果进程读..阅读全文

posted @ 2013-03-05 13:18 feisky 阅读(161) 评论(0) 编辑

2013年3月4日

摘要: 1. 在内核模块中列出所有的进程:从init_task开始遍历内核链表,输出所有进程#include <linux/module.h>#include <linux/list.h>#include <linux/init.h>#include <linux/sched.h>MODULE_LICENSE("Dual BSD/GPL");static int test_init(void){ struct task_struct *task, *p; struct list_head *pos; int count=0; prin阅读全文

posted @ 2013-03-04 22:25 feisky 阅读(196) 评论(0) 编辑

摘要: 首先查看内核源码中是如何定义的#define __set_task_state(tsk, state_value) \ do { (tsk)->state = (state_value); } while (0) #define set_task_state(tsk, state_value) \ set_mb((tsk)->state, (state_value)) /* * set_current_state() includes a barrier so that the write of current->state * is correctly serialised阅读全文

posted @ 2013-03-04 18:44 feisky 阅读(130) 评论(0) 编辑

摘要: 原创文章,转载请注明:转载自系统技术非业余研究本文链接地址:Linux下方便的socket读写查看器(socktop)晚上雕梁说要找个工具来调查下unix域套接字的发送和接受情况,比如说A程序是否送出,B程序是否接收到,他找了tcpdump ,wireshark什么的,貌似都不支持。这时候还是伟大的systemtap来救助了。 因为所有的socket通讯都是通过socket接口来的,任何family的通讯包括unix域套接都要走的,所以只要截获了socket 读写的几个syscall 就搞定了.systemtap发行版本提供了个工具socktop, 位于 /usr/share/doc/syst阅读全文

posted @ 2013-03-04 14:11 feisky 阅读(258) 评论(0) 编辑

2013年2月26日

摘要: 1. 安装systemtap$ sudo apt-get install systemtap$ sudo apt-get install systemtap-sdt-dev2. 安装debuginfo:wget http://www.domaigne.com/download/tools/get-dbgsymchmod +x get-dbgsym./get-dbgsym3. 启动stap$ stap -e 'probe kernel.function("sys_open") {log("hello world") exit()}'hell阅读全文

posted @ 2013-02-26 11:20 feisky 阅读(224) 评论(0) 编辑

无觅相关文章插件,快速提升流量