进程和线程

简介: 进程和线程

进程和线程


进程管理


进程是一个具有独立功能的程序在一个数据集合上的一次动态的执行过程


进程的组成


一个进程应该包括:


  • 程序的代码
  • 程序处理的数据
  • 程序计数器中的值,指示下一条将要运行的指令
  • 一组通用的寄存器的当前值,堆栈
  • 一组系统资源(如打开的文件)


总之,进程包含了正在运行的一个程序的所有状态信息。


进程和程序的联系


  • 程序是产生进程的基础
  • 程序的每次运行构成不同的进程
  • 进程时程序功能的体现
  • 通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序


进程和程序的区别


  • 进程时动态的,程序是静态的:程序是有序代码的集合,进程时程序的执行,进程由核心态和用户态
  • 进程时暂时的,程序是永久的:进程的组成包括程序、数据和进程控制块(即进程状态信息)


进程的特点


  • 动态性:可以动态的创建、结束进程
  • 并发性:进程可以被独立调度并占用处理机运行;并发并行
  • 独立性:不同进程的工作不互相影响
  • 制约性:因访问共享数据、资源或者进程间的同步而产生制约


进程的控制结构


  • 进程控制块 PCB:操作系统管理控制进程运行所用的信息集合


操作系统用PCB来描述进程的基本情况以及运行状态的变化过程,PCB是进程存在的唯一标志

进程创建:为该进程生成一个PCB


  • 进程终止:回收他们的PCB
  • 进程的组织管理:通过对PCB的组织管理来实现


PCB包含有一下三大类信息:


  • 进程标识信息:如本进程标识,本进程的产生者标识(父进程标识);用户标识
  • 处理机状态信息保存区:保存进程的运行现场信息:


用户可见寄存器,用户程序可以使用的数据,地址等寄存器

控制和状态寄存器,如程序计数器,程序状态字

栈指针,过程调用、系统调用、中断处理和返回时需要用到它


  • 进程的控制信息:


调度和状态信息:用于操作系统调度进程并占用处理机使用

进程间通信信息:为支持进程间的通信相关的各种标识,信号,信件等,这些信息存在接收方的进程控制块中

存储管理信息:包含有指向本进程映像存储空间的数据结构

进程所有资源:说明由进程打开、使用的系统资源,如打开的文件等

有关数据结构连接信息:进程可以连接到一个进程队列中,或连接到相关的其他进程的PCB


PCB组织方式


  • 链表:同一状态的进程PCB成一链表,多个状态对应多个不同的链表
  • 索引表:同一状态的进程归入一个index表,多个状态对应多个不同的index表


进程的生命期原理


进程声明期间


  • 进程创建


系统初始化

用户请求创建一个新的进程

正在运行的进程执行了创建进程的系统调用


  • 进程运行


内核选择一个就绪的进程,让他占用处理机并执行


  • 进程等待


在以下的情况进程等待(阻塞)

请求并等待系统服务,无法马上完成

启动某种操作,无法马上完成

需要数据没有到达

进程只能自己阻塞自己,因为只有进程自身才能知道何时需要等待某种事件的发生


  • 进程唤醒


进程被唤醒的原因:

被阻塞的进程需要的资源被满足

被阻塞的进程等待的事件到达

将该进程的PCB插入到就绪队列

进程只能被别的进程或操作系统唤醒


  • 进程结束


以下四种情况进程结束


正常退出

错误退出

致命错误

被其他进程杀死


进程状态变化模型


进程三个基本状态:


  • 运行态
  • 就绪态
  • 阻塞态


进程的其他基本状态:


  • 创建态
  • 结束态


可能的变化状态如下:


  • NULL->New:一个新的进程被产生出来执行一个程序
  • New->Ready:当进程被创建完成并初始化之后,一切就绪准备运行时候,编程就绪态
  • Ready->Running:处于就绪黄台的进程被进程调度程序选中后,就分配到处理机上运行
  • Running->Exit:当进程标识它已经完成或者因出错,当前运行程序会被操作系统做结束处理
  • Running->Ready:处于运行状态的进程在其运行过程中,由于分配给他的处理机时间片用完而让出处理机
  • Running->Blocked:当进程请求某样东西且必须等到时候
  • Blocked->Ready:当进程要等待某个事件到来时,他从阻塞状态变成就绪态


