博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算机操作系统学习笔记——操作系统中的进程和线程
阅读量:3934 次
发布时间:2019-05-23

本文共 6841 字,大约阅读时间需要 22 分钟。

进程和线程

一、进程

1、基本概念

  • 为了使参与并发执行的程序(含数据)能够独立运行,需专门的一个数据结构:进程控制块(Process Control Block,PCB)

  • 系统利用 PCB 来描述进程的基本情况和运行状态,进而管理和控制进程。

  • 进程映像,也称作进程实体由程序段、相关数据和 PCB 构成。所谓创建进程,就是创建进程映像中的 PCB;撤销进程就是撤销进程的 PCB。

  • 进程映像是静态的,进程是动态的PCB 是进程存在的唯一标志

  • 不同角度,进程定义不同,典型定义如下:

1)进程是程序的一次执行过程。2)进程是一个程序及数据在处理机商顺序执行时所发生的活动。3)进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

2、基本特征

  • 进程的基本特征如下:

1)动态性:

  • 指进程作为程序的一次执行,有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡地。动态性是进程最基本的特征。

2)并发性:

  • 指内存在同一段时间段内有多个进程实体存在。并发性是进程地重要特征,也是操作系统的重要特征。

3)独立性:

  • 指进程实体是一个独立运行、独立获得资源和独立接受调度的基本单位,凡未建立 PCB 的程序,都不能作为一个独立的单位参与运行。

4)异步性:

  • 指进程按各自独立的、不可预知的速度向前推进。异步性会导致结果的不可再现性,为此操作系统中必须配置相应的进程同步机制。

5)结构性:

  • 指每个进程都配置有一个 PCB 对其进行描述

3、5 态 4 换

  • 指的是进程的五种状态,以及状态之间的四种转换。
  • 五种进程态分别是:运行态、就绪态、阻塞态、创建态和结束态。四种转换分别是:就绪态→运行态、运行态→就绪态、运行态→阻塞态和阻塞态→就绪态
    在这里插入图片描述
  • 五种状态的具体事件:

1)运行态:

  • 指进程正在处理机上运行。单处理机系统上,每个时刻处于运行态的进程有且只有一个,而在多处理机系统上则不止一个。

2)就绪态:

  • 指进程获得了除处理机外的一切所需资源,形象地说就是万事俱备,只待东风;此时,进程一旦获得处理机便可立即执行。系统中处于就绪态的进程,可以有多个,通常一队列形式等候处理机,称为就绪队列。

3)阻塞态:

  • 也叫做等待态指进程正在等待某件事而暂停运行,此时就算由空闲的处理机,也不能进入,因为运行所需要的条件还不具备。

4)创建态:

  • 指的是进程正在被创建,尚未到达就绪态;创建进程通常不是一蹴而就,需要经过多道步骤:首先申请一个空白的 PCB,并向 PCB 写入一些控制和管理进程的信息;然后再由系统为该进程分配运行所需的各种资源;然后再把该进程转入就绪态。

5)结束态:

  • 指进程正从系统消失,正常结束或因为其他原因中断退出运行。进程结束运行时,系统首先必须置该进程为结束态,然后进一步处理资源释放和回收等善后工作。
    需要特别注意就绪态和阻塞态的不同:前者是一种各项准备都已经好了,只待获得处理机就可以运行;而后者是一种即便获得处理机也无法运行的状态。
  • 四种转换发生的时机:
1)就绪态→运行态:当进程被调度获得处理机资源时。2)运行态→就绪态:处于运行态的进程用完了时间片,但是任务还没有完成也没有运行出错,不得不让出处理机时;或者在某些操作系统中,当有更高优先级的进程就绪时,调度程序将正在执行的进程转为就绪态,让有更高优先级的进程先执行。3)运行态→阻塞态:进程请求某一资源,通常是外设的使用和分配或等待某一件事的发生时,进程会从运行态进入阻塞态;进程请求系统调用时也会发生运行态到阻塞态的切换。4)阻塞态→就绪态:进程等待的事件到来或中断结束时,进程就会从阻塞态进入就绪态 ,等待获取处理机资源进行运行。

4、进程控制

  • 进程控制是指对系统中的所有进程进行有效的管理,一般由一个原语执行具体的管理,该原语通常具有进程创建和终止、进程态的转换等功能

4.1、进程创建

  • 允许一个进程创建另一个进程,此时创建者称为父进程,被创建的称为子进程;子进程可以继承父进程的所拥有的资源。当子进程被撤销时,应将其从父进程处获得的资源归还给父进程;而撤销父进程时,必须同时撤销其所有子进程。
    操作系统创建一个新进程的过程如下:
