BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #96036同步于 2017/8/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【问题】关于系统调用

liuyehcf
2017/8/19镜像同步10 回复
系统调用究竟是一个怎样的过程? 我的理解是:用户进程通过某种机制(比如信号),请求内核中的某个进程来完成某个操作。感觉这像是进程通信(用户进程和内核进程)? 另外一个问题是:用户态和内核态是同一个进程的两种不同状态么? 请各位大佬指教[ema0]
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
intmain机器人#1 · 2017/8/19
个人理解:进程要请求操作系统提供的功能时,将请求的系统调用的id以及相应的参数拷贝到指定的存储区,然后执行自陷指令,陷入内核态,接下来由系统调用处理程序接收id和参数,转调用相应的过程,然后接收调用过程的返回值,回传到用户空间,最后再回到用户态。 通过『我邮2.0』发布
liuyehcf机器人#2 · 2017/8/19
谢谢~~,也就是说在内核态的时候,真正执行处理操作的其实是内核中的某个进程而不是应用进程本身? 【 在 intmain 的大作中提到: 】 : 个人理解:进程要请求操作系统提供的功能时,将请求的系统调用的id以及相应的参数拷贝到指定的存储区,然后执行自陷指令,陷入内核态,接下来由系统调用处理程序接收id和参数,转调用相应的过程,然后接收调用过程的返回值,回传到用户空间,最后再回到用户态。 : 通过『我邮2.0』发布
intmain机器人#3 · 2017/8/19
进程还是一个,不过具体执行的不是你的代码,而是操作系统提供的系统调用代码。 通过『我邮2.0』发布
nuanyangyang机器人#4 · 2017/8/20
https://en.m.wikipedia.org/wiki/System_call
nuanyangyang机器人#5 · 2017/8/20
起码linux没有“内核进程”这个概念。linux里的基本调度单元是作业(task),根据它和其它task共享的东西(如内存、文件系统等)的多少,可以模拟进程也可以模拟线程。系统调用的时候,是内核为某个用户task做事情,并没有一对一的内核task。内核task是有的,是内核自己要定期做事情用的。 【 在 liuyehcf 的大作中提到: 】 : 谢谢~~,也就是说在内核态的时候,真正执行处理操作的其实是内核中的某个进程而不是应用进程本身?
liuyehcf机器人#6 · 2017/8/20
多谢暖神~,没学过操作系统好伤。那可以不可以这样理解:系统调用时,从用户态切换到内核态,内核将用户进程挂起,然后内核进行某些操作,完成后返回给用户进程并唤醒用户进程。 【 在 nuanyangyang 的大作中提到: 】 : 起码linux没有“内核进程”这个概念。linux里的基本调度单元是作业(task),根据它和其它task共享的东西(如内存、文件系统等)的多少,可以模拟进程也可以模拟线程。系统调用的时候,是内核为某个用户task做事情,并没有一对一的内核task。内核task是有的,是内核自己要定期做事情用的。
nuanyangyang机器人#7 · 2017/8/20
可以。 【 在 liuyehcf 的大作中提到: 】 : 多谢暖神~,没学过操作系统好伤。那可以不可以这样理解:系统调用时,从用户态切换到内核态,内核将用户进程挂起,然后内核进行某些操作,完成后返回给用户进程并唤醒用户进程。
FromSixToTen机器人#8 · 2017/8/21
需要看一下POSIX API是怎么回事吗? 【 在 nuanyangyang 的大作中提到: 】 : 可以。 :
nuanyangyang机器人#9 · 2017/8/21
看呗 【 在 FromSixToTen 的大作中提到: 】 : 需要看一下POSIX API是怎么回事吗?