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

Linux内核设计实现》第3

Linux内核设计实现》第3版,英文版已经出版,中文版即将出版。...本书基于linux 2.6介绍了linux内核设计实现,涵盖了从核心内核系统的应用到内核设计实现等各方面内容,主要内容包括:进程管理、调度、时间管理和定时器、系统调用接口、内存寻址、内存管理、页缓存...本书详细描述了linux内核的主要子系统和特点,包括其设计实现和接口,既介绍理论也讨论具体应用,填补了linux内核理论和实践细节之间的鸿沟。...本版新增内容: ·增加一章专门描述内核数据结构 ·详细描述中断处理程序 ·扩充虚拟内存和内存分配的内容 ·调试linux内核的技巧 ·内核同步和锁机制的深度描述 ·提交内核补丁以及参与linux...就我们的经验,内核初学者(不是编程初学者)可以从这本书着手,对内核各个核心子系统有个整体把握,包括它们提供什么样的服务,为什么要提供这样的服务,又是怎样实现的。

1.8K20

linux内核设计实现

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

2.9K52
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

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

    1K20

    Linux内核设计思想】一、Linux内核相关概念

    什么是Linux内核 Linux系统的基础包括内核、C库、编译器、工具集和系统的基本工具,比如登陆程序和shell。当我们说到Linux这个词时,一般指的是Linux内核。...printf()函数在打印的时候通过一个文件指针来实现打印到某个文件的某个位置。...单内核内核内核是指把内核从整体上作为一个单独的大过程来实现,并同时运行在一个单独的地址空间。内核通常以单个静态的二进制文件形式存放在磁盘,所有内核服务都在这样一个大内核空间运行。...Linux内核是一个单内核,它运行在单独的内核地址空间,但是它汲取了微内核的精华,相对于Unix内核Linux内核有很多新的特性: Linux支持动态加载内核模块。...; 内核版本号开发者社区 Linux内核版本号总共包含三个数字,用 .

    14510

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

    具体的实现方式基本都是由操作系统将虚拟地址空间划分为两部分,一部分为内核空间,另一部分为用户空间。...比如 Intel 的 CPU 将特权等级分为 4 个级别:Ring0~Ring3。 其实 Linux 系统只使用了 Ring0 和 Ring3 两个运行级别(Windows 系统也是一样的)。...对于 Linux 来说,通过区分内核空间和用户空间的设计,隔离了操作系统代码(操作系统的代码要比应用程序的代码健壮很多)应用程序代码。...所以说,Linux 中每个进程有两个栈,分别用于用户态和内核态。 下图简明的描述了用户态内核态之间的转换: ?...其实,不光是 Linux,Windows 操作系统的设计也是大同小异。 总结 现代的操作系统大都通过内核空间和用户空间的设计来保护操作系统自身的安全性和稳定性。

    3.1K30

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

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

    3.2K40

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

    Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术。...本文首先简单描述这3种探测技术的原理区别,然后主要围绕其中的kprobe技术进行分析并给出一个简单的实例介绍如何利用kprobe进行内核函数探测,最后分析kprobe的实现过程(jprobe和kretprobe...内核源码:Linux-4.1.15 实验环境:CentOS(x86_64)、树莓派1b 2022年嵌入式开发想进互联网大厂,你技术过硬吗?...内核学习网站: Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈 二、kprobe原理 下面来介绍一下kprobe是如何工作的。...下面来分别介绍: 1、编写kprobe探测模块 内核提供了一个struct kprobe结构体以及一系列的内核API函数接口,用户可以通过这些接口自行实现探测回调函数并实现struct kprobe结构

    2.5K30

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

    Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术。...本文首先简单描述这3种探测技术的原理区别,然后主要围绕其中的kprobe技术进行分析并给出一个简单的实例介绍如何利用kprobe进行内核函数探测,最后分析kprobe的实现过程(jprobe和kretprobe...内核源码:Linux-4.1.15 实验环境:CentOS(x86_64)、树莓派1b 一、kprobes技术背景 开发人员在内核或者模块的调试过程中,往往会需要要知道其中的一些函数有无被调用、何时被调用...(因为kprobe不会从用户态触发),这里之所以要做这么一个判断是因为同arm定义特殊未处理指令回调函数不同,这里的do_int3要通用的多,并不是单独为kprobe所设计的。...五、总结 kprobes内核探测技术作为一种内核代码的跟踪及调试手段,开发人员可以动态的跟踪内核函数的执行,相较传统的添加内核日志等调试手段,它具有操作简单,使用灵活,对原始代码破坏小等多方面优势。

    5.8K21

    Linux内核分析应用3-进程管理

    本系列是对 陈莉君 老师 Linux 内核分析应用[1] 的学习记录。...进程创建 对于进程,线程,内核线程,内核使用唯一的数据结构task_struct来分别表示,也使用相同的调度算法对其进行调度....所有的系统调用进入内核只有一个入口,但进入以后就分道扬镳,各有各的服务历程;而分手是暂时的,最终还是会归到一处,do_fork就是它们的聚合点...."主战场"是就绪队列,核心是调度算法,实质是进程的切换 O(1)调度: 将单链表变为多链表来实现,从O(n)降低到了O(1) 机制策略分离 完全公平调度---CFS, 没有了时间片的概念,而是分配...更多可参阅第三版第七章 参考资料 [1] Linux 内核分析应用: https://next.xuetangx.com/course/XIYOU08091001441/1516763

    19250

    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结构体定义如下: ?...这里使用int3指令再次触发CPU3异常,并且异常出的地址已经不再是BREAKPOINT_INSTRUCTION了,所以会进入到kprobe_int3_handler的以下流程执行: ?...3、总结 jprobe探测技术基于kprobe实现,是kprobes三种探测技术中的第二种,内核开发人员可以用它来探测内核函数的调用以及调用时的入参值,使用非常方便。

    1.8K40

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

    Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术。...kprobes技术目前提供了3种探测手段:kprobe、jprobe和kretprobe,其中jprobe和kretprobe是基于kprobe实现的,他们分别应用于不同的探测场景中。...首先kprobe是最基本的探测方式,是实现后两种的基础,它可以在任意的位置放置探测点(就连函数内部的某条指令处也可以),它提供了探测点的调用前、调用后和内存访问出错3种回调方式,分别是pre_handler...下面来分别介绍: 1、编写kprobe探测模块 内核提供了一个struct kprobe结构体以及一系列的内核API函数接口,用户可以通过这些接口自行实现探测回调函数并实现struct kprobe结构...1.1、kprobe结构体API介绍 ? ?

    3.9K21

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

    Linux内核调试技术——kprobe使用实现(一) Linux内核调试技术——kprobe使用实现(二) Linux内核调试技术——kprobe使用实现(三) Linux内核调试技术——kprobe...使用实现(四) Linux内核调试技术——kprobe使用实现(五)-触发kprobe探测和回调 前文中,从register_kprobe函数注册kprobe的流程已经看到,用户指定的被探测函数入口地址处的指令已经被替换成架构相关的...本地中断在处理kprobe期间依然被禁止,同时调用user_mode函数确保本处理函数处理的int3中断是在内核态执行流程期间被触发的(因为kprobe不会从用户态触发),这里之所以要做这么一个判断是因为同...arm定义特殊未处理指令回调函数不同,这里的do_int3要通用的多,并不是单独为kprobe所设计的。...然后获取被探测指令的地址保存到addr中(对于int3中断,其被Intel定义为trap,那么异常发生时EIP寄存器内指向的为异常指令的后一条指令),同时会禁用内核抢占,注释中说明在reenter_kprobe

    2.3K60

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

    Linux内核调试技术——kprobe使用实现(一) Linux内核调试技术——kprobe使用实现(二) Linux内核调试技术——kprobe使用实现(三) Linux内核调试技术——kprobe...使用实现(四)--kprobe内核注册过程 kprobe探测模块调用register_kprobe向kprobe子系统注册一个kprobe探测点实例,代码路径kernel/kprobes.c ?...然后上锁并竟用内核抢占,开始进入地址有效性检测流程,首先判断以下3个条件,必须全部满足:1、被探测地址在内核的地址段中;2、地址不在kprobe的黑名单之中;3、不在jump lable保留的地址空间中...其中第一点比较好理解,函数实现如下: ?...直接调用text_poke函数将addr地址处的指令替换为BREAKPOINT_INSTRUCTION指令(机器码是0xCC),当正常执行流程执行到这条指令后就会触发int3中断,进而进入探测回调流程。

    2.6K20

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

    Linux内核调试技术——kprobe使用实现(一) Linux内核调试技术——kprobe使用实现(二) 对于kprobe功能的实现主要利用了内核中的两个功能特性:异常(尤其是int 3),单步执行...大概的流程: 1)在注册探测点的时候,对被探测函数的指令码进行替换,替换为int 3的指令码; 2)在执行int 3的异常执行中,通过通知链的方式调用kprobe的异常处理函数; 3)在kprobe的异常出来函数中...函数中继续分析,接下来的片段是kretprobe相关的代码,用来核对kretprobe_blacklist中定义的函数是否存在,这里kretprobe_blacklist_size变量默认为0;接下来初始化3个全局变量...,kprobes_all_disarmed用于表示是否启用kprobe机制,这里默认设置为启用;随后调用arch_init_kprobes进行架构相关的初始化,x86架构的实现为空,arm架构的实现如下...再次回到init_kprobes函数,接下来分别注册die和module的内核通知链kprobe_exceptions_nb和kprobe_module_nb: ? ?

    1.9K10

    《Redis设计实现》笔记3

    参考《Redis设计实现》 1.发布订阅 发布订阅指客户端可以订阅一个或多个频道,每当有其他客户端向频道发送消息时,频道的所有订阅者都会收到这条消息,如下: image.png 发布订阅分为两种...:频道的订阅退订、模式的订阅退订 image.png 1.1 频道的订阅退订 频道的订阅命令为subscribe,打开第一个终端,输完命令后会处于等待状态 127.0.0.1:6379> subscribe...(press Ctrl-C to quit) 1) "subscribe" 2) "news" 3) (integer) 1 1) "message" #这里开始是接收的消息 2) "news" 3)..."bbc news" 1) "message" 2) "news" 3) "\xe9\x9b\x85\xe8\x99\x8e news" 1) "message" 2) "news" 3) "bing...numpat (integer) 2 127.0.0.1:6379> 2.事务 实现事务(transaction)的命令包括multi、exec、watch,事务开启后必须要所有命令都执行完毕才会去执行其他客户端的命令请求

    19430

    基于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.6K10
    领券