1.3操作系统提供的服务和用户接口 1.3.2 操作系统提供的用户接口 1.3.3 程序接口与系统调用 1.3.4 操作接口与系统程序 1.3.1 操作系统提供的基本服务 1.3.2 操作系统提供的用户接口 1.3.3 程序接口与系统调用 1.3.4 操作接口与系统程序
1.3.1操作系统提供的基本服务 •创建程序 •执行程序 •数据I/O •信息存取 •通信服务 •错误检测和处理 还具有另外一些功能:资源分配,统计, 保护。
1.3.2操作系统提供的用户接口 操作系统为用户提供两 种接口: •程序接口 •操作接口
操作系统提供的用户接口(1) 用户和操作系统间的两种接口 系统调用 操作命令或 JCL 操 作 系 统 裸 机 (操作接口) (程序接口)
操作系统提供的用户接口(2) 程序接口又称应用编程接口API(Application Programming Interface),允许运行程序调用操作系统的服务和功能。 程序接口由一组系统调用(System Call))组成,用户程序使用“系统调用”就可获得操作系统的底层服务,使用或访问系统的各种软硬件资源。
操作系统提供的用户接口(3) 在程序设计语言(如C语言)中,往往提供与各系统调用对应的库函数,应用程序可通过对应的库函数来使用系统调用, 库函数的目的是隐藏访管指令细节,使系统调用更象过程调用,但一般地说,库函数属于用户程序而非系统程序。
操作系统提供的用户接口(4) 操作系统为用户提供系统调用也出于安全和效率考虑,使得用户态程序不能自由地访问内核关键数据结构或直接访问硬件资源。
操作系统提供的用户接口(5) UNIX/Linux系统程序、库函数、系统调用的分层关系 (进程管理、存储管理、文件管理、设备管理等) 标准库函数 (打开、关闭、读、写、创建、撤销等) 标准系统程序(实用程序) (汇编、编译、编辑、Shell等) 用户 用户接口 库函数 接口 系统调用 硬件 (处理器、存储器、磁盘、打印机、终端等) 用 户 态 核 心
操作系统提供的用户接口(6) 操作接口又称作业级接口,操作系统为用户提供的操作控制计算机工作和提供服务手段的集合,通常有操作控制命令、图形操作界面(命令)、以及批处理系统提供的作业控制语言(命令)等等。
操作系统提供的用户接口(7) Windows支持API的三个组件: • Kernel包含了多数操作系统函数,如内存管理、进程管理; • User集中了窗口管理函数,如窗口创建、撤销、移动、对话等相关函数; • GDI提供画图函数、打印函数。 Windows将三个组件置于动态链接库DLL中。
操作系统提供的用户接口(8) Win32API和UNIX/Linux系统调用粗略对应关系 UNIX/Linux Win32 说明 fork CreatProcess 创建进程 waitpid WaitForSingleObject 等待进程终止 open/close CreatFile/CloseHandle 创建或打开/关闭文件 read/write ReadFile/WriteFile 读/写文件 lseek SetFilePointer 移动文件指针 mkdir/rmdir Creat/Remove Directory 建立/删除目录 stat GetFileAttributesEx 获得文件属性
1.3.3 程序接口与系统调用 系统调用(1) (2)文件操作: (3)设备管理: (4)内存管理: (5)信息维护: (6)通信: 1. 系统调用的分类 (1)进程和作业管理: (2)文件操作: (3)设备管理: (4)内存管理: (5)信息维护: (6)通信:
系统调用(2) 2.系统调用的实现要点 一. 是编写系统调用处理程序; 系统调用(2) 2.系统调用的实现要点 一. 是编写系统调用处理程序; 二. 是设计一张系统调用入口地址表,每个入口地址都指向一个系统调用的处理程序,有的系统还包含系统调用自带参数的个数; 三. 是陷入处理机制需开辟现场保护区,以保存发生系统调用时的处理器现场。
系统调用(3) 系统调用的处理过程 系统调用陷入机构 System Call 用户程序 系统调用处理子程序 取系统功能号 找入口地址表 SUB0 SUB1 SUBi SUBn A1 Ai An … 系统调用处理子程序 取系统功能号 找入口地址表 相应入口地址 结束处理 恢复现场 保护CPU现场 陷入指令 系统调用陷入机构 入口地址表
系统调用(4) 系统调用的参数传递 一是由访管指令或陷入指令自带参数, 直接参数 间接参数 二是通过CPU的通用寄存器传递参数,或 在内存的一个块或表中存放参数,其首地址送入寄存器,实现参数传递。 三是在内存中开辟专用堆栈区域传递参数。
系统调用(5) 传递参数的一种方法 操作系统 X: 参数 LOAD AddR X System Call 8 X 从表X取参数 寄存器 系统调用8的处理子程序 操作系统 X: 参数 LOAD AddR X System Call 8 X 从表X取参数 寄存器
系统调用(6) Linux系统调用 •核心函数 是实现系统调用功能的(内核)代码。 •核心函数 是实现系统调用功能的(内核)代码。 •接口函数 是提供给应用程序的API,以库函数形式存在Linux的lib.a中。
系统调用(7) Linux系统调用入口程序entry.s ENTRY(sys-call-table) .long SYMBOL-NAME(sys-ni-syscall) 0 .long SYMBOL-NAME (sys-exit) 1 .long SYMBOL-NAME (sys-fork) 2 .long SYMBOL-NAME (sys-read) 3 .long SYMBOL-NAME (sys-write) 4 .long SYMBOL-NAME (sys-open) 5 .long SYMBOL-NAME(sys-close) 6 . .long SYMBOL-NAME (sys-vfork ) 190
系统调用(8) Linux系统调用号就是系统调用入口表中位置序号,系统调用通过接口函数将调用号传给内核,内核转入系统调用控制程序再通过调用号位置来定位核心函数,Linux内核的陷入由0x80(int80h)中断实现。
系统调用(9) Linux系统调用控制程序的功能 (1)取系统调用号,检验合法性; (2)建立调用堆栈,保护现场信息; (3)根据系统调用号定位核心函数地址; (4)根据通用寄存器内容,从用户栈中取入口参数; (5)核心函数执行,把结果返回应用程序; (6)执行退栈操作,判别调度程序scheduler是否要被执行。
系统调用(10) 系统调用与过程(函数) 调用的区别 一 是调用形式 二 是被调用代码的位置 三 是提供方式 四 是调用的实现
1.3.4 操作接口与系统程序(1) 操作接口又称作业(或功能)级接口,是操作系统为用户操作控制计算机工作和提供服务的手段的集合,通常可借助操作控制命令、图形操作界面(命令)、以及作业控制语言(命令)等来实现。
操作接口与系统程序(2) 操作系统提供联机作业控制方式和脱机作业控制方式两个作业级接口,使用的手段为操作命令: • 操作控制命令 1. 作业控制方式 操作系统提供联机作业控制方式和脱机作业控制方式两个作业级接口,使用的手段为操作命令: • 操作控制命令 • 作业控制语言(命令)
联机用户接口—操作控制命令 •命令行方式 •批命令方式 •图形化方式
命令行方式 While (TRUE) { /*TRUE=1,无限循环*/ type-prompt( ); /*输出屏幕提示符*/ read-command(command,parameters); /*从键盘读入参数*/ pid=fork( ); /*创建子进程*/ if(pid<0 { printf(“unable to fork!”); /*输出创建失败信息*/ continue; /*继续循环 */ } if(pid!=0) { /*创建成功*/ waitpid(-1,&status,0); /*父进程等子进程结束*/ else { execve(command,prraters,0); /*子进程执行命令*/ CH-7
批命令方式(1) 有时需要连续使用多条命令; 有时需要多次重复使用若干条命令; 有时需要选择地使用不同命令 可用批命令实现。 在使用操作命令过程中, 有时需要连续使用多条命令; 有时需要多次重复使用若干条命令; 有时需要选择地使用不同命令 可用批命令实现。 CH-8
批命令方式(2) 批命令实现思想 •规定特别的文件扩展名,用户先把一系列命令组织在该文件中,一次建立,多次执行。 •操作系统支持命令文件使用一套控制子命令,可写出带形式参数的批命令文件。这样的批命令文件可执行不同的命令序列,增强命令接口的处理能力。 CH-8
UNIX的Shell(1) Shell是交互型命令解释程序,也是命令级程序设计语言解释系统,例如, Myrun文件包含: cat $1 /* 显示文件*/ cc $1 /* 编译源程序*/ mv a.out $2 /*把目标程序改为$2*/ $2 /*运行$2*/ 执行 csh myrun prog1.c prog ,将对源程序prog1.c进行显示和编译,把目标程序改名为prog并运行。
UNIX的Shell(2) 另一个UNIX Shell的例子 从/user/user1/fei文件中,利用循环控制语句找出含单词:process、thread信息行。其Shell程序feipro为 for i do grep $i/usr/usr1/fei done 执行 csh feipro process thread依次打印出含process和thread的信息行。
MS-DOS操作系统的批文件 test.bat是查找某文件是否存在的批文件: echo off if exist %1 goto lab1 echo %1 not found! goto lab2 :lab1 echo %1 is found! :lab2 用户键入命令:test wps.exe 执行批文件,若找到 文 件 显 示 wps.exe is found! ;否 则 显 示 wps.exe not found!
脱机用户接口—作业控制语言 •批处理接口:作业控制语言JCL( Job Control Language)
IBM JCL的一个例子(1) 一个需要编译、连结编辑的作业,源程序和数据穿在卡片上,编译、连结编辑的结果需在行式打印机上输出,编译结果要存盘,连结编辑结果还要从穿孔机输出,此作业用JCL语句组织如下:
IBM JCL的一个例子(2) // HAROLD JOB,WILSON,MSGLEVEL=(2,0),PRTY=6,CLASS=b // COMP EXEC PGM=IEYFORT // SYSPRINT DD SYSOUT=A // SYSIN DD* . <Source Program Card> /* // GO EXEC PGM=FORTLINK // FTOTF001 DD UNIT=SYSCP // GO SYSIN DD* <Data Card> //
2. 命令解释程序 命令解释程序的主要功能是:接受和执行下一条用户从键盘输入的命令。当新的批作业被启动,或新的交互型用户登录时,系统就自动地执行命令解释程序,它负责读入控制卡或命令行,并作出相应解释和执行。
命令解释程序实现的两种方式 一种是它自身包含了命令的执行代码。 另一种是由专门的“系统程序” 实现,自身不含命令处理代码,也不进行处理,仅仅把这条命令对应的命令文件装入内存执行。
命令解释程序的处理过程 系统启动命令解释程序,输出命令提示符,等待键盘中断。用户打入命令并按回车换行,申请键盘中断。 CPU响应后,控制权交给命令解释程序,它读入命令缓冲区内容,分析命令、接受参数。 若为简单命令立即转向命令处理代码执行。否则查找命令处理文件,装入主存,传递参数,将控制权交给其执行。 命令处理结束后,再次输出命令提示符,等待下一条命令。
3系统程序(1) 系统程序又称标准程序或实用程序(Utilities),虽非操作系统的核心,但却必不可少,为用户程序的开发、调试、执行、和维护解决带有共性的问题或执行公共操作, 操作系统以外部操作命令形式向用户提供系统程序。它的功能和性能很大程度上反映了操作系统的功能和性能。
系统程序(2) 系统程序的分类: •文件管理 •状态信息 •程序设计语言支持 •程序的装入和执行支持 •通信 •其它软件工具
UNIX系统调用 系统调用符合可移植操作系统POSIX1003.1标准,每个兼容的UNIX都必须支持它。 UNIX的标准系统调用分进程管理、文件管理、设备管理、及状态控制等五十余条,系统调用是软件开发者进入UNIX内核的入口。
UNIX标准函数 UNIX提供标准函数,POSIX1003.1标准定义了库过程的集合,组成了标准函数库,其中较重要的是I/O库函数。 库函数用汇编语言编写,却可以在C语言中调用,例如C程序可通过执行一个Read库过程来实现Read系统调用。 标准函数库建立在系统调用的上层,它提供的功能较系统调用强,使用也较方便。
UNIX系统程序(1) UNIX含有丰富的系统程序(语言处理、文件编辑和种种软件开发及维护工具) 。POSIX1003.2标准,描述了近百个系统程序语义,集中在文件管理、目录管理、编译和程序开发工具方面。
UNIX系统程序(2) 各种UNIX版本均实现了最常用的系统程序约五十多条,UNIX下运行的微机软件包己有1000多个,这些应用程序大大加强了UNIX的功能。
系统调用(6) UNIX系统调用处理过程 中 断 C 编译 装 配 源程序 函数替换 目标程序 nw=write(fd,buf,count) Load r0,fd Trap 04 Buf count xxxxx 8904(H) ***** $$$$$ Trap中断 处理程序 C 编译 装 配 系统调用入口表 Write地址 查表 Write调用处理程序 中 断 带参数返回 系统调用(6) UNIX系统调用处理过程