Что такое операция системы linux

Операционные системы семейства Linux

Что такое операционная система Linux

Linux — операционная система, в основе которой лежат Unix-подобные системы.

Исходные коды Linux доступны для изменений и просмотров любым пользователем. На Linux распространяется авторское право Free Software Foundation, суть которого состоит в том, что все взятое бесплатно и измененное, должно бесплатно распространяться. Пользователи имеют авторские права на отдельные компоненты, но они распространяются бесплатно.

Первую версию системы ее создатель Линус Торвальдс представил в 1991 году. Он не стал разрабатывать программное обеспечение с нуля, а использовал программы проекта GNU, находящиеся в общем доступе. Символом Linux является пингвин Такс с желтыми лапами и клювом.

Осторожно! Если преподаватель обнаружит плагиат в работе, не избежать крупных проблем (вплоть до отчисления). Если нет возможности написать самому, закажите тут.

Где используется

В первую очередь при знакомстве с операционной системой Linux важно понять, что Linux сам по себе — это ядро. То есть основа, на которую уже будут в дальнейшем нанизываться дистрибутивы для работы с программным обеспечением. Самыми популярными в данном случае являются Ubuntu, Red Hat и Debian. В общей сложности сейчас насчитывается более 9 тысяч дистрибутивов.

Ядро Linux широко используется. В том числе для Androind и для большинства «умных» устройств на рынке, например, телевизоров и холодильников. Подавляющее количество хостингов и серверов также работают на ядре Linux. Объясняется это не только бесплатным распространением, но и тем, что Linux проста в настройке, стабильна и при отсутствии графической оболочки значительно снижает нагрузки на сервер. Встретить это ядро можно и на устройствах для чтения и там, где задачи требуют больших вычислительных кластеров и запуск баз данных.

В качестве домашней операционной системы Linux выбирают реже. Около 5% пользователей предпочитают ее конкурентам — Windows и MacOS.

Преимущества и недостатки перед другими ОС

К преимуществам Linux в сравнении с другими операционными системами можно отнести следующее:

  • Особенность Linux — это практически полное отсутствие вирусов. К Linux проявляется очень мало интереса со стороны хакеров, если это касается домашних ПК, поэтому пользователям не нужно волноваться о том, как защитить свой комьютер. Существует разве что несколько рутикулов для серверов. Среди антивирусного ПО нет базы исключительно под Linux. В основном роль подобных программ заключается в определении вредоносного кода, принесенного с Windows на физических носителях.
  • Подавляющее количество компонентов Linux — бесплатные, что оценят пользователи с несколькими домашними ПК. К тому же дистрибутивы разнообразны, и их можно менять. Причем не только наполнение, но и визуальную составляющую.
  • В системе есть встроенный репозиторий, из которого можно установить необходимые программы без использования сторонних ресурсов.
  • Большинство необходимых драйверов для оборудования уже вшито в ядро Linux. Благодаря этому устройство начнет работу сразу после подключения.
  • Система по умолчанию шифрует диски, защищая информацию и файлы.
  • Благодаря тому, что Linux и его дистрибутивы созданы пользователями, новые концепции мира IT-технологий очень быстро воплощаются в операционной системе.

Недостатками Linux можно назвать такие пункты как:

  • У Linux могут быть проблемы с совместимостью с другими устройствами, например, принтерами, сканерами и роутерами, так как большинство из них созданы для работы с Windows. Это проблема решается сменой и настройкой дистрибутива, но это может вызвать сложности у неопытных пользователей.
  • Дистрибутивов на рынке очень много, что ставит пользователя перед выбором.
  • На Linux отсутствуют привычные программы вроде Photoshop, Microsoft Word и Excel.
  • Большинство пакетов в Linux связаны, из-за чего при установке программ один пакет тянет за собой обновление другого пакета, что не только замедляет установку, но и вынуждает иметь подключение к интернету в тот момент.

Основные характеристики ОС Linux

