电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

系统调用陷入后需处理的若干公共问题


发布日期:2024/7/4
 

系统调用陷入后需处理的若干公共问题

确定系统调用号

trap(usp type code PC PSL)

其中参数PSL为陷入时处理机状态字长PC为程序计数器code为代码操作数type为陷入类型号usp为用户栈指针对陷入的处理可分为多种情况如果陷入是由于系统调用所引起的则对此陷入的第一步处理便是确定系统调用号通常系统调用号是包含在代码操作数中故可利用code来确定系统调用号i其方法是

i=code &

参数传送

这是对因系统调用引起的陷入的第二步处理参数传送是指由trapC程序将系统调用参数表中的内容从用户区传送到User结构的UUarg[ ]中供系统调用处理程序使用由于用户程序在执行系统调用命令之前已将参数表的首址放入R寄存器中在进入trapC程序后该程序便将该首址赋予UUarg[ ]指针因此trapC在处理参数传送时可读取该指针的内容以获得用户所提供的参数表并将之送至UUarg[ ]中应当注意对不同的系统调用所需传送参数的个数并不相同trapC程序应根据在系统调用定义表中所规定的参数个数来进行传送最多允许个参数

利用系统调用定义表转入相应的处理程序

在UNIX系统中对于不同(编号)的系统调用都设置了与之相应的处理子程序为使不同的系统调用能方便地转入其相应的处理子程序也将各处理子程序的入口地址放入了系统调用定义表即Sysent[ ]中该表实际上是一个结构数组在每个结构中包含三个元素其中第一个元素是相应系统调用所需参数的个数第二个元素是系统调用经寄存器传送的参数个数第三个元素是相应系统调用处理子程序的入口地址在系统中设置了该表之后便可根据系统调用号i从系统调用定义表中找出相应的表目再按照表目中的入口地址转入相应的处理子程序由该程序去完成相应系统调用的特定功能在该子程序执行完后仍返回到中断和陷入总控程序中的trapC程序中去完成返回到断点前的公共处理部分

系统调用返回前的公共处理

在UNIX系统中进程调度的主要依据是进程的动态优先级随着进程执行时间的加长其优先级将逐步降低每当执行了系统调用命令并由系统调用处理子程序返回到trapC后都将重新计算该进程的优先级另外在系统调用执行过程中若发生了错误使进程无法继续运行时系统会设置再调度标志处理子程序在计算了进程的优先级后又去检查该再调度标志是否已又被设置若已设置 便调用switch调度程序再去从所有的就绪进程中选择优先级最高的进程把处理机让给该进程去运行

——返回教材目录

了解更多计算机相关基础课程视频

上一篇:十三 真经之少林寺问题

下一篇:1.2.1 单项选择题[3]