Меня только что осенило, что если вы пишете операционную систему, то о чем вы пишете? Я спрашиваю об этом, когда читаю книгу об основах микропроцессора 1980 года, и этот вопрос всплыл у меня в голове:
Как был запрограммирован первый микропроцессорный чип?
Ответ может быть очевидным, но это меня беспокоит.
microprocessor
декан
источник
источник
Ответы:
Я восприму ваш вопрос буквально и буду обсуждать в основном микропроцессоры, а не компьютеры в целом.
Все компьютеры имеют какой-то машинный код. Инструкция состоит из кода операции и одного или нескольких операндов. Например, инструкция ADD для Intel 4004 (самый первый микропроцессор) была закодирована как 1000RRRR, где 1000 - код операции для ADD, а RRRR - номер регистра.
Самые первые компьютерные программы были написаны вручную, с ручным кодированием цифр 1 и 0, чтобы создать программу на машинном языке. Это затем запрограммировано в чип. Первые микропроцессоры использовали ПЗУ (постоянная память); позже это было заменено EPROM (стираемое программируемое ПЗУ, которое было стерто ультрафиолетовым светом); теперь программы обычно программируются в EEPROM ( «электрически ... - EPROM» , который может быть удален на кристалле) или, в частности, во флэш-память.
Большинство микропроцессоров теперь могут запускать программы из ОЗУ (это в значительной степени стандартно для всех, кроме микроконтроллеров), но в первую очередь должен быть способ загрузки программы в ОЗУ. Как отметил в своем ответе Джоби Таффи, это было сделано с помощью тумблеров для Altair 8080, который работал на Intel 8080 (который последовал за 4004 и 8008). На вашем ПК есть немного ПЗУ, называемое BIOS, которое используется для запуска компьютера и загрузки ОС в ОЗУ.
Машинный язык очень быстро утомляет, поэтому были разработаны программы на ассемблере, которые используют мнемонический язык ассемблера и переводят его, обычно по одной строке кода ассемблера на инструкцию, в машинный код. Таким образом, вместо 10000001, можно написать ADD R1.
Но самый первый ассемблер должен был быть написан на машинном коде. Затем он может быть переписан в своем собственном коде ассемблера, и версия на машинном языке использовалась для его сборки в первый раз. После этого программа могла собраться сама. Это называется начальной загрузкой и выполняется также с компиляторами - они обычно сначала пишутся на ассемблере (или другом языке высокого уровня), а затем переписываются на их собственном языке и компилируются с оригинальным компилятором, пока компилятор не сможет скомпилировать себя.
Поскольку первый микропроцессор разрабатывался задолго до появления мэйнфреймов и миникомпьютеров, а 4004 на самом деле не подходил для работы на ассемблере, Intel, вероятно, написала кросс-ассемблер, который работал на одном из своих больших компьютеров, и перевела код сборки для 4004 в двоичный образ, который может быть запрограммирован в ПЗУ. Еще раз, это распространенный метод, используемый для переноса компиляторов на новую платформу (называемую кросс-компиляцией ).
источник
Первоначально программы были написаны на бумаге, а затем перенесены на любой метод ввода, который был доступен компьютеру. Это касалось кнопок, переключателей и соединительных проводов на первых компьютерах, перфокарт, клавиатур / плат.
На рисунке ниже показано, что используют настоящие программисты:
источник
Что ж, я был рядом, когда впервые появились микросхемы, мы писали кросс-ассемблеры и компиляторы на мэйнфреймах и мини-компьютерах, а затем мы загрузили их на 8-битное оборудование, люди на самом деле не удосужились собирать компиляторы / ассемблеры на микро, пока у них не было достаточно локального хранилища, чтобы сделать это полезным
источник
Одной из ранних форм памяти только для чтения была сетка, в которой адрес выбирал строку (тянет ее вниз), а столбцы представляли данные. Каждый столбец будет иметь подтягивание, и каждое пересечение будет иметь впаянный диод, чтобы представлять «ноль», или нет диода, чтобы представлять «один» [битовые уровни могут быть инвертированы, если это необходимо, в случаях, когда это уменьшит необходимое количество диодов. Любая желаемая комбинация битов может быть «запрограммирована» путем пайки в соответствующие диоды.
Эта конструкция была введена в мир интегральных микросхем в виде плавкого предохранителя. По сути, PROM с плавким предохранителем представлял собой схему, аналогичную приведенной выше, встроенную в микросхему, за исключением того, что все диоды были заполнены, и каждый диод имел слабый плавкий предохранитель, последовательно с ним. При поставке PROM будет читать «0» во всех местах. Однако можно было бы выборочно удалить диоды, выбрав соответствующий адрес и установив соответствующие линии данных «жестко» высоко [примечание: я думаю, что каждый бит мог иметь свой собственный транзистор, а не диод, но принцип тот же].
За программируемыми плавкими предохранителями PROM следовали полупроводниковые запоминающие устройства, которые накапливают биты путем имплантации зарядов на внутренних конденсаторах. Мало того, что такие воспоминания более компактны, чем предохранители PROM, но если они помещены в прозрачные для ультрафиолетового излучения пакеты, они могут быть стерты и использованы повторно. Обратите внимание, что даже так называемые «одноразовые программируемые» воспоминания почти всегда используют эту же конструкцию, но просто помещаются в непрозрачные для УФ-упаковки.
диодно-матричный магазин управления 1950 MIT Whirlwind Computer
транзисторно-матричный магазин управления 2005 года CPU MT15
источник
Я не уверен, что кто-то ответил на реальный вопрос ОП, который, кажется, звучит так: «Как компьютер знает, как начать работу?» так что я попробую.
Начнем с аналогии. "Как транзистор знает, как начать?" Конечно, это не так, это просто работает в соответствии с физикой, и инженер строит схему так, чтобы она запускалась в известном состоянии.
Компьютеры знают, с чего начать, потому что они являются цепями (конечно, очень сложными), и они созданы для запуска в определенном состоянии. В современной машине это может быть состояние, в котором основная шина перераспределяет часть адресного пространства для пользователя ПЗУ на материнской плате в виде нехватки памяти (ПЗУ было записано с BIOS). В машине первого поколения начальное состояние могло быть остановлено центральным процессором, нулевой счетчик программ и активная подсистема переключения памяти.
источник
Операционная система - это компьютерная программа, которая запускается непосредственно на процессоре. Он может быть написан на любом языке, который может быть скомпилирован или собран в соответствии с машинными инструкциями. Сборка и C являются общими вариантами.
Код загружается в процессоры по одной инструкции из хранилища - ПЗУ или ОЗУ.
Z3 , первый программируемый процессор был построен из электромеханического реле и читать инструкции из перфорированного фильма.
Altair 8800, первый персональный компьютер, был запрограммирован с помощью переключателей.
Чтобы узнать, как процессор построен из цифровой логики, смотрите https://electronics.stackexchange.com/questions/5516/a-fun-book-to-learn-computer-architecture-for-not-exactly-beginners
Для истории, смотрите http://en.wikipedia.org/wiki/History_of_computing_hardware
источник
Вот немного о действительно старых компьютерах:
Насколько я знаю, в те времена у вас была большая компьютерная лицевая панель, которая использовалась для их программирования. По сути, каждая ячейка памяти в этих компьютерах была подключена к коммутаторам. Вы включаете память, а затем используете переключатели для установки данных в каждой ячейке. Таким образом, вы постепенно вводите программу в память компьютера. Затем вы должны установить начальную точку программы и начать выполнение.
По мере развития технологий были разработаны так называемые программы загрузчика. Это короткие программы, цель которых - запустить другую программу из памяти компьютера. Проблема с постепенным вводом программ (и более позднего, более чем одного бита с использованием восьмеричных и более поздних шестнадцатеричных чисел) заключалась в том, что это было очень медленно, и была большая вероятность того, что оператор допустит ошибку при загрузке программы. Поэтому короткие программы будут использоваться для загрузки больших программ, хранящихся в памяти компьютера. Со временем часть кода, которую приходилось вводить вручную, уменьшалась, и в современных компьютерах у нас часто бывают загрузчики, написанные на каком-то ПЗУ или даже флэш-памяти.
источник
Несколько лет назад я столкнулся с программистом микроконтроллера, который имел четырехзначный семисегментный дисплей и шестигранную клавиатуру. Я уверен, что на нем не было микроконтроллера, и он позволял вам вводить машинный код сразу по байтам.
Так что это позволит вам (мучительно) составить список кодов операций вручную один за другим и ввести их в чип.
Я понятия не имею, если вы все еще можете получить их, но я предполагаю, что нечто подобное использовалось еще тогда, когда микроконтроллеры были относительно новыми.
источник
Первые микропроцессоры были бы запрограммированы с помощью существующих компьютеров, которые не были основаны на микропроцессорах. До того, как первый ЦП был изготовлен на одном чипе, уже существовали передовые компьютерные архитектуры, которые были построены из дискретных компонентов, а не микропроцессоров. Взгляните, скажем, на IBM 360.
источник