简析linux内核的内核执行流程

简析linux内核的内核执行流程

ID:8261465

大小:1.84 MB

页数:16页

时间:2018-03-14

简析linux内核的内核执行流程_第1页
简析linux内核的内核执行流程_第2页
简析linux内核的内核执行流程_第3页
简析linux内核的内核执行流程_第4页
简析linux内核的内核执行流程_第5页
资源描述:

《简析linux内核的内核执行流程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、简析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开始的

2、约8KB的内存中存放中断服务程序。③ 、利用BIOS中断0x19h把硬盘的第一扇区bootsect.s的代码加载到内存中,即0x07c00处,后转到该处执行。④ 、将bootsect.s的代码复制到0x90000处。⑤ 、利用中断0x13h将setup.s程序加载到内存0x90200处。⑥ 、再将剩余的约240个扇区的内容加载到0x10000~0x2EFFF处。⑦ 、开始转到setup.s处执行,第一件事就利用BIOS提供的中断服务程序从设备上获取内核运行的所需系统数据并存在0x90000的地址处,这时将原来bootsect.s的

3、代码覆盖得只剩2Byte的空间。① 、关中断并将系统代码复制到0x00000处,将原来放在这里的中断向量表与BIOS数据区覆盖掉,地址范围是0x00000~0x1EFFF。同时制作两表与两寄存器。② 开地址线A20,寻址空间达到4GB,后对8259重新编程,改变中断号。③ 、转到head.s(大小是25K+184B)执行,执行该程序完后是这样的:0x00000~0x04FFF:页目录与4个页表,每一项是4KB,共20KB;0x05000~0x05400:共1KB的空间是软盘缓冲区;0x05401~0x054b8:共184B没用;0

4、x054b9~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函数是用于内存管理结构初始化,

5、定义在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,

6、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函数中,该函数实现进程相关事务设置依据时钟中断设置,系统调用服务程序挂接。系统调用函数是对用户程

7、序的最基本支持,利用的是进程相关事务初始化设置系统调用软中断,详细见下面讲的。)时钟中断设置系统调用服务程序挂接初始化缓冲区管理结构(在main.c中133行,buffer_init(buffer_memory_end)定义fs/buffer.c)初始化硬、软盘(main.c中134、135行,hd_init与floppy_init定义于kernel/blk_drv/hd.c和kernel/blk_drv/floppy.c)开中断(main.c中136行,sti())第二步:以进程0为母本创建进程1,使进程1不仅仅具备进程0所拥有

8、的能力,而且还能以文件的形式与外设进行数据交互。流程是:操作系统为进程0创建进程1做准备main.c中137行,move_to_user_mode()定义在include/asm/system.h,实现从内核态到用户态。进程0正式开始执行,而后执行

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。