李治军课程---第二天操作系统接口

操作系统接口

一、应用程序(用户)得以与计算机交互的原因:os提供了printf,fork,exec等函数(接口)。

问题:1)提供哪些系统调用?2)图形用户接口(GUI)怎么调用?

二、实现系统调用

1、将内核程序和用户程序隔离----硬件实现了内核态可以访问任何数据,用户态不能访问内核数据。因为CS:IP是当前指令,所以用CS的最低两位来表示:0是内核态,3是用户态。

2、硬件提供了”主动进入内核的方法“------中断指令int

        int指令将CS中的CPL(用户段)改成0,”进入内核“,这是用户程序发起调用内核代码的唯一方式。

        实现过程:

        1)用户程序中写上一段包含int指令的代码

        2)OS写上中断处理的代码获取想调程序的编号

        3)OS根据编号转去执行相应的代码

        如 应用程序printf()的实现:首先printf()在C函数库中调用printf(),write(),库函数write()调用OS内核write()。

        C函数库中的write()的CPL为3,当系统调用OS内核write()(int 0x80 ,DPL=3, eax=4 系统调用号)后,CPL=0,然后

        就可以访问内核态的数据了。

        set_system_gete用来设置int  0x80的中断,是用户程序与内核程序的过渡代码。在这里DPL=3------处理IDT表,CPL=0。

        _system_call为中断处理程序:这个程序的作用是根据系统调用号找到相应代码。system_call_table+4*%eax就是相应系统调用处理函数入口。

       当IDT表处理完成之后程序的级别就发生了改变。

问题:1)int 0x80指令是在用户态还是内核态?用户态

           2)int 0x80与内核态之间的参数传递,与CPL,DPL级别的转化?CPL由3变为0,DPL由0变为3

           3)int 0x80到底是指令还是地址?int 0x80指的到底是什么?不清楚

           4)set_system_gate处理IDT表的过程是怎样的?不清楚

           5)system_call是怎么样找到系统调用处理函数入口的?system_call_table是什么?有什么作用?不清楚

 

          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值