处理机调度

面对堆积如山的任务,资源有限,无法同时处理所有工作。这时,我们需要一种规则来安排任务的执行顺序,这就是调度的核心问题。在多道程序系统中,进程数量常常超过处理机的数量,无法并行处理每一个进程。这时,处理机调度就显得尤为重要。它从准备就绪的队列中,按照一定的算法选择出一个进程,为其分配处理机,实现进程的并发执行。
调度层次
由于内存空间的限制,用户提交的作业有时无法全部装入内存。需要一种规则来确定作业进入内存的顺序。
高级调度(作业调度)
它负责从外存的后备队列中挑选作业,为它们分配内存等必要资源,并建立相应的进程。每个作业只被调入一次,调出一次。作业调度是辅存(外存)与内存之间的桥梁。当作业被调入时,会建立进程控制块(PCB),而当作业运行结束并调出时,才会撤销PCB。
中级调度(内存调度)
引入了虚拟存储技术后,暂时不能运行的进程会被移至外存等待。当它们重新具备运行条件且内存有空闲时,再被调入内存。这旨在提高内存的利用率和系统吞吐量。在这个过程中,被暂时移出内存的进程状态为挂起状态。值得注意的是,进程控制块(PCB)并不会一同被调到外存,而是会常驻内存。PCB中会记录进程数据在外存的存放位置、进程状态等重要信息,操作系统依赖内存中的PCB来监控和管理各个进程。被挂起的进程PCB会被放置在挂起队列中。中级调度的频率比高级调度更高,因为一个进程可能会被多次调出、调入内存。
低级调度(进程调度)
这是操作系统中最基本的调度,主要任务是从就绪队列中按照某种策略选择一个进程,为其分配处理机。进程调度的频率非常高,通常每几十毫秒就会进行一次。
还有一个重要的概念——七状态模型。其中,暂时调到外存等待的进程状态为挂起状态(挂起态)。挂起态可以进一步细分为就绪挂起和阻塞挂起两种状态。虽然这两种状态都不能获得CPU的服务,但它们之间存在明显的区别:挂起态是将进程映像调到外存,而阻塞态下进程映像仍在内存中。为了更有效地管理这些状态,有的操作系统会设立多个挂起队列,甚至根据阻塞原因进一步细分队列。
进程调度的时机
进程调度(低级调度)的目的是从就绪队列中选择一个进程为其分配处理机。但在某些情况下,不能进行进程调度与切换,例如在处理中断的过程中。中断处理过程复杂,与硬件紧密相关,因此很难在此过程中进行进程切换。在操作系统内核程序的普通临界区中,进程是可以进行调度和切换的。临界资源是指在一个时间段内只允许一个进程使用的资源,各进程需要互斥地访问这些资源。核心临界区与资源访问管理:深度解析进程调度机制
临界区是内核程序中访问特定内核数据结构的区域,例如进程的就绪队列。在这个特殊的区域内,资源的访问必须被严格管理和控制。若正在访问临界资源时未能及时释放锁定的资源,可能会对其他内核管理工作造成影响。在访问内核程序临界区期间,不能进行调度与切换,以确保资源的安全性和稳定性。
以打印机工作为例,当一个进程在打印过程中处于临界区内时,临界资源不会被解锁,因为打印机是一个慢速设备。如果一直不允许进程调度,那么CPU可能会长时间空闲。但针对普通临界区的访问,可以进行调度与切换,因为普通临界区的资源访问不会直接影响操作系统内核的管理工作。
在原子操作过程中,我们必须遵循一种不可中断的操作模式。原子操作必须一气呵成,不容许任何打断,比如修改PCB中的进程状态标志并将PCB放到相应的队列中。这种严格的操作方式是为了确保数据的完整性和系统的稳定性。
关于进程调度的方式,我们可以了解到非剥夺调度方式和剥夺调度方式的不同特点。非剥夺调度方式允许进程主动放弃处理机,即便有更紧急的任务到达,当前进程依然会继续使用处理机。这种方式的实现简单,系统开销小,但可能无法及时处理紧急任务,适用于早期的批处理系统。而剥夺调度方式,也称抢占方式,能优先处理更紧急的进程,或者按时间片轮流执行各进程,适合于分时操作系统和实时操作系统。
再来谈谈狭义的进程调度与进程切换的区别。狭义的进程调度是从就绪队列中选中一个要运行的进程,而进程切换是指一个进程让出处理机,由另一个进程占用处理机的过程。广义的进程调度则包含了选择进程和进程切换两个步骤。在进程切换的过程中,需要保存原来运行进程的各类数据并恢复新进程的相应数据。值得注意的是,进程切换是有代价的,过于频繁的调度和切换会降低系统效率。
评价调度算法的好坏,我们需要考虑多个指标。CPU利用率是一个重要的指标,它反映了CPU“忙碌”的时间占总时间的比例。除此之外,系统吞吐量、周转时间和平均周转时间也是评价调度算法好坏的关键指标。对于用户来说,他们很关心自己的作业从提交到完成所花费的时间,这就是周转时间的意义所在。而在评价不同作业的效率和用户满意度时,带权周转时间成为了一个重要的参考指标。
临界区资源的访问管理与进程调度方式息息相关。为了确保系统的稳定性和效率,我们必须深入理解和精准控制资源的访问和进程的调度。对于任何计算机系统而言,用户的满意度往往与其作业的等待时间密切相关。下面我们将详细探讨等待时间这一概念及其背后的技术原理。
等待时间是指用户提交作业后,其作业从准备到真正获得处理机服务的过程中的累积时长。在这段时间里,作业或进程在等待处理机的状态转换中度过。显然,等待时间越长,用户的满意度就越低。特别是对于计算机用户来说,我们希望提交的作业尽可能少的在系统中等待处理。同样的,作业的响应时间也关系到用户的体验满意度。响应时间指的是从用户提交请求到系统首次响应所花费的时间。对于用户来说,他们当然希望自己的请求能够尽快得到系统的响应。
关于调度算法的选择,它对作业的等待时间和响应时间有着直接的影响。先来先服务(FCFS)和短作业优先(SJF)是两种常见的调度算法。虽然它们在某些情况下有其优势,但也存在明显的不足。例如,FCFS不考虑作业的运行时间,可能导致短作业长时间等待;而SJF则过于关注作业的运行时间,忽视了等待时间的差异,可能让长作业处于长时间的等待状态。这也可能引发新的问题,比如“饥饿问题”,即某些作业由于长时间的等待而无法得到及时处理。如何平衡运行时间和等待时间是一个关键问题。高响应比优先(HRRN)算法是一个解决方案,它能够同时考虑运行时间和等待时间。但是值得注意的是,上述调度算法主要用于早期批处理系统,对用户的实时反馈并不敏感,交互性相对较差。在实际应用中需要根据系统需求选择调度策略。而在分时操作系统中更注重响应时间的优化问题。针对这一问题采用了一种时间片轮转调度策略来改进交互性能这种策略并非无懈可击其面临的一个重要问题是如何设定合适的时间片大小。如果时间片过大可能会使得系统退化为先来先服务模式从而增加进程的响应时间反之如果时间片过小则会使得进程切换过于频繁从而影响实际的执行效率因此设计时间片时需要考虑切换进程的开销占比不超过一定比例以保证系统的整体性能优化除了设定合理的时间片大小之外就绪队列的组织也是一个重要的策略选择可以根据不同优先级来组织队列静态优先级和动态优先级可以根据实际情况进行选择并动态调整以满足不同的需求和要求。总的来说选择合适的调度策略需要根据系统的实际情况和用户的需求进行综合考虑以最大程度地提高用户的满意度和系统的整体性能。合理设置优先级的准则,是操作系统中至关重要的环节。系统进程优先级高于用户进程,前台进程优先级又高于后台进程。对于现代操作系统而言,它们在处理任务时更倾向于关注I/O型进程,也即那些与输入/输出紧密相关的进程。
相对于I/O型进程,存在计算型进程,这些进程更多地依赖于CPU进行计算。但值得一提的是,I/O设备和CPU在现代操作系统中可以并行工作,极大地提升了系统的效率。当我们优先考虑I/O繁忙型进程时,能够让I/O设备尽早投入工作,进而提高资源利用率和系统吞吐量。
那么,动态优先级的调整是如何进行的呢?主要从追求公平和提升资源利用率等角度考虑。如果一个进程在就绪队列中等待了很长时间,那么可以适当提升其优先级,使其尽快得到处理。相反,如果某个进程长时间占用处理机,那么可以适当降低其优先级,让其他进程也有机会运行。如果一个进程频繁进行I/O操作,也可以考虑提升其优先级。
多级反馈队列调度算法综合了多种优点。它既能保证FCFS算法的公平性,又能像SJF算法那样尽快处理短作业,时间片轮转调度算法使得各个进程得到及时的响应,而优先级调度算法则能灵活地调整各种进程被服务的机会。对于那些被抢占处理机的进程,它们会被重新放回原队列队尾,确保系统的稳定运行。
比起早期的批处理操作系统,现代交互式操作系统更加注重系统的响应时间、公平性、平衡性等指标。而这几种算法恰好能够满足交互式系统的需求。例如,UNIX操作系统采用的多级反馈队列调度算法就是一个很好的例证。这种算法能够在保证公平性的兼顾系统的响应速度和资源利用率,使得系统能够更加流畅、稳定地运行。
合理设置优先级的准则对于现代操作系统来说至关重要。它不仅能够提高系统的资源利用率和吞吐量,还能确保系统的公平性和稳定性。而这些调度算法的发展和应用,也标志着现代操作系统在任务管理方面的不断进步和创新。
文章来自《钓虾网小编|www.jnqjk.cn》整理于网络,文章内容不代表本站立场,转载请注明出处。