KDF9 был одним из первых британских 48-битных компьютеров, разработанных и построенных компанией English Electric (которая в 1968 году объединилась с International Computers Limited (ICL)). Первая машина была введена в эксплуатацию в 1964 году, а последняя из 29 машин была выведена из эксплуатации в 1980 году в Национальной физической лаборатории . KDF9 был разработан и использовался почти исключительно в математических и научных областях обработки данных — в 1967 году девять из них использовались в университетах и технических колледжах Великобритании. [1] KDF8 , разработанный параллельно, был нацелен на коммерческие рабочие нагрузки обработки.
KDF9 был ранним примером машины, которая напрямую поддерживала многопрограммирование , используя смещения в своей основной памяти для разделения программ на отдельные виртуальные адресные пространства. Для платформы было разработано несколько операционных систем , включая те, которые обеспечивали полностью интерактивное использование через машины PDP-8 , выступающие в качестве интеллектуальных терминальных серверов . Было доступно несколько компиляторов , в частности как проверочные, так и глобально оптимизирующие компиляторы для Algol 60 .
Логические схемы KDF9 были полностью твердотельными . KDF9 использовал логику диод-транзистор с трансформаторной связью , построенную на германиевых диодах, около 20 000 транзисторов и около 2 000 тороидальных импульсных трансформаторов . [2] Они работали на тактовой частоте 1 МГц, которая выдавала два импульса по 250 нс, разделенных 500 нс, в каждом такте. Максимальная конфигурация включала 32 К слов 48-битной памяти ядра (192 К байт) с временем цикла 6 микросекунд. Каждое слово могло содержать одно 48-битное целое или число с плавающей точкой , два 24-битных целых или числа с плавающей точкой, шесть 8-битных слогов инструкций или восемь 6-битных символов. [3] Также была предусмотрена эффективная обработка чисел из двойных слов (96 бит) как в целочисленном, так и в плавающем формате. Однако не было возможности для адресации байтов или символов, так что нечисловая работа страдала в сравнении. Его стандартный набор символов был версией кода бумажной ленты Friden Flexowriter , который был ориентирован на Algol 60 и включал необычные символы, такие как индекс Algol 10. Однако каждый другой тип устройства ввода-вывода реализовал свое собственное подмножество этого. Например, не каждый символ, который можно было прочитать с бумажной ленты, можно было успешно напечатать.
Архитектура ЦП включала три набора регистров. Nest представлял собой 16-глубокий стек арифметических регистров, SJNS (Subrutine Jump Nesting Store) представлял собой аналогичный стек адресов возврата. Q Store представлял собой набор из 16 индексных регистров, каждый из которых состоял из 48 бит, разделенных на части Counter (C), Increment (I) и Modifier (M) по 16 бит каждая. Флаги в инструкции обращения к памяти указывали, должен ли адрес быть изменен частью M Q Store, и, если да, должна ли часть C быть уменьшена на 1, а часть M увеличена на содержимое части I. Это сделало кодирование циклов подсчета очень эффективным. Три дополнительных уровня Nest и один дополнительный уровень SJNS были зарезервированы для Director, операционной системы, что позволяло обрабатывать прерывания по короткому пути без явного сохранения и восстановления регистра. В результате накладные расходы на прерывания составляли всего три такта.
Инструкции состояли из одного, двух или трех слогов. Хотя слово « байт » было придумано конструкторами IBM 7030 Stretch для группы из восьми бит , оно еще не было широко известно, и English Electric использовала слово « слог » для того, что сейчас называется байтом. Большая часть арифметики происходила в верхней части гнезда и использовала инструкции с нулевым адресом и одним слогом, хотя арифметика адреса и обновление индекса обрабатывались отдельно в хранилище Q. Обработка хранилища Q и некоторые инструкции обращения к памяти использовали два слога. Инструкции обращения к памяти с 16-битным смещением адреса, большинство инструкций перехода и 16-битные инструкции загрузки литералов использовали 3 слога.
Плотное кодирование инструкций и интенсивное использование наборов регистров означало, что для обычных научных кодов, таких как скалярное произведение и полиномиальные внутренние циклы, требовалось относительно немного обращений к хранилищу. Это во многом компенсировало относительно медленное время цикла ядра, давая KDF9 около трети скорости его гораздо более известного, но в 8 раз более дорогого и гораздо менее успешного современника, Manchester/ Feranti Atlas Computer .
KDF9 была одной из самых ранних полностью аппаратно защищенных многопрограммных систем. До четырех программ могли быть запущены одновременно под управлением ее элегантно простой операционной системы Timesharing Director , каждая из которых была ограничена собственной основной областью регистрами BA (базовый адрес) и NOL (количество местоположений). Каждая программа имела свои собственные наборы стека и регистров Q-хранилища, которые активировались при отправке этой программы, поэтому переключение контекста было очень эффективным.
Каждая программа могла напрямую управлять аппаратными устройствами ввода-вывода, но была ограничена аппаратными проверками тех, которые Директор выделил ей. Любая попытка использовать невыделенное устройство вызывала прерывание ошибки. Похожее прерывание возникало из-за переполнения (или переопустошения) Nest или SJNS или попытки доступа к хранилищу по адресу, превышающему указанный в регистре NOL. Несколько иным было прерывание Lock-Out, которое возникало из-за попытки доступа к области хранилища, которая в данный момент использовалась устройством ввода-вывода, так что имело место аппаратное взаимное исключение доступа к буферам DMA. Когда программа блокировалась при Lock-Out или добровольно ожидала завершения передачи ввода-вывода, она прерывалась, и Директор переключался на программу с наивысшим приоритетом, которая сама не была заблокирована. Когда Lock-Out очищался или ожидаемая передача завершалась, и ответственная программа имела более высокий приоритет, чем текущая запущенная программа, блок управления вводом-выводом (IOC) прерывался, чтобы разрешить немедленное переключение контекста. IOC также предусмотрел возможность избежать инверсии приоритетов, при которой программа с высоким приоритетом ждет, пока устройство будет занято программой с более низким приоритетом, запрашивая в этом случае отдельное прерывание.
Более поздние операционные системы, включая Eldon 2 [4] в Университете Лидса и COTAN, разработанную UKAEA Culham Laboratories в сотрудничестве с Университетом Глазго, были полностью интерактивными системами множественного доступа с интерфейсами PDP-8 для управления терминалами.
Компиляторы Kidsgrove и Whetstone Algol 60 были одними из первых в своем классе. Компилятор Kidsgrove делал упор на оптимизацию; компилятор Whetstone создавал интерпретируемый объектный код, нацеленный на отладку. Именно с помощью инструментария последнего Брайан Вихманн получил статистику поведения программы, которая привела к эталонному тесту Whetstone для научных вычислений [5] , который, в свою очередь, вдохновил на эталонный тест Dhrystone для нечисловых рабочих нагрузок. [6]
Команды машинного кода записывались в форме восьмеричного числа, официально названного слоговым восьмеричным [7] (также известным как «слоб-октальная» или «слобная» нотация, [8] [9] ). Она представляла 8 бит с тремя восьмеричными цифрами, но первая цифра представляла только два наиболее значимых бита, в то время как остальные две оставшиеся группы по три бита в каждой.
В English Electric его предшественник, DEUCE , имел хорошо используемую матричную схему, основанную на GIP (General Interpretive Programme). Ненадежность ламповых машин привела к включению механизма проверки суммы для обнаружения ошибок в матричных операциях. [nb 1] Схема использовала блочную плавающую точку с использованием арифметического оборудования с фиксированной точкой, в котором проверки суммы были точными. Однако, когда соответствующая схема была реализована на KDF9, она использовала плавающую точку, новую концепцию, которая имела лишь ограниченный математический анализ. Быстро стало ясно, что проверки суммы больше не являются точными, и был создан проект в попытке предоставить пригодную для использования проверку. (В плавающей точке (A + B) + C не обязательно то же самое, что A + (B + C), т. е. операция + не является ассоциативной.) Однако вскоре было признано, что частота ошибок в транзисторных машинах не является проблемой; они либо работали правильно, либо не работали вообще. Следовательно, идея проверки суммы была заброшена. Первоначальный матричный пакет оказался очень полезным инструментом для тестирования системы, поскольку он позволял проводить длительные проверки производительности задолго до появления более формальных тестовых пакетов, которые были разработаны впоследствии.
Существует легенда, что KDF9 был разработан как проект KD9 (Kidsgrove Development 9) и что буква «F» в его обозначении была предложена тогдашним председателем после долгого и утомительного обсуждения того, как назвать машину при запуске — «Мне все равно, называйте ли вы ее F— » . Правда более прозаична: название было выбрано по сути случайным образом менеджером по маркетингу. [10] (См. также KDF8 для параллельной разработки и использования коммерчески ориентированного компьютера.)
Операционная система EGDON была так названа, потому что один из них собирался отправиться в UKAEA Winfrith : в книге Томаса Харди «Возвращение родной Уинфрит-Хит» он назван Egdon Heath . EGDON Fortran назывался EGTRAN. [10] Eldon был так назван, потому что компьютер Университета Лидса находился в переоборудованной часовне Элдона.
Машина весила более 10 300 фунтов (5,2 коротких тонн; 4,7 т). Пульт управления с прерываемой пишущей машинкой 300 фунтов (136 кг), главный магазин и блок управления вводом/выводом 3500 (1587 кг), арифметический и главный блок управления 3500 (1587 кг), блок питания 3000 (1360 кг). [11]