Pull to refresh

MS-DOS, который мы никогда не видели

History of IT
Sandbox
Порой встречаются такие артефакты природы, что начинаешь невольно задумывать о разных конспирологических теориях и альтернативной истории. Сегодня я хотел бы поговорить о разных малоизвестных и не очень аспектах операционной системы MS-DOS. Историй про дос на хабре было огромное множество: краткие очерки, подробная хронология, мемуары ностальгирующих, но никто ни разу не отмечал про MS-DOS 4.0 от 1985 года. Я считаю это очень важным звеном развития операционных систем для IBM PC, но удивительно мало информации о таком важном переходном этапе. Это буквально утерянная ветка доса и найти про нее информацию большая проблема. Что бы вы подумали если бы услышали о поддержке в DOS вытесняющей многозадачности, виртуальной памяти, свопа, семафоров и IPC. Фантастика?
Читать дальше →
Total votes 197: ↑192 and ↓5 +187
Views 113K
Comments 71

A fistful of relays. Часть 2 — Регистровый файл

Abnormal programming *
Прошло уже больше года, с тех пор как я начал писать о разработке компьютера на электромагнитных реле. Сегодня я закончил работу над вторым модулем компьютера — регистровым файлом.


Читать дальше →
Total votes 55: ↑53 and ↓2 +51
Views 23K
Comments 22

Lines и теория вероятностей

Assembler *Reverse engineering *


Каждый, кто играл в эту игру, знает: если сейчас попытаться вытащить голубой шарик, на который показывает курсор, чтобы поставить вместо него бордовый, то один из приходящих новых трёх шариков скорее всего «заткнёт» это место. Если попытаться ещё раз вытащить — заткнёт снова. На протяжении всех долгих лет существования этого эффекта между моими коллегами периодически возникали споры, случайно ли это получилось, или нарочно сделана такая «подлянка», чтобы было труднее играть.

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

В этой статье вы сможете вернуться на 20 лет назад и увидеть, как примерно проходил тогда процесс реверс-инжиниринга. Мы рассмотрим 16-битный ассемблерный код, который выбирает место для шариков. Здесь не будет современных 32- и 64-битных инструкций, обрастающих специальными наборами команд, не будет вызовов всяких там dll, потоков и прочих ухищрений. Только простой код. Мне кажется, его поймут даже те, кто ни разу не видел ассемблера. Желающие смогут исправить алгоритм, чтобы он работал «честно».
Читать дальше →
Total votes 79: ↑77 and ↓2 +75
Views 33K
Comments 33

Загрузка ядра Linux. Часть 1

Configuring Linux *Assembler *System Programming *
Translation
От загрузчика к ядру

Если вы читали предыдущие статьи, то знаете о моём новом увлечении низкоуровневым программированием. Я написал несколько статей о программировании на ассемблере для x86_64 Linux и в то же время начал погружаться в исходный код ядра Linux.

Мне очень интересно разобраться, как работают низкоуровневые штуки: как программы запускаются на моём компьютере, как они расположены в памяти, как ядро управляет процессами и памятью, как работает сетевой стек на низком уровне и многое другое. Итак, я решил написать еще одну серию статей о ядре Linux для архитектуры x86_64.

Обратите внимание, что я не профессиональный разработчик ядра и не пишу код ядра на работе. Это всего лишь хобби. Мне просто нравятся низкоуровневые вещи и интересно в них копаться. Поэтому если заметите какую-то путаницу или появилятся вопросы/замечания, свяжитесь со мной в твиттере, по почте или просто создайте тикет. Буду благодарен.
Читать дальше →
Total votes 69: ↑67 and ↓2 +65
Views 57K
Comments 40

Новый золотой век для компьютерной архитектуры

Open source *Manufacture and development of electronics *Computer hardware CPU
Translation
Авторы — Джон Хеннесси и Дэвид Паттерсон, лауреаты премии Тьюринга 2017 года «за новаторский систематический и измеримый подход к проектированию и проверке компьютерных архитектур, оказавший долговременное влияние всю отрасль микропроцессорной техники». Статья опубликована в журнале Communications of the ACM, февраль 2019, том 62, № 2, стр. 48-60, doi:10.1145/3282307

«Те, кто не помнит прошлого, обречены повторить его» — Джордж Сантаяна, 1905

Свою лекцию Тьюринга 4 июня 2018 года мы начали с обзора компьютерной архитектуры, начиная с 60-х годов. Кроме него, мы освещаем актуальные проблемы и пытаемся определить будущие возможности, которые сулят новый золотой век в области компьютерной архитектуры в следующем десятилетии. Такой же, как в 1980-е, когда мы проводили свои исследования по улучшению в стоимости, энергоэффективности, безопасности и производительности процессоров, за что и получили эту почётную награду.

