计算机存储 和 零拷贝

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拷贝,只有一次系统调用,减少了两次上下文切换

相关推荐
像风一样自由20202 分钟前
Rust Tokio vs Go net/http:云原生与嵌入式生态选型指南
开发语言·golang·rust
DuHz4 分钟前
C程序中的数组与指针共生关系
linux·c语言·开发语言·嵌入式硬件·算法
我星期八休息8 分钟前
C++智能指针全面解析:原理、使用场景与最佳实践
java·大数据·开发语言·jvm·c++·人工智能·python
shuair11 分钟前
mysql8支持远程访问 -mysql5.7支持远程访问
linux·mysql
大猫会长12 分钟前
docker安装php+apache
java·开发语言
道之极万物灭26 分钟前
Go小工具合集
开发语言·后端·golang
梵得儿SHI36 分钟前
Java 反射机制深度剖析:性能与安全性的那些坑
java·开发语言·安全·反射·动态代理·性能·反射机制
fsnine42 分钟前
Python图形化界面——pyqt5教程
开发语言·python·qt
嵌入式-老费1 小时前
Easyx图形库应用(和lua结合使用)
开发语言·lua
AsiaLYF1 小时前
kotlin中MutableStateFlow和MutableSharedFlow的区别是什么?
android·开发语言·kotlin