操作系统实验 lab1-系统引导 2016-3-1.

Slides:



Advertisements
Similar presentations
第四章 信息的加工与表达(下). 了解编程解决问题的方法与步骤 信息技术基础》第四章 第一节 硬件基础知识: 内存:内存分成两个部分 ROM (断电也能够保留数 据)和 RAM (断电时其中的数据就会丢失) 显卡:承担显示图形的输出 声卡:实现声波/数字信号相互转换的一种硬件。 网卡:计算机与外界局域网的连接硬件又称适配器.
Advertisements

第1章第1章 PC/AT 系統 1 Chapter 1 Chapter 1 PC/AT 系統 001.
第 3 章操作系统基础 3.1 操作系统概述 3.2 操作系统的功能模块 3.3 典型操作系统概述.
计算机应用基础 江西财经大学信息管理学院 凌传繁
《单片机原理及应用》 《微型计算机原理及接口技术 》 授课专业:测控13级 授课学时: 78 学时 理论教学:52学 实验教学:26学时
导 师:刘恒洋 答辩人:毛国平 专 业:计算机科学与技术
星云集团.
审计案例研究 第一讲 辅导教师 周桂芝.
門神 在傳統觀念中,門是居住環境中與外界相通的出入口,具有重要的屏障作用。門神顧名思義就是護宅守門的神仙,每逢過年,上至天子百官下至普通百姓,家家戶戶必在門上張貼門神,以保一家平安。 門神種類主要有宅第大門上將軍武門神、內室門戶上祈福文門神,還有童子門神、仙子門神等,形象豐富多樣,皇家貴戚還往往在畫上瀝粉貼金,十分吉祥喜慶。
二十世纪外国文学专题 章丘电大 李颜.
第2章 微处理器 2.1 概述 /8086微处理器 微处理器 X86/Pentium微处理器
宿州学院经济管理系 第十章 管理的创新职能 二00九年五月.
第5章 操作系统的安装 5.1 PC操作系统概述 5.2 Windows 98操作系统的安装 5.3 Windows Me 操作系统的安装
峰信 电话管理系统 产品介绍 上海艾家电子商务有限公司 2011年7月.
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
第3章 奔腾系列微处理器.
第一章 信息与信息技术 1.2 日新月异的信息技术.
98年度「技專校院改名改制後訪視」 表冊說明會
基于ARM和linux的开发 华中科技大学 武汉创维特 2017/3/20.
Windows Server 2003操作系统相关配置
第七章 异常控制流 CPU控制流的概念 进程上下文切换 异常和中断的基本概念 异常和中断的响应和处理
计算机与信息技术应用基础 徐东雨 计算机中心
寫 作 教 學 6 電腦與我 時代改變,科技進步,電腦成為日常生活不可或缺的設備。我是二十一世紀的E世代少年,一隻滑鼠在手,樂趣無窮。
第一章 计算机基础知识 第一节 计算机概述 一、计算机的基本组成和工作原理 二、有关术语 三、计算机发展简史 四、微型计算机概述
了解高中信息技术课 柯华菁.
作業系統的結構 日期 : 2018/9/17.
主讲教师:唐大仕 第5讲 计算机硬件 主讲教师:唐大仕
第8章 现代微型计算机 x86系列微处理器 8.2 微型计算机体系结构 8.3 存储管理技术 8.4 多任务管理与I/O管理
第一章 概述.
物流信息技术 Logistics Information Technology
中国科学技术大学计算机系 陈香兰(0512- ) Spring 2011
第五章 存储系统 半导体存储器概述 系统内存扩充 高速缓冲存储器 虚拟存储器 PC系列机中的主存储器 习题与思考 上一章 目 录 帮助
Bootloader技术分析.
虛擬化基本概念.
第5章 输入输出与接口技术.
資料來源:張弘明 張迪安 林欣螢 吳柏農 吳沛錡
第三章 系统的启动和初始化 (include lab1)
Game Boy Architecture 计算机体系结构课程报告 --刘继元.
在專用的嵌入式板子運行 GNU/Linux 系統已經變得越來越流行。一個嵌入式 Linux 系統從軟體的角度看通常可以分為四個層次:
单片机原理 单 片 机 单片机接口技术 单片机应用技术.
嵌入式系统的Boot Loader技术 陈文智 浙江大学计算机学院 2009年5月.
第五章,抢占式调度(lab3).
1.3 微型计算机的结构和工作原理.
第3章 認識處理元.
第五章 中断与异常 中断的基本知识 中断描述符表的初始化 中断处理 中断的下半部处理机制 中断的应用-时钟中断.
Author:BobZhang Copy Right 2007
(第2版).
作業系統 第三章 作業系統結構.
第四章 存储器管理 4.1 存储器的层次结构 4.2 程序的装入和链接 4.3 连续分配方式 4.4 基本分页存储管理方式
第四章 存 储 器 管 理 4.1 存储器的层次结构 4.2 程序的装入和链接 4.3 连续分配存储管理方式
微机原理与接口技术 西安邮电大学计算机学院 王忠民.
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
操作系统的结构和硬件支持 第2章 操作系统的结构和硬件支持.
第 3 章、組合語言 作者:陳鍾誠 旗標出版社.
嵌入式Linux开发流程 成都研究所操作系统团队.
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
K60入门课程 06 首都师范大学物理系 靳熙芃.
本节内容 段描述符与段选择子 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
本节内容 代码跨段 本质就是修改CS段寄存器 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
第五讲:AT89C51单片机存储器结构 一、半导体存储器 二、存储器空间划分方法 三、数据存储器(RAM) 四、程序存储器(ROM)
微型计算机原理与接口技术 (第2版) 赵宏伟 于秀峰 黄永平 秦贵和 北京:科学出版社 出版 吉林大学计算机科学与技术学院 制作.
1.3操作系统提供的服务和用户接口 操作系统提供的用户接口 程序接口与系统调用 操作接口与系统程序
实验三 键盘软加锁实验 2019/5/9.
第12章 中断 罗文坚 中国科大 计算机学院
國洋銳星通信訊息整合系統(HOTEL PACKAGE)
学 生 端 操 作 指 南
微机原理与接口技术 西安邮电大学计算机学院 王 莹.
学 生 端 操 作 指 南
本节内容 任务段 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
2018春季学期黑龙江齐齐哈尔医学 院导学.
Presentation transcript:

