LINUX.ORG.RU

Системные вызовы

 ,


0

1

Умные люди, можете рассказать, как ОС, в данном случае linux, обрабатывает скомпилированный файл? Готовый файлик от компилятора это входные данные какой-то системной программы внутри ОС? Как, например, обрабатываются системные вызовы, в программе ведь, как я понял, только заголовки этих функций?

Ответ на: комментарий от ilovewindows

Без сарказма было сказано))

Скомпилированный файл это сразу командыи процессора

А как тогда контролируется использование памяти? В таком случае программа может писать куда угодно, занимать любые области.

bubvalet ()
Ответ на: комментарий от bubvalet

Если про наследников 486, то описывается область памяти, начало, конец, читать-писать-выполнять, адрес загружается в специальный регистр и может в этих ограничениях делать что хошь. Если обратился по недопустимому адресу или пытаешься выполнить данные процессор уходит в обработку исключения. Но так как таких самостоятельных программ мало на это забили и поделили на два куска, ядро и пространство пользователя. В вообщем в пространстве пользователя можешь чудить, модифицировать код и лазить по чужим данным.

ilovewindows ★★★★★ ()
Ответ на: комментарий от luke

4 кольца сразу были с 286, только ос до сих пор(?) два используют, ну винда по крайней мере. 286 убог как аппарат, смысла от защищенного режима нет, на 386 уже прилично работал, например, автокад и имело смысл играться с защищенном режимом, до винды был dos shell, который позволял загрузить несколько программ и переключатся между ними. Короче, пока не появилось железо под пользовательские программы, даже не под ОС, она крохи занимает, ну занимала, смысла переходить на кольца не было.

ilovewindows ★★★★★ ()
Последнее исправление: ilovewindows (всего исправлений: 1)

Умные люди, можете рассказать, как ОС, в данном случае linux, обрабатывает скомпилированный файл? Готовый файлик от компилятора это входные данные какой-то системной программы внутри ОС?

В общем схема загрузки выглядит как-то так:

https://wiki.osdev.org/ELF#Loading_ELF_Binaries

В linux загрузку выполняет непосредственно ядро. Для загрузки динамических библиотек и обработки релокейшенов может использоваться юзерспейсный ELF-интерпретатор, который обычно называется ld.so или ld-linux.so и входит в состав libc, но со статически слинкованным приложением ядро и само справится.

Как, например, обрабатываются системные вызовы

Системные вызовы, как это ни странно, тоже выполняются ядром. Способ вызова определяется ISA и ABI платформы, это может быть прерывание или специальная инструкция, в результате CPU перестает выполнять код программы и передает управление обработчику в ядре.

в программе ведь, как я понял, только заголовки этих функций?

Заголовки вообще к системным вызовам не относятся. В libc есть функции-обертки над настоящими системными вызовами, упрощающие их использование по сравнению с syscall(2). Сама syscall(2) тоже является оберткой, позволяющей правильно заполнить регистры и инициировать переключение контекста подходящим для конкретной плафтормы способом.

annulen ★★★★★ ()
Ответ на: комментарий от annulen

Ахтунг, профессианалы в треде!

Я, конечно, не профессионал, но не совсем понял к чему тут сарказм.

В linux загрузку выполняет непосредственно ядро.

И там эта сущность называется по-другому? Я вижу такую же терминлогию: https://github.com/torvalds/linux/blob/7cf726a59435301046250c42131554d9ccc566b8/fs/binfmt_elf.c#L238

EXL ★★★★★ ()
Ответ на: комментарий от ilovewindows

286 убог как аппарат

4.2, полуось на нём летала (если памяти два метра).

до винды был dos shell

До винды был XENIX, это если из мелкомягкого. Работал только на IBM PC AT.

смысла переходить на кольца не было

Я так понимаю это делалось для гипервизора с виртуалками, идея тянется ещё от MULTICS.

luke ★★★★★ ()
Ответ на: комментарий от ilovewindows

Я не знаток полуоси. Под 286 как быстрый 8086 много чего делали вплоть до начала 90-х, та же винда была. Я на своём PS/2 30-286 Windows 3.0 запустил и ничего, работает, можно тексты писать, можно картотеку заполнять, можно даже играть в Реверси!

Плюс, возможность в параллель и с защитой памяти запустить текстовый редактор и компилятор бесценна. Особенно на двух мониторах, что комбинация двух адаптеров MDA+CGA/EGA/VGA позволяла.

luke ★★★★★ ()