计算机存储 和 零拷贝

1 读写速度

DDR4 50G/S > DDR3 10G/S > SSD 300M/S > HDD 100M/S

2 内存映射

物理内存 -> 物理内存地址 -> 虚拟内存地址-> MMU(Memory Management Unit) in CPU

3 内存使用

读共享,写复制,内存不够,虚拟磁盘

4 映射过程

CPU->寄存器->MMU->TLB缓存近期访问的PTE->主存的虚拟页表->物理内存页号PPN+VPO->物理内存

5 页表

页表->页(4096字条4K,不固定具体看系统)->页表条目PTE(有效位+PPN Physical Page Number)

6 PTE 有效位标:

1 【1】虚拟内存已创建和分配页,已缓存在物理内存(或TLB-Cache)中。

2 【0】虚拟内存还未分配或创建。

3 【0】虚拟内存已创建和分配页,但未缓存在物理内存(或TLB-Cache)中。

7 程序->CPU->寄存器->CREATE VA(VPN虚拟页号+ VPO虚拟偏移量)->MMU->PTE(FIRST SEARCH TLB)

->PTE(有效位1命中)->PA Physical Address(PPN * 页长度4K + VPO)->物理内存->DONE

->PTE(有效位未命中)->exception->sys catch->repair->goto PTE 1

零拷贝

用户空间 -> 内核空间 -> 硬件

正常IO过程需要进行两次DMA拷贝,两次CPU拷贝,四次上下文切换。

零拷贝主要是通过减少拷贝次数,提高性能。

mmap

映射内核缓冲区数据,减少一次内核缓冲区到用户的CPU拷贝

sendfile

减少一次内核缓冲区到用户的CPU拷贝,只有一次系统调用,减少了两次上下文切换

相关推荐
Jelena157795857922 分钟前
Java爬虫淘宝拍立淘item_search_img拍接口示例代码
开发语言·python
郝学胜-神的一滴15 分钟前
Python数据模型:深入解析及其对Python生态的影响
开发语言·网络·python·程序人生·性能优化
一水鉴天22 分钟前
整体设计 定稿 之26 重构和改造现有程序结构 之2 (codebuddy)
开发语言·人工智能·重构·架构
star _chen1 小时前
C++ std::move()详解:从小白到高手
开发语言·c++
lzhdim1 小时前
C#开发者必知的100个黑科技(前50)!从主构造函数到源生成器全面掌握
开发语言·科技·c#
福尔摩斯张1 小时前
C++核心特性精讲:从C语言痛点出发,掌握现代C++编程精髓(超详细)
java·linux·c语言·数据结构·c++·驱动开发·算法
刺客xs1 小时前
Qt----事件简述
开发语言·qt
程序员-King.1 小时前
【Qt开源项目】— ModbusScope-进度规划
开发语言·qt
hgz07101 小时前
Linux服务器环境部署与JMeter压测准备
linux·服务器·jmeter
syt_10131 小时前
Object.defineProperty和Proxy实现拦截的区别
开发语言·前端·javascript