第58章 野猪泛滥,和大佬们一起进山打猎 首页

字体:      护眼 关灯

上一页 目录 下一页

第58章 野猪泛滥,和大佬们一起进山打猎(2/9)

状态,内核在分配和回收时只操作这些段表,不直接碰物理地址。

分配空间时若找到空闲段就标记为已占用,回收空间时则合并相邻的空闲块。

他把这个逻辑写成一段大约三十行的程序,一边写一边在脑子里逐行推演边界情况。

“分配段大小:

寻空闲段其中段长>=大小

若找着:

标该段已占用

返段址

否则:

返空

回”

写完之后他把这一段和引导程序衔接在一起,确认没有语法冲突,然后继续往下写进程管理模块。

进程管理的核心是时间片轮转。

每一道运行中的程序被看作一个进程,内核记录它的状态、寄存器值和程序计数器位置,每个进程获得一个固定长度的时间片,时间片用完之后内核自动切换上下文保存当前进程状态、恢复下一个进程的状态、把中央处理器交给它。

他为此设计了一个进程控制块的结构,包含进程标识、运行状态、寄存器备份、优先级和时间片计数器,并配有相应的调度机制让多个程序像轮流使用机器一样交替运行。

“若时间片满:

存当前

恢复下一进程

转继续

止”

他写到设备驱动部分的时候,天已经黑透了。

键盘的输入中断、显示器的输出缓冲、磁盘的读写控制,每一块都需要单独的接口定义和状态机逻辑。

他没有把所有的驱动一次性写完,而是先搭了一个基础的设备抽象层,把每种设备的操作抽象成统一的“读”“写”“控制”三个入口,具体的实现留到后续填充。

这样将来接入任何新设备都不会影响到上层应用程序的执行。

第一版完整的系统内核手稿写完的时候,时钟已经指向下午五点。

他把手稿从头到尾通读了一遍,修改了几处边界条件处理不当的地方,又补了一段异常处理逻辑,确保程序在遇到未定义指令或者内存越界时不会直接死机。

“异常:

停当前

记错误码于日志

转调度”

林北没有立刻把这些代码全部录入机器,而是下个礼拜一上班的时候,跑一趟超算中心,打算使用超级计算机上的仿真环境,把整个内核的架构模型输入进去跑一遍。

确认仿真结果确认逻辑无死锁、内存无泄漏、时间片切换没有跨周期丢失之后,这套系统才能证明没有问题。

至于眼前的这台计算机,事实上,连一个壳

本章还未完,请点击下一页继续阅读

上一页 目录 下一页