2 进程、线程与处理机的调度,进程同步互斥
2.1 进程的定义、组成、组织方式、特征
2.1.1 定义
2.1.2 进程的组成
进程由程序段、数据段、PCB组成
2.1.3 进程的组织
2.1.4 进程的特征
2.1.5 小结
2.2 进程的状态与转换
2.2.1 三种基本状态
2.2.2 另外两种状态
在创建进程前,需要先分配好进程的PCB以及数据段 程序段 这个时候称为 创建态
进程结束 需要撤销进程 需要回收该进程占用的资源(撤销分配的打印机 内存资源)这个时候称为 终止态
2.2.3 进程状态的转换
2.2.4 小结
2.3 进程控制
2.3.1 什么是进程控制
2.3.2 实现进程控制
2.3.3 进程控制相关的原语
2.3.3.1 进程的创建
2.3.3.2 进程的终止
2.3.3.3 进程的阻塞和唤醒
2.3.4 小结
2.4 进程通信
2.4.1 什么是进程通信
2.4.2 共享内存
2.4.3 管道通信
2.4.4 消息传递
2.4.5 小结
2.5 线程概念和多线程模型
2.5.1 什么是线程,为什么要引入线程
一个线程中会有多个功能,多个功能要在宏观意义上共同执行, 则需要一个类似“线程”的进程
因此 线程变成了一个基本的CPU执行单元, 也是程序执行流的最小单位
可以把线程理解为“轻量级进程”。
线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)
引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)。
2.5.2 引入线程机制后带来的变化
2.5.3 线程的属性
2.5.4 用户级线程
2.5.5 内核级线程
2.5.6 线程的实现方式
2.5.7 多线程模型
2.5.7.1 多对一模型
2.5.7.2 一对一模型
2.5.7.3 多对多模型
2.5.8 小结
2.6 处理机调度的概念、层次
2.6.1 调度的基本概念
2.6.2 调度的三个层次
2.6.2.1 高级调度
2.6.2.2 中级调度
2.6.2.3 进程的挂起态与七状态模型
2.6.2.4 低级调度
2.6.2.5 三层调度的联系、对比
2.6.2.6 小结
2.7 进程调度的时机、切换与程序、方式
2.7.1 进程调度的时机
2.7.2 进程调度的方式
2.7.3 进程的切换与过程
2.7.4 小结
2.8 调度算法的评价指标
2.8.1 CPU利用率*
2.8.2 系统吞吐量*
2.8.3 周转时间*
2.8.4 等待时间
2.8.5 响应时间
2.8.6 小结
2.9 FCFS、SJF、HRRN调度算法
2.9.1 先来先服务 FCFS
2.9.2 短作业优先算法 SJF
2.9.2.1 非抢占式 称为 短进程优先调度算法 SPF
2.9.2.2 抢占式 应该称为最短剩余时间优先算法 SRTTN
2.9.2.3 答题小细节
2.9.2.4 小结
2.9.3 高响应比优先 HRRN
2.9.4 小结 三种算法对比
2.10 调度算法:时间片轮转,优先级,多级反馈队列
2.10.1 时间片轮转
2.10.2 优先级调度算法
2.10.2.1 非抢占式
2.10.2.2 抢占式
2.10.2.3 补充
2.10.3 多级反馈队列(对于其他算法的折中权衡)
2.10.4 小结
2.11 进程同步和进程互斥
2.11.1 进程同步
2.11.2 进程互斥
2.11.2.1 什么是进程互斥
2.11.2.1 小结
2.12 进程互斥的软件实现方法
2.12.1 单标志法
问题:违背空闲让进原则
2.12.2 双标志先检查法
2.12.3 双标志后检查法
2.12.4 Peterson算法
2.12.5 小结
2.13 进程互斥的硬件实现方法
2.13.1 中断屏蔽方法
2.13.2 TestAndSet指令
2.13.3 Swap指令
2.14 信号量机制
2.14.1 整型信号量
2.14.2 记录型信号量
2.14.3 小结
2.15 信号量机制实现进程互斥、同步、前驱关系
2.15.1 进程互斥
2.15.2 进程同步
2.15.3 前驱关系
2.15.4 小结
2.16 生产者 - 消费者问题
相邻P、V不允许切换顺序,否则会因为内存没有资源无法P(empty)导致进程被阻塞,因为此时已经把内存上锁了,会导致内存的锁无法解锁,另一个线程执行的时候也无法获取内存的锁,导致无法释放内存的一部分,以此达到前者阻塞释放的条件。导致了死锁现象的发生。
实现互斥的操作一定要在实现同步的操作之后,否则容易发生死锁现象
2.17 多生产者 - 多消费者问题
plate为1时即使没有互斥 , 也不会发生问题
但是大于1时,会出现内存覆盖
2.18 吸烟者问题
2.19 读者 - 写者问题
2.20 哲学家进餐问题(解决进程死锁)
奇偶数的哲学家优先争抢他们之间的筷子
2.21 管程
2.21.1 管程的定义
2.21.2 用管程解决生产者消费者问题
2.21.3 JAVA中类似于管程的机制
2.21.4 小结
2.22 死锁
2.22.1 死锁的概念
2.22.1.1 死锁、饥饿、死循环的区别
2.22.1.2 死锁发生的必要条件
2.22.1.3 什么时候会发生死锁
2.22.1.4 死锁的处理策略
2.22.1.5 小结
2.22.2 死锁的处理策略——预防死锁
2.22.2.1 破坏互斥条件
2.22.2.2 破坏不剥夺条件
2.22.2.3 破坏请求和保持条件
类似A、B的程序一直占用资源1、2导致C类资源很难等到资源1、2同时闲置,变成饥饿
2.22.2.4 破坏循环等待条 件
2.22.2.5 小结
2.22.3 避免死锁
2.22.3.1 什么是安全序列
2.22.3.2 安全序列、不安全状态、死锁的联系
2.22.3.3 银行家算法
系统处于不安全状态时不一定发生死锁,但是死锁时一定是处于不安全状态的。
系统处于安全状态一定不会发生死锁。
2.22.3.4 死锁的处理策略——检测和解除
2.22.3.4.1 检测
2.22.3.4.2 解除
1.进程优先级
2.已执行多长时间
3.还要多久完成
4.进程已经使用了多少资源
5.进程是交互式的还是批处理式的
标签:进程同步,互斥,死锁,线程,进程,2.22,小结,2.5
From: https://www.cnblogs.com/jy00/p/17201964.html