网站大量收购闲置独家精品文档,联系QQ:2885784924

简析linux内核的内核执行流程图.docx

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
简析 linux 核的执行流程 从 bootsect.s 到 main.c (核版本 0.11) Linux 启动的第一阶段(从开机到 main.c) 3 个任务: A、启动 BIOS ,准备实模式下的中断向量表和中断服务程序。 B、从启动盘加载操作系统程序到存。 C、为执行 32 的 main 函数做过渡准备。 存变化如下: ① 、0xFE000 到 0xFFFFF 是 BIOS 启动块, 其中上电后第一 条指令在 0xFFFF0。 ② 、而后 0x00000 到 0x003FF 总共 1KB 存放中断向量表, 而接下去的地址到 0x004FF 共 256B 存放 BIOS 数据,从 0x0E05B 开始的约 8KB 的存中存放中断服务程序。 ③ 、利用 BIOS 中断 0x19h 把硬盘的第一扇区bootsect.s 的 代码加载到存中,即 0x07c00 处,后转到该处执行。 ④ 、将 bootsect.s 的代码复制到 0x90000 处。 ⑤ 、利用中断 0x13h 将 setup.s 程序加载到存 0x90200 处。 ⑥ 、再将剩余的约 240 个扇区的容加载到0x10000~0x2EFFF 处。 ⑦ 、开始转到 setup.s 处执行,第一件事就利用 BIOS 提供的 中断服务程序从设备上获取核运行的所需系统数据并存在 0x90000 的地址处,这时将原来 bootsect.s 的代码覆盖得只剩 2Byte 的空间。 ⑧ 、关中断并将系统代码复制到 0x00000 处,将原来放在这 里的中断向量表与 BIOS 数据区覆盖掉,地址围是 0x00000~0x1EFFF。同时制作两表与两寄存器。 ⑨ 开地址线 A20,寻址空间达到 4GB,后对 8259 重新编程, 改变中断号。 ⑩ 、转到 head.s (大小是 25K+184B)执行,执行该程序完 后是这样的: 0x00000~0x04FFF:页目录与 4 个页表,每一项是 4KB,共 20KB; 0x05000~0x05400:共 1KB 的空间是软盘缓冲区; 0x05401~0x054b8:共 184B 没用; 0x054b9~0x05cb8:共 2KB 的空间存中断描述符表; 0x05cb9~0x064b8:共 2KB 的空间存全局描述符表; 之后就是 main 函数的代码了! 第二阶段、从 main.c 函数到系统准备完毕阶段。 第一步:创建进程 0,并让进程 0 具备在 32 位保护模式下载主机中 的运算能力。流程是: 复制根设备和硬盘参数表 (main.c 中的 102、 110、 111 行) 物理存规划格局 (main.c 的 112 行~126 行,其中有 rd_init 函数定义在 kernel/ramdisk.c 中,此函数用 于 虚拟盘初始化;而 mem_init 函数是用于存管理结构 初始化,定义在 mem/memory.c 中,该函数页面使用 虚拟盘设置与初始化 次数均设置成 100,然后再依据主存的 起始位置和终止位置将处于主存的所有页面的使 用次数全部清零,系统以后把使用次数为 0 的页面 视为空闲页面。) 存管理结构 mem_map 初始化 异常处理类中断服务程序挂接 (在main.c 的 127 行, trap()函数定 义 kernel/trap.c,目的是将各种中断与中断描述符表挂 接。) 初始化块设备与字符设备请求项结构 (在 main.c 的 128、 129 行, blk_dev_init() 定义在 kernel/blk_dev/ll_rw_blk.c, chr_dev_init()定义在 kernel/chr_dev/tty_io.c) 将串口与显示器外设的中断服务程序挂接 (在 main.c 的 130 行, tty_init()定义在 kernel/chr_dev/tty_io.c) 开启时间设置 (在 main.c 的 131 行, time_init()定义于 main.c 函 数 76 行 startup_time) 系统开始激活进程 0 (在 main.c 的 131 行, sched_init()定义在 kernel/ sched.c 函数中, 该函数实现进程相关事务设置 依据时钟中断设置, 系统调用服务程序挂接。 系 统调用函数是对用户程序的最基本支持,利用的是 进程相关事务初始化设置 系统调用软中断,详细见下面讲 的。) 时钟中断设置 系统调用服务程序挂接 初始化缓冲区管理结构 (在 main.c 中 133 行,

文档评论(0)

墨臻网络 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8076027046000022
认证主体苏州墨臻互联网科技有限公司
IP属地江苏
统一社会信用代码/组织机构代码
91320506MA26CPT988

1亿VIP精品文档

相关文档