《Linux内核源码分析》课程笔记

news2024/10/1 21:29:11

《Linux内核源码分析》课程笔记

  • 漏洞安全与虚拟内存
  • CPU缓存技术
  • malloc系统调用
  • 中断
  • 锁与IPC机制
  • MMU
  • 内存页回收
  • 内核设备驱动程序
  • 内核启动流程

这个课好烂,就是打广告用的。出现的老师的英语听着难受。

漏洞安全与虚拟内存

  1. CPU架构:1、X86架构,采用CISC指令集(复杂指令集计算机),程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。2、ARM架构,是一个32位的精简指令集(RISC)架构。3、RISC-V架构,是基于精简指令集计算(RISC)原理建立的开放指令集架构。4、MIPS架构,是一种采取精简指令集(RISC)的处理器架构,可支持高级语言的优化执行。

  2. 熔断漏洞利用乱序执行的特点,使得的用户态程序也可以读出内核空间的数据,包含个人私有数据和密码;而幽灵漏洞利用分支预测执行的特点来进行攻击。

  3. 侧信道攻击:是密码学当中一种常见的暴力攻击技术,针对加密电子设备在运行过程中的时间消耗、功率消耗或电磁辐射之类侧信道信息泄露而对加密设备进行攻击的方法。例如,高速缓存侧信道攻击(熔断)的流程如下:
    在这里插入图片描述
    分析:CPU执行指令时乱序执行的,执行过程中允许产生异常。发生异常时,在异常之后的代码可能已经执行。这种情况下,可能把一些还没用到的数据加载到了高速缓存中。

  4. malloc是用户态常用的分配内存接口的函数,mmap是用户态常用的监理文件映射或匿名映射的函数。

  5. 内存描述符:mm_struct,PCB的task_struct有一个指针指向这个mm_struct,示意图如下:
    在这里插入图片描述
    每个VMA都要连接到mm_struct中的链表以及红黑树当中。
    mmap/munmap接口函数是在应用程序中分配内存、读写大文件、链接动态库文件、多进程间共享内存的方法。

CPU缓存技术

  1. 缓存集成度低,和内存相比相同容量下、体积会大,访问速度接近于处理器。SMP系统中,处理器每个核都有独立的一级缓存,共享二级缓存。
  2. 缓存行的标签通常是从物理地址生成,索引可以从物理地址或者虚拟地址生成,根据索引生成的方式可以将缓存分成两类:
    a. 把从物理地址生成索引的缓存称为物理索引物理标签缓存(PIPT)
    b. 把从虚拟地址生成索引的缓存称为虚拟索引物理标签缓存(VIPT)
  3. 缓存策略
    a. 写分配:假设处理器写数据的时候,没有命中缓存行的时候就分配一个缓存行,然后读取数据并填充缓存行
    b. 读分配:处理器读数据的时候,没有命中缓存行就分配一个缓存行
    缓存更新:
    a. 写回:处理器在写数据的时候只更新缓存,并将缓存行标记为脏,只有在缓存被替换的时候再更新内存
    b. 写透:处理器在写数据的时候,同时更新缓存和内存,但是并不会把缓存行标记为脏
  4. 内核在很么情况下需要维护缓存?
    a. 内核修改或删除页表的时候
    b. 内核使用内核虚拟地址修改进程的物理页

malloc系统调用

  1. malloc是专门用于内存分配的函数。malloc函数—>Linux内核系统调用brk(向系统申请内存)。malloc() 源码里默认定义了一个阈值:
    如果用户分配的内存小于 128 KB,则通过 brk() 申请内存;
    如果用户分配的内存大于 128 KB,则通过 mmap() 申请内存;
    处理器MMU硬件处理最小单位是页,所以内核分配内存也是以页为单位的。
    流程如下:
    在这里插入图片描述

中断

  1. 中断控制器:将所有终端源发起的中断,通过对中断控制器的编程,可以控制每个中断源的优先级,也可以打开和关闭中断源。
  2. Programmable Interrupt Controller:PIC,可编程中断控制器
  3. 中断产生:在硬件电路中,两种方式:电平触发、边缘触发
  4. IRQ:中断请求。每个中断源都会对应一个IRQ编号
  5. 中断注册:Linux中断子系统向驱动程序提供注册中断的API

