
Linux内核
文章平均质量分 95
Mr_zhangsq
加油
展开
-
Linux内核设计与实现——读书笔记(终)
本篇主要记录《Linux内核设计与实现》中展示的某些功能所使用的函数还有一些数据结构原创 2020-07-23 16:40:05 · 1115 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(15)调试
调试1、oops1.1、ksymoops1.2、kallsyms2、引发bug打印1、oops 内核通过oops告知用户有错误的事件发生。这个过程包括:向终端上输出错误信息、输出寄存器中保存的信息和输出可供跟踪的回溯线索。通常,内核发送完oops之后会处于一种不稳定状态。当故障发生时,内核必须适当地从当前的上下文环境中退出并尝试回复对系统的控制。多数时候这种尝试都会失败:如果oops发生在中断上下文中时,内核会陷入混乱(死机);如果oops在idle进程(pid为0)或init进程(pid为1)时发生原创 2020-10-09 15:13:05 · 358 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(14)设备与模块
设备与模块1、设备类型2、模块2.1、构建2.1.1、放在内核源码树中2.1.2、放在内核源码树外2.3、模块默认路径2.4、depmod2.5、加载模块2.6、模块参数2.7、导出符号表3、设备模型1、设备类型 除了常见的字符设备、块设备、网络设备和杂项设备外,还有一些虚拟的设备,它们被称为“伪设备”。例如,随机数发生器(通过/dev/random和/dev/urandom访问)、空设备(通过/dev/null访问)、零设备(通过/dev/zero访问)、满设备(通过/dev/full访问)和内存设原创 2020-09-29 09:54:00 · 744 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(13)页高速缓存和页回写
页高速缓存和页回写1、缓存方式1.1、读缓存1.2、写缓存2、缓存回收2.1、最近最少使用算法1、缓存方式1.1、读缓存 当进程发起一个read()系统调用时,内核开始一个读操作:首先回去检查需要读取的数据是否在页高速缓存中。如果在(缓存命中),则放弃访问磁盘,直接从内存中读取;如果数据没有在页高速缓存中(缓存未命中),内核必须调度块I/O操作从磁盘读取数据。然后内核将读来的数据放入页高速缓存中,后续相同的数据都可以直接命中。1.2、写缓存 写缓存有三种策略:(1)、不缓存(nowrite原创 2020-09-22 21:39:28 · 324 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(12)进程地址空间
进程地址空间1、地址空间2、内存描述符2.1、分配内存描述符1、地址空间 每个进程都有一个32位或者64位寻址的地址空间。就32为寻址来讲,尽管进程可以寻址4GB(232)的虚拟内存,但是这并不意味着进程就有权访问所有的虚拟内存。每个内存区域具有相关权限,如果一个进程访问了不在有效范围内的内存区域,或以不正确的方式访问了有效地址,内核就会终止该进程,并返回段错误。 通常,内存区域包含的内存对象如下:可执行文件代码的内存映射,称为代码段(text section);可执行文件的已初始化全局变量原创 2020-09-19 16:15:25 · 689 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(11)块I/O层
块I/O层1、块和扇区2、缓冲区和缓冲区头3、bio结构体 系统中能够随机访问固定大小数据片的硬件设备称为块设备,这些固定大小的数据片称为块。常见的块设备包括硬盘、软盘驱动器、蓝光光驱和闪存等。它们都是以安装文件系统的方式使用的——这也是块设备一般的访问方式。 字符设备仅仅需要控制一个当前位置,而块设备访问的位置必须能够在介质的不同区间前后移动。所以内核为块设备的管理提供了一个子系统,字符设备就没有了。1、块和扇区 块设备最小的可寻址单元——扇区。扇区大小必须是2的整数倍,常见的为512字节。原创 2020-09-14 20:31:30 · 482 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(10)虚拟文件系统VFS
@TOC 虚拟文件系统为用户空间提供了文件和文件系统的相关接口。通过虚拟文件系统,程序可以利用标准的UNIX系统调用对不同的文件进行读写操作,无需考虑文件存在于什么样的文件系统和存储介质中。 ...原创 2020-09-09 20:39:09 · 569 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(9)内存管理
内存管理1、页2、区3、页操作函数3.1、分配页3.2、释放页4、kmalloc()4.1、gfp_mask标志4.1.1行为修饰符4.1.2、区修饰符4.1.3、类型标志1、页 内核把物理页作为内存管理的基本单位。内存管理单元(MMU,管理内存并把虚拟地址转换为物理地址的硬件)通常以页为单位进行处理,按照页大小的单位来管理系统中的页表。 内核用struct page结构表示系统中的每个物理页,结构定义在 **<linux/mm_types.h>**中:/* page部分的部分成员原创 2020-08-28 15:11:18 · 1135 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(8)时间管理
时间管理1、节拍率:HZ1.1、高HZ的优势1.2、高HZ的劣势2、jiffies3、硬时钟和定时器3.1、实时时钟RTC3.2、时钟中断处理程序二级目录三级目录 内核中有大量的函数都是基于时间驱动的。例如对调度程序中的运行队列进行平衡调整或对屏幕进行刷新等。除此之外,内核还必须管理系统的运行时间以及当前如期和时间。1、节拍率:HZ 系统定时器的节拍率是通过宏HZ静态定义的,在 <asm/param.h> 中。1.1、高HZ的优势 高HZ的同时会有高频率的时钟中断会带来如下优点:原创 2020-08-13 15:53:22 · 470 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(7)内核同步方法
同步1、原子操作1.1、原子整型操作API函数1.2、原子位操作API2、自旋锁2.1、自旋锁操作API3、读写自旋锁1、原子操作 原子操作只能保证原子性,顺序性通过屏障指令来实现。 atomic_t类型用于32位原子操作,本质是一个被封装的int。64位类型使用atomic64_t,本质是一个被封装的long类型。1.1、原子整型操作API函数 定义在<asm/atomic.h>中。64位API为atomic64 开头。 API描述A原创 2020-08-11 10:31:38 · 394 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(6)下半部及推后执行的工作
下半部1、下半部1、下半部 下半部的工作主要是 ...原创 2020-08-06 10:54:29 · 746 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(5)中断
中断1、注册中断处理函数2、释放中断处理函数3、中断处理函数1、注册中断处理函数 如果设备使用中断,则相应的驱动程序就要注册一个是中断处理程序。 驱动程序通过request_irq() 函数向内核注册一个中断处理程序。intrequest_irq(unsigned int irq, irqreturn_t (*handler)(int, void *), unsigned long irqflags, const char * devname, void *dev_id)原创 2020-07-30 22:57:03 · 568 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(4)内核数据结构
内核数据结构链表队列映射链表 队列 映射 ...原创 2020-07-25 10:23:46 · 319 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(3)系统调用
目录1、系统调用1.1、系统调用号1.2、1、系统调用1.1、系统调用号 在Linux中,每个系统调用都被赋予一个系统调用号。当用户进程执行一个系统调用的时候,这个系统调用号就会用来指明到底是要调用哪个系统调用。进程不会提及系统调用的名称。 系统调用号一旦分配不能更改,即使删除了也不允许回收再利用。 :Linux有一个“未实现”系统调用 sys_ni_syscall() ,它除了返回 -ENOSYS 外不做其他操作。这个错误号专门针对无效的系统调用而设置。 内核记录了所有已注册过的系统原创 2020-07-23 16:34:42 · 232 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(2)进程调度
目录1、进程调度1.1、Linux调度算法1.2、I/O消耗型和处理器消耗型的进程1.3、进程优先级1、进程调度1.1、Linux调度算法 2.6.23内核版本开始采用以“公平调度” 为概念引入的调度程序——“完全公平调度算法”,简称CFS。1.2、I/O消耗型和处理器消耗型的进程 I/O消耗型进程 大多用于交互,类似鼠标、键盘、用户界面应用程序之类的。 处理器消耗型 进程会把大多时间用于执行程序上。 还有一些程序可以同时处于I/O消耗型和处理器消耗型 ,例如sshkeygen和MAT原创 2020-07-22 14:20:53 · 790 阅读 · 0 评论 -
Linux内核设计与实现——读书笔记(1)内核特点、进程和线程
1、内核开发的特点1.1、内核和应用编程的差异 主要差异包括以下几种:(1)、内核编程时既不能访问C库也不能访问标准的C头文件。(不过大多数C库函数在内核中已经实现<linux/xxx.h>)(2)、内核编程时必须使用GUN C。(3)、内核编程时缺乏像用户空间那样的内存保护机制。(4)、内核编程时难以执行浮点运算。(5)、内核给每个进程只有一个很小的定长堆栈。(6)、由于内核支持异步中断、抢占和SMP(对称多处理"Symmetrical Multi-Processing"简原创 2020-07-20 21:06:51 · 888 阅读 · 0 评论 -
linux 源码中__asm__ __volatile__作用
Linux源码中有很多使用__asm__ __volatile__的地方,如果在一些应用上需要较为高速的处理,最好用带汇编的函数,例如IO端口的in和out。链接: 格式说明参考.链接: 格式参考,有几个例子.链接: 汇编指令速查.链接: 内存屏障....原创 2020-07-08 23:31:06 · 372 阅读 · 0 评论