当前位置: 首页 > 科技观察

程序可以在没有操作系统的情况下运行吗?

时间:2023-03-18 00:18:26 科技观察

大家好,我是小风哥。现在的程序员用惯了操作系统,但是你有没有想过,如果没有操作系统,我们能让程序跑起来吗?先说答案吧,当然可以,而且必须是可以的。你可以从这个角度思考,操作系统本身就是一个程序,这个程序的运行并不依赖于任何其他的“操作系统”。请注意,这不是套娃。其实在计算机历史的早期,或者说在古代,计算机上是没有操作系统的。这一时期的程序确实是在没有操作系统的情况下编写和运行的。编写一个可以直接在计算机上运行的程序并不容易。想想如何运行这个不依赖于操作系统系统的程序?开始是个问题。我们面临的第一个问题是:没有Program,怎么启动电脑?也就是说,CPU上电后应该做什么?啊,我没想到。第一个问题不容易解决。如果你想让计算机运行你的程序,至少计算机必须Let'sgetstarted。所谓电脑启动无非是让CPU在上电后开始执行一段初始化代码,为你真正的程序运行做铺垫。这一大段代码就是所谓的kernel,kernel。事实上,你可以让计算机在开机后执行任何代码,也就是实现自己的内核,当然你可以不用这样的内核直接运行你的程序,电脑启动可以参考本文《操作系统是如何启动起来的?》,但还是会出问题。运行时问题您必须面对的第一个问题是内存问题。你的程序应该加载到内存的什么地方?显然这涉及到内存管理问题。第二个问题是你没有办法充分利用计算机。想一想,在这种情况下,您只有在启动时才能开始执行一个全新的程序。如果要执行第二个程序,需要关机,刷入存储设备中的新程序,然后再开机。这是正确的吗?令人抓狂。这还不算完,如果你的程序有bug,那么对不起,你可能需要重启电脑,你能想象程序出了问题就重启电脑吗?想同时运行文本编辑程序和音乐程序吗?不行,要实现就自己写一个多任务(Multitask)管理系统。您至少必须管理正在运行的程序。想想是不是一定要用进程的抽象。我仍然认为这些概念没有用即使你有一个多任务系统,如果一个程序出了问题把另一个程序的内存擦掉了,这是一箭双雕吗?一个bug导致两个程序崩溃,是不是要有进程隔离机制?另外,如果你的程序需要用到I/O设备,那就更酸了。没有驱动程序如何控制这些设备,如何使用鼠标、键盘和显示器?您的程序是否需要链接很多驱动程序?想想看。我头疼。而且您必须有效地使用计算机资源。当你完成这一切后,你会发现你实际上已经编写了一个操作系统。你还觉得操作系统没用吗?操作系统搞定了所有的脏活累活,程序员只需要专注于写bug。说了这么多坏处,没有操作系统还有一个有趣的好处,那就是你可以做主。程序员也是独裁者。有趣的是,虽然你可以花几千块钱买一台电脑,但你(程序员)几乎没有办法绕过操作系统随意读写你的内存,让CPU执行任何指令。因为你的Windows/Linux/MacOS会直接杀了你。有意思的是,你用自己的钱买的电脑硬件和操作系统理论上都是个人财产,但是你花钱买的操作系统不受你的控制(神灵除外),反而禁止你这样做并且这就像买了一头牛,但牛不受控制,你可以为所欲为。如果你真的买了这样一头牛,我相信你是受不了的,可是你可是花了大价钱才买的。来到这里的电脑和智能手机根本不受你控制,人们对此也没什么感觉。他们认为这很正常,想想也很神奇。遥远的过去,在早期的计算机上,普通的程序员(应用程序)可以完全控制计算机,可以说是大权在握。事实上,在现代计算机系统上,你也可以在没有操作系统支持的情况下编写程序。这就是所谓的Bare-MetalProgramming,嵌入式同学应该对这个不陌生。好了,关于操作系统和程序运行的话题到此结束。简而言之,操作系统并不是计算机执行程序的必要组成部分。没有操作系统,我们仍然可以让程序运行起来。