All streams
Search
Write a publication
Pull to refresh
69
0.9
Иван Савватеев @SIISII

Микроконтроллеры, цифровая электроника, ОС…

Send message

Хм... так бюджетного или игрового? :)

Плюс, там были короткие команды для доступа к нулевой странице памяти (0000-00FF), которые работали быстрей обычных, длинных. Плюс, типичное применение машинок на процах такого уровня -- выполнение всего одной задачи, а значит, вся память -- её, повторная входимость обычно не нужна и т.д. и т.п. Так что вызовы подпрограмм нередко выполнялись по "гибридной модели", так сказать: сам вызов технически использовал стек для адреса возврата (команды JSR и RTS), а параметры нередко лежали в предопределённых ячейках памяти.

Лично я предпочитаю иметь модель примерно как в ARM: где я сам могу либо традиционным "стековым" образом вызывать подпрограммы, либо сделать, как в Системе 360, либо некое промежуточное решение. В общем, когда есть гибкость. Правда, она востребована, только если пишешь на ассемблере -- а сейчас это редкость.

Не было. Там самый что ни на есть обычный стек, только объём всего 256 байт.

Система инструкции ARM - это старая система (1983)

Но она новее и мэйнфреймов (анонс в 1964 году, продажи -- с 1965), и 8086/88, из коего выросла IA-32 (1977-й, если память не изменяет).

В настоящих современных архитектурах производиться разделение пользовательского стека и стека для хранения обратных вызовов и состояний

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

Резюмируя классическим образом, "если какая-то неприятность может случиться, она случается" (с)

Насчёт бесстекового способа вставлю свои пять копеек.

  1. Исторически в OS/360 каждое динамическое выделение памяти производилось путём обращения к супервизору (грубо говоря, к ядру ОС): ассемблерная программа, желающая получить память, использовала макрокоманду GETMAIN ("main" -- от названия "основная память", main storage, использовавшейся и использующейся поныне для обозначения ОЗУ в IBMовских мэйнфреймах), ну а эта макрокоманда разворачивалась в загрузку параметров (в первом приближении -- требуемого объёма памяти) в регистры процессора и выдачу команды SVC, приводящей к прерыванию по вызову супервизора. Сейчас такой способ кажется диким: прерывание на современных процессорах -- очень долгий процесс по сравнению с простым выполнением команд, но тогда, в середине 1960-х и в 1970-х, особой разницы во времени выполнения не было.

  2. Такая достаточно современная архитектура, как ARM, хотя и имеет стек, позволяет реализовать вызов подпрограмм без его использования: команда BL, вызывающая подпрограмму, сохраняет адрес возврата в регистре LR, а не записывает его в стек, как это делает, скажем, CALL на IA-32 (x86). Соответственно, потенциально можно реализовать ту же схему вызова, что и в IBMовских мэйнфреймах. Правда, в ARM адрес возврата заносится всегда в один и тот же регистр, а в мэйнфреймах можно использовать любой из 16 регистров общего назначения, но это уже технические детали.

Дык и производство самого 6502 продолжается :)

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

Ну и, по большому счёту, наша Рапира -- это, по сути, Паскаль на русском, насколько помню. Её я видел, но не ковырял: первым у меня был Бейсик на Агате, вторым -- встроенный в него же ассемблер 6502, ну а третьим стала СМ-4 и затем СМ-1420 с Фортраном, Паскалем и ассемблером -- ну и пошло-поехало; после этого на агатах я вёл школьный кружок, сам ещё будучи школьником, но серьёзно на них ничего не делал: у меня ж был доступ к настоящей машине :)

У Агата-7 очень гибко с памятью было. Минимальный объём -- 32 килобайта на материнской плате, но и на ней могло быть больше, и в разъёмы расширения ставились платы допОЗУ и псевдоПЗУ. У нас в школе было не меньше 64 Кбайт в сумме, но, кажется, больше -- но сейчас уже и не вспомню точно.

А вот видеорежимы -- да, с Эплом-2 совсем никак не совместимы до появления Агата-9.

