操作系统原理

261 阅读7分钟

进程状态控制:

  • 新建进程(new),进程进入新建状态,初始化pcb和分配系统资源

  • (就绪)进程创建完成,进入就绪队列等待cpu调度

  • 就绪态->运行态,恢复进程运行环境和修改pcb内容和相应队列

  • 运行态->终止态 回收pcb和系统资源

  • 运行态->就绪态(时间片耗尽或者更高级别进程抢占)保存进程运行环境和pcb,进入就绪队列

  • 运行态->阻塞态 缺少事件或系统资源,保存运行环境和pcb进入阻塞队列

  • 阻塞态->就绪态 等待事件或资源响应,进入就绪队列

去

使用原语来进行控制进程状态转换,原语特点:原子操作,一气呵成,不可被中断 原语采用关中断和开终端指令来实现,在核心态状态下的特权指令

关中断指令

原语指令1

原语指令2

开中断指令

状态转换原语的操作

  1. 更新pcb中的信息
    • 剥夺当前进程的cpu使用权需要保存其运行环境
    • 某进程开始运行前要先恢复运行环境
  2. 将pcb插入合适的队列
  3. 分配/回收资源

进程通信:

进程通信,指进程之间的信息交换 进程是系统分配资源的基本单位

各进程之间的内存地址空间相对独立,一个进程不可以直接访问另一个进程的地址空间

共享存储

  • 进程对共享空间的访问必须是互斥的,通过操作系统提供的工具实现(P,V)
  • 共享存储的两种形式
    • 基于数据结构的存储
    • 基于存储区的共享

管道通信

管道间的通信互斥访问,如果没有写满,就不允许读,没有读完,就不允许写

  • 管道: 半双工通信,进程间互斥的发送数据
  • 命名管道 : 全双工通信,取消的父子进程通信的限制

消息传递

  • 直接通信方式,进程间通过消息队列进行通信
  • 间接通信方式, 消息发送中间实体(信箱)

进程和线程


用户级线程和内核级线程的对应关系

  • 多对一
  • 一对一
  • 多对多

处理机调度问题

调度的三个层次

  • 高级调度 (作业调度)
    • 高级调度是外存和内存之间的调度,从外存的后备队列中挑选一个或多个作业,给它们分配内存等必要资源,创建相应的进程(PCB),使它们获得竞争处理机的权利。每个作业只调入一次,调出一次,作业调入时会创建相应的PCB,作业调出时撤销响应的PCB。高级调度主要指的是调入的问题,因为只有调入的时机需要操作系统来确定,调出的时机必然是作业运行结束才调出
  • 中级调度(就绪态-就绪挂起,阻塞态-阻塞挂起)
    • 一个进程可能会多次调入,调出内存
    • 引入虚拟存储技术,可以把暂时不能运行的进程调至外存等待,等它重新具备了运行的条件并且内存又稍有空闲时,再重新调入内存
    • 暂时被调到外存的进程状态位挂起状态,其PCB会常驻内存,PCB会记录进程在外存中的存放位置,进程状态信息等,被挂起的进程PCB会放到挂起队列中
    • 中级调度就是决定将挂起队列中的那个进程重新调入内存
  • 低级调度(进程调度)
    • 从就绪队列中选取一个进程为其分配处理机

调度算法

cpu利用率

系统吞吐量:单位时间内完成作业的数量

总共完成多少作业/总共花费的时间

周转时间:作业提交给系统开始, 到作业完成为止的时间间隔

平均周转时间:各作业周转时间之和/作业数量

调度算法

先来先服务算法公平,考虑每个作业的等待时间,没有考虑每个作业的运行时间,有利于长作业,不利于短作业

短作业优先算法考虑了每个进程的运行时间,没有考虑等待时间,对长作业不友好,有可能导致饿死
  • 先来先服务

  • 短作业优先

  • 高响应比优先算法
    • 响应比:等待时间+要求服务时间/要求服务时间

  • 时间片轮转调度算法

  • 优先级调度算法

  • 多级反馈队列调度算法

进程的同步异步

  • 空闲让进
  • 忙则等待
  • 有限等待
  • 让权等待

双标志先检查法,在并发情况下可能多个进程能同时访问临界区,违背忙则等待

硬件实现进程互斥访问临界区

信号量PV操作

使用信号量机制实现进程互斥(semaphore mutex)

使用信号量机制实现线程同步

pv操作实现同步,在写操作后v,在读操作前p

信号量机制实现前驱关系

生产者和消费者问题

生产者每次生产一个产品放入缓冲区

消费者每次从缓冲区取出一个产品并使用

缓冲区时临界资源,需要互斥访问使用

使用pv信号量实现互斥,同步

哲学家进餐

管程

java中的synchronized就是管程

死锁

不可剥夺的资源的不合理分配,导致死锁 死锁的四个条件

  • 资源互斥
  • 不可剥夺
  • 请求和保持
  • 循环等待链(循环等待不一定会发生死锁)

死锁的处理策略

  • 预防死锁
    • 破环死锁产生的四个必要条件的一个或几个
  • 避免死锁
    • 使用某种算法防止系统进入不安全状态,从而避免死锁(银行家算法)
  • 死锁的检测和解除

预防死锁

  • 破坏互斥条件
  • 破坏不可剥夺条件
  • 破坏请求和保持条件
    • 静态分配方法:进程在运行前一次性申请完它所需要的全部资源
  • 破坏循环等待条件
    • 顺序资源分配法:给系统中的资源分配编号,每个进程必须按编号递增的顺序请求资源,大编号资源不可以逆向回来申请小编号的资源

银行家算法(避免死锁)

死锁的检测与接触

内存管理

内存装入

  • 绝对装入
  • 静态重定位
  • 动态重定位

内存管理

内存保护

  • 上下界限寄存器

  • 限长寄存器

覆盖与交换

  • 覆盖技术 固定区与覆盖区 常驻放入固定区,不被同时使用放入覆盖区

  • 交换技术
    • 当内存空间紧张时,把内存中的某些进程暂时换出外存,把外存中某些已经具备运行条件的进程换入内存

内存空间分配

  • 连续分配

  • 动态分配

内存分页存储

分页储存

分段存储

段页式管理

虚拟内存

页面置换算法

  • 最佳置换算法:理想化

  • 先进先出

  • 最近最久未使用置换算法LRU

  • 时钟置换算法

  • 改进时钟算法

页面分配策略

  • 调入页面的时机

文件管理

文件目录

  • 文件目录项: 就是一个文件控制块

树形目录不适合文件共享

文件的物理结构(对非空闲磁盘块管理)

文件存储空间管理(对空闲磁盘块管理)

文件的基本操作

文件共享

文件保护

文件系统层次结构

磁盘控制

磁盘调度算法

减少磁盘延时时间

缓冲区