Подтвердить что ты не робот

Программирование с нуля

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

Как я знаю Windows и Mac, и почти все, что даже DOS написано на C, С++ Pascal и т.д., поэтому я думаю, что должен знать один из этих языков, но для этого мне понадобится программа, где я могу написать код, а также для его компиляции, но без операционной системы и программ, как это можно сделать? Как они могли это сделать?

Но этого недостаточно, как написано C? в чем? Поэтому, когда я имею в виду царапину, я имею в виду, строя все от основ. Может быть, от 0,1,0,1 сейчас я думаю, что это точная начальная точка. Но как я могу это сделать, что мне делать и с чего начать?

Спасибо за каждый ответ!

4b9b3361

Ответ 1

Там есть отличный учебник под названием Элементы вычислительных систем: создание современного компьютера из первых принципов Ноама Нисана и Шимона Шокена, который служит в качестве основы для университетского курса, преподаваемого авторами под названием "Мастерская в компьютерном строительстве" - от NAND до тетриса за 12 шагов. Этот курс также преподаётся в других университетах под разными названиями.

Там 10 минутное введение на YouTube и 1 час Google TechTalk в Google Video, как самим автором.

Официальный веб-сайт компаньона http://nand2tetris.org/

Не позволяйте титулу "Компьютерное строительство" обмануть вас. Под "компьютером" автор не просто означает прямоугольную пластиковую коробку на вашем столе, он означает всю вычислительную систему, от отдельных логических ворот до высокоуровневого прикладного программирования.

Книга/курс учит вас

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

Ответ 2

Вы можете приобрести плату прототипов микроконтроллеров, такую ​​как Arduino, Beagleboard или MPLAB PIC board, а затем создайте machine monitor program, которые могут загружать и выполнять ваши другие программы в user space.

Вы можете запрограммировать эти микроконтроллеры на C или их соответствующие instruction sets.

Hook up an LCD display на эту плату MCU, и у вас есть монитор. Hook up a keyboard and mouse, и у вас есть элементы управления. (Вы можете даже написать свой собственный trap handlers для записи на ЖК-дисплей и чтения ввода с клавиатуры и мыши, чтобы понять, как прерывания и исключения работают на низком уровне Если вы хотите пойти ниже, вам придется посмотреть на выходы MCU для линий управления прерываниями и временных диаграмм).

Вуаля! Вы разработали свой собственный компьютер с нуля!

Чтобы ответить на ваш вопрос о C, компиляторы для первых языков программирования были написаны в assembly, а компиляторы для сборки были написаны в machine code.

Ответ 3

то, о чем вы говорите, раньше называлось программой "monitor". вы можете получить интересную информацию на osdev.org и взглянуть на colorforth.

[afterthought] google Rick Hohensee ramblings на comp.lang.forth также.