操作系统实验 lab1-系统引导 2016-3-1

实验相关

联系方式 授课教师 实验助教 课程助教: 徐锋-系楼817 叶保留-系楼616 王瑶菁 (直博生二年级 系楼812-10) Email: wyj@smail.nju.edu.cn QQ: 369694976 课程助教: 席圣渠(812-9)…

课程网站 http://moon.nju.edu.cn/people/yaojingwang/static/OS/mai n.html 到我的主页跳转: http://moon.nju.edu.cn/people/yaojingwang/ 课程主页跳转: http://moon.nju.edu.cn/people/fengxu/OS2016 实验提交网址: http://cslabcms.nju.edu.cn/ 虚拟机下载地址: http://114.212.81.244/os/

实验内容安排 实验一: 系统引导 实验二: 系统调用 实验三: 进程与中断 实验四: 并发控制 实验五(选做): 文件系统 完成实验五可获得加分

实验要求 实验内容要求: 实验报告需要写出整个程序的设计思路。不要在实验报告 中粘贴大段的代码,只粘贴那些你觉得十分重要,值得一 提的部分,并配以文字说明。也可以增加一些额外的内容, 例如截图、视频、心得体会或是意见建议。但不要把无关 的文件(临时文件、虚拟机镜像等)提交。 你在实现的过程中,遭遇的难题、致命的bug,导致它们 的原因、最后解决的方法,以及从中的收获或教训。 独立完成,不要相互抄袭

实验要求 实验报告提交规范: 提交的文件打成一个压缩包(zip),包含 lab 和 report 两个文件夹 压缩包以自己的学号和姓名命名,格式为 “labX-学号姓名”。 /lab中存放最终版本的源代码。历史版本、最终 版本中,需要包括编译脚本、所有源文件,但不 应该包括任何二进制文件。 /report中存放实验报告

