自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 Linux DRM的基本框架和原理

Linux内核有一个名为fbdev(一个Linux子系统,用于在计算机显示器上显示图形,通常在系统控制台上)的API,用于管理图形适配器()的帧缓冲区,但它无法处理现代基于GPU的3D加速视频硬件的需求。如下图所示:这些设备通常需要在自己的内存中设置和管理命令队列(command queue),以将命令分派到GPU,并且还需要管理该内存中的缓冲区和可用空间。最初,用户空间程序(例如X Server)直接管理这些资源,但它们通常表现得好像它们是唯一可以访问这些资源的程序。

2024-07-26 17:11:05 1739

原创 将git默认的编辑器设置为vim

命令来设置 Vim 为默认的编辑器。这个命令可以在你的仓库级别(只影响当前仓库)、全局级别(影响所有仓库)或系统级别(影响所有用户)上设置。如下,很多linux发行版,未加修改的情况下,git的默认编辑器使用起来不太方便。这会影响所有需要编辑器的程序,包括 Git。另一种设置默认编辑器的方法是设置环境变量。文件中,然后重新加载配置文件

2024-07-24 11:06:22 545

原创 fiq-debugger

fiq-debugger是一种集成到内核中的系统调试手段,主要用于Rockchip系列处理器的系统调试。

2024-07-19 09:58:38 733

原创 vim+cscope+ctags

vim+ctags+cscope使用简单说明

2024-07-15 11:13:33 420

原创 虚拟化技术——内存虚拟化

换句话说,就是VMM 负责将MMU进行虚拟化,为guest OS操作系统提供一段连续的“物理”地址空间,而操作系统本身不会意识到这种变化,仍能够将虚拟机虚拟地址(Guest Virtual Address,GVA)映射到虚拟机物理地址(Guest Physical Address,GPA),但是需要VMM将虚拟机物理地址映射到物理机物理地址(Host Physical Address,HPA)。因此,原先由MMU完成的线性地址到物理地址的映射已经不能满足,必须由VMM接入来完成这三层地址的映射维护和转换。

2024-05-21 16:36:04 907

原创 TLB及其工作原理

TLB是地址转换后援缓冲器(Translation Lookaside Buffer)的简称,也可简称为“快表”。首先,MMU的作用是把虚拟地址转换为物理地址。虚拟地址和物理地址的映射关系存储在页表中,而页表又是分级的。64位系统一般都是3~5级,常见的配置是4级页表。在硬件上会有一个叫做页表基地址寄存器,MMU就是根据页表基地址寄存器一路查到PTE,最终找到物理地址(PTE页表中存储物理地址)。

2024-05-21 15:54:41 2511

转载 一口气看完45个寄存器,CPU核心技术大揭秘

寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果以及一些CPU运行需要的信息。x86架构CPU走的是复杂指令集(CISC)路线,提供了丰富的指令来实现强大的功能,与此同时也提供了大量寄存器来辅助功能实现。通用寄存器标志寄存器指令寄存器段寄存器控制寄存器调试寄存器描述符寄存器任务寄存器MSR寄存器。

2024-05-21 09:38:28 197

原创 虚拟化技术——cpu虚拟化

当虚拟机运行时,CPU虚拟化技术通过虚拟化处理器指令集、内存管理单元(Memory Management Unit, MMU)以及设备访问等方面的技术,将虚拟机对处理器、内存和其他硬件资源的请求转化为对物理计算机上相应资源的访问。在虚拟化的平台上,虚拟机(guest VM)所使用的多个虚拟CPU(简称vCPU)可能是共享同一个物理CPU(简称pCPU)的。VMM负责vCPU的调度,当一个vCPU获得pCPU的使用权后,基于该vCPU运行的guest OS就可以调度OS中的各个线程/进程。

2024-05-20 09:07:51 3095

原创 CPU Rings、Privilege(特权)和Protection(保护)

在Intel x86计算机中,应用程序的能力是有限的,只有操作系统代码才能执行某些任务,那它们是如何实现和工作的呢?本文将从操作系统和CPU一起合作来限制用户模式下的程序所能做的事情进行分析和介绍,即CPU Rings、Privilege(特权)和Protection(保护)的介绍。

2024-05-20 09:06:37 720

原创 虚拟化技术——基础知识之Hypervisor

