IO software is necessary to the functionality of IO hardware. Consider a car. The car’s main structure is the hardware: the wheels, the engine, etc. The hardware isn’t solely responsible for making the car functional; user-space and kernel-space play a vital role in the software aspect of this process.

The user-space is the space in memory that holds and runs user processes. Think about when we connect our Bluetooth device to the audio system of a car. The memory in which the Bluetooth mounts to the car can be considered to be the user-space. Pressing play or selecting a song on different phones can be considered independent calls that exist in user libraries that access the kernel through calls, and result in output in the car. User libraries hold more complex, modifiable, user-controlled code that interfaces with the kernel.

The kernel-space is the place in memory where the kernel performs its functionality. The software behind the Engine Control Unit (ECU) of a car is the kernel-space. Just like the ECU controls or manages the electric functions of a car, the kernel manages resources and requests. The kernel manages the scheduling of tasks, buffering (storing data in memory when transferring between a computer and IO devices), spooling (holding output data for an IO device), etc.


Examine the table to the right - it provides an example of how hardware, user-space, and kernel-space work together as necessary components of a car.

Click Next when you’re ready to move on to the next exercise.

Take this course for free

Mini Info Outline Icon
By signing up for Codecademy, you agree to Codecademy's Terms of Service & Privacy Policy.

Or sign up using:

Already have an account?