深入分析FreeDos -- Kernel初始化
内容目录
KERNAL.asm跳转到Main.c中的main函数,下面代码可读性就很强了,跟踪代码的执行流程应该不是难事。
我想说的是,kernel定义了很多全局变量,掌握了这些变量的用处,理解kernel基本上就没什么障碍了。
OK,下面主要以变量使用为切入点分析kernel,
几个关键的变量:
Config: 配置KERNEL初始化需要的空间及默认加载的command文件
|
|
|
|
下面是这几个config函数执行期间的输出,注意,我的软盘里没有放FDCONFIG, CONFIG.SYS文件。
KERNEL初始化完毕后,KERNEL需要的内存指针放在BSS段,具体分配的内容放在INIT段,大致被划分如下图,
关于Kernel需要的stack,这里有个细节: 在执行main函数之前,会将BSSEND段中的最后256个字节作为临时statck,这样C代码中函数调用需要的数据先放在这里。 在PostConfig()函数中,根据Config.cfgStacks, Config.cfgStackSize会专门为KERNEL分配更大的栈空间。
内核所需空间分配完毕后,可用内存起始地址为:0x1382:0x400 = 0x13C20, 所以lpbase = 0x13C20, first_mcb = 0x13C2
此时KERNEL已初始化完毕,下面就是创建执行第一个任务,默认的第一个任务为COMMAND.COM,详见上面Config定义。
OK,下节就分析任务的加载与执行。
Author grabbyte
LastMod 2023-02-04