awesome-everything EN
↑ Обратно к восхождению

Базовый CS с нуля

Байт

Суть Байт (8 битов) — стандартная адресуемая единица памяти. Память байтово-адресуемая: каждый адрес называет один байт, а не один бит. Размеры слов группируют несколько байт для арифметики.
◷ 18 min

Предыдущий урок показал память как ряд пронумерованных ячеек. Но что именно представляет собой одна ячейка? Сколько битов она хранит?

Можно было бы предположить, что один бит — ведь бит является наименьшей единицей данных. Но если бы ячейки памяти хранили только по одному биту, для сохранения буквы «A» (которой нужно 8 битов в кодировке ASCII) потребовалось бы 8 адресов. Каждое обращение работало бы с крошечными однобитными кусочками, что сделало бы программирование крайне неудобным.

Реальное железо остановилось на куда более практичном решении: одна ячейка хранит 8 битов, и эти 8 битов вместе называются байтом. Цель этого урока — понять, почему байт, а не бит, является атомом памяти.

Цель

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

1

Байт: 8 битов вместе. Байт — это ровно 8 битов. Эти 8 битов рассматриваются как единое целое: они читаются вместе, записываются вместе и — самое важное — адресуются вместе. Когда ты запрашиваешь у памяти адрес 7, в одной операции возвращаются все 8 битов по этому адресу; биты по отдельности не запрашиваются.

8 битов внутри байта каждый хранит 0 или 1, поэтому байт может хранить 2^8 = 256 различных значений (паттерны из 8 битов от 00000000 до 11111111, то есть от 0 до 255 в десятичном виде). Этого достаточно для одного латинского символа, одного байта большего числа, одной компоненты пикселя и многих других вещей — именно поэтому байт стал универсальным строительным блоком.

2

Почему именно байт, а не бит является адресуемой единицей. Память даёт каждой ячейке один адрес. Если бы ячейки хранили по одному биту, каждому биту нужен был бы адрес: для хранения простого 32-битного целого числа потребовалось бы 32 адреса, каждый возвращал бы один бит. Адресное пространство исчерпывалось бы в 8 раз быстрее, и каждая полезная операция требовала бы 8 отдельных чтений памяти только для сборки одного символа.

Байт находит правильный баланс: достаточно большой, чтобы хранить полезный минимум (символ, небольшое число, байт флагов), достаточно маленький, чтобы не быть расточительным. Когда программа хранит один булев флаг (истина или ложь), он занимает один байт, хотя информацию несёт только один бит — небольшая трата, но приемлемый компромисс ради простоты адресации по байтовым границам.

Это свойство называется байтово-адресуемой памятью: каждый адрес называет один байт. Все широко используемые сегодня процессоры и операционные системы работают с байтово-адресуемой памятью.

Почему это работает

Почему именно 8 битов, а не 6 или 10? Ранние компьютеры использовали разные размеры групп (6-битные символы были распространены на мейнфреймах). 8-битный байт победил, потому что удобно вмещает две 4-битные группы, называемые тетрадами (каждая — одна шестнадцатеричная цифра), является степенью двойки (что упрощает двоичную арифметику) и достаточно велик для символов ASCII (7 битов) с запасом в один бит. К 1970-м годам 8-битные микропроцессоры — Intel 8080 и Motorola 6800 — стандартизировали 8-битный байт в отрасли, и с тех пор он остаётся универсальной единицей.

3

Как читать значение байта. Байт содержит 8 битов в фиксированном порядке. Самый правый бит называется битом 0 (или младшим значащим битом, МЗБ), а самый левый — битом 7 (старшим значащим битом, СЗБ). Каждая позиция имеет вес: позиция k вносит вклад 2^k в общее значение, если этот бит равен 1.

Пример: байт 01000001.

  • Бит 7 = 0 → вклад 0
  • Бит 6 = 1 → вклад 64
  • Биты 5–1 = 0 → вклад 0
  • Бит 0 = 1 → вклад 1
  • Итоговое значение = 64 + 1 = 65

Значение 65 — это ASCII-код буквы «A». 8-битная группа может напрямую представить любое значение от 0 (все биты 0) до 255 (все биты 1 = 128+64+32+16+8+4+2+1 = 255).

4

