the39zero-copy39initiative(编辑修改稿)内容摘要:
packetbuffer in kernelspace Splitting our packetbuffer destnaddress sourceaddress TYPE/ LENGTH count data data data – baseaddress (64bits) status Packet Length (=HDR) special CSS cmd EOP=0 CSO Format for Legacy TransmitDescriptor Pair baseaddress (64bits) status Packet Length (=LEN) special CSS cmd EOP=1 CSO HDR LEN Two physical packetbuffers prise one logical packet that gets transmitted! Transmitting a „splitpacket‟ NIC hardware Devicedriver module Applicationprogram Userspace Kernelspace packetdata buffer packetheader buffer DMA DMA The 82573L controller ‘merges’ the contents of these separate buffers into just a single etherpacket The „virt_to_phys()’ macro • Linux provides a convenient macro which kernelmodule code can employ to obtain the physicaladdress for a memoryregion from its virtualaddress – but it only works for addresses that aren‟t in „high‟ memory • For „normal‟ memoryregions, conversion between „virtual‟ and „physical‟ addresses amounts to a simple addition/subtraction Linux memorymapping user space kernel space CPU’s virtual addressspace HMA 896MB physical RAM There is more physical RAM in our classroom‟s systems than can be „mapped‟ into the available addressrange for kernel virtual addresses = persistent mapping = transient mappings TwoLevel Translation Scheme PAGE DIRECTORY CR3 PAGE TABLES PAGE FRAMES Linear to Physical physical addressspace offset tableindex linear address CR3 dirindex page frame page directory page table Addresstranslation • Th。the39zero-copy39initiative(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。