字体
关灯
   存书签 书架管理 返回目录
    “一个睡着了的君王,要如何把权力抢回来?”
    黄建功提出的这个问题,像一块巨石,沉甸甸地压在每个人的心头。
    刚刚因为“抢占式”这个新概念而燃起的希望火焰,瞬间又被这盆冷酷的现实冰水,浇得摇摇欲坠。
    是啊。
    这才是问题的核心。
    在单核CPU的简单世界里,在任何一个时刻,都只有一个程序,是真正“活”着的,是真正占有着CPU的。
    当任务A在运行时,它就是此刻唯一的“王”。
    “天枢”内核,无论被设计得多么强大,在那个瞬间,它也和任务B、任务C一样,只是一段被存放在内存里的,冰冷的,没有生命的二进制数据。
    它本身,没有能力去干涉正在运行的任务A。
    这似乎是一个无解的死循环。
    想要“抢占”,内核必须是“活”的。
    但想要内核“活”过来,正在运行的任务A,又必须先“死”掉(放弃CPU)。
    “难道……要加一个CPU?”一个年轻的研究员异想天开地说道,“一个CPU专门跑任务,另一个CPU专门跑内核,用来监视第一个CPU?”
    这个想法立刻被否决了。
    “不行!”周老摇了摇头,“‘盘古之心’是我们倾尽所有才造出来的,再造一个,短期内绝无可能。而且,双核系统的复杂性,比我们现在遇到的问题,要高出好几个数量级!”
    实验室再次陷入了沉默。
    所有人都绞尽脑汁,试图从软件层面,找到一条可以“让睡着的君王自己醒来”的路径。
    “有没有可能,在编译环节做手脚?”孙立国提出一个想法,“我们用‘鲁班神斧’编译所有应用程序时,强制在每几行代码后面,都自动插入一条`system_yield()`调用?这样,就算程序自己写了死循环,也会被我们强制插入的代码给打断。”
    这个思路很巧妙,立刻引起了大家的讨论。
    “这……好像可行!”
    “这样一来,所有程序,都变得‘可控’了!”
    但钱学敏很快就指出了其中的问题。
    “这个方法,治标不治本。”她的声音很冷静,“第一,它会极大地降低程序的运行效率。本来一条简单的加法,可能会被我们强行插入的几十条内核调用指令拖慢上百倍。”
    “第二,也是最致命的。如果有人绕过了我们的‘鲁班神斧’,直接用机器码写了一个恶性程序

关闭+畅/阅读=模式,看最新完整内容。本章未完,请点击下一页继续阅读》》
上一章 目录 下一页