redis自学(13)用户空间和内核空间

服务器大多采用Linux系统,所以以Linux为例:

任何Linux发行版,其系统内核都是Linux。我们的应用都需要通过Linux内核与硬件交互。

 

 

用户应用是无法直接访问计算机硬件,只能访问内核,基于内核操作计算机硬件

 

 

为了避免用户应用导致冲突甚至内核崩溃,用户应用与内核是分离的:

进程的寻址空间会划分为两部分:内核空间、用户空间(32位的系统,它的寻址空间是232次方,也就是4GB)

 

 

用户空间只能执行受限的命令(Ring3,而且不能直接调用系统资源,必须通过内核提供的接口来访问

内核空间可以执行特权命令(Ring0,调用一切系统资源

 

Linux系统为了提高IO效率,会在用户空间和内核空间都加入缓冲区:

l 写数据时,要把用户缓冲数据拷贝到内核缓冲区,然后写入设备

l 读数据时,要从设备(磁盘或网卡,或者说本地或网络)读取数据到内核缓冲区,然后拷贝到用户缓冲区

 

 

IO读写效率不好就因为这个,读要用户态切换到内核态,然后等待硬件的数据存入内核态的缓冲区,然后内核态的缓冲区要复制到用户态的缓冲区。反过来,写要先写入用户态的缓冲区,然后存到内核态的缓冲区,最后存入硬件。

因此提高IO的效率,主要是两个点

  1. 减少无效等待的时间
  2. 减少用户态和内核态缓冲区的数据拷贝
posted @ 2024-03-07 14:35  蓝海的bug本  阅读(17)  评论(0编辑  收藏  举报