第667章 灵魂的第一行代码!(2 / 3)
0 00010001` (STR R1, [R2] - 将PCB大小存入第一个任务的控制块)
站在他身后的孙立国,手里拿着一本厚厚的手写的“盘古之心指令集”,嘴里飞快地念着,为黄建功进行人工的“语法检查”。
“指令MOV R1, #256,机器码10110001 00000001 00000000,黄总工,你这里写的是#256,但指令集里定义,立即数寻址的高八位应该在后,你写反了!”
黄建功的手指一顿。
他立刻在屏幕上删掉了刚才的代码,重新敲了一遍。
`10110001 00000001 00000000`
“不对!”孙立国急得满头大汗,“是`10110001 00000000 00000001`!”
黄建功看着屏幕,又看了看孙立国手里的指令集,这才发现,因为三天三夜没睡,他的大脑已经出现了一丝混乱,把高低字节的顺序记反了。
他深吸一口气,删掉错误的代码,这一次,他放慢了速度,一个数字一个数字地敲击。
`10110001 00000000 00000001`
“正确!”孙立国长舒了一口气。
周围的专家们,看得心惊肉跳。
仅仅是一个最简单的赋值操作,就如此凶险。一个不留神,整个程序的逻辑就会谬以千里。
而黄建功要写的,是一个包含成千上万行这种指令的,无比复杂的调度核心!
这简直不是人能干的活!
时间一分一秒地过去。
黄建功的额头上,渗出了细密的汗珠。他的后背,早已被汗水浸透。
他正在编写“天枢”内核的第一个函数:`task_create()`。
这个函数的功能,是在内存中,按照PCB的规范,开辟一块空间,并对其进行初始化,相当于“创造”一个新任务。
他需要精确计算每一个字节的偏移量。
PCB的第一个字节,是任务ID。
第二个字节,是任务状态。
从第五个字节开始,是16个通用寄存器的备份空间,每个寄存器占4个字节,一共64字节。
……
他就像一个最精密的雕刻家,用0和1这把刻刀,在内存这块璞玉上,小心翼翼地雕琢着“灵魂”的模样。
一个小时。
两个小时。
五个小时。
当天色再次暗下来的时候,黄建功终于敲下了`task_create()`函数的最后一行代码。
那是一条返回指令。
`11100001 00101111 11111111` (RET)
他长长地吐出一口气,感觉整个身体都快要虚脱了。
仅仅是一个最基础的创建任务的函数,就耗费了他整整五个小时,编写了超过三百行纯粹的机器码。
“第一阶段,完成。”他声音沙哑地宣布。
实验室里,响起一阵压抑的、低低的欢呼。
没有人敢大声,生怕惊扰了这位正在“创世”的神。
短暂的休息后,黄建功没有停歇,立刻投入了第二个函数的编写。
`task_yield()`。
这个函数的功能,是“任务切换”。
它将是整个“天枢”内核中,最复杂,也是最核心的部分。
它需要将当前所有寄存器的值,一个不漏地,全部保存到当前任务的PCB中。
然后,它需要从“任务队列”里,找到下一个应该运行的任务。
最后,再将下一个任务PCB里保存的寄存器值,重新加载到CPU的每一个寄存器中。
这个过程,繁琐、凶险,不容许任何一点差错。
黄建功的表情,变得前所未有的凝重。
他再次深吸一口气,手指落在了键盘上。
这一次,他编写的不再是简单的内存操作指令。
`11100010 01000001 00000000` (PUSH {R0-R15, LR}&nb
↑返回顶部↑
温馨提示:亲爱的读者,为了避免丢失和转马,请勿依赖搜索访问,建议你收藏【188小说网】 www.188xs.com。我们将持续为您更新!
请勿开启浏览器阅读模式,可能将导致章节内容缺失及无法阅读下一章。