您认为托管操作系统是个好主意吗?[关闭]


15

诸如Microsoft SingularityJNode之类的托管OS 是一个非常有趣的概念。从本质上讲,操作系统是用用低级语言(C / C ++ / Assembly)编写的代码引导的,该语言本质上实现了虚拟机。其余的OS(以及所有userland应用程序)在虚拟机上运行。有一些很棒的事情。例如,您突然使任意指针过时了。如果编写得当,您将摆脱大多数现代OS当前拥有的大量遗留问题。

但是,缺点是,您与硬件之间的距离太远了,而作为开发人员,您将无法下降到较低的抽象级别并弄脏您的手。

您对此有何看法?


我害怕回答,因为我偏爱高级语言,因为它们是我使用过的唯一语言
TheLQ 2010年

2
对于越来越快的计算机,我认为这很重要。但是,如果MSFT实现了它,那么它要么很棒,要么很烂-两者之间没有任何关系。
Job

请注意,“遗留问题”是使现有应用程序运行的原因。不要低估实际使用某些东西的重要性。

Answers:


8

我认为这是“取决于”的另一种情况。

如果您正在编写应用程序(例如Web浏览器,文字处理器等),而闪电般的快速性能并不一定是一个问题,那么这种方法是有好处的。通过使用这种方法,您可以为客户提供更安全,更可控的体验。您不仅限制了恶意软件可能造成的损害,而且还运行在更一致的环境中。

就像主机游戏和PC游戏之间的区别。前者确切地知道他们需要使用什么硬件,因此可以利用这些知识,而后者必须能够处理更多种类的图形卡,声卡,硬盘速度等。

但是,有些应用程序(例如游戏!)需要低级别的访问权限,并且仍然需要“本机”运行。

像托管语言一样,您将必须使用适当的工具来完成工作。


3
我真的不同意。没有理由让游戏运行本机,并且如果操作系统为您提供了所需的所有托管入口点,那么也没有真正的本机需求。当然存在一些性能缺陷(如果对整个系统进行管理,则实际上可以忽略不计),但是今天,我们拥有足够的处理能力,并且对高度依赖的软件有很多需求。
Wizard79 2010年

@Lorenzo Games已经对计算机施加了足够的压力,因此提高性能至关重要。但是,我不确定如果所有VM都执行本机调用会对性能产生多大的影响
TheLQ 2010年

4
@TheLQ:重点是游戏已经不必处理“低级内容”,因为总有一些中间件(DirectX,Open GL等)。当然,它们是计算密集型的,但是使用中间件已经对性能产生了影响。它将只是一个托管(固定)中间件。
Wizard79 2010年

3
如果操作系统负责JITting,那么最终您将获得托管代码,其运行速度与“本地”代码差不多。请记住,如果您必须对程序具有类似程序集的控制,则始终可以直接在字节码中使用程序。
Chinmay Kanchi 2010年

3
Afaik,MS Singularity 完全不需要在内核模式和用户模式之间进行切换,从而极大地提高了性能。分叉也变得便宜得多。
9000

3

总的来说,我认为这是个好主意,但是由于周围并没有很多东西可以完全烘焙,所以很难说出它们在现实世界中的表现。我希望MS更新了Singularity项目,以便我们可以看到进展情况,但是我猜想其中的一些正在Windows的某些版本中使用


3

我认为,完全托管的OS的好处是巨大的,这的确可能是未来,但这还需要很多年。

一个好的托管操作系统将为您提供所有您需要做的所有低级事务所需的所有托管入口点,而不管是否被托管:捕获中断并使用设备执行I / O。C#还允许使用不安全的代码(使用指针进行处理),但仅在“设备驱动程序”(这将是另一种软件隔离过程)中允许使用。

安全性,均匀性,可移植性,尤其是可靠性方面的优势肯定会超过任何性能缺陷。然后,由于不再需要上下文切换,因此完全托管的系统出奇地快。


您确定不需要上下文切换吗?您仍然需要一次运行多个程序。
Job

如果程序和代码都在VM中运行,则可能没有上下文切换。但是,这将需要以HL语言重新实现MMU,因此我真的怀疑会不会有很多性能优势。
Maciej Piechotka 2011年

2

托管操作系统可能某种程度上类似于微内核-您以安全为名牺牲了性能。

可能存在类似的问题,因为它需要将代码分为两部分:

  • 用C /汇编语言编写的低级内核
  • 用托管语言编写的更高级别的内核

根据安全地输入/离开HL语言的成本,它可能会产生与微内核类似的问题-可能会更快(离开HL的速度要比全上下文切换要快,但是IIRC(例如JNI)会非常昂贵)。

