第一部分:进程

1. 进程的概念

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

1

进程的组成:

一个程序运行的所有状态信息。

  1. 代码
  2. 数据
  3. 状态寄存器
  4. 通用寄存器
  5. 进程占用系统资源

进程的特点:

  1. 动态性
  2. 并发性
  3. 独立性
  4. 制约性

进程和程序的联系

  1. 进程市操作系统处于执行状态程序的抽象
    1. 程序 = 文件(静态的可执行文件)
    2. 进程 = 执行中的程序 = 程序 + 状态
  2. 同一个程序的多次执行对应不同的进程
  3. 进程执行的需要资源
    1. 内存
    2. cpu

进程和程序的区别:

  1. 进程是动态的,程序是静态的
    1. 程序是有序代码的集合
    2. 进程是程序的执行,进程有核心态/用户态
  2. 进程是暂时的,程序是永久的
    1. 进程是一个状态变化的过程
    2. 程序可长久保存
  3. 进程与程序的组成不同
    1. 进程的租车包括程序、数据和进程控制块

2. 进程控制块 PCB,Process Control Block

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

  1. 操作系统用PCB来描述进程的基本情况以及运行变化的过程
  2. PCB是进程存在的唯一标志
    1. 每个进程都在操作系统中有一个对应的PCB

进程控制块的使用

进程-创建,终止,组织管理

进程控制块的内容:

  1. 进程标识信息
  2. 处理机现场保存
  3. 进程控制信息
    1. 调度和状态信息
    2. 进程间的通信信息
    3. 存储管理信息
    4. 进程所用资源
    5. 有关数据结构连接信息

进程控制块的组织:

  1. 链表: 同一状态的进程其PCB成一链表,多个状态对应多个链表
  2. 索引表:统一状态归入一个索引表,由索引指向PCB

3. 进程状态

进程的生命周期划分:

  1. 创建
  2. 执行
  3. 等待
  4. 抢占
  5. 唤醒
  6. 结束

3.1 进程创建

  1. 系统初始化
  2. 用户请求创建一个新进程
  3. 正在运行的进程执行了创建进程的系统调用

-> 进入就绪状态

3.2 进程执行

  1. 内核选择一个就绪的进程,让它占用处理机并执行
    如何选择? ——> 处理机的调度算法

3.3 进程等待

  1. 请求并等待系统服务,无法马上完成
  2. 启动某种操作,无法马上完成
  3. 需要的数据没有到达

3.4 进程抢占

  1. 高优先级进程就绪
  2. 进程执行当前时间用完

3.5 进程唤醒

  1. 被阻塞进程的资源满足
  2. 被阻塞进程等待的事件到达

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

3.6 进程结束

自愿:

  1. 正常退出
  2. 错误退出

强制性的:

  1. 致命错误
  2. 被其他进程所杀

2

进程切换

3

4. 三状态进程模型

就绪 - 运行 - 等待

这三种是基本状态

Ready - Running - Block

创建:new
退出:Exit

4

5. 挂起进程模型

前面的部分都是和cpu相关的状态

还有一类进程模型是和存储相关的

进程挂起:处于挂起状态的进程映像在磁盘上,目的是减少进程占用内存

5

多加了2种状态,是指在外存中的进程状态

挂起(Suspend):把一个进程从内存转到外存

内存到外存的变迁情况:

  1. 等待 - 等待挂起
  2. 就绪 - 就绪挂起
  3. 运行 - 就绪挂起 (抢先分时系统的情况)

状态队列

由操作系统来维护一组队列,表示系统中所以进程的当前状态

不同队列表示不同状态

6

第二部分:线程

6. 线程的概念

为什么要引入线程?

在一个进程内部进一步提高并发性。

多进程实现 - 存在的问题:

  1. 进程之间如何通信,共享数据?
  2. 系统开销大,创建进程,进程结束,进程切换

如果放到一个进程内部,就会方便得多!

多进程得解决思路:

在进程内部增加一类实体,满足以下特性:

  1. 实体之间可以并发执行
  2. 实体之间共享相同的地址空间

这种实体就是线程!

线程:是进程的一部分,描述指令流的执行状态。它是进程中的指令执行流的最小单元,是CPU调度的基本单位。

进程:资源分配角色(由一组相关资源构成,包括地址空间,代码段,数据段,打开的资源等)
线程:处理机调度角色(指令流执行状态,线程控制块 TCB )

进程和线程的关系:

11

线程 = 进程 - 共享资源

线程的优点:

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

缺点:

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

历史上:

单进程系统:MS-DOS
多进程系统:传统UNIX

单进程多线程:pSOS(对并发执行要求高,信息共享要求高,对安全隔离要求低)
多线程系统:现代UNIX

线程与进程的比较

  1. 进程是资源分配的单位,线程是cpu调度单位
  2. 进程拥有一个完整的资源平台,而线程只独享指令流执行的必要资源,如寄存器和栈
  3. 线程具有就绪、等待和运行三种基本状态今儿状态间的转换关系
  4. 线程能减少并发执行的时间和空间开销

线程的三种实现方式:

  1. 用户线程:在用户空间实现

    如:POSIX Pthreads等

  2. 内核线程:在内核中实现:

    如:Windows, Solaris, Linux

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

    如:Solaris (LightWeight Process)

7. 用户线程

由一组用户级的线程库函数来完成线程的管理,包括创建,终止,同步和调度

7

特征:

  1. 不依赖操作系统内核
  2. 在用户态实现线程
  3. 同一进程内用户线程切换速度快
  4. 允许每个进程拥有自己的调度算法

缺点:

  1. 线程发起系统调用时阻塞,则整个进程进入等待。
  2. 不支持基于线程的处理机抢占
  3. 只能按进程分配cpu时间

8. 内核线程

由内核通过系统调用实现的线程机制,由内核完成线程的创建,终止和管理

8

特征:

  1. 由内核维护 PCB 和 TCB
  2. 线程执行系统调用时被阻塞不影响其他线程
  3. 线程的开销较用户线程稍大
  4. 多线程的进程可获得更多cpu时间

轻权进程

内核支持的用户线程。一个进程可有一个或多个轻量级进程。每个轻权进程由一个单独的内核线程来支持。(Solaris/Linux)

9

但是,实际中这种方式并不理想。

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

10

实际中,一对一的对应关系是最好的。

评论