简称OS(Operation System) ,是管理计算机硬件与软件资源的计算机程序。
计算机系统构成
-
用户
-
应用程序
-
操作系统
-
硬件
OS 是一种系统软件
-
与硬件交互
-
对资源共享进行调度管理
-
解决并发操作处理中存在的协调问题
-
数据结构复杂,外部接口多样化,便于用户反复使用
OS 主要作用
-
管理与配置内存
-
决定系统资源供需的优先次序
-
控制输入设备与输出设备
-
操作网络与管理文件系统等
-
提供一个让用户与系统交互的操作界面
OS目标
-
有效性
-
提高系统资源利用率
-
提高系统吞吐量
-
方便性
-
可扩充性
-
开放性
OS 功能
-
作为计算机系统资源的管理者
-
处理器管理
-
进程控制
-
进程同步
-
进程通信
-
调度
-
存储器管理
-
内存分配
-
内存保护
-
地址映射
-
内存扩充
-
I/O设备管理
-
缓冲管理
-
设备分配
-
设备处理
-
文件管理
-
文件存储空间的管理
-
目录管理
-
文件的读/写管理和保护
-
作为用户与计算机硬件系统之间的接口
-
程序接口
-
命令接口
-
GUI(Graphical User Interface) 图形用户接口
-
实现了对计算机资源的抽象
-
将具体的计算机硬件资源抽象成软件资源,方便用户使用
-
开放了简单的访问方式,隐藏了实现细节
OS的四个基本特征
-
并发同一时间间隔内执行和调度多个程序的能力
-
宏观上,处理机同时执行多道程序
-
微观上,处理机在多道程序间高速切换(分时交替执行)
-
关注单个处理机同一时间段内处理任务数量的能力
-
共享即资源共享,系统中得资源供多个并发执行得应用程序共同使用(并发和共享互为存在条件)
-
同时访问方式:同一时段允许多个程序同时访问共享资源
-
互斥共享方式:也叫独占式,允许多个程序在同一个共享资源上独立而互不干扰的工作
-
虚拟使用某种技术把一个物理实体变成多个逻辑上的对应物
-
时分复用技术
-
空分复用技术
-
异步多道程序环境下,允许多个程序并发执行单处理机环境下,多个程序分时交替执行
-
程序执行的不可预知性
-
宏观行一气呵成,微观上走走停停
(并发相似概念:并行,同一时刻(时间点)发生的事件数量)
OS的发展与分类
-
手工操作阶段
-
人工操作方式
-
脱机输入/输出方式
-
批处理阶段
-
单道批处理系统
-
多道批处理系统
-
分时操作系统
-
实时操作系统
-
微机操作系统
操作系统的运行环境
-
操作系统的运行机制
基本概念
内核空间<--->用户空间
内核程序<--->应用程序
内核态 <--->用户态(程序状态字区分)
特权指令<--->非特权指令
-
时钟管理
-
计时:提供系统时间
-
时钟中断:比如进程切换,线程切换 (属于内中断)
-
中断机制
-
提高多道程序环境下CPU利用率
-
外中断:中断信号来源于->外部设备
-
内中断:中断信号来源于->当前指令
三种情况
-
陷入:由应用程序主动引发(CPU 产生指令)
-
故障:由错误条件引发
-
终止:由致命错误引发
-
中断处理过程(包括外中断,内中断)
-
产生一个中断
-
执行中断服务程序
-
中断返回继续执行
![](https://img-blog.csdnimg.cn/img_convert/0d3893631eebddcaad9c8ea5c9322f20.png)
原理:
int指令是X86汇编语言中最重要的指令之一。它的作用是引发中断,调用“中断例程”(interrupt routine)
指令原型:int n
注:1)n 表示中断号,也可以称为中断类型码。n是一个字节大小的正整数,范围为“0 - 255”。
2)执行“int n”时,CPU从中断向量表中,找到第n号表项,修改CS和IP
(IP)=(n*4),(CS)=(n*4+2)
3)对8086PC,中断向量表指定放在内存地址0处(地址固定),共1024个字节。每个表项占两个字,低字存放偏移地址,高字存放段地址。
int指令执行过程:
1)取中断类型码n;
2)标志寄存器入栈(pushf),IF=0,TF=0(重置中断标志位);
3)CS、IP入栈;
4)查中断向量表, (IP)=(n4),(CS)=(n4+2)。
中断例程的返回:用“iret”——中断返回指令
iret指令的汇编语法描述为:
popIP
popCS
popf
iret指令与int相对,它会恢复原始的CS和IP值,并恢复标志寄存器的值。
注: 中断发生以后,CPU跳到内核设置好的中断处理代码中去,由这部分内核代码来处理中断。这个处理过程中的上下文就是中断上下文。
几乎所有的体系结构,都提供了中断机制。当硬件设备想和系统通信的时候,它首先发出一个异步的中断信号去打断处理器的执行,继而打断内核的执行。中断通常对应着一个中断号,内核通过这个中断号找到中断服务程序,调用这个程序响应和处理中断。当你敲击键盘时,键盘控制器发送一个中断信号告知系统,键盘缓冲区有数据到来,内核收到这个中断号,调用相应的中断服务程序,该服务程序处理键盘数据然后通知键盘控制器可以继续输入数据了。为了保证同步,内核可以使用中止---既可以停止所有的中断也可以有选择地停止某个中断号对应的中断,许多操作系统的中断服务程序都不在进程上下文中执行,它们在一个与所有进程无关的、专门的中断上下文中执行。之所以存在这样一个专门的执行环境,为了保证中断服务程序能够在第一时间响应和处理中断请求,然后快速退出。
对同一个CPU来说,中断处理比进程拥有更高的优先级,所以中断上下文切换并不会与进程上下文切换同时发生。由于中断程序会打断正常进程的调度和运行,大部分中断处理程序都短小精悍,以便尽可能快的执行结束。
一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。
用户级上下文: 正文、数据、用户堆栈以及共享存储区;
寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);
系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈。
当发生进程调度时,进行进程切换就是上下文切换(context switch)。操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。而系统调用进行的是模式切换(mode switch)。模式切换与进程切换比较起来,容易很多,而且节省时间,因为模式切换最主要的任务只是切换进程寄存器上下文的切换。
中断上下文切换
-
中断会打断进程的正常调度和执行,转而调用中断处理程序,响应设备事件,而在打断其他进程时,就需要将进程当前的状态保存下来,这样再中断结束后,进程仍然可以从原来的状态恢复运行
-
中断上下文切换并不涉及到进程的用户态,即便中断过程打断了一个正在处理用户态的进程,也不需要保存和恢复这个进程的虚拟内存,全局变量等用户态资源。在发生中断时,内核就在被中断进程的上下文中(就相当于在同一个进程执行了cpu上下文切换,从该进程的用户态切换到内核态),在内核态下执行中断服务例程。但同时会保留所有需要用到的资源,以便中继服务结束时能恢复被中断进程 的执行。
-
对同一个CPU来说,中断处理比进程拥有更高的优先级,所以中断上下文切换并不会与进程上下文切换同时发生,同样由于中断会打断正常进程的调度和执行,所以大部分中断程序都短小精悍,以便快速执行结束
硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理,中断上下文就可以理解为硬件传递过来的这些参数和内核需要保存的一些环境,主要是被中断的进程的环境。
运行在进程上下文的内核代码是可以被抢占的(Linux2.6支持抢占)。但是一个中断上下文,通常都会始终占有CPU(当然中断可以嵌套,但我们一般不这样做),不可以被打断。正因为如此,运行在中断上下文的代码就要受一些限制,不能做下面的事情:
1、睡眠或者放弃CPU,这样做的后果是灾难性的,因为内核在进入中断之前会关闭进程调度,一旦睡眠或者放弃CPU,这时内核无法调度别的进程来执行,系统就会死掉;
2、尝试获得信号量 如果获得不到信号量,代码就会睡眠,会产生和上面相同的情况;
3、执行耗时的任务 中断处理应该尽可能快,因为内核要响应大量服务和请求,中断上下文占用CPU时间太长会严重影响系统功能;
4、访问用户空间的虚拟地址 因为中断上下文是和特定进程无关的,它是内核代表硬件运行在内核空间,所以在中断上下文无法访问用户空间的虚拟地址。
注意:中断上下文切换也会消耗CPU,切换次数过多会耗费大量CPU,降低系统整体性能
-
原语(原语运行在内核空间)
-
由若干条指令组成(是一个程序段)
-
用来完成某个特定功能
-
执行过程不会被中断(具有“原子性”,底层通过关中断,开中断 指令完成的)
-
系统数据结构(一般只涉及到对数据结构的操作,不涉及硬件)
-
进程管理:作业控制块,进程控制块
-
存储器管理:存储器分配与回收
-
设备管理:缓冲区,设备控制块
-
系统调用(系统调用的处理运行在核心态)
-
由操作系统实现,给应用程序调用
-
是一套接口的集合
-
应用程序访问内核服务的方式
2.操作系统体系结构
-
大内核(传统操作系统结构)
-
第一代:无结构OS
-
第二代:模块化结构OS
-
第三代:分层式结构OS
-
微内核
-
第四代:微内核结构
-
足够小的内核,只实现OS核心功能
-
与硬件处理紧密相关的部分,比如硬件处理,客户与服务器通信和其他基本功能
-
一级叫基本的功能
-
客户和服务器之间通信(客户/服务器模式)
-
应用“机制与策略分离”原理
-
采用面向对象技术