操作系统概述

一、什么是操作系统

1.1 定义  

用户角度上(对上):为应用程序提供服务,是一个控制程序,能够管理应用程序,如:限制不同应用占用不同资源;为应用程序提供不同服务,如:IO服务、声卡网卡服务;

内部程序角度(对下):资源管理,管理外设、分配资源

1.2 功能

操作系统将CPU<——>进程,磁盘<——>文件,内存<——>地址空间,通过这种抽象(虚拟化)来给应用程序使用。

clip_image001_thumb_thumb_thumb

1.3 层次

操作系统为系统软件,直接面向硬件,给上面的程序提供服务接口。因此它的架层次结构在硬件之上,应用程序之下。

1.4 组成

操作系统层次的软件有两层,一层面向应用程序,称作Shell(外壳),另一层面向计算机内部资源,成为Kernel(内核),在Shell之下。Kernel — 操作系统内部组件包括,CPU调度器、物理内存管理、虚拟机内存管理、文件系统管理、中断处理和设备驱动

1.5 OS Kernel特征

并发:计算机系统中同时存在多个运行的程序,需要OS管理和调度

     并发:在一段时间内有多个程序可以运行

     并行:在一个时间点上有多个程序可以运行

共享:“同时”访问,互斥共享

虚拟:利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务

异步:程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知,但只要运行环境相同,OS需要保证程序运行的结果也要想同

二、操作系统的启动

2.1 启动涉及的基本程序

BIOS,在一块只读的内存,具有基本输入输出的程序、系统设置信息、开机自检程序、系统自启动程序等,主要功能是在计算机接通电源之后,能够让计算机系统能够开始检测各种外设;

Bootloader:加载OS,能够让OS从硬盘加载到内存中去,让CPU执行操作系统,一般在硬盘中第一个扇区,大小为512字节。

2.2 启动过程

电源启动 ——>CPU从固定地址开始执行BIOS(自检,若外设均能正常执行,就将BootLoader从硬盘的引导扇区加载到内存地址为0x7c00)——>跳转到BootLoader地址开始执(将OS代码和数据从硬盘中读到内存中)——>跳转到操作系统的起始地址(计算机管理就交给操作系统了)

2.2.1 CPU初始化

CPU加电稳定后从0XFFFF0读第一条指令;

CPU初状态是16位实模式;

注:0XFFFF0计算方式:CS:IP是16位寄存器,最大地址空间是1MB,此时地址计算是PC = 16*CS+IP,即CS左移四位,加上当前指令指针,此时最大地址空间是 1MB(2^20)。CS(代码段寄存器) :IP(指令指针寄存器)=0Xf000:fff0;第一条指令是跳转指令,跳转到BIOS执行

2.2.2 BIOS执行过程

BIOS初始化硬件——>(主引导扇区)BIOS读取主引导扇区代码(主引导记录:一台计算机,这里一个磁盘或硬盘会进行分区,而不同的区可能装不同操作系统。因此在这里加上主引导记录,这个记录的作用是表示要从哪个文件系统去读加载程序)——>(活动分区)主引导扇区代码读取活动分区的引导扇区代码(通过主引导记录进入分区后,分区中又有一个引导扇区,执行这个引导扇区的代码)——>(加载程序)通过引导扇区代码读取文件系统的加载程序

BIOS初始化:

硬件自检POST;

检测系统中内存和显卡等关键部件的存在和工作状态;

查找并执行显卡等接口卡的BIOS,进行设备初始化;

执行系统BIOS,进行系统检测;

更新CMOS中的扩展系统配置数据ESCD;

按指定启动顺序从软盘、硬盘或光驱启动;

主引导记录MBR格式:

clip_image002_thumb_thumb_thumb

启动代码(446字节):检查分区表正确性;加载并跳转到磁盘上的引导程序

硬盘分区表(64字节):描述分区状态和位置;每个分区描述信息占据16字节

结束标志字(2字节):55AA,主引导记录的有效标志;

分区引导扇区格式:

clip_image003_thumb_thumb_thumb

跳转指令:跳转到启动代码

文件卷头:文件系统描述信息

启动代码:跳转到加载程序(这段代码在硬盘上的,可改的,因此可以将OS数据放在任何扇区)

结束标志:55AA

2.2.3 加载程序BootLoader

从文件系统中读取启动配置信息(加载程序)——>可选的操作系统内核列表和加载参数(启动菜单)——>依据配置加载指定内核并跳转到内核执行(操作系统内核)

2.3 系统启动规范

BIOS规范:固化到计算机主板上的程序;包括系统设置、自检程序和系统自启动程序;BIOS-MBR、BIOS-CPT(全局唯一标识分区表)BIOS硬盘分区表只有64字节只能描述4个分区,而通过全局分区表就能描述更多的分区、PXE(网络启动标准)

UEFI规范:接口标准;在所有平台上一直的操作系统启动服务

问题:这里为什么BIOS不直接将操作系统内核读入内存,而是将加载器读入内存?

