Как стать автором
Обновить

Комментарии 172

Об этом тоже писал в своей (не самой удачной) статье Ретроспектива решений прошлого, которое влияет на наше настоящее и будет влиять на будущее


Но почему именно 8 бит? Одна из причин — это двоичная система кодирования, так как наиболее удобными для обработки являются цифры, кратные степени двойки. Ну хорошо, скажите вы, почему тогда не 4, или 16, или 32? И будете правы.

Тут следует вспомнить ещё о том, что в 1963 году был принят Американский Стандартный Код для обмена информации (American Standard Code for Information Interchange) или сокращённо ASCII. Этот стандарт был разработан на основе телеграфного кода и его первое коммерческое использование было в качестве семибитного кода телетайпа, для отправки телеграфных сообщений. Первоначально основанный на английском алфавите, ASCII кодирует 128 заданных символов в семибитовые целые числа. Девяносто пять закодированных символов могут быть напечатаны: они включают цифры от 0 до 9, строчные буквы от a до z, прописные буквы от A до Z и символы пунктуации. Кроме того, исходная спецификация ASCII включала 33 непечатных управляющих кода, которые были созданы для телетайпов; большинство из них уже устарели, хотя некоторые из них до сих пор широко используется, например, возврат каретки, перевод строки и код табуляции.

Кодировка ASCII исторически не имела никакого отношения к появлению 8-битового байта, тем более что она сначала была 6-битной, потом 7-битной и только к 1980-м годам получила 8-битные расширения.

А что касается байта, то его придумали в IBM (где, кстати, пользовались кодировкой EBCDIC), чтобы иметь возможность масштабировать архитектуру. Младшие модели S/360 по сути на микропрограммном уровне были 8-разрядными, ради дешевизны. Они исполняли 8-разрядные микропрограммы, которые уже реализовывали 32-разрядный машинный язык S/360. А старшие модели сразу аппаратно работали с 32 разрядами. Подробно об этих вещах написано в статьях уважаемого @SIISII.

Да я допускаю, что заблуждаюсь. Но, это тоже не мои фантазии и тоже читал в различных источниках, почему байт стал восьмибитным. И мой вариант таков. Там ниже в статье есть другое объяснение, которое полностью совпадает с вашим.

Просто это явный анахронизм. Я ещё застал время, когда 8-битного ASCII не существовало. А байты, естественно, уже давно были.

Ну не прав, не прав. Добросовестно заблуждался.

Я хотел бы заметить, что система IBM 360 строилась для работы с УЖЕ СУЩЕСТВУЮЩЕЙ высокоразвитой телетайпной сетью. Как центры обработки информации передаваемой телетайпами. Именно телетайпы были основными устройствами ввода-вывода данных машин.

Как бы и да, и нет. С одной стороны, телетайпы действительно были первыми диалоговыми терминалами для ЭВМ, с другой стороны, это было сделано просто для удобства, ну потому что телетайп был уже готовой железякой, которая могла вводить данные с клавиатуры и отображать ответ компьютера. Телетайпная сеть тут была не причём, непосредственный ввод информации с неё может быть где-то и был, но уж точно был экзотикой даже для инженеров IBM. Да и сам по себе диалоговый режим при работе с компьютерами тех лет далеко не сразу стал основным. В составе семейства System/360 огромное количество разнообразной периферии, начиная от перфораторов и заканчивая системами оптического распознавания текстов, но телетайпов IBM даже и не предлагала, это уже на местах кто-то колхозил, кому было надо.

Телетайпы никогда не были основными устройствами ввода-вывода IBM S/360 и не предполагались к использованию. S/360 в основном была ориентирована на пакетный режим работы, читала данные с перфокарт и печатала результаты на цепном строчном принтере. Все устройства S/360 подключались к специальному канальному интерфейсу. Чтобы туда подключить телетайп, надо было, как верно замечено в предыдущем комментарии, много колхозить с непонятной целью.

Консольным терминалом ранних моделей Системы 360 был не телетайп, а пишущая машинка, но уже вскоре появились первые дисплеи. В СССР с ЕС ЭВМ была та же история, разве что дисплеи у нас подзадержались. В частности, лично я в конце 1980-х -- начале 1990-х работал на ЕС-1035, у которой, хотя и были дисплеи (ЕС-7927), но консолью по-прежнему была пишущая машинка. Кстати, это было весьма удобно: в отличие от дисплея, всегда можно посмотреть, что творилось в системе, без дополнительных телодвижений (распечатки файла журнала). Что ж до телетайпов... Да, они были, но относились к тому, что у нас назвали "устройствами телеобработки данных" -- подключались к машине через телефонные/телеграфные линии и модемы, грубо говоря. Плюс, как народ уже говорил, IBM рассматривала свои машины как средства для пакетной, а не диалоговой обработки данных, а им терминалы, кроме консоли, не нужны, так что наличие/отсутствие телетайпов на появление и развитие ранних моделей никакого влияния не оказывало.

Вы что-то путаете: 6-битной ASCII не была никогда, хотя уже после появления 7-битной ASCII использовались 6-битные условно-ASCII-совместимые кодировки.

ASCII так изначально построена, что там 63 печатных символа, если считать только большие буквы. Старые знакогенераторы ASCII были 6-битными, хотя сам стандарт ASCII сразу предусматривал возможность 7-битной кодировки. Даже уже у оригинального Apple ][ кодировка знакогенератора была 6-битная, хотя коды в памяти дополнялись до 7 бит.

Причина 1: чтобы любой символ английского алфавита вписывался в 1 байт

Для умещения всех букв достаточно 7 бит, и ASCII это подтверждает - все влазит в первые 127 символов. И 8бит уже нужно для региональных символов или псевдографики

Размер слова является кратным размеру байта. Для меня это оставалось непонятным долгие годы, причём в Wikipedia этому даётся весьма туманное определение («слово – это естественная единица данных, используемая в конкретной архитектуре процессора»).

Также как есть int, char, float, в архитектуре процессора есть byte, word, dword, qword. Если у тебя что-то не влазит в байт, берешь слово, не влазит в слово - берешь двойное слово. Это просто архитектура процессоров, которая вам неинтересна.

Ну и напоследок - 7-битная архитектура вполне себе существовала.

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

Сейчас же byte-align — 64. Тоесть выбрали бы 64

Слово текущее — 64 бита. Столько бы и выбрали.

Зачем, если можно делать variable length, при этом в два байта влазит практически все что нужно для всех региональных кодировок, и возможные расширения - для полного набора иероглифов и исключительных случаев, которые будет использоваться реже.
Властелин колец, который считается большой книгой и занимал 1 мб, на фоне современных мелких книжек по 1-2 мегабайта кажется вроде бы небольшой. Но вспомнив что тогда был 1мб чистого текста однобайтного win1251, а современные книги это какой-нить utf-8 xml, в котором еще на треть картинка...

Как бы технологии не выросли, но экономить - это нормально.

У variable length много недостатков, например обращение к 100500-тому символу строки требует проанализировать все 100499 предыдущих символов.

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

У variable length много недостатков, например обращение к 100500-тому символу строки требует проанализировать все 100499 предыдущих символов.

Можете привести парочку примеров, когда такая задача требуется?

Любой ЯВУ поддерживает обращение к символу строки по индексу. Как, по-вашему, оно реализовано?

обращение к 100500-тому символу строки требует проанализировать все 100499 предыдущих символов

Алгоритм Шлемиэля?

Интересная статья и логично всё представляющая,
а если бы в использование вошли копьютеры на троичной логике, то каким бы тогда был
и назывался байт? (трайт) :)


P.S. Ещё для половинок байта в системе команд процессоров была их возможность обменивать местами (вроде XCHG команда в 8080, Z80 прцессоре), а вообще реальное понимание, что байт произошёл удвоением количества 4-ёх бит.


А в FPGA сейчас аппаратно применены 9-ть бит. (в этом варианте удобно их делить в группироке в 8-ричной системы счисления)

То, что было XCHG в 8080, стало EX DE,HL в z80. И очевидно, к обмену половинок байта никак не относится.

Да, спасибо что обратили внимание на это, забыл уже систему команд 8080, Z80 :)
(примерно после 30-ти лет её ассемблерного не использования)
но один раз в одном месте кода была использована команда:


