操作系统用户态和核心态和CPU上下文切换

2023-10-30

操作系统用户态和核心态

用户态和核心态

 
操作系统两种状态:用户态和内核态。
操作系统的用户态和内核态是操作系统的两种运行状态,出现这两种状态的原因主要是为了对访问能力进行限制,用户态的权限较低,而内核态的权限较高。

  • 用户态:用户态允许的程序只能受限访问内存,只能读取用户程序的数据,也就是处于用户态的CPU只能受限访问内存,并且不允许访问外围设备(包括网卡,硬盘等),用户态下CPU不允许独占,也就是说CPU能够被其他程序获取。
  • 内核态:内核态允许的程序可以访问计算机的任何数据和资源,不受限制,包括外围设备,也就是处于内核态的CPU能访问任意数据,包括外围设备,处于内核态的CPU可以从一个程序切换到另一个程序,并且不会发生CPU抢占的情况。
     

  当应用程序需要访问操作系统提供的资源或者执行一些特权操作时,需要从用户态切换到内核态,由操作系统内核来完成相应的操作。用户态下的应用程序只能访问自己的内存空间和一些受限的资源,不能直接访问操作系统资源的外围设备(包括网卡,硬盘等),也不能指向特权操作。用户态和内核态之间的切换需要一定的时间和资源,因此应该尽量减少切换次数,来提高系统的性能和稳定性。
 

操作系统用户态和核心态是如何交换的

 
  用户态和内核态的交换是通过系统调用(System Call)来实现的,当应用程序需要访问系统提供的资源或执行特权操作时,它会通过系统调用请求操作系统内核来完成相应的操作,系统调用是一种特殊的函数调用,它可以将应用程序从用户态切换到内核态,并将控制器交给操作系统内核。内核态下的操作系统内核会执行相应操作,并将结果返回给应用程序。完成操作后,操作系统内核将控制器重新交回应用程序,使其回到用户态。
  系统调用是用户态和内核态之间重要的接口,也是应用程序访问操作系统资源和执行特权的唯一途径。系统调用的实现需要一定的系统资源和开销,因此它的使用应该尽量减少,以提高系统的性能和稳定性。
 

系统调用

 
从用户态到内核态的转变,需要通过系统调用来完成。比如,当我们查看文件内容时,就需要多次系统调用来完成:首先调用 open() 打开文件,然后调用 read() 读取文件内容,并调用 write() 将内容写到标准输出,最后再调用 close() 关闭文件。系统调用会将CPU从用户态切换到核心态,以便 CPU 访问受到保护的内核内存。
系统调用的过程会发生 CPU 上下文的切换,CPU 寄存器里原来用户态的指令位置,需要先保存起来。接着,为了执行内核态代码,CPU 寄存器需要更新为内核态指令的新位置。最后才是跳转到内核态运行内核任务。
而系统调用结束后,CPU 寄存器需要恢复原来保存的用户态,然后再切换到用户空间,继续运行进程。所以,一次系统调用的过程,其实是发生了两次 CPU 上下文切换。

注意:系统调用过程中,并不会涉及到虚拟内存等进程用户态的资源,也不会切换进程。
系统调用过程通常称为特权模式切换,而不是进程上下文切换。
 

CPU上下文

什么是CPU上下文和CPU上下文切换

 
  CPU寄存器包括指令寄存器和程序计数器。他们是用来暂存指令、数据和地址,以及程序运行的下一条指令的地址,这些都是任务运行时的必要环境,这些也被称为CPU 上下文。上下文切换就是把当前任务的CPU上下文保存起来,然后加载新任务的上下文到这些指令寄存器和程序计数器等寄存器中,这些被保存起来的上下文被存储到操作系统的内核中,等待任务调度执行时再次加载进来,这样就能保证任务的原来状态不受影响,让任务看起来是运行的。

 

