Найти в Дзене

Погружение в Linux #1

Для описания устройства линукса удобно использовать абстракции, т.е. вместо того, чтобы держать в голове кучу инфы о той или иной части ОС (операционной системы), мы просто будем учитывать лишь то, что важно именно в данный момент (например, учитываем только какие данные входят в тот или иной блок и какие выходят. Какие преобразования над данными происходят внутри блока нас не интересуют). Пример из жизни – достань свой смартфон. Ты наверняка точно не знаешь, как он внутри функционирует, но это не мешает тебе его использовать. В контексте нашего повествования в качестве абстракции будем использовать термины компонент и уровень/слой (это необходимо для структуры, например, на одном уровне могут находиться несколько компонентов).


А теперь перейдем к устройству нашего «Пингвина». Он состоит из 3 уровней:
3) Пользовательское пространство
2) Ядро
1) аппаратные средства


Аппаратные средства – базис нашей «пирамиды Маслоу». На данном уровне находятся такие компоненты твоего компа, как ОЗУ, ПЗУ, ЦП, сетевой адаптер и т.д., в общем - «железо».


Над всем этим выше стоит
Ядро. По факту оно является просто куском кода, который командует процессором и всем остальным, но командует оно не по своей воле, а по воле программ, запущенных пользователем. Если быть совсем точным, то оно обеспечивает выполнение этих программ, т.е. выделяет память под них, заставляет процессор выполнять те или иные команды и т.п. в целом, твой личный «кабанчик».


И верхушкой нашего пирога является
пользовательское пространство. Здесь располагаются все процессы, которые запущены пользователем. Уточним: процесс - это запущенная программа. Например, прога, в которой ты читаешь данную писанину, является процессом. Если откроешь диспетчер задач в винде (раз ты читаешь книгу по линуксу, значит с бОльшей долей вероятности ты сейчас сидишь на «окнах»), то увидишь все процессы, включая и твою «читалку», в которой открыт этот текст.


Если поразмыслить, то в твоем компе ты главный чел на районе, так что в твоих силах подчинить все процессы, происходящие в системе.
Ладно, на самом деле не всё так радужно. Процессы могут запускаться не только тобой, но и самим ядром, и при этом у таких процессов полномочий будет гораздо больше. Код, запущенный
в режиме ядра, может неограниченно обращаться к процессору и памяти. «Чем больше силы, тем больше и ответственность», поэтому, если код, запущенный в режиме ядра, окажется косячным, то он может нахрен сломать твою систему. Код, запущенный в режиме пользователя, будет иметь доступ лишь к определенному объему памяти и определенным процессорным командам. Кароч, вместо полного пирога тебе дадут лишь его кусок. Тебе, наверное, покажется, что тут подлянка, тип какого хрена пользователя ограничивают, но тут кроется гениальность. Если код в режиме пользователя завершиться с ошибкой, то ничего страшного не произойдет, система останется стабильной. Например, если у тебя вылетел майнкрафт, то это не поломает твою систему, т.к. последствия ошибки будут ограничены лишь тем участком, который тебе выделен, и ядро сможет подчистить его.