进程、线程、调度基础知识

news2025/2/1 7:23:13
          程序是一些保存在磁盘上的指令的有序集合,是静态的,说白了就是一堆有逻辑的代码。包装成一个软件。

一、进程

        是程序一次执行的过程。每个进程有自己独立的内存空间,一个进程有多个线程。

并行和并发对比:

        字面意思而言,并发表示线程同时开始,代表的是事件;而并行表示线程同时执行,代表的是过程或者活动。

并行:将多个线程分配或者指定到不同的处理器上同时执行。

并发:指的是在单处理器系统上线程在微观串行执行,而在宏观并发执行。

一句话:单核多任务并发执行;多核多任务并行执行

进程的状态(3+3)

运行状态(Running):此时进程占用CPU。

就绪状态(Ready):可运行,由于其他进程占用CPU而暂时停止运行。

阻塞状态(Blocked):该进程正在等待某一事件(如输入输出操作的完成)而暂时停止运行。此时即使给它CPU控制权,也无法运行。

创建状态(New):进程正在被创建时的状态。

结束状态(Exit):进程正从系统消失时的状态。

 挂起状态

                进程没有实际占用内存空间,而是被换到硬盘。

阻塞挂起状态:进程在外存(硬盘),等待某个事件。

就绪挂起状态:进程在外存(硬盘),只要进入内存立刻运行。

 挂起总结(三种原因)

        #系统资源紧张(如内存不够)进程暂时存在外存

        #用sleep让进程间歇性挂起,工作原理是设置一个定时器,到期后唤醒进程。

        #用户希望挂起进程,如linux   ctl+z挂起进程。

进程的控制结构

进程控制块(PCB):OS中描述进程的数据结构。

PCB是进程存在的唯一标识。

PCB包含的信息:

        1、进程描述信息:

                进程标示符(PID):标示各个进程,每个进程都有唯一的标识符。

                用户标识符(UID):标示进程所属的用户,UID为共享和保护服务。

        2、进程控制和管理信息:

                进程状态:new、ready、running、blocked、exit

                进程优先级:进程抢占CPU时的优先级

        3、资源分配清单:

                内存地址空间或虚拟地址空间信息,所打开文件的列表,所使用的I/O设备信息。

        4、CPU信息:

                CPU中各寄存器的值。当进程被切换,CPU中的状态信息被保存在对应的PCB中,进程                 重新执行时从断点处开始执行。

PCB组织方式

通过链表的方式组织,相同状态的进程链在一起,组成各种队列

有就绪队列,阻塞队列。

进程的控制

进程的创建、终止、阻塞、唤醒四个过程。

创建进程时,分配资源、建立 PCB;终止进程时,回收资源、撤销 PCB;进程切换时,保存当前进程的状态信息;

01创建进程

        OS允许一个进程创建另一个进程,并且允许子进程继承父进程所拥有的资源。

        *申请空白PCB,填写进程控制管理信息

        *为该进程分配运行时所需资源,如内存资源

        *将PCB插入到就绪队列,等待被调度运行

02终止进程

        三种终止方式:正常结束,异常结束,外界干预(信号kill掉)

        当子进程被终止,其继承父进程的资源还给父进程。当父进程被终止,                                               其子进程变成孤儿进程,会被1号进程收养,并完成对孤儿进程状态信息收集工作。

        *查找需终止进程的PCB

        *终止执行

        *子进程交给1号进程接管

        *该进程所拥有全部资源还给OS

        *将其从所在PCB队列删除

03阻塞进程

        当进程需要等待某一事件完成,调用阻塞语句使自己进入阻塞等待,                                                  当进入阻塞状态,只能由其他进程唤醒。

        *找到要被阻塞的进程的PID对应的PCB

        *若该进程当前运行状态,保护现场并进入阻塞状态

        *讲该PCB插入到阻塞队列

04唤醒进程

        进入阻塞状态的进程不可能自己唤醒自己,只能是发现者进程用唤醒语句叫醒他

        *在该事件的阻塞队列中找到对应的PCB

        *将其从阻塞队列中移除,状态改为就绪状态

        *将该PCB插入到就绪队列,等待调度程序调度

进程的上下文切换

进程的上下文切换:CPU中一个进程切换到另一个进程运行。

