ch1-系统启动_第1页
ch1-系统启动_第2页
ch1-系统启动_第3页
ch1-系统启动_第4页
ch1-系统启动_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、哈工大计算机科学与技术学院哈工大计算机科学与技术学院软件基础教研室软件基础教研室操作系统操作系统Operating System第第1 1章章 系统启动系统启动Chapter 1: Power On- 2 -Operating System操作系统课,我们希望学会什么操作系统课,我们希望学会什么? ?- 3 -Operating System所有目标都要从所有目标都要从“明白操作系统明白操作系统”开开始始控制器控制器纸带纸带0111010n明白操作系统从明白操作系统从“明白系统启动明白系统启动”开始开始打开电源开关后发生了什么打开电源开关后发生了什么?打开电源打开电源计算机开始工作计算机开始工

2、作计算机怎么工作计算机怎么工作?又是谁决定了计算机是那样工作的又是谁决定了计算机是那样工作的?计算模型计算模型1936年,英国数年,英国数学家学家A.C.图灵图灵提提出了一种模型出了一种模型人人笔笔纸纸伟大的创举往往都是从朴素的想法开始的伟大的创举往往都是从朴素的想法开始的!- 4 -Operating System从图灵机到通用图灵机从图灵机到通用图灵机控制器控制器纸带纸带0111010图灵机图灵机通用图通用图灵机灵机一个会做一道菜的厨师一个会做一道菜的厨师舀舀2大碗面放入盆中大碗面放入盆中打打6个鸡蛋放入盆中个鸡蛋放入盆中盆中加入盆中加入500克水克水将盆中的物质搅拌均匀将盆中的物质搅拌均

3、匀做成等厚度的饼状物做成等厚度的饼状物大火蒸大火蒸15分钟分钟一个能看懂菜谱的厨师一个能看懂菜谱的厨师将这个过程将这个过程描述描述: 菜谱菜谱 厨师厨师菜谱菜谱1菜肴菜肴1菜肴菜肴2菜谱菜谱2这样的厨师才具这样的厨师才具有竞争力有竞争力 控制器控制器纸带纸带数据对象数据对象设置控制器动作设置控制器动作修改控制器修改控制器控制器状态控制器状态处理处理- 5 -Operating System从通用图灵机到计算机从通用图灵机到计算机n伟大想法的工程实现伟大想法的工程实现又一个伟大的发明又一个伟大的发明: 冯冯诺依曼诺依曼存储程序思想存储程序思想 mov ax, 100 100: 0 IPmov a

4、x, 100IRax0存储器存储器运算器、控制器运算器、控制器就是那个就是那个读写指针读写指针1946年提出年提出存储程序的主要思想:将程序和数据存放到计算机内部的存储存储程序的主要思想:将程序和数据存放到计算机内部的存储器中,计算机在程序的控制下一步一步进行处理器中,计算机在程序的控制下一步一步进行处理计算机由五大部件组成计算机由五大部件组成:输入设备、输出设备、存储器、运算器、输入设备、输出设备、存储器、运算器、控制器控制器- 6 -Operating System打开电源,计算机发生了什么打开电源,计算机发生了什么? ?- 7 -Operating System可以打开电源了可以打开电源

5、了n计算模型计算模型我们要我们要关注关注指针指针IP及其及其指向的内容指向的内容计算机刚打开电源时,计算机刚打开电源时,IP=?由硬件设计者决定由硬件设计者决定!看看看看x86 PC(1)x86 PC刚开机时刚开机时CPU处于实模式处于实模式(2)开机时,开机时,CS=0 xFFFF; IP=0 x0000(3)寻址寻址0 xFFFF0(ROM BIOS映射区映射区)(4)检查检查RAM,键盘,显示器,软硬磁盘,键盘,显示器,软硬磁盘 (5)将磁盘将磁盘0磁道磁道0扇区读入扇区读入0 x7c00处处(6)设置设置cs=0 x07c0,ip=0 x0000和保护模式对应,实模式和保护模式对应,实

6、模式的寻址的寻址CS:IP(CS左移左移4位位+IP),和保护模式不一样,和保护模式不一样!ROM BIOS0 x000000000 xFFFFFFFF0 xF00000 x100000ROM BIOS映射区映射区- 8 -Operating System0 x7c00处存放的代码处存放的代码n就是从磁盘引导扇区读入的那就是从磁盘引导扇区读入的那512个字节个字节引导扇区就是引导扇区就是启动设备的第一个扇区启动设备的第一个扇区启动设备信息被设置在启动设备信息被设置在CMOS中中 开机时按住开机时按住del键可进入键可进入启动设备设置界面,可启动设备设置界面,可以设置为光盘启动以设置为光盘启动!

