看操作系统神马的都弱爆了

               操作系统看起来那么神秘,那么难,很大一部分原因是因为我们没有去学习IA-32体系结构。这就像我们去看51单片机的操作代码,但是却完全不了解51单片机的结构一样,连单片机自身的工作原理都不知道,怎么看的懂程序呢?

             不过,似乎很少有书提醒我们应该去查IA-32硬件手册。在我看来,还是因为目前的操作系统教学其实对操作系统根本就不重视,只是让你大概了解一下,讲着玩玩的,没有人会指望你将来做什么跟操作系统有关的东西。

               intel有三本开发手册,第三本就是讲体系结构的,并且专门是用来供操作系统开发的。要看懂操作系统,必须要看看这个手册,所有底层代码遵循的规则,都可以在这里找到原因。

              在我看来,最难看懂的地方,往往是跟硬件关系密切的地方。而在一段跟硬件有关的代码中,你不光要知道这段代码的意思,还要知道硬件在干些什么。这是与纯软件代码不同的地方,纯软件代码自成逻辑,单看代码就够了,但是涉及硬件的时候,没有硬件手册,你将不知道为什么要这么写。而且,这点代码也不是它字面的意思,它真正的意思其实是硬件在干的事情。比如要显示什么东西到屏幕上,那么你将看到一堆写寄存器的操作,单看这些操作,你不知道它是在干什么,其实它只是在按硬件规定的方式操作显存。而你只有懂了这个“硬件规定”,你才能看懂这些对寄存器的操作。

              当我们要做一件事情的时候,尤其是底层代码的时候,我们要搞清楚哪些工作是硬件做的,哪些是我们要做的,老实说,这是一件很麻烦的事。比如处理中断的时候,CPU是否会自动清除中断标志位;比如写代码,我们是否需要特权级检查,或者CPU会自动进行检查;比如进程切换的时候,压栈的操作时CPU自动的,还是我们来写的,我们要区分。

             操作系统写作的一大复杂地方,在于现在的CPU提供了很多机制,来帮助我们写出强大的操作系统。比如能自动进行特权级检查,能自动压栈和弹出,比如能自动屏蔽中断,比如有分页机制,分段机制,但是有时候,反而正是这些东西,因为太多太复杂了,反而让我们觉得不方便。我相信,这些功能intel不在硬件上实现,我们也可以通过软件来实现,比如特权级机制,我们完全可以多写几个标志位进行检查就可以了,但是intel好心好意提供了一套硬件机制,这样就麻烦了,当写一个操作系统的时候,你会发现有一堆东西要学,你要先学它的硬件。

            在我看来,操作系统的复杂性,很大程度上归因于intel的硬件设计还是有些蹩脚,连个寄存器都有各个位数的,功能还各不一样,乱七八糟,扩展成32位后又要兼容16位的,结果段描述符乱七八糟,还整你妹实模式,现在的硬件结构完全可以满足一开机就进入保护模式的能力。万恶的兼容,才导致了硬件这么复杂,操作系统这么复杂。所以,现在的底层代码这么复杂,很大一部分要归因于硬件发展的遗祸。我们现在看的操作系统代码,不是纯粹的为目前最先进的机制写的,还有20年前就已经设计的蹩脚机制写的。所以,一部操作系统,简直就是一部计算机发展史。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值