上一页 1 ··· 56 57 58 59 60 61 62 63 64 ··· 67 下一页
摘要: 最近太忙,居然过了2个月才更新第十四章。。。。主要内容:块设备简介内核访问块设备的方法内核I/O调度程序1. 块设备简介I/O设备主要有2类:字符设备:只能顺序读写设备中的内容,比如 串口设备,键盘块设备:能够随机读写设备中的内容,比如 硬盘,U盘字符设备由于只能顺序访问,所以应用场景也不多,这篇文章主要讨论块设备。块设备是随机访问的,所以块设备在不同的应用场景中存在很大的优化空间。块设备中最重要的一个概念就是块设备的最小寻址单元。块设备的最小寻址单元就是扇区,扇区的大小是2的整数倍,一般是 512字节。扇区是物理上的最小寻址单元,而逻辑上的最小寻址单元是块。为了便于文件系统管理,块的大小一般 阅读全文
posted @ 2013-09-03 17:02 wang_yb 阅读(9006) 评论(5) 推荐(3)
摘要: 虚拟文件系统(VFS)是linux内核和具体I/O设备之间的封装的一层共通访问接口,通过这层接口,linux内核可以以同一的方式访问各种I/O设备。虚拟文件系统本身是linux内核的一部分,是纯软件的东西,并不需要任何硬件的支持。主要内容:虚拟文件系统的作用虚拟文件系统的4个主要对象文件系统相关的数据结构进程相关的数据结构小结1. 虚拟文件系统的作用虚拟文件系统(VFS)是linux内核和存储设备之间的抽象层,主要有以下好处。- 简化了应用程序的开发:应用通过统一的系统调用访问各种存储介质- 简化了新文件系统加入内核的过程:新文件系统只要实现VFS的各个接口即可,不需要修改内核部分2. 虚拟文 阅读全文
posted @ 2013-06-19 15:43 wang_yb 阅读(15063) 评论(0) 推荐(3)
摘要: 内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己来解决(用户空间的内存错误可以抛给内核来解决)。所有内核的内存管理必须要简洁而且高效。主要内容:内存的管理单元获取内存的方法获取高端内存内核内存的分配方式总结1. 内存的管理单元内存最基本的管理单元是页,同时按照内存地址的大小,大致分为3个区。1.1 页页的大小与体系结构有关,在 x86 结构中一般是 4KB或者8KB。可以通过 getconf 命令来查看系统的page的大小:[wangyubin@localhost ]$ getconf -a | grep -i 'page'PAGESIZE ... 阅读全文
posted @ 2013-05-23 22:34 wang_yb 阅读(22102) 评论(15) 推荐(10)
摘要: 系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务,推迟一段时间执行的任务),因此,时间的管理对于linux来说非常重要。主要内容:系统时间定时器定时器相关概念定时器执行流程实现程序延迟的方法定时器和延迟的例子1. 系统时间系统中管理的时间有2种:实际时间和定时器。1.1 实际时间实际时间就是现实中钟表上显示的时间,其实内核中并不常用这个时间,主要是用户空间的程序有时需要获取当前时间,所以内核中也管理着这个时间。实际时间的获取是在开机后,内核初始化时从RTC读取的。内核读取这个时间后就将其放入内核中的 xtime 变量中,并且在系统的运行中不断更新这个值。注:RTC就是实时时 阅读全文
posted @ 2013-05-10 07:56 wang_yb 阅读(11950) 评论(1) 推荐(2)
摘要: 内核中提供了多种方法来防止竞争条件,理解了这些方法的使用场景有助于我们在编写内核代码时选用合适的同步方法,从而即可保证代码中临界区的安全,同时也让性能的损失降到最低。主要内容:原子操作自旋锁读写自旋锁信号量读写信号量互斥体完成变量大内核锁顺序锁禁止抢占顺序和屏障总结1. 原子操作原子操作是由编译器来保证的,保证一个线程对数据的操作不会被其他线程打断。原子操作有2类:原子整数操作,有32位和64位。头文件分别为和原子位操作。头文件 原子操作的api很简单,参见相应的头文件即可。原子操作头文件与具体的体系结构有关,比如x86架构的相关头文件在 arch/x86/include/asm/*.h2. 阅读全文
posted @ 2013-05-01 11:16 wang_yb 阅读(14553) 评论(9) 推荐(5)
摘要: 存在共享资源(共享一个文件,一块内存等等)的时候,为了防止并发访问时共享资源的数据不一致,引入了同步机制。主要内容:同步的概念同步的方法-加锁死锁锁的粒度1. 同步的概念了解同步之前,先了解另外2个概念:临界区 - 也称为临界段,就是访问和操作共享数据的代码段。竞争条件 - 2个或2个以上线程在临界区里同时执行的时候,就构成了竞争条件。所谓同步,其实防止在临界区中形成竞争条件。如果临界区里是原子操作(即整个操作完成前不会被打断),那么自然就不会出竞争条件。但在实际应用中,临界区中的代码往往不会那么简单,所以为了保持同步,引入了锁机制。2. 同步的方法-加锁为了给临界区加锁,保证临界区数据的同步 阅读全文
posted @ 2013-04-24 17:56 wang_yb 阅读(5439) 评论(5) 推荐(1)
摘要: 在前一章也提到过,之所以中断会分成上下两部分,是由于中断对时限的要求非常高,需要尽快的响应硬件。主要内容:中断下半部处理实现中断下半部的机制总结中断下半部的实现中断实现示例1. 中断下半部处理那么对于一个中断,如何划分上下两部分呢?哪些处理放在上半部,哪些处理放在下半部?这里有一些经验可供借鉴:如果一个任务对时间十分敏感,将其放在上半部如果一个任务和硬件有关,将其放在上半部如果一个任务要保证不被其他中断打断,将其放在上半部其他所有任务,考虑放在下半部2. 实现中断下半部的机制实现下半部的方法很多,随着内核的发展,产生了一些新的方法,也淘汰了一些旧方法。目前使用最多的是以下3中方法2.1 软中断 阅读全文
posted @ 2013-04-23 11:18 wang_yb 阅读(13927) 评论(3) 推荐(8)
摘要: 中断处理一般不是纯软件来实现的,需要硬件的支持。通过对中断的学习有助于更深入的了解系统的一些底层原理,特别是驱动程序的开发。主要内容:什么是中断中断类型中断相关函数中断处理机制中断控制方法总结1. 什么是中断为了提高CPU和外围硬件(硬盘,键盘,鼠标等等)之间协同工作的性能,引入了中断的机制。没有中断的话,CPU和外围设备之间协同工作可能只有轮询这个方法:CPU定期检查硬件状态,需要处理时就处理,否则就跳过。当硬件忙碌的时候,CPU很可能会做许多无用功(每次轮询都是跳过不处理)。中断机制是硬件在需要的时候向CPU发出信号,CPU暂时停止正在进行的工作,来处理硬件请求的一种机制。2. 中断类型中 阅读全文
posted @ 2013-04-19 11:38 wang_yb 阅读(10932) 评论(0) 推荐(5)
摘要: 委托是.net中实现回调机制的一种重要技术,尤其在编写服务端程序的时候,更是频繁使用委托。主要内容:委托本质委托链动态委托1. 委托本质委托本质其实就是一个类,基本上在可以定义类的地方都可以定义委托,C#中委托的写法其实只是C#的语法糖。如下定义个委托:using System;namespace delegate_test{ internal delegate int Sum(int a, int b);}用ILSpy可以发现对应的IL代码如下:.class private auto ansi sealed delegate_test.Sum extends [mscorlib]... 阅读全文
posted @ 2013-04-18 20:52 wang_yb 阅读(1258) 评论(2) 推荐(0)
摘要: 内核数据结构贯穿于整个内核代码中,这里介绍4个基本的内核数据结构。利用这4个基本的数据结构,可以在编写内核代码时节约大量时间。主要内容:链表队列映射红黑树1. 链表链表是linux内核中最简单,同时也是应用最广泛的数据结构。内核中定义的是双向链表。1.1 头文件简介内核中关于链表定义的代码位于: i... 阅读全文
posted @ 2013-04-16 13:21 wang_yb 阅读(22740) 评论(10) 推荐(6)
上一页 1 ··· 56 57 58 59 60 61 62 63 64 ··· 67 下一页