初学ucore操统笔记(1)
来源:互联网 发布:ubuntu 16.04应用商店 编辑:程序博客网 时间:2024/04/30 07:25
1.BIOS启动过程
计算机加电时,不直接执行操作系统,而是执行系统初始化软件完成基本IO初始化和引导加载功能。
何为系统初始化软件?它是在操作系统内核运行之前运行的一段小软件。作用是(1)初始化硬件设备;(2)建立系统的内存空间映射图。达到将系统的软硬件环境带到一个合适的状态。最终引导加载程序把操作系统内核映像加载到RAM中,并将系统控制权传递给他。
计算机启动后,CPU一开始会到一个特定的地址开始执行指令,这个特定的地址存放了系统初始化软件。
以Intel 80386为例子,PC机中的系统初始化软件由BIOS和位于软盘/硬盘引导扇区中的OS Boot Loader一起组成。计算机加电后,CPU从物理地址起始处开始执行,但是此处只存了一条跳转指令,通过该指令跳转到BIOS例行程序起始点。BIOS完成计算机硬件自检和初始化后,会选择一个启动设备,并且读取该设备的第一扇区(即主引导扇区或启动扇区)到内存的一个特定的地址处,然后CPU继续运行,BIOS工作已经完成,下一步交给bootloader。
2.bootloader启动过程
bootloader完成的工作包括:
(1)切换到保护模式,启用分段机制
(2)读磁盘中ELF执行文件格式的ucore操作系统到内存
(3)显示字符串信息
(4)把控制权给ucore操作系统
2.1保护模式和分段机制
(1)实模式
在bootloader接受BIOS的工作后,PC系统出处于实模式运行状态,这种状态下软件可访问的物理内存空间不能超过1MB。
实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域。通过修改A20(见附录)地址线可以完成从实模式到保护模式的转换。
(2)保护模式
性能全开
(3)分段存储管理机制
只有在保护模式下才能使用分段存储管理机制。分段机制将内存划分成以起始地址和长度限制这两个二维参数表示的内存块,这些内存块称之为段(Segment)。
分段机制机涉及4个关键内容:逻辑地址,段描述符,段描述符集,段选择子(段寄存器,用于定位段描述符表中表项的索引)。
转换逻辑地址到物理地址分以下两步:
i)分段地址转换:CPU把逻辑地址中的段选择子的内容作为段描述符表的索引,找到表中对应的段描述符,然后把段描述符中保存的段基址加上段偏移值,形成线性地址。如果不启动分页存储管理机制,则线性地址等于物理地址。
ii)分页地址转换:线性地址-〉物理地址。
(4)保护模式下的特权级
在保护模式下,特权级总共有4个,编号从0(最高特权)到3(最低特权)。有3种主要的资源受到保护:内存,I/O端口以及执行特殊机器指令的能力。
2.2.地址空间
分段机制涉及5个关键内容:逻辑地址(即虚拟地址),物理地址(实际的物理内存地址),段描述符表,段描述符,段选择子。
(1)逻辑地址空间
从应用程序的角度看,逻辑地址空间就是应用程序员编程所用到的地址空间。
(2)物理地址空间
物理地址空间就是一个“大数组”,CPU通过索引(物理地址)来访问这个“大数组”中的内容。物理地址是指CPU提交到内存总线上用于访问计算机内存和外设的最终地址。
(3)线性地址空间
一台计算机只有一个物理地址空间,但在操作系统的管理下,每个程序员都认为自己独占整个计算机的物理地址空间。为了让多个程序员能够有效的相互隔离和使用物理地址空间,引入线性地址空间。
2.3.硬盘访问概述
访问bootloader并让CPU进入保护模式后,下一步就是从硬盘中加载并运行OS。为简单,bootloader访问硬盘都是LBA模式的PIO方式,即所有的IO操作是通过CPU访问硬盘的IO地址寄存器完成。
3.操作系统启动过程
当bootloader通过读取硬盘扇区把ucore在系统加载到内存后,就跳转到ucore操作系统在内存中的入口位置,这样ucore就接管了整个控制权。
3.1函数堆栈
3.2中断与异常
操作系统和CPU一起提供某种机制,让外设在需要操作系统处理外设相关事件的时候,能够“主动通知”操作系统,即打断操作系统和应用的正常执行,让操作系统完成外设的相关处理,然后再恢复操作系统和应用的正常执行。在操作系统中,这种机制称为中断机制。
在操作系统中,有三种特殊的中断事件。由CPU外部设备引起的外部事件如I/O中断,时钟中断,控制台中断等是异步产生的(即产生的时间不确定);与CPU执行指令期间检测到不正常的或非法的条件所引起的内部事件称作同步中断,也称内部中断,简称异常;把在程序中使用请求系统服务的系统调用而引发的事件,称作陷入中断,也称软中断。
- 初学ucore操统笔记(1)
- 初学ucore操统笔记(4)----内核线程管理
- 初学ucore操统笔记(5)--用户进程管理
- Ucore lab 1-8 总结(代码+报告)
- shell初学笔记(1)
- WCF初学笔记(1)
- 初学CSS笔记(1)
- JavaScript初学笔记(1)
- Android初学笔记(1)
- 初学wordpress笔记(1)
- 随想录(关于ucore)
- linux内核初学习笔记(1)
- 初学unity+metaio SDK笔记(1)
- os 课程自学笔记1(初学)
- php初学(1)--imooc笔记
- 初学JSP自定义标签笔记(1)
- 网上数据结构初学笔记(1)
- Oracle初学笔记(1)
- 同步/异步与阻塞/非阻塞的区别
- UIGestureRecognizer
- 从杂乱到有序并不简单--排序算法之一冒泡法
- 微软笔试题 统计英文电子书中出现次数最多的k个单词
- 最短路问题总结
- 初学ucore操统笔记(1)
- P1190 繁忙的都市(Kruskal)
- 黑马程序员_IO流(三)
- Linux学习笔记(三)
- poj1330 求二叉树的公共父节点
- Erlang/OTP并发编程实例(二)
- 我做的仓库管理系统
- Java反射机制的缺点
- CC2530与zigbee学习笔记の初识zigbee(2)