Asynchronous Programming - It's good But who did that?

Let me start with a famous example of asynchronous programming:

var fs = require('fs');
fs.readFile('./myhope', function(err, data){
  //Doing something with my hope!
  console.log('Dear world my hope is %s', data);
});
console.log('Help me nurture it');

Oops but the output will be asking you to help me nurture my hope before telling you about it. Because it's asynchronous.
My question is who in the world is reading the file and storing it in a buffer because node's only thread (it's single threaded) is busy outputting 'Help me nurture it' !
Is it something like that node gives an instruction like this 'Dear O/S can you read this file for me and when you have done it just call that callback!. Don't worry my single-threaded loop will handle it'

Dear O/S can you read this file for me and when you have done it just call that callback!

That's it, basically. Async IO uses OS kernel facilities to register a callback with an IO. While the IO is running there is no thread in use at all. Not even a background thread.

The callback runs immediately inside of the node process, and queues a work item to the event loop.