简介
操作系统是计算机体系结构、程序设计语言、数据结构、算法的综合性学科,而在操作系统中的CPU资源、IO资源的合理分配以及线程调度等重要概念有重要的思想,而操作系统是可以理解成是接近底层硬件资源管理的庞大软件,这对我们开发其他软件获取软件开发架构思想有着很大的启发。
操作系统的启动及基础概念
计算机基本组成
计算机基本组成由CPU、I/O、内存等组成
操作系统:一开始并没有加载到内存中而是存储在Disk中,然后由BIOS(基本IO处理系统)提供支持,BIOS在计算机通电开机后会执行检查外设,检查完外设后就可以加载指定的软件,除了OS存储在Disk以外还有bootloader,bootloader是负责加载OS,而bootloader是存储在Disk第一个引导扇区.
- BIOS会从将bootload从Disk的引导扇区(512字节)中加载到0x7c00地址的内存中,并跳转到CS:IP=0000:7c00(当跳转到这个地址时所有操作都由bootloader来掌控)
- bootloader将OS的代码和数据从Disk加载到内存中,并跳转到OS的起始地址(当跳转到这个地址时所有操作都由OS来掌控)
过程图解
基本概念
用户态、内核态
用户态:当应用程序在访问一些特权指令的时候,用户态不能直接访问一些特殊的机器指令或者不能直接访问IO
内核态:当操作系统在执行的过程中,内核态可以执行操作系统的任何一个指令
用户态的切换
当应用程序通过库(Library Code)或直接的调用系统调用接口(System Cell Interface),一旦访问了系统调用接口会触发从用户态切换到内核态的过程.
跨越操作系统边界的开销
在执行时间上的开销超过程序调用
开销主要包括:
1.建立中断/异常/系统调用号与对应服务例程映射关系的初始化开销
2.建立内核堆栈
3.验证函数参数
4.内核态映射到用户态的地址空间,更新页面映射权限
5.内核态独立地址空间 TLB
系统调用、异常、中断
1、系统调用(来源与应用程序):应用程序主动向操作系统发出服务请求
2、异常(来源不良的应用程序):非法指令或者其他坏的处理状态(比如内存出错)
3、中断(来源与外设):来自不同的硬件设备的计时器和网络中的中断
中断处理
在硬件方面:
设置中断标记【CPU初始化】
1、将内部、外部事件设置中断标记
2、中断事件的ID
在软件方面:
1、保存当前处理状态
2、中断服务程序处理
3、清除中断标记
4、恢复之前保存的处理状态
异常:异常编号
保存现场
异常处理
1、杀死产生了异常的程序
2、重新执行异常指令
恢复现场
有些异常是由于OS服务不到位导致的,所以需要产生异常,并且重新执行应用程序,此时OS将产生异常的原因修复好了就可以正常执行了
系统调用
有一些应用程序的操作需要系统来执行,所以在系统层面向上层应用程序暴露的接口(即系统调用接口)
比如:printf()会触发系统调用write()接口
系统调用API接口
Win32 API用于Windows
POSIX API用于POSIX-based systems (包括UNIX,LINUX,Max OS X的所有版本)
Java API用于Java虚拟机(JVM)
通常情况下,与每个系统调用相关的序号
1、系统调用接口根据这些序号来维护表的索引
系统调用接口调用内核中预期的系统调用
1、并返回系统调用的状态和其他任何返回值
用户不需要知道系统调用是如何实现的
1、只需要获取API和了解操作系统将什么作为返回结果
2、操作系统调用的细节大部分都隐藏在API中
3、通过运行程序支持的库来管理(用包含编译器的库来创建函数集)
区别
从源头区分
1、中断:外设
2、异常:应用程序意想不到的行为
3、系统调用:应用程序请求操作系统提供服务
从处理时间区分
1、中断:异步
2、异常:同步
3、系统调用:异步或同步
从响应区分
1、中断:持续,对用户应用程序是透明的
2、异常:杀死或者重新执行意想不到的应用重新指令
3、系统调用:等待和持续