1.2.1 并发
1.2.1.1 并行与并发
并行性:两个或多个时间在同一时刻发生。并发性:两个或多个事件在同一时间间隔内发生。 在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行 在单处理机系统中,每一时刻仅能有一道程序执行,故微观上这些程序只能是分时地交替执行1.2.1.2 引入进程
在一个未引入进程的系统中,在属于同一个应用程序的计算程序和I/O程序之间只能是顺序 执行。但在为计算程序和I/O程序建立进程后,这两个程序便可并发执行。 所谓进程,是指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。1.2.2 共享
OS环境下的资源共享或称为资源复用,是指系统中的资源可供内存中多个并发执行的进程共同使用。这里在宏观上既限定了时间(进程在内存期间),也限定了地点(内存)。这时系统中的资源远少于多道程序需求的总和,会形成它们对共享资源的争夺。实现资源共享的两种方式
互斥共享方式
系统中的某些资源,如打印机、磁带机等,虽然可以提供给多个进程(线程)使用,但应规定在一段时间内,只允许一个进程访问该资源。同时访问方式
还有一些资源,允许在一段时间内由多个进程"同时"对它们进行访问。 并发和共享是多用户(多任务)OS的两个最基本的特征。它们又是互为存在的条件。即一方面资源共享是以进程的并发执行为条件的,若系统不允许并发执行也就是不存在资源共享问题;另一方面,若系统不能对资源共享实施有效管理,以协调好诸进程对共享资源的访问,也必然会影响到诸进程间并发执行的程度。1.2.3 虚拟
一个物理实体映射为若干个对应的逻辑实体——分时或分空间
虚拟是操作系统管理系统资源的重要手段,可提高资源利用率
CPU——每个进程的"虚处理机" 存储器——每个进程都有独立的虚拟地址空间(代码+数据+堆栈) 显示设备——多窗口或虚拟终端1.2.4 异步
操作系统必须随时对以不可预测的次序发生的时间进行响应并处理。 进程的运行速度不可预知:多个进程并发执行,“走走停停”,无法预知每个进程的运行推进的快慢难以重现系统在某个时刻的状态(包括重现运行中的错误)1.3.1 处理机管理功能
进程控制
为作业创建进程、撤销已结束的进程,以及控制进程在运行过程中的状态转换。进程同步
为多个进程(含线程)的运行进行协调。进程通信
实现相互合作进程之间的信息交换。调度
作业调度:从后备队列中按照一定的算法选择出若干个作业,为它们分配运行所需的资源,在将这些作业调入内存后,分别为它们建立进程,使它们都成为可能获得处理机的就绪进程,并将它们插入就绪队列中。 进程调度:从进程的就绪队列中按照一定的算法选出一个进程,将处理机分配给它,并为它设置运行线程,使其投入执行。1.3.2 存储器管理功能
存储器的主要任务,是为多道程序的运行提供良好的环境,提高存储器的利用率,方便用户的使用,并能从逻辑上扩充内存。内存分配
主要任务: 1.为每道程序分配内存空间,使它们"各得其所"。
2.提高存储器的利用率,尽量减少不可用的内存空间(碎片)
3.允许正在运行的程序申请附加的内存空间,以适应程序和数据动态增长的需要。
两种方式:
1.静态分配方式:每个作业的内存空间是在作业装入时确定的,在作业装入后的整个运行期间不允许改作业再申请新的内存空间,也不允许作业在内存中"移动"。
2.动态分配方式:每个作业所要求的基本内存空间虽然也是在装入时确定的,但允许作业在运行过程中继续申请新的附加内存空间,以适应程序和数据的动态增长,也允许作业在内存中"移动"。
内存保护
确保每道用户程序都仅在自己的内存空间内运行,彼此互不干扰。绝不允许用户程序访问操作系统的程序和数据,也不允许用户程序转移到非共享的其它用户程序中去执行。 一种比较简单的内存保护机制时设置两个界限寄存器,分别用于存放正在执行程序的上界和下界。在程序运行时,系统须对每条指令所要访问的地址进行检查,如果发生越界,便发出越界中断请求,以停止程序的执行。地址映射
在多道程序环境下,由于每道程序经编译和链接后所形成的可装入程序其地址都是从0开始的,但不可能将它们从"0"地址(物理)开始装入内存,致使(各程序段的)地址空间内的逻辑地址与其在内存空间中的物理地址并不相一致。为保证程序能正常运行,存储器管理必须提供地址映射功能,即能够将地址空间中的逻辑地址转换为内存空间中与之对应的物理地址。该功能应在硬件的支持下完成。内存扩充
内存扩充并非是从物理上去扩大内存的容量,而是借助于虚拟存储技术,从逻辑上扩充内存容量,使用户所感觉到的内存容量比实际内存容量大得多,以便让更多的用户程序能并发运行。为了能在逻辑上扩充内存,系统必须设置内存扩充机制(包含少量的硬件),用于实现下述各功能:
1.请求调入功能,系统允许在仅装入部分用户程序和数据的情况下,便能启动该程序运行。在程序运行过程中,若发现要继续运行时所需的程序和数据尚未装入内存,可向OS发出请求,由OS从磁盘中将所需部分调入内存,以便继续运行。 2.置换功能,若发现在内存中已无足够的空间来装入需要调入的程序和数据时,系统应能将内存中的一部分暂时不用的程序和数据调至硬盘上,以腾出内存空间,然后再将所需调入的部分装入内存。1.3.3 设备管理功能
设备管理的主要任务: 1.完成用户进程提出的I/O请求,为用户进程分配所需的I/O设备,并完成指定的I/O操作。 2.提高CPU和I/O设备的利用率,提高I/O速度,方便用户使用I/O设备。缓冲管理
如果在I/O设备和CPU之间引入缓冲,则可有效地缓和CPU和I/O设备速度不匹配的矛盾,提高CPU的利用率,进而提高系统吞吐量。还可通过增加缓冲区容量的方法来改善系统的性能。 最常见的缓冲区机制有:单缓冲机制、能实现双向同时传送数据的双缓冲机制、能供多个设备同时使用的公用缓冲池机制。设备分配
根据用户进程的I/O请求、系统现有资源情况以及按照某种设备分配策略,为之分配其所需的设备。设备处理
基本任务
用于实现CPU和设备控制器之间的通信,即由CPU向设备控制器发出I/O命令,要求它完成指 定的I/O操作;反之,由CPU接收从控制器发来的中断请求,并给与迅速的响应和反应的处理
处理过程
1.检查I/O请求的合法性,了解设备状态是否是空闲的,读取有关的传递参数及设置设备的方 式。
2.向设备控制器发出I/O命令,启动I/O设备完成指定的I/O操作。
1.3.4 文件管理功能
主要任务是对用户文件和系统文件进行管理以方便用户使用,并保证文件的安全性。文件存储空间的管理
为每个文件分配必要的外存空间,提高外存的利用率,进而提高文件系统的存、取速度。
目录管理
为每个文件建立一个目录项,并对众多的目录项加以有效的组织,以实现方便的按名存取。
文件的读/写管理和保护
文件的读/写管理
根据用户的请求,从外存中读取数据,或将数据写入外存。
文件保护
防止未经核准的用户存取文件防止冒名顶替存取文件防止以不正确的方式使用文件1.3.5 操作系统与用户之间的接口
用户接口(用户可通过该接口向作业发出命令以控制作业的运行)
联机用户接口——为联机用户提供
脱机用户接口——为批处理作业的用户提供 * 图形用户接口
程序接口
为用户程序在执行中访问系统资源而设置的,是用户程序取得操作系统服务的唯一途径。
3.1.1 中央处理器(CPU)
处理器由运算器、控制器、一系列的寄存器以及高速缓存构成两类寄存器
用户可见寄存器:高级语言编译器通过优化算法分配并使用之,以减少程序访问内存次数。
控制和状态寄存器:用于控制处理器的操作,通常由操作系统代码使用。
常见的控制和状态寄存器:
程序计数器:记录将要取出的指令的地址
指令寄存器:记录最近取出的指令
程序状态字:记录处理器的运行状态如条件码、模式、控制位等信息
3.1.2 操作系统的需求——保护
需要硬件提供基本运行机制:
* 处理器具有特权级别,<u>能在不同的特权级运行不同高度指令集合</u> * 硬件机制<u>可将OS与用户程序隔离</u>3.1.2 处理器的状态(模式MODE)
* 现代处理器通常将CPU状态设计划分为两种、三种或四种 * 在程序状态字寄存器PSW中专门设置一位,根据运行程序<font color=red>对资源和指令的使用权限</font>而设置不同的CPU状态。3.1.3 CPU的两种状态
* 内核态:运行操作系统程序 * 用户态:运行用户程序 特权指令:只能由操作系统使用、用户程序不能使用的指令
非特权指令:用户程序可以使用的指令
3.1.4 CPU状态之间的转换
用户态 —> 内核态
唯一途径 —> 中断/异常/陷入机制
内核态 —> 用户态
设置程序状态字PSW
3.2.1 概念
CPU对系统发生的某个事件作出的一种反应 CPU暂停正在执行的程序,保留现场后自动转去执行相应事件的处理程序,处理完成后返回断点,继续执行被打断的程序。 3.2.2 引入的原因
中断的引入
为了支持CPU和设备之间的并行操作
异常的引入
表示CPU执行指令时本身出现的问题
3.2.3 工作原理
硬件和软件相互配合而使计算机系统得以充分发挥能力
硬件——中断/异常响应
捕获中断源发出的中断/异常请求,以一定方式响应,将处理器控制权交给特定的处理程序
软件——中断/异常处理程序
识别中断/异常类型并完成相应的处理
3.2.4 中断向量表
1.中断向量
一个内存单元,存放中断处理程序入口地址和程序运行时所需的处理机状态字,执行流程按 中断信号/异常类型的不同,通过中断向量表转移控制权给中断处理程序。
2.中断响应流程
1.设备发中断信号
2.硬件保存现场
3.根据中断码查表
4.把中断处理程序入口地址等推送到相应的寄存器
5.执行中断处理程序
3.中断处理程序
* 设计操作系统时,为每一类中断/异常事件编号相应的处理程序,并设置好中断向量表。
系统运行时若响应中断,中断硬件部件将CPU控制权转给中断处理程序 * 保存相关寄存器信息 * 分析中断/异常的具体原因 * 执行对应的处理功能 * 恢复现场,返回被事件打断的程序 3.3.1 系统调用概述
系统调用:用户在编程时可以调用的操作系统功能,是操作系统提供给编程人员的唯一接口,使CPU状态从用户态陷入内核态。 3.3.2 系统调用机制的设计
1. 中断/异常机制——支持系统调用服务的实现
2.选择一条特殊指令:陷入指令——引发异常,完成用户态到内核态的切换
3.系统调用号和参数——每个系统调用都事先给定一个编号(功能号)
4.系统调用表——存放系统调用服务例程的入口地址
实现用户程序的参数传递给内核:由陷入指令自带参数:陷入指令的长度有限,且还要携带系统调用功能号,只能自带有限的参数 通过通用寄存器传递参数(常用):这些寄存器是操作系统和用户程序都能访问的,但寄存器的个数会限制传递参数的数量 在内存中开辟专用堆栈区来传递参数
3.3.3 系统调用的执行过程
当CPU执行到特殊的陷入指令时:
1> 中断/异常机制:硬件保护现场;通过查中断向量表把控制权转给系统调用总入口程序
2> 系统调用总入口程序:保护现场;将参数保存在内核堆栈里;通过查系统调用表把控制权 转给相应的系统调用处理例程或内核函数
3> 执行系统调用例程
4> 恢复现场,返回用户程序 在内存中开辟专用堆栈区来传递参数
3.3.3 系统调用的执行过程
当CPU执行到特殊的陷入指令时:
1> 中断/异常机制:硬件保护现场;通过查中断向量表把控制权转给系统调用总入口程序
2> 系统调用总入口程序:保护现场;将参数保存在内核堆栈里;通过查系统调用表把控制权 转给相应的系统调用处理例程或内核函数
3> 执行系统调用例程
4> 恢复现场,返回用户程序