锁与IPC机制

  1. 内核锁机制:
    a. 原子操作
    b. 自旋锁:可基于CAS实现
struct semaphore {
	spinlock_t		lock; // 用于修改count的锁,其实可以直接用atomic_t
	unsigned int		count; 
	struct list_head	wait_list; // 等待信号量的进程
};

c. 信号量
d. 读写锁
e. CAS锁:解决多线程条件下使用锁造成性能损耗问题的算法,保证了原子性,这个原子操作是由CPU来完成的
CAS的原理:CAS算法有三个操作数,通过内存中的值(V)、预期原始值(A)、修改后的新值。
(1)如果内存中的值和预期原始值相等, 就将修改后的新值保存到内存中。
(2)如果内存中的值和预期原始值不相等,说明共享数据已经被修改,放弃已经所做的操作,然后重新执行刚才的操作,直到重试成功。

  1. RCU:Read Copy Update。允许读写并发执行。
  2. 大内核锁(BKL):锁定整个内核,确保没有CPU在核心态并行运行。

MMU

  1. 两级分页机制将32位的虚拟空间分成三段,低十二位表示页内偏移,高20分成两段分别表示两级页表的偏移。
    PGD(Page Global Directory): 最高10位,全局页目录表索引
    PTE(Page Table Entry):中间10位,页表入口索引
    当在进行地址转换时,结合在CR3寄存器中存放的页目录(page directory, PGD)的这一页的物理地址,再加上从虚拟地址中抽出高10位叫做页目录表项(内核也称这为pgd)的部分作为偏移, 即定位到可以描述该地址的pgd;从该pgd中可以获取可以描述该地址的页表的物理地址,再加上从虚拟地址中抽取中间10位作为偏移, 即定位到可以描述该地址的pte;在这个pte中即可获取该地址对应的页的物理地址, 加上从虚拟地址中抽取的最后12位,即形成该页的页内偏移, 即可最终完成从虚拟地址到物理地址的转换。从上述过程中,可以看出,对虚拟地址的分级解析过程,实际上就是不断深入页表层次,逐渐定位到最终地址的过程,所以这一过程被叫做page talbe walk。

  2. ARM64位可以指定地址线的位数,但是最高支持48位。

内存页回收

  1. 物理页根据是否有存储设备支持可以分为:支持交换的页;存储设备支持的文件页。
  2. 针对不同的页,采用不同的回收策略:
    针对支持交换的页,先把页的数据写到交换区,然后释放物理页
    针对存储设备支持的页,如果是干净的页,直接释放,如果是脏页,先写回设备,再释放物理页
  3. LRU算法中有5个lru链表:
    在这里插入图片描述
  4. 回收页表映射的匿名或文件页时,需要从页表中删除映射,内核需要知道物理页被映射到那些进程的虚拟地址空间,需要实现物理页到虚拟页的反向映射。
    在这里插入图片描述
    index:表示在映射里的偏移。对于匿名映射,index是物理页对应的虚拟页再虚拟内存区域的页偏移;对于文件映射映射,index是物理页存储的数据在文件页中的页偏移。
    mapping中有标识匿名页和文件页的位。

内核设备驱动程序

  1. Linux中的输入输出设备被分为:块设备、字符设备、网络设备
  2. 驱动程序所做的工作:(1)将抽象要求转换为具体要求; (2)检查 I/O 请求的合法性; (3)读出和检查设备的状 态; (4)传送必要的参数; (5)设置工作方式; (6)启动 I/O 设备。
  3. 设备驱动程序:CPU不是系统中唯一智能的设备,每个物理设备都拥有自己的控制器。在Linux中管理硬件控制器的代码并不在每个应用程序中,而是由内核统一管理,这些处理和管理硬件控制器的软件就是设备驱动程序。
  4. 内核具有共性:(1)驱动程序属于内核代码;(2)为内核提供统一接口;(3)驱动程序的执行属于内核机制并使用内核服务;(4)动态可加载;(5)可配置
  5. DMA;在进行 I/O 设备和内存的数据传输的时候,数据搬运的工作全部交给 DMA 控制器,而 CPU 不再参与任何与数据搬运相关的事情,这样 CPU 就可以去处理别的事务。
    在这里插入图片描述

