没有操作系统程序可以运行起来吗?

96d086da2388a3174c53e89327d519af.gif

作者 | 陆小风

来源 | 码农的荒岛求生

现在的程序员对操作系统已经习以为常了,但是你有没有想过,如果没有操作系统的话我们可以让程序运行起来吗?

先说答案,当然是可以的,而且必须是可以的。

你可以从这个角度来思考,操作系统本身就是一个程序,这个程序的运行没有依赖任何其它“操作系统”,注意,这不是套娃。

实际上在计算机历史早期,或者说上古时期,计算机上根本就没有什么操作系统之说,这一时期的程序的确是在没有操作系统的情况下编写和运行的。

1d0410727e1427007c2b7587b0d2f543.png

要想写个能直接在计算机上运行的程序可不简单,想一想这种不依赖操作系统系统的程序该怎样运行起来?

fe64d96c2865be93447bf3d682b4688c.png

启动是个问题

我们面临的第一个问题就是:此时计算机上没有任何程序,你该怎样让计算机启动起来呢?换句话说加电后CPU该干啥?

啊哈,没想到吧,第一个问题就不好解决,要想让计算机运行你的程序至少要把计算机启动起来吧。

a13ada310ca1e77d53dfbd71882c254a.png

所谓的计算机启动起来无非就是让CPU加电后开始执行一段初始化代码,为你真正的程序运行铺路,这一大段代码就是所谓的内核,kernel,实际上你可以让计算机加电后执行任何代码,也就是实现你自己的内核,当然你也可以没有这样的内核,直接运行你的程序。

但这依然会有问题。

c2a6e9c97a53fba7c523e49c8b6e7775.png

运行时问题

第一个要面临的是内存问题,你的程序要被加载到内存的哪个位置呢?显然这就是涉及到内存管理问题。

第二个问题是你没有办法充分利用计算机。想一想,在这种情况下,你只有启动的时候才可以开始执行一个全新的程序,想执行第二个程序就需要关机,在存储设备中刷入新的程序然后再开机,这是不是让人抓狂。

这还不算完,如果你的程序有bug,那么不好意思,你可能需要重启计算机了,你能想象程序出点问题就要重启计算机吗?

想一边运行文本编辑程序一边运行音乐程序?门都没有,要想实现,自己写个多任务(Multitask)管理系统吧,你至少要把运行的程序管理起来吧,想一想是不是就必须用到进程这样的抽象啦,还觉得这些概念没有用吗?

ada495fa0cc3c1645f9aceffe08be018.png

就算你有多任务系统,如果一个程序有问题把另一个程序的内存刷掉了,这是不是就一石二鸟了,一个bug导致两个程序崩溃,你是不是得有进程隔离机制?

此外,如果你的程序需要使用I/O设备那就更有酸爽啦,没有驱动你怎样控制这些设备、怎样使用鼠标键盘显示器,你的程序是不是要链接一大堆驱动,想想是不是就已经头痛了。

而且你还要高效的利用计算机资源,当搞定这一切后你会发现自己实际上已经写出了一个操作系统

还觉得操作系统没有用吗?操作系统把这些脏活累活统统揽下,程序员只需要专注写bug就可以了。

说了这么多缺点,但没有操作系统的还是有一个有趣的优点的,那就是你可以独掌大权。

9736aa85a11073c577a0546656344411.png

程序员也是独裁者

说来有趣,尽管现在你可以花上几千块钱买一台计算机,但是你(程序员)几乎没有办法绕开操作系统随意读写你的内存、让CPU执行任何指令,因为你的Windows/Linux/MacOS会直接将你kill掉。

82fd9b23073c51ebd98856d97b110d47.png

有意思的是明明是你自己花钱买的计算机硬件、花钱买的操作系统,理论上这是个人财产,但是你花钱买来的操作系统竟然不受你控制(大神除外),反而禁止你干这干那,就好比你买来一头牛,结果这头牛不受控,自己想干啥干啥,如果真的买了这样一头牛相信你早就忍不了了,但是你花大价钱买来的计算机、智能手机根本不受你的掌控,大家竟然对此没什么感觉,认为这很正常,想想也是有够魔幻的。

扯远了,在早期的计算机上普通程序员(应用程序)可以彻底控制计算机,可谓独掌大权,实际上在现代计算机系统上你也可以在没有操作系统的支持下写程序,这就是所谓的Bare-Metal Programming,嵌入式同学对此应该不陌生。

2d3ef9cbdba2f45a8338b29325f14048.png

好啦,关于操作系统与程序运行这个话题就到这里,总之操作系统并不是计算机执行程序的一个必须组件,没有操作系统我们一样可以让程序运行起来。

d437adfeb550462b018cab072e7f26d2.gif

往期推荐

如果让你来设计网络

Docker:从入门到实战过程全记录

浅述 Docker 的容器编排

如何在 Kubernetes Pod 内进行网络抓包

3b838fe4fd72039a11309b8ae87e6c1e.gif

点分享

2b8da285cd4b8c6b5946284ca556cb96.gif

点收藏

0738b5f78eb1270b87a191ba0a3839e5.gif

点点赞

a4f43a8dc0b3e8de234fe5ec42ced567.gif

点在看

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值