Подытоживаю и восполняю пробелы после прохождения бесплатного курса от Хекслет «Операционные системы». Описал только то, что более-менее понял, а остальное не включил, поэтому это не пересказ курса – в этой статье не весь контент.
Основные понятия
Обозначим некоторые основные понятия, от которых будем отталкиваться в дальнейшем тексте.
Операционная система (ОС) — это интерфейс между компьютером и человеком.
Интерфейс – это «посредник», «переводчик», который обеспечивает взаимопонимание сторон: железо-программа-человек (например: жёсткий диск, Total Commander и Олег).
У каждой из этих трёх частей свой язык, а интерфейс – это способ общения частей между собой.
Пользователь – это агент: программа или человек.
Программа – это набор инструкций для процесса.
Процесс – фактическое исполнение инструкций программы, то есть работающая программа, instance of a program.
Тред (thread) – мельчайшая единица процесса. Процесс состоит из тредов.
Задача – единица работы, которая включает в себя один или несколько процессов или тредов.
Шина – её часто сравнивают с магистралью (highway), – это провода и соединения, позволяющие частям компьютера очень быстро обмениваться информацией друг с другом.
Операционная система помогает софту общаться с железом, а человеку с софтом. За взаимодействие software и hardware отвечает ядро ОС, а за коммуникацию человека с software отвечает пользовательский интерфейс (UI), он бывает двух видов:
- графический (GUI – graphical user interface): окна, иконки, курсор;
- командная строка либо терминал (CLI – command line interface).
Основные задачи ОС – это регулировать процессы. Она делает следующее:
- управляет запуском нескольких процессов
- распределяет ресурсы: даёт их актуальному сейчас процессу и защищает выделенные ресурсы от других процессов
- позволяет процессам обмениваться информацией
- позволяет процессам синхронизироваться.
ОС использует таблицы, прямо как это делают человеческие организации. Таблицы помогают операционной системе в каждый момент времени знать информацию о текущем статусе процессов, файлов и ресурсов (память, I/O), распределять и защищать выделенные ресурсы. С помощью таблиц организовывается вся работа системы.
В системном мышлении есть такая концепция, как «учитывать и удовлетворять интересы всех заинтересованных ролей». Чем больше интересов удовлетворено, тем система успешнее. ОС разработана так, чтобы идеально реализовывать эту идею системного мышления: она распределяет ресурсы таким образом, чтобы их постоянно хватало всем «заинтересованным», то есть всем процессам. Когда она выделила память одному процессу и к этому же блоку памяти запрашивает доступ другой процесс, ОС не даёт ему заполучить ресурс, пока предыдущий процесс не отработает столько, сколько нужно.
Но здесь есть оговорки и нужно много уточнять про принципы распределения ресурсов. Там на инженерном уровне встают сложные вопросы: кому (какому процессу) отдавать приоритет – может, этот новый процесс более важный и ему действительно надо передать задействованную другим процессом память, чтобы вся система не упала? Как долго он должен исполняться? Как избежать ситуации, когда всеми ресурсами пользуются самые приоритетные процессы, а остальные «голодают» (так называемое «ресурсное голодание»)?
Про память поговорим чуть подробнее позже по тексту.
Процесс
Жизнь процесса проходит в два этапа: создание и уничтожение. В своём жизненном цикле процесс может проходить такие состояния:
- Новый (создание)
- Готов
- Запущен
- Заблокирован
- Приостановлен
- Выход (уничтожение)
Когда процесс находится в состоянии «готов», «запущен» или «заблокирован», он занимает оперативную память (RAM). Состояние «приостановлен» означает, что ОС перенесла процесс во вторичную память – ведь ресурс RAM нужен другим процессам и при этом он ограничен. Вторичная память – это HDD или SSD или другое не-RAM хранилище. Такой перенос происходит, когда процесс долго простаивал в очереди, то есть пребывал в состоянии «заблокирован». Возможные причины переноса процесса из оперативной памяти: долго шёл ответ от устройства ввода-вывода (input-output, I/O), в том числе ожидание, пока человек нажмёт на кнопку «ОК».
Заблокированные (ожидающие) процессы ждут разного: какие-то процессы ждут ответа от пользователя, другие от видеокарты, третьи от жёсткого диска. Для оптимизации работы компьютера операционная система разносит процессы по смысловым очередям:
- в одной очереди стоят все процессы, ожидающие ответа от пользователя;
- во второй очереди стоят все процессы, ожидающие ответа от видеокарты;
- в третьей очереди стоят все процессы, ожидающие ответа от жёсткого диска.
Процессор
Всё, что происходит на компьютере, это расчёты, производимые процессором.
Процессор (CPU) – вычислительный центр компьютера, исполняет инструкции программ. Это самая быстрая часть компьютера.
За работу процессора отвечает операционная система. Пока компьютер запущен, на нём выполняются какие-то процессы, поэтому процессор должен работать всегда – производить расчёты без пауз, пока есть задачи. Для этого инженеры CPU создают и постоянно улучшают его архитектуру, а разработчики ОС оптимизируют его работу так, чтобы процессор работал без остановки.
Проблема в том, что все остальные элементы компьютера медленнее процессора. Процессор – это как Флэш / Ртуть / Белка из «Лесной Братвы», а всё остальное в компьютере (и уж тем более человек) – это ленивец Блиц из «Зверополиса». Так как процесс – это набор инструкций и I/O постоянно обмениваются данными с CPU, а процессор справляется с задачами чрезвычайно быстро, в итоге CPU может простаивать в ожидании следующего ответа от исполняющегося сейчас процесса.
Нельзя, чтобы процессор простаивал! Решением стало «ставить на паузу» те процессы, которые ждут ответа от других устройств или человека. Всё время, пока процессор ждёт ответ поставленного на паузу процесса, он занимается другими задачами.
Например, процессор отправил данные на жёсткий диск или в сетевую карту или на экран монитора и ждёт ответа от соответствующего устройства или человека – «Нажмите ОК, чтобы продолжить». Чтобы процессор не простаивал, пока ждёт ответ, ОС моментально подкидывает ему следующую задачу (процесс или набор процессов). За счёт этого может казаться, что на компьютере одновременно работают несколько программ. Такой вот эффективный тайм-менеджмент для железа.
Note: на современных многопроцессорных и многоядерных системах процессы действительно исполняются параллельно – каждое ядро обрабатывает свой процесс.
Не перепутать ядра:
- Ядро ОС – это программа операционной системы, часть ОС, которая общается с hardware.
- Ядро CPU – это блок обработки в процессоре (processing unit), он обрабатывает инструкции программ.
Внутри каждого процесса существуют треды (thread – поток, нить). Грубо говоря, это такие мини-«процессы», которые позволяют выполнять несколько инструкций одного процесса. Каждому треду операционная система предоставляет доступ к ресурсам: время работы CPU, память, доступ к I/O и к другим ресурсам.
Важно уточнить, что тред – это отдельная сущность, его нельзя назвать «процессом» в прямом смысле этого слова.
Основные архитектуры процессоров: SISD, SIMD, MISD, MIMD.
-
SISD (Single Instruction, Single Data)
Процессор одновременно обрабатывает только одну инструкцию и один блок данных.
ОС, разработанные под SISD:
- MS-DOS
- Windows 9x (Windows 95, Windows 98 и Windows Me)
- OS/2
-
SIMD (Single Instruction, Multiple Data)
Компьютер обрабатывает одну инструкцию и несколько блоков данных – то есть операция одна и та же, а обрабатываемые значения разные. Такая архитектура хорошо выполняет параллельную обработку больших данных.
Хорошо подходит для работы с изображениями и видео, для научных вычислений, криптографии, сжатия данных и для многих других задач параллельной обработки.
-
MISD (Multiple Instruction, Single Data)
Один блок данных передаётся нескольким процессорам.
Это узкоспециализированная архитектура, она используется в таких задачах, как шифрование (один и тот же блок данных шифруется разными алгоритмами) или в работе отказоустойчивых систем (одна и та же программа запущена на нескольких процессорах, но с разными начальными условиями, с целью выявлять и исправлять ошибки, сравнивая результаты).
-
MIMD (Multiple Instruction, Multiple Data)
Частные формы MIMD
- SMP (Symmetric Multi-Processing)
- Clusters
- Grid Computing
- Distributed Systems
- и др.
ОС, разработанные под MIMD
- современные Windows
- Linux
- MacOS
Память
Результат вычислений и процесс (исполняемый набор инструкций от программы) хранятся в оперативной памяти (RAM).
Каждому процессу нужно какое-то количество оперативной памяти, чтобы быть исполненным. Но разные процессы исполняются за разное количество времени: одни процессы сложнее и потому исполняются дольше других. При этом память заполняется последовательно – автор курса сравнивает её с пустой книжной полкой, на которую слева-направо выставляются книги.
Представьте, что выполненный процесс – это убранная с полки книга. Вот только процессы / книги убираются не одна за другой, а из разных мест (убрали книги №1, 3, 4 и 9) и в результате на книжной полке появляются дыры, ряд книг становится похож на решето. Если мы хотим поставить толстый словарь Ожегова на пустое место, откуда недавно убрали тоненькую брошюрку, то мы не сможем этого сделать и это место будет «ждать» подходящей книги.
Чтобы избежать таких ситуаций ОС использует логическую память. Логическая память – это кусок памяти, которую ОС «показывает» программе, как бы убеждая её: у тебя бесконечно много памяти, используй сколько тебе надо. Физически на нашей полке остаётся всё то же решето или места вообще не остаётся. Но для процесса создаётся виртуальное пространство памяти, где вся память выделена исключительно для него и ему не надо заботиться о том, чтобы найти свободное место и не надо думать о действительно доступном объёме. Это как если бы вы пришли в библиотеку и вернули книгу или, наоборот, захотели взять её. Библиотекарь сам поставит эту книгу на нужную полку или принесёт вам книгу с нужной полки, а вам не надо беспокоиться об их расстановке. И даже если все полки библиотеки забиты, это всё равно не ваша забота.
Очень упрощённый пример реализации:
- У нас уже заняты 14 из 16 ГБ памяти (RAM).
- Потом ОС выделяет п��оцессу ‘A’ ещё 2 ГБ – теперь заняты 16 из 16 ГБ. Но сейчас процесс ‘A’ использует только 0.5 ГБ, а процессу ‘B’ нужны 1.5 ГБ.
- Тогда ОС выделяет процессу ‘B’ эти 1.5 ГБ из RAM, а зарезервированные 1.5. ГБ за процессом ‘A’, но пока не используемые, отправляет на вторичное хранилище.
Это выглядит так, словно бы ОС выделила 17.5 ГБ из 16 ГБ. Такое возможно благодаря виртуальной (логической) памяти.
Планирование выполнения задач
Процесс пребывает в таких состояниях:
- Либо он не существует
Это долгосрочное планирование – ОС только собирается создать процесс.
(состояние «новый» – ещё не создан, или состояние «выход» – уже уничтожен).
- Либо находится во вторичной памяти
Это среднесрочное планирование – ОС собирается перевести процесс из вторичной медленной память в основную быструю (в RAM).
(«готов и приостановлен» или «заблокирован и приостановлен»).
- Либо находится в оперативной памяти
Это краткосрочное планирование – ОС собирается запустить процесс.
(ожидает запуска: «заблокирован» или «готов»).
Это самая частая задача ОС – запускать процессы.
Для наглядности приведу скриншот из видеоурока курса.
Чтобы распределять очередь процессов, ОС использует приоритеты. Для этого есть разные алгоритмы, вот некоторые из них:
-
FCFS (First Come First Served)
Процессы обслуживаются в порядке живой очереди.
Проблема: короткие процессы могут оказаться далеко в очереди и запускаться долго.
-
Shortest Process First
Короткие процессы запускаются вперёд.
Проблема: может начаться ресурсное голодание у долгих процессов – до них очередь может так и не дойти.
-
Round Robin
Каждому процессу выделяется равный отрезок времени на исполнение, по истечении которого процесс переносится в конец очереди
Проблемы:
- будут прерываться процессы, требующие постоянной поддержки (такие как текстовый редактор);
- долгие процессы будут исполняться ещё дольше;
- невозможно определить оптимальный отрезок времени, по истечении которого процессы должны сменять друг друга – либо CPU будет простаивать (короткие процессы будут заканчиваться раньше, чем истечёт выделенный им отрезок времени), либо ОС будет перегружена слишком частыми переключениями.
-
Shortest Remaining Time
Приоритет отдаётся процессу, которому осталось меньше прочих времени на выполнение.
Проблема: ОС получает доп. нагрузку, так как должна рассчитывать это самое время.
Чтобы ОС работала быстро и программы не тормозили, разработчики ОС применяют сочетание алгоритмов.
Ввод-вывод (I/O)
Устройства ввода-вывода сильно медленнее центрального процессора, как и все составляющие компьютера. Компьютер должен работать оптимально: быстро откликаться на действия пользователя и быстро производить вычисления. Все вычисления совершает процессор, но чтобы их произвести, он должен получить данные. Такие данные приходят от устройств ввода-вывода: монитор, клавиатура, мышь, сетевая карта, видеокарта, жёсткий диск.
Так как эти устройства медленные, а процессор не должен простаивать, ожидая от них ответа, на общую с CPU и RAM шину инженеры установили доп. устройство – упрощённый процессор, выполняющий роль «менеджера» или «посредника». Такое устройство называют DMA (Direct Memory Access). Представьте, что процессор – это владелец бизнеса, а DMA – это его секретарь, который отвечает на звонки, назначает встречи. DMA приносит процессору работу на блюдечке: I/O соизволило донести свои данные, DMA их получил и тут же сообщил процессору: «вот процесс, можно производить расчёты».
Алгоритм выглядит так:
- Модуль DMA получает от процессора право на проведение операции.
- Модуль DMA переносит информацию из памяти / в память.
- Когда информация перенесена, модуль DMA отправляет сигнал прерывания процессору и тогда процессор обрабатывает поступившую инфу.
I/O по-прежнему всё ещё медленные. Проблемы:
- Процессы всё ещё должны дожидаться завершения операции.
- Чтобы защититься от простоя, некоторые данные должны храниться на RAM во время операции I/O.
- Для оптимизации, мы можем извлекать данные из памяти заранее, а записывать их позже.
ОС как бы «обещает» процессу записать файл на жёсткий диск, поэтому процесс не ждёт операцию записи и сразу же продолжает свою работу.
Такая операция называется буферизация.
О чём я не написал в статье из того, о чём было сказано в курсе?
-
Не рассказал про микроядра
Там речь о том, что операционная система может быть самостоятельным процессом. Будет ли это так, решать разработчикам операционной системы. Три типа ОС (отдельное ядро, функции ОС в пользовательских процессах, функции ОС как отдельные процессы).
-
Проблемы организации процессов
deadlock, livelock, ресурсное голодание, состояние гонки и регулирование этих проблем – семафор.
-
Исторические очерки
- Одноядерные процессоры
- Ныне редко используемые методы управления памятью (Fixed, Dynamic, Simple paging, Simple segmentation).
- Наверняка не указал что-то ещё, что было в курсе
Я не ставил целью переписать курс. Целью статьи было уложить в своей голове то, что более-менее понял и восполнить пробелы в этих «понятных» частях. Всё, что мне совсем непонятно, я отложил на будущее.
Хорошо, если эта статья помогла и вам наверстать упущенное. Или же она поможет вам легче пройти курс – вы прочитали, мозг подготовился к содержимому, поэтому при просмотре лекций будет понятнее.
Если вы заметили ошибку или хотите что-то уточнить, пожалуйста, напишите об этом в ЛС или в комментариях.
<!DOCTYPE html>
<html class="h-100" data-bs-theme="light" data-mantine-color-scheme="light" lang="ru" prefix="og: https://ogp.me/ns#">
<head>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<link crossorigin="true" href="https://cdn.hexlet.io" rel="preconnect">
<link href="https://mc.yandex.ru" rel="preconnect">
<meta content="aa2vrdtq64dub8knuf83lwywit311w" name="facebook-domain-verification">
<link href="/favicon.ico" rel="icon" sizes="any">
<link href="/favicon.svg" rel="icon" type="image/svg+xml">
<link href="/apple-touch-icon.png" rel="apple-touch-icon">
<link href="/manifest.webmanifest" rel="manifest">
<script>
//<![CDATA[
window.gon={};gon.ym_counter="25559621";gon.is_bot=true;gon.applications={};gon.current_user={"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26 20:06:18 UTC","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false};gon.token="WeR3ah42xjPypUdtTRBstpWJVqfGLNHZRPM8PaunshO2Nbxd7EhrU0TmY_VBH5zBVYB7Dc4bL3v5E6Zp-aBVfQ";gon.locale="ru";gon.language="ru";gon.theme="light";gon.rails_env="production";gon.mobile=false;gon.google={"analytics_key":"UA-1360700-51","optimize_key":"GTM-5QDVFPF"};gon.captcha={"google_v3_site_key":"6LenGbgZAAAAAM7HbrDbn5JlizCSzPcS767c9vaY","yandex_site_key":"ysc1_Vyob5ZPPUdPBsu0ykt8bVFdzsfpoVjQChLGl2b4g19647a89","verification_failed":null};gon.social_signin=false;gon.typoreporter_google_form_id="1FAIpQLSeibfGq-KvWQ2Fyru-zkFFRVTLBuzXAHAoEyN1p49FtDmNoNA";
//]]>
</script>
<meta charset="utf-8">
<title>Что не программист усвоил из бесплатного курса от Хекслета «Операционные системы»</title>
<meta name="description" content="Подытоживаю и восполняю пробелы после прохождения бесплатного курса от Хекслет «Операционные системы». Описал только то, что более-менее понял, а остальное не включил, поэтому это не пересказ курса – в этой статье не весь контент.">
<link rel="canonical" href="https://ru.hexlet.io/blog/posts/chto-ne-programmist-usvoil-iz-kursa-operatsionnye-sistemy">
<meta property="og:title" content="Что не программист усвоил из бесплатного курса от Хекслета «Операционные системы»">
<meta property="og:description" content="Подытоживаю и восполняю пробелы после прохождения бесплатного курса от Хекслет «Операционные системы». Описал только то, что более-менее понял, а остальное не включил, поэтому это не пересказ курса – в этой статье не весь контент.">
<meta property="og:image" content="https://ru.hexlet.io/vite/assets/blog_post-7eTyeLLt.webp">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="cWfSB0XxIst6OSmQYMPqaq8pgthYex2Fg1g_9HboaTKethkwt4-Pq8x6DQhszBodbyCvclBM4yc-uKWgJO-OXA" />
<script src="/vite/assets/inertia-DfXos102.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/preload-helper-BJ4cLWpC.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-BrRXra1y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ahoy-DrlRQ-1D.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/analytics-cb8xch9l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Surface-DL2bpZA-.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/extends-C-EagtpE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/inheritsLoose-BBd-DCVI.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/objectWithoutPropertiesLoose-DRHXDhjp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/index.esm-DAqKOkZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Button-CGPUux8l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/CloseButton-D1euiPao.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Group-BX48WcuU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Loader-BQEY8g6v.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Modal-Cy3HByv7.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/OptionalPortal-1Hza5P2w.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Stack-CtjJzfw4.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Textarea-Ck64llAy.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/DirectionProvider-Dc9zdUke.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/events-DJQOhap0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-reduced-motion-D2owz4wa.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-disclosure-zKtK5W1r.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-hotkeys-Cnc_Rwkb.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/random-id-DOQyszCZ.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/exports-C_MrNx_T.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<link rel="stylesheet" href="/vite/assets/application-BqhCP46M.js" />
<script src="/vite/assets/application-Df9RExpe.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/autocomplete-VMNbxKGl.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/createPopper-C3aM9r1M.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/js.cookie-D1-O8zkX.js" as="script" crossorigin="anonymous"><link rel="stylesheet" href="/vite/assets/application-C8HjmMaq.css" media="screen" />
<script>
window.ym = function(){(ym.a=ym.a||[]).push(arguments)};
window.addEventListener('load', function() {
setTimeout(function() {
ym.l = 1*new Date();
ym(window.gon.ym_counter, "init", {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true
});
// Загружаем скрипт
var k = document.createElement('script');
k.async = 1;
k.src = 'https://mc.yandex.ru/metrika/tag.js';
document.head.appendChild(k);
ym(window.gon.ym_counter, 'getClientID', function(clientID) {
window.ymClientId = clientID;
});
}, 1500);
});
</script>
<!-- Google Tag Manager - deferred -->
<script>
// dataLayer stub сразу — пуши работают до загрузки скрипта
window.dataLayer = window.dataLayer || [];
// Сам скрипт — отложенно после load
window.addEventListener('load', function() {
setTimeout(function() {
dataLayer.push({'gtm.start': new Date().getTime(), event: 'gtm.js'});
var j = document.createElement('script');
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-WK88TH';
document.head.appendChild(j);
}, 1500);
});
</script>
<!-- End Google Tag Manager -->
</head>
<body>
<noscript>
<div>
<img alt="" src="https://mc.yandex.ru/watch/25559621" style="position:absolute; left:-9999px;">
</div>
</noscript>
<header class="sticky-top bg-body">
<nav class="navbar navbar-expand-lg">
<div class="container-xxl">
<a class="navbar-brand" href="/"><img alt="Логотип Хекслета" height="24" src="https://ru.hexlet.io/vite/assets/logo_ru_light-BpiEA1LT.svg" width="96">
</a><button aria-controls="collapsable" aria-expanded="false" aria-label="Меню" class="navbar-toggler border-0 mb-0 mt-1" data-bs-target="#collapsable" data-bs-toggle="collapse">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsable">
<ul class="navbar-nav mb-lg-0 mt-lg-1">
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
Все курсы
<span class="bi bi-chevron-down align-middle ms-1"></span>
</button>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item d-flex py-2" href="/courses"><div class="fw-bold me-auto">Все что есть</div>
<div class="text-muted">117</div>
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные категории</b>
</li>
<li>
<a class="dropdown-item py-2" href="/courses_devops">Курсы по DevOps
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_data_analytics">Курсы по аналитике данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_programming">Курсы по программированию
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_testing">Курсы по тестированию
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные курсы</b>
</li>
<li>
<a class="dropdown-item py-2" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/go">Go-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/java">Java-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/python">Python-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/qa-auto-engineer-java">Автоматизатор тестирования на Java
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/data-analytics">Аналитик данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/frontend">Фронтенд-разработчик
</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
О Хекслете
<span class="bi bi-chevron-down align-middle"></span>
</button>
<ul class="dropdown-menu bg-body">
<li>
<a class="dropdown-item py-2" href="/pages/about">О нас
</a></li>
<li>
<a class="dropdown-item py-2" href="/blog">Блог
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/hse-research" role="button">Результаты (Исследование)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://career.hexlet.io" role="button">Хекслет Карьера
</span></li>
<li>
<a class="dropdown-item py-2" href="/testimonials">Отзывы студентов
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://t.me/hexlet_help_bot" role="button">Поддержка (В ТГ)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/referal-program/?promo_creative=priglasite-druzei&promo_name=referal-program&promo_position=promo_position&promo_start=010724&promo_type=link" role="button">Реферальная программа
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/certificate" role="button">Подарочные сертификаты
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://hh.ru/employer/4307094" role="button">Вакансии
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://b2b.hexlet.io" data-target="_blank" role="button">Компаниям
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexly.ru/" data-target="_blank" role="button">Колледж
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexlyschool.ru/" data-target="_blank" role="button">Частная школа
</span></li>
</ul>
</li>
<li><a class="nav-link" href="/subscription/new">Подписка</a></li>
</ul>
<ul class="navbar-nav flex-lg-row align-items-lg-center gap-2 ms-auto">
<li>
<a class="nav-link" aria-label="Переключить тему" href="/theme/switch?new_theme=dark"><span aria-hidden="true" class="bi bi-moon"></span>
</a></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="/u/new" role="button"><span>Регистрация</span>
</span></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="https://ru.hexlet.io/session/new" role="button"><span>Вход</span>
</span></li>
</ul>
</div>
</div>
</nav>
</header>
<div class="x-container-xxxl">
</div>
<main class="mb-6 min-vh-100 h-100">
<link rel="preload" as="image" href="/vite/assets/blog_post-7eTyeLLt.webp"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk2NSwicHVyIjoiYmxvYl9pZCJ9fQ==--84278a1852c9c6fb13b80a69f395bac6e47a422e/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Cloud%20sync-bro.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzY0NSwicHVyIjoiYmxvYl9pZCJ9fQ==--f34b449529f04fd8689092f66f9653c47c7e1f58/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Server%20status-amico.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk3NywicHVyIjoiYmxvYl9pZCJ9fQ==--bc5ef27286509b0ecf2f8ae6cbdce2376db3d394/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/500%20Internal%20Server%20Error-cuate.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk3MSwicHVyIjoiYmxvYl9pZCJ9fQ==--126b25f39a57b0fdbd31895236a8d1da05b80ac4/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Server-amico.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk2MiwicHVyIjoiYmxvYl9pZCJ9fQ==--c18877cf9396039142efbbbe6b2ab4dc6b09f18b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Cloud%20hosting-cuate.png"/><link rel="preload" as="image" href="/vite/assets/development-BVihs_d5.png"/><div id="app" data-page="{"component":"web/blog/posts/show","props":{"errors":{},"locale":"ru","language":"ru","httpsHost":"https://ru.hexlet.io","host":"ru.hexlet.io","colorScheme":"light","auth":{"user":{"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26T20:06:18.249Z","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false}},"cloudflareTurnstileSiteKey":"0x4AAAAAAA15KmeFXzd2H0Xo","vkIdClientId":"51586979","yandexIdClientId":"88d071f1d3384eb4bd1deb37910235c7","formAuthToken":"ANpb-hzv-AVBsLqu_lc_fA2D9z3t3l1UoEgm81t75dPvC5DN7pFVZffznjbyWM8LzYral-Xpo_YdqLynCXwCvQ","post":{"model_name":"BlogPost","category":{"id":14,"name":"Дневник студента","slug":"student-diary","state":"published","created_at":"2019-02-25T13:27:09.471Z"},"creator":{"public_name":"Игорь Шипилов","id":556694,"is_tutor":false},"tags":[],"id":2217,"title":"Что не программист усвоил из бесплатного курса от Хекслета «Операционные системы»","slug":"chto-ne-programmist-usvoil-iz-kursa-operatsionnye-sistemy","state":"published","summary":"Подытоживаю и восполняю пробелы после прохождения бесплатного курса от Хекслет «Операционные системы». Описал только то, что более-менее понял, а остальное не включил, поэтому это не пересказ курса – в этой статье не весь контент.","votes_count":3,"created_at":"2023-01-14T06:47:06.762Z","published_at":"2023-01-20T09:22:55.847Z","body":"**Подытоживаю и восполняю пробелы после прохождения бесплатного курса от Хекслет «[Операционные системы](https://ru.hexlet.io/courses/operating_systems?utm_source=hexlet&utm_medium=blog&utm_campaign=all-courses&utm_content=chto-ne-programmist-usvoil-iz-kursa-operatsionnye-sistemy&utm_term=post_200123)». Описал только то, что более-менее понял, а остальное не включил, поэтому это не пересказ курса – в этой статье не весь контент.**\r\n\r\n::programs\r\n\r\n### Основные понятия\r\n\r\nОбозначим некоторые основные понятия, от которых будем отталкиваться в дальнейшем тексте.\r\n\r\n**Операционная система (ОС)** — это интерфейс между компьютером и человеком.\r\n\r\n**Интерфейс** – это «посредник», «переводчик», который обеспечивает взаимопонимание сторон: железо-программа-человек (например: жёсткий диск, Total Commander и Олег).\r\n\r\nУ каждой из этих трёх частей свой язык, а интерфейс – это способ общения частей между собой.\r\n\r\n**Пользователь** – это агент: программа или человек.\r\n\r\n**Программа** – это набор инструкций для процесса.\r\n\r\n**Процесс** – фактическое исполнение инструкций программы, то есть работающая программа, instance of a program.\r\n\r\n**Тред (thread)** – мельчайшая единица процесса. Процесс состоит из тредов.\r\n\r\n**Задача** – единица работы, которая включает в себя один или несколько процессов или тредов.\r\n\r\n**Шина** – её часто сравнивают с магистралью (highway), – это провода и соединения, позволяющие частям компьютера очень быстро обмениваться информацией друг с другом.\r\n\r\n---\r\n\r\nОперационная система помогает софту общаться с железом, а человеку с софтом. За взаимодействие software и hardware отвечает ядро ОС, а за коммуникацию человека с software отвечает пользовательский интерфейс (UI), он бывает двух видов:\r\n\r\n- графический (GUI – graphical user interface): окна, иконки, курсор;\r\n- командная строка либо терминал (CLI – command line interface).\r\n\r\nОсновные задачи ОС – это регулировать процессы. Она делает следующее:\r\n\r\n- управляет запуском нескольких процессов\r\n- распределяет ресурсы: даёт их актуальному сейчас процессу и защищает выделенные ресурсы от других процессов\r\n- позволяет процессам обмениваться информацией\r\n- позволяет процессам синхронизироваться.\r\n\r\nОС использует таблицы, прямо как это делают человеческие организации. Таблицы помогают операционной системе в каждый момент времени знать информацию о текущем статусе процессов, файлов и ресурсов (память, I/O), распределять и защищать выделенные ресурсы. С помощью таблиц организовывается вся работа системы.\r\n\r\nВ системном мышлении есть такая концепция, как «учитывать и удовлетворять интересы всех заинтересованных ролей». Чем больше интересов удовлетворено, тем система успешнее. ОС разработана так, чтобы идеально реализовывать эту идею системного мышления: она распределяет ресурсы таким образом, чтобы их постоянно хватало всем «заинтересованным», то есть всем процессам. Когда она выделила память одному процессу и к этому же блоку памяти запрашивает доступ другой процесс, ОС не даёт ему заполучить ресурс, пока предыдущий процесс не отработает столько, сколько нужно.\r\n\r\nНо здесь есть оговорки и нужно много уточнять про принципы распределения ресурсов. Там на инженерном уровне встают сложные вопросы: кому (какому процессу) отдавать приоритет – может, этот новый процесс более важный и ему действительно надо передать задействованную другим процессом память, чтобы вся система не упала? Как долго он должен исполняться? Как избежать ситуации, когда всеми ресурсами пользуются самые приоритетные процессы, а остальные «голодают» (так называемое «ресурсное голодание»)?\r\n\r\nПро память поговорим чуть подробнее позже по тексту.\r\n\r\n::posts\r\n\r\n### Процесс\r\n\r\nЖизнь процесса проходит в два этапа: создание и уничтожение. В своём жизненном цикле процесс может проходить такие состояния:\r\n\r\n- Новый (создание)\r\n- Готов\r\n- Запущен\r\n- Заблокирован\r\n- Приостановлен\r\n- Выход (уничтожение)\r\n\r\nКогда процесс находится в состоянии «готов», «запущен» или «заблокирован», он занимает оперативную память (RAM). Состояние «приостановлен» означает, что ОС перенесла процесс во вторичную память – ведь ресурс RAM нужен другим процессам и при этом он ограничен. Вторичная память – это HDD или SSD или другое не-RAM хранилище. Такой перенос происходит, когда процесс долго простаивал в очереди, то есть пребывал в состоянии «заблокирован». Возможные причины переноса процесса из оперативной памяти: долго шёл ответ от устройства ввода-вывода (input-output, I/O), в том числе ожидание, пока человек нажмёт на кнопку «ОК».\r\n\r\nЗаблокированные (ожидающие) процессы ждут разного: какие-то процессы ждут ответа от пользователя, другие от видеокарты, третьи от жёсткого диска. Для оптимизации работы компьютера операционная система разносит процессы по смысловым очередям:\r\n\r\n- в одной очереди стоят все процессы, ожидающие ответа от пользователя;\r\n- во второй очереди стоят все процессы, ожидающие ответа от видеокарты;\r\n- в третьей очереди стоят все процессы, ожидающие ответа от жёсткого диска.\r\n\r\n### Процессор\r\n\r\nВсё, что происходит на компьютере, это расчёты, производимые процессором.\r\n\r\n**Процессор** (CPU) – вычислительный центр компьютера, исполняет инструкции программ. Это самая быстрая часть компьютера.\r\n\r\nЗа работу процессора отвечает операционная система. Пока компьютер запущен, на нём выполняются какие-то процессы, поэтому процессор должен работать всегда – производить расчёты без пауз, пока есть задачи. Для этого инженеры CPU создают и постоянно улучшают его архитектуру, а разработчики ОС оптимизируют его работу так, чтобы процессор работал без остановки.\r\n\r\nПроблема в том, что все остальные элементы компьютера медленнее процессора. Процессор – это как Флэш / Ртуть / Белка из «Лесной Братвы», а всё остальное в компьютере (и уж тем более человек) – это ленивец Блиц из «Зверополиса». Так как процесс – это набор инструкций и I/O постоянно обмениваются данными с CPU, а процессор справляется с задачами чрезвычайно быстро, в итоге CPU может простаивать в ожидании следующего ответа от исполняющегося сейчас процесса.\r\n\r\nНельзя, чтобы процессор простаивал! Решением стало «ставить на паузу» те процессы, которые ждут ответа от других устройств или человека. Всё время, пока процессор ждёт ответ поставленного на паузу процесса, он занимается другими задачами.\r\n\r\nНапример, процессор отправил данные на жёсткий диск или в сетевую карту или на экран монитора и ждёт ответа от соответствующего устройства или человека – «Нажмите ОК, чтобы продолжить». Чтобы процессор не простаивал, пока ждёт ответ, ОС моментально подкидывает ему следующую задачу (процесс или набор процессов). За счёт этого может казаться, что на компьютере одновременно работают несколько программ. Такой вот эффективный тайм-менеджмент для железа. \r\n\r\n> Note: на современных многопроцессорных и многоядерных системах процессы действительно исполняются параллельно – каждое ядро обрабатывает свой процесс.\r\n> \r\n\r\nНе перепутать ядра:\r\n\r\n- Ядро ОС – это программа операционной системы, часть ОС, которая общается с hardware.\r\n- Ядро CPU – это блок обработки в процессоре (processing unit), он обрабатывает инструкции программ.\r\n\r\nВнутри каждого процесса существуют **треды** (thread – поток, нить). Грубо говоря, это такие мини-«процессы», которые позволяют выполнять несколько инструкций одного процесса. Каждому треду операционная система предоставляет доступ к ресурсам: время работы CPU, память, доступ к I/O и к другим ресурсам.\r\n\r\nВажно уточнить, что тред – это отдельная сущность, его нельзя назвать «процессом» в прямом смысле этого слова.\r\n\r\nОсновные архитектуры процессоров: SISD, SIMD, MISD, MIMD.\r\n\r\n- SISD (Single Instruction, Single Data)\r\n Процессор одновременно обрабатывает только одну инструкцию и один блок данных.\r\n ОС, разработанные под SISD:\r\n - MS-DOS\r\n - Windows 9x (Windows 95, Windows 98 и Windows Me)\r\n - OS/2\r\n \r\n- SIMD (Single Instruction, Multiple Data)\r\n Компьютер обрабатывает одну инструкцию и несколько блоков данных – то есть операция одна и та же, а обрабатываемые значения разные. Такая архитектура хорошо выполняет параллельную обработку больших данных.\r\n Хорошо подходит для работы с изображениями и видео, для научных вычислений, криптографии, сжатия данных и для многих других задач параллельной обработки.\r\n \r\n- MISD (Multiple Instruction, Single Data)\r\n Один блок данных передаётся нескольким процессорам.\r\n Это узкоспециализированная архитектура, она используется в таких задачах, как шифрование (один и тот же блок данных шифруется разными алгоритмами) или в работе отказоустойчивых систем (одна и та же программа запущена на нескольких процессорах, но с разными начальными условиями, с целью выявлять и исправлять ошибки, сравнивая результаты).\r\n \r\n- MIMD (Multiple Instruction, Multiple Data)\r\n \r\n **Частные формы MIMD**\r\n \r\n - SMP (Symmetric Multi-Processing)\r\n - Clusters\r\n - Grid Computing\r\n - Distributed Systems\r\n - и др.\r\n \r\n **ОС, разработанные под MIMD**\r\n \r\n - современные Windows\r\n - Linux\r\n - MacOS\r\n \r\n\r\n\r\n\r\n### Память\r\n\r\nРезультат вычислений и процесс (исполняемый набор инструкций от программы) хранятся в оперативной памяти (RAM).\r\n\r\nКаждому процессу нужно какое-то количество оперативной памяти, чтобы быть исполненным. Но разные процессы исполняются за разное количество времени: одни процессы сложнее и потому исполняются дольше других. При этом память заполняется последовательно – автор курса сравнивает её с пустой книжной полкой, на которую слева-направо выставляются книги.\r\n\r\nПредставьте, что выполненный процесс – это убранная с полки книга. Вот только процессы / книги убираются не одна за другой, а из разных мест (убрали книги №1, 3, 4 и 9) и в результате на книжной полке появляются дыры, ряд книг становится похож на решето. Если мы хотим поставить толстый словарь Ожегова на пустое место, откуда недавно убрали тоненькую брошюрку, то мы не сможем этого сделать и это место будет «ждать» подходящей книги.\r\n\r\nЧтобы избежать таких ситуаций ОС использует **логическую память**. Логическая память – это кусок памяти, которую ОС «показывает» программе, как бы убеждая её: у тебя бесконечно много памяти, используй сколько тебе надо. Физически на нашей полке остаётся всё то же решето или места вообще не остаётся. Но для процесса создаётся виртуальное пространство памяти, где вся память выделена исключительно для него и ему не надо заботиться о том, чтобы найти свободное место и не надо думать о действительно доступном объёме. Это как если бы вы пришли в библиотеку и вернули книгу или, наоборот, захотели взять её. Библиотекарь сам поставит эту книгу на нужную полку или принесёт вам книгу с нужной полки, а вам не надо беспокоиться об их расстановке. И даже если все полки библиотеки забиты, это всё равно не ваша забота.\r\n\r\nОчень упрощённый пример реализации:\r\n\r\n1. У нас уже заняты 14 из 16 ГБ памяти (RAM).\r\n2. Потом ОС выделяет процессу ‘A’ ещё 2 ГБ – теперь заняты 16 из 16 ГБ. Но сейчас процесс ‘A’ использует только 0.5 ГБ, а процессу ‘B’ нужны 1.5 ГБ.\r\n3. Тогда ОС выделяет процессу ‘B’ эти 1.5 ГБ из RAM, а зарезервированные 1.5. ГБ за процессом ‘A’, но пока не используемые, отправляет на вторичное хранилище.\r\n\r\nЭто выглядит так, словно бы ОС выделила 17.5 ГБ из 16 ГБ. Такое возможно благодаря виртуальной (логической) памяти.\r\n\r\n### Планирование выполнения задач\r\n\r\nПроцесс пребывает в таких состояниях:\r\n\r\n- Либо он не существует\r\nЭто **долгосрочное планирование** – ОС только собирается создать процесс.\r\n(состояние «новый» – ещё не создан, или состояние «выход» – уже уничтожен).\r\n- Либо находится во вторичной памяти\r\nЭто **среднесрочное планирование** – ОС собирается перевести процесс из вторичной медленной память в основную быструю (в RAM).\r\n(«готов и приостановлен» или «заблокирован и приостановлен»).\r\n- Либо находится в оперативной памяти\r\nЭто **краткосрочное планирование** – ОС собирается запустить процесс.\r\n(ожидает запуска: «заблокирован» или «готов»).\r\nЭто самая частая задача ОС – запускать процессы.\r\n\r\nДля наглядности приведу скриншот из видеоурока курса.\r\n\r\n\r\n\r\nЧтобы распределять очередь процессов, ОС использует приоритеты. Для этого есть разные алгоритмы, вот некоторые из них:\r\n\r\n- **FCFS (First Come First Served)**\r\n \r\n Процессы обслуживаются в порядке живой очереди.\r\n Проблема: короткие процессы могут оказаться далеко в очереди и запускаться долго.\r\n \r\n- **Shortest Process First**\r\n \r\n Короткие процессы запускаются вперёд.\r\n Проблема: может начаться ресурсное голодание у долгих процессов – до них очередь может так и не дойти.\r\n \r\n- **Round Robin**\r\n \r\n Каждому процессу выделяется равный отрезок времени на исполнение, по истечении которого процесс переносится в конец очереди\r\n Проблемы:\r\n \r\n - будут прерываться процессы, требующие постоянной поддержки (такие как текстовый редактор);\r\n - долгие процессы будут исполняться ещё дольше;\r\n - невозможно определить оптимальный отрезок времени, по истечении которого процессы должны сменять друг друга – либо CPU будет простаивать (короткие процессы будут заканчиваться раньше, чем истечёт выделенный им отрезок времени), либо ОС будет перегружена слишком частыми переключениями.\r\n- **Shortest Remaining Time**\r\n \r\n Приоритет отдаётся процессу, которому осталось меньше прочих времени на выполнение.\r\n Проблема: ОС получает доп. нагрузку, так как должна рассчитывать это самое время.\r\n \r\n\r\nЧтобы ОС работала быстро и программы не тормозили, разработчики ОС применяют сочетание алгоритмов.\r\n\r\n\r\n \r\n\r\n### Ввод-вывод (I/O)\r\n\r\nУстройства ввода-вывода сильно медленнее центрального процессора, как и все составляющие компьютера. Компьютер должен работать оптимально: быстро откликаться на действия пользователя и быстро производить вычисления. Все вычисления совершает процессор, но чтобы их произвести, он должен получить данные. Такие данные приходят от устройств ввода-вывода: монитор, клавиатура, мышь, сетевая карта, видеокарта, жёсткий диск.\r\n\r\nТак как эти устройства медленные, а процессор не должен простаивать, ожидая от них ответа, на общую с CPU и RAM шину инженеры установили доп. устройство – упрощённый процессор, выполняющий роль «менеджера» или «посредника». Такое устройство называют **DMA (Direct Memory Access)**. Представьте, что процессор – это владелец бизнеса, а DMA – это его секретарь, который отвечает на звонки, назначает встречи. DMA приносит процессору работу на блюдечке: I/O соизволило донести свои данные, DMA их получил и тут же сообщил процессору: «вот процесс, можно производить расчёты».\r\n\r\nАлгоритм выглядит так:\r\n\r\n1. Модуль DMA получает от процессора право на проведение операции.\r\n2. Модуль DMA переносит информацию из памяти / в память.\r\n3. Когда информация перенесена, модуль DMA отправляет сигнал прерывания процессору и тогда процессор обрабатывает поступившую инфу.\r\n\r\nI/O по-прежнему всё ещё медленные. Проблемы:\r\n\r\n- Процессы всё ещё должны дожидаться завершения операции.\r\n- Чтобы защититься от простоя, некоторые данные должны храниться на RAM во время операции I/O.\r\n- Для оптимизации, мы можем извлекать данные из памяти заранее, а записывать их позже.\r\nОС как бы «обещает» процессу записать файл на жёсткий диск, поэтому процесс не ждёт операцию записи и сразу же продолжает свою работу.\r\n\r\nТакая операция называется **буферизация**.\r\n\r\n### О чём я не написал в статье из того, о чём было сказано в курсе?\r\n\r\n- **Не рассказал про микроядра**\r\nТам речь о том, что операционная система может быть самостоятельным процессом. Будет ли это так, решать разработчикам операционной системы. Три типа ОС (отдельное ядро, функции ОС в пользовательских процессах, функции ОС как отдельные процессы).\r\n- **Проблемы организации процессов**\r\ndeadlock, livelock, ресурсное голодание, состояние гонки и регулирование этих проблем – семафор.\r\n- **Исторические очерки**\r\n - Одноядерные процессоры\r\n - Ныне редко используемые методы управления памятью (Fixed, Dynamic, Simple paging, Simple segmentation).\r\n- **Наверняка не указал что-то ещё, что было в курсе**\r\n\r\nЯ не ставил целью переписать курс. Целью статьи было уложить в своей голове то, что более-менее понял и восполнить пробелы в этих «понятных» частях. Всё, что мне совсем непонятно, я отложил на будущее.\r\n\r\nХорошо, если эта статья помогла и вам наверстать упущенное. Или же она поможет вам легче пройти курс – вы прочитали, мозг подготовился к содержимому, поэтому при просмотре лекций будет понятнее.\r\n\r\nЕсли вы заметили ошибку или хотите что-то уточнить, пожалуйста, напишите об этом в ЛС или в комментариях.","reading_time":8,"url":"https://ru.hexlet.io/blog/posts/chto-ne-programmist-usvoil-iz-kursa-operatsionnye-sistemy","cover_thumb_variant":null,"cover_list_variant":"/vite/assets/blog_post-7eTyeLLt.webp","cover_main_variant":"/vite/assets/blog_post-7eTyeLLt.webp","related_stacks_count":5},"relatedPosts":[{"model_name":"BlogPost","id":1886,"title":"\"Hello, World!\": как я пришел в программирование","slug":"hello-world-kak-ya-prishel-v-programmirovanie","summary":"Всем привет! Меня зовут Евгений, мне 32 года. Прошло ровно полтора года, как я решил начать изучать программирование и ровно год, как я на Хекслете. Я успел «набить первые шишки» и добиться некоторых достижений на своем пути. Этот путь не дается легко, но это и к лучшему :)","created_at":"2022-06-17T03:27:19.195Z","published_at":"2023-06-08T13:51:38.165Z","cover_list_variant":"/vite/assets/blog_post-7eTyeLLt.webp"},{"model_name":"BlogPost","id":1846,"title":"Как Хекслет может помочь стать частью OpenSource сообщества","slug":"kak-hekslet-mozhet-pomoch-stat-chastyu-opensource-soobschestva","summary":"У большинства программистов наступает момент, когда работа/учеба уже не приносят такого удовольствия, как раньше. Хочется стать частью чего-то большего, сделать значимый вклад в сообщество и как-то заявить о себе. Кто-то идет с докладами на конференции, другие в Open Source, а некоторые совмещают обе деятельности. И если для опытных специалистов все вполне понятно и очевидно, то новички часто задаются вопросом: «А с чего начать?».\r\n","created_at":"2022-05-23T12:06:50.459Z","published_at":"2023-03-16T08:41:46.359Z","cover_list_variant":"/vite/assets/blog_post-7eTyeLLt.webp"},{"model_name":"BlogPost","id":2214,"title":"Как добраться до первого проекта","slug":"kak-dobratsya-do-pervogo-proekta","summary":"Стоит ли начинать учиться в IT?","created_at":"2023-01-13T11:29:15.500Z","published_at":"2023-02-09T12:25:53.772Z","cover_list_variant":"/vite/assets/blog_post-7eTyeLLt.webp"}],"category":{"id":14,"name":"Дневник студента","slug":"student-diary","state":"published","created_at":"2019-02-25T13:27:09.471Z"},"mainStackCategory":{"id":7,"name":"Курсы по DevOps","slug":"devops","short_name":"DevOps","order":4,"state":"published","category_slug":"courses_devops"},"categories":[{"id":6,"name":"Мотивация","slug":"motivation","state":"published","created_at":"2016-10-06T18:31:38.903Z"},{"id":3,"name":"Истории успеха","slug":"success","state":"published","created_at":"2016-07-30T12:57:18.308Z"},{"id":14,"name":"Дневник студента","slug":"student-diary","state":"published","created_at":"2019-02-25T13:27:09.471Z"},{"id":4,"name":"Код","slug":"code","state":"published","created_at":"2016-08-23T13:33:44.258Z"},{"id":12,"name":"Карьера","slug":"career","state":"published","created_at":"2017-07-21T15:42:21.481Z"}],"relatedLandings":[{"stack":{"id":225,"slug":"devops-engineer-from-scratch","title":"DevOps-инженер с нуля","audience":"for_beginners","start_type":"weekly","pricing_model":"purchase","priority":"high","kind":"profession","state":"published","stack_state":"not_finished","order":50,"duration_in_months":14},"id":355,"slug":"devops-engineer-from-scratch","title":"DevOps-инженер с нуля","subtitle":"Полное погружение в DevOps: весь стек от Linux до Kubernetes","subtitle_for_lists":"Полное погружение в DevOps: весь стек от Linux до Kubernetes","locale":"ru","current":true,"duration_in_months_text":"14 месяцев","stack_slug":"devops-engineer-from-scratch","price_text":"от 6 792 ₽","duration_text":"14 месяцев","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk2NSwicHVyIjoiYmxvYl9pZCJ9fQ==--84278a1852c9c6fb13b80a69f395bac6e47a422e/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Cloud%20sync-bro.png"},{"stack":{"id":44,"slug":"ansible-deploy","title":"Автоматизация деплоя","audience":"for_programmers","start_type":"anytime","pricing_model":"subscription","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":1950,"duration_in_months":1},"id":76,"slug":"ansible-deploy","title":"Автоматизация деплоя","subtitle":"Навык автоматизации деплоя приложений, сокращающий время развертывания и снижающий количество ошибок в продакшене","subtitle_for_lists":"Изучите CI/CD и автоматизацию развёртывания","locale":"ru","current":true,"duration_in_months_text":"1 месяц","stack_slug":"ansible-deploy","price_text":"от 3 900 ₽","duration_text":"1 месяц","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzY0NSwicHVyIjoiYmxvYl9pZCJ9fQ==--f34b449529f04fd8689092f66f9653c47c7e1f58/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Server%20status-amico.png"},{"stack":{"id":45,"slug":"infrastructure-automation","title":"Автоматизация IT-инфраструктуры","audience":"for_programmers","start_type":"anytime","pricing_model":"subscription","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":1850,"duration_in_months":1},"id":78,"slug":"infrastructure-automation","title":"Автоматизация инфраструктуры","subtitle":"Навык, позволяющий автоматизировать развертывание и управление серверной инфраструктурой с Terraform","subtitle_for_lists":"Навык управления инфраструктурой с Terraform","locale":"ru","current":true,"duration_in_months_text":"1 месяц","stack_slug":"infrastructure-automation","price_text":"от 3 900 ₽","duration_text":"1 месяц","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk3NywicHVyIjoiYmxvYl9pZCJ9fQ==--bc5ef27286509b0ecf2f8ae6cbdce2376db3d394/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/500%20Internal%20Server%20Error-cuate.png"},{"stack":{"id":46,"slug":"local-environment-automation","title":"Автоматизация локального окружения","audience":"for_programmers","start_type":"anytime","pricing_model":"subscription","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":1800,"duration_in_months":1},"id":80,"slug":"local-environment-automation","title":"Автоматизация локального окружения","subtitle":"Навык настраивать локальное окружение с помощью специализированных инструментов для удобной и эффективной разработки","subtitle_for_lists":"Освоите настройку окружения с dev-инструментами","locale":"ru","current":true,"duration_in_months_text":"1 месяц","stack_slug":"local-environment-automation","price_text":"от 3 900 ₽","duration_text":"1 месяц","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk3MSwicHVyIjoiYmxvYl9pZCJ9fQ==--126b25f39a57b0fdbd31895236a8d1da05b80ac4/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Server-amico.png"},{"stack":{"id":129,"slug":"docker","title":"Docker","audience":"for_programmers","start_type":"anytime","pricing_model":"subscription","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":150,"duration_in_months":1},"id":217,"slug":"docker","title":"Docker","subtitle":"Навык работы с контейнерами, позволяющий оптимизировать разработку и ускорить развертывание приложений","subtitle_for_lists":"Навык работы с контейнеризацией, оптимизацией разработки и деплой","locale":"ru","current":true,"duration_in_months_text":"1 месяц","stack_slug":"docker","price_text":"от 3 900 ₽","duration_text":"1 месяц","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk2MiwicHVyIjoiYmxvYl9pZCJ9fQ==--c18877cf9396039142efbbbe6b2ab4dc6b09f18b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Cloud%20hosting-cuate.png"}]},"url":"/blog/posts/chto-ne-programmist-usvoil-iz-kursa-operatsionnye-sistemy","version":"8f286f6358a90a7bef2263b3a6edf5a90a94fa42","encryptHistory":false,"clearHistory":false}"><style data-mantine-styles="true">:root, :host{--mantine-font-family: Arial, sans-serif;--mantine-font-family-headings: Arial, sans-serif;--mantine-heading-font-weight: normal;--mantine-radius-default: 0rem;--mantine-primary-color-filled: var(--mantine-color-indigo-filled);--mantine-primary-color-filled-hover: var(--mantine-color-indigo-filled-hover);--mantine-primary-color-light: var(--mantine-color-indigo-light);--mantine-primary-color-light-hover: var(--mantine-color-indigo-light-hover);--mantine-primary-color-light-color: var(--mantine-color-indigo-light-color);--mantine-spacing-xxl: calc(4rem * var(--mantine-scale));--mantine-font-size-xs: 12px;--mantine-font-size-sm: 14px;--mantine-font-size-md: 16px;--mantine-font-size-lg: clamp(16.0000px, calc(15.2727px + 0.2273vw), 18.0000px);--mantine-font-size-xl: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-display-3: clamp(32.0000px, calc(26.1818px + 1.8182vw), 48.0000px);--mantine-font-size-display-2: clamp(36.0000px, calc(25.8182px + 3.1818vw), 64.0000px);--mantine-font-size-display-1: clamp(40.0000px, calc(25.4545px + 4.5455vw), 80.0000px);--mantine-font-size-h1: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-font-size-h2: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-font-size-h3: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-font-size-h4: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-font-size-h5: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-h6: 1rem;--mantine-primary-color-0: var(--mantine-color-indigo-0);--mantine-primary-color-1: var(--mantine-color-indigo-1);--mantine-primary-color-2: var(--mantine-color-indigo-2);--mantine-primary-color-3: var(--mantine-color-indigo-3);--mantine-primary-color-4: var(--mantine-color-indigo-4);--mantine-primary-color-5: var(--mantine-color-indigo-5);--mantine-primary-color-6: var(--mantine-color-indigo-6);--mantine-primary-color-7: var(--mantine-color-indigo-7);--mantine-primary-color-8: var(--mantine-color-indigo-8);--mantine-primary-color-9: var(--mantine-color-indigo-9);--mantine-color-red-0: #ffeaea;--mantine-color-red-1: #fed4d4;--mantine-color-red-2: #f4a7a8;--mantine-color-red-3: #ec7878;--mantine-color-red-4: #e55050;--mantine-color-red-5: #e03131;--mantine-color-red-6: #e02829;--mantine-color-red-7: #c71a1c;--mantine-color-red-8: #b21218;--mantine-color-red-9: #9c0411;--mantine-color-violet-0: #fce9ff;--mantine-color-violet-1: #f1cfff;--mantine-color-violet-2: #e09bff;--mantine-color-violet-3: #d16fff;--mantine-color-violet-4: #be37fe;--mantine-color-violet-5: #b51afe;--mantine-color-violet-6: #b009ff;--mantine-color-violet-7: #9b00e4;--mantine-color-violet-8: #8a00cc;--mantine-color-violet-9: #7800b3;--mantine-color-indigo-0: #edecff;--mantine-color-indigo-1: #d6d5fe;--mantine-color-indigo-2: #aaa9f4;--mantine-color-indigo-3: #7b79eb;--mantine-color-indigo-4: #5451e4;--mantine-color-indigo-5: #3b37e0;--mantine-color-indigo-6: #2d2adf;--mantine-color-indigo-7: #1f1ec7;--mantine-color-indigo-8: #1819b2;--mantine-color-indigo-9: #0c149e;--mantine-color-cyan-0: #dffdff;--mantine-color-cyan-1: #caf5ff;--mantine-color-cyan-2: #99e8ff;--mantine-color-cyan-3: #64daff;--mantine-color-cyan-4: #3ccffe;--mantine-color-cyan-5: #24c8fe;--mantine-color-cyan-6: #00c2ff;--mantine-color-cyan-7: #00ade4;--mantine-color-cyan-8: #009acd;--mantine-color-cyan-9: #0085b5;--mantine-color-green-0: #e9fdec;--mantine-color-green-1: #d7f6dc;--mantine-color-green-2: #b0eab9;--mantine-color-green-3: #86df94;--mantine-color-green-4: #62d574;--mantine-color-green-5: #4ccf5f;--mantine-color-green-6: #3fcc54;--mantine-color-green-7: #2fb344;--mantine-color-green-8: #25a03b;--mantine-color-green-9: #138a2e;--mantine-color-yellow-0: #fff7e2;--mantine-color-yellow-1: #ffeecd;--mantine-color-yellow-2: #ffdc9c;--mantine-color-yellow-3: #ffc966;--mantine-color-yellow-4: #feb93a;--mantine-color-yellow-5: #feae1e;--mantine-color-yellow-6: #ffa90f;--mantine-color-yellow-8: #ca8200;--mantine-color-yellow-9: #af7000;--mantine-h1-font-size: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-h1-font-weight: normal;--mantine-h2-font-size: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-h2-font-weight: normal;--mantine-h3-font-size: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-h3-font-weight: normal;--mantine-h4-font-size: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-h4-font-weight: normal;--mantine-h5-font-size: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-h5-font-weight: normal;--mantine-h6-font-size: 1rem;--mantine-h6-font-weight: normal;}
:root[data-mantine-color-scheme="dark"], :host([data-mantine-color-scheme="dark"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-dark-filled: var(--mantine-color-dark-5);--mantine-color-dark-filled-hover: var(--mantine-color-dark-6);--mantine-color-dark-light: rgba(105, 105, 105, 0.15);--mantine-color-dark-light-hover: rgba(105, 105, 105, 0.2);--mantine-color-dark-light-color: var(--mantine-color-dark-0);--mantine-color-dark-outline: var(--mantine-color-dark-1);--mantine-color-dark-outline-hover: rgba(184, 184, 184, 0.05);--mantine-color-gray-filled: var(--mantine-color-gray-5);--mantine-color-gray-filled-hover: var(--mantine-color-gray-6);--mantine-color-gray-light: rgba(222, 226, 230, 0.15);--mantine-color-gray-light-hover: rgba(222, 226, 230, 0.2);--mantine-color-gray-light-color: var(--mantine-color-gray-0);--mantine-color-gray-outline: var(--mantine-color-gray-1);--mantine-color-gray-outline-hover: rgba(241, 243, 245, 0.05);--mantine-color-red-filled: var(--mantine-color-red-5);--mantine-color-red-filled-hover: var(--mantine-color-red-6);--mantine-color-red-light: rgba(236, 120, 120, 0.15);--mantine-color-red-light-hover: rgba(236, 120, 120, 0.2);--mantine-color-red-light-color: var(--mantine-color-red-0);--mantine-color-red-outline: var(--mantine-color-red-1);--mantine-color-red-outline-hover: rgba(254, 212, 212, 0.05);--mantine-color-pink-filled: var(--mantine-color-pink-5);--mantine-color-pink-filled-hover: var(--mantine-color-pink-6);--mantine-color-pink-light: rgba(250, 162, 193, 0.15);--mantine-color-pink-light-hover: rgba(250, 162, 193, 0.2);--mantine-color-pink-light-color: var(--mantine-color-pink-0);--mantine-color-pink-outline: var(--mantine-color-pink-1);--mantine-color-pink-outline-hover: rgba(255, 222, 235, 0.05);--mantine-color-grape-filled: var(--mantine-color-grape-5);--mantine-color-grape-filled-hover: var(--mantine-color-grape-6);--mantine-color-grape-light: rgba(229, 153, 247, 0.15);--mantine-color-grape-light-hover: rgba(229, 153, 247, 0.2);--mantine-color-grape-light-color: var(--mantine-color-grape-0);--mantine-color-grape-outline: var(--mantine-color-grape-1);--mantine-color-grape-outline-hover: rgba(243, 217, 250, 0.05);--mantine-color-violet-filled: var(--mantine-color-violet-5);--mantine-color-violet-filled-hover: var(--mantine-color-violet-6);--mantine-color-violet-light: rgba(209, 111, 255, 0.15);--mantine-color-violet-light-hover: rgba(209, 111, 255, 0.2);--mantine-color-violet-light-color: var(--mantine-color-violet-0);--mantine-color-violet-outline: var(--mantine-color-violet-1);--mantine-color-violet-outline-hover: rgba(241, 207, 255, 0.05);--mantine-color-indigo-filled: var(--mantine-color-indigo-5);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-6);--mantine-color-indigo-light: rgba(123, 121, 235, 0.15);--mantine-color-indigo-light-hover: rgba(123, 121, 235, 0.2);--mantine-color-indigo-light-color: var(--mantine-color-indigo-0);--mantine-color-indigo-outline: var(--mantine-color-indigo-1);--mantine-color-indigo-outline-hover: rgba(214, 213, 254, 0.05);--mantine-color-blue-filled: var(--mantine-color-blue-5);--mantine-color-blue-filled-hover: var(--mantine-color-blue-6);--mantine-color-blue-light: rgba(116, 192, 252, 0.15);--mantine-color-blue-light-hover: rgba(116, 192, 252, 0.2);--mantine-color-blue-light-color: var(--mantine-color-blue-0);--mantine-color-blue-outline: var(--mantine-color-blue-1);--mantine-color-blue-outline-hover: rgba(208, 235, 255, 0.05);--mantine-color-cyan-filled: var(--mantine-color-cyan-5);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-6);--mantine-color-cyan-light: rgba(100, 218, 255, 0.15);--mantine-color-cyan-light-hover: rgba(100, 218, 255, 0.2);--mantine-color-cyan-light-color: var(--mantine-color-cyan-0);--mantine-color-cyan-outline: var(--mantine-color-cyan-1);--mantine-color-cyan-outline-hover: rgba(202, 245, 255, 0.05);--mantine-color-teal-filled: var(--mantine-color-teal-5);--mantine-color-teal-filled-hover: var(--mantine-color-teal-6);--mantine-color-teal-light: rgba(99, 230, 190, 0.15);--mantine-color-teal-light-hover: rgba(99, 230, 190, 0.2);--mantine-color-teal-light-color: var(--mantine-color-teal-0);--mantine-color-teal-outline: var(--mantine-color-teal-1);--mantine-color-teal-outline-hover: rgba(195, 250, 232, 0.05);--mantine-color-green-filled: var(--mantine-color-green-5);--mantine-color-green-filled-hover: var(--mantine-color-green-6);--mantine-color-green-light: rgba(134, 223, 148, 0.15);--mantine-color-green-light-hover: rgba(134, 223, 148, 0.2);--mantine-color-green-light-color: var(--mantine-color-green-0);--mantine-color-green-outline: var(--mantine-color-green-1);--mantine-color-green-outline-hover: rgba(215, 246, 220, 0.05);--mantine-color-lime-filled: var(--mantine-color-lime-5);--mantine-color-lime-filled-hover: var(--mantine-color-lime-6);--mantine-color-lime-light: rgba(192, 235, 117, 0.15);--mantine-color-lime-light-hover: rgba(192, 235, 117, 0.2);--mantine-color-lime-light-color: var(--mantine-color-lime-0);--mantine-color-lime-outline: var(--mantine-color-lime-1);--mantine-color-lime-outline-hover: rgba(233, 250, 200, 0.05);--mantine-color-yellow-filled: var(--mantine-color-yellow-5);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-6);--mantine-color-yellow-light: rgba(255, 201, 102, 0.15);--mantine-color-yellow-light-hover: rgba(255, 201, 102, 0.2);--mantine-color-yellow-light-color: var(--mantine-color-yellow-0);--mantine-color-yellow-outline: var(--mantine-color-yellow-1);--mantine-color-yellow-outline-hover: rgba(255, 238, 205, 0.05);--mantine-color-orange-filled: var(--mantine-color-orange-5);--mantine-color-orange-filled-hover: var(--mantine-color-orange-6);--mantine-color-orange-light: rgba(255, 192, 120, 0.15);--mantine-color-orange-light-hover: rgba(255, 192, 120, 0.2);--mantine-color-orange-light-color: var(--mantine-color-orange-0);--mantine-color-orange-outline: var(--mantine-color-orange-1);--mantine-color-orange-outline-hover: rgba(255, 232, 204, 0.05);--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-9) 0%, var(--mantine-color-cyan-7) 100%);--app-color-surface: #2e2e2e;}
:root[data-mantine-color-scheme="light"], :host([data-mantine-color-scheme="light"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-red-light: rgba(224, 40, 41, 0.1);--mantine-color-red-light-hover: rgba(224, 40, 41, 0.12);--mantine-color-red-outline-hover: rgba(224, 40, 41, 0.05);--mantine-color-violet-light: rgba(176, 9, 255, 0.1);--mantine-color-violet-light-hover: rgba(176, 9, 255, 0.12);--mantine-color-violet-outline-hover: rgba(176, 9, 255, 0.05);--mantine-color-indigo-light: rgba(45, 42, 223, 0.1);--mantine-color-indigo-light-hover: rgba(45, 42, 223, 0.12);--mantine-color-indigo-outline-hover: rgba(45, 42, 223, 0.05);--mantine-color-cyan-light: rgba(0, 194, 255, 0.1);--mantine-color-cyan-light-hover: rgba(0, 194, 255, 0.12);--mantine-color-cyan-outline-hover: rgba(0, 194, 255, 0.05);--mantine-color-green-light: rgba(63, 204, 84, 0.1);--mantine-color-green-light-hover: rgba(63, 204, 84, 0.12);--mantine-color-green-outline-hover: rgba(63, 204, 84, 0.05);--mantine-color-yellow-light: rgba(255, 169, 15, 0.1);--mantine-color-yellow-light-hover: rgba(255, 169, 15, 0.12);--mantine-color-yellow-outline-hover: rgba(255, 169, 15, 0.05);--app-color-surface: #f1f3f5;--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-5) 100%);}</style><style data-mantine-styles="classes">@media (max-width: 35.99375em) {.mantine-visible-from-xs {display: none !important;}}@media (min-width: 36em) {.mantine-hidden-from-xs {display: none !important;}}@media (max-width: 47.99375em) {.mantine-visible-from-sm {display: none !important;}}@media (min-width: 48em) {.mantine-hidden-from-sm {display: none !important;}}@media (max-width: 61.99375em) {.mantine-visible-from-md {display: none !important;}}@media (min-width: 62em) {.mantine-hidden-from-md {display: none !important;}}@media (max-width: 74.99375em) {.mantine-visible-from-lg {display: none !important;}}@media (min-width: 75em) {.mantine-hidden-from-lg {display: none !important;}}@media (max-width: 87.99375em) {.mantine-visible-from-xl {display: none !important;}}@media (min-width: 88em) {.mantine-hidden-from-xl {display: none !important;}}</style><script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","author":"Игорь Шипилов","name":"Что не программист усвоил из бесплатного курса от Хекслета «Операционные системы»","datePublished":"2023-01-20T09:22:55.847Z","headline":"Подытоживаю и восполняю пробелы после прохождения бесплатного курса от Хекслет «Операционные системы». Описал только то, что более-менее понял, а остальное не включил, поэтому это не пересказ курса – в этой статье не весь контент.","image":"/vite/assets/blog_post-7eTyeLLt.webp","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":3}]}</script><div style="--container-size:var(--container-size-lg);margin-top:var(--mantine-spacing-xl);height:100%" class="m_7485cace mantine-Container-root" data-size="lg" data-strategy="block"><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"position":1,"@type":"ListItem","item":{"@id":"/blog","name":"Блог Хекслета"}},{"position":2,"@type":"ListItem","item":{"@id":"/blog/categories/student-diary","name":"Дневник студента"}},{"position":3,"@type":"ListItem","item":{"@id":"/blog/posts/chto-ne-programmist-usvoil-iz-kursa-operatsionnye-sistemy","name":"Что не программист усвоил из бесплатного курса от Хекслета «Операционные системы»"}}]}</script><div style="margin-bottom:var(--mantine-spacing-xs)" class="m_8b3717df mantine-Breadcrumbs-root"><a style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:inherit" class="mantine-focus-auto m_849cf0da m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-size="sm" data-underline="hover" href="/"><div style="color:inherit" class="m_4451eb3a mantine-Center-root"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-home-link "><path d="M20.085 11.085l-8.085 -8.085l-9 9h2v7a2 2 0 0 0 2 2h4.5"></path><path d="M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 1.807 1.143"></path><path d="M20 21a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M20 16a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M15 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M21 16l-5 3l5 2"></path></svg></div></a><div class="m_3b8f2208 mantine-Breadcrumbs-separator">/</div><a style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:inherit" class="mantine-focus-auto m_849cf0da m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-size="sm" data-underline="hover" href="/blog">Блог Хекслета</a><div class="m_3b8f2208 mantine-Breadcrumbs-separator">/</div><a style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:inherit" class="mantine-focus-auto m_849cf0da m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-size="sm" data-underline="hover" href="/blog/categories/student-diary">Дневник студента</a><div class="m_3b8f2208 mantine-Breadcrumbs-separator">/</div><p style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:var(--mantine-color-dimmed)" class="mantine-focus-auto m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root" data-size="sm">Что не программист усвоил из бесплатного курса от Хекслета «Операционные системы»</p></div><style data-mantine-styles="inline">.__m__-_R_eub_{margin-bottom:var(--mantine-spacing-xs);}@media(min-width: 36em){.__m__-_R_eub_{margin-bottom:var(--mantine-spacing-xs);}}</style><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root __m__-_R_eub_"><style data-mantine-styles="inline">.__m__-_R_deub_{width:100%;}@media(min-width: 36em){.__m__-_R_deub_{width:70%;}}@media(min-width: 75em){.__m__-_R_deub_{width:75%;}}</style><div class="__m__-_R_deub_"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><h1 style="--title-fw:var(--mantine-h1-font-weight);--title-lh:var(--mantine-h1-line-height);--title-fz:var(--mantine-h1-font-size)" class="m_8a5d1357 mantine-Title-root" data-order="1">Что не программист усвоил из бесплатного курса от Хекслета «Операционные системы»</h1></div></div></div><div style="position:absolute;top:calc(18.75rem * var(--mantine-scale))" class=""></div><style data-mantine-styles="inline">.__m__-_R_2iub_{--grid-gutter:var(--mantine-spacing-xl);}</style><div class="m_410352e9 mantine-Grid-root __m__-_R_2iub_"><div class="m_dee7bd2f mantine-Grid-inner"><style data-mantine-styles="inline">.__m__-_R_dmiub_{--col-flex-grow:auto;--col-flex-basis:100%;--col-max-width:100%;}@media(min-width: 48em){.__m__-_R_dmiub_{--col-flex-grow:auto;--col-flex-basis:83.33333333333334%;--col-max-width:83.33333333333334%;}}@media(min-width: 62em){.__m__-_R_dmiub_{--col-flex-grow:auto;--col-flex-basis:66.66666666666667%;--col-max-width:66.66666666666667%;}}</style><div class="m_96bdd299 mantine-Grid-col __m__-_R_dmiub_"><div style="--stack-gap:var(--mantine-spacing-md);--stack-align:stretch;--stack-justify:flex-start;margin-bottom:var(--mantine-spacing-xl)" class="m_6d731127 mantine-Stack-root"><div class=""><div style="--group-gap:calc(0.625rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap;margin-bottom:var(--mantine-spacing-sm);color:var(--mantine-color-gray-text)" class="m_4081bf90 mantine-Group-root"><div style="--group-gap:calc(0.1875rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap;margin-inline-end:var(--mantine-spacing-lg)" class="m_4081bf90 mantine-Group-root">20 января 2023 г.</div><div style="--group-gap:calc(0.1875rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-clock "><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M12 7v5l3 3"></path></svg></div>8 минут</div><div style="--group-gap:calc(0.1875rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-thumb-up "><path d="M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3"></path></svg></div>3</div></div><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img style="--image-radius:var(--mantine-radius-md);--image-object-fit:cover;width:100%;height:100%" class="m_9e117634 mantine-Image-root" src="/vite/assets/blog_post-7eTyeLLt.webp" alt="Что не программист усвоил из бесплатного курса от Хекслета «Операционные системы»"/></div></div><div role="link" tabindex="0" style="cursor:pointer"><button style="display:block;width:100%" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Присоединяйтесь к нашему Telegram-сообществу"><div style="background-color:light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-6))" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:flex-start;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><div style="--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:auto;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-brand-telegram "><path d="M15 10l-4 4l6 6l4 -16l-18 7l4 2l2 6l3 -4"></path></svg></div>Присоединяйтесь к нашему Telegram-сообществу</div></div></button></div><div style="margin-bottom:var(--mantine-spacing-xl)" class="m_d08caa0 mantine-Typography-root"><p><strong>Подытоживаю и восполняю пробелы после прохождения бесплатного курса от Хекслет «<a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/courses/operating_systems?utm_source=hexlet&utm_medium=blog&utm_campaign=all-courses&utm_content=chto-ne-programmist-usvoil-iz-kursa-operatsionnye-sistemy&utm_term=post_200123" rel="noopener noreferrer" target="_blank">Операционные системы</a>». Описал только то, что более-менее понял, а остальное не включил, поэтому это не пересказ курса – в этой статье не весь контент.</strong></p>
<style data-mantine-styles="inline">.__m__-_R_3derddmiub_{--carousel-slide-gap:var(--mantine-spacing-xs);--carousel-slide-size:70%;}@media(min-width: 36em){.__m__-_R_3derddmiub_{--carousel-slide-gap:var(--mantine-spacing-xl);--carousel-slide-size:50%;}}</style><div style="--carousel-control-size:calc(2.5rem * var(--mantine-scale));--carousel-controls-offset:var(--mantine-spacing-sm);margin-bottom:var(--mantine-spacing-lg);padding-block:var(--mantine-spacing-sm);background:var(--app-color-surface)" class="m_17884d0f mantine-Carousel-root responsiveClassName" data-orientation="horizontal" data-include-gap-in-size="true"><div class="m_39bc3463 mantine-Carousel-controls" data-orientation="horizontal"><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="previous" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="next" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(-90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button></div><div class="m_a2dae653 mantine-Carousel-viewport" data-type="media"><div class="m_fcd81474 mantine-Carousel-container __m__-_R_3derddmiub_" data-orientation="horizontal"><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/devops-engineer-from-scratch?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">14 месяцев</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">С нуля</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">DevOps-инженер с нуля</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Полное погружение в DevOps: весь стек от Linux до Kubernetes</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk2NSwicHVyIjoiYmxvYl9pZCJ9fQ==--84278a1852c9c6fb13b80a69f395bac6e47a422e/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Cloud%20sync-bro.png" alt="DevOps-инженер с нуля" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 6 792 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/ansible-deploy?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">1 месяц</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Для продвинутых</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Автоматизация деплоя</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Изучите CI/CD и автоматизацию развёртывания</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzY0NSwicHVyIjoiYmxvYl9pZCJ9fQ==--f34b449529f04fd8689092f66f9653c47c7e1f58/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Server%20status-amico.png" alt="Автоматизация деплоя" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/infrastructure-automation?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">1 месяц</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Для продвинутых</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Автоматизация инфраструктуры</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Навык управления инфраструктурой с Terraform</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk3NywicHVyIjoiYmxvYl9pZCJ9fQ==--bc5ef27286509b0ecf2f8ae6cbdce2376db3d394/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/500%20Internal%20Server%20Error-cuate.png" alt="Автоматизация инфраструктуры" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/local-environment-automation?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">1 месяц</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Для продвинутых</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Автоматизация локального окружения</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Освоите настройку окружения с dev-инструментами</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk3MSwicHVyIjoiYmxvYl9pZCJ9fQ==--126b25f39a57b0fdbd31895236a8d1da05b80ac4/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Server-amico.png" alt="Автоматизация локального окружения" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/docker?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">1 месяц</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Для продвинутых</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Docker</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Навык работы с контейнеризацией, оптимизацией разработки и деплой</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk2MiwicHVyIjoiYmxvYl9pZCJ9fQ==--c18877cf9396039142efbbbe6b2ab4dc6b09f18b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Cloud%20hosting-cuate.png" alt="Docker" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><h2 style="--title-fw:var(--mantine-h2-font-weight);--title-lh:var(--mantine-h2-line-height);--title-fz:var(--mantine-h2-font-size);margin-bottom:var(--mantine-spacing-md);font-size:var(--mantine-font-size-h3)" class="m_8a5d1357 mantine-Title-root" data-order="2" data-responsive="true">Каталог</h2><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Полный список доступных курсов по разным направлениям</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="/vite/assets/development-BVihs_d5.png" alt="Orientation"/></div></div></div></a></div></div></div></div></div>
<h3 id="heading-3-1">Основные понятия</h3>
<p>Обозначим некоторые основные понятия, от которых будем отталкиваться в дальнейшем тексте.</p>
<p><strong>Операционная система (ОС)</strong> — это интерфейс между компьютером и человеком.</p>
<p><strong>Интерфейс</strong> – это «посредник», «переводчик», который обеспечивает взаимопонимание сторон: железо-программа-человек (например: жёсткий диск, Total Commander и Олег).</p>
<p>У каждой из этих трёх частей свой язык, а интерфейс – это способ общения частей между собой.</p>
<p><strong>Пользователь</strong> – это агент: программа или человек.</p>
<p><strong>Программа</strong> – это набор инструкций для процесса.</p>
<p><strong>Процесс</strong> – фактическое исполнение инструкций программы, то есть работающая программа, instance of a program.</p>
<p><strong>Тред (thread)</strong> – мельчайшая единица процесса. Процесс состоит из тредов.</p>
<p><strong>Задача</strong> – единица работы, которая включает в себя один или несколько процессов или тредов.</p>
<p><strong>Шина</strong> – её часто сравнивают с магистралью (highway), – это провода и соединения, позволяющие частям компьютера очень быстро обмениваться информацией друг с другом.</p>
<hr/>
<p>Операционная система помогает софту общаться с железом, а человеку с софтом. За взаимодействие software и hardware отвечает ядро ОС, а за коммуникацию человека с software отвечает пользовательский интерфейс (UI), он бывает двух видов:</p>
<ul>
<li>графический (GUI – graphical user interface): окна, иконки, курсор;</li>
<li>командная строка либо терминал (CLI – command line interface).</li>
</ul>
<p>Основные задачи ОС – это регулировать процессы. Она делает следующее:</p>
<ul>
<li>управляет запуском нескольких процессов</li>
<li>распределяет ресурсы: даёт их актуальному сейчас процессу и защищает выделенные ресурсы от других процессов</li>
<li>позволяет процессам обмениваться информацией</li>
<li>позволяет процессам синхронизироваться.</li>
</ul>
<p>ОС использует таблицы, прямо как это делают человеческие организации. Таблицы помогают операционной системе в каждый момент времени знать информацию о текущем статусе процессов, файлов и ресурсов (память, I/O), распределять и защищать выделенные ресурсы. С помощью таблиц организовывается вся работа системы.</p>
<p>В системном мышлении есть такая концепция, как «учитывать и удовлетворять интересы всех заинтересованных ролей». Чем больше интересов удовлетворено, тем система успешнее. ОС разработана так, чтобы идеально реализовывать эту идею системного мышления: она распределяет ресурсы таким образом, чтобы их постоянно хватало всем «заинтересованным», то есть всем процессам. Когда она выделила память одному процессу и к этому же блоку памяти запрашивает доступ другой процесс, ОС не даёт ему заполучить ресурс, пока предыдущий процесс не отработает столько, сколько нужно.</p>
<p>Но здесь есть оговорки и нужно много уточнять про принципы распределения ресурсов. Там на инженерном уровне встают сложные вопросы: кому (какому процессу) отдавать приоритет – может, этот новый процесс более важный и ему действительно надо передать задействованную другим процессом память, чтобы вся система не упала? Как долго он должен исполняться? Как избежать ситуации, когда всеми ресурсами пользуются самые приоритетные процессы, а остальные «голодают» (так называемое «ресурсное голодание»)?</p>
<p>Про память поговорим чуть подробнее позже по тексту.</p>
<style data-mantine-styles="inline">.__m__-_R_1dderddmiub_{--carousel-slide-gap:var(--mantine-spacing-xs);--carousel-slide-size:80%;}@media(min-width: 36em){.__m__-_R_1dderddmiub_{--carousel-slide-gap:var(--mantine-spacing-xl);--carousel-slide-size:50%;}}</style><div style="--carousel-control-size:calc(2.5rem * var(--mantine-scale));--carousel-controls-offset:var(--mantine-spacing-sm);margin-bottom:var(--mantine-spacing-lg);padding-block:var(--mantine-spacing-sm);background:var(--app-color-surface)" class="m_17884d0f mantine-Carousel-root responsiveClassName" data-orientation="horizontal" data-include-gap-in-size="true"><div class="m_39bc3463 mantine-Carousel-controls" data-orientation="horizontal"><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="previous" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="next" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(-90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button></div><div class="m_a2dae653 mantine-Carousel-viewport" data-type="media"><div class="m_fcd81474 mantine-Carousel-container __m__-_R_1dderddmiub_" data-orientation="horizontal"><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/hello-world-kak-ya-prishel-v-programmirovanie"><div style="padding-top:0rem;height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="margin-bottom:var(--mantine-spacing-sm)" class="m_599a2148 mantine-Card-section" data-first-section="true"><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img class="m_9e117634 mantine-Image-root" src="/vite/assets/blog_post-7eTyeLLt.webp" loading="lazy" alt=""Hello, World!": как я пришел в программирование"/></div></div><p style="margin-bottom:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-lg);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">"Hello, World!": как я пришел в программирование</p><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Всем привет! Меня зовут Евгений, мне 32 года. Прошло ровно полтора года, как я решил начать изуча...</p><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-sm)" class="m_4081bf90 mantine-Group-root">8 июня 2023 г.<p style="font-size:inherit" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/kak-hekslet-mozhet-pomoch-stat-chastyu-opensource-soobschestva"><div style="padding-top:0rem;height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="margin-bottom:var(--mantine-spacing-sm)" class="m_599a2148 mantine-Card-section" data-first-section="true"><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img class="m_9e117634 mantine-Image-root" src="/vite/assets/blog_post-7eTyeLLt.webp" loading="lazy" alt="Как Хекслет может помочь стать частью OpenSource сообщества"/></div></div><p style="margin-bottom:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-lg);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Как Хекслет может помочь стать частью OpenSource сообщества</p><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">У большинства программистов наступает момент, когда работа/учеба уже не приносят такого удовольст...</p><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-sm)" class="m_4081bf90 mantine-Group-root">16 марта 2023 г.<p style="font-size:inherit" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/kak-dobratsya-do-pervogo-proekta"><div style="padding-top:0rem;height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="margin-bottom:var(--mantine-spacing-sm)" class="m_599a2148 mantine-Card-section" data-first-section="true"><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img class="m_9e117634 mantine-Image-root" src="/vite/assets/blog_post-7eTyeLLt.webp" loading="lazy" alt="Как добраться до первого проекта"/></div></div><p style="margin-bottom:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-lg);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Как добраться до первого проекта</p><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Стоит ли начинать учиться в IT?</p><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-sm)" class="m_4081bf90 mantine-Group-root">9 февраля 2023 г.<p style="font-size:inherit" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></a></div></div></div></div></div>
<h3 id="heading-3-2">Процесс</h3>
<p>Жизнь процесса проходит в два этапа: создание и уничтожение. В своём жизненном цикле процесс может проходить такие состояния:</p>
<ul>
<li>Новый (создание)</li>
<li>Готов</li>
<li>Запущен</li>
<li>Заблокирован</li>
<li>Приостановлен</li>
<li>Выход (уничтожение)</li>
</ul>
<p>Когда процесс находится в состоянии «готов», «запущен» или «заблокирован», он занимает оперативную память (RAM). Состояние «приостановлен» означает, что ОС перенесла процесс во вторичную память – ведь ресурс RAM нужен другим процессам и при этом он ограничен. Вторичная память – это HDD или SSD или другое не-RAM хранилище. Такой перенос происходит, когда процесс долго простаивал в очереди, то есть пребывал в состоянии «заблокирован». Возможные причины переноса процесса из оперативной памяти: долго шёл ответ от устройства ввода-вывода (input-output, I/O), в том числе ожидание, пока человек нажмёт на кнопку «ОК».</p>
<p>Заблокированные (ожидающие) процессы ждут разного: какие-то процессы ждут ответа от пользователя, другие от видеокарты, третьи от жёсткого диска. Для оптимизации работы компьютера операционная система разносит процессы по смысловым очередям:</p>
<ul>
<li>в одной очереди стоят все процессы, ожидающие ответа от пользователя;</li>
<li>во второй очереди стоят все процессы, ожидающие ответа от видеокарты;</li>
<li>в третьей очереди стоят все процессы, ожидающие ответа от жёсткого диска.</li>
</ul>
<h3 id="heading-3-3">Процессор</h3>
<p>Всё, что происходит на компьютере, это расчёты, производимые процессором.</p>
<p><strong>Процессор</strong> (CPU) – вычислительный центр компьютера, исполняет инструкции программ. Это самая быстрая часть компьютера.</p>
<p>За работу процессора отвечает операционная система. Пока компьютер запущен, на нём выполняются какие-то процессы, поэтому процессор должен работать всегда – производить расчёты без пауз, пока есть задачи. Для этого инженеры CPU создают и постоянно улучшают его архитектуру, а разработчики ОС оптимизируют его работу так, чтобы процессор работал без остановки.</p>
<p>Проблема в том, что все остальные элементы компьютера медленнее процессора. Процессор – это как Флэш / Ртуть / Белка из «Лесной Братвы», а всё остальное в компьютере (и уж тем более человек) – это ленивец Блиц из «Зверополиса». Так как процесс – это набор инструкций и I/O постоянно обмениваются данными с CPU, а процессор справляется с задачами чрезвычайно быстро, в итоге CPU может простаивать в ожидании следующего ответа от исполняющегося сейчас процесса.</p>
<p>Нельзя, чтобы процессор простаивал! Решением стало «ставить на паузу» те процессы, которые ждут ответа от других устройств или человека. Всё время, пока процессор ждёт ответ поставленного на паузу процесса, он занимается другими задачами.</p>
<p>Например, процессор отправил данные на жёсткий диск или в сетевую карту или на экран монитора и ждёт ответа от соответствующего устройства или человека – «Нажмите ОК, чтобы продолжить». Чтобы процессор не простаивал, пока ждёт ответ, ОС моментально подкидывает ему следующую задачу (процесс или набор процессов). За счёт этого может казаться, что на компьютере одновременно работают несколько программ. Такой вот эффективный тайм-менеджмент для железа.</p>
<blockquote>
<p>Note: на современных многопроцессорных и многоядерных системах процессы действительно исполняются параллельно – каждое ядро обрабатывает свой процесс.</p>
</blockquote>
<p>Не перепутать ядра:</p>
<ul>
<li>Ядро ОС – это программа операционной системы, часть ОС, которая общается с hardware.</li>
<li>Ядро CPU – это блок обработки в процессоре (processing unit), он обрабатывает инструкции программ.</li>
</ul>
<p>Внутри каждого процесса существуют <strong>треды</strong> (thread – поток, нить). Грубо говоря, это такие мини-«процессы», которые позволяют выполнять несколько инструкций одного процесса. Каждому треду операционная система предоставляет доступ к ресурсам: время работы CPU, память, доступ к I/O и к другим ресурсам.</p>
<p>Важно уточнить, что тред – это отдельная сущность, его нельзя назвать «процессом» в прямом смысле этого слова.</p>
<p>Основные архитектуры процессоров: SISD, SIMD, MISD, MIMD.</p>
<ul>
<li>
<p>SISD (Single Instruction, Single Data)
Процессор одновременно обрабатывает только одну инструкцию и один блок данных.
ОС, разработанные под SISD:</p>
<ul>
<li>MS-DOS</li>
<li>Windows 9x (Windows 95, Windows 98 и Windows Me)</li>
<li>OS/2</li>
</ul>
</li>
<li>
<p>SIMD (Single Instruction, Multiple Data)
Компьютер обрабатывает одну инструкцию и несколько блоков данных – то есть операция одна и та же, а обрабатываемые значения разные. Такая архитектура хорошо выполняет параллельную обработку больших данных.
Хорошо подходит для работы с изображениями и видео, для научных вычислений, криптографии, сжатия данных и для многих других задач параллельной обработки.</p>
</li>
<li>
<p>MISD (Multiple Instruction, Single Data)
Один блок данных передаётся нескольким процессорам.
Это узкоспециализированная архитектура, она используется в таких задачах, как шифрование (один и тот же блок данных шифруется разными алгоритмами) или в работе отказоустойчивых систем (одна и та же программа запущена на нескольких процессорах, но с разными начальными условиями, с целью выявлять и исправлять ошибки, сравнивая результаты).</p>
</li>
<li>
<p>MIMD (Multiple Instruction, Multiple Data)</p>
<p><strong>Частные формы MIMD</strong></p>
<ul>
<li>SMP (Symmetric Multi-Processing)</li>
<li>Clusters</li>
<li>Grid Computing</li>
<li>Distributed Systems</li>
<li>и др.</li>
</ul>
<p><strong>ОС, разработанные под MIMD</strong></p>
<ul>
<li>современные Windows</li>
<li>Linux</li>
<li>MacOS</li>
</ul>
</li>
</ul>
<h3 id="heading-3-4">Память</h3>
<p>Результат вычислений и процесс (исполняемый набор инструкций от программы) хранятся в оперативной памяти (RAM).</p>
<p>Каждому процессу нужно какое-то количество оперативной памяти, чтобы быть исполненным. Но разные процессы исполняются за разное количество времени: одни процессы сложнее и потому исполняются дольше других. При этом память заполняется последовательно – автор курса сравнивает её с пустой книжной полкой, на которую слева-направо выставляются книги.</p>
<p>Представьте, что выполненный процесс – это убранная с полки книга. Вот только процессы / книги убираются не одна за другой, а из разных мест (убрали книги №1, 3, 4 и 9) и в результате на книжной полке появляются дыры, ряд книг становится похож на решето. Если мы хотим поставить толстый словарь Ожегова на пустое место, откуда недавно убрали тоненькую брошюрку, то мы не сможем этого сделать и это место будет «ждать» подходящей книги.</p>
<p>Чтобы избежать таких ситуаций ОС использует <strong>логическую память</strong>. Логическая память – это кусок памяти, которую ОС «показывает» программе, как бы убеждая её: у тебя бесконечно много памяти, используй сколько тебе надо. Физически на нашей полке остаётся всё то же решето или места вообще не остаётся. Но для процесса создаётся виртуальное пространство памяти, где вся память выделена исключительно для него и ему не надо заботиться о том, чтобы найти свободное место и не надо думать о действительно доступном объёме. Это как если бы вы пришли в библиотеку и вернули книгу или, наоборот, захотели взять её. Библиотекарь сам поставит эту книгу на нужную полку или принесёт вам книгу с нужной полки, а вам не надо беспокоиться об их расстановке. И даже если все полки библиотеки забиты, это всё равно не ваша забота.</p>
<p>Очень упрощённый пример реализации:</p>
<ol>
<li>У нас уже заняты 14 из 16 ГБ памяти (RAM).</li>
<li>Потом ОС выделяет процессу ‘A’ ещё 2 ГБ – теперь заняты 16 из 16 ГБ. Но сейчас процесс ‘A’ использует только 0.5 ГБ, а процессу ‘B’ нужны 1.5 ГБ.</li>
<li>Тогда ОС выделяет процессу ‘B’ эти 1.5 ГБ из RAM, а зарезервированные 1.5. ГБ за процессом ‘A’, но пока не используемые, отправляет на вторичное хранилище.</li>
</ol>
<p>Это выглядит так, словно бы ОС выделила 17.5 ГБ из 16 ГБ. Такое возможно благодаря виртуальной (логической) памяти.</p>
<h3 id="heading-3-5">Планирование выполнения задач</h3>
<p>Процесс пребывает в таких состояниях:</p>
<ul>
<li>Либо он не существует
Это <strong>долгосрочное планирование</strong> – ОС только собирается создать процесс.
(состояние «новый» – ещё не создан, или состояние «выход» – уже уничтожен).</li>
<li>Либо находится во вторичной памяти
Это <strong>среднесрочное планирование</strong> – ОС собирается перевести процесс из вторичной медленной память в основную быструю (в RAM).
(«готов и приостановлен» или «заблокирован и приостановлен»).</li>
<li>Либо находится в оперативной памяти
Это <strong>краткосрочное планирование</strong> – ОС собирается запустить процесс.
(ожидает запуска: «заблокирован» или «готов»).
Это самая частая задача ОС – запускать процессы.</li>
</ul>
<p>Для наглядности приведу скриншот из видеоурока курса.</p>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="https://wmpics.space/di-NT6Z.png" alt="Виды планирования.png" loading="lazy"/></p>
<p>Чтобы распределять очередь процессов, ОС использует приоритеты. Для этого есть разные алгоритмы, вот некоторые из них:</p>
<ul>
<li>
<p><strong>FCFS (First Come First Served)</strong></p>
<p>Процессы обслуживаются в порядке живой очереди.
Проблема: короткие процессы могут оказаться далеко в очереди и запускаться долго.</p>
</li>
<li>
<p><strong>Shortest Process First</strong></p>
<p>Короткие процессы запускаются вперёд.
Проблема: может начаться ресурсное голодание у долгих процессов – до них очередь может так и не дойти.</p>
</li>
<li>
<p><strong>Round Robin</strong></p>
<p>Каждому процессу выделяется равный отрезок времени на исполнение, по истечении которого процесс переносится в конец очереди
Проблемы:</p>
<ul>
<li>будут прерываться процессы, требующие постоянной поддержки (такие как текстовый редактор);</li>
<li>долгие процессы будут исполняться ещё дольше;</li>
<li>невозможно определить оптимальный отрезок времени, по истечении которого процессы должны сменять друг друга – либо CPU будет простаивать (короткие процессы будут заканчиваться раньше, чем истечёт выделенный им отрезок времени), либо ОС будет перегружена слишком частыми переключениями.</li>
</ul>
</li>
<li>
<p><strong>Shortest Remaining Time</strong></p>
<p>Приоритет отдаётся процессу, которому осталось меньше прочих времени на выполнение.
Проблема: ОС получает доп. нагрузку, так как должна рассчитывать это самое время.</p>
</li>
</ul>
<p>Чтобы ОС работала быстро и программы не тормозили, разработчики ОС применяют сочетание алгоритмов.</p>
<h3 id="heading-3-6">Ввод-вывод (I/O)</h3>
<p>Устройства ввода-вывода сильно медленнее центрального процессора, как и все составляющие компьютера. Компьютер должен работать оптимально: быстро откликаться на действия пользователя и быстро производить вычисления. Все вычисления совершает процессор, но чтобы их произвести, он должен получить данные. Такие данные приходят от устройств ввода-вывода: монитор, клавиатура, мышь, сетевая карта, видеокарта, жёсткий диск.</p>
<p>Так как эти устройства медленные, а процессор не должен простаивать, ожидая от них ответа, на общую с CPU и RAM шину инженеры установили доп. устройство – упрощённый процессор, выполняющий роль «менеджера» или «посредника». Такое устройство называют <strong>DMA (Direct Memory Access)</strong>. Представьте, что процессор – это владелец бизнеса, а DMA – это его секретарь, который отвечает на звонки, назначает встречи. DMA приносит процессору работу на блюдечке: I/O соизволило донести свои данные, DMA их получил и тут же сообщил процессору: «вот процесс, можно производить расчёты».</p>
<p>Алгоритм выглядит так:</p>
<ol>
<li>Модуль DMA получает от процессора право на проведение операции.</li>
<li>Модуль DMA переносит информацию из памяти / в память.</li>
<li>Когда информация перенесена, модуль DMA отправляет сигнал прерывания процессору и тогда процессор обрабатывает поступившую инфу.</li>
</ol>
<p>I/O по-прежнему всё ещё медленные. Проблемы:</p>
<ul>
<li>Процессы всё ещё должны дожидаться завершения операции.</li>
<li>Чтобы защититься от простоя, некоторые данные должны храниться на RAM во время операции I/O.</li>
<li>Для оптимизации, мы можем извлекать данные из памяти заранее, а записывать их позже.
ОС как бы «обещает» процессу записать файл на жёсткий диск, поэтому процесс не ждёт операцию записи и сразу же продолжает свою работу.</li>
</ul>
<p>Такая операция называется <strong>буферизация</strong>.</p>
<h3 id="heading-3-7">О чём я не написал в статье из того, о чём было сказано в курсе?</h3>
<ul>
<li><strong>Не рассказал про микроядра</strong>
Там речь о том, что операционная система может быть самостоятельным процессом. Будет ли это так, решать разработчикам операционной системы. Три типа ОС (отдельное ядро, функции ОС в пользовательских процессах, функции ОС как отдельные процессы).</li>
<li><strong>Проблемы организации процессов</strong>
deadlock, livelock, ресурсное голодание, состояние гонки и регулирование этих проблем – семафор.</li>
<li><strong>Исторические очерки</strong>
<ul>
<li>Одноядерные процессоры</li>
<li>Ныне редко используемые методы управления памятью (Fixed, Dynamic, Simple paging, Simple segmentation).</li>
</ul>
</li>
<li><strong>Наверняка не указал что-то ещё, что было в курсе</strong></li>
</ul>
<p>Я не ставил целью переписать курс. Целью статьи было уложить в своей голове то, что более-менее понял и восполнить пробелы в этих «понятных» частях. Всё, что мне совсем непонятно, я отложил на будущее.</p>
<p>Хорошо, если эта статья помогла и вам наверстать упущенное. Или же она поможет вам легче пройти курс – вы прочитали, мозг подготовился к содержимому, поэтому при просмотре лекций будет понятнее.</p>
<p>Если вы заметили ошибку или хотите что-то уточнить, пожалуйста, напишите об этом в ЛС или в комментариях.</p></div><div class=""><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-bottom:var(--mantine-spacing-lg)" class="m_4081bf90 mantine-Group-root"><div class="m_4451eb3a mantine-Center-root" data-inline="true"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:var(--mantine-spacing-xs);color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-user "><path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0"></path><path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2"></path></svg></div><p style="margin-inline-end:var(--mantine-spacing-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Игорь Шипилов</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">3 года назад</p></div><div style="align-items:center" class="m_8bffd616 mantine-Flex-root __m__-_R_5dirddmiub_"><a style="display:inline-flex" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/chto-ne-programmist-usvoil-iz-kursa-operatsionnye-sistemy/votes"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:var(--mantine-spacing-xs);color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-thumb-up "><path d="M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3"></path></svg></div></a><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">3</p></div></div></div><div style="background-color:var(--mantine-color-indigo-light);border:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding:var(--mantine-spacing-xl)" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h4)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Читайте также:</p><ul style="margin-inline-start:var(--mantine-spacing-lg)" class="m_abbac491 mantine-List-root"><li style="margin-bottom:var(--mantine-spacing-sm)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><a style="color:inherit" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/hello-world-kak-ya-prishel-v-programmirovanie">"Hello, World!": как я пришел в программирование</a></span></div></li><li style="margin-bottom:var(--mantine-spacing-sm)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><a style="color:inherit" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/kak-hekslet-mozhet-pomoch-stat-chastyu-opensource-soobschestva">Как Хекслет может помочь стать частью OpenSource сообщества</a></span></div></li><li style="margin-bottom:var(--mantine-spacing-sm)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><a style="color:inherit" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/kak-dobratsya-do-pervogo-proekta">Как добраться до первого проекта</a></span></div></li></ul></div><div style="margin-block:var(--mantine-spacing-xl)" class="m_3eebeb36 mantine-Divider-root" data-orientation="horizontal" role="separator"></div></div><div></div></div><style data-mantine-styles="inline">.__m__-_R_lmiub_{--col-flex-grow:auto;--col-flex-basis:100%;--col-max-width:100%;}@media(min-width: 48em){.__m__-_R_lmiub_{--col-flex-grow:auto;--col-flex-basis:16.666666666666668%;--col-max-width:16.666666666666668%;}}@media(min-width: 62em){.__m__-_R_lmiub_{--col-flex-grow:auto;--col-flex-basis:33.333333333333336%;--col-max-width:33.333333333333336%;}}</style><div class="m_96bdd299 mantine-Grid-col __m__-_R_lmiub_ mantine-visible-from-md"><div style="background-color:var(--mantine-color-indigo-light);border:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-bottom:var(--mantine-spacing-xl);padding:var(--mantine-spacing-xl);width:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><div style="margin-bottom:var(--mantine-spacing-md)" class="m_4451eb3a mantine-Center-root" data-inline="true"><p style="font-size:var(--mantine-font-size-h4)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Категории</p></div><ul class="m_abbac491 mantine-List-root"><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Мотивация">Мотивация</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Истории успеха">Истории успеха</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Дневник студента">Дневник студента</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Код">Код</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Карьера">Карьера</button></span></div></li></ul></div><div style="justify-content:end;margin-top:0rem;position:sticky;top:calc(5rem * var(--mantine-scale))" class="m_8bffd616 mantine-Flex-root __m__-_R_5dlmiub_"><div tabindex="0" style="cursor:pointer"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses_devops?promo_name=program_category&promo_position=blog_post&promo_creative=card&promo_type=card"><div style="background-color:var(--mantine-color-default);border:calc(0.0625rem * var(--mantine-scale)) solid var(--mantine-color-default-border);padding-inline:var(--mantine-spacing-xl);padding-top:var(--mantine-spacing-xl);padding-bottom:var(--mantine-spacing-xs);width:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><div class="m_4451eb3a mantine-Center-root" data-inline="true"><p style="font-size:var(--mantine-font-size-h4)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Курсы по DevOps</p></div><img class="m_9e117634 mantine-Image-root" src="/vite/assets/development-BVihs_d5.png"/><p style="margin-bottom:var(--mantine-spacing-xs);text-align:right" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></a></div></div></div></div></div></div></div>
</main>
<footer class="bg-dark fw-light text-light px-3 py-5">
<div class="row small">
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 mb-3">Хекслет</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/about">О нас</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/testimonials">Отзывы</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://b2b.hexlet.io" role="button">Корпоративное обучение</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/blog">Блог</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/qna">Вопросы и ответы</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/glossary">Глоссарий</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://help.hexlet.io" data-target="_blank" role="button">Справка</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" target="_blank" rel="noopener noreferrer" href="/map">Карта сайта</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 fw-normal mb-3">Направления</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_devops">DevOps
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_data_analytics">Аналитика
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_backend_development">Бэкенд
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_programming">Программирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_testing">Тестирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_front_end_dev">Фронтенд
</a></li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Профессии</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/go">Go-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/java">Java-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python">Python-разработчик </a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/data-analytics">Аналитик данных</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/qa-engineer">Инженер по ручному тестированию</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php">РНР-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/frontend">Фронтенд-разработчик</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Навыки</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python-django-developer">Django</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/docker">Docker</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php-laravel-developer">Laravel</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/postman">Postman</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-react-developer">React</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-rest-api">REST API в Node.js</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/spring-boot">Spring Boot</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/typescript">Typescript</a>
</li>
</ul>
</div>
</div>
<hr>
<div class="row">
<div class="col-12 col-sm-4 col-md-2">
<div class="fs-4">
<ul class="list-unstyled d-flex">
<li class="me-3">
<a aria-label="Telegram" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://t.me/hexlet_ru"><span class="bi bi-telegram"></span>
</a></li>
<li>
<a aria-label="Youtube" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://www.youtube.com/user/HexletUniversity"><span class="bi bi-youtube"></span>
</a></li>
</ul>
</div>
<div class="mb-2 d-flex flex-column">
<a class="link-light text-decoration-none" rel="nofollow" href="mailto:support@hexlet.io">support@hexlet.io</a>
<a class="link-light text-decoration-none py-2" target="_blank" href="https://t.me/hexlet_help_bot">t.me/hexlet_help_bot</a>
</div>
<ul class="list-unstyled d-flex">
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://hexlet.io/locale/switch?new_locale=en" data-target="_self" role="button"><span class="my-auto">EN</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 opacity-100 external-link" rel="nofollow" data-href="https://ru.hexlet.io/locale/switch?new_locale=ru" data-target="_self" role="button"><span class="my-auto">RU</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://kz.hexlet.io/locale/switch?new_locale=kz" data-target="_self" role="button"><span class="my-auto">KZ</span>
</span></li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<ul class="list-unstyled fs-4">
<li class="mb-3">
<a class="link-light text-decoration-none" href="tel:8%20800%20100%2022%2047">8 800 100 22 47</a>
<span class="d-block opacity-50 small">бесплатно по РФ</span>
</li>
<li>
<a class="link-light text-decoration-none" href="tel:%2B7%20495%20085%2021%2062">+7 495 085 21 62</a>
<span class="d-block opacity-50 small">бесплатно по Москве</span>
</li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<div class="small mb-3">Образовательные услуги оказываются на основании Л035-01298-77/01989008 от 14.03.2025</div>
<ul class="list-unstyled small">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/legal">Правовая информация</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/offer">Оферта</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/license">Лицензия</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/contacts">Контакты</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-4 small">
<div class="mb-2">
<div>ООО «<a href="/" class="text-decoration-none link-light">Хекслет Рус</a>»</div>
<div>108813 г. Москва, вн.тер.г. поселение Московский,</div>
<div>г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3</div>
<div>ОГРН 1217300010476</div>
<div>ИНН 7325174845</div>
</div>
<hr>
<div>АНО ДПО «<a href="/" class="text-decoration-none link-light">Учебный центр «Хекслет</a>»</div>
<div>119331 г. Москва, вн. тер. г. муниципальный округ</div>
<div>Ломоносовский, пр-кт Вернадского, д. 29</div>
<div>ОГРН 1247700712390</div>
<div>ИНН 7736364948</div>
</div>
</div>
</footer>
<div id="root-assistant-offcanvas"></div>
<script src="/vite/assets/assistant-Bukl1lYy.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-BrRXra1y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/MarkdownBlock-DbyKWoR_.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/shiki-V011pkdv.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-XR8Qr8kR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dist-GCHh59xr.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useIsomorphicEffect-HJ6VK0D3.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-KSp6QbZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/classnames-l6ipYlLR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/debounce-jMQ_Cf4f.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v67327c56f0bb4ef8b305cae61679db8f1769101564043" integrity="sha512-rdcWY47ByXd76cbCFzznIcEaCN71jqkWBBqlwhF1SY7KubdLKZiEGeP7AyieKZlGP9hbY/MhGrwXzJC/HulNyg==" data-cf-beacon='{"version":"2024.11.0","token":"d11015b65d11429ea6b4a2ef37dd7e0b","server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>