программа запускает допустим printf или fork, как это передается ядру, и как оно обрабатывать начинает это? Если уж чисто железу, то ясно, но как ядро с этим работает
app->libc->syscall->kernel->...
Ну ок, Как libc передает это в syscall, который передает в ядро это
syscall(SC_WRITE, arg1, arg2, arg3, ...)
литералли возьми сорцы любой либц и посмотри, там вызов ядреных сисколлов
ну а как syscall работает, я же прошу не описать аргументы, а именно то как это устроено
как твое ядро реализует сисколы? или ты именно спрашиваешь как их реализовать в ядре?
есть машинная команда у процессора, называется SYSCALL
Ну можно сказать и как реализовать, и как реализовано это например в linux, bsd
mov rbx, arg1 mov rdx, arg2 mov rsi, arg3 mov rdi, arg4... mov rax, SC_WRITE int $0x80 например
или mov rbx, arg1 mov rdx, arg2 mov rsi, arg3 mov rdi, arg4... mov rax, SC_WRITE syscall например
а где соглашения о вызвовах с теневым хранилищем или редзонай как у вас на линуксе или макос
для этого у сисколов имеется соглашение по регистрам, просто найди в интернете таблицы линуксовых сисколов там всё будет расписано
это соглашение для системных вызовов, которые переключают с юзермода на ядро, у них соглашение отличное от обычных вызовов функций
Обсуждают сегодня