![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux内核设计与实现
ziggy7
这个作者很懒,什么都没留下…
展开
-
Linux内核设计与实现 十六、页高速缓存和页回写
页高速缓存 概念 Linux内核实现磁盘缓存,将磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。可以减少对磁盘的I/O操作。 重要性原创 2020-10-22 21:41:48 · 145 阅读 · 0 评论 -
Linux内核设计与实现 十五、进程地址空间
进程地址空间 内核除了管理本身的内存外,还必须管理用户空间中进程的内存。我们称这个内存为进程地址空间,也就是系统中每个用户空间进程所看到的内存。 虚拟内存技术 Linux采用虚拟内存技术,系统中所有进程之间以虚拟方式共享内存。对一个进程而言,它好像可以访问整个系统的所有物理内存。 即使单独一个进程,它拥有的地址空间也可以远远大于系统物理内存。 15.1 地址空间 进程地址空间 进程地址空间由进程可寻址的虚拟内存组成,内核允许进程使用这种虚拟内存中的地址。每个进程都有一个32位或64位平坦地址空间。平原创 2020-10-22 16:15:47 · 162 阅读 · 0 评论 -
Linux内核设计与实现 十四、块I/O层
块设备 系统中能够随机(不需要按数据)访问固定大小数据片的硬件设备称作块设备,这些固定大小的数据片就称作块。最常见的块设备是硬盘。 字符设备 字符设备按照字符流的方式被有序访问,像串口和键盘就属于字符设备。 区别 区别在于是否可以随机访问数据。 内核管理块设备比管理字符设备细致得多。因为字符设备仅仅需要控制当前位置。而块设备访问的位置必须能够在介质的不同区间前后移动。 块设备的管理需要有一个专门的提供服务的子系统,字符设备不需要。不仅因为块设备的复杂性高,块设备对执行性能的要求很高。对硬盘每多一份原创 2020-10-21 16:37:35 · 134 阅读 · 0 评论 -
Linux内核设计与实现 十三、虚拟文件系统
概念 虚拟文件系统(也称作虚拟文件交换,简称VFS),为用户空间程序提供了文件和文件系统相关的接口。 作用 通过虚拟文件系统,程序可以利用标准的Unix系统调用对不同的文件系统,甚至不同介质上的文件进行读写操作。 13.1 通用文件系统接口 VFS使得用户可以直接使用open()、read()、write()这一的系统调用而无须考虑具体文件系统和实际物理介质。 系统调用可以在这些不同的文件系统和介质之间执行,可以使用标准的系统调用从一个文件系统拷贝或移动数据到另一个文件系统。 13.2 文件系统抽象原创 2020-10-20 21:29:35 · 190 阅读 · 0 评论 -
Linux内核设计与实现 十二、内存管理
内核分配内存不像其他地方分配内存那么容易,因为内核本身不能像用户空间那样奢侈地使用内存。 12.1 页 页是虚拟内存的最小单位: 内核把物理页作为内存管理的基本单位。处理器的最小可寻址单位通常为字(甚至字节)。但是MMU(内存管理单元,将虚拟地址转换为物理地址的硬件)通常以页为单位进行处理。从虚拟内存角度来看,页就是最小单位。 物理页结构 page和物理页有关,而不是和虚拟页有关 struct page{ unsigned long flags; atomic_t _count原创 2020-10-17 16:27:37 · 236 阅读 · 0 评论 -
Linux内核设计与实现 十、内核同步方法
10.1 原子操作 原子操作可以保证指令以原子的方式执行,执行过程不被打断。 原子整数操作 数据类型 针对整数的原子操作只能对atomic_t类型的数据进行处理。 typedef struct{ volatile int counter; //volatile:每次都要重新读取值 }atomic_t; 使用atomic_t而不用int的原因 ●确保原子操作只与这种特殊类型一起使用 ●保证该类型数据不会传递给任何非原子函数 atomic_t的布局 atomic_t操作 见书10.1.1 64位原子操作原创 2020-10-14 21:47:26 · 170 阅读 · 0 评论 -
Linux内核设计与实现 九、内核同步介绍
单一处理器时,只有在中断发生的时候,或在内核代码明确地请求重新调度、执行另一个任务的时候,数据才可能被并发访问。 内核开始支持对称多处理器时,并且Linux内核已发展成抢占式内核,情况就更为复杂。 9.1 临界区和竞争条件 临界区:访问和操作共享数据的代码段。 竞争条件:两个执行线程处于同一个临界区中同时执行。 同步:避免并发和防止竞争条件 9.2 加锁 锁机制: 确保一次有且只有一个线程对数据结构进行操作,或者当另一个线程在对临界区标记时,就进制(或者说锁定)其他访问。 锁的不同形式: 各种锁机制原创 2020-10-14 14:30:58 · 78 阅读 · 0 评论 -
Linux内核设计与实现 八、下半部和推后执行的工作
中断处理流程分为两部分的原因: ●异步执行,会打断其他重要代码,避免被打断的代码停止时间过长,应该执行得越快越好 ●上半部(中断处理程序)正在执行时,会屏蔽同级的中断甚至所有其他中断。禁止中断后硬件与操作系统无法通信。中断处理程序执行得越快越好。 ●不在进程上下文运行,所以不能阻塞。限制了所做的事情。 中断上下文: 处理器总处于以下三种状态之一: 1、内核态,运行于进程上下文,内核代表进程运行于内核空间; 2、内核态,运行于中断上下文,内核代表硬件运行于内核空间; 3、用户态,运行于用户空间。 用户空间的原创 2020-10-14 10:49:10 · 109 阅读 · 0 评论 -
Linux内核设计与实现 七、中断和中断处理
中断机制让硬件在需要的时候再向内核发出信号。 7.1中断 概念:使得硬件得以发出通知给处理器 产生时机:随时可以产生,内核随时可能因为新到来的中断而被打断 流程:当接收到一个中断后,中断控制器会给处理器发送一个电信号。处理器一检测到此信号,便中断自己的当前工作转而处理中断。伺候,处理器通知操作系统已经产生中断,这样,操作系统就可以对这个中断进行适当地处理了。 中断标志:不同设备对应的中断不同,每个中断都有一个唯一的数字标志。因此,来自键盘的中断有别于来自硬盘的中断,从而使得操作系统能够对中断进行区分,并指导原创 2020-10-14 10:48:47 · 289 阅读 · 0 评论 -
Linux内核设计与实现 六、内核数据结构
Linux内核常用的几种内建数据结构: ●链表 ●队列 ●映射 ●二叉树 6.1 链表 为什么要用链表 链表中每个元素的创建时间各不相同,内存中无须占用连续内存区。所以各元素需要通过某种方式被连接在一起。于是每个元素都包含一个指向下一个元素的指针。 链表的形式 环形双向链表提供了最大的灵活性,所以Linux内核的标准链表就是采用环形双向链表形式。 单/双向 struct list_element{ void *data; /*有效数据*/ struct list_element *next;原创 2020-10-10 18:32:36 · 162 阅读 · 0 评论 -
Linux内核设计与实现 五、系统调用
系统调用 内核提供了用户进程与内核进行交互的一组接口。这些接口让应用程序受限地访问硬件设备,提供了创建新进程并与已有进程进行通信的机制,也提供了申请操作系统其他资源的能力。 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层。 三个作用: ●为用户空间提供一种硬件的抽象接口。如读写文件时,应用程序就可以不管磁盘类型和介质,甚至不用管文件所在的文件系统到底是哪种类型。 ●系统调用保证了系统的稳定和安全。内核可以基于权限、用户类型等规则对访问进行裁决。 ●内核需要知道应用程序访问硬件,才原创 2020-10-09 21:41:36 · 366 阅读 · 1 评论 -
Linux内核设计与实现 四、 进程调度
作用:在可运行态进程之间分配有限的处理器时间资源的内核子系统。 4.1 多任务 多任务操作系统 概念: 同时并发地交互执行多个进程的操作系统 分类: ●抢占式多任务: 所有Unix的变体和许多现代操作系统一样,Linux提供了抢占式的多任务模式 抢占:由调度程序来决定什么时候停止一个进程的运行,以便其他进程能够得到执行计划,这个强制的挂起动作叫作抢占。 进程在被抢占之前能够运行的时间是预先设置好的,这个事件叫做时间片。(Linux未采用) ●非抢占式多任务: 非抢占式多任务模式下,除非进程自己主动原创 2020-10-08 15:40:10 · 291 阅读 · 0 评论 -
Linux内核设计与实现 三、进程管理
拥有操作系统就是为了运行用户程序。因此,进程管理就是所有操作系统的心脏所在。 3.1进程 进程 概念:进程就是出于执行期的程序。 资源:不仅仅是一段可执行程序代码,通常还要包含其他资源,如打开的文件,挂起的信号,内核内部数据等 相关调用:fork()、exec()、wait() 线程 概念:进程中活动的对象 资源:每个现场都拥有一个独立的程序计数器、进程栈和一组进程寄存器 区别:对Linux而言,线程只不过是一种特殊的进程罢了 进程描述符及任务结构 任务队列:内核将进程的列表存放在叫作任务队列的双向循环链表原创 2020-09-17 21:49:54 · 125 阅读 · 0 评论 -
Linux内核设计与实现 二、从内核出发
内核源码树 编译内核 见书 内核开发的特点原创 2020-09-16 20:50:53 · 87 阅读 · 0 评论