CPU上下文:CPU寄存器和程序计数器是CPU运行任何任务前必须依赖的环境,此环境即为XXX。

CPU上下文切换:把前一个任务的CPU上下文保存起来,加载新任务的CPU上下文到寄存器、PC,最后跳转到PC所指的新位置,执行新任务。

此处任务包含:进程、线程、中断。                                                                                                

CPU上下文切换包含:进程上下文切换、线程上下文切换、中断上下文切换。

进程由内核管理调度,所以进程切换只能发生在内核态

进程切换主要包含:

        用户空间资源:虚拟内存、栈、全局变量

        内核空间资源:内核堆栈、寄存器

进程切换时期

        *时间片耗尽

        *系统资源不足,进程被挂起

        *进程通过睡眠函数sleep主动将自己挂起

        *更高优先级进程运行

        *执行中断服务程序       

 

二、线程

        线程是进程当中的一条执行流程。

同类的多个线程共享进程的方法区,每个线程有自己的程序计数器、虚拟机栈、本地方法栈

堆和方法区:

堆和方法区是所有线程共享的资源,其中堆是进程中最大的一块内存,主要用于存放新创建的对象 (所有对象都在这里分配内存),方法区主要用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

程序计数器私有目的:线程切换后可恢复到正确的执行位置。(多线程下PC记录当前线程执行位置)

虚拟机栈和本地方法栈私有目的:保证线程中的局部变量不被其他线程访问到。

线程的上下文切换

        #当线程不属于同一进程,线程上下文切换和进程上下文切换一样。

        #当线程属于同一进程,共享的堆方法区资源不变,只有私有资源才上下文切换。

线程的实现

        用户线程(UT):在用户空间实现的线程,由用户态的线程库完成对线程的管理。

        内核线程(KT):在内核中实现,由内核管理。

        轻量级进程(LWT):在内核中来支持用户线程。(内核支持的用户线程)

用户线程由线程库管理,OS只可看见PCB看不见TCB。因此用户线程整个线程的管理和调度,操作系统不直接参与,而是由用户级线程库函数来实现线程的创建、终止、同步、调度等。

        用户线程优点:

                *TCB由用户级线程库函数维护,可用于不支持线程技术的操作系统。

                *用户线程的切换由也线程库函数完成,无需用户态内核态切换,速度快。

        用户线程缺点:

                *由于只有OS有CPU控制权,但是用户线程不由OS管理,因此线程占用CPU运行                            只有主动退出,其他线程才能运行。

                *由于OS不参与线程的调度,当一个线程发起系统调用而阻塞,则该线程所在进程的                     其他线程也不能执行了。

内核线程有操作系统管理,线程对应的TCB放在操作系统里,线程的创建终止、管理由OS负责。

        内核线程优点:

                *内核线程由OS管理,一个进程中某线程发起系统调用而被阻塞,不影响其他内核线程。

                *多内核线程的进程获得更多CPU时间

        内核进程缺点:

                *在支持内核线程的OS中,由内核负责进程和线程的上下文信息,如PCB,TCB。

                *内核线程的创建终止切换由系统调用方式进行,因此系统开销较大。

轻量级进程???????????

此处知识点感觉怪怪的 直接看原讲解

5.1 进程、线程基础知识 | 小林coding

   

进程和线程区别总结:

根本区别:进程是操作系统资源分配的基本单位;线程是处理器任务调度和执行的基本单位。

影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

三、调度

调度程序(scheduler):在操作系统中完成选择一个进程运行这一功能。

TIP

        线程才是OS调度单位!此处进程是指进程的主线程,所以调度主线程就等于调度进程。

        主要是操作系统相关书籍,都是用进程调度这个名字,所以博客也沿用了这个名字

调度时机

在进程的生命周期中,进程从一个状态变化到另一个状态时 就会触发一次   调度。

以下状态的变化都会触发操作系统的调度:

  • 从就绪态 -> 运行态:当进程被创建时,会进入到就绪队列,操作系统会从就绪队列选择一个进程运行;
  • 从运行态 -> 阻塞态:当进程发生 I/O 事件而阻塞时,操作系统必须选择另外一个进程运行;
  • 从运行态 -> 结束态:当进程退出结束后,操作系统得从就绪队列选择另外一个进程运行;

