С чего начать изучение системного программирования?
С языка СИ и UNIX которая на нем написана.
я заметил тег ассемблера, и вот что про него посоветую:
не писать на асме, а писать на си и смотреть что получается на асме.
Хорошие проекты на Си в области системного программирования это например ядро люникса или загрузчик uboot.
Ассемблер в современном мире не язык синтеза, это язык анализа и очень редкого, всё можно сделать на голом си.
Даже специфичные системные команды на ассемблере и их блоки уже сделаны в 99.9999999999999% платформах Си, их нужно просто вызвать и уметь ими пользоваться, вот тут и понадобиться умение ЧИТАТЬ на асме.