实验架构 操作系统实验 操作系统模拟器: QEMU 操作系统: Debian 虚拟机软件: VisualBox 操作系统: Windows/Mac 真实硬件

实验一-系统引导

实验目的 实验目的: 掌握开发环境,能独立的完成开发环境的配 置 学习如何在Linux环境下编写、调试程序 学习AT&T汇编程序的特点 通过阅读相关的文档和手册,初步掌握vim 编辑器、shell命令、GNU make、GNU binutils和GNU GDB的使用方法。 理解系统引导程序的含义,理解系统的启动 过程 理解系统的内存布局

实验内容 实验内容: 在理解操作系统启动的基础之上,分析系统 启动的过程,并开发出运行在没有操作系统 和运行库的计算机上的简单应用程序。 关键代码分为启动部分(bootloader)和应用 部分(app)

实验内容 第一部分: 简单的引导程序 第二部分: 将磁盘程序片段加载 到内存并运行 第二部分运行流程 实现一个简单的引导程序, 完成 从实模式到保护模式的跳转并输 出”Boot: Hello world!” 引导程序: Loading… 读扇区内容并加载到内存 解析 ELF 文件并加载程序 第二部分: 将磁盘程序片段加载 到内存并运行 引导程序: Executing… 跳转运行用户程序 在引导程序中, 将磁盘第2号扇区 以后的用户程序(ELF 文件格式) 加载到堆栈的位置, 再通过解析 这段 ELF 文件将其加载到内存 的相应位置并运行 用户程序: Process: Hello world! 返回引导程序 引导程序: Back to Boot

计算机体系结构基本知识

80386简介 回顾实模式 实模式下的寄存器集合 寻址空间与寻址方式 通用寄存器 段寄存器 状态和控制寄存器 寻址空间 实际物理地址 = (段寄存器 << 4) + 偏移地址 MOV AX,ES:[1200H] CS=0x0000: IP=0x7c00 和CS=0x0700: IP=0x0c00 以及 CS=0x07c0: IP=0x0000所寻址的地址是完全相同的!

80386简介(续) 回顾实模式 实模式下的中断 中断向量表存放在物理内存开始的位置 (0x0000---0x03ff) 总共最多可以有256个中断向量 00h---04h 号中断向量为系统专用 08h---0fh 硬件中断(8259A使用) 10h---1fh BIOS使用 20h---3fh DOS使用 如常用的 int 21h 40h---ffh 用户使用

80386简介(续) 一个实模式下用户程序的 例子 各个段在物理上必须是连 续的 装载程序在将程序装入时 需要按照具体的装载位置 设置CS、DS、SS

80386简介(续) 实模式系统存在的问题 安全性问题 分段机制本身的问题 程序采用物理地址来实现访存功能,而无法 实现对任务的代码和数据的保护 一个程序可以通过改变段寄存器和偏移寄存 器修改不属于自己的代码或者数据,甚至操 作系统 分段机制本身的问题 段必须是连续的,从而无法利用零碎的空间 段的大小有限制,从而限制了代码的规模

80386简介(续) 保护模式带来的变化 保护模式下的寄存器 通用寄存器(从16位扩展到32位) 段寄存器(维持16位) EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP 段寄存器(维持16位) CS、DS、SS、ES、FS、GS 状态和控制寄存器(32位) EFLAGS、EIP、CR0、CR1、CR2、CR3 系统地址寄存器 GDTR、IDTR、TR、LDTR 调试与测试寄存器

80386简介(续) 8086的寄存器 80386的寄存器 通用寄存器 段寄存器 段描述符寄存器 状态和控制寄存器 系统地址寄存器 AX、BX、CX、DX、SP、BP、DI、SI EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP 段寄存器 CS、DS、SS、ES CS、DS、SS、ES、FS、GS 段描述符寄存器 无 对程序员不可见 状态和控制寄存器 FLAGS 、IP EFLAGS、EIP、CR0、CR1、CR2、CR3 系统地址寄存器 GDTR、IDTR、TR、LDTR 调试寄存器 DR0--DR7 测试寄存器 TR0--TR7

