Компьютер — это просто. Или нет?
Любой человек, интересующийся сферой информационных технологий, хоть раз задумывался о том, как на самом деле работает компьютер. А и действительно, с помощью компьютера можно сделать столько всего удивительного, что невозможно поверить, что всё, что происходит внутри него, — сложение чисел. Почему бы тогда не сделать свой самому?
Эта мысль явно прослеживается в книге Чарльза Петцольда «Код» — хорошее чтиво для тех, кто хочет разобраться в устройстве компьютера на пальцах не тратя особо времени. Эта книга произвела сильное впечатление на меня, да так, что я решил, что компьютер и вовсе банально простой агрегат и ничего сложного в нём нет.
Но это не так. После прочтения у меня всё-таки поселилось ощущение того, что от меня что-то сокрыто, что какие-то аспекты архитектуры вовсе не затрагивались. За бо?льшими объёмами информации я обратился к следующей книге — «Архитектура Компьютера» Эндрю Таненбаума. Информация в этой книге оказалась гораздо обширнее, однако я получил не совсем то, чего хотел.
На этом мой путь в мире архитектуры ЭВМ приостановился, началась учёба, я отвлёкся на другие, более интересные для меня на тот момент проекты. Но, к сожалению, я из тех людей, которые не могут без угрызений совести пользоваться чем-либо, не зная хотя бы примерно механизма работы этого инструмента. Это заставляло меня искать материал буквально обо всём.
Череда разочарований наступила после прочтения нескольких глав книг об игровых движках, компиляторах, операционных системах и пр. Я просто растерялся: мир, который казался мне логичным и в меру простым в миг стал огромным и запутанным, требующим внушительных объёмов знаний.
Начало великого пути
То, что спасло меня, был ответ одного пользователя на каком-то форуме на пост человека, страдавшего похожим «расстройством», мир IT казался ему таким огромным, что его точно нельзя постичь. Я помню те слова, и они меня выручают каждый раз, когда я сталкиваюсь с чем-то новым. «Do not let yourself get overwhelmed» — то, что стоит говорить каждому новичку в IT.
И тогда я начал с новыми силами бороздить просторы интернета в поисках литературы. Мне очень повезло, что я наткнулся на замечательную книгу «The Elements of Computing Systems. Building a Modern Computer from First Principles» by Noam Nisan and Shimon Schocken(нет русского издания). В ней именно для таких, как я показывают создание реально работающего компьютера с нуля, то есть из логических вентилей.
Я загорелся идеей и приступил к работе. Начал с того, что когда-то уже делал после прочтения Петцольда, — сумматоры, регистры, мультиплексоры. Это одни из самых простых устройств, работу которых вовсе не сложно понять (если не думать об эффективности), а сделать такие можно за 10 минут в удобном приложении на вашем смартфоне.
Каждую следующую главу я начинал с жаждой знаний. Сконструировал АЛУ, руководясь заданиями в книге. Не могу сказать, что что-то в нём придумал я, скорее мне дали готовые детальки, а я их собрал в красивую машину. Зато какое удовольствие я получил, когда понял, что я своими руками собрал полностью работающее АЛУ.
Первые плоды
За ним последовал полностью работающий 16-битный процессор, который я доделал сегодня. Моему счастью нет предела, но я не собираюсь останавливаться. К моему сожалению, хоть в книге весь процессор и был собран полностью с нуля, но ассемблер для него был абстракцией в следующей главе(что логично, книга расчитана на более-мение краткое, хоть и детальное изложение). Немного погрустив, я понял, что Ассембли — тоже язык программирования, и создание полноценного Ассемблера с нуля займёт много времени.
Написать свой Ассемблер — амбициозная цель, но это не единственная сложность. Путь, который я выбрал, обещает быть непростым. Регистры и в целом память в программе BOOLR можно реализовать только используя логические вентили. Почему это проблема? Всё просто: ничтожные 1024 байт RAM десятки раз рекурсивно пытаются поселить в оперативной памяти моего компьютера свои составные 16-битные регистры. Вот, что из этого получается:
В общем говоря, иногда проект просто не открывается из-за нехватки оперативной памяти. Выглядит как тупик, но я не намерен останавливаться на этом.
DrPass
Знаете, Владислав, когда вы пишете статью, где делитесь какой-то информацией, прочитайте её сами, представляя себя на месте читателя, который не делал с вами этот процессор или что вы там в статье описываете. И попробуйте вообразить, понял он что-то из этих черных квадратов и общих фраз что-либо, или ничего не понял. Если второе — тогда надо бы статью сделать информативнее.
Miyy Автор
Спасибо, учту
demon416nds
Уже давно нет никакого смысла в разработке процессоров работать на уровне отдельных регистров
И уж тем более не нужно делать это так
Изучайте vhdl и пишите на нем.
ЗЫ проектировать сложные системы имхо стоит всеже по методике водопад по крайней мере до первого релиза https://m.habr.com/ru/company/edison/blog/269789/
AlexSky
Здесь же задача была разобраться в работе существующих процессоров. Так что, почему бы и нет?
demon416nds
Потому что общеизвестная часть процессора достаточно примитивна а изыски типа предсказания переходов в таком виде понять практически невозможно.