《操做系统》之进程

线程与进程:算法

  1. 传统进程机制:进程是资源分配、调度的基本单位
  2. 引入线程后:进程是资源分配的基本单位,线程是资源调度的基本单位

进程的状态:编程

  • 五状态:建立态、终止态,运行态,就绪态,阻塞态
  • 七状态:五状态、就绪挂起、阻塞挂起

  说明:内存不足的时候,能够将就绪态的进程镜像放到外存,同理,阻塞态进程镜像放到外存中,当事件知足后就能够将转换成就绪挂起;若是运行态时间片使用完等缘由后能够将进程镜像直接转换成就绪挂起数组

 

调度安全

  • 三层调度:高级调度(做业调度)、中级调度(内存调度)、低级调度(进程调度)

 

进程调度的方式数据结构

  • 非剥夺调度方式(非抢占方式),只容许进程主动放弃处理机,在运行过程当中即使有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态
  • 剥夺调度方式(抢占方式),当一个进程正在处理机上执行时,若是有一个更重要或更紧迫的进程须要使用处理机,即当即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程

调度算法的评价指标并发

  • cpu利用率、系统吞吐量、周转时间(周转时间、平均周转时间、带权周转时间、平均带权周转时间)、等待时间、响应时间
  • cpu利用率 = cpu忙碌时间/总时间
  • 系统吞吐量 = 总完成的做业数/花费的总时间
  • 周转时间 = 做业完成时间 - 做业提交时间;平均周转时间 = 做业周转时间和/做业数;带权周转时间 = 做业周转时间/做业实际运行时间;                      平均带权周转时间 = 做业带权周转时间之和/做业数
  • 等待时间 = 做业处于等待处理机状态时间的总和
  • 响应时间 = 提出请求到首次产生响应须要的时间

调度算法操作系统

  • 先来先服务(FCFS)、短做业优先(SJF)、高响应比优先(HRRN)、时间片轮转(RR)、优先级调度算法
  • 先来先服务(用于做业/进程调度):根据做业/进程的前后顺序进行服务 | 非抢占式算法 | 优势:公平、算法简单 | 缺点:对短做业不利 | 不会致使饥饿
  • 短做业优先(用于做业/进程调度):最短做业/进程优先进行服务 | 非抢占式(SJF)、抢占式(最短剩余时间优先算法 SRTN)都有 | 优势:最短的平均等待时间、平均周转时间 | 缺点:对长做业不利 | 不断有短做业进入,会致使长做业饥饿
  • 高响应比优先(用于做业/进程调度):根据响应比从高到低进行服务(响应比=(等待时间 + 要求服务时间)/要求服务时间)| 非抢占式算法 | 优势:避免长做业饥饿问题 | 不会致使饥饿
  • 时间片轮转(只用于进程调度):进程根据顺序和时间片大小轮流使用处理机,时间片内未处理完的进程排到队尾 | 抢占式算法 | 优势:公平、响应快 | 缺点:频繁的切换进程,会有必定的开销,而且系统没法区分系统的紧急程度 | 不会致使饥饿
  • 优先级调度算法(用于做业/进程调度):根据做业/进程的优先级从高到低进行 | 非抢占(静态优先级调度)、抢占式(动态优先级调度)都有 | 优势:根据紧急程度,能够灵活地调整做业/进程的顺序 | 缺点:对于优先级低的做业/进程,可能会致使饥饿 | 会发生饥饿
  • 多级反馈队列调度算法(用于做业/进程调度):做业/进程会在一个队列中用FCFS算法和RR算法进行,当一个时间片用完以后尚未执行完的话,就将该做业/进程放到第二个对列表中,第二个队列指定的时间片是第一个的两倍,如此往复,可能会致使多个对列 | 抢占式算法 | 整合了以前的调度算法的优势 | 可能会发生饥饿

进程互斥遵循原则线程

  • 空闲让进:临界区空闲时,能够容许一个请求进入临界区的进程当即进入临界区
  • 忙则等待:当已有进程进入临界区时,其余试图进入临界区的进程必须等待
  • 有限等待:对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿)
  • 让权等待:当进程不能进入临界区时,应当即释放处理机,防止进程忙等待

进程互斥代码实现blog

  • 单标志法:两个进程在访问完临界区后会把使用临界区的权限转交给另外一个进程 | 违背“空闲让进“原则
  • 双标志先检查:设置一个布尔型数组flag[],数组中各个元素用来标记各进程想进入临界区的意愿 | 违背”忙则等待“原则
  • 双标志后检查:双标志先检查法的改版,先检查法是先检查后上锁,后检查法是先上锁后检查 | 违背了”空闲让进“、”有限等待“原则
  • Peterson算法:双标志后检查法是进程间争抢着想进入临界区,Peterson算法是经过主动让对方先使用临界区的方式使用临界区 | 未遵循”让权等待“原则

进程互斥硬件实现(缺点:没法实现“让权等待”)队列

  • 中断屏蔽:进程开始访问临界区到访问结束不容许中断,不使发生进程切换 | 优势:简单高效 | 不适用于多处理机,只适用于操做系统内核进程,由于只有内核态才能执行开/关中断指令
  • TestAndSet(TS指令/TSL指令):指令是用硬件实现的,执行过程不容许被中断,能够适用于多处理机 
  • Swap指令(XCHG指令):指令经过硬件实现的,执行过程不容许被中断

