进程的切换过程

2023-05-16

切换方式

进程的切换,实质上就是被中断运行进程与待运行进程的上下文切换。从主观上来理解。只分为两步:
1.切换新的页表,然后使用新的虚拟地址空间
2.切换内核栈,加入新的内容(PCB控制块,资源相关),硬件上下文切换

现在从这两句话理解,来看看这些东西到底是什么。

1,虚拟地址空间

虚拟地址空间,顾名思义:就是虚拟的,不是真的地址空间
在早期的计算机中,我们的计算机内存都非常的小。如果计算机内存是100M.已经运行了两个40M的任务。如果还想运行一个40M的。那么空间肯定就不够了。

所以后来 它在磁盘上划分出一块空间由操作系统管理,当物理内存耗尽是充当物理内存来使用。它将多个物理内存碎片和部分磁盘空间重定义为连续的地址空间,以此让程序认为自己拥有连续可用的内存
但是具体要讲清楚这个,我们还要看页表

2,页表

刚刚讲到了虚拟地址空间,说了他只是虚拟的一段空间,但是。程序可不管你那么多。人家只要在物理内存上运行。你给人家画空饼可没意思。
所以出现了页表。把虚拟地址空间对应的部分,映射到物理地址上
现在计算机一般是采用分页管理居多,这里分段管理我个人也理解了就不多叙述。
我们来看下分页管理:
在这里插入图片描述
很多初学者在这里会有一个疑问,既然给程序造成连续的空间假象,那要是内存中确实没内存可用了,会怎么办呢?那么对于*新的页数,他就会发生缺页中断,然后会覆盖起其他的页
缺页中断大概有三种算法:
1.(OPT)最晚不使用的算法:表示新的页如果进来没内存框可放了,会替换之后 几乎或者根本不会用到的页。但这种算法只是一种理想算法,因为没人能预估之后的事,包括计算机
2.(FIFO)先进先出算法:表示没来一个新的页,他都会替换最早进来的那个页。这种办法有个缺点:如果最早进来的那个页是经常被访问的,那么一定情况下效率会比较低。所以FIFO算法在按 线性顺序访问地址空间时使用
3.(LRU)最近最久未使用:这种办法,会找出当前内存中,最近被使用最少的页。然后替换他。这种办法是前两个算法的折中选择,基本现在都用这种。还有一种是LFU 最常不使用算法,这种是找系统内使用频率最少的页(LRU是最近一段时间),然后替换他。但是,这种算法实现要长期的为每个页维护一个计数代价较大不常使用。

具体三个的算法的图解:https://blog.csdn.net/qq_34777600/article/details/79508613

第二步的切换内核栈,就是使用新的栈来存放进程运行时资源了。然后新进程有新的PCB控制块。第二步也是线程切换的步骤,因为线程共享进程的虚拟地址空间,所以切换的时候没有第一步的过程

进程一共有五个状态:
像刚刚的切换:
1.会把原来的进程保存状态,然后进入阻塞状态。这种情况一般是IO请求或者内存申请失败了。
2.可能是原来的进程正常终止了,或者CPU的时间片没了,终止是进入终止态,CPU时间片没了是进入就绪态,加入就绪队列等待下一次获得CPU
在这里插入图片描述

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