1)为进程分配一个唯一的进程标识符,并申请一个空白的 PCB,因为 PCB 有限,若 PCB 申请失败,则创建失败。2)为进程分配资源,为新进程的程序和数据以及用户栈分配必要的内存空间,若资源不足,进程进入阻塞态。3)初始化 PCB,主要包括初始化标志信息、初始化处理机状态信息和初始化处理机控制信息,以及设置进程的优先级。4)若进程就绪队列能够接纳新进程,则将新进程插入就绪队列,等待被调度运行。

4.2、进程终止

  • 引起进程终止的事件:
  • a、正常结束,进程完成任务准备退出运行
  • b、异常结束,进程运行时发生了异常,使进程无法继续运行,常见的引起进程异常的有:存储区越界、保护错、非法指令、特权指令、运行超时、算术运算错、I/O 故障等
  • c、外界干预,指进程应外界的请求而终止运行,如操作员或操作系统的干预、父进程请求和父进程终止
- 操作系统终止进程的过程如下:1)根据被终止进程的标识符,检索 PCB,从中读取该进程的状态。2)若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。3)若该进程还有子孙进程,则将其所有子孙进程终止。4)将该进程所拥有的全部资源,或归还给父进程,或归还操作系统。5)将该 PCB 从所在队列或链表中删除。

4.3、进程的阻塞

  • 正在执行的进程,由于等待的事件未发生或无新工作可做等,由系统自动执行阻塞原语(Block),使自身由运行态进入阻塞态。进程阻塞是进程自身的一种主动行为,因此只有处于运行态的进程才有可能进入阻塞态
  • 阻塞原语的执行过程如下:
1)找到将要被阻塞进程的标识号对应的 PCB。2)若该进程为运行态,则保护其现场,将状态转为阻塞态,停止运行。3)把该 PCB 插入相应事件的等待队列,将处理机调度给其他进程。

4.4、进程唤醒

  • 当被阻塞的进程所期待的事件发生了,由有关进程调用唤醒原语(Wakeup),将等待该事件的进程唤醒
  • 唤醒的过程一般如下:
1)在该事件的等待队列中找出相应进程的 PCB 。2)将其从等待队列中移出,并置其状态为就绪态。3)把 PCB 插入就绪队列,等待调度程序调度。

4.5、阻塞与唤醒的关系

  • 阻塞和唤醒是作用相反的一对原语,必须成对使用Block 原语由进程自身调用实现,Wakeup 则由一个与被唤醒的进程合作或其他相关进程调用实现

4.6、进程切换

  • 进程切换是指处理机从一个进程的运行转到另一个进程上运行,在该过程中,进程的运行环境产生了实质性的变化。进程切换一般在内核态下完成
  • 进程切换的过程如下:
1)保护处理机上下文,包括程序计数器和其他寄存器。2)更新 PCB 信息。3)把进程的 PCB 移入相应的队列,如就绪、在某事件的阻塞队列等。4)选择另一个进程执行,并更新其 PCB。5)更新内存管理的数据结构。6)恢复处理机上下文。

4.7、进程切换与 CPU 模式切换的区别

  • 模式切换时,处理机逻辑上可能还在同一进程中运行。若进程因中断或异常进入核心态运行,执行完后又回到用户态刚被中断的程序运行,则操作系统只需恢复进程进入内核所保护的 CPU 现场,而无需改变当前进程的环境信息。但若要切换进程,当前运行进程改变了,则当前进程的环境信息也需要改变

4.8、调度和切换的区别

  • 调度是指决定资源分配给哪个进程的行为,是一种决策行为切换是指实际的分配的行为,是执行行为一般先有资源的调度,然后才有进程的切换

5、进程的组成

  • 进程是一个独立的运行单位,也是操作系统进行资源分配和调度的基本单位,由进程控制块 PCB,程序段和数据段组成

5.1、PCB

  • PCB 是进程存在的唯一标志,操作系统管理和控制进程离不开 PCB,PCB 主要包括进程描述信息、进程控制和管理信息、资源分配清单和处理机相关信息,如下表:
    在这里插入图片描述
1)进程描述信息:
  • 进程标识符:用于标识系统中正在运行的进程,标识符是唯一的,通常在任务管理器中都可以看到进程标识符,如下:
    在这里插入图片描述
  • 用户标识符用于标识进程归属的用户,用户标识符主要为共享和保护服务。
