Loading... # 应用程序基本执行环境 在这种执行环境下,操作系统与应用程序的界限并不明显,应用程序即是操作系统的组成部分,均在内核态下运行,一旦应用程序出错,便会导致整个操作系统的崩溃 # 批处理操作系统 从批处理操作系统开始,用户程序与操作系统有了明显的界限,用户程序运行在用户态下,对于一些操作需要通过特权级的切换来完成(系统调用),这时,在操作系统与用户程序间建立了系统调用接口(syscall)。通过这种方式,也实现了用户栈与内核栈的分离,也即保证了用户程序的执行环境是独立于操作系统的执行环境的,进一步提高了操作系统的可靠性。批处理系统的特点是,一次只加载一个应用程序,当应用执行 **出错或完成** 后,操作系统会自动 **加载** 下一个需要执行的应用程序。 # 多道程序的运行方式 在内存中尽量同时驻留多个应用,这样处理器的利用率就会提高。但只有一个程序执行完毕后或主动放弃执行,处理器才能执行另外一个程序。这种运行方式称为 **多道程序(Multiprogramming)** 。 # 协作式操作系统 在 **多道程序** 运行方式下,一个程序如果不让出处理器,其他程序是无法执行的。如果一个应用由于 I/O 操作让处理器空闲下来或让处理器忙等,那其他需要处理器资源进行计算的应用还是没法使用空闲的处理器资源。于是就想到,让应用在执行 I/O 操作或空闲时,可以主动 *释放处理器* ,让其他应用继续执行。当然执行 *放弃处理器* 的操作算是一种对处理器资源的直接管理,所以应用程序可以发出这样的系统调用,让操作系统来具体完成。这样的操作系统就是支持 **多道程序** 或 **协作式多任务** 的协作式操作系统。 # 抢占式操作系统 上面提到的协作式操作系统,在对于编写用户程序的人群要求十分高。他们不一定有友好互助的意识,也不了解其它程序的执行情况,很难(也没必要)有提高整个系统利用率上的大局观。在他们的脑海里,整个计算机就应该是为他们自己的应用准备的,不用考虑其他程序的运行。这导致应用程序员在编写程序时,无法做到在程序的合适位置放置 **放弃处理器的系统调用请求** ,这样系统的整体利用率还是无法提高。 所以,站在系统的层面,还是需要有一种办法能强制打断应用程序的执行,来提高整个系统的效率,让在整个系统中执行的多个程序之间占用计算机资源的情况相对公平一些。根据计算机系统的硬件设计,为提高 I/O 效率,外设可以通过硬件中断机制来与处理机进行 I/O 交互操作。这种硬件中断机制可随时打断应用程序的执行,并让操作系统来完成对外设的 I/O 响应。 而操作系统可进一步利用某种以固定时长为时间间隔的外设中断(比如时钟中断)来强制打断一个程序的执行,这样一个程序只能运行一段时间(可以简称为一个时间片, Time Slice)就一定会让出处理器,且操作系统可以在处理外设的 I/O 响应后,让不同应用程序分时占用处理器执行,并可通过统计程序占用处理器的总执行时间,来评估运行的程序对处理器资源的消耗。这种运行方式称为 **分时共享(Time Sharing)** 或 **抢占式多任务(Multitasking)** ,也可合并在一起称为 **分时多任务** 。 可以把一个程序的一次完整执行过程称为一次 **任务** (Task),把一个程序在一个时间片(Time Slice)上占用处理器执行的过程称为一个 **任务片** (Task Slice)。操作系统对不同程序的执行过程中的 **任务片** 进行调度和管理,即通过平衡各个程序在整个时间段上的任务片数量,就能达到一定程度的系统公平和高效的系统效率。在一个包含多个时间片的时间段上,会有属于不同程序的多个任务片在轮流占用处理器执行,这样的操作系统就是支持 **分时多任务** 或 **抢占式多任务** 的抢占式操作系统。 Last modification:May 8, 2022 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