CPU为什么要进行上下文切换

 
  当多个进程竞争CPU的时候,为了保证每个进程可以公平被CPU调用,采用处理任务按照CPU时间片的机制,当某个时间片上的任务到达最后的时间点,那么这个任务就被挂起,然后CPU处理下一个任务,由于CPU处理的速度非常快,在人类的感知上认为是并行处理的,实际上是伪并行,同一个时间只有一个任务能被CPU运行处理

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统用户态和核心态和CPU上下文切换 的相关文章

  • 终端连接控制(stty的编写)

    终端连接控制 stty的编写 一 背景 文件与目录在之前已经学习过了 文件中包含着数据 这些数据可以被读出 写入 也可以用以操作 但文件不仅仅是计算机唯一的数据来源 计算机的数据还可以来自于许多的外部设备 比如扫描仪 照相机 鼠标等输入设备
  • texlive支持中文的简单方法

    1 确保tex文件的编码方式是UTF 8 2 在文档开始处添加一行命令即可 即 usepackage UTF8 ctex 如下所示 documentclass article usepackage UTF8 ctex begin artic
  • java调优总结

    JVM调优总结 序 几年前写过一篇关于JVM调优的文章 前段时间拿出来看了看 又添加了一些东西 突然发现 基础真的很重要 学习的过程是一个由表及里 再由里及表的过程 呵呵 所谓的 温故而知新 而真正能走完这个轮回的人 也就能称为大牛或专家了
  • Linux系统的安装(在VM虚拟机上安装CentOS 7)

    工具准备 物理计算机一台 配置要求 操作系统 win10 64位 大家基本上都是 硬盘可用容量 20G以上 内存容量 4G以上 虚拟机安装包 VMware workstation full 12 5 下载链接 点我下载 提取码 9gha C
  • 计算机领域中随处可见的抽象

    想要管理多种具体的东西 那么需要遵守每种东西的规范 如果想要提供一种通用模式来对这些具体的东西统一管理 需要使用一种古老的技术 抽象 抽象是将多种具体的东西 管理时需要遵守的规范 的共同点抽取出来 放入到更高一层的抽象层 在抽象层不定义或少
  • RTX线程通信之——线程标志

    文章目录 Thread Flags 概念 RTX线程标志API 案例 LED灯同步闪亮 小结 参考资料 Thread Flags In a real application we need to be able to communicate
  • gpuz怎么看显存颗粒

    gpuz可以帮助一些用户查看电脑的一切显卡参数 对于想要了解显卡的网友来说使用起来是非常方便的 不过有些网友是刚开始使用 还不知道gpuz怎么看显存颗粒 下面小编就教下大家gpuz查看显存颗粒的方法 首先 显存颗粒是显存的物理存储组成单元
  • Linux 磁盘与文件系统管理(鸟哥私房菜)

    本文来自 http vbird dic ksu edu tw linux basic 0230filesystem php 第八章 Linux 磁盘与文件系统管理 系统管理员很重要的任务之一就是管理好自己的磁盘文件系统 每个分割槽不可太大也
  • nslookup命令详解

    nslookup命令用于查询DNS的记录 查看域名解析是否正常 在网络故障的时候用来诊断网络问题 nslookup的用法相对来说还是蛮简单的 主要是下面的几个用法 1 直接查询 这个可能大家用到最多 查询一个域名的A记录 nslookup
  • Linux,Network manager 导致节点异常重启

    推断是Network manager 导致的 原因待查今天在VmWare的虚拟机上装了个测试RAC 又遇到了一个摸不到头绪的问题CRS装好后 一旦登陆图形界面 节点就重启 事情就有这么巧不登陆图形界面 观察了1个小时没问题 一旦登陆后 立刻
  • 深入ftrace kprobe原理解析

    Linux krpobe调试技术是内核开发者专门为了编译跟踪内核函数执行状态所涉及的一种轻量级内核调试技术 利用kprobe技术 内核开发人员可以在内核的绝大多数指定函数中动态插入探测点来收集所需的调试状态信息而基本不影响内核原有的执行流程
  • 03LinuxC线程学习之线程共享和非共享

    1 线程共享和非共享 1 1 线程共享资源 1 文件描述符表 由于线程间共享进程间的内容 而文件描述符表在主线程的PCB当中 各个线程可以直接去请求访问 所以线程间通信就不需要像进程那样通过管道这些方式通信 2 每种信号的处理方式 即当某个
  • Linux系统如何看目录属于哪个磁盘分区

    Linux是先有目录 再有磁盘分区 df h 目录 例如 没有挂载磁盘的目录 显示在系统盘 root iZ2ze57v3n0zma46zqiq8nZ sh 1 5 5 df h alidata Filesystem Size Used Av
  • Windows驱动开发(一)第一个驱动程序

    首先我们需要了解 在操作系统中 是分两种权限的 一种是内核态 我们也称为0环 一种是用户态 称之为3环 而在我们的电脑中 驱动程序是运行在内核态的 这意味着和操作系统内核是在同一权限的 而普通的应用程序的权限是最低的 高权限谁不想拥有呢 因
  • Linux常用命令记录

    文章目录 1 软件安装 安装软件 来自源服务器 安装 deb软件 来自本地 deb文件 修复依赖关系 卸载软件 2 文件 文件夹操作 删除文件夹 移动文件 文件重命名 3 程序查看 处理 进程查看 查看端口占用情况 强制终止程序 4 解压文
  • 操作系统常见面试题

    1 什么是进程 Process 和线程 Thread 有何区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 进程是系统进行资源分配和调度的一个独立单位 线程是进程的一个实体 是CPU调度和分派的基本单位 它是比进程更小的能
  • java IO、NIO、AIO详解

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 IO流 同步 阻塞 二 NIO 同步 非阻塞 三 NIO2 异步 非阻塞 正文 回到顶部 概述 在我们学习Java的IO流之前 我们都要了解几个关键词 同步与异步 sy
  • 如何快速构建CMBD系统-glpi

    脚本后续更新及迭代将由kkitDeploy项目代替 https github com luckman666 kkitdeploy server 请大家持续关注kkitDeploy 一 CMBD系统构建步骤 起初 开发这套CMBD系统是为了帮
  • gdb attach 进程调试

    gdb调试正在运行的进程 GDB可以对正在执行的程序进行调度 它允许开发人员中断程序 并查看其状态 之后还能让这个程序正常地继续执行 gdb attach xxxxx xxxxx为利用ps命令获得的子进程process
  • Linux(12):磁盘配额(Quota)与进阶文件系统管理

    磁盘配额 Quota 的应用与实作 Quota 的一般用途 针对 www server 例如 每个人的网页空间的容量限制 针对 mail server 例如 每个人的邮件空间限制 针对 file server 例如 每个人最大的可用网络硬盘

