《Linux内核设计与实现》读书笔记

news2025/2/27 11:12:24

《Linux内核设计与实现》读书笔记

  • 第三章 进程管理
  • 第四章 进程调度
  • 第五章 系统调用
  • 第六章 内核数据结构
  • 第七章 中断和中断处理
  • 第八章 下半部和推后执行的工作
  • 第九章 内核同步介绍
  • 第十章 内核同步方法
  • 第十一章 定时器和时间管理
  • 第十二章 内存管理
  • 第十三章 虚拟文件系统
  • 第十四章 块IO层
  • 第十五章 进程地址空间
  • 第十六章 页高速缓存和页回写
  • 第十七章 设备与模块

第三章 进程管理

  1. Linux中线程和进程并不特别区分,对Linux而言,线程只不过是一种特殊的进程罢了。
  2. 创建一个新进程,fork->exec。fork返回两次,一次在父进程返回,一次在子进程返回;exec创建新的地址空间,把新的程序载入。
  3. 存储进程的数据结构是双向循环链表。进程描述符task_struct在32位机器上,大约有1.7KB。
  4. 进程描述符中:PID唯一标识一个进程;state对应进程5种状态(运行、可中断、不可中断、被追踪、停止);
  5. 进程创建时,只有资源在需要被写入时才会发生拷贝,即写时拷贝
  6. 从Linux内核角度来说,没有线程的概念,因为线程仅仅被视为一个鱼其他进程共享某些资源的进程,每个进程(线程)有隶属于自己的task_struct。

第四章 进程调度

  1. 抢占:进程会被操作系统强制挂起。让步(yield):进程主动挂起
  2. Linux采用两种不同的进程优先级表示:①:nice值,-20~+19,越低,优先级越高;②:实时优先级,0~99,任何实时进程的优先级都高于普通进程。
  3. CFS(完全公平调度),在Linux中称为SCHED_NORMAL。他能确保给每个进程公平的处理器使用比,不完全公平,但是近乎完美的多任务。
  4. 静态优先级,nice值,权利在用户;动态优先级,权利在系统
  5. O(n)调度器:链表;O(1)调度器:bitmap位运算
  6. 实时调度策略:SCHED_FIFO和SCHED_RR。
  7. 每个 CPU 都有自己的运行队列(Run Queue, rq),用于描述在此 CPU 上所运行的所有进程,其队列包含三个运行队列,Deadline 运行队列 dl_rq、实时任务运行队列 rt_rq 和 CFS 运行队列 cfs_rq,其中 cfs_rq 是用红黑树来描述的,按 vruntime 大小来排序的,最左侧的叶子节点,就是下次会被调度的任务。
    在这里插入图片描述
    nice值越高,权重越大,虚拟运行时间就会越小,下一次再红黑树中选任务的时候就会更大几率选中。

第五章 系统调用

  1. 每个系统调用都会对应一个系统调用号。系统调用会触发软中断,中断号为int &0x80。x86系统上,系统调用号是通过eax寄存器传递给内核的,系统调用的参数通过其他参数寄存器传递。

第六章 内核数据结构

  1. 使用链表存放数据的理想情况是,需要遍历所有数据或要动态加入和删除数据时。
  2. 映射在Linux中也是一种数据结构,就相当于是map,更确切地说是键值对。
  3. 二叉树,Linux中常用自平衡二叉树,即红黑树。

第七章 中断和中断处理

  1. 每个中断会对应一个中断号,对应一个中断处理程序(中断服务例程ISR)
  2. 异常,常常也称为同步中断。
  3. 上半部和下半部:有个矛盾的点,又想中断程序运行得快,又想中断程序完成更多的工作量。处于这点,专家们把中断处理程序分成上半部和下半部。上半部接收到中断,就立即开始执行,但只做有严格时限的工作,例如对接受的中断进行应答或者复位硬件,这些工作都是在所有中断都被静止的情况下完成的。其他能够推迟的工作,比如数据具体的处理方式可以延迟到下半部去处理。
  4. 中断处理程序无需重入,因为当一个给定的中断处理程序正在执行时,相应的中断线在所有处理器上都会被屏蔽掉,以防止在同一中断线上接收另一个新的中断。
  5. 有一点非常重要,请牢记:中断处理程序打断了其他代码。