如果硬件时钟提供某个频率的周期性中断,那么可以根据如何处理时钟中断 ,把调度算法分为两类:

  • 非抢占式调度算法挑选一个进程,然后让该进程运行直到被阻塞,或者直到该进程退出,才会调用另外一个进程,也就是说不会理时钟中断这个事情。
  • 抢占式调度算法挑选一个进程,然后让该进程只运行某段时间,如果在该时段结束时,该进程仍然在运行时,则会把它挂起,接着调度程序从就绪队列挑选另外一个进程。这种抢占式调度处理,需要在时间间隔的末端发生时钟中断,以便把 CPU 控制返回给调度程序进行调度,也就是常说的时间片机制

调度原则

原则一:为提高CPU利用率,在发生I/O事件使CPU空闲时,调度程序从就绪队列选一个进程运行

原则二:为提高系统吞吐率,调度程序要权衡长任务与短任务进程的运行完成数量

原则三:为减少周转时间,调度程序要尽量减少进程的等待时间(周转T=等待时间+运行时间)

原则四:就绪队列中进程的等待时间也是调度程序要考虑的

原则五:对于交互式比较强的应用,调度程序也要考虑。如键盘鼠标

调度算法

不同场景适用不同调度算法

多级反馈队列调度算法

最高优先级调度算法

时间片轮转调度算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/762855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 反射四大核心类:Class、Constructor、Method、 Filed

目录 反射可以做到的事情 反射重要的4个类 Class类 Class类的类图 Class类常用方法 获取Class类对象4种方式 基本数据类型的Class类对象和包装类的Class类对象 Field类 Method类 Constructor类 反射的简单使用 反射可以做到的事情 在不修改源码的情况下,…

Redis主从复制环境部署

文章目录 Redis主从复制:原理:全同步过程:增量同步过程:主从复制配置:关闭防火墙和Selinux(三台都要)修改bindIP:node3node2master 以138为主,140,141为从检查…

redis 跳跃表、字典、压缩列表、快速列表

redis 跳跃表、字典、压缩列表、快速列表 1. 跳跃表 ​ 跳跃表是有序集合的底层实现。就是将有序集合的部分节点进行分层。每一层都是有序集合,并且层次越高,节点数量就越少。最底层的包含所有节点数据。典型的空间换时间。 ​ Redis中的跳跃表&#x…

使用 FreeCAD 软件打开 stp、dwg、dxf 等模型文件并测量零件尺寸

1、下载安装 FreeCAD 软件 https://www.freecad.org/downloads.php 2、打开 stp 等模型文件,选择 framework 查看方式(只显示点、线) 3、切换到 Part 菜单栏 4、打开 Measure Linear 工具(测量线性距离) 5、选择两个…

初探KVM虚拟化技术:新手指南

首先了解一下虚拟化的概念 虚拟化是指对资源的逻辑抽象、隔离、再分配、管理的一个过程,通常对虚拟化的理解有广义狭义之分。广义包括平台虚拟化、应用程序虚拟化、存储虚拟化、网络虚拟化、设备虚拟化等等。狭义的虚拟化专门指计算机上模拟运行多个操作系统平台。…

安卓设备监听全部输入信号

前言: 最近团队收到一个产品需求,需要监听安卓设备上用户是否有输入行为,以免定制推荐的时候打搅到用户。这里指的是设备上所有应用的输入行为,而不是单指某一个应用。 这个需求还是蛮有挑战性的,需要涉及到很多FW层…

Java设计模式之模板模式

1. 模板模式介绍 1、模板模式即模板方法模式自定义了一个操作中的算法骨架,而将步骤延迟到子类中,使得子类可以不改变一个算法的结构,可以自定义该算法的某些特定步骤; 2、父类中提取了公共的部分代码,便于代码复用&am…

PyTorch深度学习实战(5)——计算机视觉基础

PyTorch深度学习实战(5)——计算机视觉基础 0. 前言1. 图像表示2. 将图像转换为结构化数组2.1 灰度图像表示2.2 彩色图像表示 3 利用神经网络进行图像分析的优势小结系列链接 0. 前言 计算机视觉是指通过计算机系统对图像和视频进行处理和分析&#xff…

Scala(二)

第2章 变量和数据类型 2.1 注释 Scala注释使用和Java完全一样。 注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。 1)基本语法 (1)单行注释:// (2&#xff0…

