- 进程的定义
- 一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。
- 进程把一组相关的资源组合起来,构成一个资源平台 + 代码在这个资源平台上的一条执行流程(线程)。
- 进程的组成
- PCB
- PCB的组成:进程标识信息 + 处理机状态信息 + 进程的控制信息
- PCB的组织方式:
- 链接方式:同一状态的进程其PCB组成一个链表---就绪链表、阻塞链表
- 索引方式:同一状态的进程归入一个索引表---就绪索引表、阻塞索引表
- 程序段
- 数据段
- PCB
- 进程与程序的联系
- 程序是产生进程的基础
- 程序的每次运行构成不同的进程
- 进程是程序功能的体现
- 通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。
- 进程和程序的区别
- 进程是动态的,程序是静态的;程序是有序代码的集合;进程是程序的执行,进程有核心态/用户态。
- 进程是暂时的,程序是永久的;进程是一个状态变化的过程,程序可长久保存。
- 进程与程序的组成不同;进程的组成包括程序、数据和进程控制块(PCB)。
- 进程的特征
- 动态性 + 并发性(多核处理器可以并行) + 独立性 + 异步性 + 结构性
- 进程状态
- 进程状态:创建态 + 就绪态 + 运行态 + 阻塞态 + 终止态
- 进程状态的转换
- 进程挂起(合理且充分的利用系统资源)
- 挂起状态:进程没有占用内存空间,处在挂起状态的进程映像在磁盘上。
- 阻塞挂起状态:进程在外存并等待某事件的发生
- 就绪挂起状态:进程在外存,但只要进入内存,即可运行。
- 挂起状态:进程没有占用内存空间,处在挂起状态的进程映像在磁盘上。
- 线程的定义
- 为什么要进入线程:切换进程时,需要保存/恢复进程运行环境,还需要切换内存地址空间,开销很大。增加并发度。
- 线程的定义:进程当中的一条执行流程。
- 线程的优点:
- 一个进程中可以同时存在多个线程,提高系统并发度。
- 各个线程之间可以并发的执行
- 各个线程之间可以共享地址空间和文件等资源
- 线程的缺点:
- 一个线程崩溃,会导致其他所属进程的所有线程崩溃。
- 进程和线程的比较
- 进程是资源分配单位,线程是CPU调度单位。
- 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈。
- 线程同样具有就绪、阻塞和运行三种基本状态,同样具有状态之间的转换关系。
- 线程能减少并发执行的时间和空间开销。
- 线程的实现
- 用户线程:
- 在用户空间实现的线程机制,它不依赖于操作系统的内核,由一组用户级的线程库函数来完成线程的管理,包括线程的创建、终止、同步和调度等。
- 缺点:
- 如果一个线程发起系统调用而阻塞,则整个进程在等待;
- 当一个线程运行后,除非它主动交出CPU的使用权,否则它所在的进程当中的其他线程将无法运行。
- 由于时间片分配给进程,故与其他进程比,在多线程执行时,每个线程得到的时间片少,执行会较慢。
- 内核线程:
- 在操作系统的内核当中实现的一种线程机制,由操作系统的内核来完成线程的创建、终止和管理。
- 优缺点:
- 在支持内核线程的操作系统中,由内核来维护进程和线程的上下文信息(PCBTCB)
- 线程的创建、终止和切换都是通过系统调用/内核函数的方式来进行,由内核完成,因此系统开销大。
- 在一个进程当中,如果一个内核即线程发起系统调用而阻塞,并不会影响其他内核级线程的运行
- 时间片分配给线程,多线程的进程获得更多的CPU时间。
- 轻量级进程:
它是内核支持的用户线程,一个进程可以有一个或多个轻量级进程,每个轻量级进程由一个单独的内核级线程来支持。(Linux)
- 用户线程: