版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统的启动引导操作系统的启动引导 操作系统初探操作系统初探 l计算机硬件结构 l计算机系统结构 l什么是操作系统 计算机硬件结构计算机硬件结构 计算机硬件结构计算机硬件结构 l计算机是如何在上屏幕上输出“hello!”的? 计算机系统结构计算机系统结构 l操作系统是计算机硬件和应用之间的一层软件 什么是操作系统什么是操作系统 l是计算机硬件和应用之间的一层软件 p方便我们使用硬件,如使用显存 p高效的使用硬件,如开多个终端(窗口) l管理什么 Linux 0.11Linux 0.11启动代码分析启动代码分析 l计算机是如何工作的 l引导扇区代码:Bootsect.s lSetup模块分析
2、lSystem模块分析 计算机是如何工作的计算机是如何工作的 l从白纸到图灵机从白纸到图灵机 计算机是如何工作的计算机是如何工作的 l从图灵机到通用图灵机从图灵机到通用图灵机 计算机是如何工作的计算机是如何工作的 l从通用图灵机到计算机从通用图灵机到计算机 p冯渃依曼在1946年提出存储程序思想 p存储程序的主要思想:将程序和数据存放到计算机内 部的存储器中,计算机在程序的控制下一步一步进行 处理 p计算机由五大部件组成:输入设备、输出设备、存储 器、运算器、控制器 计算机是如何工作的计算机是如何工作的 l打开电源,计算机执行的第一条指令打开电源,计算机执行的第一条指令 p计算模型我们要关注指
3、针IP及其指向的内容 计算机刚打开电源时,IP=?是由硬件设计者决定! lx86 PCx86 PC px86 PC刚开机时CPU处于实模式(cs:ip的寻址模式) p开机时,CS=0 xFFFF; IP=0 x0000 寻址0 x?(为ROM BIOSROM BIOS映射区映射区) p检查RAM,键盘,显示器,软硬磁盘 p将磁盘0磁道0扇区读入cs=0 x07c0, ip=0 x0000处,寻址0 x? 计算机是如何工作的计算机是如何工作的 l0 x7c000 x7c00处存放的代码处存放的代码 p是从磁盘引导扇区读入的那512个字节 p引导扇区就是启动设备的第一个扇区 p启动设备信息被设置在
4、CMOS中 CMOS是BIOS吗? p因此,硬盘的第一个扇区上存放着开机后执行的第一 段我们可以控制的程序 CMOSCMOS: 互补金属氧化物半导 体(64B-128B),是电脑主板 上用来保存计算机基本启动 信息。CMOS RAM本身只是一 块存储器,只有数据保存功 能。 对BIOSBIOS中各项参数的设定要 通过专门的程序。因此BIOS 设置有时也被叫做CMOS设置。 引导扇区代码:引导扇区代码:Bootsect.sBootsect.s .globl begtext,begdata,begbss,endtext,enddata,endbss .text /文本段 begtext: .dat
5、a /数据段 begdata: .bss /未初始化数据段 begbss: entry start /关键字entry告诉链接器“程序入口” start: mov ax, #BOOTSEG mov ds, ax mov ax, #INITSEG mov es, ax mov cx, #256 sub si, si sub di,di rep movw jmpi go, INITSEG .text等是伪操作符,告诉编译器产生文 本段,.text用于标识文本段的开始位置。 SETUPLEN = 4 BOOTSEG = 0 x07c0 INITSEG = 0 x9000 SETUPSEG = 0 x
6、9020 SYSSEG = 0 x1000 ENDSEG = SYSSEG + SYSSIZE ROOT_DEV = 0X306 ds=0 x07c0es=0 x9000cx计数寄存器计数256W表示移动的是字 移动多 少字节 呢? si=0, di=0 这就是0 x7c00处存放的语句 ds:si为0 x7c00,ds为数据段寄存器,si为源变址寄 存器,可用来存放相对于DS段之源变址指针 es:di为0 x90000,es为附加段寄存器,di为目地变址 寄存器,可用来存放相对于 ES 段之目的变址指针 段间跳转:cs=INITISE=0 x9000, ip=go 引导扇区代码:引导扇区代码
7、:Bootsect.sBootsect.s lBootsect.s首先将自身复制到地址0 x90200中 ,并跳转到复制后的地址中执行: 引导扇区代码:引导扇区代码:Bootsect.sBootsect.s l jmpi go, INITSEG之后 go: mov ax,cs mov ds,ax mov es,ax mov ss,ax mov sp,#0 xff00 load_setup: /载入setup模块 mov dx,#0 x0000 mov cx,#0 x0002 mov bx,#0 x0200 mov ax,#0 x0200+SETUPLEN int 0 x13 /BIOS中断 j
8、nc ok_load_setup mov dx,#0 x0000 mov ax,#0 x0000 int 0 x13 j load_setup /重读 cs=0 x9000 ds, es, ss=0 x9000 sp=0 xFF00 栈空间为? 0 x90000 - 0 x9FF00 INT 0 x13,AH=02:BIOS读磁盘扇区的中断: dh=磁头号,dl=驱动器号,驱动器0,磁头0 ch=柱面号,cl=开始扇区,磁道0,扇区2 es:bx=读出数据的缓冲区地址(es:bx为 0 x90200) al=要读的扇区数(SETUPLEN=4) 如果成功,则跳转到 ok_load_setup
9、跳转到load_setup,重 读 否则,复位磁盘 引导扇区代码:引导扇区代码:Bootsect.sBootsect.s l执行jmpi go,INITSEG后就由开始的 Bootsect.s跳转到复制后的Bootsect.s中的标 号go处继续执行;然后Bootsect.s把Setup.s 从磁盘中读取到内存位置0 x90200处,如下图所 示: 引导扇区代码:引导扇区代码:Bootsect.s Bootsect.s Ok_load_setup: /载入setup模块 mov dl,#0 x00 mov ax,#0 x0800 int 0 x13 mov ch,#0 x00 mov sect
10、ors,cx mov ah,#0 x03 xor bh,bh int 0 x10 /读光标 mov cx,#24 mov bx,#0 x0007 mov bp,#msg1 mov ax,#1301 int 0 x10 /显示字符 mov ax,#SYSSEG /SYSSEG=0 x1000 mov es,ax call read_it /读入system模块 jmpi 0,SETUPSEG bootsect.s中的数据/在文件末尾 sectors: .word 0 /磁道扇区数 msg1:.byte 13,10/换行+回车 .ascii “Loading system.” .byte 13,1
11、0,13,10 /2对换行+回车 获得磁盘参数,dl为磁盘驱动器号获取光标位置和形状,bh为页号 cx=24表示输出24个字符, bl=7为显示属 性 写字符串,al=1表示字符串只包含 字符码,显示之后更新光标位置 es:bp为字符串的段:偏移地址, bp=msg1,es=SSSEG=0 x1000 ip=0,cs=SETUPSEG=0 x9020,cs:ip为 0 x90200,跳转到0 x90200地址处的第一 条指令继续执行,也就是进入到了 Setup.s中 引导扇区代码:引导扇区代码:Bootsect.sBootsect.s l加载完Setup.s后在屏幕上打印Loading sys
12、tem . l接着调用read_it把SYSTEM,也就是LINUX0.11 的内核读取到内存位置0 x10000处 引导扇区代码:引导扇区代码:Bootsect.sBootsect.s l为什么读入system模块还需要定义一个函数? read_it: mov ax,es cmp ax,#ENDSEG jb ok1_read ret ok1_read: mov ax,sectors sub ax,sread /sread是当前磁道已读扇区数,ax未读扇区 数 call read_track /读磁道. psystem模块可能很大,要跨越磁道! pENDSEG=SYSSEG+SYSSIZE p
13、SYSSIZE=0 x8000 /该变量可根据Image大小设定(编 译操作系统时) 引导扇区代码:引导扇区代码:Bootsect.sBootsect.s l引导扇区的末尾/BIOS用以识别引导扇区 ljmpi 0, SETUPSEG跳转至setup执行 .org 510 .word 0 xAA55 /扇区的最后两个字 节 lBootSect小结:采用分段读入的方式将OS从磁 盘载入到内存中 p将自身复制到地址0 x90200处 p读入setup p在屏幕上打印启动Logo p读入system SetupSetup模块分析模块分析 lSetup.s将完成OS启动前的设置 start: mov
14、ax,#INITSEG mov ds,ax mov ah,#0 x03 xor bh,bh int 0 x10 mov 0,dx mov ah,#0 x88 int 0 x15 mov 2,ax . cli /不允许中断 mov ax,#0 x0000 cld do_move: mov es,ax add ax,#0 x1000 cmp ax,#0 x9000 jz end_move mov ds,ax sub di,di sub si,si mov cx,#0 x8000 rep movsw jmp do_move INITSEG = 0 x9000 ds=0 x900 0 取光标位置信息放
15、在dx 这是间址寻址,当前数据 段ds=0 x9000,这条指令 将放在dx中的光标位置信 息存放在0 x90004+0的 位置,即0 x90000 获取物理内存大小,返回值放入AX中 同理,这条指令将放在ax 中的物理内存大小信息存 放在0 x9000 Image tools/system: boot/head.o init/main.o $(DRIVERS) $(LD) boot/head.o init/main.o $(DRIVERS) -o tools/system Image为输入文件 为软驱A Makefile SystemSystem模块分析模块分析 lsetup是进入保护模式,
16、head是进入之后的初始化 startup_32: movl $0 x10,%eax mov %ax,%ds mov %ax,%es mov %ax,%fs mov %ax,%gs /指向gdt的0 x10项(数据段) lss _stack_start,%esp /设置栈(系统栈) call setup_idt call setup_gdt xorl %eax,%eax 1:incl %eax movl %eax,0 x000000 cmpl %eax,0 x100000 je 1b /0地址处和1M地址处相同(A20没开启),就死循环 jmp after_page_tables /设置页表之
17、后 setup_idt: lea ignore_int,%edx movl $0 x00080000,%eax movw %dx,%ax lea _idt,%edi movl %eax,(%edi) 这是32位汇编代码 关于汇编关于汇编 las86汇编:能产生16位代码的Intel 8086(386)汇编 pmov ax, cs /csax, 目标操作数在前 lGNU as汇编:产生32位代码,使用AT _asm_(“movb %fs:%2, %al” :”=a”(_res) :”0”(seg),”m”(*(addr) ); SystemSystem模块分析模块分析 lhead.s所做的工作:
18、 p又一次初始化了idt表和gdt表 p然后开启20号地址线,这样就可以访问4G的内存了 lafter_page_tables psetup_paging执行ret后? 会执行函数main() p进入main()后的栈为0,0,0,L6 pmain()函数的三个参数是0,0,0 pmain()函数返回时进入L6,死循环. after_page_tables: pushl $0 pushl $0 pushl $0 pushl $L6 pushl $_main jmp set_paging L6: jmp L6 setup_paging: 设置页表ret SystemSystem模块分析模块分析 l进入main函数 在init/main.c中 void main(void) mem_init(); trap_init(); blk_dev_init(); chr_dev_init(); tty_init(); time_init();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年八年级地理上册 第四章 第三节 工业(工业的分布)教学实录 (新版)新人教版
- 药学人员个人工作总结
- 个人主管述职报告集合十篇
- 大病困难补助申请书集锦15篇
- 冀教版小学信息技术三年级上册《六 漂亮的剪贴画》教学实录
- Unit 7 Happy Birthday Section A 2a~2e教学实录-2024-2025学年人教版英语七年级上册
- 研究食品工业与现代物流协同发展
- 物流行业发展状况及市场需求分析
- 跳蚤效应详解
- 2024六年级语文下册 第二单元 习作:写作品梗概教学实录第一课时教学实录 新人教版
- 学术不端行为治理研究
- 福建南平武夷高新技术产业控股集团有限公司招聘笔试冲刺题2024
- GB/T 45083-2024再生资源分拣中心建设和管理规范
- 《村卫生室基本公共卫生服务管理规范》
- 电子技术基础练习题库(含参考答案)
- 儿童流感诊疗及预防指南(2024医生版)
- 语文中考《非连续性文本阅读》专题精练(含答案解析)
- 沐足行业严禁黄赌毒承诺书
- 上海市市辖区(2024年-2025年小学六年级语文)统编版期末考试((上下)学期)试卷及答案
- 足浴店入股合同范例
- 完整风电场运维服务合同
评论
0/150
提交评论