Литература для освоения принципов работы низкоуровневых аппаратно-программных средств?
========================================================================================

 Всем привет! Посоветуйте, пожалуйста, литературу, которая подробно и относительно доступно объясняет принципы программного устройства компа на низком уровне.  

Понятно, что скорее всего нет единого источника. Но может кто накидает хотя бы несколько вариантов.  

Чему хочу научиться: мне хотелось бы углубленно понять некоторые низкоуровневые темы работы компа. Например, я понимаю что подключение по Bluetooth происходит при помощи Bluetooth-адаптера (аппаратный уровень), что ядро того же Unix взаимодействует с этим адаптером, запись и чтение идёт через файловые дескрипторы посредством определённых протоколов — условных договоренностей (программный уровень) и тд. Через терминал можно получить список доступных Bluetooth устройств по-близости. Но вот мне например, интересно, как реализовано получение этой информации. Подобных вопросов у меня много: как реализовано пингование доступных сетей поблизости, мб где-то есть пример написания простейшей базы данных с рассуждениями а почему так, а не иначе.  

Если есть подобные источники с примерами кода на python — круто. Если на C/C++ — не проблема, разберусь. Важно, чтобы было четкое описание зачем, почему и как это работает. Даже если не будет примеров кода. 

 Для общих принципов можно почитать "Архитектура компьютера" Таненбаума. Для углубления в железо хорошо подойдёт "Цифровая схемотехника и архитектура компьютера" Харрисов. Для деталей работы операционных систем на уровне ядра, надо брать книги по системному программированию под конкретные операционки, такие есть как для Windows, так и для Linux.