在计算机科学中,虚拟化技术(Virtualization)是一种资源管理(优化)技术,它将计算机的各种物理资源(例如网络、存储、内存、CPU、GPU等)进行抽象、转换,呈现出可供分割并且任意组合为一个或者多个计算机的配置环境。因此,虚拟化技术打破了计算机硬件不可切割的障碍,使用户能够更好的配置和应用计算机硬件资源。

2024-05-20 09:04:36 2661

原创 linux内核中的电源管理

linux中为了解决非必要功耗的消耗,提供了多种电源管理方式,诸如休眠(suspend)、关机(power off和shutdown)、复位(reboot和reset)。为了解决运行时不必要的功耗消耗,linux提供了runtime pm、cpu/device dvfs、cpu hotplug、cpu idle、clock gate、power gate、reset等电源管理的机制。为了解决运行时电源管理对性能的影响,linux提供了pm qos的功能,用于平衡性能与功耗,这样既能降低功耗,又不影响性能。

2023-11-08 14:00:18 1207

原创 linux中的hyperv特性

启用时,它提供HV_X64_MSR_RENLIGHTENMENT_CONTROL(0x40000106)、HV_X6_4_MSR_TSC_EMULATION_CONTROL(0x400001017)和HV_X6_4 _MSR_TSC _EMULATION_STATUS(0x400000108)MSR,允许guest 在TSC频率更改时得到通知(仅在迁移时发生),并继续使用旧频率(通过虚拟机监控程序中的仿真),直到准备切换到新频率。SynIC通过MSRs HV_X64_MSR_CONTROL进行控制。

2023-11-08 13:28:03 397

原创 linux内核中的sysrq

