- 博客(87)
- 资源 (15)
- 收藏
- 关注
原创 UFS 3.1架构简介
整个UFS协议栈可以分为三层:应用层(UFS Application Layer(UAP)),传输层(UFS Transport Layer(UTP)),链路层(UIC InterConnect Layer(UIC))。应用层发出SCSI命令(UFS没有自己的命令使用的是简化的SCSI命令),在传输层将SCSI分装为UPIU,再经过链路层将命令发送给Devices。
2024-09-29 20:46:53
644
原创 拆开思维的墙读书笔记 -----第二、三章心态
一、积极的心态什么是积极的心态以全身心的投入到当前在处理的事情当中,从中发现事情的乐趣;为何会没有积极性:1、害怕失败而不敢投入;2、认为获得不到什么而不愿投入;保持积极性的好处:全身心的投入,发现事物的价值和需要被挖掘的东西,从而丰富自己的知识并积累经验;积极性使人更容易坚持下来,最终获得成功;如何保持积极性:1、不惧怕失败;2、不过分关注结果和收获;3、通过实践、复盘,发现自己的收获,发现事物的价值、美好从而提升自己的积极性;4、快乐源于紧张感的释放,
2022-04-10 17:16:46
217
原创 bpf原理与入门
一、bpf架构如上图所示,bpf由六部分构成,以下为其在bpf中的作用:bpf工具:该部分涉及bpf用户态程序、bpf的编译工具,通过bpf编译工具如Clang、LLVM将bpf用户态程序编译成bpf字节码;加载器:可以简单理解为bpf系统调用,将bpf字节码加载到内核;验证器:对bpf程序的合法性进行检查;bpf虚拟机:实现将bpf字节码转化成机器码并运行,使用内核解释器的话需要根据字节码执行对应的机器码,使用JIT可以直接将字节码编码生成机器码;静态跟踪:为内核为bpf程
2022-03-26 17:25:06
4416
原创 C 语言常见考点
一、a++与++a++a:表示先取 a 的内存地址,增加a在内存中的值,然后再把a值作为指令操作数拷贝到寄存器中;a++:表示先取 a 的内存地址,把a值作为指令操作数拷贝到寄存器中,然后增加内存中 a 的值,意味着a的值需要在下一次对a进行寻址才可以体现+1;二、sizeof与strlensizeof:为关键字,以字节形式输出操作数占用的存储空间大小; sizeof指针,不管指针什么类型所占字节宽度与cpu数据总线所占字节数一致; sizeo...
2022-03-17 17:02:47
841
原创 DPDK无锁队列
首先说明下几个关键指针: r->prod.head:接下来开始进行入队的位置; r->prod.tail:已经入队完成的位置; 若r->prod.head > r->prod.tail,说明有core正在执行入队操作,两者相等时说明入队完成; r->cons.head:接下来开始进行出队的位置; r->cons.tail:出队已完成的位置; 若 r->...
2022-03-02 23:15:28
239
原创 自旋锁与互斥锁
一、概念自旋锁:CPU一直检测锁状态尝试进行锁的获取,这种锁等待方式也称旋转或忙等待;互斥锁:当进程或线程获取锁失败时释放CPU,由系统调度转到执行其它进程或线程,这种锁等待方式也可称为阻塞;二、特点和使用场景使用锁的前提条件为系统运行在多处理器CPU下;自旋锁:不释放CPU,适用于希望锁延迟时间短的场景;互斥锁:发生线程或进程调度,存在较大的任务切换上下文开销,适用于等待时间较长的场景。...
2022-03-01 08:39:37
1240
原创 拆开思维里的墙读书笔记 -----第一章 安全感
第一章 安全感物质的价值与成本:物质的获取都需付出一定的成本,比如说时间成本、健康成本、亲情成本、信誉成本,在追求物质时需先度量成本与收益是否合理,是否可以用相同的成本去获取更高的收益;付出与收获:付出相当于是投资,并不能保证一定获得回报,只可能说会得到回报,所以坚持付出不计较回报,总会获得回报;自信与安全感:越有自信则越容易成功,成功越多则越容易拥有安全感;提升安全感:1、小范围冒险: 在失败成本较小的场景下进行冒险,尝试挑战和训练自己的短板,提升自信心;2、远离太容...
2022-01-30 11:51:03
352
原创 盘点指针的坑
1、二级指针,比如说**a,对于其成员a[]也需要申请内存进行指针变量的存放,比较容易出现的情况是函数内部采用*a[10]来存放地址,然后将**a指向的地址赋值给**b通过函数入参返回,由于a[]为函数内部申请的变量,在函数执行完后就释放了,实际上**b没获取到指向的**a的地址,而是访问了野指针;2、指向数据结构体的指针的内部指针成员static int drv_scan_ethdev(void){ struct dirent **eps; int n, i; n
2021-11-25 19:25:47
447
原创 函数入参与参数类型不一致导致的踩内存
1 #include <stdio.h> 2 #include <string.h> 3 4 typedef struct test_s { 5 int a; 6 int b; 7 }test_t; 8 void test_func(test_t *a, int *b) 9 { 10 *b = 2; 11 a->a = ...
2021-11-09 00:09:07
368
原创 程序运行过程
一、程序编译过程gcc HelloWorld.c -E -o HelloWorld.i 预处理:加入头文件,替换宏;gcc HelloWorld.c -S -c HelloWorld.s 编译:包含预处理,将 C 程序转换成汇编程序;gcc HelloWorld.c -c HelloWorld.o 汇编:包含预处理和编译,将汇编程序转换成可链接的二进制程序;gcc HelloWorld.c -o HelloWorld 链接:包含以上所有操作,将可链接的二进制程序和其它别的库链接在一起,.
2021-10-27 21:10:08
512
原创 X86处理器与外设的数据读写
1、处理器总线地址总线:传送需要寻址的地址;数据总线:传送cpu与存储器或IO之间读写的数据;控制总线:用于控制读写和访问的是存储器还是IO,大多数计算机系统都有4条控制连线:存储器读控制总线、存储器写控制总线、IO读控制总线、IO写控制总线;2、数据读写 当处理器读取一个存储单元的内容时,通过地址总线向存储器发出一个地址,然后发出存储器读控制信号,最后将从存储器读出的数据通过数据总线送到微处理器,对应存储器写、IO写、IO读的流程也类似;...
2021-10-16 21:49:39
362
原创 记一次回调函数作为参数传入导致的野指针访问
函数名作为函数名为void()类型,同时函数名也作为函数首地址为void*()类型, 对函数名取地址取得的地址也为函数的首地址,其值一样,但类型为void *()类型;由于typedef void (* callback_func_type)();定义的callback_func_type为指针,故void call_callback(callback_func_type * cb)的入参应为**cb,函数名取地址作为参数传入仅为*cb,而函数名赋值给变量callback_func_type ...
2021-09-16 19:13:56
248
原创 页高速缓存
1、address_space对象 属于同一持有者的页缓存描述符的链表,该对象记录在持有者索引节点对象数据结构中。页描述符的mapping字段指向address_space、index字段表示在所有者地址空间中的页偏移量; 页的持有者可能是文件也可能是块设备文件,若为文件则文件的索引节点对象的i_data字段指向address_space对象,索引节点的i_mapping字段指向同一索引节点的i_data字段,address_space的host字段也指向其索引节点;若持有者...
2021-09-11 21:36:58
189
原创 DPDK rte_mbuf结构解析
1、单segment的rte_mbuf2、多segment的rte_mbuf3、间接buffer dpdk使用该方式来进行ip报文的分片,申请直接buf来进行ip头部的存放,申请间接buf直接在rte_mbuf记录分配给其的原mbuf的data地址和长度;在下行发包时将直接buffer和间接buffer进行dma时,ip头部dma的时直接buf上的数据区,间接buffer根据其记录的数据区的物理地址,实际dma的是原mbuf的数据区的地址和分配给其的长度; ...
2021-09-07 21:21:30
1605
原创 块设备驱动
一、文件系统访问块设备的路径系统调用函数调用vfs函数,vfs获取要访问的文件的描述符、偏移量、数据长度等参数;vfs层获取文件的address_mapping结构体,若所请求的磁盘空间在磁盘高速缓存中,则直接通过操作磁盘高速缓存;vfs未获取到文件对应的磁盘缓存,则通过映射层来查找需要访问的磁盘空间地址。文件和磁盘空间都被拆分成块,映射层调用具体文件系统函数,根据文件inode访问文件对应的磁盘索引节点,根据请求的文件块号(逻辑块号,以文件偏移量进行计算)在磁盘索引节点的数据结构中查找对应
2021-08-30 20:36:31
148
原创 Linux设备驱动
一、设备驱动程序模型1、sysfs文件系统 用来体现设备之间的层级关系,设备驱动通过注册kobject、kset、subsystem来创建对应的sysfs目录;kobject:具体的设备对象kset:具有相同层级的设备对象的集合;subsystem:包含多个kset描述设备上下级依赖关系,在kobject创建的sysfs目录下进行体现,在设备的device结构体中,通过parent、children成员进行记录该上下级关系; kset自身通过内嵌的kobj...
2021-08-28 22:53:14
106
原创 Linux IO体系结构--io设备
一、IO设备与CPU的连接CPU通过前端总线(北桥)连接RAM控制器、通过后端总线(南桥)连接外部硬件高速缓存;CPU和IO设备的数据通路属于后端总线,通常称为I/O总线,包括对I/O设备寻址的地址总线和传输数据的数据总线;每个io设备都通过其io控制器提供的io接口上的io端口挂载到io总线连接到cpu,io体系结构如下所示:二、IO端口cpu访问io端口的方法:a、io映射方式:cpu提供的io地址空间来映射io设备的io端口(io地址空间大小为io地址总线可访问的范围,io
2021-08-26 20:14:04
375
原创 dpdk的kni模块实现原理
一、kni虚拟网卡与物理网卡的对比 相同点: kni虚拟网卡驱动与物理网卡驱动一样,需要在linux内核申请虚拟网卡设备的struct net结构体,并注册到网络命名空间,交由linux内核net模块进行网卡资源的操作; 其与网卡驱动一样,kni内核模块需要对该其网卡队列分配用于收发包的mbuf内存,要实现虚拟网卡的收发包方法,已经通过ethtool对虚拟网卡进行管理的接口; 不同点: 与物理网卡驱动不同的是,kni虚...
2021-08-01 18:47:31
745
原创 proc文件系统
/proc/sys/fs/file-max:整个系统所有进程可以打开的文件限制数;/proc/sys/fs/file-nr:单个进程可以打开的文件限制数;/proc/self/pagemap:存放当前进程页表的页帧物理地址信息;/proc/self/map_files/:该目录下存放记录当前进程mmap的线性区的文件,文件名为线性区的起始虚拟地址-结束虚拟地址;/proc/$pid/clear_refs:只写,只用于进程的拥有者,清除用于估算内存使用量的PG_Referenced和AC..
2021-08-01 17:39:40
707
原创 用户空间获取物理地址代码详解
一、背景Linux文件目录中的/proc记录着当前进程的信息,称其为虚拟文件系统。在/proc下有一个链接目录名为self,这意味着哪一个进程打开了它,self中存储的信息就是所链接进程的。self中有一个名为pagemap的文件,专门用来记录所链接进程的物理页号信息。这样通过/proc/pid/pagemap文件,允许一个用户态的进程查看到每个虚拟页映射到的物理页,其内容如下:* /proc/pid/pagemap. This file lets a userspace process fin.
2021-07-21 20:35:22
543
原创 博客或官方网站
http://abcdxyzk.github.io/博客https://download.youkuaiyun.com/download/qq_34039018/11041845
2021-07-08 17:03:50
319
原创 虚拟机配置
1、docker配置导入本地镜像:C:\Users\Dell\Downloads>docker load <openEuler-20.03-LTS-x86_64-dvd.iso查看docker镜像:C:\Users\Dell\Downloads>docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEopeneuler-21.03 latest 4367e32711f9 ...
2021-07-08 09:55:21
144
原创 kexec源码分析
一、kexec -l流程:以elf-x86_64为例 kexec-tools程序解析参数后执行my_load: 1、slurp_decompress_file:读取新内核镜像到内存; 2、get_memory_ranges:获取kexec使用的内存地址访问; 3、根据命令-t参数指定的镜像文件类型,执行对应文件类型对象的probe ops进行文件类型的校验,执行elf_x86_64_probe build_elf_exec_inf...
2021-06-30 20:31:11
966
原创 openeuler内核热切换用户态nvwa工具
该工具可作为服务端和客户端运行,服务端和客户端都绑定同一个进程间通信socket,服务端进行服务的注册,监听客户端的请求并执行客户端的请求对应的动作,客户端进行命令的获取并将命令发送到服务端;服务端流程:startServer : ---》loadConfig:解析nvwa-server.yaml、nvwa-restore.yaml中的配置 ---》起goroutine执行runServer: 注册up...
2021-06-30 11:56:55
558
linux内核(2.6.14) + 根文件系统 + Qt4 移植 for S3C2410
2016-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人