首页 > 其他分享 >八股篇 | 抢占式操作系统与合作式操作系统

八股篇 | 抢占式操作系统与合作式操作系统

时间:2024-06-09 10:30:16浏览次数:23  
标签:八股 优先级 操作系统 调度 进程 抢占 CPU

抢占式操作系统(Preemptive Operating System)是一种操作系统调度方式,它允许操作系统在任何时间点中断一个正在运行的进程,并将CPU分配给另一个进程。这种调度方式是现代操作系统(如Windows、Linux和macOS)中常见的一种特性。

以下是抢占式操作系统的一些关键特点:

  1. 优先级调度:在抢占式操作系统中,每个进程都有一个优先级。操作系统会优先执行高优先级的进程。

  2. 中断:操作系统可以在任何时刻中断低优先级的进程,以便让高优先级的进程运行。

  3. 时间片:操作系统会给每个进程分配一个时间片,进程在时间片内运行。时间片用完后,操作系统会检查是否有更高优先级的进程需要运行。

  4. 上下文切换:当操作系统决定中断一个进程并将CPU分配给另一个进程时,会进行上下文切换。这涉及到保存当前进程的状态,并加载新进程的状态。

  5. 多任务处理:抢占式操作系统可以有效地支持多任务处理,允许多个进程同时运行,提高系统的整体性能。

  6. 响应性:由于操作系统可以随时中断低优先级的进程,抢占式操作系统通常具有很好的响应性,能够快速响应用户输入和高优先级任务。

  7. 公平性:抢占式调度可以提高系统的公平性,确保每个进程都有机会获得CPU时间。

  8. 实时性:在实时操作系统中,抢占式调度是非常重要的特性,它确保了高优先级的实时任务能够及时执行。

与抢占式操作系统相对的是合作式操作系统(Cooperative Operating System),在合作式操作系统中,进程必须主动放弃CPU,以便其他进程运行。这种方式可能会导致低优先级的进程长时间占用CPU,影响系统的整体性能和响应性。

抢占式操作系统通过有效的进程调度和上下文切换,提高了系统的稳定性、性能和响应性,是现代操作系统设计的基础。

合作式操作系统(Cooperative Operating System)是一种早期的操作系统调度方式,它依赖于进程之间的合作来实现任务切换。在合作式操作系统中,操作系统不主动抢占CPU,而是进程在完成自己的任务或者需要等待某些资源(如I/O操作)时,主动让出CPU给其他进程使用。

以下是合作式操作系统的一些关键特点:

  1. 自愿让出CPU:进程在完成自己的任务或者需要等待资源时,需要主动调用操作系统提供的函数(如yield),让出CPU给其他进程。

  2. 没有抢占:操作系统不会强制中断正在运行的进程,进程的执行时间不是由操作系统控制的。

  3. 上下文切换:进程在让出CPU时,需要保存自己的状态,以便在下次获得CPU时能够从上次停止的地方继续执行。

  4. 可能导致饥饿:如果一个进程长时间占用CPU,不主动让出,低优先级的进程可能会长时间得不到CPU时间,导致饥饿。

  5. 死锁风险:由于进程需要主动让出CPU,如果多个进程相互等待对方让出CPU,可能会导致死锁。

  6. 简单的调度算法:合作式操作系统的调度算法相对简单,因为操作系统不需要复杂的抢占和调度机制。

  7. 适用于简单的系统:合作式操作系统适用于简单的系统,如嵌入式系统或者实时性要求不高的系统。

  8. 编程模型简单:对于程序员来说,合作式操作系统的编程模型相对简单,因为程序员不需要考虑操作系统的抢占行为。

合作式操作系统的一个典型例子是早期的MS-DOS操作系统。在MS-DOS中,程序需要主动调用yield函数来让出CPU,否则程序可能会长时间占用CPU,影响系统的响应性。

合作式操作系统和抢占式操作系统是两种不同的进程调度方式,它们在任务切换和资源分配方面有着本质的区别。以下是两种操作系统的总结对比:

合作式操作系统(Cooperative OS)

  • 调度方式:进程必须主动让出CPU给其他进程,操作系统不强制抢占CPU。
  • 上下文切换:由进程控制,进程在完成工作或需要等待资源时,通过调用特定函数(如yield)来触发。
  • 优先级:进程的执行顺序通常由程序员控制,操作系统不负责优先级调度。
  • 死锁风险:存在较高的死锁风险,因为进程可能不会主动让出CPU。
  • 饥饿问题:可能导致低优先级的进程长时间得不到CPU时间,出现饥饿现象。
  • 适用场景:适用于简单的系统,如早期的操作系统或某些嵌入式系统。
  • 编程模型:对程序员来说,编程模型相对简单,但需要程序员自己管理进程的执行。

抢占式操作系统(Preemptive OS)

  • 调度方式:操作系统可以强制中断正在运行的进程,将CPU分配给其他进程,无需进程的同意。
  • 上下文切换:由操作系统控制,根据进程的优先级和时间片来自动进行。
  • 优先级:操作系统根据进程的优先级来决定哪个进程获得CPU时间,支持优先级调度。
  • 死锁风险:通过操作系统的调度策略,降低了死锁的风险。
  • 饥饿问题:通过公平的调度算法,减少了饥饿现象的发生。
  • 适用场景:适用于需要高效多任务处理和高响应性的系统,如现代的个人电脑、服务器和移动设备。
  • 编程模型:对程序员来说,编程模型可能更复杂,因为需要考虑操作系统的抢占行为和同步问题。