在sysrq可以使用的情况下,都可以通过以下节点来实现sysrq的调试功能,这里将始终允许(具有管理员权限的用户)通过`/proc/sysrq触发器`调用任何操作。``0``-`9``设置控制台日志级别,控制哪些内核消息将打印到控制台。``q ``将转储所有已武装hrtimers(但不是常规timer_list timers)的每个CPU列表以及有关所有时钟事件设备的详细信息。``x``由ppc/powerpc平台上的xmon接口使用。``h``将显示帮助(实际上,除了此处列出的任何其他键都将显示帮助。

2023-10-25 17:24:24 357

原创 linux内核中的内存管理——buddy system伙伴系统

伙伴系统(buddy system)是操作系统内核中用于管理物理内存的一种算法。所谓伙伴指的是物理内存中地址连续的页块之间互为伙伴。若两个页面块之间可以互为伙伴,则两个页面块可以合并为更大的一个页面块。

2023-10-23 18:07:15 1147

原创 linux内核中的内存管理——综述

Linux内存管理是指对系统内存的分配、释放、映射、管理、交换、压缩等一系列操作的管理。在Linux中,内存被划分为多个区域,包括内核空间、用户空间、缓存、交换分区等,每个区域有不同的作用。Linux内存管理的目标是在保证系统的稳定和可靠性的同时,最大限度地利用可用内存。内存管理是计算机系统中负责管理系统内存资源的一种机制,主要包括内存分配、内存释放、内存映射和虚拟内存管理等方面。它是计算机系统中非常重要的一个组成部分,能够有效地提高系统的资源利用率和应用程序的性能。

2023-10-23 10:52:27 290

原创 csdn每日一练[凑数][]

先数组第一个元素和第二个元素求最小公倍数①,结果①和第三个元素求最小公倍数②,结果②和第四个元素求最小公倍数③...以此类推,直到数组遍历完,我们就得到了数组的最小公倍数。遍历2到n之间的所有数时,由于不是素数的元素已经被前面的元素消除掉了,所以不会存在n%i == 0时i不为素数的情况,例如:当n=20时,如下。对于整数n,其由几个素数计算得来,遍历2到n之间的所有数,一旦遇到能够被n整除(即n%i == 0)此时就计算n/i由几个素数计算而来。只要把5乘以2,2次以后就可以得到20。

2023-10-19 17:14:40 121

原创 c语言每日一练-[字符串全排列][小股炒股][最小H值]

对K个不同字符的全排列组成的数组, 面试官从中随机拿走了一个, 剩下的数组作为输入, 请帮忙找出这个被拿走的字符串?比如[“ABC”, “ACB”, “BAC”, “CAB”, “CBA”] 返回 “BCA”第一行输入整数n,表示给定n个字符串。(n == x!-1,2<=x<=10) 以下n行每行输入一个字符串。输出全排列缺少的字符串。5ABCACBBACCABCBABCA1.第一个问题:因为输入时输入了当前输入的元素个数,以及缺失了部分元素的部分全排列元素。

2023-10-19 08:59:05 75

原创 汇编语言过程

过程可以非正式地定义为:由返回语句结束的已命名的语句块。过程用 PROC 和 ENDP 伪指令来定义,并且必须为其分配一个名字(有效标识符)。到目前为止,所有编写的程序都包含了一个名为 main 的过程,例如:main PROCmain ENDP当在程序启动过程之外创建一个过程时,就用 RET 指令来结束它。RET 强制 CPU 返回到该过程被调用的位置:ret链接库是一种文件,包含了已经汇编为机器代码的过程(子程序)。链接库开始时是一个或多个源文件,这些文件再被汇编为目标文件。

2023-10-17 09:45:31 72

原创 c语言算法编程练习

关于十大算法的介绍参考链接,本文直接用c语言实现十大经典算法。

2023-10-17 09:44:15 48

原创 十大经典排序算法

十大排序算法可以说是每个程序员都必须得掌握的了,花了一天的时间把代码实现且整理了一下,为了方便大家学习,我把它整理成一篇文章,每种算法会有简单的算法思想描述,为了方便大家理解,我还找来了动图演示;这还不够,我还附上了对应的优质文章,看完不懂你来砍我,如果不想砍我就给我来个好看。用一张图汇总了10大排序算法的性质。

2023-10-16 15:32:06 45

原创 编程练习——shell脚本实现

echo "无效的输入!请输入一个在1到100之间的数字。read -p "请输入你的猜测(1-100):" GUESS。echo "恭喜你,猜对了!目标数字就是 $TARGET。echo "无效的输入!# 生成一个1到100之间的随机数。echo "欢迎来到猜数字游戏!echo "太小了!echo "太大了!# 检查猜测是否合法。# 初始化用户的猜测。

2023-10-16 14:15:55 905 1

原创 汇编语言基础

汇编器伪指令的一个重要功能是定义程序区段,也称为段 (segment)。程序中的段具有不同的作用。如下面的例子,一个段可以用于定义变量,并用 .DATA 伪指令进行标识:.data.CODE 伪指令标识的程序区段包含了可执行的指令:.code.STACK 伪指令标识的程序区段定义了运行时堆栈,并设置了其大小:在调试时可以自定义调试接口。

2023-10-16 14:00:38 1433 1

原创 x86处理器架构——计算机I/O输入输出系统

由于计算机游戏与内存和 I/O 有着非常密切的关系,因此,它们推动计算机达到其最大性能。善于游戏编程的程序员通常很了解视频和音频硬件,并会优化代码的硬件特性。

2023-10-16 13:49:24 63 1

原创 x86处理器架构——x86计算机组件

本文首先通过检查典型主板配置以及围绕 CPU 的芯片组来了解 x86 如何与其他组件的集成。然后讨论内存、I/O 端口和通用设备接口。最后说明程序怎样利用系统硬件、固件,并调用操作系统函数来实现不同访问层次的 I/O 操作。

2023-10-16 13:47:46 236 1

原创 x86处理器架构——64位x86-64处理器架构

重点关注所有使用 x86-64 指令集的 64 位处理器的基本架构细节。这些处理器包括 Intel 64 和 AMD64 处理器系列。指令集是已讨论的 x86 指令集的 64 位扩展。以下为一些基本特征:1) 向后兼容 x86 指令集。2) 地址长度为 64 位,虚拟地址空间为 2 64 字节。按照当前芯片的实现情况,只能使用地址的低 48 位。3) 可以使用 64 位通用寄存器,允许指令具有 64 位整数操作数。4) 比 x86 多了 8 个通用寄存器。

2023-10-16 13:47:08 518 1

原创 x86处理器架构——32位x86处理器架构

重点讲解了 32 位 x86 处理器的基本架构特点。这些处理器包括了 Intel IA-32 系列中的成员和所有 32 位 AMD 处理器。

2023-10-16 13:46:12 347 1

原创 x86处理器架构——cpu处理器架构

是学习计算机如何工作的很好的工具,它需要我们具备计算机硬件的工作知识。

2023-10-16 13:45:13 241 1

原创 x86汇编指令集

无符号除法.结果回送:商回送AL,余数回送AH, (字节运算);整数除法.结果回送:商回送AL,余数回送AH, (字节运算);REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX0时重复。REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX0时重复。无符号乘法.结果回送AH和AL(字节运算),或DX和AX(字运算)整数乘法.结果回送AH和AL(字节运算),或DX和AX(字运算)当ZF=0或比较结果不相等,且CX/ECX0时重复。当CF=0且CX/ECX0时重复。

2023-10-16 08:58:58 728 1

原创 x86汇编指令寄存器

EIP(Instruction Pointer) 指令指针寄存器。AF(Auxilliary carry Flag) 辅助进位。DF(Direction Flag) 方向。ESP(Stack Pointer)堆栈。OF(OverFlow Flag) 溢出。IF(Interupt Flag) 中断。PF(Parity Flag) 奇偶。CF(Carry Flag) 进位。FLAGS或PSW 标志寄存器。SF(Sign Flag) 符号。TF(Trap Flag) 陷阱。ZF(Zero Flag) 零。

2023-10-13 14:11:11 302 2

原创 如何在vim中使用ctags工具轻松阅读代码

ctags是一个个古老而又强大的为代码建立索引的工具,在redhat系列的linux系统下(例如:redhat,centos,fedra等)安装非常方便。vim中已经内嵌了对ctags的支持,我们只需要安装ctags工具后,无需任何其他特殊的配置即可通过ctags辅助vim进行代码阅读。1.ctags -R *:扫描当前目录及所有子目录(递归向下)中的源文件。3.需要跳转时,将光标移动到需要查看的变量或者接口上,Ctrl+]6.如果需要查询指定符号在哪些地方用到使用":ts symbol"

2023-10-13 13:11:22 842

原创 NVME原理

,或称非易失性内存主机控制器接口on-olatileemoryostontrollernterface),是一个逻辑设备接口规范。它是与类似的、基于设备逻辑接口的传输协议规范(相当于通讯协议中的),用于访问通过(PCIe)总线附加的非易失性存储器介质(例如采用的固态硬盘驱动器),虽然理论上不一定要求 PCIe 总线协议。NVM代表非易失性存储器(non-volatile memory)的首字母缩略字,这是固态硬盘(SSD)的常见的闪存形式。

2023-10-11 15:39:47 1351

原创 内核vmcore文件分析方法

linux内核在运行过程中,总会由于硬件异常,驱动异常或者用户态程序等等原因导致coredump,从而转储vmcore文件。而coredump发生后,我们如何去分析coredump愿原因,成为了维护内核工作的重点,那么我们怎么去分析coredump呢,接下来就让我们一起来看看。

2023-10-10 19:49:31 2341 4

原创 cpu时间片原理说明

时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。

2023-09-28 17:52:43 2175 1

原创 内存ECC问题的分析和实践

不多介绍了,感兴趣自己研究吧。最后得出来的二进制数是:0101,我们会神奇地发现,0101就是10进制5的二进制表现,因此,我们可以准确的知道,5号位上发生了数据的改变,我们只要对5号位进行置反操作即可。首先第一组(1,3,5,7,9,11位):1的个数为6位,不再是奇数个了,因此,我们可以断定,这一组中肯定有某个数据发生了错误,但不能确定是哪一位上发生了错误。接下来,我们检查第二组(2,3,6,7,10,11) ,1的个数为3位,仍然满足“奇校验”,因此我们也可以断定这一组中没有任何一位数据发生了改变。

2023-09-28 11:34:03 4872

原创 qemu-kvm的suberror错误探索

在使用qemu-kvm时,有时候会遇到报“KVM internal error. Suberror: 1”或者“KVM internal error. Suberror: 3”错误,但是这类报错又没有其他报错信息辅助我们进行问题的定位和处理,而且kvm驱动中,也并未提供这类问题的debug信息调试手段。

2023-06-29 17:16:10 709 3

原创 qemu-kvm时钟源原理

linux内核时钟源,qemu-kvm时钟源的各自原理说明。以及我们该如何选择和设置qemu-kvm的时钟源

2023-06-06 21:01:28 4396 10

原创 Linux内核中的内存管理——slab

在学习c语言时,我们常常会使用到malloc()去申请一块内存空间,用于存放我们的数据。刚开始我们只要知道申请内存时使用用malloc去申请一块就可以,而其中的原理我们并不关心。但是随着我们对运行环境的要求越来越多样化,复杂化,以及对稳定性以及性能问题的要求逐渐变得越来越重要时,我们往往需要关注到性能问题。而研究性能问问,如果只停留在知道使用malloc()可以去申请一块内存空间是远远不够的,此时我们就需要去研究相关的原理和代码。

2023-03-14 15:34:16 2247 2

原创 Linux音频问题——codec寄存器配置

起初,在1992年推出了OSS框架,用于在Unix操作系统中处理音频信号。直至于1998年Gravis Ultrasound所开发的ALSA驱动,ALSA此时一直作为一个单独的软件包开发,LINUX内核一直使用的OSS框架。直到2002年开始,Linux内核2.5版本引进,2.6版本成为Linux内核中默认的标准音频驱动程序集,OSS则被标记为废弃。

2023-03-14 11:45:11 3949 1

原创 Linux内核proc sysctl

sysctl是一个用于运行时配置内核参数的命令,这些内核参数位于/proc/sys目录下。sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网等功能,如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能。1、常见用法。

2023-03-02 17:28:22 1880

原创 Linux网络栈——网络收发包

在开发或使用Linux网络的时候,我们往往会需要了解Linux网络数据是怎么传输的,它的收发包到底是怎样的一个流程。本文将初步整理一下本人的理解和认识。

2023-02-28 13:50:37 447

NVMe Boot原理和技术说明详细内容

The NVM Express Boot specification was developed as part of the NVM Express 2.0 family of specifications. It outlines a standard process for booting over the NVMe interface, and defines the mechanism of a pre-OS environment (e.g., BIOS) to share administrative configuration specific to NVM Express interfaces (e.g., NVMe-oF/TCP Transport) to an operating system. This well-established exchange of information permits operating systems to boot from NVM interfaces in a consistent manner.

2023-10-16

NVMe Management原理和技术文档详细说明

The NVMe Management Interface (NVMe-M) specification was created to define a command set and architecture for managing NVMe storage, making it possible to discover, monitor, configure, and update NVMe devices in multiple operating environments. NVMe-MI technology provides an industry standard for management of NVMe devices in-band (through an operating system) and out-of-band (usually through a BMC, or baseboard management controller).

2023-10-16

NVMe over Fabrics (oF) Specification

The NVMe over Fabrics specification was created to enable non-volatile memory express commands that transfer data between a host and SSD or system over a networked fabric.

2023-10-13

nvidia驱动安装脚本

nvidia驱动安装包,可以扩展安装nVidia驱动

2023-10-13

cpu时间片策略的由来

一、简介 1、cpu时间片的概念 时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。 2、cpu时间片基本原理 在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片.时间片的大小从几ms到几百ms.当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片.这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间片的处理机执行时间.

2023-10-08

操作系统时钟源原理以及实际时钟源效果

首先,我们要知道大部分PC机中有两个时钟源,分别叫做RTC硬件时钟(实时时钟)和OS(操作系统)时钟(软时钟)。 1)RTC硬件时钟独立于操作系统,它为整个计算机提供一个计时标准,是最原始最底层的时钟数据。 首先,我们要知道大部分PC机中有两个时钟源,分别叫做RTC硬件时钟(实时时钟)和2)OS(操作系统)时钟(软时钟)。 RTC硬件时钟独立于操作系统,它为整个计算机提供一个计时标准,是最原始最底层的时钟数据。 RTC硬件时钟和OS(操作系统)时钟保持着以下关系: 1)在开机时操作系统取得RTC硬件时钟中的时间数据来初始化OS时钟,然后通过计数器的向下计数形成了OS时钟。OS时钟只在开机时才有效,而且完全由操作系统控制,所以也被称为软时钟或系统时钟。 2)OS时钟输出脉冲信号,接到中断控制器上,产生中断信号,触发时钟中断,由时钟中断服务程序维持OS时钟的正常工作。 3)RTC硬件时钟是OS时钟的时间基准,操作系统通过读取硬件时钟来初始化OS时钟,在操作系统运行过程中,每隔一个固定时间会刷新或校正RTC硬件时钟中的信息,共同维持着系统时间。 那各操作系统又是使用了哪些时钟源呢,请见分晓。

2023-09-28

linux kvm虚拟化suberror

在使用qemu-kvm时,有时候会遇到报“KVM internal error. Suberror: 1”错误,但是这类报错又没有其他报错信息辅助我们进行问题的定位和处理,而且kvm驱动中,也并未提供这类问题的debug信息调试手段。在kvm驱动中,将kvm emulation failure问题统一报“KVM internal error. Suberror: 1”错误。用户在错误时无法通过日志来甄别问题原因,只能知道原因是kvm外部原因(诸如启动kvm的配置选项,vcpu状态异常,cpu特性功能检测异常)。其实报“KVM internal error. Suberror: 1”错误的原因最终都和cpu状态或者特性相关

2023-09-28

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除