Имеется такой вопрос. Читаю на данный момент книгу Таненбаума - "Современные операционные системы".
Появился такой вопрос.
Linux является монолитным ядром.
Т.е. если я хотел бы написать монолитное (не микроядро) Linux-совместимое ядро - тут ответ ясен, можно сделать такое ядро. Под копирку Linux.
Но возможно ли такое, если я хочу сделать вместо монолитного ядра микроядро? Мы тут меняем уже архитектуру ядра, и при этом хотим сохранить совместимость с Linux и возможно Unix.
Я подразумеваю под "Linux-совместимое" - чтобы это микроядро могло, например, запускать прикладные программы, которые предназначены изначально для Linux, и возможно, Unix.
Может быть, но мне бы очень хотелось ещё, чтобы этот ответ был как-то обоснован.
И мне бы ещё хотелось, чтобы дали ещё какие-то ссылки, материалы, чтобы я двигался в правильном направлении. Хочется написать маленькое такое микроядерко, ради практики. Чтобы запускало самые простые консольные программы.
Anonymous, пишешь свое микроядро, в нём реализуешь все системные вызовы которые есть у ядра линукса и получаешь свое ядро на котором будет запускаться "линуксовый исполняемый код" :)
это если просто.
Anonymous, реализуешь системные вызовы, портируешь libc, разбираешь elf-формат исполняемых файлов, запускаешь.
Этого должно быть достаточно, чтобы запускать хотябы какие-то простые программы без зависимостей.
Но это будет работать только с user-mode. Драйвера и прочий kernel-mode у тебя будет априори несовместим с Linux.
PS: Как пример ОС, которая является сертифицированным POSIX - MacOS с её ядром Darwin, которое как раз считается за микроядро.
Хотя, конечно, MacOS и Linux не совместимы.
Хорошо, подскажите, где я могу посмотреть информацию по всем системным вызовам?
libc
Это, например, может быть GLibc? Я хочу написать микроядро на ЯП Rust. Можете дать пожалуйста информацию, которую я бы мог почитать и портировать libc.
elf-формат исполняемых файлов
Изучу, есть ли какие нибудь книги?
Этого должно быть достаточно, чтобы запускать хотябы какие-то простые программы без зависимостей.
А что именно подразумевается под "зависимостями"?
Драйвера и прочий kernel-mode у тебя будет априори несовместим с Linux.
Этого я ожидал, поскольку мы меняем архитектуру ядра. Мне хотя бы совместимость с user-mode.
Я хочу написать микроядро на ЯП Rust. Можете дать пожалуйста информацию, которую я бы мог почитать и портировать libc.
Тогда советую посмотреть на redox: https://www.redox-os.org/
Там же есть и реализация libc на rust (хоть и экспериментальная).
А ещё сказано, что redox "source compatible" с Linux