陈怀临 。《 孙钟秀 。操作系统教程》注释(稿):第二章:处理器管理

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




(3个打分, 平均:5.00 / 5)

雁过留声

“陈怀临 。《 孙钟秀 。操作系统教程》注释(稿):第二章:处理器管理”有6个回复

  1. shuyong 于 2014-09-09 4:39 上午

    针对文档中的注释,补充一点interrup & exception的细微差异

    interrupt的返回地址是当前指令的下一条指令。是属于陷阱(trap)类型。想象一个蚂蚁在一条线上爬。突然发生一个中断,蚂蚁就掉到陷阱里。它继续往前爬,执行中断代码。执行完中断代码后,从陷阱的另外一端回到原来的路上,进行往前爬,执行原来的代码序列。从执行过程看,发生中断时,当前指令必须执行完成,然后再掉进中断代码里执行,然后再回到当前指令的下一条指令执行。一般系统调用都采用interrupt来实现。简单,不费脑子。

    exception的返回地址是当前指令。异常,往往意味着某种错误发生。这时候需要OS进行某种修正或保护。这里举两种典型的应用。

    一种是虚拟内存的应用。假如在线性内存里有X,Y,Z三个地址,我们要执行一条指令:
    Z = X + Y
    这3个地址中的虚拟内存只要有一个被切换出去,访问它是就会产生一个page fail异常,掉进OS里。OS中的page fail异常处理程序发现这个地址是合法地址,只是被切换出去了,就把相应的内存页面换回来。然后异常处理结束后,回到原来的指令。这样Z = X + Y这条指令就可以正常地执行了。而应用程序本身也不会意识到,刚才它被切换出去,OS给它做了补漏工作。它只知道,它申请的线性内存,一直都是可以使用的。

    另一种是模拟指令执行的应用。假如在新的CPU上实现了一条新的指令:
    (long long)Z = (long long)X + (long long)Y
    一个程序被优化而使用了这个指令。而老的CPU只有老的指令:
    (int)Z = (int)X + (int)Y
    如果这个被优化的程序想要运行在老的CPU上,这时候就需要OS来帮忙了。当执行到(long long)Z = (long long)X + (long long)Y这条指令时,会产生非法指令异常,掉进OS里。OS中的非法指令异常处理程序发现这个指令已经被某个闲的蛋疼的人写了一段用(int)Z = (int)X + (int)Y指令模拟的代码,就会调用这段代码,用多条指令算出结果。当异常处理程序返回时,因为这条指令所要结果已经产生,这条指令实际上等于已经被执行,因此需要调整返回地址,返回到下一条指令继续执行。是否要调整返回地址,是由OS来判断和执行的。

    这类应用的典型场景就是虚拟机。运行在虚拟机里的OS,以为它掌握了整个硬件平台。其实它只是活在sand box里。它所执行的每一个特权指令,所访问的每一个特权寄存器,都会产生异常,掉进下层的OS里。然后由下层的OS按照要求,模拟出一个结果糊弄上层OS。呵呵,也许我们就生活在MATRIX里。

  2. cracked 于 2014-09-10 12:51 上午

    首席好像加速了。

  3. hh 于 2014-09-10 9:36 下午

    现在教育行业创业很猛,首席这么热爱教书育人,不知道没有参与一下?

  4. 大忽悠 于 2014-09-11 1:00 上午

    不好意思.提一个不相干的问题.
    不知道首席对编译器是否有研究.是否也能象注这本书一样,写点干货(偶属于菜鸟级水平,因为没有做过这方面工作,纯粹兴趣爱好).或者 首席能否推荐一个象您这种风格的网站(不要正统的paper要心得)
    不才自以为对OS甚有心得,看了首席的批注,还是有收获。
    窃以为
    1 老孙看了首席的批注想必不爽
    2 没有太多实际经验的人 ,看首席的批注基本是在浪费时间。

  5. aaa 于 2014-09-16 1:33 下午

    是首席新注?这么有闲心?首席在这方面是专家,10几年前大学学过OS的,都应该能看懂,技术本身没啥神秘的,能当卖油翁的都可以做专家

  6. cracked 于 2014-09-26 12:46 上午

    我觉得收货蛮大的,真心想看接下来的几章。首席写给我们这些不太懂的。感谢