计算机存储 和 零拷贝

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

相关推荐
白云~️几秒前
uniappX 移动端单行/多行文字隐藏显示省略号
开发语言·前端·javascript
编码浪子6 分钟前
构建一个rust生产应用读书笔记7-确认邮件2
开发语言·后端·rust
天之涯上上21 分钟前
JAVA开发 在 Spring Boot 中集成 Swagger
java·开发语言·spring boot
2402_8575834922 分钟前
“协同过滤技术实战”:网上书城系统的设计与实现
java·开发语言·vue.js·科技·mfc
爱学习的白杨树29 分钟前
MyBatis的一级、二级缓存
java·开发语言·spring
OTWOL34 分钟前
两道数组有关的OJ练习题
c语言·开发语言·数据结构·c++·算法
花姐夫Jun38 分钟前
在 CentOS 8 系统上安装 Jenkins 的全过程
linux·centos·jenkins
问道飞鱼38 分钟前
【前端知识】强大的js动画组件anime.js
开发语言·前端·javascript·anime.js
拓端研究室38 分钟前
R基于贝叶斯加法回归树BART、MCMC的DLNM分布滞后非线性模型分析母婴PM2.5暴露与出生体重数据及GAM模型对比、关键窗口识别
android·开发语言·kotlin
Code成立39 分钟前
《Java核心技术I》Swing的网格包布局
java·开发语言·swing