博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验五分析system_call中断处理过程
阅读量:5735 次
发布时间:2019-06-18

本文共 1146 字,大约阅读时间需要 3 分钟。

一、实验要求:

  1、使用gdb跟踪分析一个系统调用内核函数

  2、根据本周所学知识分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图

二、实验步骤:

  1、实验环境是使用本课程配置的实验楼虚拟机环境

      2、打开命令行客户端,cd LinuxKernel目录,使用命令rm -rf menu删除原来的代码,使用git clone https://github.com/mengning/menu.git获取menu的最新代码,

      3、cd menu进入menu子文件夹,使用vi test.c打开文件,将上周实验的代码拷贝入test.c中,构造成两个函数,成为menu的两个菜单项。

      4启动系统,看到如下结果

实验截图如下:

2、分析system_call处理流程

 

 

代码如下:

  1. .macro INTERRUPT_RETURN  ; 中断返回  
  2.     iret  
  3. .endm  
  4. .macro SAVE_ALL          ; 保护现场  
  5.     ...  
  6. .macro RESTORE_INT_REGS  
  7.     ...  
  8. .endm  
  9.    
  10. ENTRY(system_call)  
  11.     SAVE_ALL  
  12. syscall_call:  
  13.     call *sys_call_table(,%eax,4)  
  14.     movl %eax, PT_EAX(%esp)  ; store the return value  
  15. syscall exit:  
  16.     testl $_TIF_ALLWORK_MASK, %ecx # current->work  
  17.     jne syscall_exit_work  
  18. restore_all:  
  19.     RESTORE_INT_REGS  
  20. irq_return:  
  21.     INTERRUPT_RETURN      ; 到这里就算执行完了  
  22. ENDPROC(system_call)  
  23.    
  24. syscall_exit_work:  
  25.     testl  $_TIF_WORK_SYSCALL_EXIT, %ecx  
  26.     jz work_pending  
  27. END(syscall_exit_work)  
  28.    
  29. work_pending:  
  30.     testb $_TIF_NEED_RESCHED, %cl  
  31.     jz work_notifysig  
  32. work_resched:  
  33.     call schedule  
  34.     jz restore_all  
  35. work_notifysig:  
  36.     ...                  ; deal with pending signals  
  37. END(work_pending)  

流程图:

三、总结

系统调用是很多种不同的中断处理过程组成,也就是中断,在中断里头可能还会有进程上下文的转换或者中断上下文的转换。

转载于:https://www.cnblogs.com/kryst4l/p/5325568.html

你可能感兴趣的文章
Git提交本地库代码到远程服务器的操作
查看>>
灾难拯救——让软件项目重回轨道
查看>>
ssh链接git服务器,解决push pull要求输入密码问题
查看>>
Netty 源码解析(二):对 Netty 中一些重要接口和类的介绍
查看>>
mysql中主外键关系
查看>>
第七章:数据字典
查看>>
python 字符串 类型互相转换 str bytes 字符串连接
查看>>
service mysqld start
查看>>
linux时间
查看>>
Spring+Mybatis项目中通过继承AbstractRoutingDataSource实现数据库热切换
查看>>
让Alert弹窗只弹出一次
查看>>
用友软件操作流程(新建年度帐、年度结转步骤)
查看>>
mysql权限管理
查看>>
我的友情链接
查看>>
让你快速上手的Glide4.x教程
查看>>
浮动和清除(闭合)浮动
查看>>
微信小程序注册流程
查看>>
LR录制脚本时IE打不开的原因
查看>>
类的基础
查看>>
微博自动化测试
查看>>