Как работает система Unix или Linux? [закрыто]

37

Я хотел бы знать, как работает ОС в двух словах :

  • Основные компоненты, на которых он построен
  • Как эти компоненты работают вместе
  • Что делает UNIX UNIX
  • Что отличает его от других ОС, таких как Windows?
Сандер Верслуйс
источник
3
вау, этот вопрос займет так много времени, чтобы ответить всесторонне ... как несколько книг. Существует очень мало ОС (кроме встроенного пространства и заметных исключений для окон), которые не являются Unix.
ксенотеррацид
2
не уверен, плакать или смеяться
зволков
27
Как работает система Unix или Linux? Очень хорошо, спасибо :-).
Гаурав
3
Люблю вопрос. Это тот тип, который заставляет опытных пользователей озвучивать свое собственное понимание и дает нам возможность постичь вселенную unix и linux.
Штейн Осмул
5
Ну, в сущности, у вас есть оболочка, и под ней у вас есть ядро. Это также, как работает Unix.
Том Зыч

Ответы:

74

Система UNIX состоит из нескольких частей или слоев, как я бы хотел их назвать.

Для запуска системы программа, называемая загрузчиком, находится в первом секторе раздела жесткого диска. Он запускается системой и, в свою очередь, находит ядро ​​операционной системы и загружает его.

Расслоение

  1. Ядро Это центральная программа, которая запускается загрузчиком. Он выполняет основное аппаратное взаимодействие для системы (диск, память, видео, звук) и предлагает виртуальную среду, в которой он может запускать программы. Ядро также поставляет все драйверы, которые имеют дело со всеми небольшими различиями между аппаратными устройствами. Во внешнем мире (на более высоких уровнях) каждый класс устройств ведет себя точно одинаково, что, в свою очередь, может быть заложено в программах.

  2. Фоновые подсистемы. Есть только обычные программы, которые просто не мешают вам. Они обрабатывают такие вещи, как удаленный вход в систему, предоставляют центральную шину сообщений и выполняют действия, основанные на аппаратных / сетевых событиях. Например, обнаружение Bluetooth, управление Wi-Fi и т. Д. Любые сетевые службы (файловый сервер, сервер печати, веб-сервер) также живут на этом уровне. В системах UNIX это все обычные программы.

  3. Инструменты командной строки. Это все небольшие программы, которые можно запускать для редактирования текста, загрузки файлов или администрирования системы. На этом этапе система UNIX полностью пригодна для системных администраторов. В Windows этот слой на самом деле больше не существует.

  4. Графический интерфейс пользователя. Это также просто программы, единственная разница в том, что они рисуют окна на экране, а не пишут текст. Это облегчает использование системы для обычных пользователей.

Любая услуга или событие будет идти снизу вверх до самого верха.

Библиотеки - общая платформа

Программы делают много общих вещей, таких как отображение окна, рисование чего-либо на экране или загрузка файла. Эти вещи одинаковы для нескольких программ, поэтому этот код помещается в отдельные «библиотечные» файлы (.so файлы - это общий объект). Библиотека может быть общей для всех программ.

Для каждой мыслимой вещи есть библиотека. Существует один для чтения / записи файлов PNG. Есть один для файлов JPEG, для чтения XML, для шифрования, для воспроизведения видео и так далее.

В Linux распространенными библиотеками для разработчиков приложений являются Qt и Gtk. Эти библиотеки используют низкоуровневые библиотеки для своих конкретных нужд, в то же время предоставляя своим функциональным возможностям удобный и краткий способ для разработчиков приложений создавать приложения еще быстрее.

Библиотеки предоставляют платформу приложений, на которой программисты могут создавать приложения для конечных пользователей для операционной системы. Чем больше высококачественных библиотек предоставляет система, тем меньше кода программист должен написать для создания красивой программы.

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

Межпроцессного взаимодействия

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

От библиотек к операционным системам

Имея библиотеки, IPC и ядро, программисты могут создавать всевозможные приложения для системных служб, администрирования пользователей, настройки, администрирования, работы в офисе, развлечений и т. Д. Это образует полный набор, который начинающие пользователи распознают как «операционную систему». ».

