操作系统--进程管理

进程管理:

  进程基本概念:

    1. 每个进程在内存都中有实际的空间,包括代码段、数据段、堆、栈等

    2. 进程的五个状态:运行、就绪、等待(阻塞)、创建、结束

    3. 每个操作系统只有一个运行进程、一个就绪进程队列和 N 个等待进程队列,一个等待进程队列等待同一个资源

    4. 每个进程在操作系统中进程控制块(PCB)来表示

    5. 进程的上下文切换,就是离开的进程要将CPU寄存器中的值放到自己PCB的registers中,而进入的进程将PCB的registers中的值放到CPU寄存器中;上下文切换是额外开销,应尽量减少

    6. 进程间通信(IPC): 信号量、消息队列、共享内存、管道、套接字、信号

  线程基本概念:

    1. 与进程的区别:

      宏观上,资源拥有的单位为进程(或任务),调度的单位为线程;

      线程只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程拥有的全部资源

      线程的系统开销比进程小

    2. 用户级线程:不依赖与OS核心(内核不了解用户线程的存在),应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程,典型的JVM

    3. 内核级线程:依赖于OS核心,由内核的内部需求进行创建和撤销,用来执行一个指定的函数;一个线程发起系统调用而阻塞,不会影响其他线程;时间片分配给线程,所以多线程的进程获得更多CPU时间

    4. 基于上两种线程,有不同的多线程模型:

      多对一模型,多个用户级线程对应一个内核级进程

      一对一模型,一个用户级线程对应一个内核级线程

      多对多模型,多个用户级线程对应多个内核级进程

  CPU调度:

    1. 调度算法的评价准则:

      周转时间:进程从提交到完成所经历的时间;  平均周转时间 = All(周转时间)/进程数 ;   带权周转时间 = 周转时间/CPU执行时间  ;   平均带权周转时间 = All(带权周转时间)/进程数

      响应时间:从进程提交到首次被响应的时间

      等待时间:进程在就绪队列中等待的时间总和

      吞吐量:单位时间内所完成的进程数

      CPU利用率

    2. 进程调度算法:

      1. FCFS算法(先来先服务):有利于长进程不利于短进程,有利于CPU型的进程不利于I/O型的进程

      2. SPF算法(短作业优先):相对FCFS算法改善平均周转时间,缩短进程的等待时间,提高了系统的吞吐量;但对长进程不利,并且进程的执行时间难以预估

      3. SJF算法(最短剩余时间优先):是基于抢占式的SJF算法

        补充:HRRN算法(高响应比优先):响应比 = (等待时间 +执行时间)/执行时间

      4. 优先权调度算法:分为静态优先权和动态优先权,会导致进程饥饿,此时使用动态优先权,在优先权中加入时间参数

      5. RR算法(时间片轮转):响应时间 = 进程数目 * 时间片长度

      6. 多级队列调度算法:把就绪队列再分为若干个子队列,各子队列的调度算法不一样,并且各子队列也有优先级的区别,如分成系统进程、用户交互进程、批处理进程等

      7. 多级反馈队列调度算法:时间片轮转算法和优先级算法的综合,从上到下队列的优先级逐级降低,但时间片长度逐级加倍,只有上层队列执行完了才执行下层队列,一个进程完成了一个队列中分给它的时间片,就降到下一级队列末尾

  进程同步:

    1. 进程面临的控制问题:互斥、死锁、饥饿

    2. 同步机制应遵循的准则:互斥、空闲让进、有限等待

    3. 解决进程同步的问题:软件设计、硬件指令和信号量机制

    4. 信号量机制:

      1. 记录型信号量结构: typedef struct {

                    int value; 

                    struct process *L;

                   } semaphore;

      2. 信号量的值只能通过初始化及两个原子操作改变:P、V(wait、signal)操作,分别代表分配资源和释放资源

      3. 信号量分为互斥信号量(初始值永远是1)和同步信号量(初始值根据资源数确定)

      4. wait和signal操作:

                     

  进程死锁:

    1. 产生死锁的必要条件:互斥、不可抢占、请求和保持、环路等待

    2. 解决死锁的基本方法:死锁预防、死锁避免、死锁检测和死锁恢复

    3. 死锁预防:破坏四个必要条件中的一个条件

    4. 死锁避免:允许进程动态地申请资源,系统在进行资源分配之前,先计算资源分配的安全性。若此次分配不会导致系统从安全状态向不安全状态转换,便可将资源分配给进程;否则不分配资源,进程必须阻塞等待,从而避免死锁。  安全条件:系统中存在一个安全序列<P0,P1,P2....>, 其中Pi将申请的资源<=(当前拥有资源+所有进程Pj占有的资源),j<i    使用银行家算法实现

    5.死锁检测:检测资源分配图是否可以简化

    6. 死锁恢复:有选择地杀死进程

    7. 现代操作系统避免死锁采用的方式是:鸵鸟算法(不理不睬,假装不知道)

posted @ 2017-03-31 15:44  拉夫德尔  阅读(414)  评论(0编辑  收藏  举报