第3章 系统接口_第1页
第3章 系统接口_第2页
第3章 系统接口_第3页
第3章 系统接口_第4页
第3章 系统接口_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

操作系统OperatingSystem第3章系统接口Chapter3:Interface系统接口—用户通过它来使用操作系统对大多数用户来说,操作系统是一个“黑盒子”操作系统键盘命令鼠标点击网络数据屏幕输出文件改变……引导告诉了我们这个盒子是怎么放入内存的?在“打开这个盒子”之前要“了解盒子的入口”操作系统接口Interface:electricalcircuitlinkingonedevicewithanotherandenablingdatacodedinoneformattobetransmittedinanother(出自牛津辞典)

OS为什么要执行这些转换?用户操作系统保护操作系统、应用程序可以移植、让用户觉得简单方便…这也是“接口”(将复杂转换为简单)普遍具有的优点学习转换—从转换之前开始用户使用操作系统(计算机系统)基本方式命令行图形用户接口(GUI)应用程序命令行是怎么回事?命令是什么?命令输入后发生了什么?#include<stdio.h>intmain(intargc,char*argv[]){printf(“ECHO:%s\n”,argv[1]);}gcc–ooutputoutput.c./output“hello”命令,一段程序而已intmain(intargc,char*argv[]){charcmd[20];while(1){scanf(“%s”,cmd);

if(!fork()){exec(cmd);}else{wait();}}//while(1)}也是一段程序:shell,即/bin/sh命令得以工作的原因:OS提供了printf,fork,exec等函数(接口)使GUI工作,OS提供消息框架和相关API硬件输入Windows应用程序iGUI是怎么回事?鼠标点击OUTPUT以后…voidCOutputDlg::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(){caseWM_MOUSEDOWN:OnOK();}总结其中最重要的概念系统调用用户使用计算机总结:应用操作系统提供的接口编写程序;应用这些程序解决问题命令行:命令程序+shell+字符显示GUI:消息处理程序+消息框架+图形显示应用程序:将上述部分组成一个整体…因此:用户通过OS接口使用计算机;OS接口影响计算机的使用方式这么重要,得起个名字:接口表现为函数调用,又由OS提供,叫系统调用系统调用是学习操作系统的首要任务…系统调用学习转换—提供哪些系统调用?POSIX:将接口统一比较好!PortableOperatingSystemInterfaceofUnix

系统调用由IEEE开发,是一个标准族:

1003.1,2003…分类POSIX定义描述任务管理forkexecl创建一个进程运行一个可执行程序pthread_create创建一个线程文件系统open打开一个文件或目录EACCES返回值,表示没有权限mode_tst_mode文件头结构:文件属性S_ISDIR(m)宏展开,是否为目录文件对于指令跳转也一样实现了隔离…学习转换—怎么实现系统调用?将内核程序和用户程序隔离比较好!区分内核态和用户态:一种处理器“硬件设计”系统调用处理器保护环0123核心态OS服务用户态CPL(CS)RPL(DS)DPL检查DPLCPLDPLRPL当前程序执行在什么态(哪层环)?由于CS:IP是当前指令,所以用CS的最低两位来表示:0是内核态,3是用户态访问的数据段DS的最低两位内核态可以访问任何数据,用户态不能访问内核数据硬件提供了“主动进入内核的方法”对于Intelx86,那就是中断指令intint指令将使CS中的CPL改成0,“进入内核”这是用户程序发起的调用内核代码的唯一方式此时,CPL=3而DPL=0若用户程序想调内核代码:写一段包含int指令的代码系统调用的实现:(1)用户程序中写上一段包含int指令的代码(2)OS写中断处理代码,获取想调程序的编号(3)OS根据编号转去执行相应的代码由谁做?库函数!系统调用编号系统调用的实现调用printf(…)应用程序库函数printf(…)C函数库库函数write(…)系统调用write(…)OS内核显然,库函数write是本图的关键在linux/lib/write.c中#include<unistd.h>_syscall3(int,write,int,fd,constchar*buf,off_t,count)在linux/include/unistd.h中#define_syscall3(type,name,...)typename(...)\{__asm__volatile(“int0x80”\:”=a”(__res)...}Linux系统调用的实现细节!将关于write的故事完整的讲完…

在linux/include/unistd.h中#define_syscall3(type,name,atype,a,btype,b,ctype,c)\typename(atypea,btypeb,ctypec)\{long__res;\__asm__volatile(“int0x80”:”=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_write4//一堆连续正整数(数组下标,函数表索引)同时eax也存放返回值,ebx,ecx,edx存放3个参数_syscall3表示有3个参数int0x80中断的处理

voidsched_init(void){set_system_gate(0x80,&system_call);}显然,set_system_gate用来设置0x80的中断处理在linux/include/asm/system.h中#defineset_system_gate(n,addr)\_set_gate(&idt[n],15,3,addr);//idt是中断向量表基址#define_set_gate(gate_addr,type,dpl,addr)\__asm__(“movw%%dx,%%ax\n\t”“movw%0,%%dx\n\t”\“movl%%eax,%1\n\t”“movl%%edx,%2”:\:”i”((short)(0x8000+(dpl<<13)+type<<8))),“o”(*((\char*)(gate_addr))),”o”(*(4+(char*)(gate_addr))),\“d”((char*)(addr),”a”(0x00080000))段选择符处理函数入口点偏移04处理函数入口点偏移PDPL01110中断处理程序: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,%eaxjabad_sys_callpush%dspush%espush%fspushl%edxpushl%ecxpushl%ebx//调用的参数

movl$0x10,%edxmov%dx,%dsmov%dx,%es//内核数据

movl$0x17,%edxmov%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(“int0x80”:”=a”(__res)在include/linux/sched.h中typedefint(fn_ptr*)();_sys_call_tablecall_sys_call_table(,%eax,4)就是callsys_write在include/linux/sys.h中fn_ptrsys_call_table[]={sys_setup,sys_exit,sys_fork,sys_read,sys_write,...};sys_call_table是一个全局函数数组sys_write对应的数组下标为4,__NR_write=4eax=4,函数入口地址长度也为4用户调用printfprintf展成int0x80中断处理system_call查表sys_call_table__NR_write=4调用sys_write故事结束!用户态内核态系统接口总结对于用户来说操作系统是个“黑盒子”要打开

温馨提示

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

最新文档

评论

0/150

提交评论