![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux内核
阳光下的咖啡
这个作者很懒,什么都没留下…
展开
-
《Linux内核设计与实现》学习【12】—— 设备与模块
4种内核成分:设备类型,模块,内核对象,sysfs。1 设备类型类型特点例子字符设备一个个字符方式访问键盘块设备以块为单位,对数据随机访问flash网络设备打破了“一切皆文件”的原则网卡其他设备类型: 杂项设备——简化的字符设备 伪设备——虚拟的,例如/dev/null(空设备), /dev/zero(零设备)2 模块(1)构建模块方式 1)放在内核源码树中 2)放在内核代码外 此时,写个Makefile较简单KVERS原创 2020-10-22 15:36:48 · 114 阅读 · 0 评论 -
《Linux内核设计与实现》学习【11】—— 页高速缓存和页回写
1 缓存 linux为了提高对磁盘的访问速度,通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。 两个重要因素: 1)访问磁盘的速度要远低于访问内存的速度,若从处理器L1和L2高速缓存访问则速度更快。 2)数据一旦被访问,就很有可能短时间内再次访问。1.1 缓存策略3种策略: 1)不缓存:不缓存写操作,当对缓存中的数据进行写操作时,直接写入磁盘,同时使此数据的缓存失效 2)写透缓存:写数据时同时更新磁盘和缓存 3)回写:先写到缓存,并将页面标记为“脏”,原创 2020-10-22 15:31:47 · 143 阅读 · 0 评论 -
《Linux内核设计与实现》学习【10】—— 进程地址空间
进程地址空间:系统中每个用户空间进程所看到的内存。1 地址空间 进程地址空间由进程可寻址的虚拟内存组成。特点: 1)平坦的:地址空间范围是一个独立的连续区间 2)寻址范围:4GB虚拟内存(32位地址空间中),可以被合法访问的地址空间称为内存区域。如果一个进程访问了不在有效范围中的内存区域,或以不正确的方式访问了有效地址,那么内核就会终止该进程,并返回“段错误”信息。 3)内存区域可包含的对象:可执行文件代码的内存映射称为代码段。(text section)可执行文件的已初始化全局原创 2020-10-21 16:47:55 · 91 阅读 · 0 评论 -
《Linux内核设计与实现》学习【9】—— 块I/O
1 块设备特点: 1)能够随机访问数据 2)最小的可寻址单元是扇区,扇区的大小是2的整数倍,一般是 512字节。扇区和块: 扇区——物理设备的最小可寻址单元 块——逻辑上的最小寻址单元2 缓冲区头调入块到缓冲区中,每个缓存区对应一个buffer_head描述符,称作缓冲区头。弊端: 1)对内核来说,操作页面更为简单 2)每个缓冲区头只能表示一个 [块],所以内核在处理大数据时,会分解为对一个个小的 [块] 的操作,造成不必要的负担和空间浪费。3 bio 块I/O的基本原创 2020-10-20 16:15:49 · 76 阅读 · 0 评论 -
《Linux内核设计与实现》学习【8】—— 虚拟文件系统
1 VFS文件系统虚拟文件系统(VFS)为用户空间程序提供了文件和文件系统相关的接口,使应用通过统一的系统调用访问各种存储介质。虚拟文件中的4个主要对象:文件、目录项、索引节点和安装点。2 文件特性superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及档案系统的格式与相关信息等;inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的资料所在的 block 号码;block:实际记录文件的内容,若文件太大时,会占原创 2020-10-20 12:24:33 · 84 阅读 · 0 评论 -
《Linux内核设计与实现》学习【7】—— 内存管理
1 概念(1)页内核把物理页作为内存管理的基本单位,用struct page表示系统中的每个物理页(2)区由于硬件的限制原创 2020-10-20 12:21:14 · 91 阅读 · 0 评论 -
《Linux内核设计与实现》学习【6】—— 定时器
1 时间 HZ:系统定时器节拍频率 jiffies:自系统启动以来产生的节拍总数 回绕问题:unsigned long timeout = jiffies + HZ/2; /* 0.5秒 */if (timeout > jiffies) { /* 没有超时 .... */} else { /* 超时了 ... */} 若jiffies超过最大值,重新变为0,则判断出错。内核提供了宏来帮助比较#define time_after(a,b) \ (typeche原创 2020-10-18 11:55:49 · 132 阅读 · 0 评论 -
《Linux内核设计与实现》学习【5】—— 内核同步
1 基本概念 临界区:访问和操作共享数据的代码段 竞争条件:多个执行线程处于同一临界区中同时执行 同步:避免并发和防止竞争条件2 造成并发执行的原因 (1)中断:中断随时会发生,也就会随时打断当前执行的代码。 (2)软中断和tasklet:软中断和tasklet也会随时被内核唤醒执行,也会像中断一样打断正在执行的代码 (3)内核抢占:内核具有抢占性,发生抢占时,如果抢占的线程和被抢占的线程在相同的临界区,就产生了竞争条件 (4)睡眠及用户空间的同步:用户进程睡眠后,调度程序会唤原创 2020-10-18 10:14:20 · 126 阅读 · 0 评论 -
《Linux内核设计与实现》学习【4】—— 中断
1 上/下半部将中断处理程序分为两部分: 1)上半部:做严格时限的工作 2)下半部:允许稍后执行的工作2 使用注册/* * irg - 表示要分配的中断号 * handler - 实际的中断处理程序 * flags - 标志位,表示此中断的具有特性 * name - 中断设备名称的ASCII 表示,这些会被/proc/irq和/proc/interrupts文件使用 * dev - 用于共享中断线,多个中断程序共享一个中断线时(共用一个中断号),依靠dev原创 2020-10-17 20:41:12 · 399 阅读 · 0 评论 -
《Linux内核设计与实现》学习【3】——系统调用
1 作用用户–>系统调用–>硬件。作用: 1)为用户空间提供了一种硬件的抽象接口 2)保证安全性,内核可以根据权限、用户类型等对需要的访问进行裁决2 源码分析 以arm平台代码为例。 应用程序调用open、read等,会通过swi指令,陷入到内核态,进入异常向量vector_swi,在arch/arm/kernel/entry-common.S中ENTRY(vector_swi) /*保护用户态的现场*/ sub sp, sp, #S_FRAME_SIZE st原创 2020-10-04 12:46:16 · 291 阅读 · 0 评论 -
《Linux内核设计与实现》学习【2】—— 进程调度
1 简介(1)调度程序工作 1)将哪个投入运行 2)何时运行及运行多长时间(2)I/O消耗型和处理器消耗型 I/O消耗型:大部分时间处理IO请求 处理器消耗型:大部分时间在执行代码(3)优先级两种: 1)nice值:范围是-20~+19,值越大优先级越低 2)实时优先级:范围是0~99,值越大优先级越高。任何实时进程的优先级大于普通进程(4)完全公平调度(Completely Fair Scheduler,CFS) 理念:每个进程获得1/n的处理能力 做法:每个进原创 2020-10-04 11:17:55 · 90 阅读 · 0 评论 -
《Linux内核设计与实现》学习【1】—— 进程管理
1 进程与线程 进程是处于执行期的程序,线程是进程的执行单元。进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位进程线程资源开销每个进程都有独立的代码和数据空间,程序之间的切换会有较大的开销同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小包含关系可包含多个线程进程的一部分内存分配进程之间的地址空间和资源是相互独立的同一进程的线程共享本进程的地址空间和资源2 描述符及结构进程描原创 2020-10-01 18:51:44 · 85 阅读 · 0 评论