码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
网卡收发包过程
初始化
注:初始化由网卡的驱动程序完成
在内存中为DMA开辟一段连续空间(这段内存也被称为DMA内存区),存储PD(Packet Descriptor)数组, PD数组是给网卡中的DMA Engine使用的,1个PD对应网卡接收或发送的1个数据包。注:不同的设备,PD结构不同,但是大致都有状态、长度和buffer pointer(指向数据包)3个成员。
初始化PD数组,状态为Empty,length为0
DMA映射:在内存中再开辟多块内存(可以不连续)用来存放数据包,将这些内存块的物理地址赋值给PD的buffer pointer
接收数据包
当网卡NIC接收到数据包,放在网卡内部的Rx FIFO中
当一个数据包接收完成后,DMA Engine依次做以下事情:
Fetch PD:遍历PD数组,直到找到当前PD状态为Empty为止
Update PD:更新该PD状态为Ready;
Move Data:把数据包从网卡的Rx FIFO中搬移到PD的buffer pointer指向的内存中;
Generate Interrupt:数据搬移完成后,产生外部中断给指定的CPU Core;
CPU Core处理外部中断,中断处理程序由网卡驱动程序实现。
此时数据包已经在该PD的buffer pointer指向的内存块中了,内核处理该数据包。
更新PD状态为Empty,重新进行DMA映射:再开辟一块内存,将这块内存的物理地址赋值给PD的buffer pointer
相关阅读:
深入探索SDL游戏开发
LeetCode 646 最长数对链[贪心 自定义排序] HERODING的LeetCode之路
哈希表 | 有效字母异位词 | leecode刷题笔记
小学生Python编程 ——飞机大战
linux高级篇基础理论五(用户安全,口令设置,JR暴力破解用户密码,NMAP端口扫描)
Learn Prompt-基础用法
【MySQL】表的增删改查
14:00面试,14:06就出来了,问的问题有点变态。。。
阿里面试官浅聊Java面试那些事
Java项目:SSM电器商城系统
原文地址:https://blog.csdn.net/AcTarjan/article/details/134525129
最新文章
ELK 学习总结
深度学习进阶(二十二)T5:NLP任务的首次大一统
XRPC:一个能写进简历的 C++ 高性能分布式 RPC 框架,QPS 13万+
Windows 下切换 Java 环境太复杂了,我做了个 cli 工具,可以快速安装,切换 Java 版本
SHP文件与PostGIS数据库Geom字段:WKT和EWKB相互转换SQL
Spring AI 2.0 GA 倒计时:先别急,来看看 Java AI 框架的另一条路
【php】老旧PHP项目(PHP 5.6)本地环境搭建与踩坑记录
15. 别再硬写提示词了!LangChain ChatPromptTemplate核心实战
从控制论看 Harness Engineering:当反馈回路终于能在"重要的地方"闭合
一次 OOM 线上排查实录
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
小工具
小游戏
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
京公网安备 11010502049817号