Exec i s ядро из AmigaOS. Это 13 KB многозадачность микроядро, которое включало упреждающую многозадачность всего в 256 КБ памяти (как поставлялось с первыми Amiga 1000s ). Exec предоставляет функции для многозадачности, управления памятью и обработки прерываний и динамических разделяемых библиотек.
Он действует как планировщик для задач, выполняемых в системе, обеспечивая упреждающую многозадачность с приоритетным циклическим планированием. Exec также обеспечивает доступ к другим библиотекам и высокоуровневому межпроцессному взаимодействию через передачу сообщений. Другие сопоставимые микроядра имели проблемы с производительностью из-за необходимости копировать сообщения между адресными пространствами. Поскольку у Amiga только одно адресное пространство, передача сообщений Exec довольно эффективна. Единственный фиксированный адрес памяти в программном обеспечении Amiga (адрес 4) - это указатель на exec.library
, который затем можно использовать для доступа к другим библиотекам. Exec был разработан и реализован Карлом Сассенратом.
В отличие от более новых современных операционных систем, ядро exec не запускается «с привилегиями». Современные операционные системы для 68000, такие как Atari TOS и SunOS, использовали инструкции trap для вызова функций ядра. Это заставило функции ядра работать в режиме супервизора 68000, а пользовательское программное обеспечение - в непривилегированном пользовательском режиме. Напротив, вызовы функций exec выполняются с таблицей переходов библиотеки, а код ядра обычно выполняется в пользовательском режиме. Когда режим супервизора необходим ядру или программам пользователя, используются библиотечные функции Supervisor ()
или SuperState ()
.
Одним из ограничений ядра Exec было то, что несовместимая программа могла отключать многозадачность на долгое время или на неопределенный срок, вызывая вызовы Exec Forbid ()
или Disable ()
, без последующего вызова соответствующих Permit ()
или Enable ()
, в результате чего среда будет работать как одна задача. Многозадачность также может быть отключена программами, которые из-за ошибки программного обеспечения или намерения изменяют структуры данных Exec или код, хранящийся в оперативной памяти (RAM), возможно, из-за отсутствия блока управления памятью (MMU) поддержка.
Даже с такими ограничениями Exec удовлетворяет определению алгоритма упреждающего планирования, используя подпрограмму упреждающего планирования и основывая интервалы прерывания на часах.
Ядро Linux разработчик Линус Торвальдс однажды описал проект Amiga как кооперативный, хотя он использует политику упреждающего планирования. Причина этого, как он утверждал, заключалась в том, что отсутствие защиты [памяти] между задачами означало, что задача могла помешать системе работать с упреждением. Поскольку задачи должны были бы выбрать не останавливать упреждающий механизм, это привело бы к своего рода перевернутой кооперативной системе. Такое сочетание защиты и политики планировщика нестандартно.
ExecSG (второе поколение) - это ядро, используемое AmigaOS 4. Это ядро было лицензировано Hyperion Entertainment у Thomas Frieden и Hans-Jörg Frieden. Он предоставляет те же функции и структуры, что и ядро Commodore Amiga Exec, но работает только на процессорах PowerPC. Конечное происхождение ExecSG не указано.