RLD (RRD) Левый (или правый) арифметический циклический перенос тетрады из аккумулятора в ячейку памяти, адресуемую регистром HL. Старшая тетрада (биты 7… 4) ячейки памяти переносится в младшую тетраду аккумулятора (биты 3...0), младшая
тетраде аккумулятора переносится в младшую тетраду ячейки памяти, а младшая тетрада ячейки памяти — в старшую тетраду ячейки памяти.

RLD


RRD


МИКРОПРОЦЕССОР Z80, СИСТЕМА КОМАНД


Но, ещё к слову, у Z80 были недокументированные команды работающие с половинками байта.
у Z80 удобная и мощная система команд, но аппаратную конкуренцию выиграла исторически x86.

х86 выиграл конкуренцию потому что Z80 был просто расширением восьмибитного 8080, а 8086 был шагом вперед в новый 16-битный мир.

Встречались мнения что Интел просто слила Зилогу 8-битный рынок, т.к. самой ей он был неинтересен, но при этом контролируемое присутствие Zilog на рынке процессоров позволяло Интелу избежать претензий от антимонопольных служб.

Встречались мнения что Интел просто слила Зилогу 8-битный рынок, т.к. самой ей он был неинтересен, но при этом контролируемое присутствие Zilog на рынке процессоров позволяло Интелу избежать претензий от антимонопольных служб.

Да это просто легенды. Во-первых, Интел честно пыталась конкурировать и на 8-битном рынке, выпустив своего конкурента Z80 практически одновременно с ним, который был и быстрее 8080, и требовал только +5В питание, и работал на более высоких частотах, и к тому же был обратно совместим по инструкциям. Просто Z80 оказался лучше. А следующие поколения процессоров всеми чипмейкерами уже разрабатывались под 16 бит и больше, и выпускать новую 8-битку было просто не актуально.

Во-вторых, Интел рынок Зилогу и не слила. Зилог был лидером 8-битного рынка только в ехСССР. В остальном мире Зилог был хоть и популярным процессором, но подавляющее большинство 8-битных машин было на MOS 6502.

В-третьих, популярность 16-битной архитектуре Интела обеспечила IBM и её клонмейкеры. Это не заслуга самой Интел.

> подавляющее большинство 8-битных машин было на MOS 6502.

Среди тех, которые не могли запустить CP/M?

Просто CP/M-машины до распространения писюков занимали нишу бизнес-машин, и их было много, хотя каких-то однозначных лидеров там не было.

Просто CP/M-машины до распространения писюков занимали нишу бизнес-машин, и их было много

Ну как много? Много - это всякие вариации Commodore, Apple II, Atari 400/800, ну или там даже NES, тоже вполне себе потребитель процессора на 8-битном рынке. А машин на CP/M было не очень много.

Настолько много, что конец 70х и начало 80х в журнале Byte например забиты рекламой всеразличных cp/m машин. Ближе к 90ым стало забито рекламой и статьями о писюках.

В штуках естественно я не могу сказать. Но касательно комодов и атарей с синклерами -- они начали своё победное шествие уже после или во время появления писюков и жили в общем-то параллельно, как чисто домашние компы для игр. А вот cp/m-машины, ориентировавшиеся на бизнес -- стремительным домкратом вымерли после появления писюков.

Настолько много, что конец 70х и начало 80х в журнале Byte например забиты рекламой всеразличных cp/m машин.

Ну как бы логично, что в компьютерном журнале было много рекламы компьютеров :)

Но касательно комодов и атарей с синклерами -- они начали своё победное шествие уже после или во время появления писюков

Комоды и эпплы - с 1977 года, атари с 1979-го.. Собственно, эпоха CP/M машин была вообще короткая, лет пять, но 6502 продолжил своё распространение, а бизнес-компьютеры на CP/M - нет (Роботрон 1715 не в счёт). Если верить интернетам, к 1980 году было продано 250 тыс копий СР/М, вот, собственно, и точка для отсчёта. Комодов разных моделей было продано около 20 млн. Эпплов - шесть млн.

x86 выиграл конкуренцию, потому что он

  1. стандартизировал отрасль

  2. лицензировал сторонних производителей выпускать совместимые чипы и оборудование

лицензировал сторонних производителей выпускать совместимые чипы и оборудование

Это не он лицензировал. Это опять же таки, IBM заставила лицензировать. Одним из условий допуска каких-либо компонент в производственную цепочку у них было наличие альтернативных поставщиков. Поэтому они заключили договор с Интел только на условии, что Интел лицензирует свою архитектуру другим поставщикам.

IBM заставила, но именно интел согласился и лицензировал. И вот и результат.

Ну что значит "согласился"? У них был выбор вида "или вступаете в колхоз или расстреляем". Конечно, согласился :)

Не выиграл, а проиграл. Те же Rabbit живее всех живых. А чистый x86 давно мертв.

  1. Каким образом? Ну вот когда ibm в 1981ом выбирало себе процессор, каким образом к этому моменту х86 что-то стандартизировал?

  2. В те времена (70ые-80ые) любой, кто серьёзно подходил к делу хотел пролезть во все ниши был вынужден искать себе second source производителей. Это делал и zilog в том числе.

Сверх популярный 8080 имел своего предшественника: 4040. Он был 4-х битный. И соответственно внутри этой линейки шло простое удвоение по разрядности.

Прямой предшественник 8080 -- это 8008, сделанный как однокристальный вариант процессора на рассыпухе для какого-то там терминала. 4004 и 4040 тут никаким боком, общего у них с 8008 разве что технология p-mos.

Да и 8080 нельзя назвать сверх-популярным, т.к. тот же Z80 выдернул у него флаг популярности довольно быстро. Нынешнее обоготворение 8080 -- это уже мифотворчество. До того момента, как 8088 выбрали в ibm, интел была одной из многих и наравне со многими другими производителями микропроцессоров.

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

Так он использовался разве что в CP/M, да и то не факт, что в прикладных софтах

Кто, Z80? Нет, CP/M машины для него далеко не основное применение. Я не ошибусь, если скажу, что на первом месте будут игровые машинки производства Синклера, Tandy и Amstrad, На втором месте - embedded-применения, т.к. Z80 в 1980-е также активно юзали в качестве контроллера. И там, и там тиражи были миллионные шли. А CP/M-машинок не так уж и много в сравнении с первыми и вторыми (ну ладно, Амстрад в конфигурации с дисководом умел в СР/М, но был в меньшинстве, а вот Танди, например, не умел никак из-за своей организации памяти).

вполне логична: 2^16 равно 64, значит 6 бит оказалось бы недостаточно

Спасибо за статью, быто интересно)
Вспоминаю как на экзамене по информатике мне попался на эту тему билет. Ммм, ностальгия)

С вопросом "почему 8 бит"?

не, просто вообще рассказать что такой бит, байт, мегабайт, что из чего состоит и т.д.)

В студенческие годы даже песня с припевом была :

Байт, байт - восемь бит всего лишь.
Байт, байт, слёз моих не стоишь.
Байт, байт, бисова личина.
Байт, байт - ABENDа причина.

Размер слова является кратным размеру байта. Для меня это оставалось непонятным долгие годы, причём в Wikipedia этому даётся весьма туманное определение («слово – это естественная единица данных, используемая в конкретной архитектуре процессора»). Изначально я думала, что размер слова равен размеру регистра (64 бита на x86-64).

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

С другой стороны, типы данных в конкретных языках программирования а-ля WORD/DWORD и т.д. создавались в те времена, когда машинное слово в х86 было 16-битным, и ради совместимости их не стали менять тогда, когда машинное слово стало сначала 32, а потом 64 бита. Поэтому теперь надо различать машинное слово как характеристику архитектуры, и тип данных "слово" в конкретном языке.

Слово с точки зрения электронщика действительно связано с аппаратной реализацией, но оно может не соотносится со словом с точки зрения программиста. ЕС-1020 -- архитектурно 32-разрядная машина (Система 360), однако имеет 8-битовое АЛУ и 18-битовую ширину доступа к ОЗУ (16 информационных и два контрольных разряда). ЕС-1050 -- это тоже 32-разрядная машина (та же Система 360), но основное АЛУ там 64 бита, если память не изменяет, а слово памяти -- 72 бита (8 информационных байтов плюс по одному контрольному биту на каждый байт). Ну и чему тут будет равен размер слова, если исходить из аппаратуры, а не архитектуры (т.е. представления машины с точки зрения программиста)? Плюс исторический контекст влияет. Вот отсюда и весь хаос с этим термином.

