Linux内核驱动
文章平均质量分 87
新程序圆
资深架构师
展开
-
08-《Linux内核设计与实现》读书笔记(八)- 中断下半部的处理
下面对实现中断下半部工作的3种机制进行总结,便于在实际使用中决定使用哪种机制下半部机制上下文复杂度执行性能顺序执行保障软中断 中断 高(需要自己确保软中断的执行顺序及锁机制) 好(全部自己实现,便于调优) 没有tasklet 中断 中(提供了简单的接口来使用软中断) 中 同类型不能同时执行工作队列 进程 低(在进程上下文中运行,与写用户程序差不多) 差 没有(和进程上下文一样被调度)原创 2023-09-18 22:19:54 · 66 阅读 · 0 评论 -
07-《Linux内核设计与实现》读书笔记(七)- 中断处理
为了提高CPU和外围硬件(硬盘,键盘,鼠标等等)之间协同工作的性能,引入了中断的机制。没有中断的话,CPU和外围设备之间协同工作可能只有轮询这个方法:CPU定期检查硬件状态,需要处理时就处理,否则就跳过。当硬件忙碌的时候,CPU很可能会做许多无用功(每次轮询都是跳过不处理)。中断机制是硬件在需要的时候向CPU发出信号,CPU暂时停止正在进行的工作,来处理硬件请求的一种机制。中断处理对处理时间的要求很高,如果一个中断要花费较长时间,那么中断处理一般分为2部分。原创 2023-09-18 22:12:36 · 52 阅读 · 0 评论 -
06-《Linux内核设计与实现》读书笔记(六)- 内核数据结构
内核中关于队列定义的头文件位于: include/linux/kfifo.h头文件中定义的函数的实现位于:kernel/kfifo.c内核中关于映射定义的头文件位于: include/linux/idr.h头文件中定义的函数的实现位于:lib/idr.c内核中关于红黑树定义的头文件位于: include/linux/rbtree.h头文件中定义的函数的实现位于:lib/rbtree.c。原创 2023-09-18 22:07:58 · 66 阅读 · 0 评论 -
05-《Linux内核设计与实现》读书笔记(五)- 系统调用
简单来说,系统调用就是用户程序和硬件设备之间的桥梁。用户程序在需要的时候,通过系统调用来使用硬件设备。系统调用的存在,有以下重要的意义:1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备,这样大大简化了用户程序的开发。比如:用户程序通过write()系统调用就可以将数据写入文件,而不必关心文件是在磁盘上还是软盘上,或者其他存储上。2)系统调用使得用户程序有更好的可移植性。只要操作系统提供的系统调用接口相同,用户程序就可在不用修改的情况下,从一个系统迁移到另一个操作系统。原创 2023-09-18 22:01:03 · 51 阅读 · 0 评论 -
04-《Linux内核设计与实现》读书笔记(四)- 进程的调度
现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程)。决定哪些进程运行,哪些进程等待决定每个进程运行多长时间此外,为了获得更好的用户体验,运行中的进程还可以立即被其他更紧急的进程打断。总之,调度是一个平衡的过程。一方面,它要保证各个运行的进程能够最大限度的使用CPU(即尽量少的切换进程,进程切换过多,CPU的时间会浪费在切换上);另一方面,保证各个进程能公平的使用CPU(即防止一个进程长时间独占CPU的情况)。原创 2023-09-14 21:50:22 · 53 阅读 · 0 评论 -
03-《Linux内核设计与实现》读书笔记(三)- Linux的进程
进程是所有操作系统的核心概念,同样在linux上也不例外。原创 2023-09-14 21:43:52 · 55 阅读 · 0 评论 -
02-《Linux内核设计与实现》读书笔记(二)- 内核开发的准备
在尝试内核开发之前,需要对内核有个整体的了解。原创 2023-09-14 21:39:28 · 41 阅读 · 0 评论 -
01-《Linux内核设计与实现》读书笔记(一)-内核简介
本篇简单介绍内核相关的基本概念。原创 2023-09-14 21:32:57 · 54 阅读 · 0 评论 -
深入理解 Linux 位置无关代码 PIC
Linux进程从磁盘加载到内存中运行的过程中,内核会为进程分配虚拟地址空间,虚拟地址空间被划分为一块块的区域(Segment),其中最重要的几个区域如下:图1 - 应用程序虚拟地址空间说明内核地址空间,对所有应用来说都是相同的,这部分地址空间应用无法直接访问。内核地址空间不是本文关注的重点,我们重点关注应用程序的重要的一些SEGMENT。表1 - 应用程序重要segment描述。原创 2023-09-04 22:51:15 · 344 阅读 · 0 评论 -
Linux读写锁逻辑解析
除了mutex,在linux内核中,还有一个经常用到的睡眠锁就是rw semaphore(后文简称为rwsem),它到底和mutex有什么不同呢?为何会有rw semaphore?无他,仅仅是为了增加内核的并发,从而增加性能而已。Mutex严格的限制只有一个thread可以进入临界区,但是实际应用中,有些场景对共享资源的访问可以严格区分读和写的,并且是读多写少,这时候,其实多个读的thread同时进入临界区是OK的,使用mutex则限制一个线程进入临界区,从而导致性能的下降。原创 2023-09-03 23:47:18 · 275 阅读 · 0 评论 -
Linux EAS介绍
能量感知调度(Energy Aware Scheduling,简称EAS)是目前Android手机中Linux线程调度器的基础功能,它使调度器能预测其决策对CPU能耗的影响。依靠CPU的能量模型(Energy Model,简称EM),EAS能为每个线程选择一个最能节约能量的CPU,并把对系统性能的影响降到最低。EAS仅在异构CPU拓扑(如Arm big.LITTLE)上运行,因为这是EAS节约能量潜力最大的CPU拓扑结构。原创 2023-09-03 23:45:40 · 108 阅读 · 0 评论 -
Linux Swap 介绍
本文简要介绍了Linux中的swap流程及一些优化机制。随着SSD设备的快速发展以及新型存储设备的逐步应用,swap机制的性能得到了很大改善,并带来了一些新的优化方向。参考材料。原创 2023-09-04 22:21:30 · 291 阅读 · 0 评论 -
保护函数返回的利器——Linux Shadow Call Stack
提到内核栈溢出的漏洞缓解,许多朋友首先想到的是栈内金丝雀(Stack Canary)。今天向大家介绍一项在近年,于Android设备中新增,且默默生效的安全机制——影子调用栈:SCS(Shadow Call Stack)。在通常的函数调用中,被调用函数的返回地址存储在栈上,攻击者可以通过篡改栈上返回地址劫持程序的执行流,常见的攻击方式如通过溢出覆盖返回地址、ROP(Return Oriented Programming)攻击等。原创 2023-09-04 22:06:14 · 169 阅读 · 0 评论 -
论好名字的重要性: Linux内核page到folio的变迁
Linux内核page到folio的变迁原创 2023-09-04 21:58:05 · 93 阅读 · 0 评论 -
cgroup基础介绍
子系统主要用来实现资源的控制,因为是具体的控制模块,单独拉出来介绍,随着需求及功能的增加,有如下比较重要且常用的子系统:cgroup抽离出这些子系统,也是在复用这些资源管理模块,其本质是在这些资源管理模块上附加钩子来实现资源的限制与优先级分配。本文重点对cgroup数据结构及其基本概念进行描述,因为cgroup各数据结构稍微复杂些,所以对其做了重点描述,读者可以对照代码阅读会更有感觉。篇幅限制,具体各cgroup子系统没有涉及,抛砖引玉,感兴趣的同学可以补上。原创 2023-09-04 21:42:26 · 299 阅读 · 0 评论