个人
文章平均质量分 87
sun_abcd
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
内核协议栈源码阅读(四) --- tx方向协议栈到驱动
如果带 frag_list 的 skb 上送到协议栈会被在接收方面处理掉,例如 rx 方向 ip 分片组装时会判断这个 skb 是否有 frag_list,有的话则将其一并拷贝到一个线性化的 skb 中。的逻辑:将 skb->data 区域扩展,看是否满足所有 frag 或者 frag_list 的数据加在一起的长度,如果足够则将 frag 或者 frag_list 的数据拷贝到 data 线性区,然后释放 frag/frag_list 占的内存页。(注意这里会重新分配一个新的 skb,使用的。原创 2025-08-04 22:34:51 · 832 阅读 · 0 评论 -
内核协议栈源码阅读(三) --- 网桥处理
如果开启了网桥模块,则不是个空函数。return 0;包如果是回环包或者接收包的设备没有挂载到网桥上,则返回 0 进行后续的协议栈处理如果包非回环包且接收设备挂在网桥上,那么进行网桥处理,执行在br_init初始化网桥模块时设置为函数接下来看if (!goto err;= 0;return 0;if (!return 1;判断源mac地址是否非法(需要mac地址非多播地址且非0)判断目的地址是否是局域网多播,如果是的话扔到。原创 2025-08-02 16:08:36 · 964 阅读 · 0 评论 -
内核协议栈源码阅读(二) --- rx方向 netpoll 及进入协议栈之前的处理
netpoll 实际上是一个框架,基于这个框架实现的有 netconsole 功能,主要用于将 console 日志信息通过 udp 传递到监控主机。用于表示所有二层以太网报文都需要经过的协议处理,主要用于桥接模式。此时主机当作一台交换机使用,所有报文都需要判断二层头,决定转到哪里。函数) 的时候创建,分别是一个链表和一个16个链表组成的数组(配上hash 函数,当作散列表使用)上一篇我们知道内核收包后会调用。在内核初始化网络子模块 (网络层协议的数据结构由。原创 2025-07-24 21:03:39 · 593 阅读 · 0 评论 -
内核协议栈源码阅读(一) --- rx方向驱动与内核交互
不管 napi 还是非 napi都是硬中断触发软中断,在中断上下文的末尾执行一次软中断。进入 napi poll 逻辑。然后包都通过送入协议栈。原创 2025-07-22 20:54:22 · 929 阅读 · 0 评论 -
分布式数据一致性小结
分布式一致性问题包括数据一致性问题和事务一致性问题。在此仅关注数据一致性问题数据一致性问题是因为分布式系统下数据需要复制而导致的。而数据一致性模型就是规定在并发的进行数据复制时,每个节点应该看到的视图是怎样的。不同的数据一致性模型对于视图的规定不一样。假设:有两个进程p1和p2,各自发生的事件为p1_1、p1_2和p2_1、p2_2。如果不做任何限制,那么这四个事件在全局所有节点看来有4!种可能(由于网络波动或者任何原因,这些事件会完全的乱序由别的节点感知到)。而一致性模型。原创 2024-08-25 22:02:44 · 1636 阅读 · 5 评论 -
java 对象模型的个人理解
的主要作用是为java应用提供一个灵活的访问方法区内容的接口,而这通常用于反射或者通过。,我的理解是增加直接指向,每个对象需要多加一个成员,浪费内存,而获取。那为什么我不在创建实例对象的地方用。文件被加载后,其会在堆上同样的创建一个。,存储在方法区,这样子每个对象实例。的指针就可以访问自己的方法了。进行反射等操作是一个低频的操作)的接口,这样子反射才能获取到。指针的原因(实例对象不直接指向。但是需要注意的是,当一个。示例:(图是网上找的)等抽象(反射的基础)创建则是分开的两步,因此,堆上保存了每个。原创 2024-07-25 21:51:39 · 480 阅读 · 0 评论 -
java 强、软、弱、虚引用
【代码】java 强、软、弱、虚引用。原创 2024-07-16 22:04:58 · 428 阅读 · 1 评论 -
java 中断机制的个人理解
java 的中断更多是一种通知协作机制只是简单的引入一个标记,不同的对象或者方法对该标记可以有不同的逻辑,抛出不同的异常,比较灵活。原创 2024-07-16 13:24:15 · 267 阅读 · 0 评论 -
6.s081 学习实验记录(五)traps
git checkout traps,切换到traps分支文件在我们输入之后会被汇编为call.asmf、h、maincall.c 中的代码比较简单:return x+3;exit(0);当发生错误时,打印当前的调用栈。每个函数栈帧包含一个返回地址以及一个指向caller栈帧的(我理解就是caller的rsp)在中实现一个,在sys_sleep中插入对该函数的调用,然后运行bttest,该用户程序会调用sleep系统调用,此时应该打印堆栈bttest在qemu中执行完毕之后,新开一个窗口执行。原创 2024-02-05 23:05:02 · 1317 阅读 · 0 评论 -
6.s081 学习实验记录(四)page tables
许多操作系统通过共享一系列信息到用户态只读页面来加速某些系统调用的执行时间,因此我们需要实现该功能来加速系统调用getpid()每当进程创建的时候.,在USYSCALL(该VA定义在) 处映射一个只读的物理页,这个物理页的起始位置存储一个(同样定义在),初始该结构体存储当前进程的PID。当前实验,用户态已经准备好了一个应用pgtbltest,该应用使用ugetpid()函数获取进程pidugetpid()函数实现非常简单,就是从用户态的USYSCALL虚拟地址处读取usyscall中记录的pid。原创 2024-02-03 17:51:16 · 1325 阅读 · 0 评论 -
6.s081 学习实验记录(二)xv6 and unix utilities
该实验主要用来熟悉xv6以及其系统调用。原创 2022-12-25 15:14:38 · 1303 阅读 · 1 评论 -
6.s081 学习实验记录(一)环境准备
6.s081实验环境准备原创 2022-12-24 19:53:58 · 1162 阅读 · 0 评论 -
链接&装载(一)虚拟地址与物理地址
当我们写出一个程序,即便是最基本的 Hello World,都需要经过 预处理、编译、汇编、链接才能生成最终的可执行文件。预处理:预处理过程主要处理源代码中以 开始的预编译指令,主要处理如下:编译:将预处理好的文件经过一系列的词法分析、语法分析、语义分析产生汇编代码汇编:将汇编代码转为机器指令链接:将不同的机器指令文件链接形成一个可执行文件我们在学习过OS之后,都知道进程拥有自己的虚拟地址空间,需要经过页表映射到物理地址空间。那么,计算机在真正执行代码的时候,是如何将一个变量与一个逻辑地址相关联起来的呢?初原创 2022-12-04 18:49:58 · 1583 阅读 · 0 评论 -
CSAPP学习及实验记录
文章目录一、环境准备二、笔记三、实验3.1 Lab1:Data Lab3.2 Lab2:一、环境准备二、笔记2.1 数据表示与补码2.2三、实验3.1 Lab1:Data Lab3.2 Lab2:原创 2022-12-04 09:47:00 · 325 阅读 · 0 评论 -
CSAPP Lab6:Malloc
实现一个动态内存分配器。由于隐式链表就是一块连续的内存区域,将其切分成不同的内存块,每个块首先开头都有一个header,末尾有一个footer。header和footer的内容是一样,都占据4B,前27bit记录该内存块的总长度,后三位表示该内存块是否分配出去。因此可以定义一些基本的宏,方便我们操作。结合书籍p599的内容,将其改为自己更好的理解其含义的宏。块的相关函数我们需要实现分配初始化堆、分配内存块、释放内存块、内存块重分配,除了这几个题目要求的函数,我们还需要实现一些必要的函数:mm_ini原创 2022-11-27 22:33:20 · 1533 阅读 · 0 评论 -
CSAPP Lab4: Cache
在csim.c中实现一个缓存模拟器,以valgrind内存跟踪作为输入,模拟缓存内存的命中/未命中行为,并输出命中、未命中、缓存替换的总数,缓存替换算法使用LRU。使用./test-csim验证功能的正确性。原创 2022-11-13 17:05:16 · 1189 阅读 · 0 评论 -
CSAPP Lab5:Shell
此实验目的是为了更加熟悉进程控制和信号。该实验内容是实现一个简单的Unix Shell程序,其支持job control。准备步骤及基础要求make,编译测试程序每次修改,都需要make clean,再重新make参考 tsh.c,掌握shell 程序的架构,实现其中的空函数eval:解析命令行参数的主函数,大约70行builtin_cmd:识别内置命令,包括quit、fg、bg、jobs,大约25行do_bgfg:实现内置命令,fg和bg,大约50行。原创 2022-11-20 12:34:29 · 953 阅读 · 0 评论 -
CSAPP Lab3:Attack
文章目录一、准备二、ctarget三、rtarget一、准备二、ctarget三、rtarget原创 2022-06-04 22:51:27 · 1542 阅读 · 0 评论 -
CSAPP学习记录 3.1---程序的机器级表示
文章目录一、汇编一、汇编C语言中低位转高位,先转大小再转类型有符号数使用带符号扩展,即高位补符号位无符号数使用零扩展,高位补0进行数据转换时,高位类型转地位类型(如 int 转 char),先加载高位到寄存器,然后读低位字节指针存储在寄存器中,解指针相当于使用寄存器间接寻址移位操作时特别的,操作数1是偏移量,操作数二是要移动的数,其中偏移量是立即数或者从寄存器%cl中取出的,%cl占8位,因此偏移量最大是255...原创 2022-05-18 23:55:04 · 466 阅读 · 0 评论 -
CSAPP Lab2:Bomb Lab
文章目录简介一、阶段一二、阶段二三、阶段三四、阶段四五、阶段五六、阶段六简介实验提供了一个可执行文件bomb,并且埋下了6个"炸弹"。需要通过反汇编查看bomb,找出6把钥匙字符串,破解6个炸弹。反汇编命令:objdump -d xxx一、阶段一第一阶段,炸弹所在函数为phase1,其反汇编代码为: 400ee0: 48 83 ec 08 sub $0x8,%rsp //创建栈帧,大小为8个字节 400ee4: be 00 24 40 00原创 2022-05-18 23:54:48 · 516 阅读 · 0 评论 -
CSAPP Lab1:Data Lab
文章目录一、实验要求二、实验2.1 bitXor:2.2 tmin2.3 tmax一、实验要求二、实验2.1 bitXor:只使用一元运算符 & 和 ~ 实现 ^:A^B为A的每一位与B中对应的每一位进行异或。因此需要 A & ~B得到A中为1,B中为0的位,然后并上 ~A & B,即B中为1,A中为0的位,然后进行 | 运算即可。即:(A&~B)|( ~A&B)由于没有 | 操作,因此需要用 & 和 ~ 来模拟 | 的效果。模拟|运算我们只需原创 2022-05-12 23:45:29 · 729 阅读 · 0 评论 -
CSAPP学习记录2.1---数据表示与补码
文章目录一、补码的含义二、数据表示一、补码的含义我们首先介绍'10'的概念,这里所指的‘10’并不表示我们日常生活中使用的十进制中'十'这个概念,而是所有进制中产生进位后的第一个数。例如:二进制:0,1,10四进制:0,1,2,3,10八进制:0,1,2,3,4,5,6,7,10十进制:0,1,2,3,4,5,6,7,8,9,10因此,我们在某个进制固定位数下计算的时候,最大的数就是‘10’的前一个数字所组成的数字,比如十进制下1000以内的加减法,则999是最大的数,八进制下1000以原创 2022-05-10 17:27:40 · 700 阅读 · 0 评论 -
基于RDMA的RPC框架(三)框架设计
文章目录一、整体设计二、Agent模块设计三、详细设计一、整体设计考虑到框架的跨语言性,RPC借助了Service Mesh的思想,即主体为一个Proxy Agent作为Sidecar单独部署,同时提供一个特别轻量的SDK以进行流量劫持。类似于:etcd为注册中心,可以自己替换为自己的实现或者其他的开源实现。主体部分的Agent部分除了最普通的消费服务、注册服务、进行Rpc调用外同时还要负责服务治理,包括熔断、限流、服务降级等功能。通信协议:字段作用magic魔数原创 2021-11-01 16:16:37 · 2455 阅读 · 1 评论 -
基于RDMA的RPC框架(一) 环境搭建
文章目录一、简介二、编译内核三、引用一、简介二、编译内核我使用的是 Ubantu 14.04,内核版本为:安装 4.9 版本的内核git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux下载成功:Cloning into ‘linux’…remote: Counting objects: 5548596, done.remote: Compressing ob原创 2021-09-09 19:18:48 · 2232 阅读 · 0 评论 -
基于RDMA的RPC框架(二)DISNI库的使用
文章目录一、简介二、类介绍三、基本流程四、示例示例一:ReadClient & ReadServerReadClientReadServer整体逻辑示例二:SendRecvClient & SendRecvServerSendRecvClient:SendRecvServer:一、简介RDMA是一种概念,在两个或者多个计算机进行通讯的时候使用DMA, 从一个主机的内存直接访问另一个主机的内存。DISNI是IBM开源的RDMA库,是 jVerbs库替代,提供了低级的 verbs API和原创 2021-10-28 17:01:55 · 1584 阅读 · 0 评论
分享