На следующий день ко мне прибыли шифровальщики из ЦРУ, и мне пришлось потратить несколько дней на то чтобы понять азы создания алгоритма поиска зависимостей, для того чтобы дешифровать код Энигмы. И да без компьютера тут не обойтись, потому что на самом деле ключей было несколько, и они часто менялись, при этом заведомо невозможно было определить в каком ключе тот или иной сигнал без дешифровки. Поэтому дешифровать ключи можно только все вместе, и для этого нужен мощный компьютер. Однако, правильно написанная программа на хорошем компьютере способна была выполнить эту задачу за несколько часов или дней, а ключи менялись в Германии в среднем раз в год. И видимо, даже если бы немцы узнали, что мы ломаем их за пару дней, им сложно было бы нормально их поменять на нечто более сложное.
Спустя неделю я приступил к созданию машины дешифрования Энигмы. Я понял, что средненького компьютера тут не хватит. Для полноценной работы нужен мощный компьютер с большим количеством чипов, чтобы работать в многозадачном режиме, при этом необходимо иметь очень много оперативной памяти. Однако, нет ничего невозможного, только вот создание большого количества оперативной памяти станет проблемой. Итак, я потратил два дня на создание чертежей всех серийных устройств, микрочипов и памяти, и провёл пресс конференцию со своими людьми. Собрал их в аудитории и начал вводную:
-Как вы знаете, мы работаем над созданием мощного компьютера, и я почти на три недели затянул создание машины следующего поколения, решая каким должен быть заказ. Тем не менее, мы не теряли зря времени и создали монитор нового поколения. Итак, наш новый компьютер для секретных нужд Пентагона должен иметь следующие параметры. Два монитора и два пульта управления разрешением 400 на 320 пикселей, с двумя видеокартами, каждая с объёмом памяти на 2 килобайта и скоростью 32 байтного процессора на 90 килогерц. Восемь жёстких дисков объёмом памяти на 5 мегабайт каждый. То есть огромный объём информации на 40 мегабайт, при скорости загрузки каждого диска 4 килобайта в секунду, скоростью записи 1 килобайт в секунду. При этом должны быть съёмные устройства памяти на дисках до 1го мегабайта каждый. Информация будет храниться на магнитной плёнке. Сам компьютер должен иметь феноменальные параметры. Процессор на 2048 байт памяти мощностью 150 килогерц, и самое главное оперативная память нового типа объёмом не менее 256 килобайт, для чего потребуется создать для оперативной памяти два миллиона ячеек. Всё это вам предстоит сделать вручную и без ошибок. Я подготовил чертежи, и я полагаю, что, работая очень быстро, вы все справитесь с заказом в течение трёх месяцев. При этом, мы подключим к работе ещё двести обученных специалистов, что снимут с фирмы Юань. Я понимаю, объём оперативной памяти кажется колоссальным, но учтите, вы будете лепить конденсаторы оперативной памяти сразу по 8 байт. Лично у меня, если всё нужное под рукой, производство такого конденсатора занимает полчаса. Я уверен, имея все материалы под руками, вы справитесь.
-Но зачем такой мощный компьютер так быстро?
-Эй, мы накануне войны, так надо. Приступаем к работе прямо сегодня, не теряем и минуты, заканчивайте свои дела, и принимайте руководство новенькими. И ребята, это будет наш первый компьютер размером с небольшую комнату, ясно? Он будет стоить миллионы долларов и станет особо важен для США, постарайтесь на славу.
Мы ушли с аудитории, и несколько консультантов по дешифровке задал мне вопрос.
-Зачем столь мощный процессор и такая большая оперативная память? Я полагал, что для дешифровки потребуется малый компьютер. Нам нужно расшифровать Энигму как можно быстрее, нам не нужна такая супермашина, было бы достаточно варианта мини, что вы делаете за пару недель.
-Создать процессор здесь будет не так сложно, это неделя работы. Но вы заблуждаетесь, количество операций, что потребуется для дешифровки Энигмы очень велико, и оперативной памяти будет остро не хватать. Вы неверно оцениваете требуемое количество операций и памяти для дешифровки, на самом деле 256 килобайт будет очень мало. Из всех параметров, лишь скорость процессора является достаточной для данного вида работ. Менее мощный в плане памяти компьютер просто не сможет работать над задачей вовсе. Придётся выполнять множество операций в многозадачном режиме, и главное препятствие тут это нехватка оперативной памяти. Увы, до сих пор работы с особо малыми чипами ведутся почти вручную, с использованием крайне простой оснастки, так что всё не так радужно. А что касается сорока мегабайт постоянно памяти, то их может даже и не хватить. Но сделать восемь крупных устройств памяти не так сложно, самым большим препятствием является оперативная память. Одно могу сказать, я заложил в проект самый мощный компьютер из того, что мы сможем создать за три четыре месяца. К весне 1941ого года компьютер будет готов, и мне потребуется ещё около трёх месяцев на то, чтобы запрограммировать его и наладить систему взаимодействия данных, последнее не менее важно.
-Поясните?
-Калькуляторы прошлого не умеют находить нужную информацию кратким путём. Они обычно просто сканируют весь диск, пока не найдут то что надо, или вовсе считывают данные подряд с магнитной ленты. Работая с большими объёмами памяти в многозадачном режиме, нельзя пролистывать всю информацию целиком, требуется уметь находить нужную информацию, и в этой области я сильно продвинулся, но пока чисто теоретически.
-И как же вы решите этот вопрос?
-Я разбил каждый диск объёмом в 5 мегабайт на кластеры по 2 килобайта каждый. Итого на диске 2500 кластеров. А саму информацию я разбил на файлы, и разные файлы могут занимать разный объём, в том числе несколько кластеров. В заглавии диска находится контрольный кластер объёмом 8 килобайт, в нём имеется полный список файлов и кластеров. Программа не может в режиме онлайн отслеживать, где лежит каждый файл, но чётко может определить по номеру положение любого кластера. Это новая форма работы с массивом информации, без которой функционирование компьютера было бы невозможно. При этом, немного похожая система используется и для поиска информации в оперативной памяти, но там кластеры намного меньше, и объём одного кластера составляет восемь байт. В заглавии кэш памяти компьютера имеется 4х битный список всех ячеек оперативной памяти, и он настраивается заново при каждом включении компьютера. И этот процессор четырёхбитный. Недостатком данной системы является тот факт, что сколь бы не был мал размер операций, компьютер может работать только с ячейкой памяти не менее 8ми байт, обрабатывая её полностью, на что тратится лишняя оперативная память компьютера и операции. Это большой математический недостаток моей системы, избавиться от которого я не смог. Опираясь на этот список кластеров оперативной памяти, процессор ищет свободные ячейки, и знает где что происходит. При этом, заглавие оперативной памяти у процессора это очень сложное устройство и на работу с ним уходит от 5% до 75% мощности процессора, смотря какой тип операций выполняется. То есть четверть всей работы процессора это поиск где чего происходит, а не сама полезная работа, но без этого никак. При этом, данный конкретный процессор который я создам в принципе не способен увидеть более 256 килобайт оперативной памяти. В связи с чем, позже добавить оперативную память в этот компьютер будет нельзя, меньше 256 килобайт оперативной памяти можно, больше нельзя. Хотя если поменять размер ячейки оперативной памяти, увеличив её, например, до 16 байт и перенастроив процессор, тогда тот сможет увидеть 512 килобайт, но тогда придётся выбросить остальную оперативную память, что составляет 80% стоимости компьютера. При этом если бы процессор был сделан изначально как 8ми битный, он тратил бы больше системных ресурсов на поиск того же количества ячеек, из-за чего я постарался найти золотую середину между мощностью процессора, объёмом оперативной памяти, битами процессора и размером ячейки памяти. В будущем для обеспечения взаимозаменяемости компонентов надо будет стандартизировать размер ячейки оперативной памяти и структуру заглавия каждого процессора по поколениям, 4бит, 8бит и 16бит.
-А как можно повысить количество доступной оперативной памяти на будущих компьютерах?
-Для этого нужно увеличить минимальную ячейку с которой работает процессор с 8 байт до 16 байт, в этом случае количество доступной оперативной памяти вырастит вдвое, а увеличение битности процессора может увеличить видимую оперативную память до 4х или 8ми мегабайт, поскольку увеличение бит процессора позволит в 16 или в 64 раза увеличить список кластерного заглавия. Однако, если 8 битный процессор увидит больше оперативной памяти, то он будет тратить в два раза больше процессорной скорости на поиск ячеек, и его производительность в работе с маленькими файлами и короткими операциями сильно упадёт. В связи чем, надо стремиться к тому, чтобы битность процессора была минимальна, как и размер кластера оперативной памяти. Однако, в будущем, увеличивая объёмы оперативной памяти, нам неизбежно придётся увеличивать число бит процессора и объём минимально используемой ячейки. При этом процессор уровня 64х бит, сможет видеть порядка 8, 16, 64, 128 или даже 192 гигабайт оперативной памяти. В зависимости от структуры его кластерного заглавия и величины ячейки, при этом я бы не стал расширять кластерное заглавие оперативной памяти и размер ячейки до предела, поскольку это также снизит скорость работы, поскольку процессор будет перебирать слишком много вариантов ячеек в поиске нужной ему ячейки памяти. Ведь чем длиннее список кластеров памяти, тем дольше компьютер ищет там нужный ему кластер. А эти задержки на поиск длительностью в миллионные доли секунд, на каждый такт, часто неимоверно снижают производительность работы компьютера, особенно если речь идёт о работе с большим количеством мелких цифр. Я думаю, при превышении количества бит процессора выше 32х, или при работе более чем с 256 мегабайтами оперативной памяти, было бы разумно в будущем перейти к двухступенчатой или двухэтажной системе обработки данных ячеек оперативной памяти. Когда имеется заглавие списков кластеров, дальше осуществляется переход к отдельному списку кластеров, внутри которого ещё раз ищется нужный кластер. С тем чтобы не пришлось и дальше увеличивать минимальный объём ячейки оперативной памяти, организовать кластерную систему так, чтобы вся система была разбита на крупные кластеры, внутри каждого из которых будет собственное заглавие и список мелких кластеров. Однако, такая система удел далёкого будущего, и станет актуальна лишь после того как процессоры шагнут за 16 бит, а объём рабочей оперативной памяти превысит 64 мегабайта и тогда я изменю архитектуру работы с данными. Двухэтажная система хранения данных позволила бы 16 битному процессору видеть тысячи гигабайт оперативной памяти и работать с большими массивами данных, включая мелкие цифры в тысячи раз быстрее. Так можно радикально не меняя конструкцию компьютера и не увеличивая скорость микрочипов достичь стократного прироста производительности. Поскольку в неэффективной системе работы с большими массивами данных до 95% работы процессора может расходоваться на поиск нужной ячейки данных, а не на совершение операции. К тому же реализовать такую двухэтажную систему сложно, и для этого надо глубоко понимать, как и почему работает компьютер, как в нём осуществляется поток данных. На практике, я стал замечать, что многие мои сотрудники, понимая в целом устройство отдельных микрочипов, назначение видеокарты и оперативной памяти, тем не менее, не понимают достаточно глубоко, как осуществляются процессы в архитектуре данных. И это непонимание проявляется с самых разных сторон. Из-за чего в частности страдает многозадачный режим, поскольку многие потоки данных пускаются по очереди, когда можно сначала выполнить действия по отдельности, ну, например, складывая х*х+у*у, логично, что можно умножить иксы и игреки отдельно, а потом уже сложить, при этом умножение иксов и игреков будет выполняться разными микрочипами одного процессора одновременно. Имея в ядре процессора множество микрочипов, несложно раскладывать любые уравнения на составляющие операций, и выполнять их покусочно, а потом складывать, но так сложнее. Итого при правильной организации работы процессора, по времени получится две логических операции одно умножение и одно сложение. На деле криворукие люди, пытаясь программировать компьютер, часто делают три логических операции, два умножения последовательно, потом сложение. Хотя даже один процессор с кэш памятью на 256 байт, вполне может сначала параллельно выполнить два умножения на разных микрочипах, а потом сложить. В длинных уравнениях влияние этого фактора становится ещё важнее. Другое дело, что такой вариант задачи чуть сложнее, и люди идут по простому пути, заставляя компьютер считать всё последовательно в однозадачном режиме, я стараюсь бороться с такими отклонениями.