June 2025

S M T W T F S
123 4 567
8 910111213 14
15161718 192021
22232425262728
29 30     

Style Credit

Expand Cut Tags

No cut tags
Tuesday, August 19th, 2014 17:19
Перед вами кисть, палитра, холст и мольберт. Напишите компилятор С++ для процессоров ARM.
Задание на собеседовании.

Технион (один из двух лучших университетов в Израиле и 78-й в общемировом рейтинге вузов) по-прежнему, как и тридцать лет назад, обучает студентов факультета компьютерных наук программированию на ассемблере на примере PDP-11. PDP-11 — это компьютер фирмы DEC, производившийся в конце 1970-х–начале 1980-х, в Википедии про него написано подробнее.

Выбор именно PDP-11, в отличие от более современных архитектур (скажем, x86), играет важную роль. Во-первых, это очень простой процессор. В нём всего восемь 16-битных регистров, из которых три имеют специальное предназначение, что оставляет программисту для расчётов всего пять регистров. Программист приучается ценить используемые ресурсы, тщательно продумывать свой код и не тратить ресурсы бездумно. Во-вторых, DEC уже пятнадцать лет как поглощена Compaq, которая, в свою очередь, была сожрана Hewlett-Packard; поэтому никому не будет обидно. Политкорректность на уровне. В-третьих, когда составлялась учебная программа, DEC`и были дешёвыми, поэтому их и приобрели, а затем вступила в свои права инерция мышления: наши деды программировали на PDP-11, наши отцы программировали на PDP-11, мы программировали на PDP-11, так что и детей наших будем учить на PDP-11, чтоб им неповадно было.

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

Но я сомневаюсь, что кто-нибудь из выпускников факультета компьютерных наук Техниона, учившихся программированию на PDP-11, сумеет этот компьютер включить. А я теперь знаю, как это делается. И вам сейчас расскажу.

Дальнейший текст является переводом статьи PDP-11/Booting. Картинки большей частью оттуда же.

1.

Сначала надо включить терминал ввода-вывода VT100. Это делается с помощью перекидного выключателя на его задней стороне. Спустя несколько секунд после включения терминал издаст один короткий писк, прогреется и будет готов к работе, просигнализировав об этом миганием курсора в верхнем левом углу пустого экрана. Если окажется, что экран не пустой, и что на нём есть текст, не прикасайтесь ни к чему, пойдите и найдите кого-нибудь, кто объяснит вам, что происходит, и поможет с определением причины неисправности.

Внешний вид терминала DEC VT-100.Выключатель питания на задней стороне терминала.

Если вы собираетесь использовать телетайпный терминал ASR-33, остановитесь и хорошенько подумайте. При любом сомнении переходите к дисплейному терминалу. Если же вы всё-таки решили продолжать работать с ASR-33, убедитесь, что вы принесли собственный рулон бумаги: использование чужого рулона приравнивается к использованию чужого мыла в душе или к использованию чужой еды в холодильнике, и карается анально с максимальной жестокостью.

Телетайпный терминал ASR-33, который мог быть использован в качестве устройства ввода-вывода для PDP-11. По клику на фото откроется видеозапись работы.
2.

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

Рубильник блока питания и трёхпозиционный переключатель «Remote On / Off / Local On».

Особое внимание обратите на положение трёхпозиционного переключателя «Local / Off / Remote On» (чуть выше рубильника на фотографии). В случае, если выключатель стоит в положении «Remote On», питание контролируется выключателем «Power On», расположенным где-то на передней панели; найдите его и переключите. Если этот выключатель стоит в положении «Off», переключите его на «Local On». Это действие, собственно, подаст питание остальным компонентам компьютера.

3.

Теперь пора поставить носитель информации. Найдите в шкафу компьютера корпус жёсткого диска (это обычно RL-01 или RL-02) и убедитесь, что кнопка «Load» отжата. Если кнопка была нажата, это значит, что кто-то выключил машину, не вынув картридж жёсткого диска; найдите и убейте негодяя, потому что своим действием он, скорее всего, сломал и жёсткий диск, и свой картридж.

Жёсткий диск с открытым корпусом и барабан картриджа (это сменные блины жёсткого диска).

Выдвиньте корпус жёсткого диска из шкафа и поднимите крышку, нажав кнопку на правой стороне крышки. Удерживайте барабан картриджа в одной руке, сдвиньте защёлку в рукоятке для переноски другой рукой и поднимите рукоятку. Теперь вы можете снять защитный кожух с магнитного диска картриджа. Опустите барабан картриджа внутрь жёсткого диска, следя за тем, чтобы этикетка была строго в направлении «12 часов», и опустите ручку, пока не щёлкнут магнитные фиксаторы. Поместите нижнюю часть защитного кожуха, которую вы только что сняли, поверх установленного картриджа. Закройте крышку корпуса и задвиньте жёсткий диск обратно в шкаф.

Установили картридж в считывающее устройство.Положили нижнюю часть защитного кожуха сверху.

После того, как вы закончили эти мероприятия, нажмите кнопку «Load». Она утопится и погаснет, жёсткий диск начнёт раскручиваться. Подготовка жёсткого диска к работе занимает примерно 30–45 секунд, по окончании этого процесса загорится индикатор «Ready», сигнализируя о готовности к работе.

Жёсткий диск подключён, нажимаем кнопку «Load».

Диаметр картриджа — 38 сантиметров, высота — 6. Каждый картридж хранит 5 или 10 мегабайт информации.

Лирическое отступление:
К каждой системе PDP-11 можно было подключить до четырёх жёстких дисков RL-01 или RL-02. Определение их в системе было простым и удобным, и я совершенно не ёрничаю. Никакого выбора порядка в BIOS, никакой возни с джамперами master / slave не требовалось, всё решалось проще. Каждое устройство имело индикатор готовности «Ready» с порядковым номером от 0 до 3. На обратной стороне этого индикатора были зубчики, соответствующие номеру, изображённому на индикаторе; эти зубчики нажимали скрытые под индикатором контакты. Замена индикатора с одной цифрой на индикатор с другой цифрой меняла и номер, под которым устройство определялось в системе.
4.

Включаем питание внутренностей компьютера: находим селектор DC и переводим его в положение «DC ON». Вентиляторы корпуса раскрутятся и начнут работать, и все диски начнут негромко жужжать.

Подаём питание на внутренности компьютера.
5.

Сейчас пора начать загрузку. У PDP-11 есть встроенный загрузчик, что-то типа BIOS; чтобы его запустить, надо нажать и удерживать кнопку CNTRL и, не отпуская, нажать BOOT. Если встроенный загрузчик вас по каким-то причинам не устраивает, вы можете написать свой, воспользовавшись восьмеричной цифровой клавиатурой на передней панели. Отец суперкомпьютеров Сеймур Крей, например, в принципе не признавал встроенные загрузчики, и каждый раз при включении компьютера писал загрузчик сам.

Загружаем встроенную программу BIOS.Подсказка с примером загрузчика для самостоятельного ввода.
6.

Если всё прошло хорошо, BIOS загрузится и выдаст на экран строку статуса. Четыре набора чисел в восьмеричной системе — это, скорее всего, значения первых четырёх регистров (которых в PDP-11, напомню, было всего 8). Можно начать загрузку операционной системы, это делается вводом команды DL (обязательно большими буквами) и нажатием клавиши ⏎. Эта команда загружала операционную систему с накопителя RL-01 или RL-02. Если вам повезло, и у вас в компьютерном шкафу есть устройство RK-05 для считывания информации с жёстких дисков фронтальной загрузки, то, чтобы загрузить операционную систему с него, надо было бы ввести команду DK⏎.

Экран терминала VT100 со строкой статуса и введённой командой DL.Устройство RK-05 со вставленным картриджем.

Я не знаю, как загрузить систему с диска, если к системе подключено больше одного контроллера. Такая возможность точно есть, и ввести соответствующую команду на встроенной клавиатуре с указанием номера контроллера я могу, но как это сделать из консоли — пока что без понятия. Может, DL принимает параметр, указывающий, с какого контроллера грузиться?..

7.

По окончании загрузки вам, скорее всего, придётся подправить дату и время. Только не забывайте, что PDP-11 подвержен ошибке-2000, и не пытайтесь выставить год после 2000-го.

Загрузка операционной системы завершена.
8.

Самое время загрузить какую-нибудь игру!

На экране — приключенческая бродилка Colossal Cave Adventure 1976 года издания. На заднем плане шкаф с картриджами для RL-01. На фотографии каждая полка содержит примерно 20 картриджей, это около 200 мегабайт данных. Весь шкаф можно запихнуть на один компакт-диск.

Круто, правда? Немножко отличается от нашего обычного нажатия кнопки на системнике? Всё вышеописанное было стандартными, ежедневными, привычными процедурами всего лишь тридцать лет назад.

Теперь понимаете, почему я в таком восторге от революции?

Когда я читаю или вижу, как кто-то быстро и легко включил мэйнфрейм / суперкомьютер / танкер / самолёт / вертолёт, меня пробивает смех. Лучшим примером является фильм «007: Die Another Day», в котором Джеймс Бонд в исполнении Пирса Броснана вываливается из разваливающегося самолёта в вертолёте и во время падения успевает включить его, вывести на рабочий режим и предотвратить своё падение. Всё это — примерно за минуту. Для сравнения, вот видео из компьютерной игры «DCS Ка-50: Чёрная акула», с помощью которой тренируются настоящие пилоты настоящих вертолётов. В этом видео демонстрируется ускоренный запуск двигателей Ка-50. Длительность видео: 5 минут 37 секунд. Ладно, некоторые операции тренированный пилот выполняет быстрее, но речь всё равно идёт о трёх-четырёх минутах, не меньше.

Tags:
Tuesday, August 19th, 2014 15:18 (UTC)
Эти старые железяки такие трогательные, меня ажно слеза пробивает, когда про них кто-нибудь рассказывает. От умиления, естессно. :)
Tuesday, August 19th, 2014 16:13 (UTC)
Дивно. Ещё и выглядит вполне дизайнерски. :))
Tuesday, August 19th, 2014 16:31 (UTC)
Там подробно расписано, как эта штука строилась. Так вот, построить корпус было несложно. А вот оригинальные Cray`евские программы для неё найти взяло не просто много, а ОЧЕНЬ много времени… Были подключены музеи, правительство, НИИ и бывшие работники Cray, и дело приняло международный масштаб с подключением работников Microsoft для восстановления данных... Не умеем мы хранить историю!
Edited Aug. 19th, 2014 16:32 (UTC)
Tuesday, August 19th, 2014 22:03 (UTC)
Я удивилась сначала, а потом подумала: ну вообще да, у нас самих железо от старых компов остается иногда как сувенир исторический, но многие ли хранят при этом древний софт? Если и завалялось где, то случайно. :)
Tuesday, August 19th, 2014 23:49 (UTC)
Есть ещё один нюанс. Софт, может, и остался, но на чём его читать? У меня есть оригинальный дистрибутив MS-DOS 6.22 на фирменных дискетах Microsoft. И где я сейчас найду работоспособный флоппик? :)

