Здравствуйте, Сергей Губанов, Вы писали:
1) Идем на сайт BlueBottle, далее Download Current, далее AosSysSrc.zip, далее AosKernel.mod, смотрим
PROCEDURE -AtomicAdd*(VAR x: LONGINT; y: LONGINT);
CODE {SYSTEM.i386}
POP EBX
POP EAX
LOCK
ADD DWORD [EAX], EBX
END AtomicAdd;
А вот из AosMemory.mod кусочек.
PROCEDURE LoadGDT(base, size: LONGINT);
CODE {SYSTEM.i386, SYSTEM.Privileged}
SHL size[EBP], 16
MOV EBX, 2
LGDT size[EBP][EBX]
END LoadGDT;
Возникает вопрос, по зачем тут втроенный ассемблер, если все что нужно можно написать на Oberon? Или это ран тайм языка? Очень похоже. Т.е. в основе все как и везде, машинный код и ассемблер, и без него никуда
2) Oberon язык компилируемый (если ошибся извините). Значит в скомпилированном модуле находятся машинные коды х86. Кто мешает мне вписать туда код
MOV BX,<левый адрес>
MOV [BX],<всякий мусор>
Проехались по чужой памяти, более того эта пара интсрукций не является привеллегированной и в общем случае нельзя сказать, она допустима или нет (т.е. на проверки кода перед исполнением особо рассчитывать не приходится). Просматривается широкий простор для создателей вирусов.
3) По поводу операционных систем. ОС — некое ПО предоставляющее сервисы, пользователю или другому ПО не важно, тогда чем простите вам ран-тайм языка отличается от простой ОС. Да ничем.
4) Вот теперь представьте, что ВЫ хотете написать программу, которая работает на голом железе (без всяких там ран-таймов), ничего не выйдет. Окажется что сначала рантайм спортировать надо — вот она ваша ОС, размер немного другой, суть та же. А на С (C++ немного сложнее) как делать нефиг, ПО для контроллеров так и пишут. Железку проинициализировал, стек настроил, вызвал код на С, далее ОС инициализим (если она вообще нужна), и поехали, тут вам и многопоточность, тут вам и мьютексы и состояние ожидания, и активные объекты если надо
5) А вы вообще про ОС реального времени слышали? Возмите код хоть одной из них, посмотрите.
P.S. Специально зарегистрировался чтобы ответить
СГ>Здравствуйте, Cyberax, Вы писали:
C>>RTFM про spinlock'и и мьютексы, а так же про их реализацию в современных
C>>ОС. Еще рекомендую почитать про O(1) планировщики.
СГ>spinlock'и и мьютексы — это объекты операционной системы, а Вы попробуйте обойтись без объектов ОСи — средствами только самого языка программирования. Представьте себе что хотите написать программу которая должна работать на голом железе (точнее — в рантайм системе языка программирования).