НЛО прилетело и опубликовало эту надпись здесь

Все-таки он портировал и допилил.
И вообще, хватит принижать достоинства Билла. В те годы лучшие программисты писали именно так.

Он как раз купил. Портировать ему не надо было, DOS уже изначально писался под 8086, а пилил не он, пилил Тим Патерсон, и до Майкрософт, и продолжил уже в Майкрософт.

Свечку держали?
Я вот вижу исторические примеры кода, которые лично Билл добавлял. Пусть он сделал не самую большую часть технической работы, но он отлично представлял себе что нужно делать, и как это делать, чтобы оно стало популярным и востребованным.

Простите, но история MS DOS - вообще не секрет, и даже если там есть чуть-чуть кода, который добавил лично БГ (возможно, что есть, но далеко не факт), это не меняет того факта, что он там ничего не портировал, и не допилил. Вместе с покупкой MS DOS Майкрософт наняла в команду чувака, который её и написал, и он же её продолжил разрабатывать уже на новом месте. А так, ну что там БГ себе представлял, вопрос остаётся открытым, мы можем только фантазировать на эту тему. Что-то представлял, вероятно. Но с другой стороны, ранняя (да и поздняя, чего греха таить) MS DOS по юзабилити ничем не отличалась от других файловых мониторов 1970-х годов, и сказать, что там кто-то принимал какие-то особые технические решения, чтобы оно стало популярным и востребованным - было бы чересчур опрометчиво.

Главное решение, которое обеспечило DOS популярность и востребованность - договор с IBM.

UPD: Ради любопытства полистал сейчас исходники MS DOS, которые Майкрософт выложила, версии 1.25 и 2.0. Где вы там код БГ увидели-то? Там вообще в комментариях не фигурирует ни один разработчик, кроме упомянутого Тима Паттерсона в версии 1.25.

Где вы там код БГ увидели-то?

Ну, Королёв "семёрку" тоже не сам разработал...

Причём тут Королёв, человек пишет очень конкретно: «я вот вижу исторические примеры кода, которые лично Билл добавлял».

А ему в ответ другой человек пишет не менее конкретно: "Где вы там код БГ увидели-то?"

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

При том, что "Гейтс разработал MS-DOS" примерно как "Королёв разработал Р-7". Руками водили — это да.

Причём тут вождение руками, если человек утверждает, что Гейтс код писал и это где-то видно? Где тут про вождение руками?

Ни при чём тут Королёв, ни при чём, ради Сагана успокойтесь и ступайте себе с миром!

Я спокоен.

А так, ну что там БГ себе представлял, вопрос остаётся открытым, мы можем только фантазировать на эту тему. Что-то представлял, вероятно

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

Как минимум он смог написать свою реализацию Бейсика для 8080, по его словам это наверное самый крупный самостоятельный проект.

Ну и вы забываете, что в те годы систем контроля версий не существовало, коммитов не существовало, поэтому кроме отдельно взятых комментариев, найти что-либо не выйдет. Оно не спрятано, его просто нет.
Вот я вот могу предположить, что вы никогда в жизни не рисовали в детстве. Или докажите скриншотами? Ну может найдете 1-2, но ведь это будет даже не 1%?

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

И добавьте к этому отсутствие интернета, отсутствие комьюнити, отсутствие документации в том виде, в котором она есть сейчас, отсутствие open source и примеров готового кода на разные случаи жизни.
Я вот изучал бейсик в похожих условиях, когда в лучшем случае доступно описание нескольких команд и простенькая программка в журнале. На самом компе берешь тот же БК010-01, оператор circle и методом тыка догадываешься какие там могут быть параметры. Много сможешь сделать в школьном возрасте?

В общем относиться к его знаниям снисходительно - неуважать собственное понимание истории ИТ.

Ну конечно совсем ничего. Просто будучи школьником, еще задолго до MS-DOS написал пару программ

Простите, но мы вроде вполне определённо про портирование и допиливание MS DOS Гейтсом говорили, а не про разработку Бейсика, разве нет? Причём тут вообще Бейсик-то? Что Гейтс написал реализацию Бейсика под Альтаир на 8080, это тоже общеизвестный факт, но он никакого отношения к обсуждаемому топику не имеет.

также и в исходниках ДОС - могло быть куча мелких правок, дополнений.

А могло и не быть. Не забывайте, что систем контроля версий не существовало, общего репозитория - тоже не было. И если у программы есть свой выделенный разработчик, другие в неё просто не лезли. Потому что возможности объединить изменения тоже никакой не было. Рабочий экземпляр кода хранился на машине у собственно разработчика, и чтобы Гейтс внёс туда какие-то изменения, он должен был садиться за компьютер Патерсона. Зачем бы ему это делать? Плюс, также не забывайте, что ранний DOS с одной стороны маленькая софтинка, в которой совершенно нечего делать второму разработчику, с другой стороны - достаточно сложная софтинка с кучей различных структур данных и мудрёных алгоритмов, и чтобы её разрабатывать, во всём этом надо хорошо ориентироваться. И знаете, подробно разбираться во всего лишь ещё одном продукте среди кучи других - непозволительная роскошь для топ-менеджера активно растущей компании.

В общем относиться к его знаниям снисходительно - неуважать собственное понимание истории ИТ.

Даже не представляю, в каком месте мы перешли от "Билл Гейтс не портировал MS DOS" к "Относимся к его знаниям снисходительно" через "Гейтс написал Бейсик". Давайте всё-таки темы не будем подменять по ходу дела, а?

Насколько я знаю, это общеизвестно что он кодил системные вызовы и делал вклад в ранние версии MSDOS, особенно когда в Microsoft было десяток-другой человек. Об этом неоднократно говорилось на интервью.

Да, дальше он полностью ушел в маркетинг/юриспруденцию и так далее.

Но множество разработчиков, которые работали в Microsoft, отмечали, что Билл отлично понимает потроха кода и тонкие нюансы того, что именно пишут и зачем. В отличие от других менеджеров крупных софтверных компаний.

Ну так потому Микрософт и взлетела, что её шеф, даже не будучи сам великим программистом, разбирался в этом виде деятельности и мог грамотно нанимать специалистов. В принципе, то же самое относится к любой технической компании. HP тоже была крута, пока ей рулили Хьюлетт и Паккард Ну а в чём разбираются финансисты, кроме как в распиле бабла? (Понятно, что бывают исключения -- но они лишь подтверждают правило)

Насколько я знаю, это общеизвестно что он кодил системные вызовы и делал вклад в ранние версии MSDOS,

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

Я действительно не понимаю, как такое может быть банально технически реализовано в эпоху, когда не было никаких средств совместной работы, а первая компьютерная сеть для машин IBM PC в железе появилась лишь в 1984-м году. То, что Гейтс вычитывал бумажные спецификации и карандашом там вносил правки - ничуть не сомневаюсь. Но кодить системные вызовы он не имел технической возможности. У него не было никакого способа взять код и что-то там дописать, кроме как прогнать разработчика с его рабочего места, сесть за его компьютер и дописывать. Ну или сказать "принеси мне дискетку с последней версией сурцов MS DOS, и пока сиди, ничего не делай, я потом позвоню - придёшь, заберёшь дискетку". Но зачем бы он это делал?

кроме как прогнать разработчика с его рабочего места

We know that in the first 5 years of Microsoft’s existence (until maybe 1982 or so) Gates reviewed every line of code written - and rewrote some parts of it as he saw fit. So it’s very likely that he stopped doing that because managing the company was taking too much of his time - so he probably didn’t write much (if any) code after that. Windows 1.0 didn’t appear for another three years - and with the meteoric growth of Microsoft, I doubt that Gates ever had more time or energy to spare.


Steve Baker


Ну и что значит "прогнать разработчика", как много было сотрудников в первый год после создания Microsoft?
Билл, как сооснователь и владелец вполне мог и в нерабочее время заниматься. Это же его детище.

