操作系统第五、六周

2023-10-09 19:12
文章标签 操作系统 第五 六周

本文主要是介绍操作系统第五、六周,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

等待状态到就绪态

作者在听课中产生以下疑问:

为什么等待状态的服务完成后会变成就绪状态,而不是立刻返回到运行状态,为什么CPU只会考虑就绪状态的进程?

为了明确地回答这个问题,我们首先需要了解操作系统中的进程状态和调度机制。

进程的状态

  • 新建(New):进程正在被创建。
  • 运行(Running):进程正在CPU上执行。
  • 等待(Waiting/Blocked):进程等待某个事件发生,例如等待I/O操作完成。
  • 就绪(Ready):进程已经准备好在CPU上运行,但由于其他原因(如其他进程正在运行)暂时没有被执行。
  • 结束(Terminated):进程已完成执行。

让我们考虑上面的问题,当一个进程从等待状态中解除(例如,它等待的I/O操作完成了),它确实是准备好运行的。但是,它不会立即被分配到CPU,而是首先被放入就绪队列,这是由几个原因决定的:

  1. 多任务操作系统:现代操作系统通常支持多任务,这意味着它们同时管理多个进程。尽管有多个进程“准备好”运行,但通常只有一个(或在多核系统中是几个)实际在CPU上执行。

  2. 公平性放入就绪队列并等待其轮到运行确保了公平性。例如,如果两个进程几乎同时完成它们的等待状态,直接将其中一个赋予CPU可能会对另一个造成不公平。通过使用就绪队列,操作系统可以根据特定的调度策略(例如,轮转、优先级等)来选择哪个进程先运行。

  3. 优化CPU利用率在等待状态完成后,进程可能仍然需要等待其他资源,例如内存、磁盘、网络带宽等(也就是说,虽然等待状态是运行态受到某一阻塞条件而产生的状态,但是在服务完成之后也有可能需要重新获取除CPU以外的资源)。将这些进程直接放入运行状态可能会导致CPU资源的浪费,因为CPU可能在等待其他资源时处于空闲状态。将进程放入就绪状态并通过调度器进行管理,可以确保CPU始终忙于处理能够有效使用其能力的工作。

  4. 响应时间:通过使用就绪队列,操作系统可以确保对交互式应用(如用户界面应用程序)有更快的响应时间。调度策略可能会优先考虑这些交互式进程,因为它们需要快速的用户响应。

  5. 预防资源竞争:假设一个进程等待一个特定资源,当这个资源可用时,可能有多个进程都想要使用它。直接运行这些进程可能会导致资源冲突。通过就绪队列和调度策略,操作系统可以更好地管理这些竞争情况。

总之,将进程从等待状态移到就绪状态而不是直接到运行状态,不仅是为了公平性,还涉及到多种资源管理和优化策略,确保系统的整体效率和响应性。


原语与事务

原语(Primitives)和事务(Transactions)确实有很大的区别,并且它们的应用和目的也不同。让我们来详细解析这两个概念:

原语(Primitives)

  • 定义:在计算机科学和操作系统中,原语通常是指一个不可中断的操作,这意味着一旦它开始执行,它就会连续地执行到完成,不会被其他进程或操作打断。
  • 特点:原语确保了在多任务环境下的操作是原子的,即它们要么完全执行,要么完全不执行,不会处于中间状态。这为并发控制提供了一个基本的手段,例如在实现互斥锁或信号量时。
  • 示例:在多线程编程中,对某些共享资源的访问和修改可能需要使用原语来确保数据的一致性和完整性。

事务(Transactions)

  • 定义:事务是数据库管理系统(DBMS)中的一个基本概念,代表了一系列操作,这些操作作为一个单一的逻辑单元执行,满足ACID属性(原子性、一致性、隔离性、持久性)。
  • 特点
    • 原子性:事务中的所有操作都必须全部完成,如果任何一个操作失败,整个事务都会回滚到开始前的状态。
    • 一致性:事务应确保数据库从一个一致的状态转换到另一个一致的状态。
    • 隔离性:并发执行的事务彼此隔离,不会相互干扰。
    • 持久性:一旦事务完成(提交),其结果就是永久的,即使系统发生故障。
  • 示例:在银行转账操作中,从一个账户扣款和向另一个账户存款可以被视为一个事务。

原语确实是一旦开始执行就会执行到底的操作,不会被中断,并且不支持回滚机制。而事务则提供了一个更高级别的抽象,允许一系列操作作为一个单一的逻辑单元来执行,并提供了回滚机制以处理失败的情况。两者在设计和目的上都有其独特性,但都旨在提供系统的正确性和一致性。

这篇关于操作系统第五、六周的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/174979

相关文章

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

1、简述linux操作系统启动流程

1、简述linux操作系统启动流程 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。开机时将ROM中的指令映射到RAM的低地址空间,CPU读取到这些指令,硬件的健康状况进行检查,按照BIOS中设置的启

操作系统是怎么为不同的程序分配所需的内存空间的

操作系统为不同的程序分配内存空间的过程涉及多个关键步骤,确保每个程序都有其所需的内存资源,同时避免程序之间的冲突。以下是操作系统如何为程序分配内存空间的详细过程: 1. 内存管理的基础概念 虚拟内存:现代操作系统使用虚拟内存机制来为程序提供隔离的内存空间。每个程序运行在其独立的虚拟地址空间中,这使得程序间的内存互不干扰。物理内存:实际的 RAM(随机存取存储器),由操作系统和硬件共同管理。虚拟

操作系统安全保护

操作系统安全概述 概念:满足安全策略要求,具有响应安全机制及安全功符合特定安全标准,在一定约束条件下 能抵御常见网络安全威胁,保障自身安全运行及资源安全 安全等级:根据安全功能和安全保障要求分为 用户自主保护级  系统审计保护级 安全标记保护级 结构化保护级 访问验证保护级 操作系统作用: 负责计算系统的资源管理、支撑和控制各种应用程序运行,为用户提供计算机系统管理接口 是构成网络信息

Linux操作系统命令集(一)

最近开了操作系统的课,弄着虚拟机的linux系统命令学学 文件和目录操作命令: ls:列出目录内容 示例:ls -l 以长格式列出目录内容cd:切换目录 示例:cd /home/user 切换到 /home/user 目录mkdir:创建目录 示例:mkdir new_directory 创建名为 new_directory 的目录rmdir:删除空目录touch:创建空文件或更新文件的时间戳

操作系统分页式存储管理

每次输入地址后,计算出页号,若页号越界,则给出错误提示。否则依次调用FIFO和LRU算法,这里值得注意的是,由于我们的FIFO算法先于LRU算法被调用,那么当在处理FIFO算法时,我们暂且不将位视图相应位置做变化,留到处理LRU算法再做处理。 对于FIFO、LRU算法的缺页,我们分两种情况考虑,第一种是模拟栈内还有空间,那么直接将其入栈。第二种是模拟栈内无空间,要发生置换。发生置换时把模拟栈最底

linux定时监听ssh服务是否启动-------麒麟操作系统永久关闭swap

linux监听ssh服务是否启动 1、监听脚本2、定时任务3、麒麟操作系统,永久关闭swap 1、监听脚本 #在/usr/local/bin目录下新建脚本文件 cd /usr/local/bintouch check_sshd.sh#给可执行权限chmod +x /usr/local/bin/check_sshd.sh 脚本内容如下: #!/bin/bashs