我现在真的很好奇。我是一名Python程序员,这个问题让我感到困惑:你编写了一个操作系统。你怎么运行它?它必须以某种方式运行,这种方式是在另一个操作系统中?
如何在不在操作系统中运行应用程序?如果没有要运行的操作系统,如何告诉计算机运行,比方说C,并将这些命令执行到屏幕上?
是否与UNIX内核有关?如果是这样,那么 是一个unix内核,还是一般的内核?
我确信操作系统比这更复杂,但它是如何工作的?知道这件事真是太棒了!
感谢。
答案 0 :(得分:1)
你确实可以在没有操作系统的情况下编写程序。实际上,在您的PC上已经有一个程序在操作系统启动之前没有操作系统运行。事实上有两个。首先是你的BIOS。
IBM PC架构是使用BIOS启动计算机的一系列架构之一。并非所有架构都具有BIOS。例如,iPhone直接引导到引导加载程序。事实上,大多数“现代”架构没有BIOS但直接启动到引导加载程序。这种方式实际上在概念上更简单。
PC需要BIOS的事实仅仅是历史遗产。最初的IBM BIOS实际上是用于加载DOS的基本引导加载程序。现代BIOS仍然是引导加载程序..加载引导加载程序。
大多数PC BIOS都是专有的。它们允许制造商在将控制权传递给引导加载程序之前初始化自定义/专有硬件。这使得编写引导加载程序成为可能,而不必担心操作系统映像在闪存驱动器,USB拇指驱动器,SD卡,磁盘,DVD等上的天气。引导加载程序只是看到已经初始化的磁盘BIOS。
启动的下一个阶段是引导加载程序。 IBM PC体系结构需要引导加载程序的原因是BIOS通常用于设置CPU以运行DOS。现代操作系统要求CPU的配置略有不同。此外,现代操作系统内核(内核是操作系统的实际核心可执行代码,如管理内存,CPU等)往往是大型的,通常大于4MB,比大多数BIOS设计加载的大得多。因此BIOS加载一个小的引导加载程序,然后加载实际的操作系统。同样,这只是由于IBM在20世纪80年代设计原始PC架构时做出的决定所必需的。像iPhone或PS3这样的现代建筑不会这样做。它们直接启动到引导程序。
引导装载程序是解决鸡和蛋问题的必要条件:加载需要从磁盘读取的操作系统。要从磁盘读取,您需要使用由OS加载的设备驱动程序。为了打破这种循环依赖,人们会编写引导加载程序,它们基本上是非常简单的操作系统,只能运行一个程序(操作系统),并了解如何从磁盘(或SD卡或网络等)读取。
这将我们带到回答您问题的部分。如果你编写了一个操作系统,你如何加载它?您可以通过配置引导加载程序来加载它。 Windows附带了一个不太灵活的引导加载程序。它了解如何加载Windows,但这是关于它。您可以安装开源引导加载程序,如Grub或Burg,它们也了解如何加载其他操作系统。
启动计算机所涉及的基本概念实际上很简单。这是可怕的细节。但是,如果你真的对操作系统的工作方式感兴趣,那么最终它是非常有益的。另外,如果你对这些东西感兴趣,我建议你去寻找除了IBM PC之外的其他架构,比如使用EFI而不是传统BIOS或Linksys路由器的IBM硬件,这些路由器直接从引导加载程序或像嵌入式平台一样启动Linux运行单个程序的Arduinos,您可以在没有操作系统的情况下直接在CPU上编译。
答案 1 :(得分:0)
您需要一个操作系统来执行虚拟化内存和仲裁对硬件的访问等操作。由于操作系统可以完全访问内存和硬件等内容,因此无需运行操作系统。大多数程序从操作系统获得的服务,操作系统本身必须提供自己或必须从硬件获得。
答案 2 :(得分:0)
运行任何软件的是某种CPU,一种电子电路,硬件。
无论软件是OS还是其他类型的程序,CPU都不关心。它只是在可能的情况下运行它(例如,直到所述软件导致不可恢复的错误,迫使CPU进入某种奇怪状态或简单地重置)。
启动时,CPU开始执行它在内存中某个位置找到的任何代码。该位置可以在CPU中硬连线,也可以由CPU电路外部配置,甚至可以由软件编程。它取决于CPU以及整个设备的设计方式。
并非所有程序都需要在CPU上运行操作系统。操作系统是这种程序的一个很好的例子。如果每个操作系统都需要另一个操作系统,你会如何阻止这种无限递归? :)但它不是唯一的。
许多电子设备,尤其是非常简单的电子设备,如数字时钟,其中没有任何操作系统。
关于操作系统在另一个操作系统上运行的唯一时间,就是虚拟化时。但我不打算回答这个问题。
操作系统只需要其基本功能,如调度,线程/进程同步,内存分配等,或者完成所有或大部分设备I / O本身,并隐藏运行在OS中的程序的硬件特性,IOW ,允许便携式程序。你在Python中编写print 123
并且它在任何与Python兼容的操作系统(无论可用的操作系统)中打印123,无论显示器,分辨率以及可能存在于不同计算机上的许多其他差异如何在不同的操作系统中。如果通用操作系统没有提供一些通用功能(以及一些或多或少的常用API),例如控制台和文件I / O以及内存管理,那么Python就不可用,而且那些操作系统不一般 - 首先用于。
操作系统内核是操作系统的核心。它完成了大部分低级别和肮脏的工作,处理:
有时候操作系统功能已经足够了,在这种情况下,操作系统和内核之间没有任何区别,它们在这里也是一样的。
如果OTOH需要更多东西,例如很多灵活性,支持不同的设备,一些代码来管理所有这些以及一堆特殊的文件系统驱动程序,用于网络和TCP / IP堆栈等,然后单独一个简单的(也许只是相对简单的)内核是不够的,需要有更多的东西围绕它,这是你开始区分操作系统和内核,并达到OS =内核+额外的地方。您正在使用的文本编辑器,即使它与您的操作系统一起提供,也不是那些额外的文件编辑器,它是一个常规程序,不需要与操作系统捆绑在一起,但为方便起见,它可能是。
UNIX是操作系统的一个示例。还有更多,尤其是Linux和Windows。
您应该获得一些关于计算机体系结构和组织的书籍,以了解计算机的工作原理。它里面是什么,如何组合,引擎盖下发生了什么等等。