操作系统之进程与线程

2019-07-14 09:31发布

1.进程概述:

(1)概念:
为了使进程并发执行,必须为每一个程序分配一个独立的数据结构PCB(进程控制块),程序段,数据段,PCB构成了进程实体,创建与撤销进程实质上是创建和撤销实体中的PCB,PCB是进程存在的唯一标识
(2)进程在不同角度的定义:
  • 进程是程序的一次执行过程。
  • 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
  • 进程是具有独立功能的程序在一个数据集合上或者说进程实体上运行的过程,它是系统进行资源分配和调度的一个独立单位。
(3)进程的特性:
1.动态性 2.独立性 3.异步性 4.并发性 5.结构性
(4)并发与并行的区别(进程之间时并发关系,不是并行关系 ):
并行:两个或者多个事件在同一时刻发生;
并发:两个或多个事件在同一时间间隔发生。
(5)进程的五种状态:
1.创建 2.就绪 3.运行 4.阻塞 5.终止 注:进程的管理控制信息是在创建进程时写入PCB信息中的,PCB是进程存在的唯一标识。
(5)进程状态的具体过程:
创建过程:
1.分配进程id以及pcb
2.为程序、数据、用户栈分配空间,也就是创建实体
3.初始化PCB 包括初始化标志、处理机状态、处理机控制、优先级
4.进程队列满足条件,则将进程插入队列,等待调用
进程的结束分为正常结束与异常结束(非法,负极,特权指令,存储或者I/O故障、操作系统干预等) 结束过程:
1.根据进程pid检索PCB并从中读出该进程的状态。
2.若处于执行状态,则立即终止进程的执行并释放处理机资源。
3.终止子进程。
4.将该进程所拥有的全部资源归还给其父进程或操作系统。
5.删除PCB。
进程的唤醒与阻塞:都是通过pid找到PCB,然后对PCB进行进出队列的控制. 进程的切换过程:为先保存当前进程的数据信息(上下文,数据结构,PCB),然后切换到下一个进程的数据信息(PCB,数据结构,上下文).
(6)PCB包含信息:
进程描述 进程控制和管理 资源分配 处理机 进程标识 进程状态 代码段指针 通用寄存器 用户标识 进程优先级 数据段指针 地址寄存器 代码入口 堆栈段指针 控制寄存器 程序外存地址 文件描述符 标志寄存器 处理机占用 键盘 状态字 信号量使用 鼠标 进入内存时间 各PCB按照进程状态通过链接方式(队列)或者索引方式将他们组织起来.
(7)进程间的通信:
通信方式:
1.共享存储: 操作系统提供共享空间以及互斥工具,数据交换由用户完成
2.消息传递: 通过收发消息的原语进行数据交换,信箱发送或者直接发送的方式
3.管道通信: 所谓管道,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件

2.线程概念和多线程模型

(1)线程的基本概念:
引入线程,是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能。
线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。 引入线程后,进程的内涵发生了改变,进程只作为除CPU以外系统资源的分配单元,线程则作为处理机的分配单元。
(2)线程与进程的比较
  • 调度。在传统的操作系统中,拥有资源和独立调度的基本单位都是进程。在引入线程的操作系统中,线程是独立调度的基本单位,进程是资源拥有的基本单位。在同一进程中,线程的切换不会引起进程切换。在不同进程中进行线程切换,如从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。
  • 拥有资源。不论是传统操作系统还是设有线程的操作系统,进程都是拥有资源的基本单位,而线程不拥有系统资源(也有一点必不可少的资源),但线程可以访问其隶属进程的系统资源。
  • 并发性。在引入线程的操作系统中,不仅进程之间可以并发执行,而且多个线程之间也可以并发执行,从而使操作系统具有更好的并发性,提高了系统的吞吐量。
  • 系统开销。由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、 I/O设备等,因此操作系统所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程CPU环境的保存及新调度到进程CPU环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。此外,由于同一进程内的多个线程共享进程的地址空间,因此,这些线程之间的同步与通信非常容易实现,甚至无需操作系统的干预。
  • 地址空间和其他资源(如打开的文件):进程的地址空间之间互相独立,同一进程的各线程间共享进程的资源,某进程内的线程对于其他进程不可见。
  • 通信方面:进程间通信(IPC)需要进程同步和互斥手段的辅助,以保证数据的一致性,而线程间可以直接读/写进程数据段(如全局变量)来进行通信。
(3)线程的属性
在多线程操作系统中,所谓进程处于“执行”状态,实际上是指该进程中某线程正在执行。线程的主要属性如下:
  • 线程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场状态。
  • 不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,操作系统为它们创建成不同的线程。
  • 同一进程中的各个线程共享该进程所拥有的资源。
  • 线程是处理机的独立调度单位,多个线程是可以并发执行的。在单CPU的计算机系统中,各线程可交替地占用CPU;在多CPU的计算机系统中,各线程可同时占用不同的CPU,若各个CPU同时为一个进程内的各线程服务则可缩短进程的处理时间。
  • —个线程被创建后便开始了它的生命周期,直至终止,线程在生命周期内会经历阻塞态、就绪态和运行态等各种状态变化。
(4)线程的实现方式
线程的实现可以分为两类:用户级线程(User-LevelThread, ULT)和内核级线程(Kemel-LevelThread, KLT)。内核级线程又称为内核支持的线程。 用户级线程:
在用户级线程中,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。应用程序可以通过使用线程库设计成多线程程序。通常,应用程序从单线程起始,在该线程中开始运行,在其运行的任何时刻,可以通过调用线程库中的派生例程创建一个在相同进程中运行的新线程。
内核级线程:
在内核级线程中,线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口。内核为进程及其内部的每个线程维护上下文信息,调度也是在内核基于线程架构的基础上完成。
组合方式
在一些系统中,使用组合方式的多线程实现。线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行。一个应用程序中的多个用户级线程被映射到一些(小于或等于用户级线程的数目)内核级线程上。
(5)多线程模型
有些系统同时支持用户线程和内核线程由此产生了不同的多线程模型,即实现用户级线程和内核级线程的连接方式。 1) 多对一模型
将多个用户级线程映射到一个内核级线程,线程管理在用户空间完成。
此模式中,用户级线程对操作系统不可见(即透明)。 优点:线程管理是在用户空间进行的,因而效率比较高。 缺点:当一个线程在使用内核服务时被阻塞,那么整个进程都会被阻塞;多个线程不能并行地运行在多处理机上。 2) 一对一模型
将每个用户级线程映射到一个内核级线程。
优点:当一个线程被阻塞后,允许另一个线程继续执行,所以并发能力较强。 缺点:每创建一个用户级线程都需要创建一个内核级线程与其对应,这样创建线程的开销比较大,会影响到应用程序的性能。 3) 多对多模型
将 n 个用户级线程映射到 m 个内核级线程上,要求 m <= n。
特点:在多对一模型和一对一模型中取了个折中,克服了多对一模型的并发度不高的缺点,又克服了一对一模型的一个用户进程占用太多内核级线程,开销太大的缺点。又拥有多对一模型和一对一模型各自的优点,可谓集两者之所长。