We know that in the first 5 years of Microsoft’s existence (until maybe 1982 or so) Gates reviewed every line of code written

Ну, такое, от чувака, который тоже пишет свои личные мысли. Что контролировал - да, несомненно. Что что-то где-то за кем-то переписывал, вряд ли, скорее, чёркал в листинге карандашом и просил переписать вот так-то. В раннем Майкрософте он лично работал над софтом под TRS-80. И полагаю, этого было ему достаточно, чтобы занять его время как программиста. Но это не MS DOS, это другой проект, под другую архитектуру. Надо ж иметь в виду, что молодой Майкрософт разрабатывал этот самый софт под огромный зоопарк несовместимых или мало совместимых между собой микро-ЭВМ, DOS была всего лишь одной из них, и на момент покупки - далеко не самой популярной и даже не самой перспективной. Никто не ожидал, что IBM PC так круто "выстрелит".

Ну и что значит "прогнать разработчика", как много было сотрудников в первый год после создания Microsoft?

Первый год создания, это другая эпоха, это середина 1970-х. А на момент покупки DOS - где-то полсотни. Уже не так мало, чтобы бегать за каждым, это уже предполагает хотя бы одну прослойку из менеджеров.

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

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

Ну как были? Были на мейнфреймах, где много юзеров сидели в одном окружении и работали с одними и теми же данными. На микроЭВМ не было от слова "вообще", равно как и не было компьютерных сетей для микроЭВМ. Поэтому в Майкрософте их не могло быть года этак до 1985-го.

Я уверен, что он вполне правил какие-то моменты в ядре

А зачем ему это? Быть профессионалом по архитектуре разных процессоров, это сейчас уникальная фишка. В 1980-м этой суперспособностью обладали 100% программистов микроЭВМ. Благо, у 8088 примерно 120 инструкций, а у 8080 меньше восьмидесяти, а вообще вся необходимая документация программиста x86 умещалась в сотню страниц с описанием собственно х86 процессора, карты памяти/портов, контроллера прерываний и ПДП, прерываний BIOS, и портов ввода-вывода контроллеров. Ещё не нужны были никакие сообщества, никакие интернеты, ответы на вообще все возможные вопросы были в такой книжке.

В 1980-м этой суперспособностью обладали 100% программистов микроЭВМ

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

А зачем ему это?

Чтобы продать рабочий продукт, чтобы сэкономить время, чтобы компания, которую он создал, не развалилась. Первые несколько лет был вполне себе аврал. Или он в первый день создал компанию, а на второй нанял 100 программистов?

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

Зато все программисты Майкрософт имели у себя на работе все разновидности разных архитектур, под которые им приходилось программировать. Программист вообще без домашнего компьютера в те годы, ну, это не уникальное явление, отнюдь. Я вон и бейсик хорошо, и ассемблер кое-как знал, имея дома только вот такой компьютер:

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

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

Так вот, наличие книжек и умение пользоваться командами - не является тождеством. Сейчас. Тогда, в том временном периоде, про который мы говорим, никаких других программистов не было. Если человек работал программистом, понять абсолютно все те команды и несчастные пять способов адресации 8088 процессора, он был способен. Понимаете? Программистов с университетской скамьи учили работать с архитектурой PDP-11, IBM/360 как на языках высокого уровня, так и на языках ассемблера, плюс, изучали также и набирающие популярность микроЭВМ, всякие там 6502, 8080 и 6800. Не могло быть программиста в 1981-м году, который открыл бы техдокументацию на IBM PC, и не понял там вообще всё, и не нашёл бы там ответы на свои вопросы, если эти ответы вообще существуют в какой-либо документации. Такой человек просто бы в профессию тогда не попал, отвалился бы ещё на самом старте.

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

Чтобы продать рабочий продукт, чтобы сэкономить время, чтобы компания, которую он создал, не развалилась.

Кому он сэкономит время, если потратит драгоценное время руководителя на набор кода по проекту, у которого есть собственный профессиональный ведущий программист, знающий досконально и архитектуру системы, и архитектуру своего продукта, т.к. 100% своего рабочего времени занимается исключительно ими и ничем более, и который прекрасно сможет сам реализовать всё то, что ему Билл Гейтс просто скажет, чего он хочет? Чтобы компания не развалилась, он должен руководить, а не печатать, сгоняя своих сотрудников с их рабочих мест, как я уже выше писал (ну или как вы предложили, по ночам, когда никого нет, внося неожиданные для них изменения в их работу).

В Microsoft для разработки использовали много чего и сеть там появилась рано, причем PC не были основной рабочей станцией:

1982:

The Microsoft Local Area Network (MILAN) is now fully functional, linking all of Microsoft's in-house development computers including a DEC 2060, two PDP-11/70s, a VAX 11/250 and many MC68000 machines running XENIX. This system will simplify e-mail delivery on-site.

"Размер слова является кратным размеру байта." - ОШИБКА.

Размер слова может быть любым, как было удобно разработчику аппаратуры. Вот пример из документации на микроконтроллер PIC16F628:

Separating program and data memory further allows instructions to be sized differently than 8-bit
wide data word. Instruction opcodes are 14-bits wide making it possible to have all single-word instructions. A 14-bit wide program memory access bus fetches a 14-bit instruction in a single cycle.

"В качестве ещё одной причины использования BCD кто-то назвал финансовые вычисления. "

и далее Ваши рассуждения ошибочны.

Причина в том , что десятичное дробное число может не иметь точного представления в двоичном формате, но имеет точное представление в формате BCD.

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

Это перевод же.

А в чем смысл этого перевода, Карл?

Эй, вы тут карты не путайте


БЦД для целых чисел. И удобней потому что "единицы и десятки" отбросить легче.
А уж целочисленное деление погрешностей не создаёт хоть в двоичной, хоть в десятичной форме

Относительно Intel 8008 как оправдание применения байта рассуждение ошибочное.

До этого процессора был Intel 4004.

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

и меня не удовлетворило объяснение, что «компьютеры используют двоичную
систему счисления, поэтому степень двойки подойдёт лучше всего».

Потому что один из наборов линий мультиплексора и демультиплексора и соответственно шифратора и дешифратора кратно степени 2, а это очень важный компонент железа.

Мне недавно рассказывали версию, что происхождение 8 бит связано с системой команд PDP11.

PDP11 - шестнадцати разрядная машинка 70-х. А коммерчески весьма успешная IBM-360 - машинка 60-х, и именно в этой системе был 8-ми битный байт. Естественно, причин могло быть несколько, и они в статье перечислены. Но не все они равнозначны по весам. У меня с 70-х гг. сложилось ощущение, что именно успех системы 360 породил 8-ми битный мэйнстрим.

Итого — искать надо в англоязычной литературе, когда появилось это слово, и что понимали под этим термином.

Минутка юмора по теме:


В начале было слово. И слово было 16 бит аки два байта. И имел младший байт меньший адрес, а старший — больший.
И увидели это на Digital и сказали, что это хорошо.
И создали процессор с шестью одинаковыми регистрами. И было еще два регистра у него для облегчения жизни. И можно было ко всем регистрам обратиться одинаково. И была восьмеричная система и было сделано так, что любая команда занимала одно слово и по числу восьмеричному можно было разобрать, что делает команда…
И создали на Digital шину такую, что легко стало всякую тварь на нее сажать. И все были равны на ней, хотя и имели ранжир. И стали твари на шине плодиться и размножаться.
И увидели это на Digital и сказали, что это хорошо.
И, подивившись, собрали все это вместе и сделали компьютер и назвали его PDP-11 и всякий, кто сосчитает число модели, познает число это — одиннадцать.
И возрадовались программисты такому чуду и породили на нем еще большие чудеса.
И был среди них некто Керниган и создал он письменность и назвал ее Си.
И был среди них Томпсон и создал он мировой столп и назвал его Юникс.
И многие другие творили чудеса с PDP-11 и стала на земле великая сила и имя ей — Сеть.
И увидели это на Digital и сказали, что и это хорошо.

Фрагмент СВЯТАЯ БИБЛИЯ БК-0010

Рассказываю, почему процессоры Intel (x86) есть байт и почему байт - это 8 бит.

