01 2014 档案

摘要:1. inode缓存 1: struct inode { 2: /* RCU path lookup touches following: */ 3: umode_t i_mode; 4: uid_t i_uid; 5: gid_t ... 阅读全文
posted @ 2014-01-30 10:45 Daniel King 阅读(3748) 评论(0) 推荐(1)
摘要:1. BIOS的虚拟化 xen的启动过程,与x86系统一样,首先要进入保护模式,然后安装中断处理程序。 xen的中断处理程序可以分为几种,有的是直接分发给正在运行的操作系统,有的是分发给安装了硬件驱动的Dom0。以时钟中断为例,既要分发给xen本身,用来调度各个Guest系统的运行,又要分发到运行的Guest中,支持Guest内部的程序调度。 BIOS的支持 x86系统在启动过程中需要读取BIO... 阅读全文
posted @ 2014-01-29 14:54 Daniel King 阅读(625) 评论(0) 推荐(0)
摘要:1: void lookupInode() 2: { 3: struct dentry* root_dentry; 4: struct vfsmount* root_mnt; 5: const char* filename; 6: struct nameidata data; 7: int err = 0; 8: 9... 阅读全文
posted @ 2014-01-28 14:51 Daniel King 阅读(717) 评论(0) 推荐(0)
摘要:1. 为什么提供命名空间 命名空间是一种轻量级的虚拟化手段。 传统的虚拟化软件,是虚拟化多个不同的操作系统,对共享资源的限制很大。 通过提供命名空间,可以让进程与进程之间,用户与用户之间彼此看不到对方。 命名空间,相当于容器。 命名空间,本质上建立了系统的不同视图。 chroot是一种简单的命名空间,仅限于将进程限制在文件系统的某一部分。 2. 创建命名空间的方式 1). fork/clone创... 阅读全文
posted @ 2014-01-28 10:40 Daniel King 阅读(4563) 评论(0) 推荐(0)
摘要:1. seq_file 参考: http://blog.chinaunix.net/uid-26084833-id-1754437.html seq_file的结构体定义: 1: struct seq_file { 2: char *buf; 3: size_t size; 4: size_t from; 5: size_t count; ... 阅读全文
posted @ 2014-01-27 16:21 Daniel King 阅读(850) 评论(0) 推荐(0)
摘要:在模块中,通过查询super_blocks列表,来遍历系统中的所有super_block,但是出现与下面类似的错误: http://stackoverflow.com/q/5051111/941650 也可以参考他的解决方法,到System.map中去查找真实地址,不过这样不是解决问题的最好方法。 先贴出当前的代码 1: #include 2: #include 3: ... 阅读全文
posted @ 2014-01-27 10:46 Daniel King 阅读(395) 评论(0) 推荐(0)
摘要:XML解析,通常可以有几种选择: 1: Tinyxml 2: boost::property_tree根据tag, text, attribute的不同,可以将XML简单分成以下几种情况:场景1 Rainy Rainy Sunny Cloudy 在这种场景下,所有节点都... 阅读全文
posted @ 2014-01-26 16:43 Daniel King 阅读(233) 评论(0) 推荐(0)
摘要:netif_rx函数是在网上收到数据包后,通过中断机制通知CPU而间接调用的中断处理例程。 首先,会将Packet传给netpoll框架,该框架用于在网络协议栈不可用的情况下,也能够提供给内核一个收发Packet的接口,用于一些特殊场合的调试等用途。 netpoll只是一种框架和一些接口,只有依赖这个框架和接口实现的netpoll实例,netpoll才能发挥它的功能。类似于kernel中的vfs... 阅读全文
posted @ 2014-01-22 16:49 Daniel King 阅读(4700) 评论(0) 推荐(0)
摘要:#include #include #include #include #include #include MODULE_LICENSE("GPL");void analyzeIPHeader(struct iphdr* ip_hdr){ printk("***********IP Header***********\n"); printk("%30s:\t0x%02x\n", "Ve... 阅读全文
posted @ 2014-01-21 17:34 Daniel King 阅读(1301) 评论(0) 推荐(0)
摘要:http://www.ibm.com/developerworks/cn/java/j-cb07186.html 1. 构造符号 :比如:1:2:3:[]而常用的[1,2,3]是一种语法糖(http://en.wikipedia.org/wiki/Syntactic_sugar)2. 一切都是函数函数定义语法:函数名 :: 参数类型中可能用到的基本类型 基本类型名 => 参数1 -> 参数2 ->... 阅读全文
posted @ 2014-01-21 14:41 Daniel King 阅读(1073) 评论(0) 推荐(0)
摘要:1: unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, 2: unsigned long len, unsigned long prot, 3: unsi... 阅读全文
posted @ 2014-01-20 17:51 Daniel King 阅读(1270) 评论(0) 推荐(0)
摘要:1 在单处理器上的实现 单核系统上,不存在严格的并发,因此对资源的共享主要是多个任务分时运行造成的。 只要在某一时段,停止任务切换,并且关中断(对于用户态应用程序,不大可能与中断处理程序抢临界区资源),或者对临界区资源的访问可以用一条原子指令完成,就能够保证只有一个任务在运行。 这就是spinlock的实现机制。 1: #define __LOCK(lock) \ 2: do { ... 阅读全文
posted @ 2014-01-17 14:15 Daniel King 阅读(791) 评论(0) 推荐(1)
摘要:1: void cpuidTest() 2: { 3: u32 val_eax, val_ebx, val_ecx, val_edx; 4: asm("cpuid" 5: : "=a" (val_eax), 6: "=b" (val_ebx), 7: "=d" (val... 阅读全文
posted @ 2014-01-16 16:12 Daniel King 阅读(1303) 评论(0) 推荐(0)
摘要:1. 模板形参表 模板形参表,里面可以是typename T/ class T这种形式的,代表里面被泛化的是一种类型; 也可以使用Type value这种形式的,代表里面被泛化的是一个某种类型的值。 这点很重要,因为后面介绍的部分特化(Partial Specialization),就是应用的值的泛化,即一个模板(仅限类模板)有多个类型泛化的形参的时候,可以将其中的部分类型特化成值,以代表其中的... 阅读全文
posted @ 2014-01-16 11:51 Daniel King 阅读(250) 评论(0) 推荐(0)
摘要:1. 什么是facet, locale facet ['fæsɪt]的原意,是宝石切割出来的一个平面。 locale[ləʊˈkæl],表示本地化, locale the container that holds all the required information about a specific culture, such as number formatting patterns, d... 阅读全文
posted @ 2014-01-15 10:21 Daniel King 阅读(1243) 评论(0) 推荐(0)
摘要:1 出现的背景 因为CPU与Memory之间的速度差异逐渐拉大,因此CPU无法容忍总是等待Memory,所以在CPU与Memory之间出现了Cache。 可以预知,CPU访问Cache的速度肯定要大大地快于访问Memory的速度。 一般来说,CPU会在内部嵌入一个Cache,称作On-Chip Cache,即L1 Cache。 CPU访问L1 Cache的速度基本上与访问Register的速度相... 阅读全文
posted @ 2014-01-14 11:08 Daniel King 阅读(1413) 评论(0) 推荐(0)
摘要:1 在调用mmap系统调用时,可以指定的标志(flag)参数: 1: #define MAP_SHARED 0x01 /* Share changes */ 2: #define MAP_PRIVATE 0x02 /* Changes are private */ 3: #define MAP_TYPE 0x0f /* M... 阅读全文
posted @ 2014-01-09 18:01 Daniel King 阅读(2011) 评论(0) 推荐(0)
摘要:在内存系统初始化过程中,有如下代码: 1: static void __init pagetable_init(void) 2: { 3: pgd_t *pgd_base = swapper_pg_dir; 4: 5: permanent_kmaps_init(pgd_base); 6: }这里,我们看到了神秘的swapper_pg_dir,全局搜索一... 阅读全文
posted @ 2014-01-08 11:17 Daniel King 阅读(2815) 评论(0) 推荐(0)
摘要:根据当前CR3寄存器内容,读取对应物理内存中的页目录页,并进行解析 1: void dumpPageDirectoryEntry(u32 entry) 2: { 3: u8 present; 4: u8 read_write; 5: u8 user_supervisor; 6: u8 accessed; 7: u8 dirt... 阅读全文
posted @ 2014-01-06 11:33 Daniel King 阅读(786) 评论(0) 推荐(0)
摘要:参见:http://www.cnblogs.com/hujian/archive/2012/02/13/2348621.html 1: int a = 0; 2: int* b = &(a++); 3: 4: 上面的代码,编译不通过:error C2102: '&' requires l-value提示说a++不是左值对象(l-value),即右值对象(r-value)。 ... 阅读全文
posted @ 2014-01-03 16:03 Daniel King 阅读(375) 评论(0) 推荐(0)
摘要:Linux对内核态内存分配请求与用户态内存分配请求处理上分别对待Linux本身信任自己,因此Linux内核请求分配多少内存,就会马上分配相同数量的内存出来。但内核本身不相信应用程序,而且通常应用程序分配了一段内存,其实只是预定,并不是马上就去访问。由于应用程序的数目比较多,那么这部分只分配了但是没有... 阅读全文
posted @ 2014-01-02 16:55 Daniel King 阅读(2776) 评论(0) 推荐(0)
摘要:缓存为什么会有冷热? 究其原因,是因为对于内存的访问,可能是CPU发起的,也可以是DMA设备发起的。 如果是CPU发起的,在CPU的硬件缓存中,就会保存相应的页内容。如果这个页本来没有存在于硬件缓存中,那么它的到来,势必会将原本为其他的页缓存的内容挤出硬件缓存。 但是,如果对于内存的访问是由DMA设备发起的,那么该页不会被CPU访问,就不需要在CPU的硬件缓存中进行缓存,也不会对已经缓存在硬件缓存... 阅读全文
posted @ 2014-01-02 16:35 Daniel King 阅读(1229) 评论(0) 推荐(0)
摘要:TLS(Thread Local Storage) 线程局部存储。 在Linux操作系统中,TLS保存成GDT中描述的一个段。 1: /* 2: * This creates a new process as a copy of the old one, 3: * but does not actually start it yet. 4: * 5: * It ... 阅读全文
posted @ 2014-01-02 15:11 Daniel King 阅读(4729) 评论(0) 推荐(0)
摘要:参见文章:http://blog.chinaunix.net/uid-22695386-id-272098.html linux2.4之前的内核有进程最大数的限制,受限制的原因是,每一个进程都有自已的TSS和LDT,而TSS(任务描述符)和LDT(私有描述符)必须放在GDT中,GDT最大只能存放8192个描述符,除掉系统用掉的12描述符之外,最大进程数=(8192-12)/2, 总共4090个进... 阅读全文
posted @ 2014-01-02 14:33 Daniel King 阅读(4322) 评论(0) 推荐(0)
摘要:DPL: Descriptor Privilege Level 1) GDT/LDT表中的描述符 GDT/LDT表中的描述符,描述的是一段内存。 其中的DPL代表着GDT/LDT中的描述符描述的内存段的特权级别。 比如,当前正在执行的代码,它的特权级别就是当前的CS段选择子指向的段描述符中的DPL所决定的。 即DPL是描述一段内存的特权级别。 2) IDT表中的描述符 IDT表中的描述符,描述... 阅读全文
posted @ 2014-01-02 11:27 Daniel King 阅读(2049) 评论(0) 推荐(0)