[намного позже afterthought], чтобы действительно получить основы, получить макет схемы подключаемого модуля, некоторые старые EPROM, источник питания 5 В постоянного тока и источник питания 25 В постоянного тока (24 должен работать, он более распространен). Используйте выталкивающие или выпадающие резисторы по адресам и линиям данных, а также переключатели на питание или питание по адресам и линиям данных. Пройдите через адреса с помощью коммутаторов и введите данные как единицы и нули на шине данных, программируя каждый с импульсом от 25 В. Я никогда не делал этого вручную, но однажды написал программу (http://jc.unternet.net/hacks/?1994-01-01-01), чтобы сделать это из порта Centronics, и сжег несколько программ, которые путь. Это было в тот день, когда Intel отправила вам бесплатные книги для всех своих процессоров и вспомогательных чипов, в комплекте с подробными наборами инструкций и временем.

Когда закончите, подключите процессор к СППЗУ, дайте ему сок и посмотрите, что произойдет. Возможно, он запустит некоторые светодиоды или что-то еще, прежде чем вы начнете пытаться интегрировать клавиатуры и мониторы.

Ответ 4

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

Ответ 5

Начиная с основ, 1 и 0. Вам нужно знать, какие инструкции поддерживает ваш процессор и какие регистры, кеш и т.д. Существуют. Тогда было бы удобно написать небольшой компилятор ассемблера в машинный код (для читаемых 1 и 0). Если у вас это есть, вы можете написать первый настоящий компилятор для простого более высокого языка и т.д. (Каждый из которых построен с использованием более низкого уровня "язык" ). Вы должны знать, однако, что создание простой операционной системы может занять годы планирования и еще больше времени для разработки, отладки и т.д. (И все это, прежде чем вы даже можете подумать о том, чтобы увидеть что-то полезное на экране). И эта операционная система не сможет работать на любом другом процессоре, кроме вашего. Затем вам нужны драйверы и т.д. Для каждого отдельного бита аппаратного обеспечения. И есть много шагов отсюда. Начиная с уровня 1 и 0 не очень полезно, так как вы ничего не увидите в течение очень долгого времени. Просто не делайте.

Ответ 6

Большинство компиляторов C могут испускать код, который не предназначен для работы в контексте ОС (см., например, код memtest86+ codebase), но это серьезно ограничивает набор функций, предоставляемый любым из этих компиляторов. (В частности, вы не получите ничего похожего на malloc).

Ответ 7

Вы не можете делать то, что вы ищете очень удобно на большинстве современных компьютеров в стиле ПК, но для программирования небольших одночиповых микросхем доступно множество недорогих (менее $100 или даже менее $50) наборов. Типичный микро будет иметь несколько десятков штырей, которые могут управляться высоким и низким под программным управлением, вместе с процессором, некоторой оперативной памятью (обычно 256 байт-8К или около того) и некоторой флэш-памятью для кода (обычно 8 КБ-128 К или около того). Наборы для разработки, как правило, имеют процессор с несколькими контактами, прикрепленными к светодиодам или ЖК-дисплею, а также другие провода, прикрепленные к нескольким кнопкам. Платы также будут включать в себя схемы, чтобы вы могли разрабатывать программное обеспечение на ПК, подключать USB-кабель и передавать свой код в чип.

Встроенное программирование - это весело. Дает некоторое представление о программировании "старой школы" с некоторыми новыми современными удобствами.

Ответ 8

Я предлагаю вам получить небольшую систему микроконтроллеров, с которой можно поиграть. У TI есть небольшая система на-usbstick, основанная на MSP430 за 20 долларов. Вам не нужен компилятор или ОС для запуска кода в этой системе. Фактически, только с 128 байтами RAM, было бы проблемой получить ОС на нем.

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

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

Ответ 9

Я не могу сказать вам об оборудовании, но если вы хотите создать свою собственную операционную систему, вы можете это сделать. Это много работы, но очень полезно. jcomeau_itcx уже упоминается osdev.org. Там также была группа новостей alt.os.development, хотя за последние пару лет она была очень тихой, но проверьте архив, если вы можете его найти.

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

Многие люди рекомендуют вам не писать собственный загрузочный сектор, потому что он не является строго частью операционной системы. Они рекомендуют загружаться с помощью GRUB или аналогичного. Я не согласен, отчасти потому, что мне хотелось узнать, как загрузился компьютер, но отчасти потому, что мне было проще писать собственный загрузочный сектор, чем выяснять, как использовать GRUB!

C - лучший язык для написания ОС, потому что он достаточно высок для вас, чтобы быть продуктивным, но достаточно низким, чтобы вы могли работать непосредственно на процессоре. Многие люди используют gcc, но вы также можете использовать Visual С++ или что-то еще (но компилировать на C, а не С++, и вам нужен компилятор, который поддерживает встроенный ассемблер и может генерировать функции без пролога/эпилога.) Вы можете написать свой код на ваш обычный ПК, а затем запустите его на виртуальной машине - я предпочитаю bochs, потому что у него есть встроенный отладчик, но есть и другие.

Некоторые подсказки для начала работы в ОС (после того, как вы отсортировали свой загрузочный сектор)... Intel IA32 - это самый доступный процессор (потому что он почти на каждом ПК), и большинство разработчиков ОС предпочитают его, поэтому вы может получить больше советов, чем о других платформах. Я не знаю, делают ли они это больше, но Intel отправила мне печатные копии своего руководства по разработке программного обеспечения IA32 - бесплатно, но бесценно. Вы можете работать в реальном режиме (16 бит, сегменты, без защиты между приложениями... думаю, Windows 3.1), но я считаю, что стоит потратить усилия на 32-битный защищенный режим (довольно сложный) и быть немного более современным. Виртуальная память (пейджинг) не является обязательной, но я сделал это, потому что моя оригинальная мотивация для написания ОС заключалась в том, чтобы узнать, как защищенный режим с 32-битным доступом обеспечивает защиту между приложениями.

Это долгий путь. Я начал свою ОС в 2004 году, работая по вечерам, но затем начал свой бизнес в 2006 году и не имел времени для этого с тех пор. Так что это долгий путь от завершения!

Если вам интересно, сделайте это. Тебе это действительно понравится. И если вы этого не сделаете, вы можете остановиться.

Ответ 10

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

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

Ответ 11

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

Конечно, это означает только то, что вам нужно реализовать некоторые основные ОС-службы самостоятельно, например, процедуры прерывания для обработки ввода. Большая часть его доступна в виде примера кода, но все еще достаточно мала, чтобы читать и понимать всю систему.

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

Ответ 12

Вы можете программировать без операционной системы (ОС), но ОС делает тяжелую работу для вас. Например, с C (который вы хотите знать) магией это не сам язык, а компилятор. В основном это то, что он делает:

Исходный код C → Не оптимизированный промежуточный код → Оптимизировать промежуточный код → машинный код

Теперь машинный код переходит в ОС, который сам использует его Kernel для перевода этого машинного кода в двоичную форму, поэтому Само устройство может понять, что вы хотите сделать.

Итак, прежде чем писать программу, которая работает без ОС, вам нужно создать свой собственный компилятор и ядро ​​для запуска вашей машины.

Ответ 13

Я создал начальную часть операционной системы с компьютером, который я разработал и объединил много лет назад (думаю, это будет примерно в 1985 году). Это приличная забава, и вы многому научились. Хороший успех в вашем проекте!

Ответы, которые люди давали вам о платформе, которую вы могли бы использовать для разработки вашей операционной системы, были аппаратного разнообразия. Вам придется потратить немного $$. Предполагая, что у вас есть доступ к компьютеру, вы можете использовать виртуальный компьютер, такой как QEMU или Oracle Vbox, и разработать для него os. Если у вас есть mac, мне действительно нравится Q, поскольку интерфейс делает виртуальный компьютер даже похожим на один. Я думаю, что другие сообщения здесь, вероятно, упомянули osdev.org. Это отличное место для отскока идей от других DIYers, и вам поможет начать работу. Хороший успех для вас.

CHEERS