(PS:个人课下整理的操作系统笔记,OneNote直接拷贝过来的,图片看不了就将就一下,配合张伟老师的PPT看效果更好)
一、进程定义
1.进程是具有某一个功能的程序在某一个数据集合上的执行过程,是资源调度分派的独立单位。
- 调度:是从就绪队列中选择一个进程,不同的调度算法选择的结果不一样
- 分派:把CPU的使用权交给选择出来的进程
2.进程也是执行中的程序,它包括 进程堆栈段(临时数据)、数据段(全局变量)、程序计数器
3.进程的两个基本特性:动态性(进程实质是程序的一次运行活动,有生命过程)、并发性(系统中可同时存在多个进程,各自互相独立的向前推进)
4.知道程序与进程的区别
- 程序是完成所要求的功能时所应采取的顺序步骤,是执行指令的有序集合。
- 进程是程序的一次运行活动,是一个动态概念
- 区别:
- 程序是一个静止的概念,作为一种资源可以永久存放在磁盘上。进程是程序执行的动态活动过程,随程序执行而诞生,随程序执行结束而消亡。
- 静止状态的程序和数据是相互独立的信息集合。进程中的程序和数据是一个不可分割的实体。
- 一个程序可以对应多个进程
5.进程的组成部分:程序、数据、PCB(进程控制块)
- PCB进程控制块包含管理特定进程的有关信息:进程状态、程序计数器、CPU寄存器、CPU调度信息、内存管理信息、记账信息、IO状态信息
- 什么是PCB——PCB是操作系统内核中的数据结构,包含管理特定进程所需的信息(如上)
二、进程状态(新、就、运、等、停)
(记法:ready三个入度一个出度,running三个出度,上被下主)
CPU调度决策发生在以下四个黄色进程切换状态
状态转换的说明
- 新-就绪(抢占):新进程被允许后进入就绪队列
- 就绪-运行(抢占):当处理机空闲时,系统按照一定调度算法从就绪状态中选择一个使其占用处理机运行。
- 运行-就绪(非抢占):分配给进程的时间片用完时,或出现一个更紧急的进程时
- 运行-等待(非抢占):运行的进程需要等待某一事件发生后,才能继续往下运行
- 等待-就绪(非抢占):处于等待的进程,如果其等待的事件已经发生,表示阻塞的原因已解除,则该进程从等待转为就绪
注意点:
- 等待进程在等待原因解除后,虽然再次具备了运行条件,但不能直接运行,而要先转换成就绪,等待调度
- 从运行态到就绪态的转换是被动的
- 从运行态到等待的转换是主动的
- 从等待到就绪的状态转换是由外部事件引起的
三、调度——从就绪队列中选择一个进程,不同的调度算法选择的结果不一样
1.三种调度(长期调度、短期调度、中期调度)
- 长期调度——作业调度,决定多道程序的度
choose a job among several ones ready to be brought into memory(into ready queue)
- 短期调度——CPU调度,
choose a job among several ones ready to run(into cpu)
- 中期调度medium-term scheduling
将进程从内存或者CPU中移出,降低多道程序的度,
作用机制:改善进程组合、释放内存
四、上下文切换(context switch)
1.任务——保存CPU当前的运行状态(旧进程状态存在PCB中)并加载新进程的保存状态
2.上下文切换是系统的额外开销,切换时系统不能做其他工作
五、创建进程
1.父进程与子进程
父进程可以与子进程并发执行,也可以等待子进程执行完毕,父进程再继续执行
2.fork()创建一个新进程并拷贝父进程的程序和指令,exec()把子进程的内容更新成想要的
3.父进程的返回值=子进程的标号(非0),子进程的返回值=0,作用是防止进程的无限创建
六、生产者消费者问题——协作进程的通用范例
Bounded buffer (有限缓冲)问题
1.初始化一个有限缓冲空间,in=0,out=0;
2.当in==out,缓冲区空
当(in+1)%buffersize==out,缓冲区满