Несмотря на свою непопулярность среди рядовых пользователей, ОС Linux доказала свою жизнеспособность. О ней написано множество статей, обзоров и учебных пособий. В списке возможностей Limux есть как присущие другим реализация семейства UNIX, так и абсолютно уникальные.

  1. Многозадачность. У ядра Linux есть функция разделения времени центрального процессора. Суть функции заключается в том, что ядро по очереди выделяет отрезок времени для выполнения каждой задачи. Таким образом, все процессы происходят независимо и не мешают друг другу.
  2. Многопользовательский доступ. OC Linux поддерживает одновременную работу нескольких пользователей, обеспечивая им все системные ресурсы с помощью различных удаленных терминалов. Точно так же, как и в других ОС, пользователей можно делить на группы и ограничивать их возможности чтения, записи и запуска на исполнение.
  3. Страничная организация памяти. Организация системной памяти Linux выполнена в виде страниц объемом 4K. В случае, если оперативная память закончится, система начнет поиск неиспользуемых страниц для того, чтобы переместить их на жесткий диск, откуда впоследствии их можно будет восстановить.
  4. Загрузка выполняемых модулей «по требованию». Ядро Linux работает так, что в оперативной памяти находится только нужная часть кода программа, которая используется, а остальные части остаются на диске.
  5. Динамическое кэширование диска. Память, приготовленная для кэша, уменьшается, если компьютеру или пользователю необходимо больше места.
  6. Запуск программ для других ОС. Для того, чтобы запуск программ, разработанных для других ОС, был возможен на ПК с Linux, там установлены эмуляторы DOS, Windows 3.1 и Windows 95.
  7. Сетевые возможности. Интеграция Linux возможна в любую локальную сеть. Поддерживаются все службы Unix, в том числе Networked File System (NFS), удаленный доступ (telnet, rlogin), работа в TCP/IP сетях, NFS, и dial-up-доступ по протоколам SLIP и PPP.
  8. Соответствие стандарту POSIX 1003.1. Частичная поддержка возможностей System V и BSD.
  9. Поддержка ряда популярных файловых систем (MINIX, Xenix, System V). Также у Linux есть своя файловая система объемом до 4 Терабайт и с именами файлов до 255 знаков.
  10. Прозрачный доступ к разделам DOS (или OS/2 FAT): раздел DOS выглядит как часть файловой системы Linux; поддержка VFAT.
  11. Специальная файловая система UMSDOS, которая позволяет устанавливать Linux в файловую систему DOS.
Читайте также:  Acer ex2519 драйвера для windows 10

Ключевые концепции, как выглядит

Пользовательская концепция — как было указано выше в списке преимуществ и характеристик Linux, эта система была разработана как многопользовательская. Linux позволяет работать одновременно любому количеству пользователей на одной машине.

Концепция «всё — файл» — концепция, позволяющая пользователю применять один интерфейс для работы с любым системным ресурсом.

Особые файлы и USB-устройства обрабатываются как файлы. Эта концепция облегчает разработку программ для ОС, потому что есть только исследованный набор операций для абстракции — «файла».

Если говорить об интерфейсах, то в этом случае есть три основные концепции:

Клоны Microsoft и MacOS

Интерфейсы, напоминающие по своей логике другие операционные системы.

Интуитивно понятный интерфейс UNIX-систем

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

Кроссплатформенные рабочие столы

Имеют поддержку сенсорного ввода и оптимизацией для мобильных устройств.

Перечень операционных систем на базе ядра Linux

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

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

В целом, все дистрибутивы делятся на две категории по тому, как они организуют управление программным обеспечением:

  1. DEB используется в Debian и дистрибутивах, основанных на нем.
  2. RPM используется в дистрибутиве Red Hat и других популярных дистрибутивах.

