Сегодня у многих, существует большой провал в понимании того, что такое оболочка и с чем ее едят. В этой статье попробуем разобраться разницу между такими понятиями как ядро и оболочка. Так как стал замечать, что есть люди для которых разница при взаимодействии не очевидна.
Для начала представим себе этакий трехслойный торт, в котором нижний слой — это ядро, средний слой — это ваша оболочка с которой вы взаимодействуете, а верхний — это ваш прикладной уровень. Ядро — это все, что связано с управлением оборудования. Когда мы говорим об обработке аппаратного обеспечения, то мы говорим о том, что необходимо выделить память, обработать ввод/вывод, например на диск или экран. Другими словами ядро управляет всем этим, а мы уже видим результат. Если для чего-то необходимо процессорное время, ядро обязательно запланирует это. Вся защита безопасности так же происходит внутри ядра. Таким образом, когда вы делает системный запрос, то ядро это, то что отвечает на него. Например. когда вы отправляете файл по сети, или хотите прочитать данные с диска — это все передается, на самом деле, через системные запросы. Это подобно телефонному звонку. Например, если вы хотите отведать суши, вы просто берете телефон звонить в службу доставки, и просто ждете. Вам не надо ничего готовить, повара приготовят сами, а курьер — привезет результат. Так вот звонок, в этом случае, и есть тот самый запрос.
Оболочка — это интерфейс между пользователем и системой, а ядро — это интерфейс между системными вызовами и фактическим оборудованием. В случае с заказом суши, можно разделить, примерно, так: Оболочка — телефон, ядро — телефонный оператор.
Так же, вы могли слышать много раз о таком понятии, как «пространство». В частности, о пространстве ядра и о пользовательском пространстве. Это понятие просто группирует действия, по тому, где они «живут». Например, VLC или офисный пакет — это приложения, которые находятся в «пользовательском пространстве». И вы, как пользователь, взаимодействуете с ними. Но вы не можете делать что-либо в пространстве ядра. Например, диспетчер памяти находится в пространстве ядра и выделяет память для VLC или другого приложения. Вы можете запустить приложение, которое будет взаимодействовать с диспетчером., но напрямую вы этого сделать не можете.
Если обратиться к аналогиям, то это как в кафе. Вы можете заказать еду здесь, человек за стойкой (интерфейс системного запроса) примет заказ и передаст его на кухню (ядро) и оттуда появится ваша еда. Вы не взаимодействуете напрямую не с плитой, не с ингредиентами. Но когда вы заказываете гамбургер, то в итоге вы получаете гамбургер.
В Linux мы можем посмотреть сколько времени команда проводит в каждом пространстве. Для этого воспользуемся командой time. Возьмем к примеру команду ls.
$ time ls C scripts real 0m0.003s user 0m0.001s sys 0m0.002s
В выводе вы можете увидеть следующие значения:
- real — это реальное время, затраченное на выполнение команды.
- user — время проведенное в пользовательском пространстве.
- sys — время проведенное в пространстве ядра.
Все довольно таки наглядно. И можно проследить, где и сколько времени ваша команда провела. Для этого я использовал эмулятор терминала (приложение, которое живет в пользовательском пространстве) , оболочку ( в моем случае bash), чтобы сделать что-то (создание системного запроса). Ядро выделило память, обработало ввод-вывод для выполнения этой команды и появился результат выполнения. Мы не взаимодействовали с интерфейсом ввода-вывода, диспетчером памяти или диспетчером процессов, но мы получили результат, именно то, что хотели.
Надеюсь, немного получилось разобраться в том, что такое ядро, оболочка и пространство. Если нет, попробуйте перечитать статью еще раз 🙂 (Шутка). Лучше задавайте вопросы в комментариях, будем разбираться вместе. Поскольку эта тема не совсем очевидна для всех.
Was this helpful?
1 / 0