Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65980
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2015-10-15 14:23
个人简介

-计算机-每天学习一点专业知识

文章分类

全部博文(21)

文章存档

2019年(1)

2018年(15)

2015年(5)

我的朋友

分类: 其他UNIX

2015-11-12 22:05:25

    当用户进程进行系统调用时,会进行以下一系列操作
  1. 系统调用发生时,都会首先调用_syscall函数,该函数的作用是生成一个消息,消息的类型指定为系统调用函数,消息的目的进程因当前系统调用函数的不同而不同,PM_PROC_NR(进程管理器)、VFS_PROC_NR(文件系统)、VM_PROC_NR三者其一;
  2. _syscall函数会使用进程通信原语_sendrec,将消息发送出去;
  3. 在原语_sendrec中,通过软中断指令(int 33),从用户空间跳转到内核空间;
  4. 在软中断处理程序中,在经过一系列的合法性检查后,首先调用mini_send向目标进程发送消息,如果发送失败,直接返回;如果发送成功,会继续调用mini_receive函数接收目标进程传过来的消息,并将执行结果返回;(即无论操作失败或成功,函数都会立马返回)
  5. 当软中断处理程序返回时会重新调用_restart,_restart完成的功能是查看next_ptr是否为空,如果为空,则继续执行进程proc_ptr(指向引发本系统调用的进程);如果为非空,这将next_ptr的值赋给proc_ptr,调度一个由next_ptr指向的新进程执行。
阅读(1474) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~