精华内容
下载资源
问答
  • 切换过程
    千次阅读
    2020-12-07 16:13:01

    在每个进程都有一个进程控制块(PCB)
    进程主要分为 创建状态,就绪状态,运行状态,阻塞状态,结束态。
    PCB控制块是以链表方式存放,就绪进程的PCB放置在同一个链表之中,阻塞在同一个链表当中
    当进程进行切换的时候
    1.保存当前的进程状态,包括程序计数器,寄存器保存在PCB中
    2.更新PCB的信息,例如更新进程的状态,加入阻塞队列
    3.然后选择另外一个进程进行执行,更新PCB信息,例如从就绪转为运行状态
    4.更新完内存管理数据结构,就是将PCB队列进行更新,将进程的上下文从PCB中取出去执行。

    更多相关内容
  • 行业分类-设备装置-分组切换过程中对切换失败进行处理的方法和系统.zip
  • 进程的切换过程

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

    切换方式

    进程的切换,实质上就是被中断运行进程与待运行进程的上下文切换。从主观上来理解。只分为两步:
    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
    在这里插入图片描述

    展开全文
  • AIX6.1-HACMP安装切换过程
  • 进程切换过程之一:上下文切换

    千次阅读 2020-01-26 22:32:25
    进程切换过程之一:上下文切换 注:下面给出的源码均出自https://github.com/mit-pdos/xv6-public 在进程进行切换时,需要进行上下文切换,也就是寄存器的值的保存。 对于上下文的切换,有两种情况:硬件自动...

    进程切换过程之一:上下文切换

    注:下面给出的源码均出自https://github.com/mit-pdos/xv6-public

     

     

    在进程进行切换时,需要进行上下文切换,也就是寄存器的值的保存。

    对于上下文的切换,有两种情况:硬件自动(隐式)完成、操作系统显式保存。

    下面分析两段xv6的源代码,都是上下文切换部分,版本有所不同:

    注:每个进程都有一个用来维护过程调用的栈,有的书把这个栈叫做内核栈;在编译原理中,这个栈的术语叫活动记录,在下文中,提到的栈都是说的这个保存活动记录的栈。每个进程都有自己的活动记录(当然,如果是多CPU的情况下,就会引入线程的概念,则每个线程有一个活动记录)

    较老的版本

    #   void swtch(struct context *old, struct context *new);
    #  
    # Save current register context in old
    # and then load register context from new.
    
    .globl swtch
    swtch:
      # Save old registers
      movl 4(%esp), %eax
      popl 0(%eax)  # %eip
      movl %esp, 4(%eax)
      movl %ebx, 8(%eax)
      movl %ecx, 12(%eax)
      movl %edx, 16(%eax)
      movl %esi, 20(%eax)
      movl %edi, 24(%eax)
      movl %ebp, 28(%eax)
    
      # Load new registers
      movl 4(%esp), %eax  # not 8(%esp) - popped return address above
    
      movl 28(%eax), %ebp
      movl 24(%eax), %edi
      movl 20(%eax), %esi
      movl 16(%eax), %edx
      movl 12(%eax), %ecx
      movl 8(%eax), %ebx
      movl 4(%eax), %esp
      pushl 0(%eax)  # %eip   
    

    这个版本的上下文结构struct context的内容如下:

    struct context {
        int eip;    //程序计数器
        int esp;    //栈指针
        int ebp;
        int ecx;
        int edx;
        int esi;
        int edi;
        int ebp;
    };
    

    分析一下上下文切换的源代码:

    源代码的上半段是将“老”的进程的上下文保存,下半段将“新”的进程(要切换到的)的上下文恢复。

    执行swtch的指令时,栈的状态:

                                                             

    movl 4(%esp), %eax
    

    将old(参数)的值放入寄存器%eax。

    popl 0(%eax)
    

    然后将栈顶的值保存到0(%eax)的位置。也就是将返回地址(%eip)的值保存到old指向的context空间中

    之后,就是将其他的寄存器放入old指向的context空间中。

    通过上面的源码,可以得到context在内存中分配空间的方式:

                                          

    下面的代码就是从new指向的context空间中,将各个寄存器的值恢复,就不详细说明了。

    较新的版本:就像一开始提到的,硬件会自动保存一部分

    硬件会保存一部分的寄存器,还有剩余的需要进行手动保存。

    # Context switch
    #
    #   void swtch(struct context **old, struct context *new);
    # 
    # Save the current registers on the stack, creating
    # a struct context, and save its address in *old.
    # Switch stacks to new and pop previously-saved registers.
    
    .globl swtch
    swtch:
      movl 4(%esp), %eax
      movl 8(%esp), %edx
    
      # Save old callee-saved registers
      pushl %ebp
      pushl %ebx
      pushl %esi
      pushl %edi
    
      # Switch stacks
      movl %esp, (%eax)
      movl %edx, %esp
    
      # Load new callee-saved registers
      popl %edi
      popl %esi
      popl %ebx
      popl %ebp
      ret
    

    开始的两条代码,将old与new放入%eax和%edx,方便后面通过指针的方式访问内存。

    接下来的四条压栈指令,直接将要手动保存的寄存器压入栈中。

    执行到这里,“老”进程和“新”进程对应的栈的示意图如下:

                                                  

    与之前旧版本的有些许不同,新版本的直接将上下文保存在进程自己的栈中;旧版本的保存在了其他的地方(暂时就理解到这个程度,由于没有分析过所有的源码,这里的分析可能比较片面,但这是我整个的分析过程,如有有大佬看出哪里不会,请指正)

    展开全文
  • LTE 切换过程中的PDCP处理, 无损切换和无缝切换
  • 缺省时,R4在RPT上收到第一份组播报文后立即触发SPT切换,具体过程如下图所示。 (1)最后一跳路由器处理流程: 组播报文沿着RPT到达最后一跳路由器R4,R4收到组播报文后,它便知晓了组播源Source的地址,它将立即...

    问题背景

    • 如下图所示,PC1是组播组239.1.1.87的接收者,R4在自己与RP之间建立了一段RPT的分支,而RP则在自己与R1之间建立了SPT。后续组播流量将从Source发出,沿着SPT先到达RP,然后由RP将组播流量沿着RPT转发下去。
    • 在这个网络拓扑中,网络中的组播流量转发其实存在次优路径问题:组播流量从R1出发,流经R2,然后到R3,再到R5,这实际上是一条次优路径,一个更优的方案是,组播流量到达R2后,可以直接被转发给R5,而不用从RP绕一下。
    • 此外,网络中也会存在的另一个问题,如果所有的组播流量都需先经由RP进行分发,当流量特别大时,RP的负担将变得非常重,这也就容易引发故障。
      在这里插入图片描述

    解决方法

    PIM-SM的SPT切换机制可以很好地解决这个问题。

    示例

    以上图中的R4为例,当其在RPT上收到组播报文时,便立即知晓了组播源的IP地址(也就是该报文的源IP地址),既然已经知道了组播源的IP地址,那么R4便可以在自己与组播源之间建立一段SPT的分支,然后通过该SPT的分支直接从Source获取组播流量,由于该SPT分支是直接建立在自己与Source之间的,因此接收组播流量的路径必定是最优的。

    需要注意的是,SPT切换机制是发生在与组播接收者直连的最后一跳路由器上的。缺省时,R4在RPT上收到第一份组播报文后立即触发SPT切换,具体过程如下图所示。
    在这里插入图片描述

    (1)最后一跳路由器处理流程:

    • 组播报文沿着RPT到达最后一跳路由器R4,R4收到组播报文后,它便知晓了组播源Source的地址,它将立即启动SPT切换(可以通过在R4上设置组播流量的速率阈值,使得当组播流量的速率达到指定的阈值后,才触发SPT切换。缺省时,最后一跳路由器只要一收到组播报文,便立即进行SPT切换)。
    • R4朝着Source的方向发送(10.1.1.1,239.1.1.87)的PIM加入报文。

    (2)中间路由器处理流程:

    • 上游邻居R5收到R4的(10.1.1.1,239.1.1.87)加入报文后,将接收该报文的接口添加到(10.1.1.1,239.1.1.87)表项的下游接口列表中。
    • 然后在单播路由表中查询到达 Source的路由,明确了到达Source的出接口及下一跳IP地址后,R5继续向上游邻居R2发送(10.1.1.1,239.1.1.87)加入报文。

    (3)中间路由器处理流程:

    • R2此时已经存在(10.1.1.1,239.1.1.87 )表项(source->R1->R2->RP已经构建了一条SPT),它将收到加入报文的接口添加到该表项的下游接口列表中。那么现在R2的(10.1.1.1, 239.1.1.87)表项的下游接口列表存在两个接口,一个是连接RP的接口,另一个则是连接R5的接口。
    • 当它再从R1接收(10.1.1.1,239.1.1.87)组播流量时,便会将该流量从这两个下游接口转发出去。此时网络中的组播分发树如下图所示。
      在这里插入图片描述

    引入问题

    因为R5此刻已经处于SPT上,同时,它还在RPT上,因此它会分别在SPT及RPT上收到重复的组播流量,这种操作显然是多余的。

    解决方法

    R5通过RPT修剪过程,可以将自己从RPT上剪除,解决上述组播流量重复问题。

    (4)当R5开始在SPT上收到R2转发过来的(10.1.1.1, 239.1.1.87 )组播流量后,R5将朝着RP的方向发送一个特殊的(10.1.1.1,239.1.1.87 )剪枝报文,试图将自己从RPT上剪除。该剪枝报文中设置了RP比特位,这个剪枝报文会一路发往RP。

    (5)RP处理流程:

    • R3收到R5发送的(10.1.1.1,239.1.1.87)剪枝报文后,将接收报文的接口从(10.1.1.1,239.1.1.87 )表项的下游接口列表中删除。
    • 当完成这个操作后,R3发现此时该表项的下游接口列表已经为空,这意味着自己不再需要从SPT上接收组播组239.1.1.87的组播流量,因此它朝着Source的方向发送(10.1.1.1,239.1.1.87 )剪枝报文,试图将自己从SPT上剪除。

    (6)R2收到R3发送的(10.1.1.1,239.1.1.87 )剪枝报文后,将接收该报文的接口从(10.1.1.1,239.1.1.87 )表项的下游接口列表中删除。到目前为止,该网络中的组播分发树已经完成刷新。组播流量将沿着SPT从Source流向PCl。

    展开全文
  • 进程与线程-2、用户级线程切换过程

    千次阅读 2017-09-04 17:03:09
    用户级线程切换过程
  • 进程与线程-3、内核级线程切换过程

    千次阅读 2017-09-04 17:14:46
    内核级线程切换过程
  • 网站中文简体繁体切换 修正切换过程出现的渐变
  • Linux中进程调度与切换过程

    千次阅读 2017-04-10 09:54:29
     今天我们要学习的是Linux中进程调度与切换过程。有关进程的知识在前面的博客中已经提到了,有不懂的地方请参考我前面的博客,今天我直接从进程调度和切换开始讲。  Linux一个较大的优势就是进程调度,因为
  • 进程用户态和内核态及其切换过程

    千次阅读 2020-05-24 22:50:10
    1.进程的堆栈     内核在创建进程的时候,会为...2.进程用户栈和内核栈的切换     当进程因为中断或者系统调用而陷入内核态之行时,进程所使用的堆栈也要从用户栈转到内核栈
  • BWP切换过程中的频域资源指示

    万次阅读 2021-02-23 19:38:30
    基于动态信令的BWP切换,是指基于DCI进行BWP切换,此外,该DCI同时对切换后的"新BWP“的数据信道进行资源分配。当使用DCI进行BWP切换时,如果”新BWP“同时配置了type 0和type 1频域资源分配,当原BWP小于新BWP的...
  • android 语言切换过程分析

    万次阅读 2014-02-27 18:13:04
    最近在看一个bug,系统切换语言后,本来退到后台的音乐,会在通知栏上显示通知。为了解决这个bug,我学习了下android的语言切换流程,也参考了大量其他人的资料。 在这里我将自己的探索记录下来,作为自己的学习记录...
  • 操作系统用户态和内核态之间的切换过程 1. 用户态和内核态的概念区别 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的...
  • redis cluster主从切换过程详细记录

    千次阅读 2020-05-04 16:04:52
    停掉slave1 服务器 查看master1服务器信息 查看master2服务器的信息,其他服务器都是一样的信息,只是有一条记录而已。 **重新连上slave1 ** 查看master1服务器信息,同步成功 ...将master1 6379服务器停掉 ...
  • 华为防火墙主备备份及负载分担功能在不同组网下的实现过程
  • 线程切换怎么样一个流程?

    千次阅读 2021-07-07 00:17:03
    点击上方“朱小厮的博客”,选择“设为星标”后台回复"书",获取后台回复“k8s”,可领取k8s资料进程切换分两步:1.切换页目录以使用新的地址空间2.切换内核栈和硬件上下文...
  • 由于系统调用、中断和异常由用户态切换到内核态的机制大同小异,所以这里仅就系统调用的切换过程进行具体说明。 如果一个用户程序需要调用底层的系统接口,如fork等诸如libc里面的系统调用函数,就牵涉到用户态与...
  • 进程切换过程分析

    千次阅读 2013-06-27 14:21:59
    这种行为被称为进程切换,任务切换或上下文切换。下面几节描述在Linux中进行进程切换的主要内容。 硬件上下文 尽管每个进程可以拥有属于自己的地址空间,但所有进程必须共享CPU寄存器。因此要恢复一个...
  • 理解上下文切换带来的性能影响

    万次阅读 2022-07-07 09:13:57
    但是由于同时运行的线程数是由CPU核数来决定的,所以为了支持更多的线程运行,CPU会把自己的时间片轮流分给其他线程,这个过程就是上下文切换。   导致上下文切换的原因有很多,比如通过wait()、sleep()等方法阻塞...
  • 首先,我们要了解,进程切换是个什么过程? 进程切换概念   其实很简单,进程切换就是从正在运行的进程中,收回CPU的使用权利,交给下一个要运行的进程。   实际上,因为被切换的进程下一次可能还要继续运行,...
  • LTE系统内切换流程分析

    千次阅读 2021-06-08 09:29:20
    LTE系统内切换流程分析 大木叉叉 2018-10-14 18:19:42 9495 收藏 49 分类专栏: 通信 文章标签: LTE切换信令 版权 UE在LTE系统内的移动性分为空闲态的移动性和激活态的移动性。空闲态UE已在网络上完成注册,一般...
  • MySQL 主从切换步骤

    千次阅读 2022-04-08 19:38:41
    本文讲述MySQL主从切换流程,切换步骤主要针对主备正常切换以及主库宕机备库切换两个场景,掌握正确的切换流程,可以有效避免切换过程中可能出现的数据不一致问题以及提高整体切换的时间 主从环境: 场景一:...
  • ART运行时Foreground GC和Background GC切换过程分析

    万次阅读 热门讨论 2015-05-04 00:57:34
    通过前面一系列文章的学习,我们知道了ART运行时既支持Mark-Sweep GC,又支持Compacting GC。其中,Mark-Sweep GC执行效率更高,但是存在内存碎片问题;...本文就详细分析它们的执行过程以及切换过程
  • 初始化组件 mySwiper = new Swiper('.swiper-container', { autoplay: false,//可选选项,自动滑动 ... slideChange: function(){ //当swiper切换时,下面是项目里需要用到的js nowTabIndex = this.activeIndex; ...
  • 进程切换和线程切换

    千次阅读 2019-08-11 09:52:12
    这种行为被称为进程切换(process switch)、任务切换(task switch)或上下文切换(content switch)。 原文 :https://www.cnblogs.com/kkshaq/p/4547725.html 进程切换分两步: 1.切换页目录以使用新的地址...
  • Linux进程上下文切换过程context_switch详解 日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 前面我们了解了linux进程调度器的...
  • 分析 ARM 处理器不同工作模式的作用,举例说明切换过程。 ARM 处理器(以 ARM7TDMI 为例)的 7 中工作模式为: (1) 用户模式(usr):运行应用程序的普通模式。 (2) 系统模式(sys):运行具有特权的操作系统...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 928,684
精华内容 371,473
关键字:

切换过程