Вычислительная техника создавалась для обработки чисел, в основном, для банков и печатания текстов - замена машинописи.

Поэтому для финансовых вычислений придумали двоично-десятичный код = это 4 бита. И это был следующий за битом минимальный размер.

Для представления текста имеем:

1837 - код Морзе 6 бит

1874 - код Бордо 5 бит . Код Бодо допускал передачу заглавных и строчных букв, цифр и некоторых специальных символов. Однако его способность представлять нелатинские письмена была ограничена, и в конечном итоге он был заменен более продвинутыми стандартами кодирования, такими как ASCII - 8 бит -официально 1961 год.

Первый процессор Intel 4004 - 1971 год, как и следующий Intel 8008 -1972 год не получили широкого распространения и лишь Intel 8080 -1974 оказался самым востребованным.

Резюме: Для обработки цифр надо 4 бита, а для ASCII - 8 бит, которые удобно хранят две двоично-десятичные цифры. Поэтому не было процессоров не на 3 , 5 или 6 бит.

------------------

Про байт из 8 бит ...

  1. Бемер, Роберт Уильям (2000-08-08). "Почему в байте 8 бит? Или так и есть?"Виньетки компьютерной истории. Заархивировано с оригинала 2017-04-03. Извлечено 2017-04-03.

    Я пришел работать в IBM и увидел всю путаницу, вызванную ограничением на 64 символа. Особенно когда мы начали думать об обработке текста, для которой требовались бы как верхний, так и нижний регистры.
        Добавьте 26 строчных букв к 47 существующим, и получится 73 - на 9 больше, чем могли бы представлять 6 бит.
    Я даже внес предложение (с учетом STRETCH, самого первого из известных мне компьютеров с 8-битным байтом), которое позволило бы увеличить количество кодов символов на перфокартах до 256 .
        Некоторые люди восприняли это всерьез. Я думал об этом как о подделке.
    Итак, некоторые люди начали думать о 7-битных символах, но это было нелепо. В качестве фона используется компьютер IBM STRETCH, обрабатывающий 64-символьные слова, разбитые на группы по 8 (я разработал для него набор символов под руководством доктора Вернера Бухгольца, человека, который придумал термин "байт" для обозначения 8-разрядной группировки).  Казалось разумным создать универсальный 8-битный набор символов, обрабатывающий до 256. В те дни моей мантрой было "степени 2 - это магия". И вот группа, которую я возглавлял, разработала и обосновала такое предложение .
        Это был слишком большой прогресс, когда его представили группе стандартов, которая должна была формализовать ASCII, поэтому они на данный момент остановились на 7-битном наборе, или же на 8-битном наборе, оставив верхнюю половину для будущей работы.
    IBM 360 использовал 8-разрядные символы, хотя и не ASCII напрямую. Таким образом, "байт" Бухгольца прижился повсюду. Мне самому это название не нравилось по многим причинам. В проекте было 8 битов, перемещающихся параллельно. Но затем появилась новая часть IBM с 9 битами для самоконтроля, как внутри центрального процессора, так и в ленточных накопителях. Я представил этот 9-битный байт прессе в 1973 году. Но задолго до этого, когда я возглавлял отдел программного обеспечения Cie. Булл во Франции в 1965-66 годах я настаивал на том, чтобы слово "байт" устарело в пользу "октета".
     Вы можете заметить, что мое предпочтение тогда теперь является предпочтительным термином.
    Это оправдано новыми методами связи, которые могут передавать 16, 32, 64 и даже 128 бит параллельно. Но некоторые глупцы теперь ссылаются на "16-битный байт" из-за этой параллельной передачи, которая видна в наборе UNICODE. Я не уверен, но, возможно, это следует называть "hextet".
        Но вы заметите, что я по-прежнему прав. Степени 2 по-прежнему волшебны!

    .

ASCII требует 7 бит. Причём один бит, если не учитывать несущественную пунктуацию, нужен только для выражения строчных букв и управляющих символов. Т.е. 6 бит хватит для выражения всех символов 0x20-0x5F, которые достаточны для написания любой программы на фортране и даже на C использованием триграфов.

Статья говорит о многом, но так и не даёт адекватного ответа, что было решающим: более удачная упаковка BCD или все другие причины.

Это был слишком большой прогресс, когда его представили группе стандартов, которая должна была формализовать ASCII, поэтому они на данный момент остановились на 7-битном наборе, или же на 8-битном наборе, оставив верхнюю половину для будущей работы.

8-ой бит - альтернативная кодировка.

8-разрядные коды Расширенный ASCII и ISO /IEC 8859, : UTF-8

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

К слову, триграфы в C добавили, разумеется, не для того, что бы писать на 6bit ASCII (который, оказывается, существует и реально применяется в AIS для предупреждения о столкновении судов на море). А из-за того, что сделали разновидность 7-bit ASCII, где некоторые символы пунктуации заменили на национальные буквы.

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

Как это "не нужен"? А контроль чётности???

Си никак не привязан к ASCII, и активно использовался с EBCDIC.

То, что моряки в 1990х придумали свою кодировку и назвали её "шестибитным ASCII" -- имеет к стандарту ASCII не больше отношения, чем JavaScript к Java: на популярном названии много желающих прокатиться.

И зачем же тогда C триграфы, если не привязан?

Про 6 bit ASCII непонятно к чему ваш квазикапитанский комментарий. Я про него упомянул в контексте достаточности 6 бит для выражения почти любого текста в одном регистре и почти всех ASCII знаков пунктуации. Что в свою очередь было в контексте обсуждения "почему же все таки появился 8 битный байт: что бы текст удобно хранить (на что намекал тредстартер), или по другим соображениям".

И зачем же тогда C триграфы, если не привязан?

Для не-ASCII кодировок, в которых нет нужной пунктуации, очевидно же.

Я про него упомянул в контексте достаточности 6 бит для выражения почти любого текста в одном регистре и почти всех ASCII знаков пунктуации.

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

(Я не нашёл документальных свидетельств существованию реализаций Си для BCDIC, но возможность таковых предполагалась.)

Резюме: Для обработки цифр надо 4 бита, а для ASCII - 8 бит

ASCII требует 7 бит, и собственно, даже ранние сетевые протоколы это учитывали.

Это был слишком большой прогресс, когда его представили группе стандартов, которая должна была формализовать ASCII, поэтому они на данный момент остановились на 7-битном наборе, или же на 8-битном наборе, оставив верхнюю половину для будущей работы.

8-ой бит - альтернативная кодировка.

8-разрядные коды Расширенный ASCII и ISO /IEC 8859, : UTF-8

IBM 360 использовал 8-разрядные символы, хотя и не ASCII напрямую. Таким образом, "байт" Бухгольца прижился повсюду. 

UTF-8 вообще может иметь многобайтное представление символа.

IBM S/360, конечно, использовала 8-разрядные символы EBCDIC, но как следствие байтовой архитектуры, а не как причину. В EBCDIC того времени больше половины кодового пространства не заполнено, а сама кодировка представляет собой уплотнённую форму 12-битового кода для перфокарт, который, в свою очередь, выбирался из тех соображений, чтобы было поменьше единичек рядом, так как от большого количества соседних дырок рвался картон.

Я привел вроде бы перевод статьи с упоминанием автора слова байт.

Что не понятно?

В дополнение могу сказать следующее.

