zoukankan      html  css  js  c++  java
  • 读书笔记之: 操作系统概念(第6版)第二部分 进程管理(进程, 线程, CPU调度, 进程同步, 死锁)

    第二部分 进程管理

    目录:

     第四章 进程

     第五章 线程

     第六章 CPU调度

     第七章 进程同步

     第八章 死锁

    第4章 进程

    第1节 进程的概念

    1. 进程状态

    2. 进程控制块PCB

    进程间切换

    第2节 进程调度

    1. 调度队列

    作业队列, 就绪队列, 设备队列

    2. 调度图

    3. 调度程序

    长期调度程序/作业调度, 短期调度程序/CPU调度

    4. 上下文切换

    第3节 进程操作

    1. 进程的创建

    进程树

    进程需要资源及初始化

    Unix下的fork来生成子进程

    2. 进程的终止

    第4节 进程协作

    生产者-消费者问题

    第5节 进程间通信

    1. 消息传递系统

    直接通信

    间接通信

    2. 同步

    缓冲: 零容量, 有限容量, 无限容量

     

    第6节 客户机-服务器通信

    1. 套接字

    本章小结

     

    第5章 线程

    第1节 概述

    1. 多线程的优点

    2. 用户线程与内核线程

    第2节 多线程模型

    第3节 若干线程问题

    1. 线程取消

    2. 线程池

    第4节 Pthread线程

    第5节 Solaris 2线程

    第6节 Windows 2000线程

    第7节 Linux线程

    本章小结

    第6章 CPU调度

    第1节 基本概念

    1. CPU-I/O区间周期

    2. CPU调度程序

    3. 可抢占式调度

    4. 分派程序

     

    第2节 调度准则

    第3节 调度算法

    1. 先到先服务调度FCFS

    2. 最短作业优先SJF

    利用指数平均对下一个CPU区间进行预测

    SJF分为抢占式和非抢占式的

    3. 优先权调度

    优先权调度可以是抢占式或非抢占的.

    优先权调度的一个主要问题是无穷阻塞(饥饿)

    4. 轮转法调度

    RR算法的性能在很大程度上依赖于时间片的大小。上下文切换也对RR调度有影响。

    5. 多级队列调度

    6. 多级反馈队列调度

    多级反馈队列调度是CPU上使用比较普遍的算法

    第4节 多处理器调度

    第5节 实时调度

    第7节 进程调度模型

    1. 用户级线程和内核级线程的区别之一是它们如何被调度的

    2. Solaris2

    Solaris 2采用基于优先级的调度。

    3. Windows 2000

    4. Linux

    本章小结

    第7章 进程同步

    第1节 背景

    竞争条件, 进程同步

    第2节 临界区问题

    1. 临界区满足的三个条件:

    2. 两个进程的解法

    算法1: 两个进程必须进行严格的交替, 满足了互斥的条件, 并且是有限等待的,但是不满足有空让进的条件. 比如下面提到的turn==0并且P1就绪要进入临界区, 但是此时P0如果在剩余区话, P1是无法进入的. 因为必须等P0再执行一遍使得turn==1,这样P1才有机会进入临界区. 所以, 现在虽然没有进程在临界区(有空),但是P1却无法进入, 不满足有空让进的条件.

    算法2: 这种使用两个布尔量的方可以解决算法1中的问题, 因为只要对方的flag不为true的话, 自己有可以进入临界区, 没有必要等待对方跑完一遍再设置. 所以解决了有空让进的问题. 但是如果flag[i]=flag[j]=false的话, 两个进程会同时,出现在临界区, 如果flag[i]=flag[j]=true的话, 两个进程会进入无限循环等待.

    算法3: 结合算法1和算法2可以得到一个正确的解答:turn可以满足互斥和有限等待的条件, flag可以解决有空等待的问题.

    3. 多个进程竞争临界区的问题

    面包店算法

     

    第3节 同步硬件

    硬件原子操作

    TestAndSet: 检测lock是否为false,如果为false的话, 则进入临界区, 并同时设置其为true, 表明有程序在临界区.

    如果lock为true, 则一直进行循环测试lock, 直到在临界区中操作的进程离开临界区同时将lock设为false,这样在while循环中进行等待的进程其中一个会进入临界区同时将lock再次设置为true. 这样可以完成对临界区的保护.

     

    Swap

    第4节 信号量

    P,V操作

    1. 解决n个进程临界区问题

    n个进程共享一个信号量mutex, 并且mutex的初值为1

    使用信号量解决同步问题

    2. 忙等待问题, 自旋锁

    进程进行P操作时, 如果信号量为负, 进行可以阻塞自己, 进入等待队列, 等待唤醒. 接着CPU可以调度其他程序.

    当进行V操作的时候, 唤醒一个在等待队列中的进程, 使其进入CPU调度的就绪队列.

    新的信号量定义

    带有阻塞和唤醒的PV操作

    3. 单处理器和多处理器对PV操作的实现.

    4. 死锁与饥饿

     

    第5节 经典同步问题

    1. 有限缓冲问题

    2. 读者-写者问题

    3. 哲学家就餐问题

    第6节 临界区域

    第7节 管程

     

    管程解决哲学家就餐问题

    第8 节 操作系统同步

    1. Solaris2 同步

    第9节 原子事物

    1. 系统模型

    2. 基于日志的恢复

    3.检查点

    4. 并发事务

    本章小结

    第8章 死锁

    第2节 死锁的特点

    1. 死锁的必要条件

    2. 资源可分配图

    如果资源分配图中没有环, 则就不存在死锁, 如果资源分配图中存在环, 就可能存在死锁.

    第3节 死锁的处理方法

    第4节 死锁预防

    1. 互斥

    2. 占有并等待

    3. 非抢占

    4. 循环等待

    第5节 死锁避免

    死锁的预防方法通过限制资源申请的方法来预防死锁, 这种方法的副作用就是使设备使用率低, 系统吞吐率低.

    1. 安全状态

    2. 资源分配图算法

    3. 银行家算法

    数据结构定义

    安全状态检测算法

     

    第6节 死锁检测

    对于每种资源只有单个实例的情况,可以使用资源分配图的变种——等待图来判断是否有死锁。

    对于每种资源类型多个实例的情况,使用银行家算法的变种来进行检测。

    何时应用检测算法

    第7节 死锁恢复

    本章小结

  • 相关阅读:
    SpringMVC的 @RestController和@Controller 区别
    Explain的使用
    spring定时任务详解
    C++提高---模板
    小练习--感悟点
    06文件操作
    05多态
    04继承
    Mismatch between array dtype ('<U18') and format specifier ('%.18e')
    01基础
  • 原文地址:https://www.cnblogs.com/xkfz007/p/2712214.html
Copyright © 2011-2022 走看看