В системах UNIX / Linux все сервисы являются просто программами. Все инструменты системного администратора являются просто программами. Все они делают свою работу, и они могут быть вместе. Я суммировал много основных программ на http://codingdomain.com/linux/sysadmin/


Отличительные части с Windows

UNIX - это в основном система программ, файлов и ограниченных прав доступа. Избегается много сложностей, что делает ее мощной системой, хотя, похоже, ее легко выполнить.

Подробно, это принципы, которые можно найти в системах UNIX / Linux:

  • Существуют единые способы доступа к информации. («Все это просто файл»). Вы можете открыть файл, сетевой сокет, канал IPC, параметры ядра и блочное устройство в виде файла. Отсюда и появление виртуальных файловых систем в / dev, / sys и / proc. Единственный API, который вам когда-либо нужен, это open, readи close.

  • Базовая система прозрачна. Каждая программа работает по одним и тем же правилам. В отличие от Windows, нет никакой искусственной разницы между «консольной программой», «программой gui» или «фоновой службой». Все они просто программы, которые делают разные вещи. Их также можно наблюдать, анализировать и отлаживать одинаково.

  • Настройки читабельны, доступны для редактирования и могут быть снабжены комментариями. Как правило, они имеют формат INI-стиля, но могут использовать пользовательский формат для нужд этого приложения. Поскольку это просто файлы, их можно скопировать в другие системы, заархивировать или создать резервную копию с помощью стандартных инструментов.

  • Нет больших приложений "сделай все за один раз". Мантра - «делай одно, делай это хорошо». Инструменты командной строки могут быть связаны друг с другом и быть мощными. Отдельные сервисы (например, SMTP, IMAP и POP и вход в систему) являются отдельными подпрограммами, избегая сложных переплетенных кодов и проблем безопасности. Сложные окружения рабочего стола делегируют тяжелую работу отдельным программам.

  • fork(), Новые программы запускаются существующей программой, клонирующей себя. Клон настраивает все (например, файловые дескрипторы) и при необходимости заменяет себя новым программным кодом. Это позволяет легко применять те же настройки безопасности и ограничения к новым программам, совместно использовать память или настраивать механизм IPC. Стоимость запуска процесса также очень низкая.

  • Файловая система представляет собой одно дерево, в котором могут быть смонтированы другие разделы диска и сетевые ресурсы. Опять же, универсальный способ доступа к данным. Общие системные расположения (например, /usrмогут быть легко установлены как общий сетевой ресурс).

  • Система построена для низких пользовательских привилегий. После входа в систему каждый пользователь (кроме root) ограничен собственными ресурсами, запускает только приложения и файлы. Сетевые сервисы уменьшают свои привилегии как можно скорее. Существует один простой способ получить больше привилегий или попросить кого-нибудь выполнить привилегированную работу от его имени. Каждый второй звонок ограничен ограничениями и ограничениями программы.

  • Каждая программа хранит настройки в скрытом файле / папке домашнего каталога пользователя. Ни одна программа никогда не пытается написать файл глобальных настроек.

  • Содействие в отношении открыто описанных механизмов коммуникации, а не секретных механизмов или конкретных механизмов 1-к-1. Другим вендорам и разработчикам программного обеспечения рекомендуется следовать той же спецификации, чтобы все можно было легко подключать, заменять и при этом не связывать.

vdboor
источник
1
Прекрасный ответ, я знаю, что это действительно трудно объяснить вкратце! Благодарность! ;-)
Сандер Верслуйс
1
да, сэр, молодец!
Стефан,
14
Где находится кнопка +10 ???
EricSchaefer
1
Спасибо всем за комментарии и голоса! Приятно знать, что ответ ценится так хорошо!
vdboor
1
@faif, это вполне стандартно (даже в операционных системах Microsoft есть), и я полагаю, что красота в глазах смотрящего. Дело в том, что все это файлы, даже специальные.
Псуси
11

