教材知识点总结
-
信号和中断
- 信号是一种异步事件通知机制,类似于软件中断,用于通知进程发生了某种事件。
- 与硬件中断不同,信号是由内核向进程发送的,而不是由硬件设备触发的。
-
Unix/Linux中的信号处理
- 信号类型:Unix/Linux系统支持多种类型的信号,例如SIGINT(终端中断)、SIGSEGV(段错误)、SIGALRM(定时器超时)等。
- 信号的来源:信号可以由内核、其他进程或进程自身发送。
- 进程PROC结构体中的信号:进程的信号相关信息保存在其对应的PROC结构体中,包括信号处理函数、信号屏蔽字等。
- 信号处理函数:可以是系统默认的处理函数,也可以是用户自定义的处理函数。
- 安装信号捕捉函数:将自定义的信号处理函数与特定的信号关联起来,以便在接收到该信号时执行相应的处理函数。
-
信号处理步骤
- 接收信号:当发生了某种事件时,内核会向进程发送相应的信号。
- 信号排队:同一种信号在短时间内多次发生时,会被排队,直到处理完前一个同种信号后才会处理下一个。
- 信号处理:进程根据信号的类型和当前状态执行相应的处理动作。
-
信号与异常
- 信号可以被看作是一种异常情况的通知,例如进程的非法访问、除零操作等都会导致信号的发送。
- 信号处理函数可以用来处理这些异常情况,使得进程能够在异常发生时进行适当的处理而不会导致程序崩溃。
-
信号用作IPC
- 信号也可以用作进程间通信的一种方式,通过发送特定的信号来通知其他进程发生了某种事件。
- 但是信号的使用受到一定的限制,因为信号的发送和接收是不可靠的,无法保证信号一定会被接收到。
-
Linux中的IPC
- 管道和FIFO:用于实现单向或双向的进程间通信。
- 信号:可以用于进程间通信,但是受到一定的限制。
- System V IPC:包括消息队列、共享内存和信号量,提供了一种可靠的进程间通信机制。
- POSIX消息队列:提供了一种可靠的消息传递机制,克服了信号的不可靠性。
- 线程同步机制:包括互斥锁、条件变量等,用于实现线程间的同步和通信。
- 套接字:用于实现不同主机或同一主机上不同进程间的通信。
拓展知识点:
-
信号量和共享内存:与System V IPC相关的进程间通信机制,可以用于实现进程间的同步和互斥。
-
进程间通信的性能比较:不同的进程间通信方式在性能上有所差异,可以根据实际需求选择合适的通信方式。
-
信号处理的最佳实践:在实际编程中,需要注意信号处理的最佳实践,包括信号的安全处理、信号的屏蔽和解除屏蔽等。
-
Linux中的异步IO:与信号处理相关的另一个重要知识点,可以实现非阻塞的IO操作。
-
Linux中的事件驱动编程:利用信号和信号处理实现事件驱动的编程模型,是一种高效的编程方式。
苏格拉底挑战
实践