进程:拥有资源的基本单位
- 多线程环境中进程的定义
是操作系统进行的资源分配和保护的基本单位,它有独立的虚拟地址空间,用来容纳进程映象(与进程关联的程序和数据),并以进程为单位对各种资源实施保护,如:受保护的访问cpu,文件,外部设备,和其他进程(这个属于进程间通信)。
- 进程控制块PCB
每个进程有且仅有一个PCB,用来存储进程的标识信息,线程信息和控制信息。
- 进程队列
处于同一状态的所有PCB组织在一起的数据结构称为进程队列。如:运行队列、就绪队列、等待队列。
线程:CPU能调度和分派的基本单位
- 多线程环境中线程的定义
线程是操作系统进程中能够并发执行的任务的实体,是cpu调度和分派的基本单位。
每个进程中可以包含多个可以并非执行的线程。线程自己基本不拥有系统资源,只有少量的必不可少的资源:程序计数器、一组寄存器、栈。同属于一个进程的线程共享进程所拥有的主存空间和资源。
- 线程状态
新建状态、就绪状态、运行状态、阻塞状态及死亡状态。
操作系统调度
- 高级调度(也称作业调度、长程调度)
根据作业调度算法从外存中处于后备队列的作业调入内存,并为他们分配资源、创建作业相应进程,作业完成后也做一些善后工作,如:关闭文件等。
- 低级调度(也称进程/线程调度、短程调度)
根据调度算法从就绪队列中选择一个进程或线程让它获取CPU使用权,执行任务。
非剥夺式(非抢占式):调度程序一旦把CPU分配给某个进程/线程后,其就会一直占用CPU使用权,直到执行完成或发生某些事件不能运行时,才会将CPU分配其他进程或线程。适用于批处理系统。
剥夺式(抢占式):当一个进程或线程在使用CPU时,调度算法可以根据某种规则将CPU分配给其他进程或线程。适用于分时系统和实时系统中。
- 中级调度(平衡调度,中程调度)
涉及进程在内外存间的交换,当主存资源紧缺时将暂不运行的进程从内存调至外存,此时这个进程处于“挂起”状态;当进程又具备运行条件且主存资源有空闲时,再将进城从外存调至内存。中级调度的主要目的是提高内存利用率和系统吞吐量。
低级调度是各类操作系统必备的,在纯粹的分时系统或实时系统中,通常不需高级调度。一般系统都有高级调度和低级调度;功能完善的系统引入了中级调度。
调度算法
- 先来先服务(First Come First Served,FCFS )
- 最短作业(进程)优先(SJF:Shortest Job First SPF:Shortest Process First)
- 响应比最高者优先算法(HRRF:Highest Response Ratio First)
- 优先级调度算法
- 时间片轮转调度算法(Round Robin,RR)
- 多级反馈队列调度算法(MLFQ:Multi-level Feedback Queue)
现在所有的桌面操作系统和服务器操作系统都是使用抢占式调度。但像手机这种小型设备使用写作式调度,这样时,一个线程只有调用了yield方法或阻塞或等待时,线程才失去控制权。
在多核CPU中,每个CPU运行一个线程,所以同时可以运行多个线程,真正并行。如果线程数多于CPU数,调度器依然采用时间片机制。