UNIX - это мощная ОС, основанная на звуковом дизайне, который успешно работает уже более 40 лет (это почти вечность в информатике). Центральная технология основана на языке C и множестве небольших программ: команды UNIX. Основная философия была обобщена Макилрой:

Напишите программы, которые делают одно и делают это хорошо. Напишите программы для совместной работы. Написание программ для обработки текстовых потоков, потому что это универсальный интерфейс.

Больше о философии UNIX можно найти в ESRaymond "Искусство программирования UNIX".

Дидье Троссет
источник
2
+1 за «Искусство программирования UNIX». Однако, хотя API определен вокруг C, нет технической проблемы с реализацией всей системы на Haskell (с битами сборки;)) или чем-то в этом роде.
Мацей Печотка
3
Биты сборки могут быть написаны и на Хаскеле. Взгляните на Потенциал
Фил Миллер
10

Здесь есть несколько отличных ответов. Тем не менее, одна вещь, которую я думаю, была оставлена ​​без внимания, как * nix отличается от других операционных систем, в частности, Microsoft Windows.

Фундаментальная концепция, описанная выше «делай одно, делай хорошо», настолько важна для операционных систем * nix, что иногда ее можно не заметить. Тем не менее, именно эта философия дизайна делает Linux такой гибкой и мощной.

Например, графический пользовательский интерфейс (GUI) для MS Windows переплетен в ОС. Практически невозможно установить операционную систему MS без графического интерфейса. В Linux вы можете легко запустить сервер или встроенную систему, в которой вообще нет графического компонента. Это может быть полностью управляемая командная строка и все еще быть полнофункциональным сервером.

Модульная конструкция Linux также позволяет системному администратору отключать службу, обновлять ее и восстанавливать без перезагрузки операционной системы. Фактически, единственный раз, когда вы должны перезагрузить операционную систему Linux, - это когда само ядро ​​модифицируется или обновляется.

Например, вы можете установить новый менеджер окон (gnome, kde, что угодно) в Linux, и пользователь, вошедший в систему в данный момент, может никогда не узнать об этом.

В Windows часто самые простые изменения в системе требуют перезагрузки, хотя иногда это скорее проблема безопасности, чем фактическое техническое требование. Я бы сказал, что это один из основных недостатков операционных систем MS. В Linux вы можете обновить многие из модулей драйверов и практически не повлиять на пользователей. В Windows вам может потребоваться перезагрузить всю коробку, если вы просто установите новое приложение.

Такая модульная конструкция также дает Linux необычайную гибкость. Каждая система Linux может быть адаптирована для конкретной задачи, которую вам нужно выполнить, с минимальными затратами ресурсов. В Windows вы не можете отключить интерфейс GUI для запуска простого HTTP-сервера. Windows предполагает использование памяти, которая создает барьер, ниже которого ваше оборудование не может пройти. Это основная причина, по которой Linux стал популярной ОС для многих мобильных и встраиваемых приложений.

Я мог бы продолжать и продолжать, но я надеюсь, что эти примеры помогут объяснить, почему Linux стал настолько популярным, и чем он действительно отличается от этой другой ОС.

Старожил
источник
2

Я бы порекомендовал прочитать Расширенное программирование в среде Unix 2e чтобы узнать больше об API Single Unix Standard (SUS) и POSIX, что даст вам представление о том, что делает Unix Unix, как работают компоненты и работают вместе.

Тем не менее, это очень тяжелая книга и больше справочное руководство. Если у вас есть проблемы с бессонницей, просто возьмите ее с собой. Кроме того, если вы программист Unix C, это должно быть.

xenoterracide
источник
2

В духе предыдущих двух рекомендаций книги я бы также порекомендовал

Интерфейс программирования LINUX М. Керриск

который, хотя и нацелен на тему системного программирования под UNIX / Linux, раскрывает тонны подробной информации о том, как работают системы Linux и в целом UNIX с точки зрения программиста / пользователя. Он подробно описывает большинство пунктов, упомянутых в ответе vdboor, и раскрывает достаточно деталей понятным и читаемым образом, чтобы получить представление / представление об основных концепциях UNIX и их основах.

darbehdar
источник