系统保护操作
来源:互联网 发布:上海python培训班 编辑:程序博客网 时间:2024/05/16 07:09
现在操作系统是中断驱动的。事件几乎是用中断或陷阱的发生来标记的。
陷阱(Trap)或者异常是由软件产生的中断,这个中断是由一个错误(例如除0运算或者无效内存访问)或者用户进程产生的一个操作系统调用请求产生的。
共享系统资源改善了利用率,但与此同时也带来了问题。如果没有保护来处理这些错误,那么计算机必须只能执行一个进程,否则所有输出值都值得怀疑。
一、双重模式操作
必须能区分系统代码和用户代码的操作。大多数操作系统采取的方法是提供硬件支持,以允许用户区分不同的执行模式。
至少需要两种独立的操作模式:用户模式和监督程序模式(也称系统模式或特权模式或者内核模式等)。通过在硬件上增加一个模式位来表明当前的操作模式。当电脑系统执行用户应用程序时,系统处于用户模式;当用户应用程序向操作系统请求一个服务时(通过系统调用),系统会从用户模式切换至监督程序模式以满足用户请求。
在系统引导时,系统处于监督程序模式,接着装入操作系统,然后切换至用户模式执行用户应用程序。一旦出现陷阱或者中断,系统从用户模式切换至监督程序模式。因此,系统在将控制权交给用户程序之前总是先切换到用户模式(将模式位置位)。
我们将可能引起错误的机器指令称为特权指令。系统仅允许在监督程序模式下执行特权指令。如果在用户模式下试图执行特权指令,那么硬件并不执行该指令,而是认为该指令非法,并将其陷入到操作系统中。常见的特权指令包含切换到用户模式的指令、I/O控制、时间管理和中断管理等。
由上可知,指令执行的生命周期如下:系统的初始化控制在操作系统中执行,这时候指令在监督程序模式下执行。当控制交给用户应用程序时,模式切换至用户模式。最后通过中断、陷阱或者系统调用切换回操作系统模式。
系统调用提供用户程序请求操作系统执行为操作系统保留的任务的途径。系统调用通常表现为陷阱的形式。这个陷阱可以被一般的陷阱指令所执行。当系统调用执行时,硬件将其视为一个软件中断。控制通过中断向量传递给操作系统中的服务程序,这个系统服务程序是操作系统的一部分。内核检索中断指令以确认发生了什么系统调用;其中的一个参数指明用户程序请求什么类型的服务;请求需要附加的信息可以通过寄存器、堆栈或者内存(内存地址指针可通过寄存器传送)来传递。监督程序检验参数是否正确、合法,然后执行请求,最后将控制权返回给系统调用之后的指令。
二、时间管理
定时器的周期可以是固定的或者是可变的。
一个可变的定时器通常是通过一个固定速率时钟和一个计数器来实现的。操作系统设置计数器值,计数器值在每个时钟周期递减,当计数值为0时产生中断。
在将控制权交给用户程序之前,操作系统应该确保设置好定时器中断。一旦产生定时器中断,控制权自动交给操作系统。操作系统可以将这个中断看成是一个致命的错误来处理,或者给予用户程序更多的执行时间。显然,用于修改定时器操作的指令是特权指令。
因此,可以使用定时器防止用户程序运行时间过长。一种简单方法是用程序所允许执行的时间长度来初始化计数器。
- 系统保护操作
- 普通文件转换为受系统保护的操作文件
- CGContextRef 堆栈保护操作
- 调用系统屏幕保护
- Windows系统文件保护
- 关闭系统文件保护
- Windows 系统文件保护
- win7中的系统保护
- 受到windows系统保护
- 保护系统的方法
- Java操作Excel:book保护
- 系统保护-如何保护好自己的系统
- linux系统内核空间保护
- hook ZwSetSystemTime 保护系统时间
- c64x+ DSP内存保护系统
- Windows 7 关闭系统保护
- 系统安全:利用命令行保护系统
- 高并发系统保护~ing
- 同步~异步~阻塞~非阻塞
- C++内存分区
- iOS使用SQLite编程
- 如何在项目中引入 #include .h、.lib、 .dll、.cpp
- poj 3580 Splay Tree 各种基本操作与实现
- 系统保护操作
- 最小-最大堆的实现
- -[NSDecimalNumber isEqualToString:]: unrecognized selector sent to instance
- 判断php数组是否索引数组
- 秒杀多线程系列
- Windows上多线程同步相关的MFC类(2)
- buffer cache深度分析1:概念以及内存结构
- hbase开发者命令和API
- 如何在Linux下安装启动多个Tomcat