进程的切换过程 的相关文章

  • windows BDA driver (abstract)

    AVStream is a Microsoft provided multimedia class driver that supports video only streaming and integrated audio video s
  • 详细解读Python豆瓣电影Top250网页爬取(主要对re的运用&excel保存数据)//包括对库的简介

    python里面有很多操作都类似于c语言 xff0c 这里在爬取时主要需要注意用到的是for循环语句和各种库 个人认为python中主要还是对库的运用比较占大比例 xff08 这里的软件版本是PyCharm 2020 3 2 x64 xff
  • Unity3D 委托和事件的优点(一)

    上周接触到了委托 这周终于在自己的项目中用到了 现在准备用委托和事件的方案 替换掉之前的一些使用不足的解决方案 在此感谢前辈们的优秀文章 我是根据在网上阅读的文章 通过自己的见解 并在自己的项目中进行实践 得出了一些结论与大家分享 我认为这
  • 我的保研经历——中国科学院计算技术研究所

    忙碌了大半年的保研事情已经尘埃落定了 xff0c 心理也踏实下来了 xff0c 总想着把自己的这段保研经历记录下来 xff0c 希望能对小伙伴们有所帮助 能来到ZZ并且读软件工程这个专业并且阴差阳错的进了卓越班也算是老天注定吧 xff08
  • 无限循环:while True+if...break(打破循环) 用法

    span class token keyword while span True span class token punctuation span p span class token operator 61 span span clas
  • freertos的核心---线程与调度

    一 划重点 划重点 划重点 线程就是freertos运行管理的最小单位 一个线程有自己的生命周期 可以是一段时间也可以是forever 具体看开发人员对于线程的规划 几个线程 每个线程处理什么事情 先来看看线程长啥样 xff1f xff08
  • freertos通信---信号量与队列

    嘿嘿 又见面了 到这里 任务的调度和切换 你已经有了深刻的理解 接下来 自然而然就是任务间的通讯咯 把相关的任务串联起来 就形成了程序的基本架构 一 队列 为什么要先讲解队列了 因为信号量就是利用队列来实现的 走 一起瞅瞅 1 1队列的创建
  • freertos通讯---信号量与队列

    哈喽 又见面了 一 信号量 1 1创建二进制信号量 define xSemaphoreCreateBinary xQueueGenericCreate UBaseType t 1 semSEMAPHORE QUEUE ITEM LENGTH
  • 关于python调用C++

    关于python调用C C 43 43 查了很多相关资料 xff0c 可以通过ctypes模块 SWIG等一些方法 简单的类似单个头文件单个cpp文件都可以实现 xff0c 但是大恒给的C 43 43 包含驱动程序 xff0c 需要在属性里
  • freertos通讯-通知

    通知是什么 xff1f 其实我们之前就见过 它就在任务结构体中 再来回顾下 if configUSE TASK NOTIFICATIONS 61 61 1 volatile uint32 t ulNotifiedValue volatile
  • freertos软件定时器

    哈喽 这篇文章是freertos解析的最后一篇文章 我们将会讲解一个利用任务延时实现的软件定时器 1 创建 timer结构体和创建一目了然 看看初始化函数 是不是有点熟悉 timer的管理有点类似任务的管理 如果是第一次创建则初始化time
  • 蓝牙5.1的ble那些事儿

    既然要说5 1的那些事儿 那么必须的聊聊蓝牙4 0 本文就不在此长篇大论班门弄斧了 要了解4 0的同学请出门左拐直接去参考蜗窝科技大佬的文章 本人觉得对于想入门全面了解4 0的同学 此文章是不二选择的经典 在此只有膜拜的份了 不是广告哈哈
  • 蓝牙5.1的ble那些事儿

    到这里 对于非连接状态应该有一些新的认识了 接下来 顺其自然当然就是连接了 你谈对象 忙活半天 当然是想干点什么事情了 当然也有老司机翻车 连接上后 一端要主动向另一端发起问候 否则长时间不联系 那么就断开好了 主动问候的一端我们称之为ma
  • Http auth认证的两种方式Basic方式和 Digest认证

    Http Basic Auth 方式 当访问一个Http Basic Auth 网站的时候需要提供用户名 xff0c 密码 xff0c 否则会返回401 without authoration Http Basic Authenticati
  • while无限循环

    无限循环写法while 1 循环体内部可以用break语句跳出循环 while 1
  • 不同操作系统下的程序入口点分析

    转自 http hi baidu com liu bin0101 blog item 03e3a9ec4e0fd5d72e2e21b9 html 程序入口与编译器没有什么关系 关键是链接链接器 UNIX的用的ld和WINDOWS下用的LIN
  • rv-player 不靠谱之rvio

    最近忽然发现为动画组写过的一个maya内置工具不能用了 xff0c 工具的作用是使用rvio hw exe转换playblast出的tif序列图 xff0c 生成带watermark的mov文件 之前在Maya2013上一直用的好好地 xf
  • 树莓派 Raspberry Pi SD卡系统备份与还原

    近半年时间用来监控陆龟的树莓派 Raspberry Pi 还算稳定 xff0c 可到了冬天龟箱里的加热灯长时间加热导致树莓派温度很高 xff0c 时不时的自动重启 如果每次都能正常起来也就罢了 xff0c 可偶尔会挂不上SD卡的文件系统直接
  • 2022-12-18 CMakelists指定CMAKE_BUILD_TYPE为Debug或者Release

    今天编译代码的时候遇到古怪的事情 xff0c 在Cmakelists txt中指定了编译版本 xff0c build的时候输出一句 xff1a cpptools The build configurations generated do n