第八章 下半部和推后执行的工作

  1. 任务划分的到上半部下半部的粒度(建议):①如果一个任务对时间非常敏感,将其放在上半部;②如果一个任务和硬件相关,将其放在上半部;③如果一个任务保证不被其他打断,放在上半部;④其他任务放在下半部
  2. 上半部简单快速,执行的时候禁止一些或者全部中断;下半部一般在中断返回的时候执行,执行期间可以相应中断。这种设计可系统处于中断屏蔽状态尽可能的短,以此来提高系统的响应能力。
  3. 下半部的实现方式:软中断、tasklet、工作队列。tasklet基于软中断实现,工作队列基于内核线程实现。软中断和tasklet的上下文是中断,工作队列的上下文是进程。工作队列中的人物允许休眠,换句话说他有自己的实体,即他牵扯到进程上下文切换,因此开销大。

第九章 内核同步介绍

  1. 避免并发和防止竞争条件称为同步。
  2. 可能造成并发的原因:中断、软中断和tasklet、内核抢占、睡眠及用户空间同步、对称多处理
  3. 异步:异步双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息【百度百科】
  4. 加锁的情况:如果其他执行线程可以访问这些数据、如果其他什么东西能看到它,那么,就需要锁住它!几乎所有的内核全局变量和共享数据都需要某种形式的同步方法。
  5. 争用:锁被占有时,其他线程视图获取锁的情况就叫争用。

第十章 内核同步方法

  1. 原子操作:保证操作以原子的方式执行----执行过程不被打断。Linux内核提供了对整数、位的原子操作。
  2. 整数操作,atomic_t、atomic64_t,低八位是锁
  3. 自旋锁:在短期内进行轻量级加锁,持有自旋锁的时间最好是小于完成两次上下文切换的耗时。自旋锁不可递归。在中断处理程序中使用自旋锁时,一定要在获取锁之前,首先禁用本地中断,否则,中断处理程序就会打断正在持有锁的内核代码,有可能会试图去争用这个已经被持有的自旋锁。
  4. 锁,锁的是数据,而不是代码。
  5. 再对于持有锁时间较长的场景,适合使用信号量。在持有信号量锁时,允许任务进入睡眠状态(自旋锁不允许这样的事情发生)。互斥量就是使用计数为1的信号量,但是他提供更为简单易用的接口。
  6. 完成变量:一个任务需要发出信号通知另一个任务发生了某个特定的事件时使用。
  7. rmb()、wmb()是阻止跨越屏障的载入/存储动作发生重排序的函数。

第十一章 定时器和时间管理

  1. 提高节拍率带来的好处:更高的时钟中断解析度可以提高驱动时间的解析度、提高了时间驱动事件的准确度。
  2. 高HZ的劣势:节拍率越高,意味着时钟中断频率越高,中断处理程序占用的处理器的时间越多,耗电多。
  3. jiffies是一个全局变量,用来记录自系统启动以来产生的节拍的总数,系统启动时,初始化为0.

第十二章 内存管理

  1. kmalloc函数确保页在物理地址上是连续的
  2. vmalloc函数只确保也在虚拟地址空间内连续
  3. 栈溢出可能会危及thread_info的数据
  4. 内核和用户空间不同,他不具备简单便捷的内存分配方式。因为,内核一般不能睡眠,且内核处理内存分配错误对内核来说不是容易的事。

第十三章 虚拟文件系统

  1. VFS把各种不同的文件系统抽象后采用统一的方式进行操作。抽象层使得Linux能够支持各种文件系统,即便是他们在功能和行为上存在很大差别。VFS抽象层之所以能够衔接各种各样的文件系统,是因为他们定义了所有文件系统都支持的、基本的、概念上的接口和数据结构。
  2. 在Windows中,将文件的命名空间分类为驱动字母,例如C:,这种命名空间划分为设备和分区的做法没相当于把硬件细节“泄露”给文件系统抽象层。
  3. 文件相关信息有时被称为文件的元数据,该结构被称为索引节点,inode。文件系统的信息存储在超级快中。
  4. Linux 文件系统会为每个文件分配两个数据结构:索引节点(index node)和目录项(directory entry),它们主要用来记录文件的元信息和目录层次结构。索引节点,也就是 inode,用来记录文件的元信息,比如 inode 编号、文件大小、访问权限、创建时间、修改时间、数据在磁盘的位置等等。索引节点是文件的唯一标识,它们之间一一对应,也同样都会被存储在硬盘中,所以索引节点同样占用磁盘空间。目录项,也就是 dentry,用来记录文件的名字、索引节点指针以及与其他目录项的层级关联关系。多个目录项关联起来,就会形成目录结构,但它与索引节点不同的是,目录项是由内核维护的一个数据结构,不存放于磁盘,而是缓存在内存。目录也是文件,也是用索引节点唯一标识,和普通文件不同的是,普通文件在磁盘里面保存的是文件数据,而目录文件在磁盘里面保存子目录或文件。
    在这里插入图片描述
  5. 文件系统的基本操作单位是数据块。
  6. 硬链接是多个目录项中的「索引节点」指向一个文件,也就是指向同一个 inode,但是 inode 是不可能跨越文件系统的,每个文件系统都有各自的 inode 数据结构和列表,所以硬链接是不可用于跨文件系统的,由于多个目录项都是指向一个 inode,那么只有删除文件的所有硬链接以及源文件时,系统才会彻底删除该文件;软链接相当于重新创建一个文件,这个文件有独立的 inode,但是这个文件的内容是另外一个文件的路径,所以访问软链接的时候,实际上相当于访问到了另外一个文件,所以软链接是可以跨文件系统的,甚至目标文件被删除了,链接文件还是在的,只不过指向的文件找不到了而已。