总结

  • 合作式操作系统更适合简单的应用场景,它的调度机制简单,但可能导致资源分配不均和系统性能问题。
  • 抢占式操作系统提供了更复杂的调度机制,能够更好地支持多任务处理和实时性需求,是现代操作系统的主流选择。

随着计算机技术的发展,抢占式操作系统因其高效性和灵活性,已经成为大多数操作系统的标配(例如你现在用的PC系统…)。然而,在某些特定领域,如某些嵌入式系统或实时系统,合作式操作系统仍然有其应用价值。

标签:八股,优先级,操作系统,调度,进程,抢占,CPU
From: https://blog.csdn.net/weixin_44126836/article/details/139533027

相关文章

  • 数学模型:操作系统中FCFS、SJF、HRRN算法的平均周转时间比较 c语言
    摘 要研究目的:比较操作系统中进程调度FCFS、SJF、HRRN算法的平均周转时间和带权周转时间的大小关系。研究方法:在建模分析时,分别举4个进程的例子,1个进程用两个字母分别表示到达时间和执行时间。分两种极端情况,一种是每个进程到达时cpu还在执行之前的进程,这种结果为T(FCFS)>T......
  • 再见安卓,鸿蒙操作系统时代已经来临!
    在今年4月份的华为鸿蒙新品生态春季沟通会上,余承东宣布,今年的华为开发者大会将于6月在东莞举行,届时将开启HarmonyOSNEXT鸿蒙星河版Beta测试。自此,鸿蒙将彻底脱离安卓,正式进入“纯血鸿蒙”时代。鸿蒙生态的迅速崛起,为广大开发者带来了前所未有的机遇和挑战。1.市......
  • Java 八股文-基础篇
    Java基础一、Java概述1.什么是Java?Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的优秀代表,极好地实现了面向对象理论,允许程......
  • 物理机安装Linux操作系统
    1.物理机安装Linux环境这里以Ubuntu系统为例,Centos系统同理,windows同理1.1下载系统镜像官网下载速度慢的话可以直接百度各大学的镜像下载网站去下载,如下以清华镜像网站为例:https://mirrors.tuna.tsinghua.edu.cn/1.2下载工具ventoyVentoy官网:https://www.ven......
  • BUAA操作系统万字笔记-课堂笔记-期末考试-考研必备-北航961系列
    文章目录1概论1.1CPU漏洞攻击1.2操作系统简史1.2.1体系结构1.2.2系统发展1.3操作系统基本实现机制1.3.1异常:陷阱和中断2系统引导3内存管理3.1预备知识-链接与装载3.2存储管理基础3.2.1存储器管理目标3.2.2存储器硬件发展3.2.3存储管理的功能3.2.4存储......
  • 操作系统发展历史与Linux
    操作系统发展历史与Linux随着计算机技术的迅猛发展,操作系统作为计算机系统的核心软件,经历了从单一到多样、从封闭到开放的演变过程。从最初的批处理系统,到分时操作系统的兴起,再到个人计算机操作系统的崛起,最后到Linux的诞生和广泛应用,每一步都见证了操作系统领域的重大变革。早......
  • 从0到1训练私有大模型技能与应用实现 ,企业急迫需求,抢占市场先机
    从0到1训练私有大模型:技能构建与应用实现,助力企业抢占市场先机在当今数字化浪潮中,人工智能(AI)技术已成为企业实现创新和突破的关键。特别是在大模型技术领域,其强大的数据处理能力和泛化能力为企业提供了前所未有的机遇。为了满足企业急迫的需求,抢占市场先机,本文将从0到1探讨如何训......
  • 100道大模型面试八股文
    算法暑期实习机会快结束了,校招大考即将来袭。当前就业环境已不再是那个双向奔赴时代了。求职者在变多,岗位在变少,要求还更高了。最近,我们陆续整理了很多大厂的面试题,帮助球友解惑答疑和职业规划,分享了面试中的那些弯弯绕绕。分享100道大模型面试八股文,喜欢记得点赞、收藏......
  • 基于Linux操作系统的生产消费者队列封装(C++)
    一.先前代码及实现(在该篇中会用到)1.基于Linux操作系统的锁的封装-CSDN博客2.基于linux操作系统的线程封装(可实现任意传递任意类型任意个数的参数)-CSDN博客二.生产消费者模型    在一个多线程的进程中,通常存在如下关系生产者和消费者,其中生产者负责生产资源(产生任务......
  • openEuler操作系统的安装与部署
    实验步骤(本篇教程所需的实验环境为VMwareWorkstation+openEuler22.03)1.下载官网下载地址:https://www.openeuler.org/zh/download/archiv版本选择:openEuler22.03LTSSP2,即长期更新版2.虚拟机配置单个文件--效率高,IO速度快多个文件--方便文件迁移......