Я читал историю о том, как для восстановления данных лунной программы с оригинальных записей NASA пришлось воспользоваться аппаратурой 1960-х из компьютерного музея, сохранившейся только в двух экземплярах во всём мире.
Edited Aug. 20th, 2014 00:05 (UTC)
Wednesday, August 20th, 2014 06:22 (UTC)
Точно, у меня зипы до сих пор где-то валялись, это такие толстые как бы дискеты мегов на 100 или 200, которые читались штукой под названием зипдрайв, который давно сгорел. Фиг знает, что на них записано, теперь уж не достанешь. :) скоро и сидюки будет нечем прочитать :)
Wednesday, August 20th, 2014 17:23 (UTC)
Если очень сильно нужно, у меня есть френд [livejournal.com profile] incopolis, так вот у него такие штуки, вроде, ещё сохранились. :)
Wednesday, August 20th, 2014 17:28 (UTC)
Подтверждаю, есть. Правда, пока мой компьютер не хочет зипдрайв опознавать. Еще у меня один магнитооптический диск лежит - но его совсем уж читать нечем.
Wednesday, August 20th, 2014 17:30 (UTC)
Не, вряд ли там что ценное, там по работе файлы носили, но за предложение пасиба, буду знать ксли что :))
Tuesday, August 19th, 2014 22:27 (UTC)
давай поподробнее про работников микрософта с восстановлением
откуда и как
Tuesday, August 19th, 2014 23:50 (UTC)
Читай, в статье всё написано. Это не в рамках работы было, а просто в качестве хобби. Человек фактически восстановил операционку Cray методом реверс-инжиниринга.