Ключевые идеи


  • Прогресс программного обеспечения может стимулировать архитектурные инновации
  • Повышение уровня программно-аппаратных интерфейсов создаёт возможности для инноваций архитектуры
  • Рынок в конечном итоге определяет победителя в споре архитектур
Читать дальше →
Total votes 55: ↑55 and ↓0 +55
Views 35K
Comments 89

Извлекаем константы с кристалла математического сопроцессора 8087

Manufacture and development of electronics *History of IT
Translation
В 1980 году Intel представила чип 8087 для ускорения обработки чисел с плавающей запятой на 8086-х процессорах, и его использовали в оригинальном IBM PC. Поскольку первые микропроцессоры работали только с целыми числами, арифметика с числами с плавающей запятой была медленной, а с трансцендентными функциями вроде арктангенса или логарифмов дела обстояли ещё хуже. Добавление чипа сопроцессора 8087 к системе было способно ускорить операции с числами с плавающей запятой до ста раз.

Я вскрыл чип 8087 и сделал несколько его фотографий под микроскопом. На фото ниже показан крохотный кремниевый кристалл чипа. По его бокам крохотные проводники соединяют его с 40 внешними ногами. Разметка основных функциональных блоков на картинке сделана мною благодаря реверс-инжинирингу. Если внимательно изучить чип, то можно извлечь из его ПЗУ различные константы – такие числа, как π, используемые чипом в вычислениях.


Кристалл чипа от Intel 8087 для работы с плавающей запятой с отмеченными основными функциональными блоками. ПЗУ с константами отмечен зелёным. Кликабельно.
Читать дальше →
Total votes 71: ↑70 and ↓1 +69
Views 17K
Comments 13

Сколько инструкций в x86?

Assembler *Data visualization *Statistics in IT History of IT Old hardware
vvvphoenix упомянул в своей позавчерашней статье: «Кстати, я пытался найти график роста числа X86 инструкций по годам (или по поколениям). Пока не смог (может, есть у кого?)»

Я решил, что мне это тоже интересно — да настолько, что не жалко потратить выходной день на сведение en.wikipedia.org/wiki/X86_instruction_listings в одну табличку:



Считались различные мнемоники; например, десятки вариантов MOV считались за одну инструкцию.

Таким образом, можно грубо считать, что количество мнемоник в x86 удваивается каждые 13 лет.
Total votes 89: ↑86 and ↓3 +83
Views 22K
Comments 171

Анализ кристалла сдвигового регистра у математического сопроцессора 8087

Manufacture and development of electronics *Old hardware
Translation
Числа с плавающей запятой необходимы для научного программирования, однако первые процессоры напрямую поддерживали лишь операции с целыми числами. Но ранние микропроцессоры всё же могли производить операции с числами с плавающей запятой. Такие операции просто разбивались на множество целочисленных, манипуляции с экспонентой и дробной частью. Иначе говоря, поддержка плавающей запятой не сделала возможной операции с ней в принципе – она просто серьёзно их ускорила. Существует ещё один способ представления нецелых чисел – это числа с фиксированной запятой, у которых есть неизменное количество цифр после десятичного разделителя. С ними работать проще, однако с их помощью можно представить диапазон заметно меньшего размера.

Хотя операции с плавающей запятой на мейнфреймах были обычным делом уже в 1950-х и 1960-х годах, только в 1980-м Intel представила сопроцессор с плавающей запятой 8087 для микрокомпьютеров.

8087 не был первым чипом с поддержкой плавающей запятой. National Semiconductor представила MM57109 Number Cruncher Unit [«перемалыватель цифр»] – так его реально назвали – в 1977-м. Это был, по сути, чип от научного калькулятора на 12 цифр в новом корпусе, работающий с десятичными значениями в двоичном представлении, и требовавший ввода данных в обратной польской записи. Чип работал до абсурдного медленно: к примеру, на вычисление тангенса могло уйти до секунды. AMD представила свой первый чип с поддержкой плавающей запятой, Am9511, в 1978-м. Этот чип поддерживал 32-битные числа с плавающей запятой, и на вычисление тангенса тратил до 1,4 мс. В итоге Intel купила у AMD лицензию на Am9511 и продавала его как 8231. 8087 на 10 МГц, для сравнения, мог вычислить тангенс за 54 мкс, работая с 80-битным числом с плавающей запятой. Вот насколько быстродействие и точность 8087 были выше его предшественников.
Читать дальше →
Total votes 42: ↑41 and ↓1 +40
Views 8.3K
Comments 21

Масштабирование кристалла: как Intel уменьшала масштаб процессора 8086

