计算机存储 和 零拷贝

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

相关推荐
花嫁代二娃27 分钟前
Linux:环境变量
linux
nbsaas-boot1 小时前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql
chao_7891 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
风无雨2 小时前
GO 启动 简单服务
开发语言·后端·golang
斯普信专业组2 小时前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang
我是苏苏4 小时前
C#基础:Winform桌面开发中窗体之间的数据传递
开发语言·c#
斐波娜娜4 小时前
Maven详解
java·开发语言·maven
小码氓4 小时前
Java填充Word模板
java·开发语言·spring·word
暮鹤筠5 小时前
[C语言初阶]操作符
c语言·开发语言
l1x1n06 小时前
Vim 编辑器常用操作详解(新手快速上手指南)
linux·编辑器·vim