Signals, though a rudimentary form of communication engaged by processes and kernel services, provide an easy and effective way to get asynchronous responses from a running process on occurrence of various events. By understanding all core aspects of signal usage, their representation, data structures and kernel routines for signal generation and delivery, we are now more kernel aware and also better prepared to look at more sophisticated means of communication between processes, in a later part of this book. After having spent the first three chapters on processes and their related aspects, we shall now delve into other subsystems of the kernel to notch up our visibility. In the next chapter, we will build our understanding of one of the core aspects of the kernel, the memory subsystem.
Throughout the next chapter, we will go through comprehending step by step many critical aspects of memory management such as memory initialization, paging and protection, and kernel memory allocation...