Код, соединяющий аппаратное и программное обеспечение в современной ОС - PullRequest
2 голосов
/ 16 ноября 2009

Я немного запутался в том, как программное обеспечение взаимодействует с аппаратным обеспечением, несмотря на то, что я учился на компьютерном уроке.

Где я могу найти код из ОС, такой как Linux или BSD, или даже из C, который позволяет абстрагировать аппаратное обеспечение.

Есть ли какие-нибудь хорошие материалы, которые я могу прочитать, чтобы полностью понять взаимодействие аппаратного и программного обеспечения.

Ответы [ 5 ]

2 голосов
/ 16 ноября 2009

Я нашел эту лекцию чертовски удивительной: http://video.google.com/videoplay?docid=7654043762021156507#

2 голосов
/ 16 ноября 2009

Отличным (хотя и дорогостоящим) введением, которое идет от C до сборки, от машинного кода до логических схем, является Введение в вычислительные системы: от битов и затворов до C и далее от Yale Patt. Эта книга действительно помогает мне понять, как вещи строятся друг на друге и как работает компьютерное оборудование.

Introduction to Computing Systems

1 голос
/ 16 ноября 2009

Абсолютно самая распространенная абстракция - это драйвер устройства , программный компонент, который отвечает за непосредственное взаимодействие с оборудованием и обеспечивает стандартный интерфейс для операционной системы. Обычно интерфейс o / s имеет такие функции, как init (), uninit (), start_io (), handle_interrupt () и некоторые функции управления и состояния.

Драйвер устройства обладает глубокими знаниями об устройстве, а также об аппаратном интерфейсе устройства. Например, типичный интерфейс диска имеет пять или около того последовательных ячеек памяти где-то, которые составляют интерфейс контроллера. Первым обычно является регистр состояния и управления. То есть чтение возвращает бит, указывающий, занят ли он выполнением команды; другой бит указывает на наличие расширенной информации о состоянии. Запись в «CSR» (как обычно TLAified , регистр состояния управления) инициирует такие команды, как «отправить команду на контроллер диска», «прочитать расширенный статус с контроллера диска» и т. Д. код команды (сброс, чтение данных, запись данных и т. д.). Другие регистры, как правило, являются адресными указателями, указывающими, куда в пределах физической памяти компьютера передавать данные в или из.

Имейте в виду: попытка прочитать драйвер устройства, чтобы выяснить, как работает компьютерная система, это все равно, что попытаться выяснить, как работает лес, изучив корни саженца. Это один из многих важных компонентов, но следуйте, куда он ведет, и в конечном итоге вы увидите всю картину.

1 голос
/ 16 ноября 2009

Ну, вы можете получить исходный код Linux с www.kernel.org и исходный код NetBSD с http://cvsweb.netbsd.org/, но это очень большие ядра с более чем миллионом строк кода; не очень хороший вводный материал.

Вот мысль: прочитайте Список эмуляторов компьютерной системы в Википедии и найдите тот, который выглядит интересно, работает на вашей платформе и поставляется с примером кода и автономными программами. Напишите какой-нибудь отдельный код.

Вы можете сделать это на реальном ПК, но это более медленный процесс с меньшей отладкой и меньшей видимостью.

0 голосов
/ 16 ноября 2009

Любое ядро ​​ОС, например, Linux или * BSD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...