Перечень операционных систем:

  1. Для начала знакомства с Linux рекомендуется использовать дистрибутив Ubuntu. Это один из самых широко используемых дистрибутивов. Для загрузки доступна только 64-битная редакция новейшей версии весом 1,4 Гб.
  2. Debian — дистрибутив с богатой историей, проверенный временем. Debian работает почти на любом железе, в том числе на старом.
  3. Kubuntu — это бесплатная альтернатива Windows и Mac OS X, в которую входит все необходимое для стандартных задач. Приятный бонус этого дистрибутива KDE Telepathy (мессенджер Kubuntu), который дает возможность получать и отправлять сообщения через Facebook, ICQ, Skype и другие. В Kubuntu будет и видеопроигрыватель, а также совместимые с Microsoft Office приложения.
  4. Linux Mint — надежный и простой дистрибутив, один из лидеров среди пользователей, перешедших на Linux с других операционных систем.
  5. Deepin — вариант дистрибутива для широкого круга пользователей, сменивших Windows, как в офисе, так и на работе. Поддерживает 30 языков.
  6. Fedora позволяет менять графические оболочки. Дистрибутив подойдет для тех, кто любит работать с новыми версиями программ.
  7. CentOS — если большинство составляющих Linux бесплатные, то за этот дистрибутив необходимо заплатить. Цена объясняется повышенной стабильностью и бесплатным распространением корпоративного дистрибутива. CentOS не рассчитан для новичков и является отличным инструментом для работы с серверами.
  8. openSUSE — весьма популярная вариация. Им приятно пользоваться и новичкам, и разработчикам, потому что во всех продуктах openSUSE возможно получить исходный код для каждого бинарного пакета.
Читайте также:  Драйвер снес windows что это

Дистрибутивы Linux можно разделить по направлениям использования. Например, для творчества стоит обратить внимание на Fedora Design Suite, Ubuntu Studio, KXStudio и Iro. А если компьютер используется для обучения, то хорошим выбором станут дистрибутивы Edubuntu и Uberstudent.

Источник

Изучаем процессы в Linux


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

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

Всё написанное ниже справедливо к Debian Linux с ядром 4.15.0.

Содержание

Введение

Системное программное обеспечение взаимодействует с ядром системы посредством специальных функций — системных вызовов. В редких случаях существует альтернативный API, например, procfs или sysfs, выполненные в виде виртуальных файловых систем.

Атрибуты процесса

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

  • Идентификатор процесса (pid)
  • Открытые файловые дескрипторы (fd)
  • Обработчики сигналов (signal handler)
  • Текущий рабочий каталог (cwd)
  • Переменные окружения (environ)
  • Код возврата

Жизненный цикл процесса

Рождение процесса

Только один процесс в системе рождается особенным способом — init — он порождается непосредственно ядром. Все остальные процессы появляются путём дублирования текущего процесса с помощью системного вызова fork(2) . После выполнения fork(2) получаем два практически идентичных процесса за исключением следующих пунктов:

  1. fork(2) возвращает родителю PID ребёнка, ребёнку возвращается 0;
  2. У ребёнка меняется PPID (Parent Process Id) на PID родителя.

После выполнения fork(2) все ресурсы дочернего процесса — это копия ресурсов родителя. Копировать процесс со всеми выделенными страницами памяти — дело дорогое, поэтому в ядре Linux используется технология Copy-On-Write.
Все страницы памяти родителя помечаются как read-only и становятся доступны и родителю, и ребёнку. Как только один из процессов изменяет данные на определённой странице, эта страница не изменяется, а копируется и изменяется уже копия. Оригинал при этом «отвязывается» от данного процесса. Как только read-only оригинал остаётся «привязанным» к одному процессу, странице вновь назначается статус read-write.

Состояние «готов»

Сразу после выполнения fork(2) переходит в состояние «готов».
Фактически, процесс стоит в очереди и ждёт, когда планировщик (scheduler) в ядре даст процессу выполняться на процессоре.

Состояние «выполняется»

Как только планировщик поставил процесс на выполнение, началось состояние «выполняется». Процесс может выполняться весь предложенный промежуток (квант) времени, а может уступить место другим процессам, воспользовавшись системным вывозом sched_yield .

Перерождение в другую программу

В некоторых программах реализована логика, в которой родительский процесс создает дочерний для решения какой-либо задачи. Ребёнок в данном случае решает какую-то конкретную проблему, а родитель лишь делегирует своим детям задачи. Например, веб-сервер при входящем подключении создаёт ребёнка и передаёт обработку подключения ему.
Однако, если нужно запустить другую программу, то необходимо прибегнуть к системному вызову execve(2) :

или библиотечным вызовам execl(3), execlp(3), execle(3), execv(3), execvp(3), execvpe(3) :

Читайте также:  Полезные действия с windows

