进程

作者: Tan_Cc | 来源:发表于2019-03-12 20:47 被阅读0次
    1. 进程3个状态(进程:系统进行资源分配和调度的基本单位)

      • 运行态:正在使用cpu
        进程占用处理器(CPU)资源;处于此状态的进程的数目小于等于处理器的数目

      • 就绪态:可执行的(处于就绪队列)
        进程已获得除处理器(CPU)外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行

      • 阻塞态:正在执行的进程由于某种原因而暂时无法继续执行,便放弃处理机而处于暂停状态,即进程执行受阻
        该事件发生前即使把处理器资源分配给该进程,也无法运行

    image.png
    1. 进程切换的概念:让进程来占用处理器,实质上是

      • 把某个进程存放在私有堆栈中寄存器的数据(前一次本进程被中止时的中间数据)再恢复到处理器的寄存器中去,
      • 并把待运行进程的断点送入处理器的程序指针PC

      于是待运行进程就开始被处理器运行了,也就是这个进程已经占有处理器的使用权了。
      在切换时,一个进程存储在处理器各寄存器中的中间数据叫做进程的上下文,所以进程的 切换实质上就是被中止运行进程与待运行进程上下文的切换。在进程未占用处理器时,进程 的上下文是存储在进程的私有堆栈中的。

    2. 线程:轻量级进程,使用CPU的基本单位

      • 为什么使用线程:
        响应方面:多个活动可同时进行,加快了应用的速度
        资源共享:线程共享进程的内存和其他资源(但线程拥有自己的栈)
        经济性:易于创建和撤销
        例子:word进程——一个线程与用户交互,一个线程格式化文档,一个线程周期性把文档写入磁盘

      • 用户级线程和内核级线程的区别
        用户级线程是OS内核不可以感知的,内核级线程可以感知
        用户级线程执行系统调用指令时会导致进程中断,而内核级线程只导致该线程中断
        用户级线程进行创建,撤销,调度不需要OS内核的支持,而内核级线程需要
        只有用户级线程的系统内,CPU调度还是以进程为单位,由用户程序控制线程的轮换;而有内核级线程的系统,CPU调度以线程为单位,由OS的线程调度程序调度线程
        用户级线程的程序实体只能运行在用户态,而内核级线程的程序实体可以运行在任何状态

    image.png
    1. 临界区:避免竞争条件的关键是不允许多余一个进程同时读写共享数据
      保持互斥的4个条件:
      不允许两个进程同时在临界区
      对处理速度和CPU的数量不应该有任何假设
      运行于临界区外的进程不能阻塞其他进程
      进程不能无休止地等待临界区

    2. 信号量


      image.png
    1. 线程互斥(pthread_cond_wait会先给互斥锁解锁,再挂起线程,等到条件变量满足时,会再次上锁)


      image.png
    2. 经典IPC问题:
      生产者消费者
      哲学家进餐
      读者写者

    3. 调度:调度器决定哪个进程要执行,调度算法做出调度决策

      • 批处理系统中的调度算法

        先来先服务(FCFS):先来先调度

        最短作业优先(非抢占SJF):将每个进程与其下次 CPU 执行的长度关联起来。当 CPU 变为空闲时,它会被赋给具有最短 CPU 执行的进程。如果两个进程具有同样长度的 CPU 执行,那么可以由 FCFS来处理

        最短剩余时间优先(抢占SJF):新进程的下次 CPU 执行,与当前运行进程的尚未完成的 CPU 执行相比,可能还要小。抢占 SJF 算法会抢占当前运行进程。

        PS:批处理系统3级调度:
        接纳调度:决定哪一个作业被接纳到系统中。
        内存调度:决定哪一个进程应该装入内存,哪一个应当放在磁盘。它也决定同时有多少个进程在内存中,这称之为多道程序度。
        CPU调度:实际选择内存中合适的进程运行。

      • 交互系统的调度算法

        轮转调度(RR):每个进程被分得小小的时间片,时间片结束时,进程被强占,放在就绪队列的尾。

        优先级调度:就按优先级调度

    相关文章

      网友评论

          本文标题:进程

          本文链接:https://www.haomeiwen.com/subject/xnicdqtx.html