随机推荐

  • 5.FreeRTOS任务切换的简易分析

    FreeRTOS任务切换的简易分析 架构 xff1a Cortex M3版本 xff1a FreeRTOS V9 0 0前言 xff1a 之前分析了创建任务 启动调度器 xff0c 在做完这些工作后 xff0c 就是该完成所有RTOS的最核
  • vue.js:634 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever t

    其实是前两天了解了v mdel的原理 lt v model原理 gt lt div id 61 34 demo 34 gt lt input value 61 34 value 34 64 input 61 34 price 61 even
  • vscode终端加git的方法

    记录一下 xff0c vscode添加git终端的方法 1 先打开首选项 61 gt 设置 xff0c 搜 shell window xff0c 然后找到setting json 2 添加代码 xff08 设置git的位置 xff0c 以及
  • jquery的简单介绍

    jQuery也包含了对ajax的封装 什么是jQuery jQuery是一门轻量的 免费开源的JS函数库 xff0c 主要作用是用于简化JS代码 轻量的 xff1a 代码或项目对该技术的依赖程度 xff0c 依赖程度越低 xff0c 这个技
  • 图像质量评估(2) -- 图像质量相关参数:分辨率

    分辨率 xff08 解析度 xff0c Resolution xff09 分辨率使我们经常听到的一个词 xff0c 它代表了图像的精细程度 xff0c 也代表了图像的大小 分辨率决定了在这种大小下 xff0c 输出信号是否能够包含足够多的信
  • 图像质量评估(5) -- 畸变(Distortion)

    当图像中原本应该是直线的地方看起来发生了不自然的变形或扭曲时 xff0c 我们称为图像畸变 有三种类型的镜头畸变 xff1a 桶形畸变 xff08 后文使用英文barrel xff09 xff0c 枕形畸变 xff08 后文使用pincus
  • FreeCMS视频教程 将FreeCMS导入eclipse

    项目地址 xff1a http www freeteam cn 原文地址http www freeteam cn site FreeCMS videos info 2016 5670 html
  • qsort的使用

    一 了解qsort xff08 1 xff09 编译器函数库万能数组排序函数排序函数 它是基于快速排序算法 xff0c 所以是q sort q 指的是 quick 快速 qsort 的函数原型是 void qsort void base s
  • 【转】粒子滤波简介以及相关技术探讨

    之前一直在做移动机器人定位算法 查来查去 xff0c 发觉粒子滤波算法 xff08 又叫MC算法 xff09 应该算是最流行的了 因此开始学习使用之 入手的是本英文书叫 probalistic robotic 很不错 xff0c 我所见到的
  • 蓝牙技术的基础知识

    1 无线电频谱 蓝牙技术使用2 4 GHz ISM频段 xff08 2400至2483 5 MHz xff09 xff0c ISM频段就是各国挪出某一段频段主要开放给工业 xff0c 科学和医学机构使用 应用这些频段无需许可证或费用 xff
  • Ubuntu下实现串口通信

    在ubuntu下使用cutecom可以接受串口消息也可以给串口发送消息 基本信息 xff1a 库 xff1a Python 的 serial 硬件 xff1a 电脑 Ubuntu18 04系统 USB Jeston AGX Xavier x
  • 4.FreeRTOS调度器的启动简易分析

    FreeRTOS调度器的启动简易分析 架构 xff1a Cortex M3版本 xff1a FreeRTOS V9 0 0前言 xff1a 上一篇我分析了关于一个任务的创建过程 xff0c 既然创建了任务 xff0c 自然是要用 那么Fre
  • ARM40-A5应用——与网络时间的同步1(概述)

    ARM40 A5应用 与网络时间的同步1 xff08 概述 xff09 2018 6 28 版权声明 xff1a 本文为博主原创文章 xff0c 允许转载 本文介绍ARM40 A5本地系统时间 硬件时间 时区 网络时间 ntpdate nt
  • 如何有效阅读《C++ Primer》那么厚的书

    我就是那种正面刚大部头的选手 xff0c 这些年读过的工作相关的 砖头 大概有 c 43 43 primer xff0c Windows核心编程 xff0c 算法导论 xff0c unix网络编程 xff0c STL源码剖析 等等吧 xff
  • 【Arduino 语法——结构体】

    Arduino 语法 结构体 1 0 项目结构 1 1 setup 1 2 loop 1 3 main 2 0 控制语句 2 1 break 2 2 continue 2 3 while 2 4 do while 2 5 for 2 6 i
  • 【MKS_GEN_L 主板使用说明书】

    MKS GEN L 主板使用说明书 1 描述2 特征3 主板封装3 1 尺寸图3 2 接线图3 2 1 MKS GEN L V1 0系统连接图3 2 2 MKSGEN L V2 1系统连接图 4 引脚排列5 GEN LV2 1驱动设置5 1
  • 【基于腾讯云的远程机械臂小车】

    基于腾讯云的远程机械臂小车 1 项目来源 1 1 项目概述 1 2 系统结构 1 3 设计原理 2 硬件搭建 2 1 CH32V307开发板 2 2 Arduino mega2560 2 3 富斯I6遥控器 2 4 机械臂小车 2 5 ES
  • 电脑之间快速传输超大文件(100GB以上)的方法

    引言 假如有这样一个场景 xff0c 你买了一台新的电脑 但是老电脑上存放着多年累积的数据 几百G之多 你要花时间把旧电脑上的数据导到新电脑上去 xff0c 这很费精力 于是你想有没有更快速的方法立马挪过去呢 xff1f 本文提供了五种方法
  • 《软件架构设计》(Yanlz Unity SteamVR 云技术 5G AI=VR云游戏=框架编程 架构设计 设计重构 游戏框架 框架入门 架构师 UML MVC ECS 立钻哥哥 ==)

    软件架构设计 软件架构设计 版本 作者 参与者 完成日期 备注 YanlzFramework 1910 V01 1 0 严立钻 2019 10 19 软件架构设计 发布说明 xff1a 43 43 43 43 软件架构设计 xff1a 是对
  • 进程的切换过程

    切换方式 进程的切换 xff0c 实质上就是被中断运行进程与待运行进程的上下文切换 从主观上来理解 只分为两步 xff1a 1 切换新的页表 xff0c 然后使用新的虚拟地址空间 2 切换内核栈 xff0c 加入新的内容 PCB控制块 xf