操作系统结构
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编程人员利用系统调用,完成与机器硬件部分相关 的工作。用户就可以在程序中调用操作系统所提供 的一些子功能。
命令解释系统
命令解释系统(外壳,shell):是 OS的重要组件之一,是用户和OS 的接口. 作用:读入用户的输入或者文件中 的命令,并运行它(们);通常转 换为一个或者多个系统调用 位置:
陷
入
指
令
系统调用与返回
用户程序 系统调 用命令 调用 系统调 用命令
系统功能
系统功能 系统调 用命令 调用 系统子功能
返回 返回
(a ) 系统调用与返回
(b ) 程序之间的嵌套调用
3.1 系统调用-实现过程
设置系统调用号和参数。 调用号作为指令的一部分(如早期UNIX),或装入到特定 寄存器里(如:DOS的 int 21H,AH=调用号。) 参数装入到特定寄存器里,或内存区域 执行trap(INT)指令:入口的一般性处理,查入口跳转表, 跳转到相应功能的过程。 保护CPU现场(将PC与PSW入栈),改变CPU执行状态(处理 机状态字PSW切换,地址空间表切换) 将参数取到核心空间 执行操作系统内部代码; 执行iret指令:将执行结果装入适当位置(类似于参数带入 ),恢复CPU现场(以栈顶内容置PSW和PC)。
有的是在内核中 有的如MS-DOS和Unix,则将它作 为一个特殊程序(它易变,因此更 灵活),当一个作业开始或者分时 系统中用户登陆时,它运行
首先读入键盘缓冲区中的命令,判别其文件名、 扩展名及驱动器名是否正确。 若发现有错,在给出出错信息后返回; 若无错,再识别该命令:
基于表格的方法:
陷入通常由处理机正在执行的现行指令引起,而中断则是由 与现行指令无关 的中断源引起; 陷入处理程序提供的服务为当前进程所用,而中断处理程序 提供的服务则不是为了当前进程的 中断只能在指令之间被响应,而陷入可以在一条指令执行中 被响应 陷入处理程序在各自的堆栈上进行,中断处理程序则在系统 堆栈环境中进行
3.1 系统调用-举例
例1: 文件管理:文件读写和文件控制(高级语言); Open 文件打开 Close 文件关闭 Read 读文件 Write 写文件 Creat 文件创建 例2. 利用系统调用实现硬盘文件内容读写 MOVE DX,OFFSETBUFF MOVE CX,BYTE MOVE BX,HANDLE MOVE AH,3FH INT 21H
软中断是通信进程之间用来模拟硬中断的一种信号通信方 式,处理机处理的时机决定于接受软中断信号的进程,如 果占有处理机,与中断处理相同,否则相应的处理必须等 到接收进程得到处理机才能响应。
从对应表项中获得该命令处理程序的入口地址,然后把控 制权交给该处理程序去执行该命令。 表格其中的每一表目都是由命令名及其处理程序的入口地 址两项所组成。
3.1 系统调用-功能
系统调用(SYSTEM CALL)
:
OS核心中都有一组实现系统功能的过程(子
程序),系统调用就是对上述过程的调用。 编程人员利用系统调用,向OS提出服务请求 ,由OS代为完成。 每个系统都有上百种系统调用,涉及进程、 文件和设备控制等。 系统调用运行于核心态;而普通的函数调用 由函数库或用户自己提供,运行于用户态。
3.0用户与操作系统的接口
1. 命令接口
联机接口(交互式):使用系统提供的操作命令,
交互地控制程序执行和管理计算机系统。如系统管 理、环境设置、权限管理、文件管理等 脱机接口:以作业说明书的方式提交给系统(批的 方式);执行过程中,用户无法干涉
2.程序接口(系统调用)
系统调用是操作系统提供给编程人员的唯一接口,
3.1 系统调用-实现过程
当编程人员给定了系统调用名和参数之后,由一个类 似于硬件中断处理的中断处理机构完成-陷入处理机 构。它是在系统中为控制系统调用服务的机构。 当用户使用系统调用时,产生一条相应的指令(陷入 指令,trap指令),CPU在执行到该指令时发生相应 的中断,发出有关信号给该处理机构,并启动相应的 处理程序来完成该系统调用所要求的功能。 陷入指令(或称访管指令):由于系统调用引起处理 机中Leabharlann Baidu的指令 在陷入中断发生时,从用户态->系统态。这一转换 在发生访管中断时由硬件自动实现。
3.1 系统调用-库函数
现在的系统提供了许多库函数,用户编程时也许就 是用上层的库函数,而不是直接使用系统调用。
Win32
API:如微软提供了一个Win32 API函数集合 ,它实质上就是一些库函数。在这些函数执行时,往 往会再去调用系统的系统调用。该库函数提供了更易 用的界面。因此,通过Win32 API程序员就能够得到 操作系统的服务。
系统调用表/调用号
Linux为每个系统调用都进行了编号(最大为
NR_syscall),同时在内核中保存了一张系统调用 表,该表中保存了系统调用编号和其对应的服务 例程地址。第n个表项包含系统调用号为n的服务 例程的地址。 系统调用时需要把系统调用号一起传入内核。在 x86上,这个传递动作是通过在执行int $0x80前 把调用号装入eax寄存器实现。 这样系统调用处理程序一旦运行,就可以从eax中 得到数据,然后再去系统调用表中寻找相应服务 例程了。
如write(,…,…) 教材P49:文件复制
陷入与中断的比较
相同点:它们都是由相同的硬件机构处理的事件, 陷入是指CPU内部事件产生的中断,它包括程序运算引起 的各种错误,如地址非法,效验错,页面失效,存取控制 错,从用户态到核心态的切换等都是陷阱的例子 中断和陷入不同点:
3.1 系统调用-实现过程
系统调用语句本身是硬件提供的(机器指令),但其所调用 的功能是操作系统提供的。每种机器的机器指令集中都有一 条系统调用指令。
用户程序 . . . . 系统调用 . . . . 陷入处理机构 1)保护处理 机现场 2)取系统调 用功能号并 寻找子程序 入口 3)恢复处理 机现场并返 回 入口地址表 A0 A2 ... Ai ... An An Ai 系统子程序 A0 A1 sub 0 sub 1 ... sub i ... sub n