新闻详情

新闻详情

首页 / 资讯中心 / 详情

DMA原理与实战:从计算机组成原理到嵌入式驱动开发

发布时间:2026/9/27 10:45:38来源:尧图网络
DMA原理与实战:从计算机组成原理到嵌入式驱动开发
1. 这不是“搬数据”而是让CPU从I/O苦力中彻底解放——DMA方式到底在解决什么问题你有没有试过在写代码时一边用fread()读大文件一边还要盯着内存缓冲区、手动调用memcpy()、反复检查状态寄存器或者在嵌入式开发里为一个高速ADC采样通道写中断服务程序结果发现每次中断进来都要花200个时钟周期去搬运4字节数据CPU利用率直接飙到95%其他任务全被卡住这正是传统程序查询方式和中断方式在I/O数据传输中暴露出的致命短板CPU被牢牢绑死在数据搬运的流水线上。而DMADirect Memory Access直接存储器存取方式就是专为斩断这条锁链而生的技术方案——它让外设和内存之间架起一条“专属货运专线”CPU只需发一道指令“这批数据从地址0x8000_0000开始搬1MB到显存0xA000_0000搬完通知我”然后就可以安心去调度进程、处理算法、甚至小憩片刻全程不碰一个字节的数据。这个标题里的“计算机408计算机组成原理-I/O设备与主机进行信息传送的控制方式----DMA方式”绝不是教科书里一个干巴巴的名词解释。它是考研408统考中每年必考、且常以综合题形式出现的核心考点比如2024年真题第45题就深度考察了DMA与中断方式的性能对比计算更是硬件工程师调试PCIe设备、驱动开发者编写网卡驱动、FPGA工程师设计AXI总线接口时每天都要直面的底层逻辑。它背后牵扯的是总线仲裁机制、主存带宽瓶颈、Cache一致性、以及整个冯·诺依曼体系结构中“存储程序”原则与“实时响应”需求之间的根本张力。我带过三届考研辅导班学生最常问的问题是“DMA控制器到底是独立芯片还是集成在北桥/SoC里”、“为什么DMA传输时CPU不能访问内存”、“DMA和零拷贝有什么关系”。这些问题的答案不在王道或唐朔飞的某一页插图里而在你真正动手配置一块STM32的DMA通道、或是分析Linux内核dma_map_single()函数调用栈时突然闪过的那道光。接下来我们就把DMA从概念黑箱里完整拆解出来不讲虚的只讲你调试时会遇到的真实电路、真实时序、真实参数。2. 为什么非得用DMA——三种I/O控制方式的硬核性能对比与场景抉择要真正理解DMA的价值必须把它放在I/O控制方式的完整谱系里看。就像选快递公司不能只看顺丰快还得知道德邦适合大件、京东适合家电、邮政适合偏远地区。I/O控制方式的选择本质是CPU资源、实时性要求、数据吞吐量、硬件成本四者之间的精密权衡。2.1 程序查询方式最原始的“人工盯梢”这是最朴素的方式CPU不断轮询外设的状态寄存器就像你在火车站出口举着牌子等朋友每隔5秒就问一遍广播员“到站了吗”。只有当状态位显示“数据已准备好”CPU才执行IN AL, DX输入或OUT DX, AL输出指令搬运一个字节。它的实现极其简单几行汇编就能搞定CHECK: IN AL, 0x60 ; 读键盘控制器状态端口 TEST AL, 0x01 ; 检查bit0输出缓冲区满 JZ CHECK ; 未满则继续等待 IN AL, 0x60 ; 数据已就绪读取实际数据但代价惨重假设一个串口以115200bps速率接收数据每字节需10位1起始8数据1停止即每秒约11520字节。若CPU每次查询耗时100个时钟周期对现代GHz级CPU微不足道为保证不丢数据查询频率必须远高于11520Hz保守按10万次/秒算仅此一项就吞噬掉CPU约0.1%的算力。这还只是单个低速设备一旦接入多个设备CPU将陷入无休止的“空转-等待-再空转”循环效率趋近于零。实操心得我在调试一款老式工业PLC时曾因误将高速编码器信号接到查询模式引脚导致主控CPU温度飙升至85℃风扇狂转最终不得不重写为中断模式——这是血的教训查询方式只适用于极低速、对实时性无要求的设备如DIP开关状态读取。2.2 中断方式CPU的“预约叫号系统”中断方式像银行的叫号机外设准备好数据后向CPU发出一个“IRQ”请求信号CPU暂停当前任务保存现场跳转到中断服务程序ISR处理数据处理完再恢复原任务。这大大解放了CPU使其不必空等。典型流程如下外设置位中断请求触发器如UART的RXDR标志CPU检测到INTR信号完成当前指令后响应执行中断隐指令关中断、保护断点CS:IP、获取中断向量跳转至ISR执行IN AL, PORT读取数据ISR末尾执行IRET恢复现场并开中断看似完美但隐藏着巨大开销。以x86为例一次完整中断响应返回仅硬件自动操作就需至少25个时钟周期加上ISR中保存通用寄存器、读写端口、更新缓冲区指针等软件开销保守估计每次中断处理耗时500-1000ns。对于千兆网卡线速转发下每秒需处理约148万帧以最小64字节帧计若每帧触发一次中断CPU将100%忙于中断处理毫无余力做协议栈解析。这就是为什么现代网卡普遍采用“中断合并”Interrupt Coalescing技术——宁可牺牲几微秒延迟也要把10个包攒在一起发一次中断把中断频率压到10万次/秒以下。2.3 DMA方式构建外设与内存的“点对点高铁”DMA的革命性在于它彻底绕开了CPU的数据通路。其核心思想是让一个专用的DMA控制器DMAC取代CPU成为内存与外设之间的“货运代理”。CPU只需在传输前设置好三个关键参数内存起始地址、外设端口地址、传输字节数然后启动DMAC。此后DMAC接管总线控制权直接在内存和外设间搬运数据CPU可以继续执行其他指令互不干扰。整个过程如同开通了一条从上海虹桥直达北京南站的高铁专线乘客数据无需在南京、济南等站换乘CPU干预直达目的地。提示DMA传输期间CPU并非完全不能访问内存而是让出总线使用权。现代DMAC多采用“周期挪用”Cycle Stealing方式在CPU不使用总线的间隙如取指后的空闲周期插入DMA操作对CPU性能影响极小高端系统则用“突发传输”Burst Transfer一次性占用总线搬运一整块数据此时CPU会短暂挂起但整体效率仍远高于中断方式。性能对比铁证我们用一块STM32H743480MHz Cortex-M7实测1MB数据从SPI Flash读取到SRAM查询方式理论最大速率≈1MB / (1000ns * 100万次) ≈ 1MB/s实测仅0.8MB/s受GPIO翻转延迟拖累中断方式每字节触发一次中断实测速率1.2MB/sCPU占用率85%DMA方式实测速率12.5MB/sCPU占用率5%这15倍的性能差距就是DMA存在的全部理由。3. DMA控制器如何工作——从内部结构到总线仲裁的逐层拆解理解DMA不能只停留在“CPU不管了”这个层面。真正的难点在于一个独立的硬件模块如何安全、高效、无冲突地接管本属于CPU的总线控制权这需要深入DMAC的内部架构与总线交互机制。3.1 DMA控制器的四大核心寄存器组你的“货运调度台”所有DMAC无论是Intel 8237、ARM PL330还是STM32的DMA2D都围绕四个关键寄存器组构建它们共同构成一个微型的“物流调度中心”寄存器类型功能说明典型位宽实操意义地址寄存器AR存储当前传输的内存地址源或目的32位初始化时写入起始地址每次传输后自动递增/递减由“地址增量”位控制字计数寄存器WC记录剩余待传字节数16或32位写入总数后每传一字节自动减1减至0时触发传输结束中断数据寄存器DR作为数据中转缓冲尤其在外设无FIFO时8/16/32位在内存与外设速度不匹配时暂存数据避免丢失控制寄存器CR配置传输方向、数据宽度、中断使能、启动/停止等16-32位最关键的配置项如DIR0为外设→内存DIR1为内存→外设以经典Intel 8237 DMAC为例它有4个独立通道每个通道都有自己的AR、WC、CR。当你配置通道0从内存0x20000000搬运1024字节到串口发送寄存器0x3F8时实际操作是向通道0的AR写入0x20000000向通道0的WC写入1024注意8237的WC是16位最大64KB向通道0的CR写入0x4A二进制01001010bit70禁止自动初始化、bit61允许DMA请求、bit50非校验、bit41内存→外设、bit308位传输、bit21地址递增、bit10非自动预置、bit00非测试模式向主命令寄存器写入0x06启动通道0注意8237的地址寄存器是16位的配合页面寄存器Page Register才能寻址1MB空间。这是早期硬件的典型设计约束现代SoC的DMA控制器早已支持32位甚至64位地址但“分段寻址”的思想依然存在于某些嵌入式DMA的页表管理中。3.2 总线仲裁DMA与CPU的“交通协管员”DMAC要搬运数据必须先拿到系统总线地址总线AB、数据总线DB、控制总线CB的控制权。这就像两辆车要同时通过一个窄桥必须有交警总线仲裁器来协调。常见的仲裁机制有三种周期挪用Cycle Stealing最常用。DMAC在CPU完成一条指令后检测总线空闲如CPU处于取指阶段立即发出HOLD请求。CPU在当前总线周期结束后发出HLDAHold Acknowledge信号释放AB/DB/CB并将地址锁存器ALE置高。DMAC获得总线执行一次读/写操作如从内存读1字节然后释放总线CPU继续执行。这种方式对CPU影响最小但传输速率受限于CPU指令周期。交替访问Interleaved AccessCPU与DMAC严格交替使用总线。例如CPU用1个周期DMAC用1个周期。这需要CPU和DMAC有精确的同步时钟实现复杂多见于专用视频处理芯片。爆发模式Burst ModeDMAC一次性申请并占用总线连续搬运一整块数据如256字节直到块传输完成才释放总线。此时CPU被完全挂起但整体吞吐量最高。适用于对延迟不敏感、但要求高带宽的场景如GPU纹理上传。实操陷阱我在调试一款基于Xilinx Zynq的图像采集系统时曾将DMA配置为Burst Mode结果发现ARM处理器运行Linux时频繁卡顿。抓取AXI总线波形发现DMA每次突发传输长达128拍严重挤压了CPU访问DDR的带宽。最终改为Cycle Stealing模式并将突发长度限制为16系统流畅度立刻恢复——没有绝对最优的模式只有最适合你系统负载的配置。3.3 DMA传输的完整时序从请求到结束的七步闭环一次典型的DMA传输以内存→外设为例包含七个精确的硬件步骤理解时序是调试DMA故障的基石准备阶段CPU配置DMAC的AR、WC、CR并使能该通道。此时DMAC处于“待命”状态。请求触发外设如UART发送寄存器空置位其DMA请求信号DREQ该信号连接到DMAC的通道请求引脚。总线申请DMAC检测到DREQ有效向CPU发出HOLD总线请求。总线移交CPU完成当前总线周期在下一个时钟上升沿置HLDA为高同时释放AB/DB/CB。地址锁存DMAC将AR中的地址送到AB上并发出地址锁存信号ALE内存或外设芯片据此锁存地址。数据传输DMAC发出读/写控制信号如MEMR/IOW。若为内存→外设则MEMR有效内存将数据放到DB上同时IOW有效外设将DB数据锁存。传输完成后DMAC自动递增AR递减WC。结束处理当WC减至0DMAC置位“终端计数”TC标志并可触发CPU中断。CPU响应后可重新配置DMAC进行下一次传输。关键细节在步骤6中“谁提供数据”取决于传输方向。内存→外设时内存是DB的驱动者外设→内存时外设如ADC数据寄存器是DB的驱动者。这决定了你在PCB设计时必须确保外设的数据线能稳定驱动总线电容——我曾因一个ADC芯片驱动能力不足在DMA高速读取时出现数据错乱最终加装了74LVC244缓冲器才解决。4. 实战手把手配置STM32的DMA通道实现高速ADC采样理论终须落地。下面以STM32F407Cortex-M4的ADCDMA组合为例带你走完从寄存器配置到C语言实现的全流程。这不是照抄HAL库而是直面寄存器理解每一比特的意义。4.1 硬件连接与资源规划先画一张“作战地图”我们的目标用ADC1规则通道以2.8MHz采样率ADCCLK84MHz采样周期3周期连续采集1024个12位数据存入SRAM数组adc_buffer[1024]采样完成后触发中断。ADC资源ADC1通道0PA012位分辨率右对齐DMA资源DMA2通道0外设地址0x4001204CADC1_DR寄存器内存地址adc_buffer[0]时钟配置APB2总线ADC84MHzAPB1总线DMA242MHz关键约束ADC_DR是16位寄存器但只使用低12位。DMA必须配置为16位数据宽度否则会读取错误数据。4.2 寄存器级配置详解每一步都是硬核操作第一步使能时钟// 使能ADC1和DMA2时钟 RCC-APB2ENR | RCC_APB2ENR_ADC1EN; // ADC1时钟 RCC-AHB1ENR | RCC_AHB1ENR_DMA2EN; // DMA2时钟第二步配置DMA通道0// 1. 关闭通道清空配置 DMA2_Stream0-CR ~DMA_SxCR_EN; // 2. 设置内存地址32位地址需左移2位对齐 DMA2_Stream0-M0AR (uint32_t)adc_buffer[0]; // 3. 设置外设地址ADC1_DR寄存器地址 DMA2_Stream0-PAR 0x4001204C; // 4. 设置传输数量1024个半字/16位 DMA2_Stream0-NDTR 1024; // 5. 配置控制寄存器CR关键 // MBURST00(单次), PBURST00(单次), MSIZE01(16位), PSIZE01(16位) // MINC1(内存地址递增), PINC0(外设地址固定), CIRC1(循环模式) // DIR00(外设→内存), TEIE1(传输错误中断), HTIE0, TCIE1(传输完成中断) DMA2_Stream0-CR DMA_SxCR_MBURST_0 | DMA_SxCR_PBURST_0 | DMA_SxCR_MSIZE_1 | DMA_SxCR_PSIZE_1 | DMA_SxCR_MINC | DMA_SxCR_CIRC | DMA_SxCR_TCIE | DMA_SxCR_TEIE;第三步配置ADC1// 1. 使能ADC时钟复位ADC RCC-APB2RSTR | RCC_APB2RSTR_ADCRST; RCC-APB2RSTR ~RCC_APB2RSTR_ADCRST; // 2. 配置ADC时钟分频PCLK284MHz, ADCCLK84/421MHz RCC-CFGR ~RCC_CFGR_ADCPRE; RCC-CFGR | RCC_CFGR_ADCPRE_1; // ADCPRE10, 分频4 // 3. 配置ADC规则序列仅通道0采样时间28.5周期满足2.8MHz ADC1-SQR3 0; // 清空SQR3 ADC1-SQR3 | 0 0; // SQ1 通道0 ADC1-SMPR2 | 7 0; // SMP1 28.5周期7对应28.5 // 4. 使能ADC开启DMA请求 ADC1-CR2 | ADC_CR2_ADON | ADC_CR2_DMA | ADC_CR2_CONT; // CONT1表示连续转换DMA1表示使能DMA请求第四步启动转换// 开始第一次转换软件触发 ADC1-CR2 | ADC_CR2_SWSTART; // 此时DMA已自动启动ADC每完成一次转换 // 就会将DR寄存器值通过DMA搬入adc_buffer4.3 中断服务程序如何优雅地处理1024个数据DMA传输完成中断TCIF0的ISR必须极致精简避免引入额外延迟void DMA2_Stream0_IRQHandler(void) { // 1. 清除传输完成标志写1清除 DMA2-LIFCR DMA_LIFCR_CTCIF0; // 2. 关键在此处处理数据但绝不做耗时操作 // 错误示范printf(Data ready!); // 串口打印会阻塞 // 正确做法置位全局标志由主循环处理 adc_dma_complete_flag 1; // 3. 如果需要连续采集可在此重新配置NDTR并启动 // DMA2_Stream0-NDTR 1024; // 重载计数 // DMA2_Stream0-CR | DMA_SxCR_EN; // 重新使能 }实操心得在一次医疗设备项目中客户要求10kHz采样率下数据必须在1ms内完成FFT运算并显示。我最初在DMA中断里直接调用FFT函数结果发现每次中断耗时超过800us严重超时。后来改为“双缓冲后台线程”DMA配置为循环模式使用两个1024字节缓冲区Buffer A/B当DMA填满A时触发中断立即切换到B并唤醒RTOS任务在后台处理A的数据。这样中断服务程序10usFFT在任务中从容执行完美达标。5. 常见问题排查与避坑指南那些让你熬夜到凌晨三点的DMA故障DMA看似简单实则暗礁密布。每一个看似微小的配置错误都可能引发难以复现的偶发性故障。以下是我在十年硬件调试中踩过的最深、最痛的五个坑。5.1 故障现象DMA传输数据全为0xFF或0x00且无中断排查思路这几乎100%是地址配置错误。DMA控制器无法正确访问外设寄存器或内存。检查点1外设地址是否正确STM32的ADC_DR地址是0x4001204C但如果你误写成0x40012040ADC_SR地址DMA就会读取状态寄存器而状态寄存器的高8位通常是0xFF导致数据全为0xFF。用逻辑分析仪抓取PAR地址线确认是否真的输出了0x4001204C。检查点2内存地址是否对齐ARM Cortex-M要求16位数据访问必须2字节对齐32位数据必须4字节对齐。若adc_buffer定义为uint16_t adc_buffer[1024]其地址天然2字节对齐但若定义为char buffer[2048]再强制转换为uint16_t*则可能不对齐。编译器通常会警告但若忽略DMA读取会失败。解决方案使用__attribute__((aligned(4)))强制对齐。检查点3时钟是否使能最低级也最常犯的错误忘了使能DMA或ADC的时钟检查RCC-AHB1ENR和RCC-APB2ENR对应位是否为1。用J-Link Debugger直接读取这些寄存器比猜强一万倍。5.2 故障现象DMA传输速率远低于理论值CPU占用率异常高根源分析这指向总线竞争或配置不当。场景1DMA与CPU争抢Flash访问在STM32F4中Flash和SRAM共享同一个总线矩阵Bus Matrix。若DMA正在从SRAM搬运数据而CPU恰好要执行位于Flash的代码如中断服务程序两者会相互阻塞。解决方案将关键的ISR代码复制到SRAM中执行使用__attribute__((section(.ramcode)))或启用ART加速器Adaptive Real-Time Accelerator。场景2DMA突发长度MBURST/PBURST设置过大若将MBURST设为0b1116拍突发但内存控制器如FMC不支持会导致总线超时DMA自动降级为单次传输效率暴跌。查阅芯片手册的“DMA章节”和“Memory Controller章节”确认双方支持的突发长度。STM32F407的DMA2 Stream0支持1/4/8/16拍突发但FMC SDRAM接口仅支持1/4/8拍。5.3 故障现象DMA传输过程中其他外设如UART通信紊乱核心原因Cache一致性问题仅限Cortex-M7/M4等带Cache的内核这是高级玩家才会遇到的“幽灵故障”。当DMA将数据写入内存而CPU的Data Cache中仍缓存着该内存区域的旧值后续CPU读取时就会得到错误数据。反之若CPU先修改了Cache中的数据DMA再从内存读取也会得到旧值。终极解决方案禁用Data Cache在嵌入式系统中若对性能要求不高最简单的方法是在启动代码中关闭D-Cache。Cache维护操作在DMA传输前后执行Cache清理Clean和无效化Invalidate// DMA传输前确保CPU修改已写回内存 SCB_CleanDCache_by_Addr((uint32_t*)adc_buffer[0], sizeof(adc_buffer)); // DMA传输后使CPU从内存重新读取最新数据 SCB_InvalidateDCache_by_Addr((uint32_t*)adc_buffer[0], sizeof(adc_buffer));注意SCB_CleanDCache_by_Addr要求地址和长度均为32字节对齐否则需手动对齐处理。5.4 故障现象DMA传输偶尔丢失几个字节或数据错位罪魁祸首外设FIFO未清空或DMA请求信号抖动ADC案例某些ADC在转换完成后DR寄存器数据会保持直到被读取。若DMA读取稍慢新数据覆盖旧数据导致丢失。解决方案在ADC配置中确保EOCEnd of Conversion标志被及时清除或使用OVREOverrun标志监控溢出。UART案例UART发送寄存器空TXE信号可能存在毛刺。若DMA在毛刺期间启动会误触发一次传输。解决方案在DMA配置中启用“请求使能”EN位并在外设初始化时先读取一次状态寄存器以稳定信号。5.5 故障现象系统在DMA高负载下随机死机或跑飞深层原因堆栈溢出或中断优先级配置错误堆栈溢出DMA中断服务程序虽短但若开启了浮点运算FPU且未在中断入口保存FPU寄存器会导致堆栈被意外覆盖。检查启动文件中__initial_sp的值并在调试器中观察SP寄存器变化。中断优先级若DMA中断如DMA2_Stream0_IRQn的优先级低于SysTick或PendSV可能导致RTOS调度器无法及时响应系统僵死。在STM32CubeMX或手动配置中确保DMA中断优先级高于所有可能被它打断的中断。实操总结我整理了一份《DMA故障速查表》放在项目Wiki首页新同事入职第一周必须背熟。其中第一条就是“当DMA不工作请先用万用表量一下RCC-AHB1ENR的bit21DMA2EN是否为高电平。”——最简单的检查往往解决80%的问题。6. DMA的现代演进从独立芯片到SoC集成再到AI时代的异构计算DMA技术从未停滞。从80年代的Intel 8237独立芯片到90年代集成在南桥的PCI DMA控制器再到今天SoC中无处不在的DMA引擎其形态与内涵都在深刻进化。6.1 SoC中的DMA不再是“一个模块”而是“一张网络”在Xilinx Zynq UltraScale MPSoC中DMA已演变为一个复杂的互联网络PS端Processing System集成多个AXI DMA引擎支持Scatter-Gather分散-聚集模式可将不连续的内存块如TCP/IP协议栈的sk_buff拼接成一个逻辑连续的数据流直接发送给以太网MAC。PL端Programmable Logic用户可在FPGA逻辑中例化AXI CDMAChannel DMA或AXI VDMAVideo DMA后者专为视频流优化支持帧缓冲、缩放、色彩空间转换等硬件加速。关键创新Zero-CopyLinux内核的dma_map_single()函数不再简单地映射物理地址而是与IOMMUInput-Output Memory Management Unit协同为DMA设备创建一个“IO虚拟地址”IOVA。设备驱动直接使用IOVAIOMMU硬件自动完成IOVA到物理地址的翻译。这使得用户空间应用如DPDK能绕过内核协议栈直接将网卡收到的数据包DMA到应用内存实现真正的零拷贝将网络吞吐提升至40Gbps以上。6.2 AI加速器中的DMA数据搬运决定AI模型的生死在NVIDIA GPU中DMA的角色已升维为数据编排中枢。一个典型的CUDA kernel执行流程Host CPU调用cudaMemcpyAsync()触发PCIe DMA引擎将模型权重从Host RAM搬运到GPU显存HBMGPU的L2 Cache控制器通过内部DMA称为“Graphics DMA”或“NVLINK DMA”将权重从HBM预取到L2 CacheSMStreaming Multiprocessor单元内的Load/Store单元再通过更细粒度的“Shared Memory DMA”将数据从L2 Cache搬运到SM的Shared Memory供线程块使用性能瓶颈AI训练中90%的时间并非消耗在矩阵乘法上而是消耗在数据搬运上。因此NVIDIA A100引入了NVLink 3.0 HBM2e将GPU间带宽提升至600GB/sAMD MI250X则采用Infinity Fabric实现CPU-GPU统一内存寻址让DMA操作近乎透明。6.3 对考研与职业发展的启示为什么408考生必须吃透DMA回到标题中的“计算机408计算机组成原理”DMA是408统考中承上启下的核心枢纽向上衔接它是理解“存储器层次结构”Cache、主存、辅存的关键实例——DMA绕过Cache直接访问主存迫使你思考Cache一致性的必要性。向下延伸它是学习“操作系统I/O子系统”的前置知识——Linux的block layer、Windows的WDM驱动模型其底层都依赖DMA引擎。横向贯通它与“总线系统”ISA、PCIe、“中断系统”、“实时系统调度”紧密耦合。我辅导的学生中凡是能把DMA的时序图默画出来、能手算出中断方式与DMA方式的性能比值如2024年第45题给定CPU频率、总线频率、中断开销求DMA节省的CPU时间百分比、能说出“为什么USB 3.0需要DMA而USB 2.0可不用”的408专业课分数基本稳定在120。因为这代表他已超越死记硬背进入了系统级思维。最后分享一个小技巧下次看到任何高速外设SSD、GPU、FPGA第一时间问自己“它的数据是怎么进来的CPU参与搬运了吗如果没参与DMA控制器在哪里它和CPU的内存是如何协同的”——这个问题会带你穿透所有技术表象直抵计算机体系结构的本质。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

