redis自学(13)用户空间和内核空间
服务器大多采用Linux系统,所以以Linux为例:
任何Linux发行版,其系统内核都是Linux。我们的应用都需要通过Linux内核与硬件交互。
用户应用是无法直接访问计算机硬件,只能访问内核,基于内核操作计算机硬件
为了避免用户应用导致冲突甚至内核崩溃,用户应用与内核是分离的:
l 进程的寻址空间会划分为两部分:内核空间、用户空间(32位的系统,它的寻址空间是2的32次方,也就是4GB)
l 用户空间只能执行受限的命令(Ring3),而且不能直接调用系统资源,必须通过内核提供的接口来访问
l 内核空间可以执行特权命令(Ring0),调用一切系统资源
Linux系统为了提高IO效率,会在用户空间和内核空间都加入缓冲区:
l 写数据时,要把用户缓冲数据拷贝到内核缓冲区,然后写入设备
l 读数据时,要从设备(磁盘或网卡,或者说本地或网络)读取数据到内核缓冲区,然后拷贝到用户缓冲区
IO读写效率不好就因为这个,读要用户态切换到内核态,然后等待硬件的数据存入内核态的缓冲区,然后内核态的缓冲区要复制到用户态的缓冲区。反过来,写要先写入用户态的缓冲区,然后存到内核态的缓冲区,最后存入硬件。
因此提高IO的效率,主要是两个点
- 减少无效等待的时间
- 减少用户态和内核态缓冲区的数据拷贝
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话