信号量机制

  • 定义:用户进程能够经过使用操做系统提供的一对原语来对信号量进行操做,从而实现进程互斥、进程同步
  • 整型信号量:用一个整数型的变量做为信号量,用来表示系统中某种资源的数量 | 缺点:不知足“让权等待”原则,会发生“忙等”
  • 记录型信号量:用记录型数据结构表示的信号量(遵循了“让权等待”原则,解决了整型信号量”忙等“的问题)
  • 原语:wait(P操做,试图使用资源)、signal(V操做,释放资源)
  • P操做:必定先S.value++,以后可能执行block原语(S是资源数量,block是阻塞)
  • V操做:必定先S.value--,以后可能执行wakeup原语(wakeup是唤醒)
  • 同步信号量的初始值通常为0,互斥信号量的初始值通常为1

信号量实现进程互斥

  • 划定临界区,设置互斥信号量mutex,初值为1
  • 临界区以前执行P(mutex)
  • 临界区以后执行V(mutex)

信号量实现进程同步

  • 分析须要进行同步的操做,设置同步信号量S,初始为0
  • 在“前操做”以后执行V(S)
  • 在“后操做”以前执行P(S)

信号量机制实现前驱关系

  • 为每一对前驱关系各设置一个同步信号量,初始值为0
  • 在“前操做”以后对相应的同步变量执行V操做
  • 在“后操做”以前对响应的同步变量执行P操做

生产者-消费者

  • 生产者与消费者共享一个初始为空,大小为m的缓冲区
  • 只有缓冲区没满时,生产者才能把产品放入缓冲区,不然必须等待
  • 只有缓冲区不空时,消费者才能从缓冲区中取出产品,不然必须等待
  • 缓冲区时临界资源,进程必须互斥访问

多生产者-多消费者

  • 生产者-消费者的升级版本
  • 须要考虑每一个事件的先后顺序

读者-写者

  • 容许多个读者能够同时对文件执行读操做
  • 只容许一个写者往文件中写信息
  • 任一写着在完成写操做以前不容许其余读者或写着工做
  • 写者执行写操做前,应让已有的读者和写者所有退出

哲学家进餐问题与防“死锁”方案

  • 描述:哲学家围坐在桌子上吃饭,每一个人左右两边各一支筷子,当哲学家拿到左右两支筷子才能吃饭
  • 防“死锁”方案一:最多只容许n-1个哲学家吃饭(n表示哲学家的总数),当其中一个哲学家吃完饭,就会释放资源
  • 防“死锁”方案二:为哲学家编号,要求奇数位的哲学家优先拿起左边的筷子,偶数位的哲学家优先拿起右边的筷子

管程

  • 组成部分:局部于管程的共享数据结构说明;对该数据结构进行操做的一组过程;对局部于管程的共享数据设置初始值的语句;管程的名称
  • 基本特征:局部于管程的数据只能被局部于管程的过程所访问;一个进程只有经过管程内的过程才能进入管程访问共享数据;每次仅容许一个进程在管程内执行某  个内部过程
  • 能够解决的问题:生产者-消费者问题;

死锁

相似概念:饥饿:因为长期得不到资源,某进程没法向前推动的现象;死循环:某进程执行过程当中一直跳不出某个循环的现象

  • 定义:在并发环境下,各进程因竞争资源而形成的一种互相等待对方手里资源,致使各进程都阻塞,都没法向前推动的现象,叫作“死锁”
  • 产生的必要条件:互斥条件;不可剥夺;请求和保持条件;循环等待条件
  • 处理策略:预防死锁(静态策略);避免死锁(动态策略);死锁的检测和解除

预防死锁(静态策略)

  • 破坏互斥条件:将临界资源改造为可共享使用的资源(如SPOOLing技术)| 缺点:可行性不高,不少时候没法破坏互斥条件
  • 破坏不可剥夺条件:方案一:申请的资源得不到知足时,当即释放拥有的全部资源 | 方案二:申请的资源被其余进程占用时,由操做系统协助剥夺(考虑u优先级)| 缺点:实现复杂;剥夺资源可能致使部分工做失效;反复申请和释放致使系统开销大;可能致使饥饿
  • 破坏请求和保持条件:运行前分配好全部须要的资源,以后一直保持 | 缺点:资源利用率低;可能致使饥饿
  • 破坏循环等待条件:给资源编号,必须按编号从小到大的顺序申请资源 | 缺点:不方便增长新设备;会致使资源浪费;用户编程麻烦

避免死锁(动态策略)

  • 避免死锁使用银行家算法能够解决,经过多个进程按照安全序列顺序执行
  • 银行家算法:①检查这次申请是否超过了以前生命的最大需求数;②检查这次系统剩余的可用资源是否还能知足此次请求;③试探着分配,更改各数据结构;④用安全性算法检查这次分配是否会致使系统进入不安全状态

死锁的检测和解除

  • 检测:依次消除与不阻塞进程相连的边,直到无边可消;所谓不阻塞进程是指其申请的资源数还足够的进程;死锁定理:若资源分配图是不可彻底简化的,说明发生了死锁
  • 解除:资源剥夺法;撤销进程法(终止进程法);进程回退法

 

第一篇:当前博客是《操做系统》的第一篇博客

下一篇:暂无下一篇博客

相关文章
相关标签/搜索