linux内核完全注释v3.0——第6章

6.1 总体功能

在这里插入图片描述

在这里插入图片描述

  • BIOS执行某些系统的检测,并在物理地址0处开始初始化中断向量
  • BIOS启动设备的第一个扇区将bootsect.s读入内存绝对地址0x7C00处,并跳转到这个地方
  • bootsect.s程序开始执行,并将自己移动到0x90000位置处,并把setup.s代码读入到内存0x90200中,同时把system模块被读入到从内存地址0x10000开始处
  • setup.s函数执行,将system模块移动到物理内存起始位置处
  • head.s加载IDT、GDT以及LDT,最终调用init/main.c中的main()程序
  • 内核代码运行起来,还需要一个基本的文件系统

6.2 bootsect.s程序

6.2.1 功能描述

  • 将自己移动到内存绝对地址0x90000开始处并继续执行
  • 把从磁盘第2个扇区开始的4个扇区的setup模块加载到内存
  • 将system模块加载到内存0x10000开始的地方

6.2.2 代码注释

6.2.3 其他信息

6.2.3.1 Linux0.11硬盘设备号

在这里插入图片描述

6.2.3.2 从硬盘启动系统
  • 系统上电后,可启动硬盘的第1个扇区会被BIOS加载到内核0x7c00处并开始执行
  • 该程序会首先把自己向下移动到内存0x600处
  • 然后根据MBR中分区表信息所知名活动分区中的第1个扇区加载到内存0x7c00处,然后开始执行

6.3 setup.s程序

6.3.1 功能描述

  • 利用ROM BIOS中断读取机器系统数据,并将这些数据保存到0x90000开始的位置
  • setup程序将system模块从0x10000-0x8ffff整块向下移动到内存绝对地址0x00000处
  • 加载idtr和gdtr,开启A20地址线,重新设置两个中断控制芯片8259A,将硬件中断号重新设置为0x20 - 0x2f
  • 设置CPU的控制期存器CR0,从而进入32位保护模式运行
  • 跳转到system模块的head.s程序运行

6.3.2 代码注释

6.3.3 其他信息
6.3.3.1 当前内存映像

在这里插入图片描述

6.3.3.2 BIOS视频终端0x10
6.3.3.3 硬盘基本参数表(“INT 0x41”)
6.3.3.4 A20地址线问题
6.3.3.5 8259A终端控制器的编程方法

在这里插入图片描述

  1. IRR外接外设的中断信号线;

  2. IMR来控制IRR上的哪根中断线被屏蔽,也就是不送入到PR中

  3. 当有多个中断送去到PR中,那么PR通过解析向CPU发送一个具有最高优先级INT信号

  4. CPU则会在执行完当前的一条指令之后向8259A发送一个INTA来相应中断信号

  5. 8359A在收到这个相应信号之后就会把所选出的最高优先级中断请求保存到ISR中,与此同时,IRR中的对应比特位被复位

  6. CPU会想8259A发出第2个INTA脉冲信号,该信号用于通知8259A送出中断号

  7. 最后就是ISR中的位如何清除的问题

    • 自动结束中断的8259A会在发出第2个INTA脉冲信号后,自动清除ISR
    • 非自动结束中断的8259A需要CPU向其发送一个结束中断的命令以复位ISR中的比特位

6.4 head.s程序

6.4.1 功能描述

  1. 采用的是AT&T的汇编语言格式,因此赋值方向是从左到右
  2. 功能是加载各个数据段寄存器,重新设置中断描述符表idt,共256项,并使各个表项均指向一个只报错误的哑中断子程序ignore_int
  3. 重新设置全局段描述符表gdt,并将gdt表放在内存内核代码比较合理的地方
  4. 检测A20地址线是否真的开启,未开启则进入死循环
  5. 测试PC机是否含有数学协处理器芯片,并在CR0中设置相应的标志位
  6. 设置管理内存的分页处理机制,将页目录表放在绝对物理地址0开始处
  7. 最后,head.s程序利用返回指令将预先放置在堆栈中的/init/main.c程序的入口地址弹出,去运行main()程序

6.4.2 代码注释

6.4.3 其他信息

6.4.3.1 程序执行结束后的内存映像

在这里插入图片描述

6.4.3.2 Intel 32位保护运行机制
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内核源代码为基础,介绍了完整的linux内核实现原理 ·选择早期linux内核进行介绍,排除了目前内核中复杂而庞大的实现细节 ·整个内核代码仅有14000行 ·提供可运行相关内核的完整实验系统 本书对早期的linux操作系统内核(v0.11)全部源代码文件进行了详细的注释和说明,旨在让读者能够在短时间内对linux的工作机理获得全面而深刻的理解,为进一步学习和研究linux系统打下坚实的基础。书中首先介绍了linux系统的发展历史,着重说明了各个内核版本之间的重要区别,给出了选择0.11版作为研究对象的原因;然后依据内核源代码的组织结构对所有代码进行了详细注释。在注释的同时,还介绍了读者应该了解的相关知识,并给出了相关的硬件信息。本书还介绍了内核源代码的组织结构及相互关系。 本书适合作为计算机专业学生学习操作系统课程的实践教材和参考书,也适合linux操作系统爱好者自学,还可供具有一定基础的技术人员作为嵌入式开发应用的参考书。 *************************************************************** 请注意: 下载完,评论的同时,请点击评论框上方的五角星(共5个五角星),这样你的被扣的积分就可以返还了。 如果只评论,不点击小五角星,积分不会返还。 一定要先下载完,再评论。如果先评论后下载,或者在下载的过程中评论,积分同样不会返还。 *************************************************************** 更多linux、ARM和C语言资源请参考: http://blog.csdn.net/arkofnoach/archive/2010/10/23/5960560.aspx

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值