Throughout this chapter, we not only understood the various protection and synchronization mechanisms provided by the kernel, but also made an underlying attempt at appreciating the effectiveness of these options, with their varied functionalities and shortcomings. Our takeaway from this chapter has to be the tenacity with which the kernel addresses these varying complexities for providing protection and synchronization of data. Another notable fact remains in the way the kernel maintains ease of coding along with design panache when tackling these issues.
In our next chapter, we will look at another crucial aspect of how interrupts are handled by the kernel.