2)进程控制和管理信息:
  • 进程当前状态,描述进程的状态信息,为处理及分配调度提供依据进程优先级,描述进程抢占处理机的优先级,优先级高的可优先获得处理机代码运行入口地址,记录程序开始运行的地址;程序外存地址指的是程序存储在磁盘的地址信息
3)资源分配清单:
  • 用于说明有关内存地址空间或虚拟地址空间的状况,所打开的文件的列表和所使用的输入/输出设备信息。
4)处理机相关信息:
  • 主要指处理机中各种寄存器的值,当进程被切换时,处理机状态信息都必须保存在相应的 PCB 中,以便在该进程重新执行时,能从断点继续执行。

  • 为了方便进程的调度和管理,需要将各进程的 PCB 用适当方法组织起来,常用的组织方式有链接方式和索引方式;链接方式是将同一状态的 PCB 链接成一个队列,不同状态对应不同队列,也可根据处于阻塞态的进程的 PCB,根据阻塞原因排成多个阻塞队列;索引方式是将同一状态的进程组织在一个索引表中,索引表的表项指向相应的 PCB,不同状态对应不同的索引表

5.2、程序段

  • 程序段就是能够被进程调度到 CPU 执行的程序代码段。程序可以被多个进程共享,也就是多个进程可以运行同一个程序。

5.3、数据段

  • 一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。

6、进程的通信

  • 进程通信是指进程之间的信息交换,PV操作是低级通信方式,高级的通信方式——以较高的效率传输大量数据的通信方式——主要有共享存储、消息传递和管道通信

6.1、共享存储

  • 在通信的进程之间存在一快可以直接访问的共享空间,通过对这片空间进行读写操作实现进程之间的信息交换
  • 对共享空间进行读写操作时,需要使用同步互斥工具进行控制。共享存储分为:低级共享,指基于数据结构的共享;高级共享,是指基于存储区的共享。
  • 操作系统只负责为通信进程提供可共享使用的存储空间和同步互斥工具,而数据交换则由用户自己安排读/写指令完成。
  • 注意:进程空间是彼此独立的,进程运行期间不允许访问其他进程的空间

在这里插入图片描述

6.2、消息传递

  • 在消息传递系统中,进程间的数据交换以格式化的消息(Message)为单位,进程通过系统提供的发送消息和接收消息两个原语进行数据交换。主要有直接通信和间接通信两种方式。
1)直接通信:
  • 发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息队列上取得消息。
    在这里插入图片描述
2)间接通信:
  • 发送进程将消息发送给某个中间实体,接收进程从该中间实体中取得消息,这种中间实体一般称为信箱,而这种通信方式又称为信箱通信方式,典型应用就是电子邮件系统

6.3、管道通信

  • 所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间的通信的一个共享文件,又名 pipe 文件

  • 向管道提供输入的发送进程,以字符流形式将大量数据写入管道;而接收管道输出则从管道接收数据。

  • 为了协调双方的通信,管道机制必须提供:互斥、同步和确定对方的存在共三方面的协调能力。

  • 从管道读数据是一次性操作,数据一旦被读取,它就从管道中被抛弃,释放空间以便写入更多的数据。管道只能采用半双工通信,即某一时刻就只能单向传输。要实现父子进程双方的互动通信,需要定义两个管道。

  • 管道可以理解为共享存储的优化和发展,因为在共享存储中,若某进程要访问共享存储空间,则必须没有其他进程在该共享存储空间进程写操作,否则访问行为被阻塞。而管道通信中,存储空间进化成了缓冲区,缓冲区只允许一边写入、另一边读出,因此上述的阻塞问题便不会存在,因为写进程会先把缓冲区写满,然后才让读进程读,当缓冲区还有数据时,写进程不会往缓冲区写数据,这决定了管道通信是半双工通信。

    在这里插入图片描述

二、线程

1、基本概念

  • 引入线程是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能

  • 线程的最直接理解就是“轻量级进程”,是一个基本的 CPU 执行单元,也是程序执行流的最小单元,由线程 ID、程序计数器、寄存器集合和堆栈组成。

  • 线城是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,除了运行中必不可少的资源;但它与同属一个进程的其他线程共享进程所拥有的全部资源

  • 一个线程可以创建和撤销另一个线程,同一进程的多个线程之间可以并发执行;由于线程之间的相互制约,线程运行中呈现出间断性。线程也有就绪、运行和阻塞三种基本状态

  • 引入线程后,进程只作为除 CPU 外的系统资源的分配单元,而线程作为处理机的分配单元;同一个进程内部的线程切换只需要很少的时空开销。

2、线程和进程的异同

