操作系统的结构和硬件支持
操作系统虚拟机
定义:在裸机上配置了操作系统程序后就构成了操作系统虚拟机。操作系统的核心在裸机上运行;用户程序在扩充后的机器上运行。
操作系统虚拟机的指令系统
裸机的指令系统:机器指令
操作系统虚拟机的指令系统
- 操作命令(又称命令接口):作业控制语言,键盘命令,图形化用户界面
- 系统功能调用(又称程序接口)
操作系统的结构类型
单体结构
操作系统组织成一个过程(模块)集合,任一过程可以调用其它过程。操作系统无结构。代码执行效率比较高;规模扩大时,难以维护、调试;如UNIX、Linux;操作系统作为子例程为用户程序调用。
操作系统运行的组织结构:
模块化结构
操作系统由若干模块组合,早期操作系统采用这种结构设计方法。这种类型的操作系统由多个模块构成,各模块可相互调用。性能退化,易于维护、扩展;如CHOICES实验系统。
可扩展内核结构/微内核结构
微内核:最基本的核心功能(进程(线程)管理、低级存储器管理、中断和陷入处理)。
服务进程:文件服务、存储管理服务
操作系统:运行在核心态的微内核以及运行在用户态并以C/S方式活动的服务进程
优点:正确性、灵活性、易于维护性和可扩充性(稳定,易于维护,服务进程便于定制)
操作系统以客户/服务器形式为用户程序服务:内核把该消息传给服务器,服务器进程接受用户服务请求,内核用消息把结果返回给用户。
- 系统效率受到影响:消息发送、消息切换
操作系统运行的组织结构:
层次结构
特点:
- 层次结构的优点:整体问题局部化,系统的正确性可通过各层正确性来保证。增加、修改或替换层次不影响其他层次,有利于系统的维护和扩充。
- 层级结构是分层单向依赖的,必须要建立模块(进程)间的通信机制,系统花费在通信上的开销较大,系统的效率也就会降低。
实例操作系统的结构
UNIX操作系统的结构
- UNIX核心层:处理机管理、存储管理、设备管理、文件系统
- UNIX实用层:
- 实用程序——编辑程序、调试程序、系统状态监控、文件管理等实用程序
- 存储管理软件工具——源代码控制程序SCCS、文档准备程序包等
处理机的特权级
为什么要区分处理机的状态?
系统中两类程序的职责和区别
管理程序 | 用户程序 |
---|---|
管理系统资源 | 使用资源,提出申请 |
控制程序运行 | 被控制 |
区分处理机状态的目的:保护操作系统
处理机的状态及分类
-
什么是处理机的态:处理机的态,又称为处理机的特权级,是中央处理机的工作状态。当前处理机正在执行哪类程序,决定处理机的态。
-
处理机状态的分类:
-
管态
又称为系统态,是操作系统的管理程序执行时机器所处的状态,又称处理机的特权级。在此状态下处理机可使用全部指令(包括一组特权指令);使用全部系统资源(包括整个存储区域)。
-
用户态
又称为目态,是用户程序执行时机器所处的状态称为用户态。在此状态下禁止使用特权指令,不能直接取用资源与改变机器状态,并且只允许用户程序访问自己的存储区域。
-
有的系统还将管理程序执行时的机器状态进一步分为核态和管态,这时核态具有上述管态所具有的所有权限。管态的权限发生变化,管态允许使用一些在用户态下所不能使用的资源,但不能使用修改机器的状态指令。而无核态的系统,管态执行核态的全部功能。管态比核态权限要低,用户态更低。
管态 | 用户态 |
---|---|
操作系统的程序执行 | 用户程序执行 |
使用全部指令 | 禁止使用特权指令 |
使用全部系统资源(包括整个存储区域) | 只允许用户程序访问自己的存储区域 |
-
处理机状态的特权指令集
- 涉及外部设备的输入、输出指令
- 修改特殊寄存器的指令
- 改变机器状态的指令
-
处理器工作状态标识:通常操作系统都引入程序状态字PSW(Program Status Word)来区别不同的处理器工作状态。
-
处理器状态切换:
- 用户态转到核态:用户程序访问系统资源、中断、系统异常
- 核态转到用户态:执行用户程序
-
实例操作系统处理机的状态
- DOS系统:不分态
- Windows系统:3环 用户态 0环 系统态 1、2环预留
- UNIX系统(Linux系统) 00核态 01 管态 11 用户态
中断及其处理
中断的概念
所谓中断是指某个事件(例如电源掉电、定点加法溢出或I/O传输结束等)发生时,系统中止现行程序的运行、引出处理事件程序对该事件进行处理,处理完毕后返回断点继续执行的过程。
中断类型
-
按中断功能分类
- 输入输出中断:如 I/O传输结束或出错中断
- 外中断:如时钟中断、操作员控制台中断、通信中断等
- 机器故障中断:如电源故障、主存取指令错等
- 程序性中断:如定点溢出、用户态下用核态指令、非法操作等
- 访管中断:对操作系统提出某种需求时所发出的中断
-
按中断方式分类
- 强迫性中断:不是正在运行的程序所期待的中断,如:输入输出中断、外中断、机器故障中断、程序性中断。
- 自愿中断:是运行程序所期待的事件,如:访管中断。
-
按中断来源分类
-
中断 由处理机外部事件引起的中断
-
俘获 由处理机内部事件引起的中断
-
中断与俘获的示例
-
中断响应(中断进入)
发现中断源并产生中断的硬件称为中断装置。
所有计算机系统都采用硬件和软件结合的方法实现中断处理。
-
保护现场和恢复现场
- 现场:在中断的那一时刻能确保程序继续运行的有关信息。后继指令所在主存的单元号,程序运行所处的状态,指令执行情况,程序执行的中间结果等。
- 保护现场:当中断发生时,必须立即把现场信息保存在主存中,这一工作称为保护现场。
- 恢复现场:程序重新运行之前,把保留的该程序现场信息从主存中送至相应的指令计数器、通用寄存器或一些特殊的寄存器中。完成这些工作称为恢复现场。
-
程序状态字(PSW)
- 定义:反映程序执行时机器所处的现行状态的代码。
- 内容:指令地址、指令执行情况、处理机状态、应屏蔽的中断等
-
中断响应:中断响应是当中央处理机发现已有中断请求时,中止现行程序执行,并自动引出中断处理程序的过程
-
中断响应所需的硬件支持
-
中断响应过程:1.保留程序断点及处理机有关信息;2.自动转入相应的中断处理程序执行。
-
中断响应的实质:交换指令地址及处理机的状态信息
软件中断处理
当硬件完成了中断进入过程后,由相应的中断处理程序得到控制权,进入软件的中断处理过程。
软件的中断处理过程如图所示:
向量中断
定义:当中断发生时,由中断源自己引导处理机进入中断服务程序的中断过程称为向量中断。
中断向量:每类中断类型都有自己的中断向量,包含:中断服务例行程序的入口地址、处理器状态字。
中断向量表:主存中用于存放中断向量服务地址的一组存储单元组成的表。
Linux系统的特权级与中断处理
Linux系统的特权级
Linux系统使用两个级别(处理机提供四个特权级):
- 特权级0——核态(内核模式)
- 特权级3——用户态(用户模式)
Linux系统中断处理的上半部和下半部
1.为什么要区分上半部和下半部
- 为提高中断处理的效率,中断处理程序的执行必须快速、简洁。为此Linux系统将中断处理程序分为两部分。
- 将中断响应后必须立即处理的工作即可执行,这就是中断处理程序的上半部
- 将更多的处理工作向后推迟执行,这就是中断处理程序的下半部
2.中断处理程序的上半部
- 上半部是中断处理中有严格时间限制的工作,是关键而紧迫的部分
- 上半部的工作是不可被打断的,即在屏蔽所有中断的情况下进行的。如:与硬件设备应答或使硬件复位的工作
3.中断处理程序的下半部
- 下半部处理那些可以稍后完成的工作
- 下半部的执行是可以打断的,即是在开中断的情况下执行
中断处理下半部的实现机制
Linux系统中,用于实现将工作推后执行的内核机制称为“下半部机制”,下半部机制主要有tasklet和工作队列两种。
-
tasklet
tasklet通过软中断实现;一个软中断被标记后才能执行,称为触发软中断;待处理的软中断会在以下时机被检查和执行:1.从一个硬件中断返回时;2.在ksoftirqd内核线程中;3.在显示检查和执行待处理的软中断的代码中。
-
工作队列
-
工作队列机制将中断处理程序的下半部交给一个内核线程去执行。
-
下半部是在进程上下文(用户地址空间)执行,可以睡眠和被重新调度。
注:这一点与上述tasklet不同。如果下半部工作需要睡眠(如需要执行阻塞式I/O操作时,或要等待信号灯)时应选择工作队列机制,否则可选择tasklet机制。
-
工作者线程:该线程接收由各内核中断处理程序交给它的下半部。该线程是由内核线程实现。执行的函数是work_thread(),对应的数据结构是工作队列链表。
-
工作队列链表:由若干个work_struct结构组成
-
执行函数work_thread():执行一个死循环;若工作队列链表不为空时,执行链表上的所有工作。工作被执行完毕,它就将相应的work_struct对象从链表上移走;当链表为空时,它进入睡眠状态;当有下半部插入到队列时,函数是work_thread()被唤醒,将继续处理新加入的下半部。
-
作者:cherish.
出处:https://home.cnblogs.com/u/cherish-/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。