没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
操作系统课程设计
目 录
概述......................................................................................2
一.课设分析的具体内容.....................................................3
二.分析的具体目标.............................................................4
三.BOOOTSECT.S 源代码分析基础.............................5
1.磁盘参数..........................................................................................................5
2.BIOS 的 INT 13H 调用.....................................................................................6
3.根文件系统的命名方式及设备号的计算......................................................7
4.串传输指令.........................................................................................................8
四.各模块源代码的分析..................................................8
1.BOOTSECT 将自身从目前段位置 0X07C0 移到 0X9000 处...............................9
2.将 SETUP 模块读到 0X90200 开始处...............................................................10
3.获得磁盘驱动参数...........................................................................................11
4.显示’LOADING SYSTEM….’...............................................................................12
5.将系统模块加载到 0X10000 处.......................................................................13
6.检查要使用哪个根文件系统设备...................................................................13
7.保存设备号,并跳转到 0X9020:0000 处........................................................15
分析研究体会....................................................................18
自我评价............................................................................21
参考文献............................................................................22
第 1 页
操作系统课程设计
概述
Linux 作为一个优秀的操作系统,其原因之一应归属于开放
的内核源代码。说起内核源代码,我们不得不存着敬畏的心理。
它在 Linux 中的地位好像心脏在我们身体中的地位一样重要,它
是整个操作系统的灵魂。因此要更好的了解 Linux,分析他的源
代码是非常必要的。在这次课程设计中我选择分析的是 Linux
0.11 的 Boot.s 的引导块源代码分析。
首先我们粗略的看一下计算机内开机过程:通电后,CPU 完
成自检和初始化,设置寄存器内的初值,而后执行第一条指令。
该指令的地址是 CS*16+IP,即 0xFFFF0,该地址是 BIOS 的入口
地址。BIOS 对整个机器系统完成自检后,将有关系统配置的基
本信息记录在内存的 BIOS 数据区中,然后把引导盘的第一个扇
区读入内存的 0x7C00 处。转到该处,把控制权交给引导程序,
最后引导程序把操作系统读入内存中,并把控制权交给操作系统
内核。
我们再来看看引导启动程序目录 Boot。Boot 目录中含有三
个汇编语言文件,是内核源代码中最先被编译的程序。这 3 个程
序完成的主要功能是当计算机加电时引导内核启动,将内核代码
加载到内存中,并做一些进入 32 位保护运行方式前的系统初始
化工作。其中 bootsect.s 和 setup.s 程序需要使用 as86 软件来编译,
使用的是 as86 的汇编语言格式(与微软的类似),而 head.s 需
要用 GNU as 来编译,使用的是 AT&T 格式的汇编语言。我主要
第 2 页
操作系统课程设计
研究的是 Boot.s 的引导块源代码分析。所以对 setup.s 和 head.s
不做详细解释。Setup.s 程序主要是读取机器的硬件配置参数,
并把内核模块 System 移动到适当的内存位置。Head.s 程序被编
译连接到 System 的最前部分,主要进行硬件设备的探测设置和
内存管理页面的初始化设置工作。
Bootsect.s 代码是磁盘引导块程序,驻留在磁盘的第一个扇
区中(引导扇区,0 磁道(柱面),0 磁头,第 1 个扇区)。在
PC 机加电 ROM BIOS 自检后,引导扇区由 BIOS 加载到内存
0x7c00 处,然后将自己移到内存 0x9000 处。该程序的主要作用
是首先将 setup 模块从磁盘加载到内存,紧接着 bootsect 的后面
位置(0x9200),然后利用 BIOS 中断 0x13 取磁盘参数中当前
启动引导盘的参数,接着在屏幕上显示”Loading system….”字符
串,再者将 system 模块从磁盘上加载到内存 ox1000 开始地方。
随后确定根文件系统的设备号。若设备指定,则根据所保存的引
导盘的磁道扇区数判别出盘的类型和种类并保存起设备号于
root_dev(引导块的 0x508 地址处)。最后长跳转到 setup 程序开
始处(0x90200)执行 setup 程序。
一.课设分析的具体内容
由于 Linux 内核是一种单内核模式的系统。因此,内核中的
所有程序都有密切的联系,他们之间的依赖和调用关系非常密切。
所以我们先来看看源代码的目录结构,从目录结构中我们就可以
看到我所分析的源代码所处的位置了(图转第 2 页)。
第 3 页
操作系统课程设计
我 所 分 析 的 则 是 linux\boot 下 的 bootsect.s 汇 编 源 程 序 。
Bootsect.s 程序是磁盘引导块程序,编译后会驻留在磁盘的第一
个扇区。在 PC 加电 ROM BIOS 自检后,将被 BIOS 加载到内存
0x7c00 处进行执行。
图 1.1 Linux 源代码的目录结构
二.分析的具体目标
通过分析一个早期的 Linux 内核,加深对操作系统各个组成
模块具体实现机制的理解,同时也为今后从事底层的研究开发增
加一些实践经验。通过对 bootsect.s 的分析,进一步了解 Linux
的启动过程,明白计算机从开始加电后做了什么?进一步认识引
第 4 页
操作系统课程设计
导程序,通过 BIOS 读磁盘扇区的方法以及 BIOS 的中断处理。
同时也可以巩固汇编的一些知识和 80x86 的系统结构,熟悉源代
码的目录结构,了解文件从哪里调用,明白系统在加电后进入实
模式后内存的分布情况等。
三.Boootsect.s 源代码分析基础
1.磁盘参数
我 们 在 研 究 磁 盘 参 数 方 面 主 要 考 虑 这 三 部 分
CHS ( Cylinder/Head/Sector ) . 即 磁 头 数( Heads ) 、 柱面 数
(Cylinders)、扇区数(Sectors).其中:
磁头数(Heads) 表示磁盘总共有几个磁头,也就是有几面盘
片, 最大为 255 (用 8 个二进制位存储);
柱面数(Cylinders) 表示磁盘每一面盘片上有几条磁道, 最
大为 1023(用 10 个二进制位存储);
扇区数(Sectors) 表示每一条磁道上有几个扇区, 最大为 63
(用 6 个二进制位存储);
每个扇区一般是 512 个字节(理论上讲这不是必须的, 但好
象都取此值)。据此,磁盘最大容量为:
255 * 1023 * 63 * 512 / 1048576 = 8024 MB ( 1M =
1048576 Bytes )
在 CHS 寻址方式中, 磁头, 柱面, 扇区的取值范围分别为 0
到 Heads - 1,0 到 Cylinders - 1, 1 到 Sectors (注意是从 1
第 5 页
剩余21页未读,继续阅读
资源评论
wuht2010
- 粉丝: 1
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 什么是移动应用开发-关于移动应用开发的相关介绍
- 第二组汇报 PPT.pptx
- 什么是大数据开发-相关介绍-关于大数据开发的相关介绍
- 什么是软件测试-相关介绍-关于软件测试的相关介绍
- 前端开发-什么是前端开发-关于前端开发的一些相关介绍
- Sora AI-关于文生视频的使用场景说明
- suno AI文生视频的相关教程和介绍使用
- 什么是后端开发-关于后端开发的一些小介绍分享
- Jurassic Pack Vol. II Dinosaurs 侏罗纪包卷恐龙二号Unity游戏模型资源unitypackage
- Jurassic Pack Vol. III Dinosaurs 侏罗纪包卷恐龙三号Unity游戏模型资源unitypackag
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功