80386简介(续) 寻址方式的变化 在保护模式下,分段机制是利用一个称作段 选择子的偏移量到全局描述符表中找到需要 的段描述符,而这个段描述符中就存放着真 正的段的物理首地址,然后再加上偏移地址 量便得到了最后的物理地址。 一般保护模式段式寻址可用xxxx:yyyyyyyy 表示。其中xxxx表示索引,也就是段选择子, 是16位的;yyyyyyyy是偏移量,是32位的。 段选择子(xxxx)为段寄存器,如CS、DS、 SS、ES、FS、GS;偏移量(yyyyyyyy)是 一个32位寄存器,如ESI、EDI、EBP、ESP。

80386简介(续) 80386以及以后的处理器专门设计了一个寄存器 GDTR(Global Descriptor Table Register),专 门用于存储全局描述符表在内存中存放的位置。

80386简介(续) 段描述符 段基址为2,3,4,7字节,共32位。 段限长为0,1以及6字节的低四位,共20位,段限长即段最大长度,与属性G共同确定。G = 0时描述符中的20位段限长为实际段限长,最大限长为1MB(0-FFFFFh)。G = 1则 32位段限长为描述符中的20位乘以4KB,即段限长左移 12位后加上FFFH,最大限长为 4GB。 段描述符 每个描述符为8个字节(8×8=64位) 代码段和数据段的描述符

80386简介(续) 段描述符的属性 D/B:对于不同类型段含义不同。 在可执行代码段中,这一位叫做D位,D = 1使用32位地址和32/8位操作 数,D = 0使用16位地址和16/8位操作数。 在向下扩展的数据段中,这一位叫做B位,B = 1段的上界为4GB,B = 0 段的上界为64KB。 在描述堆栈段的描述符中,这一位叫做B位,B = 1使用32位操作数,堆 栈指针用ESP,B = 0使用16位操作数,堆栈指针用SP。 AVL:Available and Reserved Bit,通常设为0。 P:存在位,P = 1表示段在内存中。 DPL:描述符特权级,取值0 ~ 3共4级。0特权级为最高,而3特权级 为最低,表示访问该段时CPU所需处于的最低特权级,我们在后面 会详细讨论特权级的问题。 S:描述符类型标志,S = 1表示代码段或者数据段;S = 0表示系统 段(TSS、LDT)和门描述符。

80386简介(续) 描述符类型 TYPE和S结合使用,可以表示的描述符类型有:代码段、数据段、 TSS、LDT、中断门(Interrupt Gate)、陷阱门(Trap Gate)、 调用门(Call Gate)、任务门(Task Gate)。 当S = 1,TYPE < 8时 当S = 1,TYPE < 8时 TYPE 说明 十进制值 E W A 数据段 只读 1 只读,已访问 2 读/写 3 读/写,已访问 4 只读,向下扩展 5 只读,向下扩展,已访问 6 读/写,向下扩展 7 读/写,向下扩展,已访问 TYPE 说明 十进制值 C R A 代码段 8 1 只执行 9 只执行,已访问 10 执行/读 11 执行/读,已访问 12 只执行,一致 13 只执行,一致,已访问 14 执行/读,一致 15 执行/读,一致,已访问

80386简介(续) 安全性问题 x86平台CPU有0、1、2、3四个特权级,其中level0是 最高的特权级,可以执行所有指令; 而level3则是最低的特权级,只能执行算术逻辑指令, 很多特殊的操作(如CPU模式转换以及I/O操作指令) 都不能在这个级别下进行。 现代操作系统在实际中往往只需使用到level0和level3 两个特权级,具体的就是操作系统内核运行时系统处 于level0(即CS寄存器的末两位为00),而用户程序 运行是系统是处于level3的(即CS的末两位为11)。 将在第二次实验中进行详细讲述。

Lab1-系统引导

操作系统的架构 以Unix为例

系统的启动 物理内存的分布 物理内存的 0x000A0000 - 0x00100000为VGA显 示存储、BIOS ROM以 及扩展ROM 物理内存的高端 0xefffffff-0xffffffff往往 被PCI设备的外设I/O所 占据。