7、CMOS: 互补金属氧化物半互补金属氧化物半导体导体(64B-128B)。用来存储。用来存储实时钟和硬件配置信息。实时钟和硬件配置信息。因此,硬盘的第一个扇区上存放着开机后执行的第因此,硬盘的第一个扇区上存放着开机后执行的第一段我们可以控制的程序。一段我们可以控制的程序。操作系统的故事从这里开始操作系统的故事从这里开始- 9 -Operating System引导扇区代码引导扇区代码: bootsect.s .globl begtext,begdata,begbss,endtext,enddata,endbss.text /文本段文本段begtext:.data /数据段数据段begdata:

8、.bss /未初始化数据段未初始化数据段begbss:.textentry 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用于标识文本段的开始用于标识文本段的开始位置。位置。此处的此处的.text、.data、.bss表明这表明这3个

9、个段重叠,不分段段重叠,不分段!此条语句就是此条语句就是0 x7c00处存放的语句处存放的语句!BOOTSEG = 0 x07c0INITSEG = 0 x9000SETUPSEG = 0 x9020将将0 x07c0:0 x0000处的处的256个字个字移动到移动到0 x9000:0 x0000处处- 10 -Operating Systemjmpi go, INITSEG go: mov ax,cs /cs=0 x9000 mov ds,ax mov es,ax mov ss,ax mov sp,#0 xff00load_setup: /载入载入setup模块模块 mov dx,#0 x0

10、000 mov cx,#0 x0002 mov bx,#0 x0200 mov ax,#0 x0200+SETUPLEN int 0 x13 /BIOS中断中断 jnc ok_load_setup mov dx,#0 x0000 mov ax,#0 x0000 /复位复位 int 0 x13 j load_setup /重读重读jmpi (jump intersegment段间跳转段间跳转): cs=INITSEG, ip=go为为call做准备做准备!启动盘启动盘boot扇区扇区setup的的4个扇区个扇区system模块模块(OS代码代码)0 x13是是BIOS读磁盘扇区的中断读磁盘扇区的

11、中断: ah=0 x02-读磁盘,读磁盘,al=扇区数量扇区数量(SETUPLEN=4),ch=柱面号,柱面号,cl=开始扇区,开始扇区,dh=磁头号,磁头号,dl=驱动器驱动器号,号,es:bx=内存地址内存地址- 11 -Operating System读入读入setup模块后模块后: ok_load_setup Ok_load_setup: /载入载入setup模块模块 mov dl,#0 x00 mov ax,#0 x0800 /ah=8获得磁盘参数获得磁盘参数 int 0 x13 mov ch,#0 x00 mov sectors,cx mov ah,#0 x03 xor bh,bh

12、 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,SETUPSEG7是显示属性是显示属性!bootsect.s中的数据中的数据 /在文件末尾在文件末尾sectors: .word 0 /磁道扇区数磁道扇区数msg1: .byte 13,10 .ascii “Loading system.” .byte 13,1

13、0,13,10显示这显示这24个字符将是个字符将是大家的第一个大家的第一个“创创举举”!转入转入0 x9020:0 x0000执行执行setup.sboot的工作的工作:读读setup,读读system- 12 -Operating Systemread_it /读入读入system模块模块 read_it: mov ax,es cmp ax,#ENDSEG jb ok1_read retok1_read: mov ax,sectors sub ax,sread /sread是当前磁道已读扇区数是当前磁道已读扇区数,ax未读扇区数未读扇区数 call read_track /读磁道读磁道.sy

14、stem模块可能很大,模块可能很大,要跨越磁道要跨越磁道!为什么读入为什么读入system模块还需要定义一个函数模块还需要定义一个函数?ENDSEG=SYSSEG+SYSSIZESYSSIZE=0 x8000 /该变量可根据该变量可根据Image大小设定大小设定(编译操作系统时编译操作系统时)引导扇区的末尾引导扇区的末尾 /BIOS用以识别引导扇区用以识别引导扇区.org 510 .word 0 xAA55 /扇区的最后两个字节扇区的最后两个字节否则会打出非引导设备否则会打出非引导设备可以转入可以转入setup执行了,执行了,jmpi 0, SETUPSEG- 13 -Operating Sy

