当前位置: 首页 > news >正文

进程管理笔记1-进程线程基础知识

5.1 进程线程基础知识

进程

进程的基本定义

进行的程序。代码经过编译,变成二进制可执行文件,运行这个可执行文件后,装载到内存中,然后CPU执行其中指令。

并行和并发

并行指两个任务并列前行,并发指两个任务交替进行。
在这里插入图片描述
那么进程为什么会交替呢?因为有的进程会处于暂停等待状态,这时候就需要让出cpu的计算资源。因此,进程主要分三个状态:就绪,阻塞,运行在这里插入图片描述
就绪:等别的进程用好cpu资源
阻塞:有事用不了cpu资源
运行:正在使用cpu资源
在这里插入图片描述
还有开始结束状态不说了

那么在阻塞的进程等待过程中,实际上占用这物理内存,这很难受,因此需要把这个物理内存交换到硬盘,等再运行的时候,再接入到物理内存
因此,还需要一个挂起状态,指进程实际上没有占用物理内存
因此:
阻塞挂起状态:指进程在硬盘等待某事的发生
就绪挂起状态:进程在硬盘,只要进入内存立马运行

进程的控制结构

进程控制块PCB process control block PCB

PCB和进程绑定:
包含进程描述信息(pid),进程控制(当前状态,阻塞,就绪,运行),进程优先级。资源分配清单(关于内存地址,打开文件列表,和OI信息)。CPU相关信息,很重要,进程被切换时,状态保存在对应的PCB中,重新执行进程时,能从断点处继续执行
在这里插入图片描述

进程的控制

1、创建进程
申请一个空白的PCB并填写相关信息,分配资源,将这个pcb插入到就绪队列
2、终止进程
有三种:正常结束,异常结束,外界干预(kill)
在这里插入图片描述

3、阻塞进程
一旦一个进程被阻塞,只能由另一个进程唤醒
过程:寻找阻塞进程的PCB,然后将其转为阻塞,然后将PCB插入到阻塞进程中

4、唤醒进程
过程:
在该事件的阻塞队列中找到相应进程PCB,然后移出阻塞队列,标记为就绪状态,然后插入到就绪队列中等待调度

进程的上下文切换

一个进程切换到另一个进程,称为上下文切换

先介绍CPU的上下文切换:CPU中有着CPU寄存器和程序计数器,每次运行的时候都依赖的环境。CPU上下文切换就是把前一个任务的上下文(寄存器和程序计数器)保存下来,然后加载新任务的上下文,运行新任务。
系统内核保存的就是上一次的上下文信息

那么进程的上下文切换
除了虚拟内存,栈,全局变量等用户空间的资源,还包括内核堆栈、寄存器等内核空间的资源。

线程

用于满足:实体之间可以并发运行,且共享地址空间

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

同一进程内,多个线程可以共享代码段、数据段 、打开的文件等资源,但每个线程都有一套独立的寄存器和栈,这样可以确保线程的控制流是相对独立的。

线程和进程的比较

进程是资源(内存,文件)分配单位,线程是CPU的调度单位
进程拥有完整资源平台,线程只独享寄存器和栈
线程同样具有就绪、阻塞、执行的三种状态
现成能减少并发执行的时间和开销

线程比进程更能节约时间:
1、线程创建时间短(不需要像进程一样创建那么多,只需要寄存器和栈),共享进程的资源
2、线程终止时间快,释放的资源少
3、同一个进程内线程切换速度比进程快,因为线程共享一个虚拟空间,也就是同一个进程的线程的页表一样,不需要切换页表这个开销
4、数据交互时候不需要经过内核,这就使得线程之间的数据交互效率更高

线程的上下文切换

线程是调度的基本单位,进程是资源拥有的基本单位

在这里插入图片描述
线程的上下文切换的是什么?
1、若不同进程的线程,则切换过程和进程上下文一样
2、若相同线程,虚拟内存共享,因此只切换寄存器,栈等信息,因此开销很小

线程的实现

1、用户线程:在用户空间实现的线程,不是内核管理的,用户态的线程库来管理的线程

2、内核线程:在内核中实现的线程,内核管理

3、轻量级线程:内核中支持用户线程

用户线程,内核线程存在一对一,多对一,一对多的关系

用户线程

用户线程是基于用户态的线程管理库来实现的,线程控制块TCB(Thread Control Block)也是库中实现的,操作系统看不到,只能看到PCB(进程控制块)
在这里插入图片描述
因此操作系统不直接参与线程的管理和调度。

内核线程

在这里插入图片描述

调度

在这里插入图片描述
在这里插入图片描述

相关文章:

  • R语言绘图:小提琴图
  • 在Mac上一键安装Mysql(解决所有安装问题)
  • sql-DDL
  • 《C语言中的“吃豆人”:%*c 的奇妙冒险》
  • Lineageos 22.1(Android 15)实现负一屏
  • CSS 选择器详解:类型、用法与示例
  • 微博ip属地不发微博会不会变
  • Oracle 数据迁移至 GaussDB 注意事项
  • Gone v2 Tracer 组件-给微服务提供统一的traceID
  • 科技资讯杂志科技资讯编辑部科技资讯杂志社2025年第2期目录
  • 软考笔记——程序设计语言基础知识
  • Linux文件IO
  • 浅谈canal实例 在docker里面安装canal镜像 Canal监听MySQL数据库变更并同步更新Redis和Elasticsearch 示例
  • zabbix原生linux命令部署和docker部署
  • docker安装milvus向量数据库Attu可视化界面
  • 母婴电商企业案例:日事清驱动项目管理执行与OKR目标管理的流程自动化实践
  • 为什么labelme框选图片后闪退
  • 红宝书第七讲:this绑定与强制类型转换详解(小白指南)
  • 51单片机程序变量作用域问题
  • 【Oracle资源损坏类故障】:详细了解坏块
  • 从世界工厂走向全球创新中心,上海车展为何成为全球汽车行业风向标?
  • 伊朗港口爆炸最新情况:14死700多伤,大火延烧,调查困难
  • 谢震业、梁小静等名将在列,世界田联接力赛中国队名单出炉
  • 中国人民对外友好协会代表团访问美国
  • 四川:全省统一取消普通住宅和非普通住宅标准
  • 谷歌一季度利润增超四成:云业务利润率上升,宏观环境可能影响广告业务