6502 изготовлен по технологии n-MOS, и вряд ли "в лоб" её можно перенести на арсенид галлия -- впрочем, со схемотехникой логики на нём я не знаком. Даже на КМОП (CMOS), по которой делаются 99,9% современных цифровых микросхем, совсем "в лоб" не перенесёшь, нужно подпиливать схему.

В то же время, можно посмотреть на сие дело с другой стороны. Типичный 6502 имел тактовую частоту 1 МГц, современные процессоры имеют, грубо говоря, 4 ГГц (и при этом намного сложней внутри). Соответственно, в качестве первого приближения можно считать, что 6502 можно разогнать в 4000 раз, оставаясь на кремнии, но сменив технологию с тогдашнего н-МОП на современный КМОП.

Ну, на СМках под ОС-РВ (RSX-11) Паскаль был.

Но, если я правильно Вас понял, здесь умножение-деление -- не обычные команды процессора, выполняемые в его собственных рамках, а "прибитые сбоку" в виде отдельного, пусть и обязательного устройства. Это мне напоминает ранние PDP-11, где умножения-деления (и многоразрядных сдвигов) как команд не было, но можно было подключить по обычной шине дополнительное "внешнее устройство" EAE -- расширитель арифметики. В него обычными MOVами записывались исходные данные, а потом считывался результат.

Нет, декодер -- вещь относительно небольшая, а для той же Системы 360 и иже с ней попроще будет, чем, скажем, для ARM (CISC -- это далеко не всегда ужас-ужас-ужас в кодировке, как на интеловских процах). Тут управление процессом обработки в целом. В первых RISCах, например, никаких умножений-делений не было -- они сложные, поэтому и были выброшены. (В ARMах, кстати, целочисленное умножение стало появляться лишь в версии ARMv4, и то не во всех вариантах, а деление -- лишь в современных микроконтроллерах, т.е. в архитектуре ARMv7-M).

Эм... наверное, тогда уже не оверлеи, а именно что загрузочные модули. (Оверлеи тоже могли быть, но они входят в состав одного модуля, а не являются отдельными независимыми модулями.)

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

А в ПЛ/1, подозреваю, можно было и просто породить подзадачу: скорей всего, там были подпрограммы-обёртки для основных макрокоманд супервизора.

Динозавров -- нет. А вот времена, когда деревья были маленькими, а компьютеры -- большими...

Насколько знаю, нет.

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

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

RISC упрощает "конвейеризацию", но не является необходимым условием. Скажем, такие типичные CISCи, как IBMовские мэйнфреймы от Системы 360 и до современных z/Architecture (хоть самой IBM, хоть некоторые наши ЕСки) благополучно использовали и используют что конвейер, что суперскалярность. В частности, на нашей последней действительно серийной машине -- ЕС-1130 -- простые команды "регистр-регистр" и "регистр-память" имели эффективное время выполнения 1 такт (160 нс, если правильно помню длительность -- всё ж, 30+ лет прошло), ну а "тяжёлые" команды выполнялись традиционным микропрограммным образом. Формально, кстати, там и простые команды были микропрограммными -- но их микропрограмма содержала всего одну микрокоманду.

Возможно, упадку RISCов поспособствовало и то, что появилась возможность впихнуть конвейер, а затем и суперскалярность на один кристалл и для CISCов, что в 1980-е было невозможно -- а соответственно, RISC лишился преимущества в скорости (по сути, в тактовой частоте), обусловленной однокристальной конструкцией.

Ну а сейчас ARMы идут вперёд за счёт мобильного сегмента -- думается, благодаря меньшему энергопотреблению на тот же объём работы. Плюс, здесь нет груза совместимости со 100500 приложениями под IA-32.

Ну а невыровненный доступ... IBM ввела его в Системе 370 за 10+ лет до появления MIPS (одно из расширений по сравнению с Системой 360). Она, случаем, ничего не нарушила?

Может, и мне язык изобрести? К зиме борода такая, что принимают за гибрид попа и деда мороза :)

Information

Rating
1,770-th
Location
Солнечногорск, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer
Lead