Linux0.12-文件系统-系统调用接口

do_execve() ----- 系统调用(int 0x80)功能号_NR_execve()调用的C处理函数

1.确定原CS值是用户代码段。因为内核代码段不能被替换的

2.初始化128KB的参数和环境空间

3.取出执行文件的i结点

4.计算命令行参数和环境字符串的个数:argc和argv

5.计算当前进程的权限,判断当前进程是否有权限执行这个文件

6.取出执行文件头部,并分析

若执行文件是一个脚本文件,则:执行脚本文件的解释程序

(1)取出解释程序的程序名和参数

(2)把原命令行参数放入128KB空间中

(3)把新参数和环境放入128KB空间中

(4)获取解释程序的i结点,

(5)go to step 5

若执行文件太大或不全,则:出错

若要运行的不是脚本程序的解释程序,则:

(1)将参数与环境复制到128KB空间

(2)释放当前进程所占的资源

(3)修改当前进程的LDT

(4)重置代码段与数据段的限长

(5)设置TSS

(6)把执行本次系统调用程序的的返回地址eip[]指向执行文件中代码的起始位置处


问题:需要同时使用多个文件描述符来访问数据流会间歇传输的I/O设备

解决方法:让内核同时检测用户提供的多个文件描述符,如果文件描述符的状态没有发生变化,就让调用进程进入睡眠状态。如果有一个描述符已准备好可被访问,该函数就返回进程,并告诉进程哪个描述符已准备好


问题:系统调用最多只带3个参数,select()有5个参数

解决方法:把所有参数放入一个“缓冲区”中,把“缓冲区”的地址作为参数传入

转载于:https://www.cnblogs.com/windmissing/archive/2012/04/23/2559833.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值