3.1 操作系统启动过程
目录
3.1.1 BIOS和主引导记录MBR
计算机刚刚加电时处于实模式
-
实模式(实地址模式,REAL MODE)
- 程序按照8086寻址方法访问0h——FFFFFh(1MB)空间
- 寻址方式:物理地址(20位)= 段地址:偏移地址。
- CPU单任务运行
-
保护模式(内存保护模式,PROTECT MODE)
-
寻址方式:段(32位)和偏移量(32位),寻址4GB空间
-
段的属性:起始地址,存取属性,权限级别,…
-
段页式寻址机制(段,页)
-
虚拟地址,进程,封闭空间
-
应用程序和操作系统的运行环境都被保护
-
CPU支持多任务
-
实模式存取的1M空间
■前面640K【00000–9FFFF】:基本内存
■中间128K【A0000–BFFFF】:显卡显存
■末尾256K【C0000–FFFFF】:BIOS
C0000–C7FFF:显示卡BIOS
C8000–CBFFF:IDE控制器BIOS
F0000-FFFFF:最后64KB,系统BIOS
系统BIOS
-
Basic I/O System(Firmware,固件)
- 基本输入/输出系统
- 位置:F0000-FFFFF
- 功能
- 系统启动配置
- 基本的设备I/O服务
- 系统的加电自检和启动
-
基本的设备I/O服务
-
加电自检POST
-
Power On Self-Test(加电自检)
-
初始化基本硬件
- CPU,内存,显卡
-
自检正常不提示,错误则通过喇叭提示
-
-
按下PowerOn或者Reset键执行第1条指令
-
执行**FFFF0**处的指令
↑ JUMP POST ; POST位于系统BIOS内部
-
-
POST之后
-
查找显卡BIOS,调用显卡BIOS;
-
依次查找其它设备执行相应设备的BIOS;
-
显示启动画面
-
从硬盘/软盘/光驱/U盘读入OS
-
OS启动后,接管计算机
-
主启动记录MBR
-
MBR
-
存放在硬盘/软盘的首扇区
-
存放和OS启动的相关信息(Main Boot Record)
-
512 BYTES
-
结束:0xAA55h
-
-
MBR/硬盘分区/格式化
-
BIOS和MBR程序运行过程
BIOS中断是INT XXh的形式,例如INT 13H是磁盘读写服务。那么INT 21H与这些BIOS中断的机制是不是一样的呢?
答:有区别的。相同点它们应该都属于内中断,不同点,INT 21H为dos中断调用命令,dos为磁盘操作系统,需要安装后才能使用,而BIOS中断是主板中预装好的系统。而且BIOS中断是基层的,INT 21H应该处于BIOS中断的上层。
简单来说,可以把BIOS理解为游戏主板的开机键,而DOS则是手柄控制程序,INT 21H
则当作是手柄上三角键控制的功能,开机相当于为手柄控制程序调用功能,即BIOS为DOS调用系统功能,不开机的话,手柄任你怎么按是没有反应的,所以我认为可以把BIOS和DOS理解为上下层,在开机的情况下,手柄才能够调用主板中的信息来实现基本的操作,从而让手柄上的三角键实现功能,从实际里来讲,BIOS和DOS也一样,DOS是安装在计算机中才能够使用的程序,INT 21H 指的是DOS程序的中断调用命令,而BIOS则是主板中预装好的系统,目的就是让DOS程序与一些软件提供使用IBM PC兼容机上的BIOS功能,所以机制一样,但是本质上来讲还是有很大区别的
3.1.2 操作系统启动过程
启动过程
-
从加电到用户工作环境准备好的过程
-
初始引导
目的 把OS核心装入内存并使之开始工作接管计算机系统
过程
-
加电,JUMP POST
-
…BIOS中的启动程序运行
-
启动程序
-
读取0面0道第1扇区内容(MBR)
-
加载MBR中的引导程序
-
-
引导程序
- 根据相关参数,读取硬盘指定位置的文件到内存
- 加载硬盘上OS内核,并初始化基本参数
-
-
-
核心初始化
目的 OS内核初始化系统的核心数据
典型工作
- 各种寄存器的初始化
- 存储系统和页表初始化
- 核心进程构建
- …
-
系统初始化
-
为用户使用系统作准备,使系统处于待命状态。
-
主要工作
-
初始化文件系统
-
初始化网络系统
-
初始化控制台
-
初始化图形界面
-
-
Windows和Linux的启动过程
Linux登录过程
操作系统的初始引导过程涉及哪些程序模块,各自存放的介质是什么,存放的形式是什么?
答: 1.加电自检程序POST 存放在系统BIOS内 固件形式
2.启动程序 存放在BIOS中 二进制程序形式
3.MBR 位于硬盘/软盘的0面0道第一扇区 文件形式
4.引导程序 在MBR中 软件形式
5.OS内核 硬盘 文件形式
3.2 操作系统生成
- 操作系统的生成
- 满足特定硬件环境和用户需要,组装和构建操作系统过程。
- 操作系统生成的主要步骤
- 根据硬件环境/用户要求配置功能模块和构造参数
- 构建(build)OS的映像操作
- 系统的生成的前提
- 操作系统由可拆装模块构成
- 有交互式配置工具
- 有映像构建(build)工具
Linux操作系统的生成
-
获取Linux内核的源代码
- http://www.kernel.org/
- # cd/usr/src
# tar zxvf linux-2.6.38-12.tar.gz
-
选择和启动内核配置程序
- # cd/usr/src/linux-2.6
# make config(文本界面,不推荐使用)
# make xconfig(图形窗口模式,xWindow使用)
# make menuconfig(文本选择界面,字符终端)
- # cd/usr/src/linux-2.6
-
根据需要配置内核模块和参数
等等…
-
重新编译新的内核
# make dep生成依赖dependency信息
# make clean清除旧的编译结果
# make bzlmage./arch/i386/boot/bzlmage -
编译和安装模块
# make modules
# make modules_install模块被编译且安装到/usr/lib/<内核版本号>目录下。
-
启动新内核
- 拷贝文件: cp bzlmage/boot/bzlmage
- GRUB (使用grub工具)
- 配置/boot/grub/grub.conf
- 配置/boot/grub/grub.conf
make menuconfig的作用什么?它产生的最终结果是什么?或者说它输出什么?它是编译命令吗?
答:作用:启动一个内核的功能模板的选择界面 结果:进入一个文本的选择界面 不属于编译命令,控制台所起的作用仅是组织和管理命令
3.3 用户界面
3.1 用户界面概念
操作界面:比如文件浏览器 /命令行界面等等
-
图形用户接口(CUI)
-
键盘命令(Command)
-
普通命令
-
批处理程序
-
shell
-
-
DOS典型命令
- Linux命令
- 批处理
格式:for /参数 %%变量 in(集)do 命令
/1:表示参数是一个序列(是字母L的小写)
Set:设置变量
-
Shell
-
Linux操作系统与用户交互的界面,通过控制台执行用户命令
-
Shell本身不执行命令,仅仅组织和管理命令
-
-
Bash的主要功能
-
命令行编辑功能
-
命令和文件名补全功能 使用Tab键
-
命令历史功能 上下方向键浏览, $ history 查看
-
命令别名功能
-
提供作业控制功能
-
管道与重定向
-
将命令输出重定向到文件
-
将标准输出重定向到文件
$ Is/etc/ > etcdir.log -
将标准输出重定向追加到文件
$ Is/etc/sysconfig/ >> etcdir.txt -
将错误输出重定向到文件
$ nocmd 2> errfile.log
-
-
管道 : 特殊的重定向操作
-
管道操作符 |
-
“|”符用于连接左右两个命令,将“|”左边命令的执行结果(输出)作为“|”右边命令的输入
如: CMD1 | CMD2
在同一条命令中可以使用多个“I”符连接多条命令
-
-
-
-
具有将命令序列定义为功能键的功能
-
Shell脚本编程
-
3.3.2 shell脚本编程
-
脚本(Script)通过类似程序的方式执行具有一定逻辑顺序的命令序列完成较复杂的功能和人机交互。
-
脚本程序保存在文本文件中;
-
脚本程序是Shell命令语句的集合;
-
所有命令逐行执行(按逻辑)。
-
凡是能够在shel直接执行的命令,都可以在脚本中使用。口脚本中还可以使用一些不能在shell下直接执行的语句。
-
-
-
Shell脚本程序由Shel环境解释执行;
-
执行Shell脚本文件需要具有可执行属性(x)
- Chmod +x MyScript.sh
-
脚本例子
运行脚本程序的三个方法
-
方法1:直接运行(用缺省版本的shell运行脚本程序)
-
方法2:使用某个特定版本的Shell执行脚本
$ bash first_script
- 指定一个特定shell版本(此例是bash)来执行该脚本
- first_script逐行执行脚本中的命令并依次输出结果。`
- 当脚本文件中的命令依次执行完毕,该临时子shel也自动结束运行,返回到用户原来使用的shell状态。
-
方法3:在脚本文件首行指定shell
- 在脚本开头增加一行:
# !/bin/bash
——#必须顶格,后接shell全路径 - 可从/etc/shell获知所有可用shel及其绝对路径。
- 在脚本开头增加一行:
Linux的Shell能否看成操作系统的内核功能?如何理解Shell与内核之间的交互?
答:不能。Shell可以看作是用户和操作系统信息交互的中间桥梁。用户通过Shell将命令下达给操作系统,操作系统通过Shell将需要展示给用户的信息返回,Shell本身不执行命令,仅仅是组织和管理命令。
3.4 系统调用
逐行执行脚本中的命令并依次输出结果。`
- 当脚本文件中的命令依次执行完毕,该临时子shel也自动结束运行,返回到用户原来使用的shell状态。
- 方法3:在脚本文件首行指定shell
- 在脚本开头增加一行:
# !/bin/bash
——#必须顶格,后接shell全路径 - 可从/etc/shell获知所有可用shel及其绝对路径。
- 在脚本开头增加一行:
Linux的Shell能否看成操作系统的内核功能?如何理解Shell与内核之间的交互?
答:不能。Shell可以看作是用户和操作系统信息交互的中间桥梁。用户通过Shell将命令下达给操作系统,操作系统通过Shell将需要展示给用户的信息返回,Shell本身不执行命令,仅仅是组织和管理命令。
3.4 系统调用
例1:Linux两个整数相加:函数add()
# include <stdio.h>
int add(int a, int b){
return(a+b);
}
int main(void){
int sum=add(100,300);
}
例2 DOS:21h中断显示字符串(09号功能)
string DB 'Hello' :定义要显示的字符串
...
MOV DX,string :DX 字符串地址
MOV AH,09h :AH 09h号子共嗯那个
INT 21h
特点:09号功能涉及外设(显卡)操作
系统调用的定义
-
特点
- 一般涉及核心资源或硬件的操作运行于核态。
- 每个系统调用具有唯一的编号:ID
- 调用过程中会产生自愿中断
-
系统调用中断过程
-
DOS使用INT 21h中断实现系统调用 (利用AH寄存器存放系统调用的编号)
-
Linux使用INT 80h中断实现系统调用 (利用EAX寄存器存放系统调用的编号)
-
高级语言使用隐式系统调用
- 系统调用工作原理
小结
本节重点:
- 系统启动过程发生了什么?BIOS和MBR发挥了什么作用?
- Linux系统的生成与Shell