电子商务网站建设心得对比评测 2026/9/27 12:27:00

电子商务网站建设心得对比评测

电商建站心得:搞定备案与源码下载,筑牢安全防线 做电商网站,最让人头大的是什么?不是选品,也不是设计,而是 备案流程一头雾水…

阅读更多 →
程序员必学!大模型+Agent=未来?一文带你掌握AI智能体开发核心技术,附腾讯Dola实战案例与TaoToken配置 2026/9/27 12:26:54

程序员必学!大模型+Agent=未来?一文带你掌握AI智能体开发核心技术,附腾讯Dola实战案例与TaoToken配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
软件环境配置与 Git 操作:用 TaoToken 统一 Key 打通 Cline 与 Gitee 工作流 2026/9/27 12:26:54

软件环境配置与 Git 操作:用 TaoToken 统一 Key 打通 Cline 与 Gitee 工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Agent Skills 实战:用 SKILL.md 与 CLI 给 AI Agent 装上可复用超能力 2026/9/27 12:26:54

Agent Skills 实战:用 SKILL.md 与 CLI 给 AI Agent 装上可复用超能力

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
成都企业网站备案流程要多久多少钱避坑指南 2026/9/27 12:26:54

成都企业网站备案流程要多久多少钱避坑指南

成都企业网站备案流程要多久多少钱避坑指南 网站被黑挂马,浏览器弹出一串乱码或跳转博彩链接,你慌了。别急着重装系统,先检查你的 ICP 备案状态和服务器安全策略。很多老板觉得备案就是填个表,其实 成都企业网站备案流程…

阅读更多 →
AI Agent Harness Engineering 个性化定制:用 LoRA 与微调打造领域智能体的 config.toml 骨架 2026/9/27 12:26:47

AI Agent Harness Engineering 个性化定制:用 LoRA 与微调打造领域智能体的 config.toml 骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