Размер слова: группировка байт для арифметики. Хотя байт — наименьшая адресуемая единица, большинство арифметических операций работает с более крупными группами. Слово — это естественный размер группы, которую CPU обрабатывает за одну операцию. Современные настольные и серверные CPU имеют размер слова 64 бита: они читают, записывают и вычисляют сразу по 8 байт. 64-битное целое число занимает 8 последовательных байт в памяти (8 байт × 8 битов/байт = 64 бита).

Более ранние CPU были 32-битными (4-байтное слово), ещё раньше — 16-битными или 8-битными. Размер слова — свойство архитектуры CPU. Он определяет максимально адресуемый объём памяти (32-битный CPU может адресовать 2^32 байт = 4 ГБ; 64-битный — 2^64 байт, куда больше, чем есть в любой существующей машине) и ширину арифметических операций.

Байт и слово сосуществуют: память всегда адресуется побайтово, но CPU может загрузить многобайтовое слово за одно чтение памяти, если байты расположены по последовательным адресам.

0
b7
1
b6
0
b5
0
b4
0
b3
0
b2
0
b1
1
b0
Один байт: 8 битов на позициях b7 (СЗБ) — b0 (МЗБ). Выделенные биты равны 1. Паттерн 01000001 = 65 в десятичной = «A» в ASCII.
Разбор примера

Подсчёт байт в данных небольшой программы.

Программа хранит следующее:

  • Один 8-битный счётчик: 1 байт (адреса 0–0)
  • Одно 16-битное целое: 2 байта (адреса 1–2)
  • Одно 32-битное целое: 4 байта (адреса 3–6)
  • Один символ ASCII: 1 байт (адрес 7)

Всего байт: 1 + 2 + 4 + 1 = 8 байт, занимающих адреса от 0 до 7.

Сколько это битов? 8 байт × 8 битов/байт = 64 бита всего.

Заметь: 16-битное целое использует два последовательных байтовых адреса (1 и 2). CPU читает оба байта вместе, чтобы восстановить полное 16-битное значение. Каждый байтовый адрес по-прежнему называет ровно 8 битов, но многобайтовые значения занимают несколько последовательных адресов.

Если бы память была битово-адресуемой:

  • 16-битное целое потребовало бы 16 битовых адресов.
  • 32-битное целое потребовало бы 32 битовых адреса.
  • Итого: 1 + 16 + 32 + 1 = 50 битовых адресов для тех же данных.

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

Граничные случаи

Некоторые исторические архитектуры использовали битово-адресуемую или словно-адресуемую память (где адрес называет целое слово, а не байт). PDP-10 был словно-адресуемым с 36-битными словами. Такие решения усложняют программное обеспечение, которому нужно работать с отдельными символами или байтами внутри слова. Практически всё современное железо является байтово-адресуемым, поскольку это обеспечивает наиболее естественную гранулярность для обработки текстовых и бинарных данных.

Практика 0 / 5

Сколько битов в одном байте? Введи число.

Сколько различных значений может хранить один байт? (2 в степени 8.) Введи число.

Программа хранит 32-битное целое число. Сколько байт оно занимает в памяти?

Память байтово-адресуемая. Сколько битов называет один адрес?

64-битный CPU имеет размер слова 64 бита. Сколько это байт?

Проверь себя
Викторина

Почему память является байтово-адресуемой, а не битово-адресуемой?

Итог

Байт — это 8 битов, объединённых в одну единицу. Он может хранить 256 различных значений (от 0 до 255). Память является байтово-адресуемой: каждый адрес называет ровно один байт, а не один бит. Битовая адресация была бы непрактична — слишком много адресов даже для простых данных, и каждая операция требовала бы сборки из нескольких чтений. Байт достаточно велик, чтобы быть полезным (вмещает символ или небольшое число), и достаточно мал, чтобы оставаться атомом адресации. Слово — это группа байт, которую CPU обрабатывает за один шаг: как правило, 4 байта (32-битные машины) или 8 байт (64-битные) — но нижележащая память всегда обращается побайтово.

Продолжить восхождение ↑Значение и адрес
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources4
expand
  1. 01
  2. 02
  3. 03
  4. 04

Trademarks belong to their respective owners. Editorial reference only.