Как стать автором
Обновить

«640 кбайт хватит для всего»

Время на прочтение2 мин
Количество просмотров13K

Фразу из названия часто приписывают Б. Гейтсу - не знаю точно, он это говорил или кто-то другой, но это и не важно.

Для тех, кто не застал: когда-то давным-давно, во времена динозавров, лет 35 назад, в компьютерах IBM PC XT под управлением MS DOS программам было доступно всего 640 кбайт памяти.

Не гигабайт, не мегабайт, а всего лишь килобайт. Туда помещались текстовые редакторы, файловые менеджеры, базы данных, бухгалтерские программы, игры, софт для FIDO (типа "электронная почта по модему"), BBS ("сайты"), в общем всё что работало на MS DOS.

Откуда взялась именно такая цифра, 640 кбайт? Дело не только в том, что память в те времена стоила дорого, дело в том, что у процессора Intel 8086 было всего 20 адресных линий.

Для того, чтобы адресовать ячейку памяти - процессору нужно выставить на адресной шине её адрес, и только потом прочитать данные через шину данных.
20 линий - 2^20 = 1048576 байт, 1 мегабайт, который можно адресовать.

Но часть из этого мегабайта, верхние адреса - приходилось отдавать ROM BIOS, где сидели процедуры ввода-вывода (Basic Input-Output System), например обработка ввода с клавиатуры, вывода символов на экран, работа с дисками и тому подобное - в результате доступной для RAM оставалась только нижняя часть адресов, те самые 640 килобайт. Из которых еще часть съедала таблица прерываний и ОС.

И даже то, что оставалось программе - нельзя было просто так взять и использовать.
Да, адресная шина 20 линий, но процессор-то 16-разрядный, а значит, его регистры могут адресовать за раз только 2^16 = 65536 байт, 64 килобайта.

Для того, чтобы получить доступ ко всей доступной памяти - использовалась сегментная адресация: один регистр задавал 64-килобайтный сегмент, а другой - смещение в нём.
Если вам нужно прочитать файл, размер которого меньше 64 кбайт - это можно сделать за одну операцию, указав сегмент и смещение. А если больше - то уже в несколько заходов, увеличивая адрес сегмента.
Всё это сразу увеличивало в разы время выполнения, и усложняло программу.

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

В общем, программистам приходилось что-то придумывать и извращаться, чтобы обойти ограничения на 64кб сегмента, и общее ограничение в 640 кбайт RAM.
Это было сложно, плохо и неудобно - но как-то получалось.

Но техника развивалась - и вот появились сначала 32-разрядные, а затем и 64-разрядные процессоры, появилась плоская адресация и дешевая память.

А вместе с простотой работы с плоской адресацией - умерло такое понятие как оптимизация памяти: зачем ломать себе голову, если можно выделить под декоративную картинку хоть гигабайт.
Кому мало RAM будет - пусть новый компьютер покупают!

Теги:
Хабы:
+5
Комментарии50

Публикации

Ближайшие события