首页 > 系统相关 >进程的调度和切换

进程的调度和切换

时间:2024-10-12 14:49:10浏览次数:3  
标签:调度 切换 寄存器 进程 CPU 运行

目录

1.进程的调度和切换的基本概念

2. 其他概念

3.进程切换的时候,CPU和进程的操作

3.1CPU基本概念

4.Linux2.6内核进程调度队列


1.进程的调度和切换的基本概念

进程在CPU上运行的时候,CPU并不会一直运行一个进程,直到进程结束。现代操作系统的进程之间都是根据时间片进行轮转的。

 时间片:一个进程最多只能占据CPU资源一定的时间(一般设置为1ms),如果在这个时间内进程还没有运行完,进程会被轮换。


2. 其他概念

竞争性 : 系统进程数目众多,而 CPU 资源只有少量,甚至 1 个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级 独立性 : 多进程运行,需要独享各种资源,多进程运行期间互不干扰 并行 : 多个进程在多个 CPU 下分别,同时进行运行,这称之为并行 并发 : 多个进程在一个 CPU 下采用 进程切换 的方式,在一段时间之内,让多个进程都得以推进,称之为并发(我们在使用我们自己的电脑时,其实上感觉不到各个进程之间的切换,我们就以为,我们开得很多程序都是并行的,其实那是因为CPU切换的太快了,我们根本感觉不到)


3.进程切换的时候,CPU和进程的操作

3.1CPU基本概念

我们要先知道CPU内部会有很多的寄存器,用于实现CPU的计算功能。

 

PCB在CPU运行队列里排队,当PCB被CPU调度的时候,可执行程序在CPU内部执行。

 

进程在CPU里运行的时候,会产生大量的临时数据(我们将这些临时数据称之为进程的硬件的上下文),如果,这个程序在时间片内运行完了,那就直接从CPU里带出结果就行了,但是,如果这个程序没有在时间片内在CPU内部运行结束,需要等待CPU的二次调度,那么这些临时数据就显得格外重要(总不能直接删掉,让CPU重新计算,那不就一直无法结束了吗)

 为了让CPU二次调用进程的时候,能够接上上一次的计算结果,所以就把硬件上下文交给进程保存,当他下次被调用的时候直接赋值给CPU。

 

 

当每个PCB被CPU运算的时候,都会被判断一下是否是二次调度,如果是,那就把之前的临时数据赋值给CPU上的寄存器,继续之前未进行完的计算。如果是第一次,那就别啥赋值的了,直接开始吧。 

CPU中的寄存器从物理上是被所有进程共享,在任意时刻,CPU的寄存器由当前正在执行的进程独占使用,而寄存器内部保存的数据,是被该进程私有的。即:CPU中的寄存器只能有一套,寄存器内部保存的数据可以有多套。


4.Linux2.6内核进程调度队列

Linux实现进程调度的算法:考虑优先级,进程饥饿问题,效率问题

 

我们看到这里就发现好像,如果一直往运行队列中加入优先级高的进程,那么那些优先级低的进程还是依旧无法被分配到cpu资源。这样好像进程饥饿的问题没有被解决,所以接着将过期进程,这就是过期进程的作用。 

 

这里有两个进程,一开始CPU都是从活跃进程里面拿进程进行运算,然后此时即使有新的进程进来也不会被加到活跃进程上,而是会全部被加到过期进程上。当活跃进程里的进程全部被加载完了。此时进行进程互换,活跃进程变成过期进程,过期进程变成活跃进程。 

 

交换的时候,只交换指针变量的值。 

在这种调度模式下,只有内存和CPU之间进行交互,也打打提升了效率。 

标签:调度,切换,寄存器,进程,CPU,运行
From: https://blog.csdn.net/2301_76653277/article/details/142831533

相关文章

  • linux中的进程内存布局
    虚拟内存在我们编写程序的时候,我们使用的是虚拟内存布局,它是建立在真实的物理内存之上,虚拟内存一般是比物理内存要大,并且每个进程都享有独立的虚拟内存所以我们要明白我们在程序中使用的是虚拟内存,虚拟内存经过一些内存映射,才能被映射到真实的物理内存局部性空间局部性(Spatia......
  • 电脑快速切换IP地址命令是什么?详解与实践
    有时,出于安全考虑或测试需要,我们可能需要快速切换电脑的IP地址。虽然这一过程在初学者看来可能略显复杂,但通过简单的命令和步骤,即使是普通用户也能轻松实现。本文将详细介绍在Windows系统中快速切换IP地址的几种方法,特别是通过命令提示符来执行的操作。一、IP地址与网络环境......
  • 【Linux】————进程控制
                                 作者主页:   作者主页                           本篇博客专栏:Linux专栏              ......
  • Win10 小技巧:切换大小写自动提示音
    在Win10里,我们可以给CapsLock键、NumLock键设置提示音,及时了解输入法状态。‍如何设置按下「Win+I」打开设置,然后搜索「切换」,然后点击「打开粘滞键、切换键、或筛选键时显示消息」:​‍‍然后开启:​‍‍这样按CapsLock键时会播放声音。此外声音是不同:切换......
  • gdb多线程多进程调试命令
    多线程infothreads查看当前所有运行线程的列表thread线程编号 切换到特定线程进行调试setscheduler-lockingon只运行当前线程,停止其他线程进行调试多进程infoinferions显示所有正在调试的进程inferion进程编号 切换到特定进程运行,同时挂起其他进程detach-on-fo......
  • IO进程--day1
    一、定义学生结构体学生信息:学号,姓名,成绩等编写2个函数save_stu和load_stusave_stu通过fprintf将arr数组中的3个学生的所有信息,保存到文件中去load_stu通过fscanf将文件中的3个学生的所有信息,读取到一个新的结构体数组中,并输出所有学生的信息#include<stdio.h>......
  • 进程状态|进程优先级
    目录一、进程状态1.什么是进程状态2.进程状态都包含什么?3.进程状态的查看4.进程退出(1)进程退出的步骤(2)僵尸进程(3)孤儿进程二、进程优先级1.进程优先级是什么?2.为什么要有进程优先级?3.查看进程优先级4.进程优先级的修改(1)为什么nice值范围只有[-20,19]?(2)进程优先级由......
  • Pod的调度是由调度器(kube-scheduler)
    在Kubernetes中,Pod的调度是由调度器(kube-scheduler)负责的,它根据一系列规则和约束来决定将Pod放置在哪个节点上。以下是一些常见的调度方式和概念:默认调度器:Kubernetes默认的调度器会根据资源需求、亲和性规则、反亲和性规则、污点和容忍度、数据本地性等因素来调度Po......
  • Python多进程中并行编程与进程池
    Python的并行编程可以采用multiprocessing或mpi4py模块来完成。multiprocessing是Python标准库中的模块,实现了共享内存机制,也就是说,可以让运行在不同处理器核心的进程能读取共享内存。在基于共享内存通信的多进程编程中,常常通过加锁或类似机制来实现互斥。mpi4py库实现了消息传......
  • Spark - [03] 资源调度模式
    题记部分 一、Local模式1.1、概述Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试的。可以通过以下几种方式设置Master(1)local:所欲计算都运行在一个线程当中,没有任何并行计算,通常我们在本机执行一些测试代码,或者练手,就用这种模式。(2)local[K]:指定使......