Подтвердить что ты не робот

В чем разница между Shell, Kernel и API

Я хочу понять, как это относится к операционной системе, а также к тем вещам, которые не являются операционными системами. Я не понимаю разницы между тремя и их сущностью. API - это функции, которые мы можем назвать, но что такое Shell? Если у нас есть API, чем то, что именно является ядром операционной системы? Я понимаю, что операционная система имеет Core, который не собирается меняться, и это ядро ​​выполняет основную работу типичной ОС, в то время как у нас могут быть разные пользовательские интерфейсы, такие как GUI или командная строка с одним и тем же ядром. Поэтому проблема в том, что я смущен, как все это по-другому. Aaaaaaarhg!

Могут ли такие функции, как printf и fopen в C, называться API-вызовами?

4b9b3361

Ответ 1

  • A shell - это интерпретатор команд, то есть программа, которая либо обрабатывает команду, которую вы вводите в эмуляторе терминала (интерактивный режим), либо сценарии командной оболочки (текстовые файлы, содержащие команды) (пакетная Режим). В ранние Unix-времена это был единственный способ взаимодействия пользователей со своими машинами. В настоящее время графические среды заменяют оболочку для большинства случайных пользователей.

  • Ядро - это низкоуровневая программа, взаимодействующая с аппаратным обеспечением (ЦП, ОЗУ, диски, сеть и т.д.), над которыми работают приложения. Это программа самого низкого уровня, работающая на компьютерах, хотя с виртуализацией вы можете иметь несколько ядер, работающих поверх виртуальных машин, которые сами запускаются поверх другой операционной системы.

  • API - это общий термин, определяющий, какие разработчики интерфейса должны использовать при написании кода с использованием библиотек и языка программирования. Ядра не имеют API, поскольку они не являются библиотеками. У них есть ABI, который, помимо прочего, определяет, как приложения взаимодействуют с ними через системные вызовы. Разработчики приложений Unix используют стандартную библиотеку C (например: libc, glibc) для создания совместимых с ABI двоичных файлов. printf(3) и fopen(3) не являются обертками системных вызовов, а (g)libc стандартными средствами. Системные вызовы низкого уровня, которые они в конечном итоге используют, - это write(2) и open(2) и, возможно, другие, такие как brk, mmap. Число в круглых скобках - это соглашение о том, в каком руководстве команда должна быть найдена.

Первый том страниц руководства Unix содержит команды shell.

Второй содержит системный вызов обертки, например write и open. Они образуют интерфейс к ядру.

Третий содержит стандартную библиотеку (включая стандартные функции API Unix) (исключая системные вызовы), такие как fopen и printf. Это не обертки для конкретных системных вызовов, а просто код с использованием системных вызовов, когда это требуется.

Ответ 2

Оболочка - это способ связи с ОС и ядром по командной строке. Оболочка делает это, также вызывая API. Ядро действительно является ядром ОС и делает управление памятью, планирование задач, обрабатывает файловые системы, обработку ввода-вывода,... Все, что делает ядро, может каким-то образом быть вызвано API, который предоставляет ОС.

printf и fopen обертывают системные вызовы (API), предоставляемые ОС и ядром

Ответ 3

Shell: это как интерфейс командной строки для вашей операционной системы. Команды, такие как ls, ps, kill и многие другие, могут использоваться для запроса завершения конкретной операции в ОС. Это похоже на "cmd" на окна.

Ядро: это основной код любой операционной системы. Любой запрос, который вы передаете по оболочке или через графический интерфейс (например, выделение памяти, открытие файла и т.д.), Наконец, выполняется ядром.

И да, упомянутые вами звонки рассматриваются как вызовы API. Запрос на эти вызовы также обрабатывается Kernel. Перейдите по ссылке ниже, чтобы найти вызовы API в unix. http://www.mkssoftware.com/docs/api_index.asp

Это общая картина в unix os:

Приложения = > (оболочки + библиотечные процедуры) = > системные вызовы = > ядро ​​

Посмотрите, что последний обработчик запроса - это ядро. спасибо!

Ответ 4

Рассмотрим пример. Вы смотрите фильм на оболочке, и на самом деле процесс, выполняемый над аппаратным обеспечением, - это ядро ​​. shell работает примерно так же, как и для пользовательского и программного интерфейса, а Ядро работает как os для программного и аппаратного обеспечения.