内核启动流程

  1. 实模式:程序中用到的地址都是真实的物理地址。在32位CPU下,系统复位或加电时都是以实模式启动,然后再切换为保护模式。在实模式下,所有的段都是可以读、写和可执行的。保护模式:相当于引入虚拟地址之类的概念对内存进行保护,相比实模式更安全。
  2. 启动过程:按下电源;主板会向电源组发出信号;接到信号后,主板启动CPU(CPU重置所有寄存器,初始化数据);BIOS执行程序存储在ROM中,起始位置为0xFFFF0,当CS:IP指向此位置时,BIOS开始工作。BIOS主要包括内存映射。BIOS程序会选择一个启动设备,并将控制权交给启动扇区的代码,主要工作即使用中断向量和中断服务程序完成BootLoader的加载,最终将boot.img加载到0x7c00的位置启动。

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

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

相关文章

绿盟SecXOps安全智能分析技术白皮书

数据共享 定义内涵 数据共享 是指在多个用户或多个程序之间遵循一定规则共同享用数据,并进行各种操作、运算和分析的一种技术。数据共享包括数据发布、接口、交换等内容。 技术背景 随着数字经济成为拉动全球经济增长的新引擎,大数据成为经济中重要的…

微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.7 Redis 缓存预热

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存48 多级缓存48.7 Redis 缓存预热48.7.1 添加Redis 缓存的需求48.7.2 冷启动和缓存预热48.7.3 缓存预热…

高通平台开发系列讲解(DSI篇)DSI函数的内部逻辑

文章目录 一、dsi_start_data_call函数二、dsi_get_pkt_stats函数三、dsi_stop_data_call函数四、回调流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢DSI层最上层函数位于dsi_netctrl.c中,该.c位于apps_proc/data/dsi_netctrl目录中,现对部分主要函数的调用流程进…

大数据工程师的“卿卿日常”

大数据工程师在日常生活中做什么? 长按关注《Java学研大本营》,加入读者群,分享更多精彩 扫码关注《Java学研大本营》,加入读者群,分享更多精彩 什么是数据工程? 数据工程是当今世界最关键和最基础的技能…

25岁,一个汽修工人转行 Python 的真实事迹!

前言 我遇到一个汽修工人,他没有事喜欢上网,看新闻,对于编程很有兴趣,也想过转行,但是不知道学习什么好. 如何知道 Python. 我和这位朋友的家很近,在过年的时候,我们聊过 (20 出头), 我了解他是…

在vue中,为什么不能用index作为key?

啊?不是吧,在vue中,不能使用index作为key呢?使用index作为key又好理解又方便,为什么不能使用呢?看文章就知道啦~. 一、key的作用是什么? key的作用众所周知,看一个demo就知道&…

【FFmpeg视频播放器开发】解封装解码流程、常用API和结构体简介(一)

一、前言 在正式编写 FFmpeg 播放器前,我们需要先简单了解下所要用到的 FFmpeg 库、播放与解码流程、函数和相关结构体。 二、FFmpeg 库简介 库介绍avcodec音视频编解码核心库avformat音视频容器格式的封装和解析avutil核心工具库swscal图像格式转换的模块swresa…

零基础如何学好Python?Python有哪些必须学的知识?

跟几个IT界的大佬提起Python,他们说零基础学好Python很简单,Python进阶需要花费些气力。那么零基础如何学好Python?Python有哪些必须学的知识?学习的策略技巧有哪些?今天小编整理的这篇文章将会给你启发。 Python上手…

vulnhub靶机DriftingBlue6

