欢迎浏览高耳机的博客
希望我们彼此都有更好的收获
感谢三连支持!
进程调度是操作系统中至关重要的组成部分,它负责决定哪个进程应该在何时使用CPU。了解计算机进行进程调度的过程和原理,对我们了解计算机以及进行多线程编程大有帮助!
在操作系统中,进程是系统分配资源的最小单位,线程是系统调度的最小单位;进程包含线程,每个进程至少存在一个线程,即主线程;同一个进程的线程之间共享一个内存空间 ;
一.进程选择
假设单核cpu的操作系统正在运行三个进程:A、B、C。这些进程都已经准备好执行,并且都在就绪队列中等待CPU时间,那么操作系统会按照怎样的调度顺序进行分配呢?以下是常用的系统调度算法:
- 先来先服务(FCFS):调度器按照进程到达就绪队列的顺序选择进程。如果A是第一个到达的,那么它将首先被执行,接着是B,最后是C。
- 最短作业优先(SJF):调度器选择预计运行时间最短的进程。如果B预计只需要1单位时间,而A和C都需要2单位时间,那么B将被优先执行。
- 轮转(Round Robin):调度器给每个进程分配一个时间片(例如,每个进程1单位时间)。如果A、B和C都在就绪队列中,它们将轮流执行,每个进程执行1单位时间,然后传递给下一个。
在单核CPU上,操作系统通过时间分片技术,将CPU时间分配给不同的进程或线程。每个进程或线程执行一小段时间后,操作系统会暂停当前进程或线程的执行,切换到另一个进程或线程。这种快速切换给人一种它们在同时运行的错觉,但实际上,它们是交替执行的。
而多核CPU拥有多个核心,每个核心可以独立执行一个线程或进程。这意味着多个线程或进程可以在同一时间真正地并行执行,而不是通过快速切换来模拟。这种并行执行可以显著提高计算效率,特别是在处理多任务或需要大量计算资源的应用时。
二. 上下文切换
假设进程A正在执行,但进程B被调度器选中。这时,操作系统需要进行上下文切换。
- 保存进程A的状态:包括它的寄存器值、程序计数器等,以便它可以在将来恢复执行。
- 加载进程B的状态:操作系统加载进程B之前保存的状态,使其能够从上次停止的地方继续执行。
三. 执行
进程B开始执行。它可能执行一个计算密集型任务,直到完成,或者它可能在等待一个文件的读取操作时被阻塞。
- 执行完成:如果进程B完成了它的任务,它将释放所有资源并终止。
- 阻塞:如果进程B在执行过程中需要从硬盘读取数据,它可能会被阻塞,直到数据可用。
四. 时间片管理
在轮转调度算法中,每个进程被分配一个时间片。
- 时间片结束:如果进程B在1单位时间的时间片结束前没有完成,它将被放回就绪队列的末尾,等待下一个时间片。
- 时间片内完成:如果进程B在时间片内完成了任务,它将释放资源并终止
五. 优先级调整
操作系统可能会根据进程的类型或用户的需求调整进程的优先级。
- 静态优先级:进程A在创建时被赋予高优先级,因为它是一个关键任务。
- 动态优先级:进程C最初优先级较低,但如果它等待I/O操作时间过长,系统可能会提高它的优先级,以提高响应性。
六. I/O操作和阻塞
进程D正在执行,但需要从硬盘读取数据。
- 阻塞:进程D在等待数据时被阻塞,操作系统将选择另一个就绪进程(如进程E)来执行。
- I/O完成:一旦数据读取完成,进程D将从阻塞状态恢复,并继续执行。
七. 进程终止
进程E完成了它的任务。
- 资源释放:进程E释放了它所占用的所有资源,如内存和文件句柄。
- 调度器选择新进程:调度器将从就绪队列中选择下一个进程来执行。
通过这些步骤,操作系统能够有效地管理多个进程,确保CPU资源得到合理分配,同时提高系统的整体性能和响应速度。
希望这篇博客能为你理解操作系统进程调度提供一些帮助。
如有不足之处请多多指出。
我是高耳机。