进程与线程

简介: 进程与线程

进程与线程

进程的引入

  • 为什么引入进程?
  • 为了描述多道程序的并发执行,引入了进程的概念,通过进程管理多道程序之间的关系,可以解决对处理机的调度分配以及回收等问题。
  • 单道程序的顺序执行:
  • 程序可以理解为一个时间上按严格次序先后操作的序列。
  • 程序的顺序执行的特征
  • 顺序性:程序的执行严格规定的顺序执行
  • 封闭性:程序在封闭的环境下运行,程序在执行时独占系统资源
  • 可再现性:程序在执行时,只要初始条件一样,则结果必然一样
  • 程序并发执行的特征
  • 间断性(参考第一章多道程序的微观串行性)
  • 失去封闭性
  • 失去可再现性
  • 程序并发执行的条件
  • R(P1) ∩ W(P2) U R(P2) ∩ W(P1) U W(P1) ∩ W(P2)={};
  • 对于同一未加保护的数据执行读写、写读、写写操作违反Bernstein条件(程序并发执行的条件)
  • 进程的概念
  • 一个进程就是正在执行的程序。进程可以定义为并发执行的程序在一个数据集合上的执行过程
  • 进程是一个可以拥有资源的独立单位。
  • 进程是一个可以独立调度和分派的基本单位。
  • 进程跟程序的关系
  • 进程
  • 动态性、并发性、暂时性。
  • 结构特征:由程序、数据、PCB 组成。
  • 程序
  • 静态性、 顺序性、永久性。
  • 进程与程序密切相关。一个程序可以包含很多个进程。

进程的状态及组成

  • 进程的三种基本状态
  • 运行状态(进程占据CPU)
  • 就绪状态(进程已经获得除CPU的所有必要资源)
  • 阻塞状态(当进程由于等待某个I/O或同步事件暂停运行)
  • 进程三种基本状态的转换

graph LR

A[就绪]-->|程序调度|B[运行]

B-->|I/O资源被占用......|C[阻塞]

B-->|时间片用完|A

C-->|阻塞的原因被解除|A

  • 进程的创建以及退出状态
  • 创建状态:被创建的进程进入就绪队列
  • 退出状态:当进程完成了预期任务或者异常终止,进程转化为退出态
  • 进程五种状态的转换

graph LR

A[就绪]-->|程序调度|B[运行]

B-->|I/O资源被占用......|C[阻塞]

B-->|时间片用完|A

C-->|阻塞的原因被解除|A

D[创建状态]-->|接纳|A

B-->|完成预期任务......|E[退出状态]

  • 进程的挂起状态
  • 内外存对换紧张
  • 程序调试需要
  • 实时系统的负载需要

graph LR

A[就绪]-->|程序调度|B[运行]

B-->|I/O资源被占用......|C[阻塞]

B-->|时间片用完|A

C-->|阻塞的原因被解除|A

D[创建状态]-->|接纳|A

B-->|完成预期任务......|E[退出状态]

B-->|抢占式系统可能发生|F[就绪挂起]

C-->G[阻塞挂起]

A-->|挂起|F

F-->|激活|A

G-->|激活|C

G-->|I/O事件完成|F

  • 进程控制块(PCB)
  • 进程映像:需要一个数据结构来描述进程本身的特性、进程的状态、进程的调度信息、对资源的占有。
  • 进程映像由PCB、数据、程序、栈组成。
  • 作用:使一个在多道程序的环境下不能独立运行的程序成为一个独立运行的基本单位。系统总是通过访问PCB来感知进程的存在。
  • PCB中的内容
  • 进程描述信息
  • 进程名、进程标识符、用户名
  • 进程控制和资源占用信息
  • 程序入口地址、程序外存地址、进程同步以及通信机制、资源占用信息、链接指针
  • 进程调度信息
  • 进程状态、进程优先级、运行统计信息、进程阻塞原因
  • 处理机状态信息
  • 通用寄存器、指令计数器、程序状态字、栈指针
  • PCB的组织
  • 把许多具有相同状态的PCB链接在一起

进程控制

  • 核心态以及用户态:为了防止操作系统及其关键数据结构被用户无意或者有意篡改。将处理机的执行状态分为核心态以及用户态
  • 内核:与硬件紧密相关,且这部分程序必须常驻内存以提高操作系统的运行效率,这部分程序通常称作内核
  • 原语:许多指令构成的,完成一定功能的过程,由原子操作完成
  • 进程家族树:父进程撤销,则其下面所有进程全部撤销
  • 进程的创建以及撤销
  • 进程创建:应用请求、提供服务......
  • 创建原语:
  • 申请空白PCB
  • 初始化进程信息
  • 为进程分配资源
  • 将新进程插入就绪队列
  • 进程的撤销:
  • 撤销原语:
  • 查找需要撤销进程的PCB
  • 若进程处于运行则终止,并重新调度程序运行
  • 若进程有子孙,则终止所有子孙进程
  • 归还资源
  • 从所在的队列移除
  • 进程的阻塞以及唤醒
  • 阻塞原语:
  • 停止执行的进程
  • 将进程插入阻塞队列
  • 重新调度
  • 唤醒原语:
  • 将进程解下阻塞队列
  • 把进程插入就绪队列
  • 改变进程的PCB的状态
  • 进程的挂起与激活:
  • 挂起原语:
  • 检测被挂起进程的状态
  • 若进程处于就绪态,则变为就绪挂起状态
  • 若进程处于阻塞状态,则变为阻塞挂起状态
  • 若进程正在运行,则将进程转为就绪挂起态
  • 激活原语:
  • 检查被激活进程的状态
  • 若进程处于就绪挂起,则变为就绪态
  • 若进程处于阻塞态,则变为阻塞态
  • 若系统采用的是抢占式进程调度
  • 线程
  • 线程:比进程更小、能独立运行的基本单位
  • 多线程的优点:响应度高、资源共享、经济
  • 线程是进程的一个实体,是被独立调度和分派的单位
  • 线程又称轻型进程(LWP)

