1. 关于udev (Page.318)
每当内核检测到设备时,都会创建一个内核对象,并向用户空间发送一个热插拔消息,该消息包含了驱动程序为设备分配的主从设备号。udevd守护进程监听该消息,并根据消息在/dev中创建对应的项,接下来就可以从用户层访问该设备了。
由于引入了udev机制,/dev不再放置到基于磁盘的文件系统中,而是使用tmpfs(ram磁盘文件系统),这意味着设备节点不是持久性的,系统关机/重启后就会消失。
[2013/9/26]
2. 关于sigaction处理机制中的“SA_RESTART“ 。(Page.659~660)
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
struct sigaction{
void (*sa_handler)(); /* SIG_DFL, SIG_IGN或函数名 */
void (*sa_sigaction)(int, siginfo_t *, void *); /* 新机制 */
sigset_t sa_mask; /* 阻塞设置 */
int sa_flag; /* 指定处理机制 */
};
sa_flag包含SA_RESTART时表示:如果信号中断了某个系统调用,在信号处理函数执行完毕后,自动重启该系统调用。
SA_RESTART“前世今生”的详细介绍可参考《深入Linux内核架构》的第659页~660页。

本文首先介绍了udev的工作原理,解释了udev如何响应内核的热插拔消息来创建设备节点。接着详细阐述了Linux信号处理机制sigaction中的SA_RESTART标志,说明其如何在信号处理后重启被中断的系统调用。
2801

被折叠的 条评论
为什么被折叠?



