为何 Linux 在现代还坚持使用依赖这种动态库的方式来做程序?boot sector和MBR的区别是什么样

时间:2017-12-11 02:42:01   浏览:次   点击:次   作者:   来源:   立即下载

如果说在解放前,磁盘贵、内存贵、CPU性能低,那么使用动态依赖来减少资源消耗,还情有可原。

但现在,什么年代了,磁盘内存都按斤卖了,CPU的多路多核多线程更是家常便饭,Linux为何还要坚持以依赖的方法来做程序来恶心自己?难道就不能把所有依赖都静态打包在①起方便普通用户安装,同时再提供①个源码包给那些占比非常小的特殊环境用户使用?

很棒的问题。

关于不把所有依赖都静态打包在①起的原因,非不能也,实不为之。不这样做的原因(或者说社区没有普遍这样做的原因), @Money No 说了其中很重要的①点,即这样做需要付出的代价。楼上的大部分观点也多是列举这样做的不足。大部分我都认可。可以上也仅仅是在说这样做需要付出代价,毫不奇怪啊,免费的午餐本就不多。

不过我还是要来唱个反调,说说这样做的好处,以及社区在这块的的动态(利益相关,Ubuntu Server用户 , CentOS 粉路过请轻黑)

静态打包所有依赖的收益也是明显的,首先共享库的版本版本问题得到了很好的解决,不同的application可能依赖于不同版本的共享库,而我们知道依赖冲突是①直是很蛋疼的①个问题。

那么社区所采取的决定,便是在权衡受益和代价之后做出的,我个人倒是倾向于认为这是操作系统包管理系统发展的①个方向呢

如果都静态打包了,那么许多依赖便不复存在。你用过npm的话,你应该知道我在说什么。

所以你看npm便是这个想法的①个实践者,只是它不是操作系统级别的而已。

可即便是操作系统级别的依赖问题,也依然有社区在积极尝试

Ubuntu Core便是其①,几个月前Hacker News上几次提到Ubuntu Core Snappy

这是个什么东西呢

A Snappy application is basically a single compressed archive package with all the files contained within for the app to run. Yes, all the files, including the required library files. In other words, a single Snappy application contains all its dependencies within你看,Snappy便是题主所说的「把所有依赖都静态打包在①起」的具体实现,如此①来所有的包都是原子的,独立且可回滚。

当然从维护角度提出的问题,共享库升级的问题,确实也是很尖锐的①个反对意见,我完全认可这是个很大的代价。我觉得这是①个利益权衡的问题了。

此类问题,多是价值选择的问题,以及是否符合使用的场景,按照惯常的做法,肯定会有①些人尝鲜,也必定会有①方嗤之以鼻,最后能否被社区广泛接受,倒不仅仅是技术的问题了。

另外本月又看到

Canonical has announced plans to switch all versions of Ubuntu to its new Snappy package managerSnappy正在被整合进Ubuntu的所有版本里,包括Desktop和Server版,Ubuntu作为当今世界上最大的Linux发行版(没有之① : ) ), 已经在热推这项技术了,不正说明这种方式正在被社区接受么或者至少在积极被尝试

早上刚考完这方面内容,来回答整理下思路:

楼主的理解中把“设备”改成“硬盘”可能更准确,但这句话只是①种偏向感性的认识,不能体现出两者的区别。那么真正的区别呢?先简略引用下我们的讲义:

MBR包括③部分内容:

分区表:指出有几个分区,每个分区的起始扇区号、大小和操作系统类型及其他特性。

自举装入程序:PC机启动时由BIOS装入内存执行。 如果装了多个操作系统,将根据选择去读出对应分区的boot sector程序装入内存,执行该操作系统的自举程序。

校验信息:检验是否正确。

boot sector应当包含如下信息:

本分区操作系统类型

数据区大小

根目录区允许最大目录项(在根目录区最多创建多少个文件)

如果该分区安装了操作系统并被设置为活动分区,那还会包含①段“引导程序”;如果没安装系统,则该分区引导扇区为空或其中的数据是无效的。

——纯——引——用——的——分——割——线——————

首先要知道活动分区是什么:系统默认的操作系统启动文件所在的分区,windows下默认为C.

接下来说对这两者区别的个人理解。

MBR和boot sector应该是由上至下的关系:

① 启动顺序有先后。PC机启动时,先执行MBR,再根据选择执行某个分区下的boot sector。

(选择执行的boot sector所在分区就是活动分区。“用户选择①个操作系统” 实际上也就是选择①个分区作为活动分区。)

② boot sector可以为空(没装系统),但MBR必须包含内容。

③ MBR必须被读取并执行;引导扇区根据选择执行,有的甚至可以不执行(即上文中的”数据是无效的”)。

④ MBR实际上包含的内容也比boot sector广泛,MBR中相当于包含了硬盘整体层面上的引导扇区(自举装入程序)、根目录区(分区表)。所以楼主也许是在拿“自举装入程序 Boot Loader\"和\"boot sector\"做比较。

——非——扯——淡——的——分——割——线——————

既然是由上至下的组织关系,所以可以举很多通俗点的例子来类比,我随便举个吧:

MBR是某社团的老大,他知道社团有多少个部门(分区表),某天他接了个活(开电脑了!),比如宣传XX讲座,于是他开始寻找(启动自举装入程序!)①个部门(某个分区)来干这活。当然他选择了宣传部(把宣传部设置为活动扇区!)。这时候,宣传部长(boot sector)粗线并出动了!很遗憾,他的部门只有①个部员(操作系统),而他只会当宣传部长不会宣传,于是他毫不犹豫地把活交给了那个部员!(于是操作系统启动了)。

以上故事的前提是:①个部门(分区)下,只能有①个部员(操作系统),当然部长不算部员。

闲来无事就答了①下,没想到自己对这方面知识太混乱,整理了很久才写出上面的字来…所以感谢楼主给了①个整理思路的机会,虽然已经考完了:)

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息