随机推荐

  • C++类模板的使用

    一 基本使用 通用类型用于成员变量 通用类型用于成员函数的参数 通用类型用于成员函数的返回值 获取成员变量 通用类型用于成员函数的代码中 代码 include
  • 【计算机视觉

    文章目录 一 检测相关 6篇 1 1 ALWOD Active Learning for Weakly Supervised Object Detection 1 2 mEBAL2 Database and Benchmark Image
  • C语言六种方法求素数(质数) 最全 输出2-100以内的所有素数 求1000以内的所有素数

    方法一 挨个遍历 从1 1000都试一次 通俗易懂的方法 include
  • 优秀程序员

    优秀程序员 拷贝型 新手型 学习型 实现型 架构型 1 拷贝型 拷贝型选手就是传说中的 代码拷贝员 了 他们对实现功能几乎没有思路 所作的事情就是从网上或是之前其他团队成员写的代码中拷贝出片段 然后放到项目中 如果运行项目出现了期望结果 则
  • 闲鱼无货源新玩法,从入门到精通,由浅入深教你怎么去做

    标题 闲鱼无货源新玩法 从入门到精通 由浅入深教你如何经营成功 随着电商的兴起 许多人开始利用平台经营自己的小生意 在这篇文章中 我们将聚焦于闲鱼平台 并分享关于如何从入门到精通运营成功的闲鱼无货源新玩法 以下是一些关键词 将帮助您更好地了
  • 7-1 二叉树的基本运算 (10 分)

    本习题为二叉树的基本运算练习 要求依次实现如下功能 1 输入一个使用 括号表示法 表示的二叉树 每个节点的数据为一个字符 请使用二叉链的存储方式构建二叉树B 2 使用中序遍历法遍历构建的二叉树 输出中序遍历的序列 3 输出该二叉树的高度 深
  • 【simulink】Three-PhaseV-I Measurement(三相电压电流测量)

    三相电压测量模块 MATLAB 三相电压电流测量模块怎么用 simulink Three PhaseV I Measurement 三相电压电流测量
  • 10X Genomics单细胞转录组测序

    一 单细胞及普通转录组比较 单细胞转录组测序 scRNA seq 在单个细胞水平上构建每个细胞的基因表达谱 反映细胞异质性 发现新的细胞类型 了解细胞表达调控机制 通过选取不同时间点的样本 再进行单细胞转录组测序 能够在单细胞水平获得基因
  • Java类加载

    类加载 执行 类加载 过程 对象的创建 类加载器 双亲委派 打破双亲委派 常见以tomcat和SPI为例 tomcat SPI 执行 解释执行 or 编译执行 关于编译 JIT编译器与解释器的工作模式 JIT编译器 分层编译 热点监测 热点
  • uniapp项目中给相机相册图片添加水印功能。

    效果如图 废话不多说 直接上代码吧 哦多说一句 在使用下面组件时需要在uniapp项目中安装uView组件库uView官网 详细的安装流程可以看这篇文章uView安装教程 也可以去官网查看官方文档 上面介绍的很清楚 添加水印组件hpy wa
  • 控制科学与工程 计算机那个好,控制科学与工程(自动化)最好的94所大学排名

    控制科学与工程是工科的四大 王牌 学科之一 是除了电气工程 机械制造 土木工程 计算机科学与技术外 比较 热门 的工科专业之一 同电气工程相比 控制科学与工程更加偏向控制 自动化 现场总线以及系统集成等方向 实际上 控制科学与工程很多人可能
  • redux和react-redux结合书写计数器

    安装包 npm install redux npm install react redux npm install redux thunk 如果使用了异步action的话 需要安装 npm install antd ant design U
  • 三极管流水灯电路设计

    随着科学技术的发展 电力电子设备与人们的工作 生活的关系日益密切 各种小套件层出不穷 功能多样 本文所设计的电子制作可以说是电子初学者学习电子的最佳入门制作 其制作方式容易 趣味横生 更能提高初学者的动手能力 让初学者在制作学习中感受电子
  • java 实现a系统到b系统的跳转_A-B系统快捷的登陆的验证设计

    用户X在A系统浏览器端请求接口1要求登陆到系统B A系统检测到用户X还没有登陆到B系统的认证密钥R 于是A系统产生 TOKEN 1 让用户X的浏览器跳转页面到B系统登陆绑定接口 B系统在后台使用该TOKEN 1 直接跟 系统A 进行确认验证
  • 记录一下2023.2kali的默认密码和修改root用户密码的方法

    要水一篇博客了 默认登录用户名 密码 kali kali 切换root用户 sudo su 这时输入的密码是kali 然后就切换到了root用户 输入passwd root 提示修改新密码 根据提示输入两遍新密码就修改了root用户的密码啦
  • 网络编程之本地套接字和网络套接字比较与本地套接字通信案例01

    1 socket IPC 本地套接字domain 1 1 本地通信的方法 1 pipe mkfifo 两者实现最简单 2 mmap 非血缘关系进程间 3 信号 开销小 4 domain 稳定性最好 注意 在本节domain称之为本地套接字
  • Jstat -gc 参数说明

    Jstat gc 参数说明 Jstat gc 参数说明 Jstat gc 参数说明 S0C 第一个幸存区的大小 S1C 第二个幸存区的大小 S0U 第一个幸存区的使用大小 S1U 第二个幸存区的使用大小 EC 伊甸园区的大小 EU 伊甸园区
  • list里面装tensor(pytorch的)如何合并起来

    问题简述 使用pytorch中tensor时 有时需要将多个tensor合并成一个高维tensor 或者是list中装着多个同纬度的tensor 想让这个list转为tensor 核心方法 torch stack def stack ten
  • ‘settings.xml’ has syntax errors less… 和Parent ‘org.springframework.boot’has problems less…的问题解决

    目录 一 背景介绍 二 报错信息 三 原因分析与处理 1 注意maven与jar包版本匹配问题 2 缺少资源 参考博文 一 背景介绍 在自己笔记本虚拟机中导入一个已经写好的Maven工程 经过前文中介绍的离线加载maven处理方法 解决的大
  • 操作系统用户态和核心态和CPU上下文切换

    目录 操作系统用户态和核心态 用户态和核心态 操作系统用户态和核心态是如何交换的 系统调用 CPU上下文 什么是CPU上下文和CPU上下文切换 CPU为什么要进行上下文切换 操作系统用户态和核心态 用户态和核心态 操作系统两种状态 用户态和