高时空分辨率、高精度一体化预测技术的风、光、水自动化预测技术的应用

第一章 预测平台讲解及安装 一、高精度气象预测基础理论介绍 综合气象观测数值模拟模式; 全球预测模式、中尺度数值模式; 二、自动化预测平台介绍 Linux系统 Crontab定时任务执行机制 Bash脚本自动化编程 硬件需求简介 软件系统安装 …

独立站该怎么带来客户流量?来看看这五大方法吧!

建立独立站是为了让更多的人知道你的品牌和产品,从而吸引潜在客户并转化为销售机会。以下是一些可以帮助独立站带来客户流量的方法: 01.SEO(搜索引擎优化): 优化网站的SEO,使得搜索引擎能够更好地找到你的…

MyBatis之慎用association

这里先总结一下 association 存在的问题。 一、内嵌查询时存在报错Id找不到及内存溢出隐患 二、一对多关系数据重复问题 三、多层嵌套内层 association 查询结果为null 或 非预期的值 一、内嵌查询时存在报错Id找不到及内存溢出隐患 参考: https://www.lmlphp.co…

DP358/321/323/324运算放大器芯片

DP358、DP321、DP323、DP324是一款低噪声、低压、低 功耗轨到轨输出运放大器,该系列放大器的增益带宽为 11MHz,压摆率为 8.5V/uS,其中DP323 在掉电工作模式下待机电流小于1uA。该系列放大器可以广泛应用于各种电子产品领域。 主要特性: 轨到轨最大输入…

电脑提示msvcr110.dll丢失怎样修复呢?推荐三个修复方法

Windows系统总是不可避免会出现系统报错,提示msvcr110.dll丢失,无法运行启动软件程序,主要就是由于系统的msvcr110.dll丢失或者损坏。msvcr110.dll是Microsoft Visual C Redistributable软件包中的一个文件,它是由Microsoft Visua…

【文生图系列】Stable Diffusion Webui安装部署过程中bug汇总(Linux系统)

文章目录 bugs虚拟环境pythongfpgan和cython bugs 看网上部署stable diffusion webui的教程,很简单。而且我也有部署stable diffusion v1/v2的经验,想着应该会很快部署完stable diffusion webui,但是没想到在部署过程中,遇到各种…

【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame

文章目录 前言一、DataFrame创建1.1 字典创建1.2 NumPy二维数组创建 二、DataFrame切片2.1 行切片2.2 列切片2.3 行列切片 三、DataFrame运算3.1 DataFrame和标量的运算3.2 DataFrame之间的运算3.3 Series和DataFrame之间的运算 四、DataFrame多层次索引4.1 多层次索引构造1.隐…

AJAX异步请求JSON数据格式

目录 前言 1.AJAX的实现方式 1.1原生的js实现方式 1.2JQuery实现方式 2.1语法 3.JSON数据和Java对象的相互转换 3.1将JSON转换为Java对象 3.2将Java对象转换为JSON 前言 AJAX:ASynchronous JavaScript And XML 异步的JavaScript 和 XML。 Ajax 是一种在…

在安卓里用c++显示骨骼动画

1. 程序模块图 2. 编译第三方库Assimp 2.1 下载 官网下载5.0.0版本,https://codeload.github.com/assimp/assimp/zip/refs/tags/v5.0.0 2.2 生成安卓编译链 解压后在assimp-5.0.0下建文件夹BuildAssimp 放两个脚本make_standalone_toolchain.bat python D:/Android/Sdk/nd…

安达发|各部门实施APS系统前后有哪些变化?

众所周知,生产计划部门是制造企业的重要部门,承担销售、采购、仓储、质量检验和生产的各个部门的协调工作。APS 先进计划排程系统系统通过人工智能算法跟踪所有资源,包括材料、设备、人员、客户需求、订单变更等,自动快速计算出“…

odoo-031 odoo13和odoo16的网站上添加显示变体描述 Website Add Variant Description

文章目录 测试环境需求描述实现步骤实际效果思路说明 测试环境 Odoo 版本: odoo13 和 odoo16 Python 版本:3.6.9 操作系统:Ubuntu 18.04 需求描述 添加变体描述,显示在 form 视图;在网站上动态显示产品变体描述。 …