哈工大 操作系统 李治军ch2-系统接口_第1页
哈工大 操作系统 李治军ch2-系统接口_第2页
哈工大 操作系统 李治军ch2-系统接口_第3页
哈工大 操作系统 李治军ch2-系统接口_第4页
哈工大 操作系统 李治军ch2-系统接口_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、哈工大计算机科学与技术学院哈工大计算机科学与技术学院软件基础教研室软件基础教研室操作系统操作系统Operating System第第2 2章章 系统接口系统接口Chapter 2: Interface- 2 -Operating System系统接口系统接口用户通过它来使用操作系统用户通过它来使用操作系统n对大多数用户来说,操作系统是一个对大多数用户来说,操作系统是一个“黑盒子黑盒子”操作系统操作系统键盘命令键盘命令 鼠标点击鼠标点击网络数据网络数据屏幕输出屏幕输出文件改变文件改变引导告诉了我们这个盒子是怎么放入内存的引导告诉了我们这个盒子是怎么放入内存的?在在“打开这个盒子打开这个盒子”之前

2、要之前要“了解盒子的入口了解盒子的入口”- 3 -Operating System操作系统接口操作系统接口nInterface: electrical circuit linking one device with another and enabling data coded in one format to be transmitted in another(出自牛津辞典出自牛津辞典) OS为什么要执行这些转换为什么要执行这些转换?用户用户操作系统操作系统保护操作系统、应用程序可以移植、让用户觉得保护操作系统、应用程序可以移植、让用户觉得简单方便简单方便这也是这也是“接口接口”(将复杂转换

3、将复杂转换为简单为简单)普遍具有的优点普遍具有的优点- 4 -Operating System学习转换学习转换从转换之前开始从转换之前开始n用户使用操作系统用户使用操作系统(计算机系统计算机系统)基本方式基本方式 命令行命令行图形用户接口图形用户接口(GUI)应用程序应用程序- 5 -Operating System命令行是怎么回事命令行是怎么回事?n命令是什么命令是什么? 命令输入后发生了什么命令输入后发生了什么? #include int main(int argc, char * argv) printf(“ECHO:%sn”, argv1); gcc o output output.c

