Мой вопрос больше касается разработки Unix/Linux, чем самого администрирования.
Я думаю, что это больше для программистов Unix/Linux низкого уровня, чем для администраторов. Это поможет мне начать разработку ядра и/или понять разработку системы Linux
Какая конкретно информация об оборудовании мне нужна, чтобы начать изучать, как Linux взаимодействует с периферийными устройствами и модулями оборудования. Например, архитектура шины и как взаимодействовать с контроллерами.
Также я хотел бы отметить, что в большинстве сред сейчас виртуальная машина — это то, на чем работает Linux. Так что то, что видит ОС под ней, это то, что я имел в виду.
Мне нужны какие-нибудь ссылки, пожалуйста, или как начать изучать эту тему.
Я знаю основные инструкции x86, но мои вопросы больше касаются контроллеров памяти и шин вокруг самого процессора; я имею в виду модель программатора в современной среде параллельного программирования.
решение1
То, как это работает, во многом зависит от архитектуры/машины. Linux (ядро) создает древовидную схему доступных устройств и их подключений при загрузке (и по мере появления/исчезновения подключенных устройств). Откуда берется информация, зависит от базового оборудования.
Другие операционные системы, работающие на той же машине, будут делать это по-своему; если они должны быть максимально переносимыми, они, вероятно, используют аналогичный подход.
Например, работая с оригинальным ПК (или его эмуляцией), вы получаете доступ к рядузафиксированныйустройства, к которым в некоторых случаях осуществляется доступзафиксированный(или почти) путь. Некоторые Unice, которые я имел удовольствие наблюдать, поставлялись с объектным кодом для системы, для добавления/перенастройки устройств требовалось редактирование некоторых файлов C, перекомпиляция и перелинковка ядра. Тонны веселья.
решение2
Купите себе что-то вроде макетной платы z80 и попробуйте что-нибудь послать через последовательный порт или запустите эмулированный компьютер IBM с DOS и сделайте то же самое, используя DOS IRQ.
На старых машинах Z80 с текстовым дисплеем, отображаемым в памяти, можно было легко отобразить хотя бы текст.
Подобные вещи можно (легко или немного сложнее или непрактично) делать, используя: ассемблер, Pascal, Ada, C (почему для этого следует использовать C++), BASIC и довольно много других языков, но ожидайте МНОГО РАБОТЫ!
Если вы хотите программировать на C/Assembler/Ada (я думаю, на Pascal), то для сравнительно современных процессоров, которые могут поддерживать приличный объем памяти, обратите внимание на MIPS2000 и его сородичей (большой объем памяти, который легко обеспечивает прямой доступ к 512 МБ ОЗУ). Я говорю это, потому что это семейство процессоров имеет довольно простую архитектуру памяти.
Проверьте исходники grub!
Если вам интересно, как загрузить программу (загрузчик) при загрузке, или посмотрите игры, созданные с помощью grub, например, Space Invaders (клон Space Invaders, работающий на «голом железе»).
Вы можете загрузить grub-invaders на виртуальной машинесм. grub-invaders