Так как основа вычислительной техники двоичный элемент и булевая алгебра (Джордж Буль ( "Математический анализ логики" -1847 г и "Исследовании законов мышления" -1854 г) , то создание вычислительных устройств аппаратно проще всего делать на основе 2^n системы счисления.

Поэтому сначала была логика и триггер - элемент с двумя устойчивыми состояниями , потом 4-х разрядный регистр, 8-ми, 16, 32, 64 и т д. А микропроцессор по словам его создателей(основателей Intel) - (не дословно) это логическое устройство , логику которого можно создать после производства самого устройства в виде чипа.

При этом 50 лет назад никто не заморачивался вопросом сколько бит назвать байтом или изготовление 3 , 5,6 или 7 разрядных вычислителей.

Полагаю, что и разрядность вычислителя выбирали как степень двойки, т е 4,8,16 и т д.

Непонятно, почему вы отождествляете байт как единицу адресации с байтом как единицей кодирования текста.

Именно байтовая адресация была придумана в S/360, и она закрепила 8-битовый байт (выделив его среди прочих) как способ кодирования текста тоже. Хотя больше 128 актуальных кодов символов в то время и ещё 15-20 лет после этого ни одна машина не использовала.

При этом большинство компьютеров времён появления S/360 имело размер слова, не равный степени двойки. Так как обычно не требуется дешифратор номеров битов в слове.

поясняю, я не отождествляю.

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

------------------------

Далее я попытался объяснить разрядность вычислителей (микропроцессоров ) в том числе x86 и изложил свое представление. Для вычислений достаточно 4 разряда, а для хранения и обработки текста 4 мало, но разрядность вычислителей ( сумматоров) никто не думал даже в страшном сне делать 5 или 6 или 7 разрядов. Делали тоже как степень 2 и следующее за 4 разрядами это 8. И вот это 8 подходит для обработки текста так как ASCIIZ хотя и 7 бит, но как приведено в переводе выше представленного мною, 8-ой бит - расширение. На самом деле полагаю, что проблема опять в сложности обработки на вычислителе 7 бит вместо 8 бит. Чтобы использовать свободный восьмой бит в памяти надо делать упаковку и распаковку, а 50 лет назад никто упаковкой и распаковкой не заморачивался никто.

А вот для обращения с памятью изначально в 8080 заложили 16 разрядный регистр адреса.

В итоге при обработке финансов IBM внедрила 2-10 код. Для научных вычислений фиксированную и плавающую точку, для текста байт - это символ.

Адресация памяти побайтно, так как вычислитель в Intel8080 - 8 разрядов.

Но в старших моделях S/360 вычислитель был 32-разрядный, а адресация памяти всё равно побайтно. До 8080 ещё жить и жить надо было.

Тогда читайте перевод статьи, который я привел выше. Это про IBM.

я рассказал свое понимание и историю процессоров Intel (x86)

Про IBM я подробно не интересовался. Будет время -посмотрю.

вот на хабре статья по теме:

https://habr.com/ru/companies/ruvds/articles/535148/

До того, как появились 8-битные байты, сумматоры были 36-битными, и в комментируемой вами статье это объясняется. Нет в степенях двойки ничего выдающегося, и слово "байт" далеко не сразу, как появилось, стало означать 8 бит.

>Статья на Wikipedia гласит, что 8-битный байт впервые начал использоваться в IBM System/360 в 1964 году.

Brooks, Amdahl и др. пришли в группу разработки system 360 после stretch (ibm 7030), там байт мог быть равен 4,6,8 bit, вообще архитектура 360 примерно вышла из 7030 как сильно упрощенный вариант, ниже приведена страничка из ранней спецификации stretch 1957 года с обсуждением байтовой организации

"если вы проектируете двоичный компьютер в англоязычной стране"

При чём здесь английский язык. Русский язык то же умещается в 7 бит. И европейские языки умещаются. Другое дело если в стране иероглифы.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

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

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

По поводу научных вычислений. Просто в 1960-е годы в научных вычислениях лидировали компьютеры фирмы CDC, конструктором которых, кстати, был небезызвестный Крей. И там использовались 60-разрядные слова. Которые ни на какие байты не делились, но в них можно было упихать 10 штук символов в 6-битовой кодировке.

60-разрядное слово – это объективно достаточно хороший вариант, если не запариваться на байты. В теперешнем 64-разрядном типе IEEE 704 double можно без потери общности убрать 4-5 бит из мантиссы. В CDC можно было использовать ненормализованные вещественные числа, в которых мантисса могла рассматриваться как 48-разрядное целое. Иметь один и тот же формат для целых и вещественных чисел было удобно для математических расчётов, так как не нужны были отдельные операции для преобразования.

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

> С тем же успехом, конечно, слова в CDC могли бы быть и 64-разрядными, но они просто не додумались до концепции байта

следущее поколение - CDC STAR-100, Cray-1 были 64-разрядными, требования к точности поднялись + стандартизация ASCII

Да, только вот упихивать туда уже ничего не стали! Никогда не смотрели на CHAR_BIT на Cray? :-)

Это следствие неприспособленности языка Си к машинам с небайтовой архитектурой и отсутствия в нём packed array. На Паскале в таких случаях можно было упихать (собственно, в первой версии Паскаля строки символов существовали именно в виде такого упиханного в слово типа ALFA). А в Си требуется, чтобы на каждый элемент массива существовал указатель.

Поэтому упихать-то на Крее можно, но язык Си не позволяет описать такую структуру данных на основе типа char.

Ну возьмем примерно любую архитектуру с байтами и большим словом (SPARC, Alpha, HP и т.п.). Байты есть, массив сделать можно, указатель можно, но вот если обратиться по указателю, не выровненному по границе слова - bus error.

> Никогда не смотрели на CHAR_BIT на Cray?

нет работать не пришлось, на stackoverflow есть об этом слегка, дело в адресации конечно, если нет возможности доступа к отдельным байтам как на Cray, как-то не вижу что компилятор может с этим сделать, в этом смысле Cray бескомпромиссная машина, в отличие от той же ibm stretch, разработка которой обошлась намного дороже, как и многие неудачные проекты супер поучительный пример

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

Просто, кажется, примерно во всех больших микропроцессорных архитектурах к памяти можно обратиться только с каким-то выравниванием (иначе BUS ERROR), но байтики есть и как-то работать с ними можно.

Мой папа до 1992 года работал памятником в почтовом ящике (то есть разрабатывал ОЗУ для всяких специальных машин на одном из предприятий ВПК СССР) и рассказывал всякие вещи, которые мне - школьнику, знавшему кое-что о ПК на х86 - казались дикими. Например: "У нас там было 37-битное слово". Чуть позже я узнал о коде Хемминга. То есть в данном примере в слове было 32 бита данных и 5 бит кода коррекции ошибок.
В общем, это я к чему... Слово может иметь разный размер даже в разных частях одного процессора. А тот факт, что в x86 принято называть словом 16-битный тип данных - обычный историзм.

Предполагаю, он говорил про Минск-22, в котором слово было честные 37 бит. Байт ("информационный символ") там был при этом 7 бит.

Про Минск-22 ему бы дедушка разве что рассказывал. В 1980-е эти Мински уже на металл все порезали, они по быстродействию уступали даже настольным калькуляторам Искра-1250.

Ну я ориентировался на "было", то есть думал, что папа не прям про 1992 год рассказывает, а про то, с чем довелось работать. А так да, последний Минск сделали в 1975, думаю к 1992 все уже выключили.

Просто он написал, что "мне - школьнику, знавшему кое-что о ПК на х86", ну т.е. речь явно шла уже как минимум, о конце 80-х, или начале 90-х.

Нет, речь шла о бортовых машинах под сравнительно узкие задачи, например, в области гидроакустики. Скорее всего, кроме номера изделия у них других имён и не было. Однако, диапазон дат разработки как раз мог быть с конца 60-х до начала 90-х.

Но конкретное количество бит, которое мне тогда показалось странным я естественно не помню, всё-таки под 30 лет прошло. И да, как отметили ниже пример с Хеммингом я привёл явно некорректный, то есть наверняка там было не 37. Возможно, слово было 32, а из них 27 - данные.

Точней, Минск-2, -22 и -32. Ну и добавлю, что путаница может возникать ещё и из-за разного представления машинного слова для программиста и электронщика. Скажем, для программиста Система 360 (ЕС ЭВМ) -- всегда 32-разрядная, однако в зависимости от модели память могла быть организована по-разному (у ЕС-1020 ширина доступа -- 18 бит, из коих два -- контрольные разряды для двух информационных байтов, у ЕС-1035 -- 72 бита: 8 информационных байтов плюс восемь разрядов для контроля и коррекции по коду Хэмминга, и т.п.), поэтому электронщик, рассуждая о памяти, мог использовать термин "слово" по отношению к физическому слову памяти, а не в том значении, в котором его использует программист.

Не хватит 5 бит в коде Хэмминга для этого случая, потому что для адресации 37 бит надо 6 бит. Таким образом, слово получается 38 бит.

"В начале было слово, и слово было 2 байта, а больше ничего не было"...

Hidden text