靶机下载地址DriftingBlues: 6 ~ VulnHub kali ip:192.168.174.128 靶机ip: 192.168.174.140 首先进行ip地址发现 进行端口扫描 这里进行目录扫描,我习惯性使用Linux里面的gobuster和Windows上的dirsearch一起进行扫描。 python dirsearc…

Linux | 常见指令和常用热键

啊我摔倒了..有没有人扶我起来学习.... 👱个人主页:《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ 💒个人社区:《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

升级Linux服务器你必须要知道的事

服务器安全是每个系统管理员的头等大事。除了拥有第三方安全工具(如防火墙,DDoS保护等)外,使生产服务器上的所有代码保持最新也是极为重要的。 当您的应用程序投入生产时,升级它的风险更大。如果您的服务器由Linux驱动…

超级简单基于nodejs电商管理系统的设计与实现.zip(论文+源码+ppt文档+视频录制)

相关资料下载地址:请点击下载》》》 该商城平台整体上实现了商品管理模块、订单交易模块,购物车模块、商品列表股那里模块、用户模块模块。在这些功能模块独立运行和相互配合下形成了一个电商商城系统。在商城实现的技术架构方面,该商城采用nodejs作为商城后台的底…

C++11标准模板(STL)- 算法(std::minmax)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 返回两个元素的较小和较大…

二次供水智慧改造,保障冬季热水稳定供给

冬季低温雨雪天气不仅仅影响到居民用水&#xff0c;也影响到二次供水泵站的维护检修。一旦设备出现故障&#xff0c;导致无法及时供水&#xff0c;居民可能喝不上一口热水&#xff0c;更不用提热水洗澡的难题了。因此&#xff0c;在冬季需要对二次供水泵站设备更加关注&#xf…

AD20和立创EDA设计(4)PCB设计

&#xff08;1&#xff09;本文主要介绍如何将从立创EDA导出的原理图&#xff0c;在AD20进行PCB设计。 &#xff08;2&#xff09;需提前观看&#xff1a;AD20和立创EDA设计&#xff08;3&#xff09;微调原理图和原理图检查&#xff1b; &#xff08;3&#xff09;邀请加入嵌入…

【数据结构Note6】-图-知识总结(图存储+BFS+DFS+最小生成树+最短路径+拓扑+逆拓扑)

文章目录6.1 图的定义及性质6.1.1 无向图和有向图6.1.2 简单图和多重图6.1.3 图的相关概念6.1.3.1 顶点的度6.1.3.2 顶点和顶点的关系6.1.3.3 子图6.1.3.4 连通分量6.1.3.5 强连通分量6.1.3.6 生成树6.1.3.7 生成森林6.1.3.8 边的权、带权图/网6.1.3.9 几种特殊的图6.2 图的存储…

课程试题库网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 模块划分&#xff1a;老师模块、班级模块、学生模块、课程模块、试题模块、试卷模块、组卷模块、考试模块、答题模) 管理…

零基础转行Python开发怎么学习呢?

转行零基础学Python编程开发难度大吗&#xff1f;从哪学起&#xff1f;近期很多小伙伴问我&#xff0c;如果自己转行学习Python&#xff0c;完全0基础能否学会呢&#xff1f;Python的难度到底有多大&#xff1f;今天&#xff0c;小编就来为大家详细解读一下这个问题。 学习 Py…

时间哈希+日期处理 睡大觉

E-睡大觉_2022河南萌新联赛第&#xff08;四&#xff09;场&#xff1a;郑州轻工业大学 (nowcoder.com) 题意&#xff1a; 思路&#xff1a; 这是一道模拟题&#xff0c;这里主要总结如何处理时间信息和日期信息 对于时间信息&#xff1a;把时分秒转化成秒&#xff0c;相当…

基于java(springboot)网吧管理系统(java毕业设计)

基于java&#xff08;springboot&#xff09;网吧管理系统 网吧管理系统是基于java编程语言&#xff0c;mysql数据库&#xff0c;springboot框架和idea开发工具开发 &#xff0c;本系统分为会员&#xff0c;网管&#xff0c;管理员三个角色&#xff0c;会员功能是注册登陆系统…