一句话的回答就是:性能上是肯定有优势的,但系统的可扩展性很差,并且成本很高。
裸机跑服务,思路其实就是高度定制化的操作系统,只保留必要的功能,把不需要的东西都砍掉。这种设计在RTOS/嵌入式领域非常常见,很多RTOS/嵌入式都可以实现高度的定制化,确实可以提供非常高的性能。
然而这种系统的问题是成本太高,一个是定制操作系统本身,另一个是软件设计限制,尤其是后者。比如内存管理性能太差,开发出一套基于裸机的内存管理模块,那么像malloc/free这种最基础的API可能都要从头写。考虑到glibc的很多东西都是基于系统调用之上的,现在连操作系统都没有,那么glibc也要重新设计,这对于上层应用(比如题主的web服务)来说简直是灾难。
而且一旦有新的技术规范出现以后,这种系统上扩展新功能的成本过于高昂。比如现在有一套新的加密算法,对于一般的Linux服务器来说,从开源社区拿一个开发包编译一下就可以了,接口可能都是POSIX规范的。但高度定制化的系统里,POSIX接口可能是不完整甚至是没有的,那么就需要自己重写一套,这样的开发成本太高了。
现在软件开发领域,由于代码的复杂度太高,大多数软件都需要互相借鉴、依赖其他软件包的代码、库等等,很少有公司会从头造轮子,那样的话软件开发成本远远高于硬件成本。
一个高度定制化的web服务器,可能性能上最多高出1-2倍,但开发成本可能是10-20倍都不止,有这个钱,多买几台服务器就好了。而且后期升级困难,维护困难(操作系统的很多功能其实是方便用户调试、维护的,这些“多余”的功能确实影响性能,但非常有用)。
当然了,如果有钱,非常有钱的话,这种定制的系统是可以做到的,有一些特殊的领域,比如金融、航空航天、军工等,都可以找到这种类似的系统,只要不差钱。
高度定制化的,不仅仅有软件,还有硬件,比如高端交换机的交换芯片,就是高度定制化的,比特币的矿机,也是高度定制化的,芯片只有一个功能,只做一件事,性能非常高,通用性很差。只要有钱(比如挖矿),肯定有人造的出来。
所以,这不是一个技术问题,这是钱的问题。
和通常的os比,绝对会。
但你真要做下来就会发现,最终效果是:你自己实现了一个迷你的os kernel。既然如此,和你一开始从某个os(例如说*nix/bsd)出发,按需裁剪一个高度定制化的极简os又有多大区别呢?
所以,实际上如果有类似“独占硬件所有资源以实现性能最大化”的需求,如很多“硬件”(如F5、游戏机),或者裸服务器上跑的系统(如vmware esx),都是走的定制化kernel路线的。
Web或数据库服务器一定涉及到文件系统、内存管理、多线程/多进程、I/O调度、TCP/IP协议栈、网卡驱动、磁盘控制器驱动.....。这样你如果自底向上做一个服务器软件,最终实现的就必然包括一个符合《操作系统原理》教材描述的操作系统概念的底层框架,相当于自己实现了一个操作系统。
至于性能上有没有优势,就看你做的这一套东西和成熟的操作系统比有没有优势了。
答案是可以,而且也不罕见,但并没有更有优势。
如果没有os直接跑,那很多os来处理的杂活你就得自己来,比如文件系统的管理。比如tcp/ip协议栈的实现。
进程线程内存管理你也都得自己从头写。当然喽,都是自家人,好好相处可以不打架。但所有东西就都得你自己做了,也就不用指望第三方给你做开发了。因为我想你也接受不了第三方写的东西出一点点问题整个系统就崩溃,对吧?
而且硬件部分你也都得自己驱动,比如网卡。所以通用方案你也就别想了,硬件打包一起卖吧。
那有没有这样得产品呢?有呀,显卡,阵列卡,甚至路由器,交换机,凡是厂商自己做固件的,基本上都是呀。
为什么说没有优势呢,这些底层的东西每个产品你都得重新开发一遍,不累吗?咱还没说bug的问题对不对?所以直接拿个好用的不就得了?比如Linux。
你说的这个东西早就被广泛应用了,尤其是在互联网服务器领域和金融领域,每一家稍微大点的交易公司都有一套这个系统吧。
你说的这个东西,名字叫内核旁路, kernel bypass。
有一些特定的网卡,为了保证数据收发/读写的速度,数据不过内核, 不过CPU,从旁路直接进出user space(内存或外存)。如果你要系统操作这些数据,用的不是一般系统层的包,而是用Programmable packet processing. 直接pcap抓数据包操作。
如果你为了速度要你的服务器绕开kernel, 你的数据发送方法不是web/数据库,而是共享内存。你都不计开销的跑web/数据库了,绕开系统还不如优化下你的网页/数据库。
这是个错误的看法。
如果没有操作系统,你要怎么做哪些基础设施?
比如网络驱动文件管理驱动?比如多进程多线程并行?你不会认为自己服务器就一个进程线程?
这一堆东西都没有,你怎么方便去编程构建业务?
“该程序只提供web或者数据库之内的其中一项服务,”你难道认为web服务器或者数据库就一个进程线程?没有调度你怎么去做?你自己重写文件管理读写驱动?自己重写网络驱动?自己重写终端链接?
当然,如果是极其精简的程序,确实可以做到不用操作系统,比如很多嵌入式设备就没有操作系统,这是常识。但如果你的嵌入式系统想要访问网络想要即时存文件,你至少需要去适配网络驱动模块,而这些知识恐怕不是那些写java增删查改的人会的。
不会。一般来说会更慢。
会这么想,是因为你对操作系统有太多的误解。
你以为操作系统是到乡间扰民、不干正事的高官:
其实操作系统是一个随叫随到兢兢业业任劳任怨、苦活累活都归他干的打工仔:
别以为你随随便便就能造出这么一个站到台上能玩调度、俯下身去能玩好网卡硬盘、把各种缓存管的条理分明效率一流的全才。
你以为操作系统是个华丽的空壳子、劳民伤财只为排场:
那叫用户界面。
其实操作系统核心小的很,哪怕最新的Windows10/11以及Linux核心都非常非常的小,小而精简——你看到Linux kernel有几十M,那是因为里面放置了太多设备驱动,打个比方的话就是带了个专业技术团队。
实际上,去掉多余的驱动、去掉不常用功能后,Linux kernel甚至可以裁剪到不到2M大——甚至带上基本的、图形化的桌面都可以小至10M。
没错,那就是个最精简最高效却又无所不能的加工中心:
你以为操作系统像多管闲事却又志大才疏的无能领导,每个人做每件事它都要插个手、添添乱:
其实绝大多数时候,操作系统会完全让出硬件供各种程序使用,你不叫它它绝不出现,给你完全的自由;只有你主动叫他、或者时间片到了不得不出来调度时,它才会执行必不可少的几条指令,完了继续隐退,做一个彻彻底底的小透明,连一个时钟周期(不到1纳秒)都不会多占……
换句话说,这是一个只在关键时刻出现的长者;你的工作效率差,可赖不到他头上:
恰恰相反,正因为对操作系统的效率和能力有如此多的要求,设计一个优秀的操作系统才如此困难。
结果,你来了。你简单粗暴的开除了所有做实事的打工人,又清退了所有专家顾问——还以为从自己亲戚里随便抓几个人都比他们干的好……
嗯,折腾吧。祝你好运。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有