内核态 & 用户态 内核空间 & 用户空间

当进程运行在内核空间时,它就处于内核态;当进程运行在用户空间时,它就处于用户态

内核态 & 用户态【OS】

参考链接

怎样去理解Linux用户态和内核态?

IO 系列——用户空间与内核空间

现代计算机是由硬件、操作系统组成,操作系统通过内核与硬件交互

当需要 进行IO操作 时,如读写硬盘文件、读写网卡数据等,进程需要 切换到内核态,否则无法进行这样的操作
无论是从内核态切换到用户态,还是从用户态切换到内核态,都需要进行一次 上下文的切换
一般情况下,应用不能直接 操作 内核空间的数据,需要把内核态的数据拷贝到用户空间才能操作

在这里插入图片描述

在这里插入图片描述

内核态

  • 内核提供进程管理、内存管理、网络等底层功能,封装了与硬件交互的接口,通过系统调用提供给上层应用使用
  • 内核是一种特殊的软件程序:控制计算机的硬件资源
    • 例如协调CPU资源,分配内存资源,并且提供稳定的环境供应用程序运行

用户态

  • 提供应用程序运行的空间,为了使应用程序访问到内核管理的资源 例如CPU,内存,I/O

内核空间 & 用户空间【内存】

参考链接

用户空间和内核空间之间有什么区别?

IO 模型知多少 | 理论篇

  • 为了确保操作系统的安全稳定运行,操作系统启动后,将会开启保护模式:将内存分为内核空间(内核对应进程所在内存空间)和用户空间,进行内存隔离
  • 构建的 程序将运行在用户空间,用户空间无法操作内核空间,也就意味着用户空间的程序不能直接访问由内核管理的I/O,比如:硬盘、网卡等
  • 操作系统向外提供API,其由各种类型的 系统调用 (System Call)组成,以提供安全的访问控制
  • 应用程序要想访问内核管理的I/O,必须通过调用内核提供的系统调用(system call)进行间接访问

I/O之于应用程序来说,强调的通过向内核发起系统调用完成对I/O的间接访问。换句话说应用程序发起的一次IO操作实际包含两个阶段:

IO调用阶段:应用程序进程向内核发起系统调用
IO执行阶段:内核执行IO操作并返回

  1. 准备数据阶段:内核等待I/O设备准备好数据
  2. 拷贝数据阶段:将数据从内核缓冲区拷贝到用户空间缓冲区

sum

由于CPU某些指令比较危险,如果错用会导致系统崩溃,为了保护系统,操作系统将内存空间划分为了两部分:

  • 用户空间:正常用户进程运行的一组位置(即除内核之外的所有内容)
    • 在用户空间下运行的进程 只能访问内存的有限部分
    • 用户空间进程 只能通过内核公开的接口(系统调用)访问内核的一小部分
  • 内核空间:存储内核代码并在其下执行的位置
    • 内核可以 访问所有内存
    • 作用:管理用户空间 中运行的应用程序,避免彼此和机器混乱

IO示例

假如有一个网络请求想访问服务器上的某个静态文件,具体IO流程:
在这里插入图片描述
整个过程如下:

进程发起一个系统调用sys_read,读取磁盘的文件;

DMA将磁盘文件数据拷贝到内核空间的read缓冲区;

CPU把内核空间read缓冲区数据拷贝到用户空间的缓冲区;

进程发起一个系统调用socket_write,向网卡写数据;

CPU把用户空间缓冲区的数据拷贝到内核空间的socket缓冲区;

最后DMA把内核空间的socket缓冲区数据拷贝到网卡;

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值