1 В начале было слово, и слово было 2 байта, а больше ничего не было.
2 И отделил Бог единицу от нуля, и увидел, что это хорошо.
3 И сказал Бог: да будут данные, и стало так.
4 И сказал Бог: да соберутся данные каждые в свое место, и создал
дискеты, и винчестеры, и компакт-диски.
5 И сказал Бог: да будут компьютеры, чтобы было куда пихать дискеты, и
винчестеры, и компакт-диски, и сотворил компьютеры, и нарек их хардом, и
отделил хард от софта.
6 Софта же еще не было, но Бог быстро исправился, и создал программы
большие и маленькие, и сказал им: плодитесь и размножайте, и заполняйте
всю память.
7 Hо надоело Ему создавать программы самому, и сказал Бог: создадим
программиста по образу и подобию нашему, и да владычествует над
компьютерами, и над программами, и над данными. И создал Бог
программиста, и поселил его в своем ВЦ, чтобы работал в нем. И повел Он
программиста к дереву каталогов, и заповедал: из всякого каталога можешь
запускать программы, только из каталога Windows не запускай, ибо маст
дай.
8 И сказал Бог: не хорошо программисту быть одному, сотворим ему
пользователя, соответственно ему. И взял Он у программиста кость, в коей
не было мозга, и создал пользователя, и привел его к программисту; и
нарек программист его юзером. И сидели они оба под голым ДОСом, и не
стыдились.
9 Билл был хитрее всех зверей полевых. И сказал Билл юзеру: подлинно ли
сказал Бог: не запускайте никакого софта? И сказал юзер: всякий софт мы
можем запускать, и лишь из каталога Windows не можем, ибо маст дай. И
сказал Билл юзеру: давайте спорить о вкусе устриц с теми, кто их ел! В
день, когда запустите Windows, будете как боги, ибо одним кликом мышки
сотворите что угодно. И увидел юзер, что винды приятны для глаз и
вожделенны, потому что делают ненужным знание, и поставил их на свой
компьютер; а затем сказал программисту, что это круто, и он тоже
поставил.
0A И отправился программист искать свежие драйвера, и воззвал Бог к
программисту и сказал ему: где ты? Программист сказал: ищу свежие
драйвера, ибо нет их под голым ДОСом. И сказал Бог: кто тебе сказал про
драйвера? уж не запускал ли ты винды? Программист сказал: юзер, которого
Ты мне дал, сказал, что отныне хочет программы только под винды, и я их
поставил. И сказал Бог юзеру: что это ты сделал? Юзер сказал: Билл
обольстил меня.
0B И сказал Бог Биллу: за то, что ты сделал, проклят ты пред всеми
скотами и всеми зверями полевыми, и вражду положу между тобою и
программистом: он будет ругать тебя нехорошими словами, а ты будешь
продавать ему винды.
0C Юзеру сказал: умножу скорбь твою и истощу кошелек твой, и будешь
пользоваться кривыми программами, и не сможешь прожить без программиста,
и он будет господствовать над тобой.
0D Программисту же сказал: за то, что послушал юзера, прокляты
компьютеры для тебя; глюки и вирусы произведут они тебе; со скорбью
будешь вычищать их во дни работы твоей; в поте лица своего будешь
отлаживать код свой.
0E И выслал Бог их из своего ВЦ, и поставил пароль на вход.
0F General protection fault

0F General protection fault

Это Программист проапгрейдился до Хакера.

байты и слова. В чём же отличие между ними?

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

Что же до слова в x86 - там этот термин был использован для именования наибольшей единицы информации, которая может быть помещена в регистр процессора. Если Вы помните, то у процессора была горсть 16-битных регистров, часть из которых были доступны только "всё сразу", а часть были "поделены" на два 8-битных регистра, доступных независимо (например, 16-битный регистр AX делился на два 8-битных регистра AH и AL).

Отображение это всё нашло, например, в ассемблере. Ключевое слово DB обозначало байт, DW соответственно слово. Ну и двойное слово DD - единица информации, составляющая полный адрес ячейки оперативной памяти, который в памяти занимал 4 байта, а в процессоре использовал два регистра, регистр сегмента и регистр смещения в нём (например, ES:BX). Позже, когда появилась 32-битная архитектура, появились и дополнительные ключевые слова (скажем, DQ - четверное слово). А уже имеющиеся - не менялись. Считайте что по причине обеспечения обратной совместимости.

Ну а в Системе 360 или в ARM, которые изначально были 32-разрядными, слово -- именно 32 бита, а 16 бит -- полуслово. Поэтому и путаница с этим термином, но автору статьи явно было лень посмотреть на историю разных архитектур.

А еще путаница между килобайтами и кибибайтами

Согласен, кибибайты - нелепое изобретение, которое зачем-то массово навязывается.

На счет кодировки символов. Старички хорошо помнять, что в машинах DEC (СМ ЭВМ) использовалась кодировка RADIX-50 которая предполагала размещение сразу трех символов в двух байтах (в одном 18-битном слове + два резервных бита на ранних PDP и в одном 16-битном слове на PDP-11 и VAX-ах). Это позволяло машине работать сразу с 6-ю символами одним машинным словом размером 36 бит. Теория о том, что ASCII является причиной байта IMHO не состоятельна, скорее наоборот - таблица ASCII была подогнана под 8-битный байт.

На момент появления байта US ASCII была 7-битной кодировкой, насколько помню; 8-битной ASCII стал уже в 1970-80-х. RADIX-50 позволял плотнее упаковывать символы для экономии памяти, что было важно для мини-ЭВМ с их небольшой разрядностью (64 Кбайта адресуемой памяти, если говорить про наиболее популярные PDP-11; VAX можно не рассматривать, ибо это уже вторая половина 1970-х). В то же время, эта кодировка очень ограничивала набор символов: собственно, только большие английские буквы, цифры и ещё несколько знаков, что совершенно недостаточно во многих задачах (из-за этого, кстати, столь ограничен был набор допустимых символов в именах файлов на PDP-11). Кроме того, упаковка-распаковка требовали выполнения дополнительных операций, т.е. прилично снижали производительность.

печальное наследие "имперской" системы...

Размер байта представляет минимальную единицу данных, которую можно адресовать

Это верно только для относительно современных компьютеров (где-то с 1970-х). В более ранних часто встречалась только словная адресация.

Чуть-чуть оффтоп - а есть ли какая-то объективная причина, почему человечество использует десятичную систему счисления? Т.е. были же в истории и 6-ричные, 12-ричные, и 20-ричные, и даже 60-ричные. Есть ли какое-то объективное (математическое?) преимущество у 10? Или просто так сложилось, 10 пальцев и все тут?

НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

32 зуба тоже исторически сложилось, но зубы мудрости таки удаляют.

НЛО прилетело и опубликовало эту надпись здесь

При том, что не всё данное нам от природы есть константа.

P.S. А ещё есть фрезеровщики...

В общей практике удобнее 10-тичная, в узких специализациях - своя конкретная, наиболее оптимальная для использования.

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

Это не говоря уже о том, что позиционность системы счисления - это ортогональная характеристика к величине её основания :)

12-ричная облегчает деление на 3, что намного чаще выполняется в быту, чем деление на 5.

поделите 5 на 3 в 12-ричной?

1.8, а в чём затруднения?

что-то я тут не понял. Поясните как это у вас получилось?

Каджит подозревает, что делением в столбик.
5/3 ⇒ 3/3 + 2/3 ⇒ 1 + 2/3 ⇒ 1 + 24/34 ⇒ 1 + 8/12 ⇒ 1.8₁₂

Это просто мухлеж.

Так и запишем, арифметика с дробями — мухлёж.

Каким образом из перечисленного легаси вы вывели оптимальность? )

А не путается ли тут причина и следствие? Была б у нас 8-ричная система - считали бы запросто в уме, было б удобно делить на 8, и далее по списку?

НЛО прилетело и опубликовало эту надпись здесь

и лежит в основе имперской системы мер

А систему мер какой империи вы имеете в виду? Там, где в ярде три фута, в роде 5.5 ярдов, в чейне 4 рода, а в миле 80 чейнов, что ли? Или ту, где в аршине 16 вершков, в сажени 3 аршина, а в версте 500 саженей?

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

