存储介质的性能话不多说,先看一张图,下图左边是磁盘到内存的不同介质,右边形象地描述了每种介质的读写速率 。一句话总结就是越靠近cpu,读写性能越快 。了解了不同硬件介质的读写速率后,你会发现零拷贝技术是多么的香,对于追求极致性能的读写系统而言,掌握这个技术是多么的优秀~
文章插图
上图是当前主流存储介质的读写性能,从磁盘到内存、内存到缓存、缓存到寄存器,每上一个台阶,性能就提升10倍 。如果我们打开一个文件去读里面的内容,你会发现时间读取的时间是远大于磁盘提供的这个时延的,这是为什么呢?问题就在内核态和用户态这2个概念后面深藏的I/O逻辑作怪 。
内核态和用户态内核态:也称为内核空间 。cpu可以访问内存的所有数据,还控制着外围设备的访问,例如硬盘、网卡、鼠标、键盘等 。cpu也可以将自己从一个程序切换到另一个程序 。
用户态:也称为用户空间 。只能受限的访问内存地址,cpu资源可以被其他程序获取 。
文章插图
计算机资源的管控范围
坦白地说内核态就是一个高级管理员,它可以控制整个资源的权限,用户态就是一个业务,每个人都可以使用它 。那计算机为啥要这么分呢?且看下文......
由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络 。CPU划分出两个权限等级:用户态和内核态 。
32 位操作系统和 64 位操作系统的虚拟地址空间大小是不同的,在 linux 操作系统中,虚拟地址空间的内部又被分为内核空间和用户空间两部分,如下所示:
文章插图
通过这里可以看出:
- 32 位系统的内核空间占用 1G,位于最高处,剩下的 3G 是用户空间;
- 64 位系统的内核空间和用户空间都是 128T,分别占据整个内存空间的最高和最低处,剩下的中间部分是未定义的 。
从用户态到内核态切换可以通过三种方式:
- 系统调用,其实系统调用本身就是中断,但是软件中断,跟硬中断不同 。
- 异常:如果当前进程运行在用户态,如果这个时候发生了异常事件,就会触发切换 。例如:缺页异常 。
- 外设中断:当外设完成用户的请求时,会向CPU发送中断信号 。
文章插图
- 计算机A的进程a先要通过系统调用Read(内核态)打开一个磁盘上的文件,这个时候就要把数据copy一次到内核态的PageCache中,进入了内核态;
- 进程a负责将数据从内核空间的 Page Cache 搬运到用户空间的缓冲区,进入用户态;
- 进程a负责将数据从用户空间的缓冲区搬运到内核空间的 Socket(资源由内核管控) 缓冲区中,进入内核态 。
- 进程a负责将数据从内核空间的 Socket 缓冲区搬运到的网络中,进入用户态;
- read 系统调用读磁盘上的文件时:用户态切换到内核态;
- read 系统调用完毕:内核态切换回用户态;
- write 系统调用写到socket时:用户态切换到内核态;
- write 系统调用完毕:内核态切换回用户态 。
- CPU 全程负责内存内的数据拷贝,参考磁盘介质的读写性能,这个操作是可以接受的,但是如果要让内存的数据和磁盘来回拷贝,这个时间消耗就非常的难看,因为磁盘、网卡的速度远小于内存,内存又远远小于 CPU;
- 4 次 copy + 4 次上下文切换,代价太高 。
推荐阅读
- 高质量发展|求职者都带简历了,为什么HR还要让你填表?一文讲透了
- 辟谣:猫咪的语言是喵?教你读懂“猫言猫语”,让你明白猫的内心
- 有糖尿病究竟还能不能吃水果了?怎么吃比较合理?医生一文讲清
- 庄家洗盘洗多久才拉升?散户还想一卖就飞吗?一文掌握洗盘特征!
- 到底是普通痣?还是黑色素瘤?医生一文助您自检
- 香港24小时丨香港9月1日发生了什么?一文速览
- 教你读懂医生的职称 研究员职称
- 万字长文读懂直播:很多人没明白直播带货到底要做什么?
- Win10如何修改电脑用户名? 电脑用户名
- 电脑分辨率多少合适 电脑分辨率