Как компьютер понимает язык программирования?

Как компьютер понимает язык программирования?

Xalion


Эта статья будет не понятна тем, кто не знает про то,
что такое
компьютер.


Компьютеру можно дать программы для выполнения, они работают благодаря набору инструкций процессора(ISA), конвейера(Pipeline), стека(stack) и "свалке"(heap).

Когда мы хотим что-то запрограммировать, то с помощью ЯП мы обращаемся к ISA(Instuction set architecture).


ISA – набор инструкций процессора. Они отличаются, в разных архитектурах процессоров – разные команды.

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

Набор инструкций ISA


ISA делится на два набора инструкций: RISC и CISC. CISC – применяется в процессоре с архитектурой x64/x86.

x64/x86 – архитектура процессора для настольных компьютеров.


RICS – это упрощенный набор инструкций и он применятся в процессоре с архитектурой MISC и ARM.

MISC – архитектура процессора с упрощенным набором инструкций.
ARM – архитектура процессора для мобильных устройств.



Работой процессора управляет конвейер(Pipeline).

Pipeline – команды выполняются последовательно, как обработка на конвейере.

Получает инструкцию для выполнения ---> декодирование инструкции и определение её типа ---> АЛУ выполняет вычисления, если это указано в инструкции ---> извлекает данные из памяти, если об этом указано в инструкции ---> возвращение в регистры или в память.

Схема pipeline в процессоре с архитектурой MISC.


Во время работы программа использует оперативную память компьютера.

RAM — блок из ячеек, туда помещают какие-либо данные.

Работать с этими физическими ячейками позволяет механизм управления RAM– virtual memory. Этот механизм работает еще и с жестким диском(винчестером).

Virtual memory работает с памятью как со страницами или блоками, обычно, каждый по 4Kb.

Управлением этих страниц занимается таблица страниц(Page table).
На этапе работы виртуальной памяти могут быть проблемы со скоростью работы по двум основным причинам: paging и page fault.

Paging – прием виртуальной памяти, когда она помещает страницу на винчестер и при необходимости её возвращает.
Page fault – ошибка, когда виртуальная память обращается к листу, которого нет или он закрыт для чтения.


На этапе компиляции программы компилятор просит у процессора небольшой кусок памяти – stack. С его помощью можно контролировать исполнение программы от начала и до конца.

Он работает по принципу "первый зашел, последний вышел".

Иллюстрация работы стека


В каждой программе есть входная точка или функция, она вызывается самой первой. Функция загружается в stack и поверх неё накладываются локальные переменные, другие функции и все остальное, которые для stack`а называются фреймами.

Фрейм состоит из 3 частей: параметры функции, указатель на предыдущий фрейм и локальные переменные.

Когда фрейм завершается, он вызывает предыдущий и так до тех пор пока первая функция не выйдет из стека. Размер стека зависит от программы.

Его можно выставить вручную в настройках компилятора. На каждый поток
в системе выделяется свой стек.

Вся остальная память, которая не входит в stack. называется свалкой или heap.

В heap можно создавать и удалять данные и объекты в любой момент времени, поэтому она сложнее в структуре и медленнее в работе.

Stack гораздо быстрее в работе, чем heap, потому что он использует фиксированный кусок памяти и все фреймы стека лежат в кеш-памяти процессора, а к ней получить доступ легче, чем к оперативной памяти.


Следующий конспект начнет большой цикл конспектов о архитектуре компьютера.

Report Page