我学过一段时间的Linux编程,我知道signal和system call是完全不同的概念。据我所知,system call是内核提供给外部的接口,signal是一种机制,让进程接收来自内核或其他进程的信息。我理解得对吗?
signal
system call
这两个概念之间是否有更深或更简单的关系?这似乎是一个愚蠢的问题,但有时我把它们混在一起,我需要仔细思考,以区分它们。我试图得到一个简单的意见,以帮助我理解它们之间的关系和区别。
lb3vh1jj1#
系统调用是用户空间和内核空间之间的会合点。当需要做一些更复杂的事情时--从设备阅读、向设备写入、更改硬件配置、发送网络数据包,等等,正常的用户级代码就是这样陷入内核空间的。所以基本上,用户代码通过系统调用与内核交互;调用系统调用是向内核请求一个服务。在这样做的时候,会产生一个中断来“唤醒”内核。这被称为“捕获”到内核空间。另一方面,信号是一种独立的、不同的通信机制。信号被内核用来异步地通知用户进程各种事件(在某些情况下,I/O可用,或无效的内存访问尝试,或非法指令等),但它们也用于进程之间:如果你有正确的权限,你可以从一个用户空间进程发送一个信号到另一个用户空间进程。您可以为用户保留的信号(如SIGUSR1和SIGUSR2)设置一个自定义处理程序,并使用这些处理程序执行您喜欢的任何操作。您可以使用SIGKILL杀死一个无响应的进程(尽管建议您先尝试SIGTERM,以便给予一个优雅终止的机会)。所以,你看,可能性是无限的。系统调用是对内核的服务请求,遵循严格定义的API,并允许您进入和离开内核模式进行管理操作。信号更像是一种通用的进程通信机制,也恰好被内核用来通知用户进程,但还有其他用途。
SIGUSR1
SIGUSR2
SIGKILL
SIGTERM
rkkpypqq2#
用户空间程序和内核之间的通信通道是由系统调用提供的,但还有一个不同的通道,即信号通道,既用于用户进程之间,也用于内核到用户进程之间。你可以在https://www.win.tue.nl/~aeb/linux/lk/lk-5.html中阅读更多关于信号的信息
smdncfj33#
信号和系统调用是完全相反的,信号是内核空间调用用户空间的一种机制,而在系统调用中,用户空间向内核请求它所需要的一些服务。一个信号是当操作系统调用你:
一个系统调用是当你调用操作系统:
当然,这两者都取决于您使用的操作系统!信号和系统调用的共同特性是CPU的“中断”特性,即CPU停止它正在做的事情并调用操作系统。要了解更多信息,请参阅本文https://www.cs.uaf.edu/2011/fall/cs301/lecture/10_24_signal_syscall.html
3条答案
按热度按时间lb3vh1jj1#
系统调用是用户空间和内核空间之间的会合点。当需要做一些更复杂的事情时--从设备阅读、向设备写入、更改硬件配置、发送网络数据包,等等,正常的用户级代码就是这样陷入内核空间的。
所以基本上,用户代码通过系统调用与内核交互;调用系统调用是向内核请求一个服务。在这样做的时候,会产生一个中断来“唤醒”内核。这被称为“捕获”到内核空间。
另一方面,信号是一种独立的、不同的通信机制。信号被内核用来异步地通知用户进程各种事件(在某些情况下,I/O可用,或无效的内存访问尝试,或非法指令等),但它们也用于进程之间:如果你有正确的权限,你可以从一个用户空间进程发送一个信号到另一个用户空间进程。
您可以为用户保留的信号(如
SIGUSR1
和SIGUSR2
)设置一个自定义处理程序,并使用这些处理程序执行您喜欢的任何操作。您可以使用SIGKILL
杀死一个无响应的进程(尽管建议您先尝试SIGTERM
,以便给予一个优雅终止的机会)。所以,你看,可能性是无限的。系统调用是对内核的服务请求,遵循严格定义的API,并允许您进入和离开内核模式进行管理操作。信号更像是一种通用的进程通信机制,也恰好被内核用来通知用户进程,但还有其他用途。
rkkpypqq2#
用户空间程序和内核之间的通信通道是由系统调用提供的,但还有一个不同的通道,即信号通道,既用于用户进程之间,也用于内核到用户进程之间。
你可以在https://www.win.tue.nl/~aeb/linux/lk/lk-5.html中阅读更多关于信号的信息
smdncfj33#
信号和系统调用是完全相反的,信号是内核空间调用用户空间的一种机制,而在系统调用中,用户空间向内核请求它所需要的一些服务。
一个信号是当操作系统调用你:
一个系统调用是当你调用操作系统:
当然,这两者都取决于您使用的操作系统!
信号和系统调用的共同特性是CPU的“中断”特性,即CPU停止它正在做的事情并调用操作系统。
要了解更多信息,请参阅本文https://www.cs.uaf.edu/2011/fall/cs301/lecture/10_24_signal_syscall.html