printk浅析

news2024/9/22 5:25:26
  • 内核printk原理介绍 - 知乎 (zhihu.com)

  • 34.Linux-printk分析、使用prink调试驱动 (bbsmax.com)

  • 【原创】计算机自制操作系统(Linux篇)五:内核开发之万丈高楼从地起---printk(理清pintf/vprintf;sprintf/vsprintf ;fprintf/vfprintf) - 知乎 (zhihu.com)

  • printk流程分析 - 知乎 (zhihu.com)

  • va_list、va_start和va_end使用 - insistYuan - 博客园 (cnblogs.com)

  • asmlinkage-SodaGreen_wyj-ChinaUnix博客

  • (34条消息) kernel里__printf(a, b)说明_茫茫大士的博客-CSDN博客_kernel __printf(2, 3)

  • Printk Index — The Linux Kernel documentation

  • (34条消息) 宋宝华:为了不忘却的纪念,评Linux 5.13内核_宋宝华的博客-CSDN博客

  • (34条消息) linux5.2内核的ringbuffer(无锁环形缓冲区)原理实现与源码分析(上)_你听不到的博客-CSDN博客_linux内核ringbuf实现

  • Lockless Ring Buffer Design — The Linux Kernel documentation

基于linux 6.1.12

  1. files

  • /kernel/printk/printk.c

  • /include/linux/printk.h

  • /kernel/printk/printk_ringbuffer.c

  • /kernel/printk/printk_ringbuffer.h

  1. data structure

3. overall call flow

3.1 write flow

(1)desc_reserve:从prb_desc数组中获取一个空闲的entry,若没有空闲的entry,则覆盖最老的entry。分配完成后将该描述符状态设置为desc_reserved

(2)设置该条log的seq序号

(3)data_alloc:从ring buffer中分配一段用于保存新log的空间,若空闲空间不足,则覆盖掉最老的数据,直到空间足够为止

(4)log data copy:将需要写入的数据拷贝到从log buffer中分配的空间中

(5)_prb_commit:将prb_desc的状态更新为desc_committed

(6)desc_make_final:将prb_desc的状态更新为desc_finalized,该操作后log写入完成且可被读取。

3.2 read flow

读取log时以seq序号为参数,并调用prb_read读取该seq对应的log,若读取失败则调用prb_first_seq获取该seq之后第一条可读的log,并重新读取。

(1)desc_read_finalized_seq:读取该条log对应的状态,若状态合法,则执行下面的log数据和信息读取操作,否则表明该条log已被覆盖、正在被修改或其描述符是空闲的。数据读取完成后,再次执行本函数重新读取其状态和seq号,若状态合法且seq号未变,表明在读的过程中,数据未被写操作修改。否则,表明在读的过程中,该条log的信息或数据已被log写接口覆盖修改了。若整个读流程成功,则数据读取完成,否则调用prb_first_seq获取下一条可读的log

(2)prb_first_seq:由于buffer中尾节点是最老的log数据,因此若待读取数据比尾结点数据还老,则表明该数据已被覆盖,将尾结点作为first seq读取即可。若该节点合法,但数据读取失败,则将下一个节点作为first seq读取。若缓冲区中无有效数据,则返回错误

4. 设计思想

  1. 如何通过细化数据,分而治之,通过添加 prb_desc_ring,以及采用 atomic_t 变量等方法来去除锁的消耗。

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

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

相关文章

自抗扰控制ADRC之扩张观测器

目录 前言 1. 被控对象(被观测对象) 2.非线性观测器 2.1仿真分析 2.2仿真模型 2.3仿真结果 3.线性观测器 3.1仿真模型 3.2仿真结果 4.总结和学习问题 前言 什么叫观测器?为什么该类观测称为扩张观测器? :观测器可以理解为所观测…

组合数学原理与例题

目录 一、前言 二、计数原理 1、加法原理 2、分割立方体(lanqiaoOJ题号1620) 3、乘法原理 4、挑选子串(lanqiaoOJ题号1621) 5、糊涂人寄信(lanqiaoOJ题号1622) 6、战斗吧N皇后(lanqiaoO…

依次判断数组1对中的每个元素是否小于等于数组2中对应位置的每个元素numpy.less_equal()

【小白从小学Python、C、Java】【计算机等级考试500强双证书】 【Python-数据分析】 依次判断数组1对中的每个元素是否 小于等于数组2中对应位置的每个元素 numpy.less_equal() [太阳]选择题 以下错误的一项是? import numpy as np a np.array([1,2,3]) b np.array([1,3,2]) …

kubernetes 核心技术-Pod(1)

概述: 首先要知道 Pod 不是容器! 一、 基本概念 Pod 是 k8s 系统中可以创建和管理的最小单元。k8s 不会直接处理容器,而是podpod 包含多个容器(一组容器的集合)一个pod中容器共享网络命名空间pod是短暂的(生命周期) 二、Pod存在的意义 创建…

数据结构与算法总结整理(超级全的哦!)

数据结构与算法基础大O表示法时间复杂度大O表示法时间复杂度排序:最坏时间复杂度时间复杂度的几条基本计算规则内存工作原理什么是内存内存主要分为三种存储器随机存储器(RAM)只读存储器(ROM)高速缓存(Cach…

玄子Share-BCSP助学手册-JAVA开发

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2gPyAnt-1676810001349)(./assets/%E7%8E%84%E5%AD%90Share%E4%B8%89%E7%89%88.jpg)] 玄子Share-BCSP助学手册-JAVA开发 前言: 此文为玄子,复习BCSP一二期后整理的文章&#x…