1)调度

  • 传统操作系统中,拥有资源和独立调度的基本单位都是进程。而引入线程后的系统中,线程是独立调度的基本单位,进程是拥有资源的基本单位。进程内部线程切换不形成进程切换,不同归属的线程切换才会出现进程切换。

2)拥有资源

  • 线程不拥有系统资源,除了必不可少的资源外,只能通过所隶属的进程间接获得资源;而进程无论在传统操作系统还是引入线程后的操作系统,都是拥有资源的。

3)并发性

  • 在引入线程的操作系统中,进程和线程之间都可以并发执行,从而提高了系统的吞吐量。

4)系统开销

  • 进程的创建与撤销所带来的系统开销远大于线程的创建和撤销,因为进程涉及到资源的分配与回收,而线程几乎没有什么的资源的分配和回收;另外,线程之间的通信和同步相比进程的,更容易实现,甚至不需要操作系统的干预。

5)地址空间和其他资源

  • 进程的地址空间之间相互独立,同一进程的各线程间共享进程的资源,进程内部的线程对其他进程不可见

6)通信

  • 进程通信(IPC)需要进程同步和互斥手段,以保证数据的一致性,而线程间可以直接读/写进程数据段来进行通信

3、线程的属性

  • 线程的主要属性如下:
1)线程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场状态。2)不同线程可以执行相同的程序,即同一个服务程序被不同用户调用时,操作系统把它们创建成不同的线程。3)同一进程中各个线程共享该进程所拥有的资源。4)线程是处理机的独立调度单位,多个线程是可以并发执行的。在单 CPU 计算机系统中,线程交替占用 CPU;在多 CPU 系统中,各线程占用不同 CPU,若各个 CPU 同时为一个进程内的各线程服务,则可以缩短进程的处理时间。5)一个线程被创建后,便开始它的生命周期直到终止,在生命周期内会经历阻塞态、就绪态和运行态等各种状态变化。

4、线程如何实现

  • 线程的实现方式分为用户级线程(User-Level Thread,ULT)和内核级线程(Kernel-level Thread,KLT)内核级线程又称为内核支持的线程
  • 用户级线程中,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。应用程序通过使用线程库设计成多线程程序;通常,应用程序从单线程开始,在线程开始运行后,在其运行的任何时刻,可以通过调用线程库的派生例程创建一个在相同进程中运行的新线程。
  • 内核级线程中,线程管理的所有工作由内核完成,内核为进程及其内部的线程维护上下文信息,调度也在内核基于线程架构的基础上完成。
  • 有些系统使用组合方式的多线程实现,线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行。一个应用程序的多个用户级线程被映射到一些(小于等于用户级线程的数目)内核级线程上。
    在这里插入图片描述

5、多线程模型

  • 常见的额多线程模型如下:

1)多对一模型:

  • 将多个用户级线程映射到一个内核级线程,线程管理在用户空间中完成
  • 优点:线程管理在用户空间进行,因而效率比较高
  • 缺点:一个线程在使用内核服务时被阻塞,整个进程都会被阻塞,多个线程不能并行地运行在多个处理机上

2)一对一模型:

  • 将每个用户级线程映射到一个内核级线程
  • 优点:当一个线程被阻塞,允许另一个线程继续执行,并发能力强
  • 缺点:每创建一个用户级线程都要创建一个内核级线程与其对应,使得创建线程地开销变大,影响应用程序的性能

3)多对多模型:

  • 将 n 个用户级线程映射到 m 个内核级线程上,要求 m<= n
  • 特点:多对多模型是多对一和一对一模型的折中,既克服了多对一模型并发度不高的缺点,又克服了一对一模型的一个用户进程占用太多内核级线程而开销太大的缺点。此外,还拥有多对一模型和一对一模型各自的优点

转载地址:http://qmqgn.baihongyu.com/

你可能感兴趣的文章
js 表单验证
查看>>
怎么找到适合自己的工作
查看>>
CGI脚本
查看>>
nginx的fix_pathinfo漏洞
查看>>
php-cgi占用cpu资源过高的解决方法
查看>>
php-fpm.conf 相关参数
查看>>
nginx 内部结构分析
查看>>
utuntu常用配置
查看>>
GIT简介
查看>>
GIT客户端
查看>>
GIT系统安装
查看>>
GIT命令行应用
查看>>
php编程技巧
查看>>
款免费的PHP加速器:APC、eAccelerator、XCache比较
查看>>
Nginx 压力测试 /webbench
查看>>
ubuntu访问windows共享文件夹
查看>>
ubuntu用户和用户组管理
查看>>
ubuntu网络配置
查看>>
linux 下 apache php-cgi 安装及配置
查看>>
git 传输
查看>>