15、stemsetup模块,即模块,即setup.s 根据名字就可以想到根据名字就可以想到: setup将完成将完成OS启动前的设置启动前的设置start: mov ax,#INITSEG mov ds,ax mov ah,#0 x03 xor bh,bh int 0 x10/取光标位置取光标位置dx mov 0,dx mov ah,#0 x88 int 0 x15 mov 2,ax . cli /不允许中断不允许中断 mov ax,#0 x0000 clddo_move: mov es,ax add ax,#0 x1000 cmp ax,#0 x9000 jz end_move mov ds,a

16、x sub di,di sub si,si mov cx,#0 x8000 rep movsw jmp do_move 取出光标位置取出光标位置(包包括其他硬件参数括其他硬件参数)到到0 x90000处处扩展内存大小扩展内存大小内存地址内存地址长度长度名称名称0 x900002光标位置光标位置0 x900022扩展内存数扩展内存数0 x901FC2根设备号根设备号0 x9000C2显卡参数显卡参数SYSSEG = 0 x1000将将system模块模块移到移到0地址地址- 14 -Operating System将将setup移到移到0地址处地址处.但但0地址处是有重要内容的地址处是有重要内容

17、的end_move: mov ax,#SETUPSEG mov ds,ax lidt idt_48 lgdt gdt_48/设置保护模式下的中断和寻址设置保护模式下的中断和寻址 进入保护模式的命令进入保护模式的命令.idt_48:.word 0 .word 0,0 /保护模式的中断处理函数表保护模式的中断处理函数表gdt_48:.word 0 x800 .word 512+gdt,0 x9 gdt: .word 0,0,0,0 .word 0 x07FF, 0 x0000, 0 x9A00, 0 x00C0 .word 0 x07FF, 0 x0000, 0 x9200, 0 x00C0 RO

18、M BIOS0 x000000000 xFFFFFFFF0 xF00000 x100000ROM BIOS映射区映射区中断向量表中断向量表前面的前面的int指令指令才可以使用才可以使用!以后不调用以后不调用int指令了吗指令了吗?因为操作系统要让硬件进入保护模式了因为操作系统要让硬件进入保护模式了保护模式下保护模式下int n和和cs:ip解释不再和实模式一样解释不再和实模式一样又一个函数表又一个函数表将将cs:ip变成物变成物理地址理地址- 15 -Operating System保护模式下的地址翻译和中断处理保护模式下的地址翻译和中断处理保护模式下的地址翻译保护模式下的地址翻译保护模式下中

19、断处理函数入口保护模式下中断处理函数入口即即gdt的作用的作用 t是是table,所以实模式,所以实模式下下:cs左移左移4+ip。保护模。保护模式下式下:根据根据cs查表查表+ipt仍是仍是table,仿照,仿照gdt,通过通过int n的的n进行查表进行查表GDTcs:ip物理内存地址物理内存地址IDTint n中断处理函数入口中断处理函数入口即即idt的作用的作用 - 16 -Operating System进入保护模式进入保护模式call empty_8042 mov al,#0 xD1 out #0 x64,al /8042是键盘控制器,其输出端口是键盘控制器,其输出端口P2用来控制

20、用来控制A20地址线地址线call empty_8042 mov al,#0 xDF out #0 x60,al /选通选通A20地址线地址线 call empty_8042初始化初始化8259(中断控制中断控制) /一段非常机械化的程序一段非常机械化的程序mov ax,#0 x0001 mov cr0,axjmpi 0,8 empty_8042: .word 0 x00eb,0 x00eb in al,#0 x64 test al,#2 jnz empty_8042 ret 跳到下一句指跳到下一句指令的机器码令的机器码!位位1=0,输入缓存,输入缓存器为空,不空说器为空,不空说明明PC机有问

21、题机有问题D1表示写数据到表示写数据到8042的的P2端口端口cr0一个非常酷的寄存器一个非常酷的寄存器PGPE031PE=1启动保护模式,启动保护模式,PG=1启动分页启动分页jmpi 0,8 /cs=8用来查用来查gdt- 17 -Operating Systemjmpi 0,8 /gdt中的中的8gdt: .word 0,0,0,0 .word 0 x07FF, 0 x0000, 0 x9A00, 0 x00C0 .word 0 x07FF, 0 x0000, 0 x9200, 0 x00C0 ?GDTcs:ip0816段基址段基址15.0段限长段限长15.004段基址段基址31.24段

