June 13th, 2011

Как процессор умножает целые числа, окончание

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

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

Что делать с левой частью? В принципе, в ней должны быть одни нули, и её можно смело отрезать. Если там не нули, значит, получилось число, которое больше максимального числа, которые мы можем представить в нашем процессоре, с заданной битностью. Так, если у нас 16 бит на число, максимальное число, которое мы можем представить -- 65 535 (если нас интересует работа только с положительными числами). Если же у нас в левой части получились единички, значит, наш результат больше, чем числа, с которыми мы можем работать. Обычно при таких результатах внутри процессора ставится какой-либо статусный флаг, сигнализирующим о переполнении. Задача программиста -- спросить у процессора, "а нормально ли умножилось?" Если не спросить -- то не удивляйтесь, если 35 000 * 2 = 4 464.

Память первых компьютеров

Широко распространённым типом памяти для первых ЭВМ была т.н. память на линиях задержки.

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

Как работает эта память? Громкоговоритель посылает в ртутную среду серию импульсов, щелчков. Допустим, он может посылать щелчки через каждую секунду (в реальности, конечно, на несколько порядков быстрее), а доходит до микрофона эта серия через девять секунд (то же самое, метр ртути звуком будет проходиться менее, чем за тысячную долю секунды). И каждую секунду мы отбиваем тактовый ритм. Так что приложим ухо к "микрофонному" концу трубки и внимательно слушаем каждую секунду: есть щелчок -- единичка, нет щелчка -- нолик. Таким образом, наша трубка может держать аж целых восемь битов, то-есть, один байт.

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

В компьютерах тех давних времён такие трубки держали несколько сотен бит (120 в компьютере UNIVAC, 576 в компьютере EDSAC). Такой же тип памяти был использован в первом советском компьютере МЭСМ. Он мог хранить 31 число, каждое длиною в 16 бит. То-есть, объём его оперативной памяти составлял 496 бит. Сейчас, когда в карман можно спокойно положить шестнадцать гигабайт планку SDRAM, это, конечно, смешно. А тогда это была передовейшая техника. И было-то это всего-то 60 лет назад.

IT-пророчество

В конторе обычно всех пользователей переживает сисадмин. И он, что характерно, знает, когда кто будет уволен, сильно заранее. После директора -- я номер второй, кто узнаёт о таких вещах. У вас только первые сомнения -- "а не последнюю ли неделю я тут работаю"? А у меня уже жёсткие директивы -- в пятницу, ровно в 5 часов вечера, прекратить доступ к разделяемым и личным сетевым ресурсам для пользователя Тяпкина-Ляпкина. Вы думаете, что никто не знает, что вы ищете работу, а я знаю, что половину свободного времени вы проводите на вебсайтах потенциальных работодателей. Вы идёте себе пить кофе -- а навстречу иду я, бородатый змей, подмигиваю -- здравствуй, дорогой юзер! А тебе, между прочим, ПРЕВЕД скоро наступит! Только последнюю фразу я про себя произношу, и себя не выдам -- сисадмин умеет тайну хранить, у нас работа такая.