Одноуровневая память с большими адресами — вероятно, один из самых известных компонентов AS/400, и редко какая презентация обходится без упоминания о ней. Это даже странно — ведь одноуровневая память не видима никому и ничему выше уровня MI: ни OS/400, ни прикладным программам, ни даже компиляторам. Она доступна только SLIC, а MI работает с объектами, используя для ссылок на них имена. Пространство — эквивалент памяти на уровне MI, но пространство не очень напоминает одноуровневую память.
Программы, и прикладные, и системные адресуют объекты при помощи 16-байтовых указателей; которые точнее было бы называть 128-разрядными (их используют все прикладные программы с момента появления System/38 в 1978 году). Но не все разряды: этого указателя используются, поэтому AS/400 обычно не называют 128-разрядным компьютером. Указатель содержит 64-разрядный адрес одноуровневой памяти, а также несколько разрядов дескриптора и неиспользуемые разряды, зарезервированные для будущих расширений.
Возможно, нам следует называть AS/400 128-разрядной системой — согласитесь, это было бы неплохой рекламой. Ведь называет же Digital свой процессор Alpha 64-разрядным, хотя он реализует лишь 41-разрядные адреса! HP также не использует для адреса все 64 разряда в своем процессоре PA RISC 2.0. И все же, я полагаю, мы лучше будем пока говорить о 64 разрядах — по крайней мере, до тех пор, пока до уровня IBM не подтянутся остальные. Кроме того, 64 разряда уже и так дают очень большое адресное пространство.
«Но насколько большое?» — спросите Вы.
Ответ: 16 экзабайтов, что равно примерно 18,4 квинтиллионам байтов (или точнее 18 446 744 073 709 551 616 байтов).
Большинство людей не в состоянии представить себе такое число. Как я уже упоминал, число байтов, которые могут быть адресованы с помощью 48 разрядов, примерно равно числу миллиметров расстояния от Земли до Солнца и обратно. Но для 64 разрядов нужна новая аналогия.
Ричард Рубин, чьи замечания чрезвычайно помогли в работе над этой книгой, напомнил мне историю, рассказанную Джорджем Гамовым (George Gamow) в книге «One, Two, Three, Infinity». Однажды индийский шах Ширхам пожелал вознаградить своего великого визиря Сисса Бен Дахира за изобретение шахмат. Визирь попросил шаха положить на первую клетку шахматной доски одно зерно пшеницы, на вторую — два, на третью — четыре, на четвертую — восемь и так далее, удваивая число на каждой клетке, пока все 64 клетки не будут заполнены. Общее число зерен должно было бы составить 264 — 1. Гамов подсчитал, что если бушель[ 61 ]
пшеницы содержит 5 миллионов зерен, то для покрытия всей доски потребовалось бы 4 триллиона бушелей. Когда Гамов писал свою книгу в 1946 году, мировое производство пшеницы составляло 2 миллиарда бушелей в год. При сохранении производства на том же уровне, всему миру потребовалось бы две тысячи лет, чтобы вырастить требуемое количество зерен.Для тех, кто предпочитает аналогию с миллиметрами, 18 квинтиллионов — это примерно вдвое больше числа миллиметров в световом годе, и всего лишь немногим меньше половины расстояния до Альфы Центавра (ближайшей к Солнечной системе звезде). Ясно, что если мы начнем измерять астрономические расстояния в миллиметрах, то нам потребуется более 64 разрядов. А 128-разрядный указатель дает нам...
Так что какие бы аналогии мы не проводили, и как бы себе все это не представляли, 64-разрядная адресация предоставляет огромные возможности.
Одноуровневая память AS/400 получила свое имя в честь первопроходцев разработки виртуальной памяти в 60-х годах. Чтобы понять происхождение этого термина, необходимо углубиться в историю.
Впервые виртуальная память появилась в компьютере Atlas, созданном в 1961 в английском городе Манчестере (Manchester). В те годы для изготовления памяти использовалась очень дорогостоящая технология магнитных сердечников. Большим программам требовалось много памяти, зачастую больше, чем было на компьютере. Чтобы программа могла поместиться в памяти, приходилось разбивать ее на малые фрагменты и хранить на магнитных дисках или барабанах.
Магнитные барабаны были популярны в начале 60-х годов. Барабан похож на жесткий диск, но у него по одной головке чтения/записи на каждую дорожку. В то время барабаны обеспечивали более высокую производительность по сравнению с дисками, так как исключалось время позиционирования головки на дорожку. С сокращением времени позиционирования барабаны вышли из употребления.