22、基址段基址23.16段限长段限长19.16P DPLGGDT表项表项0310 x00C09A00000007FFFjmp到内存到内存0 x0000处处是是system模块模块!两个两个gdt表项,都是表项,都是0 x0000,一个只读,一个只读(代代码码),一个读写,一个读写(数据数据)- 18 -Operating System跳到跳到system模块执行模块执行.system模块模块(目标代码目标代码)中的第一部分代码中的第一部分代码? head.sdisk: Image dd bs=8192 if=Image of=/dev/PS0 Image: boot/bootsect boot/s

23、etup tools/system tools/build tools/build boot/bootsect boot/setup tools/system Imagetools/system: boot/head.o init/main.o $(DRIVERS) $(LD) boot/head.o init/main.o $(DRIVERS) -o tools/systemsystem由许多文件编译而成,为什么是由许多文件编译而成,为什么是head.s?linux/Makefileif=input file/dev/PS0是软驱是软驱A明白为什么明白为什么head.s就这样一个名字了吧就这

24、样一个名字了吧?- 19 -Operating Systemhead.s /一段在保护模式下运行的代码一段在保护模式下运行的代码setup是进入保护模式,是进入保护模式,head是进入之后的初始化是进入之后的初始化stratup_32: movl $0 x10,%eax mov %ax,%ds mov %ax,%es mov %as,%fs mov %as,%gs /指向指向gdt的的0 x10项项(数据段数据段) lss _stack_start,%esp /设置栈设置栈(系统栈系统栈) call setup_idt call setup_gdt xorl %eax,%eax1:incl %

25、eax movl %eax,0 x000000 cmpl %eax,0 x100000 je 1b /0地址处和地址处和1M地址处相同地址处相同(A20没开启没开启),就死循环,就死循环 jmp after_page_tables /页表,什么东东页表,什么东东?setup_idt: lea ignore_int,%edx movl $0 x00080000,%eax movw %dx,%ax lea _idt,%edi movl %eax,(%edi) 和前面的代码不和前面的代码不一样了一样了?因为是因为是32位汇编代码位汇编代码!structlong *a; short b;stack_s

26、tart=&user_stackPAGE_SIZE2,0 x10; idt_48:.word 0 word 0,0_idt: .fill 256,8,0现在忽略中断现在忽略中断- 20 -Operating System关于汇编关于汇编head.s的汇编和前面不一样的汇编和前面不一样?mov ax, cs /csax, 目标操作数在前目标操作数在前 (1) as86汇编:能产生汇编:能产生16位代码的位代码的Intel 8086(386)汇编汇编(2) GNU as汇编:产生汇编:产生32位代码,使用位代码,使用AT&T系统系统V语法语法AT&T美国电话电报公司,美国电

27、话电报公司,包含贝尔实验室等,包含贝尔实验室等,1983年年AT&T UNIX支持支持组发布了系统组发布了系统Vmovl var, %eax/(var)%eaxmovb -4(%ebp), %al /取出一字节取出一字节(3) 内嵌汇编,内嵌汇编,gcc编译编译x.c会产生中间会产生中间 结果结果as汇编文件汇编文件x.s_asm_(“汇编语句汇编语句”: 输出输出: 输入输入: 破坏部分描述破坏部分描述); _asm_(“movb %fs:%2, %al”:”=a”(_res):”0”(seg),”m”(*(addr);a表示使用表示使用eax,并编号并编号%0%2表示表示addr,

28、m表示使用内存表示使用内存0或空表示使用与或空表示使用与相应输出一样的相应输出一样的寄存器寄存器- 21 -Operating Systemafter_page_tables /设置了页表之后设置了页表之后setup是进入保护模式,是进入保护模式,head是进入之后的初始化是进入之后的初始化after_page_tables: pushl $0 pushl $0 pushl $0 pushl $L6 pushl $_main jmp set_paging L6: jmp L6setup_paging: 设置页表设置页表 ret将来学到将来学到!简单的几句程序,控制流却很复杂简单的几句程序,控制流却很复杂setup_paging执行执行ret后后? 会执行函数会执行函数main() p3p2p1返回地址返回地址C执行执行func(p1,p2,p3)进入进入main()后的栈为后的栈为0,0,0,L6 main()函数的三个参数是函数的三

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论