版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统OperatingSystem第2章系统启动Chapter2:PowerOn操作系统课,我们希望学会什么?所有目标都要从“明白操作系统”开始控制器纸带0111010明白操作系统从“明白系统启动”开始打开电源开关后发生了什么?打开电源
计算机开始工作计算机怎么工作?又是谁决定了计算机是那样工作的?计算模型1936年,英国数学家A.C.图灵提出了一种模型人笔纸伟大的创举往往都是从朴素的想法开始的!从图灵机到通用图灵机控制器纸带0111010图灵机通用图灵机一个会做一道菜的厨师舀2大碗面放入盆中打6个鸡蛋放入盆中盆中加入500克水将盆中的物质搅拌均匀做成等厚度的饼状物大火蒸15分钟一个能看懂菜谱的厨师将这个过程描述:菜谱厨师菜谱1菜肴1菜肴2菜谱2这样的厨师才具有竞争力控制器纸带数据对象设置控制器动作修改控制器控制器状态处理从通用图灵机到计算机伟大想法的工程实现…又一个伟大的发明:冯·诺依曼存储程序思想movax,[100]……100:0
IPmovax,[100]IRax0存储器运算器、控制器就是那个读写指针1946年提出存储程序的主要思想:将程序和数据存放到计算机内部的存储器中,计算机在程序的控制下一步一步进行处理计算机由五大部件组成:输入设备、输出设备、存储器、运算器、控制器打开电源,计算机发生了什么?可以打开电源了…计算模型我们要关注指针IP及其指向的内容计算机刚打开电源时,IP=?由硬件设计者决定!看看x86PCx86PC刚开机时CPU处于实模式开机时,CS=0xFFFF;IP=0x0000寻址0xFFFF0(ROMBIOS映射区)检查RAM,键盘,显示器,软硬磁盘将磁盘0磁道0扇区读入0x7c00处设置cs=0x07c0,ip=0x0000和保护模式对应,实模式的寻址CS:IP(CS左移4位+IP),和保护模式不一样!ROMBIOS0x000000000xFFFFFFFF0xF00000x100000ROMBIOS映射区0x7c00处存放的代码就是从磁盘引导扇区读入的那512个字节引导扇区就是启动设备的第一个扇区启动设备信息被设置在CMOS中…开机时按住del键可进入启动设备设置界面,可以设置为光盘启动!CMOS:互补金属氧化物半导体(64B-128B)。用来存储实时钟和硬件配置信息。因此,硬盘的第一个扇区上存放着开机后执行的第一段我们可以控制的程序。操作系统的故事从这里开始…引导扇区代码:bootsect.s
.globlbegtext,begdata,begbss,endtext,enddata,endbss.text//文本段begtext:.data//数据段begdata:.bss//未初始化数据段begbss:.textentrystart//关键字entry告诉链接器“程序入口”start:movax,#BOOTSEGmovds,axmovax,#INITSEGmoves,axmovcx,#256subsi,sisubdi,direpmovwjmpigo,INITSEG.text等是伪操作符,告诉编译器产生文本段,.text用于标识文本段的开始位置。此处的.text、.data、.bss表明这3个段重叠,不分段!此条语句就是0x7c00处存放的语句!BOOTSEG=0x07c0INITSEG=0x9000SETUPSEG=0x9020将0x07c0:0x0000处的256个字移动到0x9000:0x0000处jmpigo,INITSEG
go:movax,cs//cs=0x9000movds,axmoves,axmovss,axmovsp,#0xff00load_setup://载入setup模块
movdx,#0x0000movcx,#0x0002movbx,#0x0200movax,#0x0200+SETUPLENint0x13//BIOS中断
jncok_load_setupmovdx,#0x0000movax,#0x0000//复位
int0x13jload_setup//重读jmpi(jumpintersegment段间跳转):cs=INITSEG,ip=go为call做准备!启动盘boot扇区setup的4个扇区system模块(OS代码)0x13是BIOS读磁盘扇区的中断:ah=0x02-读磁盘,al=扇区数量(SETUPLEN=4),ch=柱面号,cl=开始扇区,dh=磁头号,dl=驱动器号,es:bx=内存地址读入setup模块后:ok_load_setup
Ok_load_setup://载入setup模块
movdl,#0x00movax,#0x0800//ah=8获得磁盘参数
int0x13movch,#0x00movsectors,cxmovah,#0x03xorbh,bhint0x10//读光标
movcx,#24movbx,#0x0007movbp,#msg1movax,#1301int0x10//显示字符
movax,#SYSSEG//SYSSEG=0x1000moves,ax
callread_it//读入system模块
jmpi0,SETUPSEG7是显示属性!bootsect.s中的数据//在文件末尾sectors:.word0//磁道扇区数msg1:.byte13,10.ascii“Loadingsystem...”.byte13,10,13,10显示这24个字符将是大家的第一个“创举”!转入0x9020:0x0000执行setup.sboot的工作:读setup,读system…read_it//读入system模块
read_it:movax,escmpax,#ENDSEGjbok1_readretok1_read:movax,sectorssubax,sread//sread是当前磁道已读扇区数,ax未读扇区数
callread_track//读磁道...system模块可能很大,要跨越磁道!为什么读入system模块还需要定义一个函数?ENDSEG=SYSSEG+SYSSIZESYSSIZE=0x8000//该变量可根据Image大小设定(编译操作系统时)引导扇区的末尾//BIOS用以识别引导扇区.org510.word0xAA55//扇区的最后两个字节否则会打出非引导设备可以转入setup执行了,jmpi0,SETUPSEGsetup模块,即setup.s
根据名字就可以想到:setup将完成OS启动前的设置start:movax,#INITSEGmovds,axmovah,#0x03xorbh,bhint0x10//取光标位置dxmov[0],dx
movah,#0x88int0x15mov[2],ax...cli///不允许中断
movax,#0x0000clddo_move:moves,axaddax,#0x1000cmpax,#0x9000jzend_move
movds,axsubdi,disubsi,simovcx,#0x8000repmovswjmpdo_move取出光标位置(包括其他硬件参数)到0x90000处扩展内存大小内存地址长度名称0x900002光标位置0x900022扩展内存数0x901FC2根设备号0x9000C2显卡参数SYSSEG=0x1000将system模块移到0地址将setup移到0地址处...但0地址处是有重要内容的end_move:movax,#SETUPSEGmovds,axlidtidt_48lgdtgdt_48//设置保护模式下的中断和寻址
进入保护模式的命令...idt_48:.word0.word0,0//保护模式的中断处理函数表gdt_48:.word0x800.word512+gdt,0x9gdt:.word0,0,0,0.word0x07FF,0x0000,0x9A00,0x00C0.word0x07FF,0x0000,0x9200,0x00C0ROMBIOS0x000000000xFFFFFFFF0xF00000x100000ROMBIOS映射区中断向量表前面的int指令才可以使用!以后不调用int指令了吗?因为操作系统要让硬件进入保护模式了…保护模式下intn和cs:ip解释不再和实模式一样又一个函数表将cs:ip变成物理地址保护模式下的地址翻译和中断处理保护模式下的地址翻译保护模式下中断处理函数入口即gdt的作用
t是table,所以实模式下:cs左移4+ip。保护模式下:根据cs查表+ipt仍是table,仿照gdt,通过intn的n进行查表GDTcs:ip物理内存地址IDTintn中断处理函数入口即idt的作用
进入保护模式callempty_8042moval,#0xD1out#0x64,al//8042是键盘控制器,其输出端口P2用来控制A20地址线callempty_8042moval,#0xDFout#0x60,al//选通A20地址线callempty_8042初始化8259(中断控制)//一段非常机械化的程序movax,#0x0001movcr0,axjmpi0,8
empty_8042:.word0x00eb,0x00ebinal,#0x64testal,#2jnzempty_8042ret
跳到下一句指令的机器码!位1=0,输入缓存器为空,不空说明PC机有问题D1表示写数据到8042的P2端口cr0一个非常酷的寄存器PGPE031PE=1启动保护模式,PG=1启动分页jmpi0,8//cs=8用来查gdtjmpi0,8//gdt中的8gdt:.word0,0,0,0.word0x07FF,0x0000,0x9A00,0x00C0.word0x07FF,0x0000,0x9200,0x00C0?GDTcs:ip0816段基址15..0段限长15..004段基址31..24段基址23..16段限长19..16PDPLGGDT表项0310x00C09A00000007FFFjmp到内存0x0000处是system模块!两个gdt表项,都是0x0000,一个只读(代码),一个读写(数据)跳到system模块执行...system模块(目标代码)中的第一部分代码?head.sdisk:Imageddbs=8192if=Imageof=/dev/PS0Image:boot/bootsectboot/setuptools/systemtools/buildtools/buildboot/bootsectboot/setuptools/system>Imagetools/system:boot/head.oinit/main.o$(DRIVERS)…
$(LD)boot/head.oinit/main.o$(DRIVERS)…-otools/systemsystem由许多文件编译而成,为什么是head.s?linux/Makefileif=inputfile/dev/PS0是软驱A明白为什么head.s就这样一个名字了吧?head.s//一段在保护模式下运行的代码setup是进入保护模式,head是进入之后的初始化stratup_32:movl$0x10,%eaxmov%ax,%dsmov%ax,%esmov%as,%fsmov%as,%gs//指向gdt的0x10项(数据段)lss_stack_start,%esp//设置栈(系统栈)callsetup_idtcallsetup_gdtxorl%eax,%eax1:incl%eaxmovl%eax,0x000000cmpl%eax,0x100000je1b//0地址处和1M地址处相同(A20没开启),就死循环
jmpafter_page_tables//页表,什么东东?setup_idt:leaignore_int,%edx
movl$0x00080000,%eaxmovw%dx,%axlea_idt,%edimovl%eax,(%edi)
和前面的代码不一样了?因为是32位汇编代码!struct{long*a;shortb;}stack_start={&user_stack[PAGE_SIZE>>2],0x10};
idt_48:.word0word0,0_idt:.fill256,8,0现在忽略中断关于汇编…head.s的汇编和前面不一样?movax,cs//csax,目标操作数在前
(1)as86汇编:能产生16位代码的Intel8086(386)汇编(2)GNUas汇编:产生32位代码,使用AT&T系统V语法AT&T美国电话电报公司,包含贝尔实验室等,1983年AT&TUNIX支持组发布了系统Vmovlvar,%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,m表示使用内存0或空表示使用与相应输出一样的寄存器after_page_tables//设置了页表之后setup是进入保护模式,head是进入之后的初始化after_page_tables:pushl$0pushl$0pushl$0pushl$L6pushl$_mainjmpset_pagingL6:jmpL6setup_paging:设置页表
ret将来学到!简单的几句程序,控制流却很复杂setup_paging执行ret后?会执行函数main()p3p2p1返回地址C执行func(p1,p2,p3)进入main()后的栈为0,0,0,L6main()函数的三个参数是0,0,0main()函数返回时进入L6,死循环...进入main函数为什么是void?在init/main.c中voidm
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合规转利润:降本增效全指南(2026)《GBT 38624.2-2021物联网 网关 第2部分:面向公用电信网接入的网关技术要求》
- 心脏病治疗技术
- 软激光治疗仪
- 股四头肌康复锻炼
- 2025-2025年医技类-临床医学检验临床血液技术(副高)考试全真模拟全知识
- 维文健康知识普及
- 黑玫瑰AI项目揭秘
- 产后大出血急救护理查房
- 化工企业停产复产安全管理指南
- 煤矿瓦斯抽采设备制造项目可行性研究报告
- 《智能制造系统》课程标准
- 杜邦安全管理体系22要素
- 资产评估学教程(第八版)习题及答案 乔志敏
- GB/T 38471-2023再生铜原料
- 第二章热力学参数状态图
- 《黄帝内经》题库
- 管理学原理 教案 第四章 决策
- GB/T 28021-2011饰品有害元素的测定光谱法
- 微生物工程课件
- 婚姻财富管理及家庭财富传承课件
- 运动训练管理课件
评论
0/150
提交评论