首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux内核设计实现

一. linux内核简介 1. linux简介 1.1 unix特点 unix很简洁,仅提供几百个系统调用,并有非常明确设计目的 unix所有东西都当作文件对待,这种抽象使对数据和设备都通过一套相同系统调用接口进行...内核用C语言编写,移植能力很强 进程创建迅速,独特fork调用 提供了简洁但是稳定进程间通讯原语 1.2 unix和linux linux克隆unix,但不是unix linux借鉴了unix很多设计...,并且实现了 unixapi linux没有直接使用unix源代码,但完整表达了unix设计目标并保证编程接口一致 2....线程在linux实现 4.1 liunx线程概述 一组线程共享进程内内存地址空间,打开文件和其他资源 线程机制支持并发程序设计技术,多处理器上保证真正并行处理 linux实现线程机制非常独特...调度算法 3.1 概述 linux调度程序定义kernel/sched.c 2.5版本内核重写调度算法,和以前版本区别很大,实现以下目标 充分实现O(1)调度,不管多少进程或什么输入,每个算法能在恒定时间内完成

2.8K52

Linux内核设计实现》第3版

Linux内核设计实现》第3版,英文版已经出版,中文版即将出版。...本书基于linux 2.6介绍了linux内核设计实现,涵盖了从核心内核系统应用到内核设计实现等各方面内容,主要内容包括:进程管理、调度、时间管理和定时器、系统调用接口、内存寻址、内存管理、页缓存...本书详细描述了linux内核主要子系统和特点,包括其设计实现和接口,既介绍理论也讨论具体应用,填补了linux内核理论和实践细节之间鸿沟。...能够带领读者快速走进linux内核世界,真正开发内核代码。     如果你是一名linux内核爱好者,本书内容可以帮助你大显身手。如果你是一名普通程序员,本书内容将会拓宽你编程思路。...就我们经验,内核初学者(不是编程初学者)可以从这本书着手,对内核各个核心子系统有个整体把握,包括它们提供什么样服务,为什么要提供这样服务,又是怎样实现

1.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

读书笔记|Linux内核设计实现

Linux内核设计原理进行了细致说明,也有具体实现部分介绍,结合源码能很好理解Linux内核; 在简单翻了一遍之后,带着如下几个疑问,整理了下相关知识点: 1、内核是什么时候加载运行; 2、...根据《Linux内核设计实现》说明,CPU在某个任何特定时间点上活动必然概括为下列三种之一: 运行于用户空间,执行用户进程; 运行于内核空间,处于进程上下文,代表某个特定进程执行; 运行于内核空间...Linux设备驱动作为一个linux内核模块存在,模块都有2个接口函数,模块初始化函数和模块退出函数。 上面提到驱动程序注册。一般是由模块初始化函数来实现。...()、exit(); Linux进程创建时使用到写时拷贝技术(copy-on-write)页实现。...(2)存储微页转换表。 MMU/Cache line CPU L1/L2高速缓存 页高速缓存:Linux内核实现磁盘缓存,主要用来减少对磁盘I/O操作。

96720

Linux内核设计实现(进程管理、进程调度、系统调用)

1、虚拟处理器、虚拟内存:让进程感觉自己拥有所有 image.png 2、进程上限,cat /proc/sys/kernel/pid_max 3、进程五种状态 image.png set_task_state...(task,state); 4、每个进程都有一个父进程 image.png 5、进程创建:fork() exec() image.png 6、写时拷贝COW image.png 7、线程和进程区别不大...image.png 8、孤儿进程,父进程先关掉,再设置一个父进程,如果没有,设置init image.png 9、2.6内核后进程调度算法CFS:完全公平调度算法 10、进程分为IO消耗型和处理器消耗型...image.png image.png 13、调度相关系统调用 image.png 14、系统调用在用户空间进程和硬件设备之间添加了一个中间层 image.png 15、中断 image.png...18、加锁 image.png 19、定时器时间管理 20、slab?? 21、虚拟文件系统:VFS 22、IO调度 23、页高速缓存和页回写

1.4K10

Linux 内核空间用户空间实现分析

具体实现方式基本都是由操作系统将虚拟地址空间划分为两部分,一部分为内核空间,另一部分为用户空间。...为什么需要区分内核空间用户空间 在 CPU 所有指令中,有些指令是非常危险,如果错用,将导致系统崩溃,比如清内存、设置时钟等。...对于 Linux 来说,通过区分内核空间和用户空间设计,隔离了操作系统代码(操作系统代码要比应用程序代码健壮很多)应用程序代码。...所以说,Linux 中每个进程有两个栈,分别用于用户态和内核态。 下图简明描述了用户态内核态之间转换: ?...其实,不光是 Linux,Windows 操作系统设计也是大同小异。 总结 现代操作系统大都通过内核空间和用户空间设计来保护操作系统自身安全性和稳定性。

