成立一个网站软件需要多少钱,全自动网站制作源码,免费漂亮ppt模板下载,中国五大网络运营商作者 | 陆小风来源 | 码农的荒岛求生现在的程序员对操作系统已经习以为常了#xff0c;但是你有没有想过#xff0c;如果没有操作系统的话我们可以让程序运行起来吗#xff1f;先说答案#xff0c;当然是可以的#xff0c;而且必须是可以的。你可以从这个角度来思考#… 作者 | 陆小风来源 | 码农的荒岛求生现在的程序员对操作系统已经习以为常了但是你有没有想过如果没有操作系统的话我们可以让程序运行起来吗先说答案当然是可以的而且必须是可以的。你可以从这个角度来思考操作系统本身就是一个程序这个程序的运行没有依赖任何其它“操作系统”注意这不是套娃。实际上在计算机历史早期或者说上古时期计算机上根本就没有什么操作系统之说这一时期的程序的确是在没有操作系统的情况下编写和运行的。要想写个能直接在计算机上运行的程序可不简单想一想这种不依赖操作系统系统的程序该怎样运行起来启动是个问题我们面临的第一个问题就是此时计算机上没有任何程序你该怎样让计算机启动起来呢换句话说加电后CPU该干啥啊哈没想到吧第一个问题就不好解决要想让计算机运行你的程序至少要把计算机启动起来吧。所谓的计算机启动起来无非就是让CPU加电后开始执行一段初始化代码为你真正的程序运行铺路这一大段代码就是所谓的内核kernel实际上你可以让计算机加电后执行任何代码也就是实现你自己的内核当然你也可以没有这样的内核直接运行你的程序。但这依然会有问题。运行时问题第一个要面临的是内存问题你的程序要被加载到内存的哪个位置呢显然这就是涉及到内存管理问题。第二个问题是你没有办法充分利用计算机。想一想在这种情况下你只有启动的时候才可以开始执行一个全新的程序想执行第二个程序就需要关机在存储设备中刷入新的程序然后再开机这是不是让人抓狂。这还不算完如果你的程序有bug那么不好意思你可能需要重启计算机了你能想象程序出点问题就要重启计算机吗想一边运行文本编辑程序一边运行音乐程序门都没有要想实现自己写个多任务(Multitask)管理系统吧你至少要把运行的程序管理起来吧想一想是不是就必须用到进程这样的抽象啦还觉得这些概念没有用吗就算你有多任务系统如果一个程序有问题把另一个程序的内存刷掉了这是不是就一石二鸟了一个bug导致两个程序崩溃你是不是得有进程隔离机制此外如果你的程序需要使用I/O设备那就更有酸爽啦没有驱动你怎样控制这些设备、怎样使用鼠标键盘显示器你的程序是不是要链接一大堆驱动想想是不是就已经头痛了。而且你还要高效的利用计算机资源当搞定这一切后你会发现自己实际上已经写出了一个操作系统。还觉得操作系统没有用吗操作系统把这些脏活累活统统揽下程序员只需要专注写bug就可以了。说了这么多缺点但没有操作系统的还是有一个有趣的优点的那就是你可以独掌大权。程序员也是独裁者说来有趣尽管现在你可以花上几千块钱买一台计算机但是你程序员几乎没有办法绕开操作系统随意读写你的内存、让CPU执行任何指令因为你的Windows/Linux/MacOS会直接将你kill掉。有意思的是明明是你自己花钱买的计算机硬件、花钱买的操作系统理论上这是个人财产但是你花钱买来的操作系统竟然不受你控制(大神除外)反而禁止你干这干那就好比你买来一头牛结果这头牛不受控自己想干啥干啥如果真的买了这样一头牛相信你早就忍不了了但是你花大价钱买来的计算机、智能手机根本不受你的掌控大家竟然对此没什么感觉认为这很正常想想也是有够魔幻的。扯远了在早期的计算机上普通程序员(应用程序)可以彻底控制计算机可谓独掌大权实际上在现代计算机系统上你也可以在没有操作系统的支持下写程序这就是所谓的Bare-Metal Programming嵌入式同学对此应该不陌生。好啦关于操作系统与程序运行这个话题就到这里总之操作系统并不是计算机执行程序的一个必须组件没有操作系统我们一样可以让程序运行起来。往期推荐如果让你来设计网络Docker从入门到实战过程全记录浅述 Docker 的容器编排如何在 Kubernetes Pod 内进行网络抓包点分享点收藏点点赞点在看