Как выглядит обращение к консоли и запрос динамической памяти на уровне машинных команд?

Рейтинг: 1Ответов: 1Опубликовано: 22.09.2014

В книге А. Крупника по ассемблеру динамическая память вообще не рассматривается, но для работы с консолью он рекомендует пользоваться функцией WriteConsole. Судя по тому, что пишут на форумах, с динамической памятью тоже рекомендуют работать с помощью VirtualAlloc.

А что на аппаратном уровне делает VirtualAlloc? Какое-нибудь прерывание, или как-то узнаёт размер оперативки и просто выделяет указатель?

То же самое с консолью. Что происходит на аппаратном уровне, когда мы в консоль пишем текст? Особенно при выводе, от клавиатуры хотя бы прерывание есть.

Ответы

▲ 1Принят

В Windows консоль - это, по сути, виртуальный текстовый экран, реализованный на базе обычного окна, ничем не отличающееся от других окон. Для вывода на нее не используются прерывания, а вызовы функций WinAPI. Скорее всего WriteConsole где-то внутри вызывает DrawText, а дальше уже ОС берет шрифт и им рисует на экране через драйвер. Драйвер уже напрямую обращается к видеокарте.

При вводе аналогично не используются прерывания, а просто просматриваются сообщения окна консоли, выбираются нажатия на символьные клавиши, и коды соответствующих символов записываются в буфер, откуда уже "консольные" функции могут забирать их в виде текста.

С памятью немножко другая ситуация. Допустим, ОС имеет доступ ко всей физической памяти. При запуске большая часть памяти не принадлежит никакому приложению. По мере запуска программ ОС выделяет им память и где-то у себя отмечает, что вот этот кусочек памяти принадлежит этой программе. При освобождении памяти и закрытии программ память отмечается как незанятая. Никакой особой магии тут нет, просто менеджер памяти.