没有外壳的操作系统是什么样的?

44t*_*aka 44 operating-systems shell history

像 bash 或 command.com(直到 Windows ME)或 CMD.EXE(在更高版本中)这样的 shell 提供了一个接口(除其他外)接受来自用户的命令。在运行 shell 之前,操作系统是什么样的?在开发第一个 shell 之前,系统是如何使用的(例如 1970 年代早期的 UNIX)?如果计算机甚至不能接受命令(没有命令行),用户如何与之交互?这个最基本的界面是什么?我可以在终端模拟器中运行这个接口还是没有办法在 shell 后面运行?

Law*_*ceC 37

在运行 shell 之前,操作系统是什么样的?

取决于操作系统以及您如何配置它。Linux 可以配置为将引导文本写入控制台设备,无论是文本模式控制台、帧缓冲区控制台还是串行端口。它还可以配置为完全静音。某些操作系统/系统可能会将诊断信息写入非易失性存储器,通过将系统置于开发人员、调试或诊断模式,可以访问该存储器。许多操作系统支持将启动和诊断信息输出到某种形式的 UART,即使对用户隐藏,这些信息也可以在设备上以某种方式使用(谷歌“将串行端口添加到 DD-WRT”以获取制造商隐藏串行端口的位置以及如何隐藏串行端口的示例)你可以找到他们)。

操作系统根本不需要外部显示器——它只是操作系统的另一个设备。

在开发第一个 shell 之前,系统是如何使用的(例如 1970 年代早期的 UNIX)?

本质上(省略了很多,但这应该会让你有想法) - 你加载你的程序,要么通过翻转面板上的开关,要么使用纸带阅读器(这些设备将直接写入内存而无需 CPU 干预),然后启动CPU 与另一个开关。CPU 将运行该程序,生成其输出,然后停止。这是批处理而不是交互式处理。如果您想运行不同的程序,则必须重新执行此操作。

如果计算机甚至不能接受命令(没有命令行),用户如何与之交互?

我不是这方面的专家,但是像 Altair、IMSAI 和 PDP-8 这样的老旧计算机,它们的前面板开关可以直接控制 CPU,可以直接读写内存而无需 CPU 干预。

这个最基本的界面是什么?

我相信大多数(如果不是全部)现代 CPU 都有一个“JTAG 端口”,它允许相同类型的直接操作。请记住,长期以来,大多数计算机都希望拥有 ROM 或固件,以便在系统打开时控制系统,然后再将其交给操作系统。在这里,可以存在预引导实用程序,或者存在用于加载此类实用程序的最小机制。可以通过串行端口访问某些引导加载程序,例如 U-Boot。引导加载程序不会在操作系统“后面”运行,它们加载操作系统,将控制权交给它,然后它们不再运行。

我可以在终端模拟器中运行这个接口还是没有办法在 shell 后面运行?

不,您需要一个 JTAG 接口。这是潜入电子领域,我承认我对此知之甚少,除了我的GuruPlug自带一个,我可以用它直接对 GuruPlug 板上的闪存芯片进行编程 - 这意味着如果有什么东西杀死了引导加载程序GuruPlug,我有一种“独立于 CPU”的方式来闪回它。

  • JTAG 接口允许(在专用控制器的帮助下)绕过正常操作模式访问所有组件的测试接口。根据公开的测试功能,您可以对存储器进行编程、控制输入/输出、启动/停止 CPU 或读取内部寄存器。 (4认同)

use*_*ser 24

操作系统不必提供外壳,因为该术语在今天是常用的(意思是一个应用程序,它将以交互方式接受来自用户的命令),但是这样的操作系统对于用户来说根本不会“看起来像”任何东西。用户。正如 Oliver Salzburg 所提到的,它可能只会显示一个空白屏幕(如果它完全支持显示输出),尽管没有理由必须这样做。以 Linux 内核在引导和内核初始化过程中的诊断输出为例。

shell,无论是图形 shell、命令行解释器还是其他东西,都使用操作系统提供的工具来执行诸如读取命令、启动进程、执行 I/O 重定向等操作。

然而,没有理由使用这些设施的应用程序一个外壳

在过去,操作系统只是那些“有用的例程”的集合,否则每个应用程序都必须从头开始重写,而计算机本质上是批处理设备。文件、磁盘和打印机 I/O 之类的东西可能是最先被收集到现在所谓的操作系统中的东西,其次是进程调度(值得注意的是,1960 年代早期的阿波罗制导计算机是一台多任务计算机)。然后应用程序可以调用操作系统而不是使用它们自己的例程来做这些事情,这降低了编程的复杂性,并可能有助于减少代码大小或执行时间(因为这些系统设施可以被大量优化和调试一次,之后每个人都会受益) . 随着计算机变得越来越普遍,操作系统增加了主要以用户为中心的功能,例如用户与计算机交互并以交互方式发出命令的方式;图形外壳只是该推理线的扩展。

此外,就在不久之前(想想 1980 年代后期),编写应用程序以在裸个人计算机硬件上运行而无需任何普通操作系统的帮助仍然相当普遍。这对游戏特别有用,因为它避免了操作系统本身的内存和处理开销,但我相信还有其他例子。在这些情况下,在某种程度上,应用程序是它自己的操作系统,因此,该应用程序提供的用户界面就是外壳。

  • 今天编写在没有操作系统的裸机上运行的程序非常普遍 - 可能比以往任何时候都更加普遍。如今,几乎任何带有电子设备的东西都有一个微控制器。其中一些嵌入式系统,如汽车或路由器,确实有操作系统,但恒温器、洗衣机等简单的东西通常没有。 (5认同)

Cha*_*_99 12

早期的计算机没有我们今天使用这个词的意义上的操作系统。他们将硬件中实现的功能直接暴露给在其上运行的任何程序。只有一个程序同时在它们上面运行。程序本身必须控制所有任务,操作系统在“后台”没有做任何事情。

但是仍然有一个入口点供用户启动程序。如果你扩展这个词,你可以称它为“shell”。但基本上,它只是等待用户输入要运行的程序的第一位的硬件。无论是按下按钮、轻弹开关、配电盘上的连接电线、穿孔卡片、穿孔薄膜还是磁带。也许他们甚至可以从之前加载的几个程序选项中进行选择。但是,即使通过按下旁边的按钮从显示为发光灯的列表中进行选择,也可以被视为“外壳”。

因此,如果您对“外壳”的定义是“一个接受用户命令的界面”,那么就没有时间了,至少对于您甚至会模糊地称为计算机的设备而言。

您可能想查看关于计算历史的非常好的维基百科页面,尽管它并没有过多关注输入/输出的观点。


Der*_*ler 6

它可能会是一个空白屏幕。

外壳可能是命名为外壳,因为它是围绕内核的壳(内核是操作系统)。因此,从某种意义上说,它是操作系统的用户界面,无论它是什么界面。

如果操作系统只有一个功能,那就是关闭计算机,而您将构建一个接受任何键盘输入然后调用该功能的程序,那么就是 shell。不需要复杂的命令行界面来构建与用户交互的东西。