Запись совместимого POSIX ядра

Я хотел записать ядро в течение некоторого времени теперь. У меня уже есть достаточное знание C, и я баловался x86 Ассемблером. Вы видите, я хотел записать ядро, которое совместимо POSIX в C так, чтобы *ОТКЛОНИЛИ приложения, может быть потенциально портирован к моей ОС, но я не нашел много ресурсов на стандартных функциях ядра POSIX. Я нашел ресурсы на структуре файловой системы, переменных среды, и больше на странице Open Group's POSIX.

К сожалению, я не нашел ничего объясняющего, какие вызовы и функции ядра совместимое POSIX ядро должно иметь (другими словами, какая внутренняя структура должна, ядро должно выполнить POSIX). Если кто-либо мог бы найти, что информация, скажите мне.

7
задан colithium 15 July 2010 в 21:09
поделиться

2 ответа

POSIX не определяет внутреннюю структуру ядра, интерфейс ядра к пользовательскому пространству, или даже libc, вообще. Действительно, даже Windows имеет POSIX-совместимую подсистему. Просто убедитесь, что POSIX-интерфейсы, определенные по вашей ссылке, работают как-то. Заметьте, однако, что POSIX не требует, чтобы что-то было реализовано специально в ядре - вы можете реализовывать вещи в библиотеке C, используя более простые интерфейсы ядра собственной разработки, где это возможно, если вы предпочитаете.

Так получилось, что во многих ОС, совместимых с POSIX (BSD, Linux и т.д.), многие из этих вызовов довольно тесно связаны с уровнем ядра, но есть и исключения. Например, в Linux вызов write() является прямым вызовом системы, вызывая функцию sys_write() в ядре. Однако в Windows, write() реализована в DLL с поддержкой POSIX, которая транслирует дескриптор файла в NT handle и вызывает NtWriteFile() для его обслуживания, что в свою очередь вызывает соответствующий системный вызов в ntoskrnl.exe. Так что у вас есть большая свобода в том, как делать вещи - что делает вещи сложнее, если вообще что-то делает :)

11
ответ дан 6 December 2019 в 14:00
поделиться

Opengroup.org оставляет решения о системных вызовах ядра на усмотрение каждой имплантации.
write(), например, должна выглядеть и вести себя так, как указано, но то, что она вызывает под собой, не определено. Многие вызовы, такие как write, read, lseek, могут вызывать любые точки входа внутри ядра.

Так что нет, на самом деле ничто не говорит о том, что вы должны иметь определенное имя функции с определенным набором семантики, доступное в ядре. Оно просто должно быть доступно в библиотеке времени выполнения C.

4
ответ дан 6 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: