找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 488|回复: 3

系统调用过程图(不知道对不对很慌!!!)

[复制链接]

37

主题

37

回帖

317

积分

至尊会员

积分
317

至尊会员

发表于 2024-6-29 19:44:22 | 显示全部楼层 |阅读模式
根据老师的课本和网上的资料,我把自己对32位linux系统调用过程绘制了一幅图出来,
一方面加深自己理解,另一方面也是想对这块做个总体的概要,
不知道自己的理解是否正确,如果有错烦请各位朋友们帮忙指正~~~



X86实模式到保护模式这本书对理解底层实在是太重要了~~~早年做过C#开发,后来一直做Java,一直游荡于最上层应用,对操作系统和处理器以及整个计算机系统的理解很不清晰,很多东西以前压根就不知道,
现在就算朦朦胧胧但是整体也有个大概得了解,再也不像以前那样带着猜疑和推测认为底层应该这样或者那样了...


先上图,有错误的地方大家烦请指正,感谢,感谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

3

主题

33

回帖

381

积分

至尊会员

积分
381

至尊会员

发表于 2024-7-1 20:33:20 | 显示全部楼层
其实我觉得先抛开高级语言层面,直接用汇编来理解可能更好

---用户程序中-----
mov eax, 08    ;功能号
int 0x88          ;触发软中断,编号是操作系统设定的,只要不和Intel CPU自己保留的前32个中断号冲突就行
----开始进入内核态---------
----中断表IDT---------------
1. CPU会收到中断号0x88, 用IDTR找到IDT基地址,然后用0x88找到对应的中断门(32位下,0x88乘4)
2. 0x88对应的中断门里有自己的DPL,还有对应代码段(这里就是系统调用的内容)选择子(里面有RPL),此时会有特权级检查,即数值上,  RPL(系统调用代码段DPL)<=CPL(用户程序)<=中断门自己的DPL
3. 通过中断门进入的相应例程,假设代码如下
0x88_handler:
       pusha
       call [table+eax*4]
       popa
       iretd
------进入具体的系统调用代码---------------
4. 操作系一般利用 call [table+eax*4]选择相应的系统调用程序完成用户相应
------从具体系统代码返回到0x88中断处理例程------------------
5. 上面系统调用程序返回后,回到了中断处理例程,通过iretd返回到用户程序
------回到用户程序------------------------------
6. 即回到用户态,当然这里如果涉及到特权级转换,还会有相应的检查以及栈切换

点评

优秀!  发表于 2024-7-2 08:09

37

主题

37

回帖

317

积分

至尊会员

积分
317

至尊会员

 楼主| 发表于 2024-7-1 21:16:59 | 显示全部楼层
cindeequan 发表于 2024-7-1 20:33
其实我觉得先抛开高级语言层面,直接用汇编来理解可能更好

---用户程序中-----

嗯嗯,好
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2024-9-8 08:22 , Processed in 0.242037 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表