操作系统如何在应该管理的同一芯片上运行?


17

从我对操作系统的阅读(阅读Wikipedia,技术网站等的基本材料)中,我了解到操作系统是一个程序,它允许程序和应用程序以有效和安全的方式与硬件进行交互。

但是,我对操作系统如何在需要操作时如何监督计算机的操作感到困惑。

我什么意思 好吧,我想像一个操作系统的工作方式是在一台计算机上有两个CPU。一个始终运行操作系统,另一个用于操作系统运行计算机。但是,事实证明,该操作系统与其他进程在同一CPU上运行。这就像经理必须与员工在同一生产线上工作,并且只有在另一名员工完成工作后才能使用电动工具。他将不是一个非常有效的经理,因为如果他的员工稍微不纪律,他将无权下达命令。

那么,操作系统在部分必须在所有其他进程之间共享的同一CPU上仅部分运行的情况又如何呢?最终如何解决?


1
经理不应该使用员工的动力工具!相反,他必须确保员工确实具有工作动力工具。
MSalters

Answers:


15

现代CPU在某种程度上了解操作系统。他们为第一个提出要求的人提供了一些“动力工具”。通常这是引导加载程序,然后将控制权移交给操作系统。通常会说“内核模式”与“用户模式”“环0”与“环3”,以区分具有额外特权的一个进程和其余特权。

这些“动力工具”是资源管理的某些特权:控制内存,访问硬件以及不中断执行用户级别代码的时间。

发生以下事件之一时,CPU将以其特殊特权执行操作系统:

  1. 用户模式进程将控制明确地移交给内核模式进程。这称为syscall
  2. 内核模式进程可以使用其特殊特权来注册某些事件(例如,外部硬件向CPU发送特殊信号,或者用户空间进程尝试访问保留的资源)。当发生这种情况时,CPU立即停止用户模式进程,并将控制权移交给内核模式进程。通常一个人从中断中讲话。

因此,操作系统可以在同一芯片上运行,因为该芯片是为此而构建的。它可以为其保留特殊特权。在没有这些特殊特权的情况下,CPU可以随时中断所有其他代码段,并将控制权移交给OS。

一些支持非常有限的芯片(例如,微控制器)不支持特殊特权代码。这些芯片通常在没有操作系统的情况下运行。只有一个大程序在运行,它可以直接访问硬件,必须响应硬件中断并且可以随时访问任何资源。如果该程序犯了一个错误,通常整个事情都会崩溃。


17

操作系统以其最原始的形式依赖行为良好的进程并将控制权不时地交还给操作系统。如果某个进程的行为不正常,则操作系统可能会冻结。

但是,大多数CPU都有中断:中断会暂停当前进程(抢占),并将控制权交还给操作系统。您可以安排中断以特定间隔发生,或在外部触发(例如,按下复位按钮)。

基本上,CPU在运行操作系统和运行进程之间来回切换速度非常快。此外,CPU具有“用户模式”和“内核模式”。进程以用户模式运行,而操作系统以内核模式运行。在用户模式下运行可防止进程执行受限命令(例如IO)。如果某个进程要写入磁盘,则必须要求操作系统这样做。操作系统切换到内核模式,并代表该进程执行写操作(确保该进程具有所需的权限之后)。


7
@Imray并非如此,对于CPU而言,操作系统只是另一段代码。但是,CPU具有许多供操作系统创建者使用的功能。
Tom van der Zanden

3
我不知道“知道”是否是正确的术语,但是除了运行操作系统外,CPU没有其他理由。它绝对不是完全独立的。实际上,CPU完全依赖于OS来管理其各种模式并以其他方式告知其操作。
马海毛

2
@Mohair有许多微控制器完全没有操作系统运行,这些微控制器算作CPU吗?
汤姆·范德赞丹

2
“那些算作CPU吗?” 当然可以。即使我的第一台计算机没有用户环和内核环,它的6502也是如此,并且您可以poke从命令行处理各种恶作剧。
dmckee ---前主持人小猫,2015年

2
@TomvanderZanden究竟是the CPU switches back and forth between running the OS and running processes什么?是什么触发开关?
jnovacho

1

您不需要两个不同的微处理器处理器即可运行用户空间和内核空间代码。基本上,当您在Bios上打开计算机时,它会以这种方式工作,以加载RAM的Bootloader(磁盘上的512kb代码,结束55aa bootloader签名)并通过该Bootloader将内核加载到ram并永久运行,直到您关闭计算机为止。而且您的内核管理内存,并且不允许位于ram上的内核代码被用户空间代码覆盖。为此,有一些系统调用,这些用户调用是通过使用这些系统调用来调用的,并将您的用户空间代码添加到ram中并开始执行它。在操作系统中,这一概念被研究为“内存管理”。这是您可以阅读的链接,非常适合入门 https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf


0

要以其他答案为基础,如果您认为内核本身不是进程而是管理代码,则更容易理解。任何用户进程都可以从用户模式切换到内核模式,并通过使用内核空间的某些部分来执行内核代码(特权指令)。然后,该过程可以返回到用户模式,然后再次在用户空间中运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.