进程挂起


进程挂起状态时,意味着进程没好友占用内存空间。处于挂起状态的进程映像在磁盘上。


  • 阻塞挂起状态:进程在外存并等待某个事件的出现
  • 就绪挂起状态:进程在外存,但是只要进入内存,即可运行


与挂起相关的状态转换


  • 挂起:把一个进程从内存转到外存,可能有以下几种情况:


阻塞到阻塞挂起:没有进程处于就绪状态或者就绪进程要求更多内存资源时,会进行这种转换,以提交新进程或运行就绪进程

就绪到就绪挂起:当有高优先级阻塞进程和低优先级就绪进程时,系统会选择挂起低优先级就绪进程

运行到就绪挂起:对抢先式分时系统,当有高优先级阻塞挂起进程因事件出现而进入就绪挂起时,系统可能会把运行进程转换到就绪挂起状态


  • 在外存时的状态转换:


阻塞挂起到就绪挂起:当有阻塞挂起进程因相关事件出现时,系统会把阻塞挂起进程转换为就绪挂起进程


  • 解挂/激活:把一个进程从外存转换到内存,可能有一下几种情况:


就绪挂起到就绪:没有就绪进程或挂起就绪进程优先级高于就绪进程时,会进行这种转换

阻塞挂起到阻塞:当一个进程释放足够内存时,系统会把一个高优先级阻塞挂起进程转换为阻塞进程


状态队列


  • 由操作系统来维护一组队列,用来表示系统当中所有进程的当前状态
  • 不同的状态分别用不同的队列来表示
  • 每个进程的PCB都根据它的状态加入到相应的队列当中,当一个继承的状态发生变化时,它的PCB从一个状态队列中脱离出来,加入到另外一个队列


上下文切换


停止当前运行的进程并且调度其他进程:


  • 必须在切换之前存储许多部分的进程上下文
  • 必须能够在之后恢复他们,所以进程不能显示它曾经被暂停过
  • 必须快速(上下文转换非常频繁)


线程管理


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


从两个方面来理解进程:


  • 从资源组合角度:进程把一组相关的资源组合起来,构成了一个资源平台,包括地址空间,打开的文件等
  • 从运行角度:代码在这个资源平台上的一条执行流程


线程的优点:


  • 一个进程中可以同时存在多个线程
  • 各个线程之间可以并发执行
  • 各个线程之间可以共享地址空间和文件资源等


线程的缺点:


  • 一个线程崩溃,会导致其所属进程所有线程崩溃


强调性能的时候需要用线程


线程和进程比较:


  • 进程时资源分配单位,线程是CPU调度单位
  • 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈
  • 线程同样具有就绪、阻塞和执行三个状态,同行存在状态间的转换关系
  • 线程能够减少并发执行的时间和空间开销


线程创建时间比进程短

线程的终止时间比进程短

同一进程内的线程切换时间比较短

由于统一进程的各个线程共享内存和文件资源,可以进行不通过内核的通信


线程的实现


主要有三种线程的实现方式:


  • 用户线程:在用户空间实现


在用户空间实现的线程机制不依赖于操作系统的内核,由一组用户级的线程库来完成线程的管理,包括进程的创建、终止、同步和调度等

缺点:

阻塞性的系统调用的话,则整个进程都会等待

当一个线程开始运行后,除非他主动交出CPU的使用权,否则它所在的进程当中的其他线程无法运行

由于时间片分配给进程,故而与其他进程比,在多线程执行时,每个线程得到的时间片较少,执行较慢


  • 内核线程:在内核中实现


是指在操作系统的内核当中实现的一种线程机制,由操作系统的内核来完成线程的创建爱你、终止和管理


  • 轻量级进程:在内核中实现,支持用户线程


他是内核支持用户线程,一个进程可以有一个或者多个轻量级进程,每个轻量级进程由一个单独的内核线程来支持


用户线程和内核线程的对应关系


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

热门文章

最新文章

相关实验场景

更多