Correct Answer: D. To map an interrupt number to the address of its handler
Explanation:
The interrupt vector provides the processor with the correct handler location for each interrupt type.
It avoids searching through all handlers whenever an interrupt occurs.
Correct Answer: C. A design combining microkernel ideas with many services still running in kernel space
Explanation:
A hybrid kernel adopts modular or microkernel concepts while retaining substantial kernel-space functionality.
The goal is to balance performance, compatibility, and modularity.
A modular kernel allows separately developed components to be loaded and linked into kernel space as needed.
It combines extensibility with direct in-kernel performance.
A microkernel minimizes privileged code and implements many services as user-space servers.
Those servers communicate through message passing rather than direct in-kernel procedure calls.
Correct Answer: D. Each layer uses services of lower layers and provides services to higher layers
Explanation:
Layering organizes the system into levels with controlled interfaces between adjacent or lower layers.
The structure improves modular reasoning but can introduce design and performance constraints.
A monolithic kernel runs many operating-system services together in privileged kernel space.
This can provide fast communication but increases the amount of code that shares kernel privileges.
Queries such as obtaining a process ID, time, or system data are information-maintenance calls.
They retrieve or update system and process attributes rather than manipulate files or memory pages.
ioctl() conveys device-specific control commands that do not fit ordinary read or write operations.
It is therefore classified as a device-management interface.
open() validates access and returns a file descriptor or equivalent handle for later operations.
Reading and writing then refer to that handle rather than repeatedly resolving the pathname.
wait() lets a parent collect a child's termination status and synchronize with the child's completion.
Without it, a completed child may remain as a zombie until its status is collected.
exec() loads a new program into the current process while preserving the process identity.
It replaces the address-space contents rather than creating an additional process.
fork() creates a child process whose initial state is based on the parent process.
The other calls access files or change permissions rather than create processes.