上一页 1 ··· 47 48 49 50 51 52 53 54 55 ··· 59 下一页
摘要: 内核调试的难点在于它不能像用户态程序调试那样打断点,随时暂停查看各个变量的状态。也不能像用户态程序那样崩溃后迅速的重启,恢复初始状态。用户态程序和内核交互,用户态程序的各种状态,错误等可以由内核来捕获并显示。而内核是直接和硬件交互的,内核出错之后整个系统就无法正常运行了,所以要想熟练的进行内核调试,首先要熟悉内核已经给我们提供的工具,然后实实在在的去做一些内核功能的开发,在开发的过程中不断熟悉内核代码,增加内核调试的经验。主要内容:内核调试的难点内核调试的工具和方法总结1. 内核调试的难点内核调试的难点大致有以下几个:重现bug困难 - 如果能够重现一个bug, 相当于成功了一半. (特别是有 阅读全文
posted @ 2014-01-04 09:03 wang_yb 阅读(6764) 评论(2) 推荐(1) 编辑
摘要: 本章主要讨论与linux的设备驱动和设备管理的相关的4个内核成分,设备类型,模块,内核对象,sysfs。主要内容:设备类型内核模块内核对象sysfs总结1. 设备类型linux中主要由3种类型的设备,分别是:设备类型代表设备特点访问方式块设备硬盘,光盘随机访问设备中的内容一般都是把设备挂载为文件系统后再访问字符设备键盘,打印机只能顺序访问(一个一个字符或者一个一个字节)一般不挂载,直接和设备交互网络设备网卡打破了Unix "所有东西都是文件" 的设计原则通过套接字API来访问除了以上3种典型的设备之外,其实Linux中还有一些其他的设备类型,其中见的较多的应该算是" 阅读全文
posted @ 2013-12-24 21:52 wang_yb 阅读(6142) 评论(0) 推荐(2) 编辑
摘要: 好久没有更新了。。。主要内容:缓存简介页高速缓存页回写1. 缓存简介在编程中,缓存是很常见也很有效的一种提高程序性能的机制。linux内核也不例外,为了提高I/O性能,也引入了缓存机制,即将一部分磁盘上的数据缓存到内存中。1.1 原理之所以通过缓存能提高I/O性能是基于以下2个重要的原理:CPU访问内存的速度远远大于访问磁盘的速度(访问速度差距不是一般的大,差好几个数量级)数据一旦被访问,就有可能在短期内再次被访问(临时局部原理)1.2 策略缓存的创建和读取没什么好说的,无非就是检查缓存是否存在要创建或者要读取的内容。但是写缓存和缓存回收就需要好好考虑了,这里面涉及到「缓存内容」和「磁盘内容」 阅读全文
posted @ 2013-11-21 18:18 wang_yb 阅读(5891) 评论(5) 推荐(1) 编辑
摘要: 进程地址空间也就是每个进程所使用的内存,内核对进程地址空间的管理,也就是对用户态程序的内存管理。主要内容:地址空间(mm_struct)虚拟内存区域(VMA)地址空间和页表1. 地址空间(mm_struct)地址空间就是每个进程所能访问的内存地址范围。这个地址范围不是真实的,是虚拟地址的范围,有时甚至会超过实际物理内存的大小。现代的操作系统中进程都是在保护模式下运行的,地址空间其实是操作系统给进程用的一段连续的虚拟内存空间。地址空间最终会通过页表映射到物理内存上,因为内核操作的是物理内存。虽然地址空间的范围很大,但是进程也不一定有权限访问全部的地址空间(一般都是只能访问地址空间中的一些地址区间 阅读全文
posted @ 2013-10-04 16:28 wang_yb 阅读(8839) 评论(1) 推荐(6) 编辑
摘要: 最近太忙,居然过了2个月才更新第十四章。。。。主要内容:块设备简介内核访问块设备的方法内核I/O调度程序1. 块设备简介I/O设备主要有2类:字符设备:只能顺序读写设备中的内容,比如 串口设备,键盘块设备:能够随机读写设备中的内容,比如 硬盘,U盘字符设备由于只能顺序访问,所以应用场景也不多,这篇文章主要讨论块设备。块设备是随机访问的,所以块设备在不同的应用场景中存在很大的优化空间。块设备中最重要的一个概念就是块设备的最小寻址单元。块设备的最小寻址单元就是扇区,扇区的大小是2的整数倍,一般是 512字节。扇区是物理上的最小寻址单元,而逻辑上的最小寻址单元是块。为了便于文件系统管理,块的大小一般 阅读全文
posted @ 2013-09-03 17:02 wang_yb 阅读(8921) 评论(5) 推荐(3) 编辑
摘要: 虚拟文件系统(VFS)是linux内核和具体I/O设备之间的封装的一层共通访问接口,通过这层接口,linux内核可以以同一的方式访问各种I/O设备。虚拟文件系统本身是linux内核的一部分,是纯软件的东西,并不需要任何硬件的支持。主要内容:虚拟文件系统的作用虚拟文件系统的4个主要对象文件系统相关的数据结构进程相关的数据结构小结1. 虚拟文件系统的作用虚拟文件系统(VFS)是linux内核和存储设备之间的抽象层,主要有以下好处。- 简化了应用程序的开发:应用通过统一的系统调用访问各种存储介质- 简化了新文件系统加入内核的过程:新文件系统只要实现VFS的各个接口即可,不需要修改内核部分2. 虚拟文 阅读全文
posted @ 2013-06-19 15:43 wang_yb 阅读(14923) 评论(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 阅读(21900) 评论(15) 推荐(10) 编辑
摘要: 系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务,推迟一段时间执行的任务),因此,时间的管理对于linux来说非常重要。主要内容:系统时间定时器定时器相关概念定时器执行流程实现程序延迟的方法定时器和延迟的例子1. 系统时间系统中管理的时间有2种:实际时间和定时器。1.1 实际时间实际时间就是现实中钟表上显示的时间,其实内核中并不常用这个时间,主要是用户空间的程序有时需要获取当前时间,所以内核中也管理着这个时间。实际时间的获取是在开机后,内核初始化时从RTC读取的。内核读取这个时间后就将其放入内核中的 xtime 变量中,并且在系统的运行中不断更新这个值。注:RTC就是实时时 阅读全文
posted @ 2013-05-10 07:56 wang_yb 阅读(11834) 评论(1) 推荐(2) 编辑
摘要: 内核中提供了多种方法来防止竞争条件,理解了这些方法的使用场景有助于我们在编写内核代码时选用合适的同步方法,从而即可保证代码中临界区的安全,同时也让性能的损失降到最低。主要内容:原子操作自旋锁读写自旋锁信号量读写信号量互斥体完成变量大内核锁顺序锁禁止抢占顺序和屏障总结1. 原子操作原子操作是由编译器来保证的,保证一个线程对数据的操作不会被其他线程打断。原子操作有2类:原子整数操作,有32位和64位。头文件分别为和原子位操作。头文件 原子操作的api很简单,参见相应的头文件即可。原子操作头文件与具体的体系结构有关,比如x86架构的相关头文件在 arch/x86/include/asm/*.h2. 阅读全文
posted @ 2013-05-01 11:16 wang_yb 阅读(14446) 评论(9) 推荐(5) 编辑
摘要: 存在共享资源(共享一个文件,一块内存等等)的时候,为了防止并发访问时共享资源的数据不一致,引入了同步机制。主要内容:同步的概念同步的方法-加锁死锁锁的粒度1. 同步的概念了解同步之前,先了解另外2个概念:临界区 - 也称为临界段,就是访问和操作共享数据的代码段。竞争条件 - 2个或2个以上线程在临界区里同时执行的时候,就构成了竞争条件。所谓同步,其实防止在临界区中形成竞争条件。如果临界区里是原子操作(即整个操作完成前不会被打断),那么自然就不会出竞争条件。但在实际应用中,临界区中的代码往往不会那么简单,所以为了保持同步,引入了锁机制。2. 同步的方法-加锁为了给临界区加锁,保证临界区数据的同步 阅读全文
posted @ 2013-04-24 17:56 wang_yb 阅读(5373) 评论(5) 推荐(1) 编辑
上一页 1 ··· 47 48 49 50 51 52 53 54 55 ··· 59 下一页
点击右上角即可分享
微信分享提示