进程

  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):每个进程被分得小小的时间片,时间片结束时,进程被强占,放在就绪队列的尾。

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

你可能感兴趣的:(进程)