Redis入门到通关之Redis网络模型-用户空间和内核态空间

文章目录



在这里插入图片描述

欢迎来到 请回答1024 的博客

🍓🍓🍓欢迎来到 请回答1024的博客

关于博主: 我是 请回答1024,一个追求数学与计算的边界、时间与空间的平衡,0与1的延伸的后端开发者。

博客特色: 在我的博客中,开设了如下专栏(点击可以进入专栏奥~): JavaMySQLRedisSpringSpringBootSpringCloudRabbitMQ微服务分布式 等相关技术专栏。期待与您一起,探索编程世界中的发现和创新之旅。

🍎🍎🍎我的主页 : https://reply1024.blog.csdn.net

敬请期待定期更新、见解和教程!让我们一起踏上这段编码冒险之旅!

数学与计算的边界 时间与空间的平衡 0与1的延伸

用户空间和内核态空间

服务器大多都采用Linux系统,这里我们以Linux为例来讲解:

ubuntuCentos 都是 Linux 的发行版,发行版可以看成对 linux 包了一层壳,任何 Linux 发行版,其系统内核都是 Linux。我们的应用都需要通过 Linux 内核与硬件交互

在这里插入图片描述

用户的应用,比如redis,mysql等其实是没有办法去执行访问我们操作系统的硬件的,所以我们可以通过发行版的这个壳子去访问内核,再 通过内核去访问计算机硬件

在这里插入图片描述

计算机硬件包括,如cpu,内存,网卡等等,内核(通过寻址空间)可以操作硬件的,但是内核需要不同设备的驱动,有了这些驱动之后,内核就可以去对计算机硬件去进行 内存管理,文件系统的管理,进程的管理等等

在这里插入图片描述

我们想要用户的应用来访问,计算机就必须要通过对外暴露的一些接口,才能访问到,从而简介的实现对内核的操控,但是内核本身上来说也是一个应用,所以他本身也需要一些内存,cpu等设备资源,用户应用本身也在消耗这些资源,如果不加任何限制,用户去操作随意的去操作我们的资源,就有可能导致一些冲突,甚至有可能导致我们的系统出现无法运行的问题,因此我们需要把用户和内核隔离开

进程的寻址空间划分成两部分:内核空间、用户空间

什么是寻址空间呢?我们的应用程序也好,还是内核空间也好,都是没有办法直接去物理内存的,而是通过分配一些虚拟内存映射到物理内存中,我们的内核和应用程序去访问虚拟内存的时候,就需要一个虚拟地址,这个地址是一个无符号的整数,比如一个32位的操作系统,他的带宽就是32,他的虚拟地址就是2的32次方,也就是说他寻址的范围就是0~2的32次方, 这片寻址空间对应的就是2的32个字节,就是4GB,这个4GB,会有3个GB分给用户空间,会有1GB给内核系统

在这里插入图片描述

在linux中,他们权限分成两个等级,0和3,用户空间只能执行受限的命令(Ring3),而且不能直接调用系统资源,必须通过内核提供的接口来访问内核空间可以执行特权命令(Ring0),调用一切系统资源,所以一般情况下,用户的操作是运行在用户空间,而内核运行的数据是在内核空间的,而有的情况下,一个应用程序需要去调用一些特权资源,去调用一些内核空间的操作,所以此时他俩需要在用户态和内核态之间进行切换。

比如:

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

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

读数据时,要从设备读取数据到内核缓冲区,然后拷贝到用户缓冲区

针对这个操作:我们的用户在写读数据时,会去向内核态申请,想要读取内核的数据,而内核数据要去等待驱动程序从硬件上读取数据,当从磁盘上加载到数据之后,内核会将数据写入到内核的缓冲区中,然后再将数据拷贝到用户态的buffer中,然后再返回给应用程序,整体而言,速度慢,就是这个原因,为了加速,我们希望read也好,还是wait for data也最好都不要等待,或者时间尽量的短。


在这里插入图片描述


在这里插入图片描述



相关推荐

  1. 驱动开发-用户空间内核空间数据传输

    2024-04-25 14:16:03       34 阅读
  2. LDD学习笔记 -- 用户空间 & 内核空间

    2024-04-25 14:16:03       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 14:16:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 14:16:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 14:16:03       82 阅读
  4. Python语言-面向对象

    2024-04-25 14:16:03       91 阅读

热门阅读

  1. Debian常用命令

    2024-04-25 14:16:03       28 阅读
  2. 实时交互新篇章:WebSocket在Flutter中的应用与实践

    2024-04-25 14:16:03       39 阅读
  3. Android retrofit使用模板

    2024-04-25 14:16:03       148 阅读
  4. Qt相关开源项目总结

    2024-04-25 14:16:03       35 阅读
  5. QT5.12.12配置MSVC2017编译器环境

    2024-04-25 14:16:03       163 阅读
  6. Qt: windows下关闭系统窗体

    2024-04-25 14:16:03       38 阅读
  7. springBoot Event实现异步消费机制

    2024-04-25 14:16:03       168 阅读
  8. 富格林:警觉诱导黑幕避免亏损

    2024-04-25 14:16:03       35 阅读
  9. mybatis-plus 动态表名简易使用

    2024-04-25 14:16:03       39 阅读