第十四章 块IO层

  1. 系统中能够随机(不需要按顺序)访问固定大小数据片的硬件设备称作块设备,这些固定大小的数据片就称为块。如果一个硬件设备是以字符流的方式被访问的话,那就应该将它归于字符设备;反过来,如果一个设备是随机(无序)访问的,那么他就属于块设备。
  2. 扇区是设备的最小寻址单元;块时文件系统的最小寻址单元。
  3. 当一个块呗调入内存时,他要存储在一个缓冲区中。每个缓冲区对应一个块,它相当于是磁盘块在内存中的表示。每个缓冲区都有一个缓冲区头,存储相关块的控制信息。
  4. 缓冲区头的弊端:①缓冲区头是一个很大且不容易控制的数据结构体;②他仅能描述单个缓冲区,造成不必要的空间浪费。
  5. IO调度:FIFO、最短寻道、Scan、C-Scan

第十五章 进程地址空间

  1. 内存描述符中:页全局目录、代码段开始结束地址、数据、堆、进程栈、命令行参数、环境变量开始结束地址

第十六章 页高速缓存和页回写

  1. 写缓存有三种策略:①不缓存:高速缓存不缓存任何写操作,直接写回磁盘,且不缓存;②写透缓存:更新缓存、更新磁盘;③回写:只写入缓存,并标记为脏,由另一进程周期性地写回磁盘

第十七章 设备与模块

  1. 设备类型:块设备、字符设备、网络设备
  2. 一些”伪设备“:内核随机数发生器/dev/random、空设备/dev/null、零设备/dev/zero、满设备/dev/full

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java:2022年全球使用的15种最流行的Java应用

到今年为止,Java已经有25年的历史了,尽管引入了许多更新、更华丽的语言和工具,但它仍然是当今最流行的编程语言之一。这们老语言一直在蹒跚前行,享受着当今众多程序员和开发人员的爱。 Java有许多优势,再加上它的广泛使…

transformer论文及其变种

文章目录transformer模型细节slf-attn & multi-head attnabs positionwhy slf-attntransformer-XLInformer细节probSparse slf-attnLongformer细节GPT-generative pre-train模型结构下游任务:fine-tuningtransformer motivation:序列映射的任务&…

高速串行信号串接电容放在发送端还是接收端

在设计一些高速的串行信号,比如PCIE,STATA,USB3.0等,在差分信号线上面常常都会串接一个电容 这个电容主要有如下几个方面的作用: 1.滤除信号的直流分量,使信号关于0电平对称; 因为很多高速信号…

持续集成环境-maven、tomcat安装和配置

在Jenkins 集成环境中,用Maven编译、打包项目 壹,安装Maven 安装在jenkins服务器上 官方下载地址 上传安装包 解压 : tar -zxvf apache-maven-3.6.2-bin.tar.gzmkdir -p /opt/maven #创建目录 mv apache-maven-3.6.2/* /opt/maven #移…

Vue3中v-if与v-for、多事件处理器即案件修饰符、$attrs、$root和$parent

文章目录1. v-if与v-for及动态属性ref的使用2. 多事件处理器及按键修饰符3. $attrs包含class和style4. \$root和$parent1. v-if与v-for及动态属性ref的使用 在 vue3 中,当 v-if 与 v-for 一起使用时,v-if 具有比 v-for 更高的优先级。 下面是 v-for 结…

ubuntu20.04搭建janus服务器

目录 一、安装依赖项 二、编译janus v1.1.0 三、生成ssl证书 四、编译配置nginx 五、编译turnserver 六、配置janus文件 七、编译janus报错记录 参考资料: 环境是ubuntu20.04 使用最新的janus v1.1.0代码。 一、安装依赖项 sudo apt-get install aptitude…