4、 ./output “hello” 命令,一段程序而已命令,一段程序而已int main(int argc, char * argv) char cmd20; while(1) scanf(“%s”, cmd); if(!fork() exec(cmd); else wait(); /while(1)也是一段程序也是一段程序: shell,即即/bin/sh命令得以工作的原因命令得以工作的原因:OS提供了提供了printf,fork,exec等函数等函数(接口接口)- 6 -Operating System使使GUI工作,工作,OS提供提供消息框架和相关消息框架和相关API硬件输入硬件输入Wi

5、ndows应用程序应用程序iGUI是怎么回事是怎么回事?n鼠标点击鼠标点击OUTPUT以后以后 void COutputDlg:OnOK() GetDlgItemText(IDC_EDIT1,m_outStr); FILE *fp=fopen(d:out.txt,w); fprintf(fp,m_outStr,m_outStr.GetLength(); fclose(fp); 系统消息队列系统消息队列消息循环消息循环WinMain()WM_MOUSEDOWN应用消息队列应用消息队列iWinProc1WinProc2OUTPUT按钮的按钮的WinProc()case WM_MOUSEDOWN:

6、OnOK(); - 7 -Operating System总结其中最重要的概念总结其中最重要的概念 系统调用系统调用n用户使用计算机总结:用户使用计算机总结:应用操作系统提供的接口应用操作系统提供的接口编写程序;应用这些程序解决问题编写程序;应用这些程序解决问题命令行命令行: 命令程序命令程序+shell+字符显示字符显示GUI: 消息处理程序消息处理程序+消息框架消息框架+图形显示图形显示应用程序应用程序: 将上述部分组成一个整体将上述部分组成一个整体因此:用户通过因此:用户通过OS接口使用计算机;接口使用计算机;OS接口影响计接口影响计算机的使用方式算机的使用方式这么重要,得起个名字:这么

7、重要,得起个名字: 接口表现为函接口表现为函数调用,又由数调用,又由OS提供,叫系统调用提供,叫系统调用系统调用是学习操作系统的首要任务系统调用是学习操作系统的首要任务系统调用系统调用- 8 -Operating System学习转换学习转换提供哪些系统调用提供哪些系统调用?nPOSIX: 将接口统一比较好将接口统一比较好!Portable Operating System Interface of Unix 系统调用系统调用由由IEEE开发,是一个标准族开发,是一个标准族: 1003.1, 2003分类分类POSIX定义定义描述描述任务管理任务管理forkexecl创建一个进程创建一个进程运

8、行一个可执行程序运行一个可执行程序pthread_create创建一个线程创建一个线程文件系统文件系统open打开一个文件或目录打开一个文件或目录EACCES返回值,表示没有权限返回值,表示没有权限mode_t st_mode文件头结构文件头结构: 文件属性文件属性S_ISDIR(m)宏展开,是否为目录文件宏展开,是否为目录文件- 9 -Operating System对于指令跳转也一样对于指令跳转也一样实现了隔离实现了隔离学习转换学习转换怎么实现系统调用怎么实现系统调用?n将内核程序和用户程序将内核程序和用户程序隔离隔离比较好比较好! 区分区分内核态和用户态内核态和用户态:一种处理器:一种处

9、理器“硬件设计硬件设计”系统调用系统调用处理器保护环处理器保护环0 1 2 3核心态核心态OS服务服务用户态用户态CPL(CS)RPL(DS)DPL检查检查DPL CPLDPL RPL当前程序执行在什么态当前程序执行在什么态(哪层哪层环环)?由于由于CS:IP是当前指令,是当前指令,所以用所以用CS的最低两位来表示的最低两位来表示: 0是内核态,是内核态,3是用户态是用户态访问的数访问的数据段据段DS的的最低两位最低两位内核态可以访问任何内核态可以访问任何数据,用户态不能访数据,用户态不能访问内核数据问内核数据- 10 -Operating System硬件提供了硬件提供了“主动进入内核的方法

10、主动进入内核的方法”n对于对于Intel x86,那就是中断指令,那就是中断指令intint指令将使指令将使CS中的中的CPL改成改成0,“进入内核进入内核”这是用户程序发起的调用内核代码的唯一方式这是用户程序发起的调用内核代码的唯一方式此时,此时,CPL=3而而DPL=0若用户程序想调内核代码若用户程序想调内核代码: 写一段包含写一段包含int指令的代指令的代码码系统调用的实现系统调用的实现:(1) 用户程序中写上一段包含用户程序中写上一段包含int指令的代码指令的代码(2) OS写中断处理代码,获取想调程序的编号写中断处理代码,获取想调程序的编号(3) OS根据编号转去执行相应的代码根据编

11、号转去执行相应的代码由谁做由谁做? 库函数库函数!系统调用编号系统调用编号- 11 -Operating System系统调用的实现系统调用的实现调用调用printf()应用程序应用程序库函数库函数printf()C函数库函数库库函数库函数write()系统调用系统调用write()OS内核内核n显然,库函数显然,库函数write是本图是本图的关键的关键在在linux/lib/write.c中中#include _syscall3(int, write, int, fd, const char *buf, off_t, count)在在linux/include/unistd.h中中#defi

12、ne _syscall3(type, name, .) type name(.) _asm_ volatile(“int 0 x80” :”=a”(_res).- 12 -Operating SystemLinuxLinux系统调用的实现细节系统调用的实现细节! !- 13 -Operating System将关于将关于write的故事完整的讲完的故事完整的讲完 在在linux/include/unistd.h中中#define _syscall3(type,name,atype,a,btype,b,ctype,c)type name(atype a, btype b, ctype c) lo

13、ng _res; _asm_ volatile(“int 0 x80”:”=a”(_res) :”(_NR_#name),”b”(long)(a),”c”(long)(b), “d”(long)(c); if(_res=0) return (type)_res; errno=-_res; return -1;显然,显然,_NR_write是系统调用号,放在是系统调用号,放在eax中中在在linux/include/unistd.h中中#define _NR_write 4 /一堆连续正整数一堆连续正整数(数组下标数组下标,函数表索引函数表索引)同时同时eax也存放返回值,也存放返回值,ebx,

14、ecx,edx存放存放3个参数个参数_syscall3表示有表示有3个参数个参数- 14 -Operating Systemint 0 x80中断的处理中断的处理 void sched_init(void) set_system_gate(0 x80,&system_call); 显然,显然,set_system_gate用来设置用来设置0 x80的中断处理的中断处理在在linux/include/asm/system.h中中#define set_system_gate(n, addr) _set_gate(&idtn,15,3,addr); /idt是中断向量表基址是中断向

15、量表基址#define _set_gate(gate_addr, type, dpl, addr)_asm_(“movw %dx,%axnt” “movw %0,%dxnt”“movl %eax,%1nt” “movl %edx,%2”:”i”(short)(0 x8000+(dpl13)+type8),“o”(*( char*)(gate_addr),”o”(*(4+(char*)(gate_addr),“d”(char*)(addr),”a”(0 x00080000)段选择符段选择符处理函数入口点偏移处理函数入口点偏移04处理函数入口点偏移处理函数入口点偏移P DPL01110- 15 -

16、Operating System中断处理程序中断处理程序: system_call _sys_call_table+4*%eax就是相应系统调用处理函数入口就是相应系统调用处理函数入口在在linux/kernel/system_call.s中中nr_system_calls=72.globl _system_call_system_call: cmpl $nr_system_calls-1,%eax ja bad_sys_call push %ds push %es push %fs pushl %edx pushl %ecx pushl %ebx /调用的参数调用的参数 movl $0 x1

17、0,%edx mov %dx,%ds mov %dx,%es /内核数据内核数据 movl $0 x17,%edx mov %dx,%fs /fs可以找到用户数据可以找到用户数据 call _sys_call_table(,%eax,4) /a(,%eax,4)=a+4*eax pushl %eax /返回值压栈,留着返回值压栈,留着ret_from_sys_call时用时用 . /其他代码其他代码ret_from_sys_call: popl %eax, 其他其他pop, ireteax中存放的是系统调用号中存放的是系统调用号_asm_ volatile(“int 0 x80”:”=a”(_

18、res)- 16 -Operating System在在include/linux/sched.h中中typedef int (fn_ptr*)();_sys_call_tablecall _sys_call_table(,%eax,4)就是就是call sys_write在在include/linux/sys.h中中fn_ptr sys_call_table= sys_setup, sys_exit, sys_fork, sys_read, sys_write, .;sys_call_table是一个是一个全局函数数组全局函数数组sys_write对应的数组下标对应的数组下标为为4,_NR_write=4eax=4,函数入口地址长度也为,函数入口地址长度也为4用户调用用户调用printfprintf展成展成int 0 x80中断处理中断处理system_call查表查表sys_ call_table_NR_write =4调用调用sys_write故事结束故事结束!用户态用户态内核态内核态- 17 -Operating System系统接口总结系统接口总结n对于用户来说对于用户来说 操作系统是个操作系统是个“黑盒子黑盒子”n要打开这个盒子要打开这个盒子 先得找到先得找到“盒子的入口盒子的入口” 系统接口系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论