3K30

实时Linux内核实现

目前Linux内核主线不支持软实时,而是使用下面2个仓库存放和Linux内核主线版本对应实时内核源代码。...(3)如果使用内核线程执行中断处理函数,那么原来禁止硬中断临界区不需要禁止硬中断,为了兼顾非实时内核和实时内核,引入本地锁,非实时内核把本地锁映射到禁止内核抢占和禁止硬中断,实时内核把本地锁映射到基于实时互斥锁实现自旋锁...(3)在实时内核中大多数禁止内核抢占临界区可以变成可抢占,为了兼顾非实时内核和实时内核,引入本地锁,非实时内核把本地锁映射到禁止内核抢占和禁止硬中断,实时内核把本地锁映射到使用实时互斥锁实现自旋锁...在非实时内核中,rwlock和raw_rwlock完全相同。 选择rwlock和raw_rwlock原则,选择spinlock和raw_spinlock原则相同。...https://mp.weixin.qq.com/s/U9okzKGuhKlSZyeKmI4Q4g (10)Linux硬实时和Preempt-RT补丁(中断、软中断、调度、内存调试),https://

6K40

Linux内核调试利器|kprobe 原理实现

在《Linux 内核调试利器 | kprobe 使用》一文中,我们介绍过怎么使用 kprobe 来追踪内核函数,而本文将会介绍 kprobe 原理和实现。...kprobe模块哈希表 我们在《Linux 内核调试利器 | kprobe 使用》一文中介绍过,一个 kprobe 模块是由一个 struct kprobe 结构来描述。...注册 kprobe 实例 在《Linux 内核调试利器 | kprobe 使用》一文中介绍过,编写好 kprobe 模块需要通过调用 register_kprobe() 函数来注册到内核。...为了解决这个问题,Linux 内核使用单步调试模式来处理这种情况。...总结 本文主要介绍了 kprobe 原理实现,正如本文开始时所说,kprobe 机制细节很多,所以本文不可能对所有细节进行分析。

2.2K40

基于Linux内核时间轮算法设计实现【附代码】

因此需要一种更高效地管理定时器数据结构和算法,这里结合Linux内核中基于时间轮定时器管理器具体实现,介绍一种基于时间轮定时器管理算法。图1为时间轮基本结构: ?...; 3)如果t-ts/si>= 8(当然要小于64,否则又溢出),则以t-ts/si高3位作为索引加入外轮; 二级时间轮检查时间到算法单机时间轮类似,不同地方就是当内轮所有时间槽都时间到后,要把外轮时间槽链表迁移到内轮...以上面的例子为例,如果二级时间轮都是3位二进制编码(8个时间槽),那么总共可以管理时间范围为0 ~ 63,即64种Timeout定时器。 Linux内核采用多级时间轮。...事实上,它实现是一个很好空间换时间软件算法。参考Linux实现,具体代码如下: 首先定义如下宏: ? 2....基于Linux内核时间轮实现代码,可以在应用程序层面实现一个基于时间轮管理器。部分代码如下所示: ? ? ? ? TimerManager 类定义如下: ? ?

3.3K10