Linux搭建Rabbitmq集群

1.1 添加其他用户 133、134、135 因为 guest 用户只能在本机访问,添加一个 admin 用户,密码也是 admin ./rabbitmqctl add_user admin admin ./rabbitmqctl set_user_tags admin administrator ./rabbitmqctl set_permissions -p / admin “." &qu…

嵌入式软件设计之美-以实际项目应用MVC框架与状态模式(下)

上节我们分享了MVC框架、状态模式组合在实际开发中的应用,它能够让我们的软件设计流程更加的清晰、易于维护: 嵌入式软件设计之美-以实际项目应用MVC框架与状态模式(上) 那么这一节我们就直接开门见山,从接下来的这个开源项目分享开始&…

An2023(Animate2023)中文版软件下载「附带安装教程」

animate2023版本已经更新,此次的最新版本中,拥有大量的新特性,特别是在继续支持Flash SWF、AIR格式的同时,还会支持HTML5Canvas、WebGL,并能通过可扩展架构去支持包括SVG在内的几乎任何动画格式,更新推出了…

MySQL数据库期末考试试题及参考答案(06)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 一、 填空题 普通索引使用KEY或____定义。在MySQL中,DROP VIEW语句用于____。MySQL中常见的索引大致分为普通索引、 ____ 、 ____ 、全文索引、空间索引。只有在…

《STL源码剖析》笔记——allocator

六大组件间关系 部分STL文件包含关系 allocator包含于中: 实际实现于三个文件 : 1.stl_construct.h :对象的构造和析构 2.stl_alloc.h空间配置和释放 3.stl_uninitialized.h 空间配置器(allocator) 1.什么是空间配置器&#xff…

MindFusion JS Chart 2.0 Crack

一个用于图表、仪表和仪表板的库。MindFusion JS Chart 结合了 2D 和 3D 图表、财务图表、仪表和仪表板。优雅的 API、丰富的事件集、无限数量和类型的数据系列以及您在JavaScript和HTML中创建完美数据可视化可能需要的一切。 特征 常见图表类型 创建交互式线图、 面积图、 气泡…

深入浅出scala之变量定义(P11-15)

文章目录1. 变量定义2.数据类型3.数值类型4.浮点类型1. 变量定义 基本语法: 变量定义一定要初始化 var|val变量名[: 变量类型] .变量值使用var或者val定义一个变量。 使用var(variable)声明变量,可以被重新赋值。 //定义变量a2,手动指定类型为Int,此时需要保证所…

如何完成视频合并操作?这几个方法值得一试

我们在拍摄视频vlog的时候,不可能持续、完整地拍一整天,而是通过很多视频素材中,挑选几段有意义的部分,将他们剪辑出来,然后再进行合并。大家可能会觉得视频剪辑很难学,其实不然,我们借助一些专…

[附源码]java毕业设计小说网站的设计与实现1

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

NVIDIA AGX Xavier 部署 CUDA-PointPillars

背景: CUDA-PointPillars 在X86 NVIDIA GeForce GTX 1060 使用自家激光雷达数据跑通并优化后,部署到边缘设备NVIDIA AGX Xavier,出现了好多问题,记录下来,以备后用。 参考: NVIDIA Jetson AGX Xavier安装…

SpringBoot整合Memcached缓存技术/JetCache缓存技术以及J2Cache缓存技术怎么在Spring Boot中配置

写在前面: 继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 3.5.1.6 Memcached缓存技术使用 3.5.1.6.1 下载安装…

torch包下载和安装失败的解决

今天打算使用python的 torch包的时候,输入pip install torch,在pycharm下载一直失败。 报错信息里面提示一开始是pip版本出错: WARNING: You are using pip version 20.0.2, however version 20.2.3 is available. 导致我一整天都在更新pip&…

软件工程毕设项目 计算机SSM毕业设计【源码+论文】

文章目录前言 题目1 : 基于SSM的旅游资源网站 <br /> 题目2 : 基于SSM的中药店商城网站 <br /> 题目3 : 基于SSM的汽车租赁网站<br /> 题目4 : 基于SSM的汉服文化平台网站 <br /> 题目5 : 基于SSM的校园疫情师生防疫登记备案系统 <br /> 题目6 :…

JS——【案例】图片轮播图(自动轮播/手动点击/悬停显示)[技术栈:html、css、JavaScript]

1、效果&#xff1a; 2、需求&#xff1a; 3、代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&…