为了提高进程的并发度,同时减少系统的开销。操作系统学者把进程的两个基本属性分开。

既进程作为独立分配资源的单位,不在作为调度以及分派的基本单位

  • 线程的组成
  • TCB(线程控制块)
  • 线程标识符
  • 描述处理机状态信息的一组寄存器
  • 栈指针(用户栈/核心栈)
  • 私有存储区
  • 线程的状态
  • 参考进程
  • 线程的控制
  • 线程创建
  • 线程的撤销
  • 线程的等待
  • 线程让权(自愿放弃CPU)
  • 单线程进程模型
  • PCB、用户地址空间、用户栈、内核栈
  • 多线程进程模型
  • PCB
  • 用户地址空间
  • 多个(TCB、用户栈、内核栈)
  • 引入线程的必要性
  • 创建一个线程比进程所需的时间少
  • 撤销一个线程比撤销进程花费的时间少
  • 线程之间的切换比进程之间切换花费的时间少
  • 线程提高了不同执行程序之间的通信效率
  • 线程的实现
  • 用户线程(由应用程序完成,不依赖内核)
  • 内核级线程(依赖内核)
  • 用户级线程的优点
  • 线程切换状态不需要系统状态的转换
  • 每个进程可以使用专门的调度算法来调度线程
  • 用户级线程可以在任何操作系统运行而不需要操作系统支持
  • 内核级线程的优点
  • 在多处理机的环境中,可以把一个进程的多个线程分配到多个CPU上。
  • 如果进程中某个线程被阻塞,内核可以调度一个进程的另一个线程
  • 内核级线程本身可以被设置成为多线程
  • 组合方法
  • solaris操作系统使用内核级、用户级线程共同使用。
  • 多线程问题:
  • 线程取消
  • 立即取消:线程不需要时立即取消
  • 延迟取消:被取消的线程不断检查它是否应被终止,以一种有序的方式终结自己。
目录
相关文章
|
27天前
|
消息中间件 并行计算 安全
进程、线程、协程
【10月更文挑战第16天】进程、线程和协程是计算机程序执行的三种基本形式。进程是操作系统资源分配和调度的基本单位,具有独立的内存空间,稳定性高但资源消耗大。线程是进程内的执行单元,共享内存,轻量级且并发性好,但同步复杂。协程是用户态的轻量级调度单位,适用于高并发和IO密集型任务,资源消耗最小,但不支持多核并行。
40 1
|
6天前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
11天前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。
|
8天前
|
Java
java小知识—进程和线程
进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程 线程,与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比
19 1
|
13天前
深入理解操作系统:进程与线程的管理
【10月更文挑战第30天】操作系统是计算机系统的核心,它负责管理计算机硬件资源,为应用程序提供基础服务。本文将深入探讨操作系统中进程和线程的概念、区别以及它们在资源管理中的作用。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程和线程的管理技巧。
28 2
|
15天前
|
调度 Python
深入浅出操作系统:进程与线程的奥秘
【10月更文挑战第28天】在数字世界的幕后,操作系统悄无声息地扮演着关键角色。本文将拨开迷雾,深入探讨操作系统中的两个基本概念——进程和线程。我们将通过生动的比喻和直观的解释,揭示它们之间的差异与联系,并展示如何在实际应用中灵活运用这些知识。准备好了吗?让我们开始这段揭秘之旅!
|
1月前
|
存储 消息中间件 人工智能
进程,线程,协程 - 你了解多少?
本故事采用简洁明了的对话方式,尽洪荒之力让你在轻松无负担的氛围中,稍微深入地理解进程、线程和协程的相关原理知识
41 2
进程,线程,协程 - 你了解多少?
|
25天前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
|
28天前
|
消息中间件 并行计算 安全
进程、线程、协程
【10月更文挑战第15天】进程、线程和协程是操作系统中三种不同的执行单元。进程是资源分配和调度的基本单位,每个进程有独立的内存空间;线程是进程内的执行路径,共享进程资源,切换成本较低;协程则更轻量,由用户态调度,适合处理高并发和IO密集型任务。进程提供高隔离性和安全性,线程支持高并发,协程则在资源消耗和调度灵活性方面表现优异。
45 2
|
2月前
|
存储 消息中间件 资源调度
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
该文章总结了操作系统基础知识中的十个关键知识点,涵盖了进程与线程的概念及区别、进程间通信方式、线程同步机制、死锁现象及其预防方法、进程状态等内容,并通过具体实例帮助理解这些概念。
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识

热门文章

最新文章

相关实验场景

更多