计算机存储 和 零拷贝

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

相关推荐
paterWang2 小时前
基于 Python 和 OpenCV 的酒店客房入侵检测系统设计与实现
开发语言·python·opencv
A ?Charis2 小时前
k8s-对接NFS存储
linux·服务器·kubernetes
东方佑2 小时前
使用Python和OpenCV实现图像像素压缩与解压
开发语言·python·opencv
我真不会起名字啊2 小时前
“深入浅出”系列之杂谈篇:(3)Qt5和Qt6该学哪个?
开发语言·qt
laimaxgg2 小时前
Qt常用控件之单选按钮QRadioButton
开发语言·c++·qt·ui·qt5
水瓶丫头站住3 小时前
Qt的QStackedWidget样式设置
开发语言·qt
小钊(求职中)4 小时前
Java开发实习面试笔试题(含答案)
java·开发语言·spring boot·spring·面试·tomcat·maven
DC_BLOG5 小时前
Linux-GlusterFS进阶配置
linux·运维·服务器
慕诗客5 小时前
QT基于Gstreamer采集的简单示例
开发语言·qt
Blasit5 小时前
C++ Qt建立一个HTTP服务器
服务器·开发语言·c++·qt·http