多任务学习综述Multi-Task Deep Recommender Systems

Multi-Task Deep Recommender Systems: A Survey 最近看到一篇多任务学习的综述,觉得总结的不错,记录一下。 1. 简介 推荐系统天然具有多任务学习的需求,以视频推荐为例,用户具有点赞、评论、转发等不同的行为。多任务学习相比…

“生成音乐“ 【循环神经网络】

前言 本文介绍循环神经网络的进阶案例,通过搭建和训练一个模型,来对钢琴的音符进行预测,通过重复调用模型来进而生成一段音乐; 使用到Maestro的钢琴MIDI文件 ,每个文件由不同音符组成,音符用三个量来表示…

千锋教育嵌入式物联网教程之系统编程篇学习-04

目录 alarm函数 raise函数 abort函数 pause函数 转折点 signal函数 可重入函数 信号集 sigemptyset() sigfillset sigismember()​ sigaddset()​ sigdelset()​ 代码讲解 信号阻塞集 sigprocmask()​ alarm函数 相当于一个闹钟,默认动作是终止调用alarm函数的进…

HSCSEC 2023 个人练习

😋 大家好,我是YAy_17,是一枚爱好网安的小白。本人水平有限,欢迎各位大佬指点,欢迎关注😁,一起学习 💗 ,一起进步 ⭐ 。⭐ 此后如竟没有炬火,我便是唯一的光。…

聊一聊国际化i18n

i18n 概述i18n 是国际化的缩写,其完整的写法是 Internationalization,翻译为国际化。国际化是指在软件开发中对于不同语言和地区的支持。目的是为了让一款软件可以在不同的语言和地区环境下正常运行,使其适应全球各地的用户。这通常包括对语言…

Simulink 自动代码生成电机控制:低阶滑模观测器仿真实现及生成代码在开发板上运行

目录 理论参考 仿真实现 运行演示 总结 前段实时搭过高阶的滑模观测器,相比于高阶的,普通的滑模观测器计算量小更适合计算能力低的MCU,这里参考Microchip的16位MCU所使用的观测器,通过Simulink建模仿真实现系统控制&#xff0…

【查看多个长图】如何方便地在安卓手机上查看多个长图?如何更便捷地浏览长图合集

经常我会看到有些知识分享是通过长图形式进行。 往往在手机本地的图片浏览器中不能很方便地查看很多长图(能放大,但是横向滑动时,无法保证同样的放缩比例浏览同一个文件夹)。 我推荐下面一个APP和曲折解决办法。 1、perfect vi…

Error: Timeout trying to fetch resolutions from npm

总目录: 如何使用VSCode插件codesight扫描出前端项目的风险依赖包并借助 npm-force-resolutions 修复之?blackduck issue fix 文章目录问题描述【最终解决】我搜索到的解决方案npmjs 该依赖各版本列表及对应的被下载次数github issue 说降级到0.0.3就可以…

(十五)、从插件市场引入问题反馈页面【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】

1,插件市场问题反馈页面 插件市场链接 dloud插件插件市场中找到问题反馈插件: 首先确保登录了dcloud账号。 使用hbuilderX导入插件到自己项目中。 选择合并导入。 从插件市场导入意见反馈页面的路径地址如下: 2,点击跳转到…

论文阅读_AlphaGo_Zero

论文信息 name_en: Mastering the game of Go without human knowledge name_ch: 在没有人类知识的情况下掌握围棋游戏 paper_addr: http://www.nature.com/articles/nature24270 doi: 10.1038/nature24270 date_publish: 2017-10-01 tags: [‘深度学习’,‘强化学习’] if: 6…

【C++封装】C++面向对象模型

文章内容如下: 1)成员变量和函数的存储 2)this指针 3)const修饰成员函数 4)有元 一。成员变量和函数的存储 C实现了封装,数据(-变量)和处理数据的操作(-函数)是分开存储的,C中的非静态数据…

SpringBoot Notes

文章目录1 SpringBootWeb快速入门1.1Spring官网1.2 Web分析2. HTTP协议2.1 HTTP介绍34 SpringBootWeb请求响应5 响应6 分层解耦6.1 三层架构6.1.1 三层架构介绍6.1.2 基于三层架构的程序执行流程:6.1.3 代码拆分6.2 分层解耦6.2.1 内聚、耦合6.2.2 解耦思路6.3 IOC&…

[LeetCode周赛复盘] 第 333 场周赛20230219

[LeetCode周赛复盘] 第 333 场周赛20230219 一、本周周赛总结二、 [Easy] 6362. 合并两个二维数组 - 求和法1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6365. 将整数减少到零需要的最少操作数1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6364. 无平方子集计数1. 题目描…

操作系统闲谈08——系统调用、中断、异常

操作系统闲谈08——系统调用、中断、异常 一、系统调用 IDT - GDT - 系统调用表 找到对应系统调用号将系统调用号以及一些现场信息存入寄存器eax中(ebx、ecx、edx存放其他信息),然后触发软中断(x86中,0x80为中断号&…