НЛО прилетело и опубликовало эту надпись здесь

Это особенность кодировки, также как и то, что в 16-ричной записи тоже используются арабские (десятичные) числа. В случае времени мы можем сказать "1/3 часа". Это литерал 60-ричной системы счисления, не выразимый в 10-тичной.

Объективно десятичная система неудобна. В ней непредставима 1/3, зато представимы 1/5 и 1/10, непредставимые в двоичной. Это плодит огромное количество ошибок.

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

Но так получилось, что из-за 10 пальцев имеем то, что имеем.

НЛО прилетело и опубликовало эту надпись здесь

В книжке, доставшейся с zx-spectrum, двоичные вычисления и работа процессора объяснялись на пальцах в буквальном смысле. Я так и запомнил и был уверен что 8 бит - это длинные пальцы обеих рук(большой палец не удобен), а 4-битные половинки байта, переводимые в 16-ричную для удобства - это пальцы одной руки. И 8-битный байт получается удобен для ручной проверки вычислений программистом

Хотя сами изложенные факты верны, выводы зачастую довольно бредовые: автор явно не стремился тщательно обдумать собранную информацию, в т.ч. в историческом контексте (тогда, например, сразу стало бы понятно, почему слово в архитектуре IA-32 aka x86 -- это 16 бит, а не 32 или 64). Постараюсь кратко изложить свою точку зрения на причины появления и закрепления 8-разрядных байтов.

  1. Разрядность разных машин, создаваемых для научных расчётов, т.е. для операций с плавающей запятой, определялась до начала разработки машины, исходя из требуемой точности и диапазона представления чисел. Поэтому до конца 1960-х с разрядностью наблюдается полный хаос. Скажем, у нас "Стрела" была 51-разрядной, машины серии "Минск" -- 37-разрядными, БЭСМ-6 и ряд её предков -- 48-разрядными, а вот "уралы" -- 18-разрядными. То же самое было и на Западе. В общем, везде царили полный разброд и шатание, что, очевидно, было неудобно, когда стали задумываться о переносимости ПО по мере развития техники. В то же время, разрядность как таковая не очень важна, важно лишь обеспечить представление нужного диапазона чисел. Соответственно, если достаточно 24 разрядов, то 32 тоже устроят, если последняя величина представляется удобной, исходя из других соображений.

  2. Необходимость в посимвольной обработке информации, а не только в расчётах. Скажем, хотя БЭСМ-6 и уделывала первые модели ЕС ЭВМ по производительности на математических расчётах, в обработке символьной информации она уступала старшим моделям (хотя и обгоняла самые младшие, но только "грубой силой", за счёт намного более высокого быстродействия -- около 1 млн. оп/с против, скажем, примерно 30 тыс. у ЕС-1020). Причина этого как в неэффективной системе команд, так и в адресации памяти только словами (48 бит для БЭСМ-6), что требовало для выделения отдельного символа использования логических и сдвиговых операций. Соответственно, необходима "символьная" адресация памяти, а сам "символ" должен вмещать достаточно информации для представления необходимых знаков. 6 разрядов для этого мало даже для английского языка, 7 разрядов хватает для английского, но мало для двухъязычных систем (скажем, в западноевропейских языках наберётся ещё десятка два различных дополнительных букв, а ведь среди "капиталистов" были ещё и греки, да и про кириллицу наверняка помнили; вот китайцев-корейцев-японцев с их десятками тысяч иероглифов, надо полагать, в расчёт уже не брали). 8-битный символ, исходя из этих соображений, представляется наиболее подходящим.

  3. Популярность обработки двоично-кодированных десятичных данных (BCD), сохраняющаяся на мэйнфреймах IBM до сих пор (z/Architecture). Причин здесь три. Во-первых, если почти всё время занимает человекочитаемый ввод-вывод, а не расчёты, потеря времени на необходимость перевода из десятичной системы в двоичную и обратно (довольно долгие операции!) может не окупиться по сравнению с прямыми вычислениями в BCD (их поддержка "в железе" не так уж и сложна). Во-вторых, чтоб гарантировать правильность усечения/округления результатов вычислений с точки зрения "десятичного" пользователя -- а это критически важно, скажем, в финансовой сфере, где правила учёта вырабатывались веками и, естественно, для десятичной системы -- надо либо выполнять расчёты полностью по правилам десятичной арифметики, либо учитывать и корректировать возможные искажения при использовании двоичной арифметики. В-третьих, полезно иметь возможность обрабатывать десятичные данные переменной длины, хранимые не в регистрах, ограничивающих разрядность данных, а в памяти. С точки зрения обработки BCD адресуемая единица памяти должна иметь размер, кратный 4 битам, -- и тут 8-разрядный байт, удобный для хранения символов, оказывается очень удобен.

Подозреваю, что эти соображения и привели в итоге IBM к появлению 32-разрядной Системы 360 с памятью, организованной из 8-разрядных байтов. Это, естественно, не изменило в одночасье весь "компьютерный ландшафт", но преимущества подобной организации памяти были вполне очевидны, поэтому постепенно и другие фирмы стали реализовывать аналогичный подход -- благо, патентами всё это огорожено не было. Для вещественных чисел, чтобы обеспечить большой диапазон, была принята "шестнадцатеричная" мантисса (данные хранились не по одному биту, а по четыре, и при нормализации производился сдвиг сразу на 4 разряда, что ухудшало точность). О этом в статье говорится, хотя и неочевидным образом для любых читателей, кроме тех, кто знаком с особенностями Системы 360. Добавлю, что в современной z/Architecture сохранены унаследованные от Системы 360 "шестнадцатеричные" вещественные числа (HFP) и добавлены двоичные вещественные, соответствующие современному стандарту IEEE 754 (BFP), а также десятичные вещественные (DFP) -- в дополнение к тоже унаследованным от Системы 360 десятичным целым переменной длины.

Полубайт - смотрите фокус 0xff, тут две 16тиричных цифры, 4 бит каждое.

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

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

Интересно узнать, каким будет естественным выбором при проектировке двоичного компьютера на русском языке?

как ранее упомянули в комментариях, в Минск-22 (надо полагать, оригинально советская разработка) длина слова была 37 разрядов (битов).

Куда интереснее было бы посмотреть на результат естественного выбора при проектировании компьютера в Китае, Японии или другой страны, где письменность основана на иероглифах.

как ранее упомянули в комментариях, в Минск-22 (надо полагать, оригинально советская разработка) длина слова была 37 разрядов (битов).

У всякого рода Минсков (а там почти вся линейка была 37-разрядная) размер байта определить не получится, т.к. там формально нет минимально адресуемой единицы, но кодировка символов была 5-битная, телеграфная. При этом в свои 37 разрядов он вмещал 6 символов :) А так, все 37 разрядов - это для хранения математических операндов, работой с которыми эти машины в основном и были заняты.

В Японии вначале использовалась 7-битная кодировка (с катаканой, без кандзи) https://en.wikipedia.org/wiki/JIS_X_0201

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

Тут всё просто, BCD позволял сильно упростить ввод/вывод. Операция FloatToString весьма дорогая, даже на современных процессорах выполняется сотни тактов, а может пару тыс., а на старых процессорах ещё больше, особенно если процессор не поддерживает аппаратную плавающую запятую. Так что 7 бит не удобно, 9 бит и больше так же не удобно, 8 бит это два 4 бита, две цифры BCD, что удобно и для самых простых калькуляторных процессов и для сложных и мощных.

В общем, степень двойки рулит!!!

9 бит и больше так же не удобно

Что неудобного в 12-битном байте? Три BCD-цифры, всё отлично. Традиционное 36-битное слово делилось бы ровно на три байта. Ещё и все алфавиты бы помещались в один символ, без возни с национальными кодировками, в 1990-х выматывавшей все нервы сисадминам.

Да много в нём неудобств.

Во-первых, 12 байт, это не три BCD-цифры, это одна цифра. Операции сдвига для вытаскивания искомой цифры из байта никто тоже делать тогда бы не стал, это усложняет уже сам процессор.

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

В-третьих, 12-битный процессор с возможностями 8080 в 4500 транзисторов не уложится, это на несколько лет отбросило бы развитие микроЭВМ, повысив требования к элементной базе.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий