浅学系统调度
学过操作系统之后,我们多少都会对系统调度
有一定的了解,让我们来复习并更广泛的看看它的相关知识。
从操作系统的角度来看,系统调度是一个核心且至关重要的功能,它涉及到对系统资源的有效管理和分配,以确保多任务并发执行和资源共享的顺利进行。
首先,操作系统管理的资源是有限的,包括CPU、内存、磁盘等。当有多个进程(或多个进程发出的请求)希望使用这些资源时,调度机制就显得尤为重要。调度的主要目的是根据一定的调度算法,在多个进程中选择下一个要执行的进程,以控制资源使用者的数量并选取资源使用者占用资源。
具体的调度过程可以因操作系统的设计和需求而有所不同,但通常包括以下几个关键方面:
- 作业调度(高级调度):在作业进入系统时,作业调度负责选取输入井中的作业(通常限于批处理作业),并生成根进程以开始执行作业步。这是调度过程的开始,决定了哪些作业将进入系统的执行队列。
进程调度:这是操作系统中最核心和频繁的调度活动。进程调度决定了哪个就绪状态的进程将获得CPU的使用权。它基于一定的调度算法,如先来先服务(
FCFS
)、短作业优先(SJF
)、优先级调度或时间片轮转(RR
)等,来选择合适的进程执行。
- 先来先服务(
FCFS
):按照进程到达的顺序进行调度,简单且公平,但可能导致资源使用不均。- 短作业优先(
SJF
):优先执行预计执行时间最短的进程,以减少平均等待时间,但可能导致长作业等待时间较长。- 优先级调度:根据进程的优先级进行调度,优先级高的进程优先执行。
- 时间片轮转(
RR
):每个进程分配固定的时间片,时间片用完则切换到下一个进程,实现进程的轮流执行。- 上下文切换:当进程调度决定执行一个新的进程时,需要进行上下文切换。这涉及保存当前进程的状态信息(如寄存器内容、程序计数器等),并恢复被选中进程的状态信息,以便其能够继续执行。
- 资源管理优化:调度机制还需要考虑如何合理管理系统资源,确保资源的分配和使用达到最优化。这可能涉及到缓存机制优化、系统调试和错误修复、进程调度算法优化等多个方面。
通过有效的系统调度,操作系统能够确保系统的稳定运行、资源的合理利用以及高效的并发执行,为用户提供流畅且响应迅速的服务体验。
但这都是操作系统理论知识层面的看法,如果从实际编码即使用的角度看,它会变得易懂一些:
系统调用这东西,比如fork
,exec
等等,它们都可以让程序使用上操作系统的资源。比如read
和write
,允许你控制文件(文件是磁盘的抽象)的读写。操作系统所在做的事情就是希望程序可以像调用某个 API 一样,使用系统的资源,而不是直接操作它们(这里的直接操作是指操作人员直接输指令去操作)。而且这些资源一般是希望每个应用程序只会使用到自己,所以在操作资源的时候,系统调用需要进入特殊的状态(内核态)来保证特殊的操作不会被用户程序(用户态)直接操作。(←其实这里还是离不开操作系统,因为系统调用其中一个主要的操作就是状态转换)
上面这段话具体来讲:
系统调用是操作系统提供的一种机制,它允许应用程序通过类似函数调用的方式使用操作系统的服务和资源。在应用程序中,通过调用如 fork
、 exec
、 read
和 write
等系统调用,程序可以间接地利用操作系统的功能来执行特定的任务,如创建新进程、执行文件、读写文件等。
系统调用在应用程序与操作系统之间建立了一个桥梁。当应用程序需要执行某些需要特权级别更高或需要直接访问硬件资源的操作时,它会发起系统调用请求(用户态下)。这个请求会触发从用户态到内核态的转换,即状态转换(这里是 用户态 → 核心态)。在内核态下,操作系统内核会执行相应的服务程序,处理请求,并访问或操作所需的资源(干完事之后再 核心态 → 用户态)。
(也就是说系统调用将原本要让操作员进行比如通过命令行输入指令、修改寄存器等操作去操作资源,变成操作系统通过系统调用让用户程序可以通过简单的接口调用来访问系统资源,更方便更安全)
以read
和write
系统调用为例,它们允许应用程序读取和写入文件。在执行这些操作时,应用程序并不会直接操作磁盘或其他硬件资源,而是通过系统调用来请求操作系统内核完成这些操作。内核会负责打开文件、读取数据、写入数据等具体工作,并确保每个应用程序只能访问和操作自己的资源,从而实现资源的隔离和保护。
通过这种方式,操作系统能够控制和管理应用程序对资源的访问,确保资源的公平分配和系统的稳定性。同时,它也提供了更加抽象和统一的接口,使得应用程序能够像调用 API 一样使用系统资源,而无需关心底层硬件的复杂性和细节。
因此,系统调用不仅实现了 ①应用程序对操作系统资源的间接访问和操作,还通过 ②状态转换和权限管理确保了资源的安全性和隔离性。这使得应用程序能够更加方便、高效地使用系统资源,同时也保证了整个系统的稳定性和安全性。
补充:
"而且这些资源一般是希望每个应用程序只会使用到自己" ← 这句话可能说的不是很清楚。
具体来说,在操作系统的设计中,通常期望每个应用程序只能访问和操作分配给它自己的资源,而不能直接访问或修改其他应用程序的资源,操作系统通过一系列机制来确保每个应用程序只能访问自己的资源。
注:一系列机制里面包括了系统调用。
此外,操作系统还提供了进程隔离的机制,确保每个应用程序在运行时都拥有自己独立的内存空间和其他资源。这意味着一个应用程序的崩溃或错误不会影响其他应用程序的运行,因为它们的资源是隔离开的。
补充的补充:
上述一系列确保资源的隔离和保护的机制和策略里还包括了进程隔离、访问控制列表 (
ACLs
)、权限管理等。
评论(0)