




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章 软件接口技术,本章主要内容: 软件接口概述 DOS系统中的接口调用方法 Windows系统中的接口调用方法 Linux系统中的接口调用方法,5.1 软件接口概述,操作系统是用户与计算机硬件系统之间的接口,是人与计算机之间进行交流的桥梁,因此也称操作系统为“人机接口”。 操作系统为用户提供了命令接口和程序接口两种操作方式。 命令接口由操作命令及作业控制语言组成,它是管理和控制运行的程序,可以通过交互式方式直接或间接控制作业的运行。 程序接口是由一组系统调用命令组成的,是操作系统提供给程序设计人员的接口。用户通过在应用程序中使用系统调用命令来请求操作系统提供服务。,系统调用命令(简称系统调用)是用户应用程序与计算机的接口,它是用户在程序设计中直接调用操作系统提供的一组功能子程序,是一种特殊的过程调用,一般借助一条特殊的机器指令(如软中断INT指令)来实现。 系统调用过程如下: (1) 把系统调用所需的参数或参数区首地址装入指定的通用寄存器,然后设置一条调用指令; (2) 将系统调用的功能编号装入指定的通用寄存器中,有的系统直接在调用指令中将功能编号给出,有的系统将功能编号作为系统调用的参数; (3) 当用户程序执行到调用指令时,产生访管中断(又称软件中断),系统处理该中断,即为用户程序保留“现场”,然后提取系统调用编号,访问系统调用入口表,找到相应子程序入口地址转去执行; (4) 系统调用命令执行返回,恢复“现场”,并把返回参数或参数区首地址放入指定的通用寄存器中,以供用户程序使用。与中断一样,系统调用也可以实现嵌套调用。,系统调用分为: (1) 与进程有关的系统调用 (2) 与存储管理有关的系统调用 (3) 与文件管理有关的系统调用 (4) 与设备管理有关的系统调用 (5) 访问系统核心数据的系统调用 (6) 控制类的系统调用,5.2 接口软件及层次结构,DOS,BIOS,硬件层,应用软件,应用环境,驱动软件,硬件层,应用软件,设备管理,用户空间,内核空间,B) Windows的调用层次,A)dos系统的调用层次,图5.2 设备调用层次,5.3 DOS系统下的接口调用,DOS系统是单用户的操作系统 DOS系统提供给用户的编程界面,大体有如下几种: 裸机层软件开发,利用芯片或板卡(适配器)支持的寄存器或内存数据区编程。需要用户非常清楚设备的硬件细节,编程较复杂,但软件实现速度最快。 BIOS级软件开发,利用BIOS基本输入输出系统所提供的一些服务功能编程。 系统功能级软件开发,利用DOS系统提供的系统功能编程。,5.3.1 BIOS中断调用及实现,1BIOS级软件接口(中断调用)概述 BIOS基本输入输出系统由一批子程序组成,负责管理系统内的输入输出设备 直接为DOS操作系统和应用程序提供底层设备驱动服务。 大多数的驱动程序以软件中断方式调用,少数由硬件中断调用。,基本步骤为: (1) 设置分功能号:按实现的操作功能的要求,给指定寄存器(通常为AH)送入分功能号。 (2) 置入口参数:按操作要求,给寄存器填写相应参数的内容(某些调用无参数)。 (3) 使用中断语句INT n:执行调用的功能,其中n为中断号。 (4) 分析出口参数。,1) BIOS调用的基本操作,表5.1 常用BIOS服务功能,2视频服务,INT l0H AH寄存器选择视频服务功能 待写的字符或像素值一般在AL寄存器中传递。 功能调用保存BX、CX、DX及段寄存器的值。其他寄存器的内容(特别是SI、DI)不保存 X坐标(列号)在CX(图形功能)中或DL(正文功能)中传递 显示页在BH中传递,显示页从零开始计数,例如:利用BIOS视频服务的AH=0CH子功能实现写像素点。 调用子程序之前,需要用DX保存行号,CX保存列号,AL保存颜色值,这是0CH子功能要求的。 WRITINGPIXEL PROC NEAR PUSH AX MOV AH,0CH INT 10H POP AX WRITINGPIXEL ENDP,3键盘服务,键盘ISR(键盘中断服务程序) INT 09H硬件中断 键盘DSR(键盘设备服务程序),INT 16H软件中断 BIOS键盘服务包括3个子功能:0号功能、1号功能、2号功能,4并行打印机服务,INT 17H 0号功能(给打印机传送个字符) 1号功能(初始化打印机) 2号功能(读打印机状态) 均可通过AH返回打印机状态字节,BIOS I7H号中断指令提供了由AH寄存器指定的三种不同的操作。 (1) BIOS中断17H号的功能0是打印一个字符。要打印输出的字符放在AL中,打印机号放在DX中,BIOS最多允许连接三台打印机,机号分别为0,1和2。如果只有一台打印机,那么就是0号打印机,打印机的状态信息被回送到AH寄存器。 MOV AH,0 ;请求打印 MOV AL,CHAR ;写入打印字符 MOV DX,0 ;设置0#打印口 INT 17H ;调用BIOS,(2) 17H号的功能1是初始化打印机并回送打印机状态到AH寄存器。如果把打印机开关关上然后又打开,打印机各部分就复位到初始值。此功能和打开打印机时的作用一样。在每个程序的初始化部分可以用17H号的功能1来初始化打印机。 MOV AH,01 ;初始化打印机 MOV DX,0 ;设置0#打印口 INT 17H ;调用BIOS,BIOS串行通信口功能 通过INT 14H调用ROM BIOS串行通信口中断服务程序。 该中断服务程序包括将串行口初始化为指定的字节结构和传输速率,检查控制器的状态,读/写字符等功能。,表 串行通信口BIOS功能(INT 14H),图 串行通信口初始化参数,【例】 要求0号通信口的传输率为2400波特,字长为8位,终止位为1位,无奇偶校验。 MOV AH,0 ;串行通信口初始化 MOV AL,0A3H ;0A3H=10100011B MOV DX,0 ;指向COM1 INT 14H ;调用BIOS,5.3.2 DOS功能级软件接口及调用实例,1DOS功能级软件接口调用概述 主要包括:磁盘管理、内存管理、基本输入输出管理等。 子功能都有一个00H57H的功能编号 INT 21H,00H0CH :字符I/O管理。包括键盘、显示器、打印机、异步通信口的管理 0DH24H:文件管理。包括复位、选择磁盘,打开、关闭、删除文件,顺序读、写文件,建立文件,重命名文件,查找驱动器分配表信息,随机读、写文件,查看文件长度 25H26H:非设备系统调用。包括设置中断向量,建立新程序段 27H29H:文件管理。包括随机块读写、分析文件名 2AH2EH:非设备系统调用。包括读取、设置日期、时间 2FH38H:扩充的系统调用。包括读取DOS版本号,终止进程,读取中断矢量,读取磁盘空闲空间 39H3BH:目录组。包括建立子目录,修改当前目录,删除目录项,3CH46H: 扩充的文件管理。包括建立、打开、关闭文件,从文件或设备读写数据,在指定路径删除、移动文件,修改文件属性,设备I/O控制,复制文件标志47H取当前目录组。 48H4BH: 扩充的内存管理。包括分配内存、释放已分配的内存、分配内存块、装入或执行程序等 4CH4FH: 扩充的系统调用。包括终止进程、查询子程序的返回代码、查找第一个相匹配的文件、查找下一个相匹配的文件 50H53H: 扩充的系统调用。供DOS内部使用 54H57H: 扩充的系统调用。包括读取校验状态、重新命名文件、设置读取日期及时间,2基本I/O功能调用,键盘输入(1号调用) 无回显的键盘输入(8号调用) 控制台输入输出(6号调用) 无回显的控制台输入(7号调用) 打印输出(5号调用) 输出字符串(9号调用) 输入字符串(0AH调用) 异步通信输入输出(3、4号调用) 日期与时间的设置与获取(2AH、2BH、2CH、2DH调用),系统功能调用(INT 21H)的使用方法如下:,3DOS功能调用实例,;利用9号功能显示字符串 MOV AX,MYDATA MOV DS,AX DISP:MOV DX,OFFSET MESSEGE MOV AH,09H INT 21H ;利用10号功能接收字符到缓冲区 KEY: MOV DX,OFFSET PARAMETERS MOV AH,10 INT 21H,5.4 Windows下的接口调用,5.4.1 Windows的体系结构,5.4.2 Windows操作系统的内核进程,1Windows 9X的内核进程 系统工作在基于Intel 32位CPU的硬件平台上,运行在32全位地址空间的保护模式下。 系统核心进程空间工作在CPU的最高特权级0, 用户空间工作在 CPU的低特权级3。 系统核心进程是由虚拟设备驱动层VXD和虚拟机管理层VMM构成的,5.4.2 Windows系统中用户态到内核态的转换过程,首先,这些API函数要将用户程序的请求转换为对内核态I/O系统服务的请求 然后,设备驱动程序将结果交给I/O管理器,由I/O管理器转换CPU运行空间,将处理结果返回给Win32 API函数,最终由所请求的Win32 API将结果交给用户。,5.4.3 Windows的系统调用 在Windows系统中,对于用户提出的设备使用请求,是通过调用Win32子系统中的API函数实现的。,5.4.3Windows的功能调用,Windows系统中,对于用户提出的设备使用请求,是通过调用Win32子系统中的API函数实现的。 Windows 9X与Windows NT中的Win32子系统并不相同,两个子系统是相互独立的 Windows NT中,Win32子环境有两类: 一类位于用户态空间,用户态API 而另一类位于内核态空间,内核态API,5.4.4 Windows的功能调用函数API的分类及特征,API分类 窗口管理类API 图形设备接口类API 系统服务类API Windows的API函数担负着为所有的应用程序提供所有的服务功能。它们的主要特征是: 支持多任务 采用模块化的结构 支持动态装载链接,5.4.5 API应用举例 1. Windows关于文件操作的主要API接口函数, 建立文件函数CreatFile 文件打开操作函数HFILE_lopen HFILE_lopen(LPCSTR lpPathName,int iReadWrite) 文件建立操作函数HFILE_lcreat HFILE_lcreat(LPCSTR lpPathName,int iAttribute) 移动文件的读写指针函数SetFilePoint DWORD SetFilePoint(HANDLE hFile,LONG iDistanceToMove, PLONG lpDistanceToMoveHigh,DWORD dwMoveMethod) 移动文件指针操作函数LONG_llseek LONG_llseek(HFILE hFile,LONG LOffset,int LOrigin) 读文件函数ReadFile及写文件函数WriteFile,HANDLE CreateFile(LPCTSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpsecurityAttributes, DWORD dwCreationDisposition,DWORD dwFlagsAndAttributrs, HADEL hTemplateFile),BOOL ReadFile(HANDLE hFile,LPVOID ipBuffer,DWORD nNumberOfByteToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) BOOL WriteFile(HANDLE hFile,LPCVOID lpBuffer, DWORD nNumderOfBytesToWrite,LPDWORD lpNumberOfBytesWrite, LPOVERLAPPED lpOverlapped), 文件读操作函数UINT_lread及文件写操作函数UINT_ lwrite UINT_lread(HFILE hFile,LPVOID lpBuffer,UINT uBytes) UINT_ lwrite(HFILE hFile,LPCSTR lpBuffer,UINT uBytes) 关闭对象句柄函数CloseHandle及文件关闭操作函数HFILE_lclose BOOL CloseHandle(HANDLE hObject) HFILE_lclose(HFILE hFile) 内存空间分配函数GlobalAlloc HGLOBAL GlobalAlloc(Uint uFlags,DWORD dwBytes) 锁定一个全局内存对象函数GlobalLock LPVOID GlobalLock(HGLOBAL hMem),2. 应用举例 下面的例子是调用Windows操作系统的文件服务功能,打开一个文件,将文件头部1000个字节后的内容读入缓冲区中的一段程序。 BOOL LoadFile(char *FileName) HFILE hf; / 定义文件句柄变量 long hFilesize; / 文件长度 HGLOBAL hFhandle; / 内存分配句柄 LPVOID hFileBuffer; / 内存缓冲区指针 / 按文件名打开文件,若文件不存在,失败返回 if(hf=_lopen(Filename,OF_READ)= =HFILE_ERROR) MessageBox(hWnd,File not found! ,Error Message, MB_OK|MB_ICONEXCLAMATION); return FALSE; ,/ 打开文件后,文件的前两个字是文件长度 _lread(hf,(LPCSTR)&hFilesize,sizeof(DWORD);/ 得到文件长度 hFilesize- =1000; / 长度减去1000字节 / 请求系统分配文件大小的内存,若不能分配,失败返回 if(hFhandle=GlobalAlloc(GHND,hFilesize)= =NULL) MessageBox(hWnd,Error alloc memory! ,Error Message, MB_OK|MB_ICONEXCLAMATION); _lclose(hf); return FALSE; hFileBuffer=GlobalLock(hFhandle); / 得到分配的内存首地址,_lseek(hf,(LONG)1000,FILE_BEGIN); / 将指针从头向后移动1000B _lread(hf,(LPCSTR)hFileBuffer,hFilesize);/ 读文件 _lclose(hf); / 读完关闭文件 returnTRUE; / 返回 ,5.5 Linux下的接口调用,5.5.1 Linux操作系统简介 1概述 Linux的主要特点是: 1)完全支持POSIX 1003.1(Portable Operating System Interface可移植操作系统接口)标准,任何操作系统只有符合这一标准,才有可能运行Unix程序; 2)支持多用户访问和多任务编程 ; 3)采用页式虚拟存储管理,使Linux能更有效地利用物理存储空间,页面的换入换出为用户提供了更大的存储空间; 4)支持动态链接 ; 5)支持多种文件系统 ; 6)支持TCP/IP、SLIP和PPP,用户可以使用所有的网络服务,如网络文件系统、远程登录以及支持串行线上的 TCP/IP协议的使用等。,Linux不仅通过Shell(面向命令行)和X Window(面向图形界面)为用户提供了交互式用户界面,它同时还通过各种系统调用为应用系统和进程提供了编程接口。,2体系结构,图 5.6 Linux 操作系统的基本体系结构,3.Linux的内核结构 Linux内核主要由五个子系统组成: 进程调度 内存管理 虚拟文件系统 网络接口 进程间通信。,各个子系统之间的依赖关系如下: 进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序环境下,程序要运行必须为之创建进程,而创建进程的第一件事情,就是将程序和数据装入内存。 进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机制允许两个进程除了拥有自己的私有空间,还可以存取共同的内存区域。 虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统(NFS),也利用内存管理支持RAMDISK设备。 内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时,挂起当前正在运行的进程。,4.Linux 内核的一些有用特性 Linux 支持大量网络协议,包括典型的 TCP/IP,以及高速网络的扩展(大于 1 Gigabit Ethernet (GbE)和 10 GbE)。Linux 也可以支持诸如流控制传输协议(SCTP),它提供了很多比 TCP 更高级的特性(是传输层协议的接替者)。 Linux 还是一个动态内核,支持动态添加或删除软件组件。被称为动态可加载内核模块,它们可以在引导时根据需要(当前特定设备需要这个模块)或在任何时候由用户插入。 Linux内核虚拟机(KVM)是构成主流 Linux 内核的第一个虚拟化解决方案,它是一项比较新的技术,目前正在被大量使用。KVM 所使用的方法是通过简单地加载内核模块而将 Linux 内核转换为一个系统管理程序。,5.5.2 Linux系统调用的实现及过程 1系统调用的作用 系统调用在Linux系统中发挥着巨大的作用,如果没有系统调用,那么用户就不能利用内核,应用程序就失去了内核的支持。在编程时用到的很多函数,如fork、open等最终都是在系统调用里实现的。如在一个程序里用到了fork和exit,它们都是glibc中的函数,如果跟踪这些函数的执行过程,可以发现在glibc的实现代码里,都是采用软中断的方式陷入到内核中再通过系统调用实现函数的功能的。,2Linux系统的一些保护机制 Linux系统在CPU的保护模式下提供了四个特权级别,目前内核都只用到了其中的两个特权级别,分别为“特权级0”和“特权级3”,级别0也就是我们通常所讲的内核模式,级别3也就是我们通常所讲的用户模式。划分这两个级别主要是对系统提供保护。内核模式可以执行一些特权指令和进入用户模式,而用户模式则不能。这里特别提出的是,内核模式与用户模式分别使用自己的堆栈,当发生模式切换的时候同时要进行堆栈的切换。,3Linux系统调用机制,图5.7 系统调用过程流程,(1)系统调用的数据结构和函数 (2)系统调用功能的初始化和系统调用的中断陷入 (3) 系统调用服务的提供和返回,5.5.3 Linux的系统调用函数和函数调用,在Linux操作系统中应用程序的接口即API包含两部分,分别是用户层的库函数(glibc)和系统调用. 库函数实现用户应用程序和系统调用的接口 系统调用进一步实现了应用程序与系统的接口,进而访问计算机硬件。也可以说库函数是用户层的API,系统调用是核心层的API。,在LINUX系统下,利用系统调用完成一个简易的拷贝程序。 #include #include #include #include #define PERMS 0666 #define DUMMY 0 #define BUFSIZE 1024 main(argc,argv) int argc; char*argv; int source fd,target fd,num; char iobuffer BUFFERSIZE; if(argc ! =3) fputs(“usage:copy source target”,stdout); exit(1);,if(source fd=open(*(argv+!),O RDONLY0) if(write (target fd,iobuffer,num)! =num) fputs(“target file write error”,stdout);exit(4); close(source fd);close(target fd);exit(0); ,在LINUX系统下,利用函数调用完成一个简易的拷贝程序。 #include main(argc,argv) int argc;cha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025贵州装备制造职业学院引进高层次人才(博士)、高技能人才招聘9人模拟试卷及答案详解(全优)
- 2025云南昆明市盘龙区培智学校招聘5人考试模拟试题及答案解析
- 攀枝花固化地坪施工方案
- 2025重庆大学党委学工部劳务派遣工作人员招聘1人考试参考题库及答案解析
- 2025河南驻马店市正阳县县管国有企业招聘20人(第二批)考前自测高频考点模拟试题及答案详解(考点梳理)
- 消防年度采购方案范本
- 2025哈尔滨“丁香人才周”(春季)引才现场招聘活动模拟试卷完整参考答案详解
- 新房 退房清洁方案范本
- 南宁烤肉店装修施工方案
- 2025广东赤坎区选调赤坎区教师发展中心中小学教研员7人模拟试卷及答案详解(名师系列)
- 2025年学校少先队知识应知应会题库(含答案)
- 核桃肽粉生产技术规程(征求意见稿)编制说明
- 《储能技术》课件-3.各种类型的蓄能技术
- (2025)企业首席质量官培训考核试题(附含答案)
- 工业厂区场地平整建设方案
- 2024年丽水市莲都区事业单位招聘真题
- 锂电池pack工厂安全培训课件
- DB31∕T 1545-2025 卫生健康数据分类分级要求
- 九宫格智力数独200题(题答案)版
- GB/T 5796.4-2022梯形螺纹第4部分:公差
- 智能电网-课件
评论
0/150
提交评论