首先磁盘上有文件系统,文件系统是多种多样的。在机器出厂时,不能限制磁盘去只用某种文件系统,而BIOS不可能去识别支持所有文件系统程序。因此为了灵活性,就通过加载程序读OS。

三、中断、异常和系统调用

3.1 操作系统如何与设备和程序交互

其主要与操作系统的interface设计有关,面对外设,通过中断和IO进行处理;面对应用程序,通过系统调用,异常提供相应功能。

系统调用(来源于应用程序):应用程序主动向操作系统发出服务请求。需要操作系统提供服务支持;

异常(来源于不良的应用程序):非法指令或者其他坏的处理状况;

中断(来源于外设):来自不同的硬件设备的计时器和网络的中断;

3.2 设计原因

计算机系统启动后,会加载操作系统内核,操作系统内核是可以被信任的第三方;

只有内核可以执行特权指令;

方便应用程序;

3.3 中断、异常和系统调用解决的问题

中断:当通过外设输入指令时,系统可能正在进行其他操作,没办法进行相应。所以提供中断机制,当外设与系统有交互的时候,系统会通过此机制处理

异常:当程序(意外)出错时,将错误交给操作系统处理

系统调用:通过系统调用为用户提供相应接口,同时这些接口不会影响系统安全

内核的进入与退出:

clip_image004_thumb_thumb_thumb

3.4 响应方式

中断:异步

异常:同步(产生异常,处理异常)

系统调用:异步或同步(应用程序发出系统调用请求,如果程序一直等待内核反馈处理结果,就是同步;如果程序不等待结果去接着执行其他事,等内核返回结果后再回来获取结果,就是异步)

3.5 处理机制

中断:持续,对用户程序是透明的

异常:杀死或者重新执行意想不到的应用程序指令

系统调用:等待或持续

3.6 中断和异常处理机制(硬件和软件相结合)

当某个外设事件产生一个中断或内部事件产生一个异常,这时要知道是由哪个服务例程去处理这个中断或异常。它是通过中断向量表查询的(中断向量表是entry结构,一侧是中断号,异常号,不同事件编号不同,这些编号对应不同地址,这些地址就是处理中断或异常的服务例程的起始地址)

中断目的: 中断是为了打断CPU目前正在执行的程序,转而处理其他更紧急的程序。因此它有一个保护-恢复机制。

3.6.1 硬件处理

在CPU初始化时设置中断使能标志(在CPU未准备好之前,无法处理硬件设备的交互信息,所以需要设置CPU使能标志,表示CPU是否准备好);

依据内部或外部事件设置中断标志(外部设备或内部事件向CPU发出中断信号,CPU对事件标识,表示产生了异常或中断,由这个信号得到异常号或中断号);

依据中断向量调用相应中断服务例程 或异常处理例程;

3.6.2 软件处理

中断_软件处理:

保存当前处理状态;

执行中断服务例程处理;

清除中断标记(服务例程);

恢复之前保存的处理状态;

(由于保护-恢复机制,因此用户感受不到中断的产生)

异常_软件处理:

保存现场;

异常处理;

1、处理程序是杀死产生了异常的程序,退出执行

2、异常产生的原因操作系统可以弥补(如资源不够),处理程序是让操作系统进行弥补工作,然后恢复现场,这时就已经没有异常了

恢复现场;

3.7 系统调用

应用程序需要操作系统提供服务,这些服务,不能由程序直接执行,必须要操作系统执行,这时就需要操作系统提供相应接口,这些接口就是系统调用接口

用户态和内核态:它表示程序执行过程中,CPU所处于的一种状态。用户态特权级低,CPU不能直接访问某些特殊的机器指令和IO;内核态表示操作系统运行过程中,CPU处于的状态,此时CPU能访问任何一条指令。一个应用程序执行,会经过从用户态到内核态的反复转换。

3.8 系统调用和函数调用的区别

当应用程序发起函数调用的时候,其实是在一个栈空间完成了函数参数的传递和参数返回;但系统调用执行过程中,应用程序和操作系统内核实际拥有各自的堆栈。即当应用发出系统调用之后,切换到内核态执行,实际上是切换到操作系统的堆栈,同时也切换了特权级。这种切换需要一定开销,所以系统调用开销比函数调用大。

3.9操作系统带来的开销

操作系统通过中断、异常和系统调用,和应用程序以及外设进行交互,这种交互过程实际跨越了操作系统和外设,操作系统和应用程序的边界。这种跨越是有代价的,

在执行时间上的开销超过程序调用。其开销:

1、建立中断、异常、系统调用号与对应服务例程映射关系的初始化开销

2、建立内核堆栈

3、操作系统是不信任应用程序的,因此会对参数进行校验

4、内核态切换到用户态实际是内存的拷贝,会有开销。内核态映射到用户态的地址空间,更新页面映射权限

5、内核态独立地址空间

6、每次退出内核态,都会对当前状态进行保存,再次进入时又需要恢复

posted @ 2020-03-18 23:46  Aidan_Chen  阅读(216)  评论(0编辑  收藏  举报