用户应用程序可能还需要单独的上下文,因为许多应用程序是在其他平台(例如C,Java或.Net)上编写的。在相同的情况下,应用程序可能受CPU限制(编译器,音乐转换器等),甚至需要汇编程序优化才能以足够的速度执行。此外-以HL语言实现的MMU保护可能不会像硬件那样快,即使它可能需要进行更精细的调整。

HL语言也不擅长底层操作。尽管通常使用“良好”编码实践来设计软件,但并不需要这样做。我不认为它们至少可以防止某些错误,因为内核有时需要手动处理内存。

最后,我认为这样的操作系统不需要完整的VM。由于无法使用原则上的“一次编译运行”构建操作系统,因此,HL语言(甚至使用GC&co。)将是更好的选择。

例如,您突然使任意指针过时了。

操作系统本质上是低级的。您不仅要传递给硬件“任意指针”,而且还要传递物理地址,然后传递给虚拟地址。某些DMA只能处理前16MiB的内存。尽管这样的OS可以简化很多,但它不会摆脱地址。

如果编写得当,您将摆脱大多数现代OS当前拥有的大量遗留问题。

  1. 有很多旧式硬件。然后是软件。您首先要在实模式下启动,然后启用A20门(不问)跳到保护模式,然后跳到长模式。
  2. API / ABI兼容性很好。假设他们已经编写了这样的操作系统-您将在其上运行什么?Firefox-不行(使用WinAPI的C和C ++)。Java-可能需要通过ikvm进行移植或有一些小问题-除非它无法使用JNI。我猜MSSQL(当然可以肯定是Oracle,MySQL,Postgresql ...)不是用托管语言编写的,因此它不适用于服务器。
  3. 甚至Bug兼容性也是“好”。AFAIK MS花费大量时间只是测试和检查某些软件是否没有以智能(读取错误)的方式使用API​​。就像freeWindows实际开始释放内存时在其后使用指针的问题一样。

我想它将与微内核同时流行。


2

就个人而言,我认为托管OS的概念有点像Communism:理论上不错,但是不切实际。

问题是,在没有完全从头开始重写操作系统的情况下,我只是看不到任何带来托管操作系统的方法(我希望有人在这方面能证明我错了)。另外,如何使数十年的非托管代码适合托管OS?

目前最流行的OS内核经过了实战测试,并且在几十年的时间里已经成熟。您不只是随心所欲地重写它们。更不用说历史上充斥着处理器设计和内核架构的例子,这些例子无疑是更好的,但它们从来没有说服任何人值得为之付出改变的代价。

最后,像Microsoft或Apple这样的公司如何向客户销售托管操作系统?普通计算机用户是否会关心操作系统是托管还是非托管?

上面提到的,我希望我是错的,并且托管操作系统将成为现实。但我对此表示怀疑。如果我们确实看到了它,那么可能不会再过一两年了。


2
OS内核对于接受不是很重要。MS设计了一个全新的,不兼容任何NT的内核,这是成功的。苹果公司彻底改变了其内核体系结构(三次改变了它的CPU体系结构),并且仍然繁荣发展。关键是与现有软件的兼容性以及易于移植。允许从旧代码平稳过渡到新代码的兼容性和/或虚拟化层在托管OS中看起来并不难。
9000

2

托管代码只是虚拟内存保护今天为您提供的东西的外推,即计算机拒绝访问资源的能力。

IBM已经在大型机系统上做到了这一点(他们称之为别的东西),因此在我看来,这在普通公众可用的系统上进行只是时间问题。

您是否愿意在托管代码上运行Google笔记本电脑(运行Chrome,基本上没有其他功能)?


1

但是,缺点是,您与硬件之间的距离太远了,而作为开发人员,您将无法下降到较低的抽象级别并弄脏您的手。

这实际上是不正确的。例如,在JNode中,有一个Unsafe类(和其他类)使您可以访问内存位置等。JIT编译器还将一些“魔术”类/方法转换为特权指令。对这些类/方法的访问受到(或将受到)安全管理器,JIT编译器等的限制。但是,如果您要编写在操作系统级别执行的代码,则可以使用这些功能。

需要警告的是(当然),对Class Unsafe和相关类的不正确使用可能会立即导致操作系统崩溃,或者导致系统崩溃。


0

我怀疑它们对台式计算机是否有用。但是时间可能证明我在这一点上是错误的。

但是在我看来,一个有趣的潜力是作为服务器操作系统,更具体地说是作为虚拟化环境中的来宾操作系统。我从来都不愿意在虚拟服务器环境中安装完整的Windows Server安装,因为它知道运行了多少不必要的服务,包括完整的GUI。

现在在虚拟服务器上安装诸如Singularity之类的东西来托管ASP.NET应用程序,这更有意义。假设他们可以保持它的轻量级操作系统。


1
如果可以的话,最好完全放弃Windows。
工作

1
沙盒浏览器和其他面向Internet的事物的趋势可能表明,也需要托管的或至少是分区的OS或台式机。
9000
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.