系统的启动(续) BIOS的加载 80386在设计的时候必须考虑向下兼容性, 所以80386以及其后的机器在启动后,仍 然是处于实模式; 在PC启动的时候,首先会在实模式下运 行BIOS;

系统的启动(续) BIOS加载完成后…… BIOS主要完成系统自检、以及启动前的准备 工作(如让各个设备做好准备工作) BIOS的工作完成后,BIOS将会读取硬盘的 MBR(Master Boot Record,硬盘的第0柱 面、0磁道、0扇区。512字节)到内存的 0x7c00到0x7dff的位置(被装入的程序又被 称为Boot Loader),紧接着再执行一个跳 转指令将CS设置为0x0000,IP设置为 0x7c00,即刚被装入的Boot Loader 找到lab中Boot loader的程序

系统的启动(续) lab 中的 bootloader bootloader的源程序是由一个叫做的 start.S的AT&T汇编程序与一个叫做 boot.c的C程序组成的。 start.S主要是将处理器从实模式转换到 32位的保护模式,这是因为只有在保护 模式中我们才能访问到物理内存高于 1MB的空间; boot.c的主要作用是将内核的可执行代码 从硬盘镜像中读入到内存中。

系统的启动(续) ELF文件头 .text节:可执行指令的部分 .rodata节:只读全局变量部分 .stab节:符号表部分 .stabstr节:符号表字符串部分 .data节:可读可写的全局变量部 分 .bss节:未初始化的全局变量部 分,这一部分不会在磁盘有存储 空间,因为这些变量并没有被初 始化,因此全部默认为0,于是 在将这节装入到内存的时候程序 需要为其分配相应大小的初始值 为0的内存空间 .comment节:注释部分,这一 部分不会被加载到内存

系统的启动(续) ELF文件头的数据结构 struct Elf { uint32_t e_magic; // 标识文件是否ELF文件 uint8_t e_elf[12]; // 魔数和相关信息 uint16_t e_type; // 文件类型 uint16_t e_machine;// 针对体系结构 uint32_t e_version; // 版本信息 uint32_t e_entry; // Entry point 程序入口点 uint32_t e_phoff; // 程序头表偏移量 uint32_t e_shoff; // 节头表偏移量 uint32_t e_flags; // 处理器特定标志 uint16_t e_ehsize; // 文件头长度 uint16_t e_phentsize;// 程序头部长度 uint16_t e_phnum; // 程序头部个数 uint16_t e_shentsize;// 节头部长度 uint16_t e_shnum; // 节头部个数 uint16_t e_shstrndx; // 节头部字符索引 }; ELF文件头的数据结构 e_entry是可执行程序的 入口地址 e_phoff和e_phnum可以 用来找到所有的程序头表 项 e_phoff是程序头表的第 一项相对于ELF文件的开 始位置的偏移 e_phnum则是表项的个数 e_ shoff和e_ shnum可以 用来找到所有的节头表项

系统的启动(续)

系统的启动(续) Step #0 Boot loader

系统的启动(续) Step #1 Enter Protected Mode

系统的启动(续) Step #2 Load the kernel binary

系统的启动(续) Step #3: Initialize Kernel VM

系统的启动(续) Step #4: Kernel Running

系统的启动(续) Step #5 User Process Running

实验代码框架 \bootloader \utils \app Makefile 引导程序代码 相关工具 用户程序(你的操作系统) 编译文件方案

实验框架代码(续)

实验攻略(伪) 实模式到保护模式 关中断 定义 GDT 数据结构 打开 A20地址线 加载 GDT 描述符 置 cr0 寄存器的 PE 位为1 长跳转进入保护模式代码

实验攻略(伪) 怎么显示字符 回忆一下 C 语言的地址操作, 尝试用 C 语 言修改显存输出字符

实验攻略(伪) ELF 文件解析 完成之后你就可以从此告别引导程序啦 读 ELF 头的程序头偏移大小和数量 读各个程序头的程序文件偏移和大小及物理偏移 和大小 写入内存 跳转程序入口运行 完成之后你就可以从此告别引导程序啦

实验攻略(伪) 用户程序 实现一个简单的库函数--自定义print asm()? 内存地址操作?

实验攻略(伪)