2015-10-16 2 views
0

У меня есть вопрос относительно программирования на компьютере. Предположим, у меня есть только один компьютер без ОС. И хотел бы начать «развивать» ОС. в основном то, что у меня есть чистый лист, это перо. пара электронных устройств. как я могу поместить свою инструкцию на этот компьютер? , потому что сегодня мы используем интерпретатор компилятора, который «превращает» язык программирования в то, что они называют «машинным кодом». Но мой вопрос может заключаться в том, как генерировать машинный код из ниоткуда. Спасибо за ваши ответы, ссылка, чтобы узнать, как это сделать, будет приветствоваться.Компьютерное программирование

+0

Обычно вы используете другой компьютер, * с * операционной системой и используете * кросс-компиляцию * для компиляции для цели. Я рекомендую вам ознакомиться с учебниками по [вики OSDev] (http://wiki.osdev.org/Expanded_Main_Page). –

+0

привет @JoachimPileborg я понял, но как был первый компьютер? как тогда был создан первый компилятор. это то, что я на самом деле ищу –

+0

Строго говоря, вам просто нужно иметь возможность загружать вашу программу в какую-то память на компьютере, а затем сказать, что CPU начнет работать из этой памяти и там у вас есть. Как это сделать без использования программного обеспечения, однако, это не вопрос по теме для SO. – Lundin

ответ

3

Первые компьютеры, на которых запрограммировано создание «машинного кода» напрямую. Просто пробивая нули в карты (ну, на самом деле они пробивали восьмеричные цифры).

Это было сделано таким образом, пока кто-то не подумал, что было бы неплохо иметь ассемблер, который переводил инструкции машинного кода в эти и нулевые.

После этого другой парень подумал, что может быть очень хорошей идеей иметь язык программирования, который переведет инструкции «верхнего уровня» на машинный код.

И после этого или, возможно, в то же время некоторые «внутренние процедуры», созданные для облегчения программирования: чтобы открыть файл, чтобы закрыть файл, единственное, что вам нужно сделать, это вызвать внутреннюю подпрограмму в вместо того, чтобы самостоятельно программировать все открытые файлы и закрывать подпрограммы файлов: семена для операционных систем были установлены.

перекрестная компиляция Проблема, о которой идет речь, представляет собой способ создания операционной системы для нового компьютера в настоящее время: вы используете рабочий компьютер как «рычаг» для создания операционной системы для нового компьютера.

0

Компьютеры основаны на физическом процессоре, который был разработан для принятия инструкций (например, в коде сборки), которые допускали только примитивные инструкции, такие как shift, move, copy, add. Этот процессор решил, как он говорил (например, насколько велики были слова (8 бит) и другие спецификации (скорость/стандарты и т. Д.). Используя некоторый тип хранилища, мы могли хранить инструкции (перфокарты, диск) и выполнять огромные потоки этих инструкций.

Если инструкции повторялись снова и снова, вы можете перейти по адресу и выполнить то, что было в этом месте и создавать циклы и другие конструкции (филиалы, контекстные переключатели, рекурсию).

с у вас будут периферийные устройства, у вас будет какой-то способ взаимодействия с ним (рисовать, печатать точки), и вы могли бы создавать подпрограммы, чтобы создавать на них буквы, шрифты, прямоугольники, строки. Затем вы могли бы запустить подпрограмму напечатайте букву «a» на экране.

ОС - это, в основном, реализация на высоком уровне всех этих инструкций нижнего уровня. Это действительно набор всех инструкций для взаимодействия с различными областями (i/o, вычислениями и т. Д.). Unix - прекрасный пример того, как разные люди работают в разных областях и подключают их в одну ОС.

1

Это зависит от того, как далеко вы хотите идти. самые ранние «программирование» двигало провода от одного по существу аналогового алу к другому. Программирование женщин/женщин в этот момент называлось компьютерами и использовалось использование карандаша и бумаги.

позже вы используете карандаш и бумагу и техническое описание/документацию для набора инструкций. собирать вручную в основном, на данный момент нет компиляторов или даже концепции языка программирования, это должно эволюционировать еще. вы записывали те и нули в любой форме, какой вы предпочитали (двоичный или восьмеричный).

один из способов ввода кода на данный момент с коммутаторами. конечно, компьютеры предшествовали его, но искали изображение передней панели pdp8 или altair и т. д. вы устанавливали переключатели для значения данных и адреса, а вы вручную стробили запись. вы загружаете загрузчик таким образом и/или всю программу. установите начальный адрес и переключитесь в режим запуска.

с течением времени они разработали считыватели карт и магнитофонов, для которых вы загрузили загрузочный бункер вручную (переключатели), тогда вы можете использовать считыватель, чтобы легче загружать более крупные программы. карты могут быть пробиты на пишущей машинке, буквально на клавиатуре, но вместо того, чтобы ударить по ленте на бумаге, она разрезает слоты на карточке.

На данный момент языки и языки программирования начали развиваться. пока вы не загрузили свой компилятор, вам пришлось написать первый компилятор для нового языка на каком-то другом языке (ничем не отличается от сегодняшнего дня). поэтому первый ассемблер должен был быть в машинный код, а затем с ассемблера вы могли бы создать какой-то другой язык и так далее.

Если вы хотите повторить что-то подобное сегодня, вам придется построить компьютер с каким-то ручным вводом. вы могли бы конечно, но вам пришлось бы его проектировать таким образом, как тогда вам нужно дебютирование, но вы могли бы, например, иметь процессор с внешней вспышкой, будь то параллельный или последовательный, мультиплексировать линии на коммутаторы (переключатель управляет мультиплексор), а также адрес/данные/написать вашу программу, или для удовольствия можно использовать spi flash и серийно загружать программу во флеш. гораздо лучше просто использовать один из pdp или altair и т. д. онлайн-симуляторов, чтобы почувствовать этот опыт.

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

+0

спасибо @dwelch. Не могли бы вы дать мне несколько ключевых слов, чтобы исправить это через Интернет или некоторые справочные материалы, которые помогают справиться. Спасибо за ваш ответ. С уважением –

+0

https://en.wikipedia.org/wiki/ENIAC https://en.wikipedia.org/wiki/PDP-8 https://en.wikipedia.org/wiki/Altair_8800, на что потребовалось несколько секунд для поиска для. https://en.wikipedia.org/wiki/Bootstrapping и т. д. многочисленные книги по этой теме, в основном, что-то связанное с историей компьютера, которое достаточно устарело, коснется перехода от необходимости использовать коммутаторы для загрузки карточного/ленточного загрузчика в операционную систему или программы. Я не думаю, что термин «голый металл» использовался тогда, когда все было голым металлом. –

+0

вы также можете посмотреть новейшие языки, новые, для которых требуется текущий (другой) язык для первого компилятора, прежде чем они смогут переписать компилятор на этом языке. в конце концов, как текущие языки, полагающиеся на какой-то другой компьютер, чтобы перекрестно скомпилировать, чтобы воспитывать n-й компьютер. (linux с нуля, как вы компилируете существующие os с нуля? с помощью другого os или установки) –

Смежные вопросы