Manufacture and development of electronics *Old hardware CPU
Translation
42 года тому назад, 8 июня 1978 года, впервые появились революционные микропроцессоры Intel 8086. В честь этого я изучал кристаллы 8086. Мне попались два кристалла 8086 разного размера, и на их примере видно, как работает масштабирование кристалла. Концепция масштабирования кристалла состоит в том, что с улучшением технологий производители могли уменьшать размер кремниевого кристалла, снижая стоимость и увеличивая быстродействие. Однако тут дело заключается не только в масштабировании кристалла целиком. Хотя все внутренние цепи можно уменьшить, внешние характеристики так легко не уменьшаются. К примеру, площадки для припаивания должны быть определённого размера, чтобы к ним можно было подвести проводники, а дорожки распределения питания должны быть достаточно большими для того, чтобы проводить необходимый ток. В итоге в Intel масштабировали внутреннюю часть 8086 без изменений, а цепи и площадки по краям чипа переделали.

Примечательно, что МОП-структуры всё ещё работают, будучи сильно уменьшенными, в то время, как большинство вещей нельзя просто так уменьшить. К примеру, нельзя масштабировать двигатель в 10 раз и ожидать, что он будет работать. Большинство физических объектов страдают от закона квадрата — куба: площадь объекта растёт как квадрат линейного размера, а объём – как куб. Однако в случае МОП-структур большинство составляющих при масштабировании либо остаётся без изменений, либо улучшается (к примеру, частота и энергопотребление). Больше деталей по масштабированию ищите в книге Мида и Конвея Introduction to VLSI Systems. Забавно, что в книге 1978 года утверждается, что у масштабирования есть фундаментальное ограничение в четверть микрона (250 нм) для длины канала из-за физических свойств материи. Это ограничение оказалось неимоверно ошибочным – сейчас транзисторы переходят на характерный размер 5 нм, благодаря таким технологиям, как FinFET.
Читать дальше →
Total votes 17: ↑15 and ↓2 +13
Views 17K
Comments 5

Регистры процессора Intel 8086: от чипа к транзисторам

Old hardware CPU
Translation
Intel 8086 – один из самых влиятельных из когда-либо созданных компьютерных чипов. Он создал архитектуру x86, доминирующую в современных настольных и серверных компьютерах. Я занимался реверс-инжинирингом 8086 на основе фотографий кристаллов, и в данной статье я опишу реализацию регистрового файла (набора регистров).


Кристалл 8086. Отмечено место хранения регистров. Верхние регистры используются блоком интерфейса шины для доступа к памяти, а нижние регистры общего назначения используются исполнительным блоком. Буфер команд – это 6-байтная очередь, состоящая из заранее запрошенных команд.
Читать дальше →
Total votes 21: ↑20 and ↓1 +19
Views 14K
Comments 10

Триггеры-защёлки: реверс-инжиниринг регистра команд в Intel 8086

Manufacture and development of electronics *History of IT Old hardware
Translation
Микропроцессор Intel 8086 – один из самых влиятельных чипов. Порождённая им архитектура х86 и по сей день доминирует среди настольных и серверных компьютеров. И всё же этот чип ещё достаточно прост для того, чтобы его цепи можно было изучать под микроскопом и разбираться в них. В этой статье я объясню реализацию динамической защёлки [одноступенчатый триггер] – схемы, удерживающей один бит. В 8086 есть более 80 защёлок, разбросанных по всему чипу, и удерживающих различные важные биты статуса процессора, но я сконцентрируюсь на восьми из них, реализующих регистр команд и хранящих выполняющуюся команду.

У 8086-го есть более 80 защёлок. Некоторые из них хранят значения контактов AD (address/data) или управляющих контактов. Другие хранят текущий адрес микрокода и микрокоманды, а также адрес возврата из подпрограммы микрокода. В третьих хранятся биты исходного и выходного регистра команд, и АЛУ-операция команды. Во многих хранятся статусы внутреннего состояния, в которых я пока ещё разбираюсь.
Читать дальше →
Total votes 22: ↑20 and ↓2 +18
Views 5.7K
Comments 0

Как процессор 8086 работает с питанием и сигналами тактовой частоты

History of IT Old hardware CPU
Translation
Одна из недооценённых характеристик ранних микропроцессоров – сложность в распределении питания внутри интегральной схемы. У современного процессора может быть 15 слоёв металла с проводниками, но у чипов из 1970-х, например, у 8086, был всего один металлический слой, из-за чего разводка проводников представляла собой проблему. Сигналы тактовой частоты (синхросигналы) тоже нужно доводить до всех частей чипа, чтобы все они работали синхронно.

На фото ниже показан кристалл 8086 под микроскопом. Виден металлический слой сверху чипа, под которым прячутся кремниевая подложка и поликремниевый слой с проводниками. По периметру кристалла снаружи крохотная проволочная разварка соединяет площадки кристалла с внешними ногами. У 8086 площадка питания расположена сверху, а площадки земли – сверху и снизу. У каждой из них есть два проводка проволочной разварки, что удваивает величину поддерживаемого тока. Видны широкие металлические дорожки, идущие от площадок питания и земли. Они распределяют питание по чипу.
Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Views 5.6K
Comments 4