Linux内核调试技术——kprobe使用实现

Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计一种轻量级内核调试技术。...本文首先简单描述这3种探测技术原理区别,然后主要围绕其中kprobe技术进行分析并给出一个简单实例介绍如何利用kprobe进行内核函数探测,最后分析kprobe实现过程(jprobe和kretprobe...腾讯T6-9首发“Linux内核源码嵌入式开发进阶笔记”,差距不止一点点哦 一、kprobes技术背景 开发人员在内核或者模块调试过程中,往往会需要要知道其中一些函数有无被调用、何时被调用、执行是否正确以及函数入参和返回值是什么等等...内核学习网站: Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈 二、kprobe原理 下面来介绍一下kprobe是如何工作。...int enable_kprobe(struct kprobe *kp) //恢复指定探测点探测 1.2、用例kprobe_example.c分析演示 该用例函数非常简单,它实现内核函数

2.3K30

Linux内核调试技术——kprobe使用实现

Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计一种轻量级内核调试技术。...本文首先简单描述这3种探测技术原理区别,然后主要围绕其中kprobe技术进行分析并给出一个简单实例介绍如何利用kprobe进行内核函数探测,最后分析kprobe实现过程(jprobe和kretprobe...内核源码:Linux-4.1.15 实验环境:CentOS(x86_64)、树莓派1b 一、kprobes技术背景 开发人员在内核或者模块调试过程中,往往会需要要知道其中一些函数有无被调用、何时被调用...int enable_kprobe(struct kprobe *kp) //恢复指定探测点探测 1.2、用例kprobe_example.c分析演示 该用例函数非常简单,它实现内核函数...五、总结 kprobes内核探测技术作为一种内核代码跟踪及调试手段,开发人员可以动态跟踪内核函数执行,相较传统添加内核日志等调试手段,它具有操作简单,使用灵活,对原始代码破坏小等多方面优势。

5.4K21

Linux内核调试技术——jprobe使用实现(六)

1、jprobe使用实例 使用jprobe探测函数入参值,需要编写内核模块。...同kprobe一样,内核同样提供了jprobe实例程序jprobe_example.c(位于sample/kprobes目录),该程序实现了探测do_fork函数入参功能,用户可以以它为模板来探测其他函数...在分析jprobe_example.c之前先熟悉一下jprobe基本结构API接口。 1.1、jprobe结构体API介绍 struct jprobe结构体定义如下: ?...2、jprobe实现分析 jpeobe实现基于kprobe,在其基础之上分析它实现,述主要包括jprobe注册流程和触发探测流程,涉及kprobe部分不再详细描。...3、总结 jprobe探测技术基于kprobe实现,是kprobes三种探测技术中第二种,内核开发人员可以用它来探测内核函数调用以及调用时入参值,使用非常方便。

1.6K40

Linux内核调试技术——kprobe使用实现(一)

Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计一种轻量级内核调试技术。...而利用kprobes技术,用户可以定义自己回调函数,然后在内核或者模块中几乎所有的函数中(有些函数是不可探测,例如kprobes自身相关实现函数,后文会有详细说明)动态插入探测点,当内核执行流程执行到指定探测函数时...由于gcc可能会自动将某些函数优化为内联函数,因此可能无法达到用户预期探测效果; 4、一个探测点回调函数可能会修改被探测函数运行上下文,例如通过修改内核数据结构或者保存struct pt_regs...下面来分别介绍: 1、编写kprobe探测模块 内核提供了一个struct kprobe结构体以及一系列内核API函数接口,用户可以通过这些接口自行实现探测回调函数并实现struct kprobe结构...int enable_kprobe(struct kprobe *kp) //恢复指定探测点探测 1.2、用例kprobe_example.c分析演示 该用例函数非常简单,它实现内核函数

3.5K21

Linux内核调试技术——kprobe使用实现(五)

Linux内核调试技术——kprobe使用实现(一) Linux内核调试技术——kprobe使用实现(二) Linux内核调试技术——kprobe使用实现(三) Linux内核调试技术——kprobe...使用实现(四) Linux内核调试技术——kprobe使用实现(五)-触发kprobe探测和回调 前文中,从register_kprobe函数注册kprobe流程已经看到,用户指定被探测函数入口地址处指令已经被替换成架构相关...由于不同架构实现存在差别,下面来分析x86架构实现: ? ?...arm定义特殊未处理指令回调函数不同,这里do_int3要通用多,并不是单独为kprobe所设计。...和单步执行时会有选择重新开启内核抢占。

2.1K60

Linux内核调试技术——kprobe使用实现(三)

Linux内核调试技术——kprobe使用实现(一) Linux内核调试技术——kprobe使用实现(二) 对于kprobe功能实现主要利用了内核两个功能特性:异常(尤其是int 3),单步执行...; 6)在单步异常处理中,清除单步标志,执行post_handler流程,并最终返回; 在了解了kprobe基本原理和使用后,现在从源码角度来详细分析它是如何实现。...架构实现为空,arm架构实现如下: ?...再次回到init_kprobes函数,接下来分别注册die和module内核通知链kprobe_exceptions_nb和kprobe_module_nb: ? ?...会调用kprobefault回调函数,而arm则为空);注册module notify回调kprobes_module_callback函数作用是若当某个内核模块发生卸载操作时有必要检测并移除注册到该模块函数探测点

1.7K10

Linux内核调试技术——kprobe使用实现(二)

Linux内核调试技术——kprobe使用实现(一) 在上一篇文章中介绍了内核加载方式使用kprobe方法,现在介绍一下使用debugfs接口使用kprobe方法。...kprobes//enabled 过滤接口: /sys/kernel/debug/tracing/events/kprobes//filter 其中配置属性文件用于用户配置要探测函数以及探测方式参数...下面来看看各个属性文件常用操作方式(其中具体格式和参数方面的细节可以查看内核Documentation/trace/kprobetrace.txt文件,描述非常详细): 1、kprobe_events...,第二个是进程PID,触发kprobe时候记录。...FUNCTION就是触发那个kprobe名字,后面括号里是触发时候代码位置,如果是“r”类型kprobe,会显示返回到了什么代码位置。代码位置中行号是反汇编对应行号。

4.6K30
领券