Все из перечисленных вызовов выполняют программу, путь до которой указан в первом аргументе. В случае успеха управление передаётся загруженной программе и в исходную уже не возвращается. При этом у загруженной программы остаются все поля структуры процесса, кроме файловых дескрипторов, помеченных как O_CLOEXEC , они закроются.

Как не путаться во всех этих вызовах и выбирать нужный? Достаточно постичь логику именования:

  • Все вызовы начинаются с exec
  • Пятая буква определяет вид передачи аргументов:
    • l обозначает list, все параметры передаются как arg1, arg2, . NULL
    • v обозначает vector, все параметры передаются в нуль-терминированном массиве;
  • Далее может следовать буква p, которая обозначает path. Если аргумент file начинается с символа, отличного от «/», то указанный file ищется в каталогах, перечисленных в переменной окружения PATH
  • Последней может быть буква e, обозначающая environ. В таких вызовах последним аргументом идёт нуль-терминированный массив нуль-терминированных строк вида key=value — переменные окружения, которые будут переданы новой программе.

Семейство вызовов exec* позволяет запускать скрипты с правами на исполнение и начинающиеся с последовательности шебанг (#!).

Есть соглашение, которое подразумевает, что argv[0] совпадает с нулевым аргументов для функций семейства exec*. Однако, это можно нарушить.

Любопытный читатель может заметить, что в сигнатуре функции int main(int argc, char* argv[]) есть число — количество аргументов, но в семействе функций exec* ничего такого не передаётся. Почему? Потому что при запуске программы управление передаётся не сразу в main. Перед этим выполняются некоторые действия, определённые glibc, в том числе подсчёт argc.

Состояние «ожидает»

Некоторые системные вызовы могут выполняться долго, например, ввод-вывод. В таких случаях процесс переходит в состояние «ожидает». Как только системный вызов будет выполнен, ядро переведёт процесс в состояние «готов».
В Linux так же существует состояние «ожидает», в котором процесс не реагирует на сигналы прерывания. В этом состоянии процесс становится «неубиваемым», а все пришедшие сигналы встают в очередь до тех пор, пока процесс не выйдет из этого состояния.
Ядро само выбирает, в какое из состояний перевести процесс. Чаще всего в состояние «ожидает (без прерываний)» попадают процессы, которые запрашивают ввод-вывод. Особенно заметно это при использовании удалённого диска (NFS) с не очень быстрым интернетом.

Состояние «остановлен»

В любой момент можно приостановить выполнение процесса, отправив ему сигнал SIGSTOP. Процесс перейдёт в состояние «остановлен» и будет находиться там до тех пор, пока ему не придёт сигнал продолжать работу (SIGCONT) или умереть (SIGKILL). Остальные сигналы будут поставлены в очередь.

Завершение процесса

Ни одна программа не умеет завершаться сама. Они могут лишь попросить систему об этом с помощью системного вызова _exit или быть завершенными системой из-за ошибки. Даже когда возвращаешь число из main() , всё равно неявно вызывается _exit .
Хотя аргумент системного вызова принимает значение типа int, в качестве кода возврата берется лишь младший байт числа.

Состояние «зомби»

Сразу после того, как процесс завершился (неважно, корректно или нет), ядро записывает информацию о том, как завершился процесс и переводит его в состояние «зомби». Иными словами, зомби — это завершившийся процесс, но память о нём всё ещё хранится в ядре.
Более того, это второе состояние, в котором процесс может смело игнорировать сигнал SIGKILL, ведь что мертво не может умереть ещё раз.

Забытье

Код возврата и причина завершения процесса всё ещё хранится в ядре и её нужно оттуда забрать. Для этого можно воспользоваться соответствующими системными вызовами:

Вся информация о завершении процесса влезает в тип данных int. Для получения кода возврата и причины завершения программы используются макросы, описанные в man-странице waitpid(2) .

Передача argv[0] как NULL приводит к падению.

Бывают случаи, при которых родитель завершается раньше, чем ребёнок. В таких случаях родителем ребёнка станет init и он применит вызов wait(2) , когда придёт время.

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

Благодарности

Спасибо Саше «Al» за редактуру и помощь в оформлении;

Спасибо Саше «Reisse» за понятные ответы на сложные вопросы.

Они стойко перенесли напавшее на меня вдохновение и напавший на них шквал моих вопросов.

Источник

Оцените статью