摘要: 页高速缓存是linux内核实现磁盘缓存。它主要用来减少对磁盘的IO操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。16.1 缓存手段16.2 Linux页高速缓存16.2.1 address_space对象在页高速缓存中的页可能包含了多个不连续的物理磁盘块。Linux页高速缓存对被缓存的页面范围定义非常宽泛。address_space结构体是虚拟地址区间vm_area_struct的物理地址对等体。当一个文件可以被10个vm_area_struct结构体标识,那么这个文件只能有一个address_space数据结构——也就是文件可以有多个虚拟地址,但是 阅读全文
posted @ 2013-04-18 17:32 shuying1234 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 15.1 地址空间进程地址空间由进程可寻址的虚拟内存组成。每个进程都有一个32位或64位的平坦地址空间,空间的大小取决于体系结构。术语“平坦”指的是地址空间范围是一个独立的连续区间。一些操作系统提供了段地址空间,这种地址空间并非一个独立的线性区域,而是被分段的,现代采用虚拟内存的操作系统通常都使用平坦地址空间而不是分段式的内存模式。通常,每个进程都有唯一的这种平坦地址空间,一个进程的地址空间与另一进城的地址空间即使有相同的内存地址,实际上也互不相干,我们称这样的进程为线程。尽管一个进程可以寻址4GB的虚拟内存(32位),并不表示它有权访问所有的虚拟地址。可以被合法访问的地址空间称为内存区域。通 阅读全文
posted @ 2013-04-18 16:15 shuying1234 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 系统中能够随机访问固定大小数据片的硬件设备称作块设备,这些固定大小的数据片称为块。最常见的块设备是硬盘、还有软盘驱动器、光驱盒闪存等。他们都是以安装文件系统的方式使用的。字符设备按照字节流的方式有序访问,如键盘和串口。14.1 剖析一个块设备块设备中最小的可寻址单元是扇区。扇区大小一般是2的整数倍,最常见的是512字节。扇区的大小是设备的物理属性,扇区是所有块设备的基本单元——块设备无法对比它还小的单元进行寻址和操作,尽管许多块设备能够一次对多个扇区进行操作。很多CD-ROM盘的扇区都是2kB大小。虽然物理磁盘寻址按照扇区级别进行的,但是内核执行的所有磁盘操作都是按照块进行的。由于扇区是设备的 阅读全文
posted @ 2013-04-15 22:08 shuying1234 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 虚拟文件系统为用户空间程序提供了文件和文件系统相关的接口。通过虚拟文件系统,程序可以利用标准的Unix系统调用对不同的文件系统,甚至不同介质上的文件系统进行读写操作。13.1 通用文件系统接口13.2 文件系统抽象层VFS抽象层之所以能衔接各种各样的文件系统,是因为它定义了所有文件系统都支持的、基本的、概念上的接口和数据结构。同时实际文件系统也将自身的诸如“如何打开文件”,“目录是什么”等概念在形式上与VFS的定义保持一致。13.3 Unix文件系统Unix使用了四种和文件系统相关的传统抽象概念:文件、目录项、索引节点和安装点。文件:文件其实可以做一个有序的字节串,字节串中第一个字节是文件的开 阅读全文
posted @ 2013-04-15 20:59 shuying1234 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 12.1 页内核用struct page 结构表示系统中的每个物理页struct page{ unsigned long flags;// 存放页的状态,包括页是否脏,是否锁定于内存中 acomic_t _count;// 页的引用计数。-1时,就说明当前内核没有引用这一页。 atomic_t _mapcount; unsigned long private; //指向拥有这个页的私有数据 struct address_space *mapping; //指向和这个页关联的address_space对象即页高速缓存对象 pgoff_t index; struct lis... 阅读全文
posted @ 2013-04-15 20:11 shuying1234 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 11.1 内核中时间的概念硬件为内核提供了一个系统定时器用以计算流逝的时间,该时钟在内核中可以看成是一个电子时间资源。系统定时器以某种频率自行触发时钟中断,该频率可以通过编程指定,称作节拍率。因为预编的节拍率对内核来说是可知的,所以内核知道连续两次时钟中断的间隔时间。这个间隔时间就称为节拍,等于节拍率分之一秒。利用时钟中断处理的工作:更新系统运行时间、更新实际时间、均衡调度各处理器上的运行队列、检查当前进程是否用尽了时间片、运行超时的动态定时器、更新资源消耗和处理器时间的统计值。11.2 节拍率:HZ系统定时器频率(节拍率)是通过静态预处理定义的,也就是HZ,在系统启动时按照HZ的值对硬件进行 阅读全文
posted @ 2013-04-15 15:57 shuying1234 阅读(600) 评论(0) 推荐(0) 编辑
摘要: 10.1 原子操作10.1.1 原子整数操作typedef struct{ volatile int counter;}atomic_t;10.1.2 64位原子操作10.1.3 原子位操作10.2 自旋锁自旋锁最多只能被一个可执行线程持有。如果一个执行线程试图获得一个被已经持有的自旋锁,那么该线程就会一直进行忙循环等待锁重新可用。要是锁未被争用,请求锁的执行线程便立刻得到它,继续执行。自旋锁不应该被长期持有。还可以让请求线程睡眠,直到锁重新可用时再唤醒他。这样处理器不必循环等待,可以去执行其他代码。这里有两次明显的上下文切换,被阻塞的线程要换出和换入。因此,持有自旋锁的时间最好小于完成两次. 阅读全文
posted @ 2013-04-13 23:22 shuying1234 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 9.1 临界区和竞争条件 所谓临界区就是访问和操作共享数据的代码段。如果两个执行线程有可能处于同一个临界区中执行,那么这就是程序中包含一个bug,这种情况就是竞争条件。9.2.1 造成并发执行的原因 用户空间之所以需要同步,是因为用户程序会被调度程序抢占和重新调度,由于用户进程可能在任何时刻被抢占,而调度程序完全可能选择另一个高优先级的进程到处理器上执行,所以会使得一个程序处于临界区时被非自愿的抢占了。如果重新调度的程序也进入了同一个临界区,就会产生竞争条件。内核中有类似可能造成并发的原因:1、中断2、软中断和tasklet3、内核抢占4、睡眠以及与用户空间同步5、对称多处理9.3 死锁避.. 阅读全文
posted @ 2013-04-13 20:17 shuying1234 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 中断处理程序的局限:1、中断处理程序以异步的方式执行,并且它有可能会打断其他重要代码的执行。2、如果当前有一个中断处理程序正在执行,最好的情况是,与该中断同级的其他中断会被屏蔽,最坏情况下,当前处理器上所有其他中断都会被屏蔽。3、中断处理程序往往需要对硬件进行操作,所以他们不能阻塞。这限制了他们所作的事情。8.1 下半部下半部的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作。中断处理程序注定要完成一部分工作:几乎都需要通过操作硬件对中断的到达进行确认,有时他还会从硬件拷贝数据。8.1.2 下半部的环境3、软中断和tasklet软中断是一组静态定义的下半部接口,有32个,可以在所有 阅读全文
posted @ 2013-04-12 18:06 shuying1234 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 7.1 中断中断使得硬件得以发出通知给处理器。中断本质上是一种特殊的电信号,由硬件设备发向处理器。处理器接收到中断后,会马上向操作系统反应此信号的到来,然后就由操作系统负责处理这些新到来的数据。硬件设备生成中断的时候并不考虑与处理器时间的同步——中断可以随时产生。因此内核随时可能因为新到来的中断而被打断。异常:与中断不同,它在产生时必须考虑处理器同步。异常也常常成为同步中断。在处理器执行到由于编程失误而导致的错误指令或执行期间出现特殊情况(如缺页),必须靠内核来处理的时候,处理器就会产生一个异常。在x86体系结构上如何通过软中断实现系统调用,那就是陷入内核,然后引起一种特殊的异常——系统调用处 阅读全文
posted @ 2013-04-12 16:26 shuying1234 阅读(444) 评论(0) 推荐(0) 编辑