Основная память
XalionВ компьютерной памяти хранятся программы и данные. Из неё процессор считывает данные и записывает в неё другие.
Хранение этих данных в памяти создано на основе отличий между состояниями физических величин, например – тока.
Чем больше таких состояний, тем незначительнее отличия между ними, из-за этого память становится не надёжной.
В компьютерах используется двоичная система счисления, которая отражает состояние в ячейке: 1 – ток есть, 0 – тока нет.
Самая маленькая единица хранения информации в памяти – бит.
Бит – двоичный разряд, содержит 0 или 1.
Биты складываются в ячейки, из которых состоит компьютерная память. Каждая ячейка имеет свой уникальный адрес и содержит порцию данных.
Память состоит из групп ячеек. Данные в этих группах располагаются комбинациями 2 в степени k (2^k).
Адреса ячеек записываются в двоичном коде. m – длина двоичного кода. Максимальное количество адресуемых ячеек 2 в степени m (2^m).
Современные компьютеры используют память с 8ми-разрядными ячейками – байтами. Несколько байт складывается в машинное слово.
Машинные слова позволяют процессору или языкам программирования работать со своим содержимым как с единым целым. Они определяют разрядность данных, команд и регистров.
В 32-битных архитектурах машинное слово равно 4 байтам (32/8). Содержат 32-разрядные регистры и команды для манипуляции с 32-разрядными словами.
В 64-битных архитектурах машинное слово равно 8 байтам (64/8) . Содержат 64-разрядные регистры и команды для манипуляций с 64-разрядными словами.
Байты в словах могут нумероваться двумя способами: справа налево и слева на право.
Машины, в которых байты в слове нумеруются слева направо (--->) называются big endian, а справа налево (<---) little endian.
Эти названия взяты из «Путешествий Гулливера». Разногласия по поводу того, как нужно разбивать вареные яйца привели к войне.
Обыкновенные компьютеры, лэптопы, планшеты используют little endian, потому что при увеличении размера операнда, данные никуда не пропадут и не изменятся. Пример: 3210 ---> 3210'0000
Мейнфреймы используют big endian, для удобства сравнивания большого количества строк данных.
Передача данных между двумя системами нумерации происходит с потерями числовых значений, потому что данные из нулевого байта прямого порядка попадают в нулевой байт обратного порядка.
Пример: 00000110 – цифра 6 в big endian -----> 00000011 – 3 в little endian.
Простого решения этой проблемы не существует. Есть неэффективный способ – после каждой единицы данных помещать заголовок, который указывает какой тип данных следует за ним. Для обычных пользователей это не заметно, потому что в ОС встроены инверторы.
Следующая статья о том, как компьютер исправляет внутренние ошибки в памяти.