Когда вы начинаете изучение чего угодно вы сталкиваетесь с абстракциями — они помогают убрать отдельные сложности и/или неточности присущие реальным вещам. Из-за этого перед погружением в “глубь” материала вы становитесь способны понимать почему механизмы реализованы именно так, а не по другому.

Похожая логика встречается и тогда, когда вам нужно некое изолированное пространство(будь то окружение в компьютере или окружение для естественнонаучного эксперимента). В таком случае вы сможете сделать полезную работу изначально опираясь на какие-то гарантии.

Виртуализация

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

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

Контейнеризация

Контейнеры это yet another слой абстракций в операционных системах. Во многих задачах вам может понадобиться “чистое” окружение — не обремененное тысячами установленных когда-то зависимостей, нагрузкой сторонних процессов и прочим. Для этого существует специальный инструмент “зашитый” в операционную систему, который называется cgroups. Но перед этим нам стоит поговорить о том как организован контроль над ресурсами в Linux(потому что именно на нем большинству из вас предстоит вести свою разработку).

Linux Namespcaces

У каждого инстанса существует 7 пространств имен

  1. PID Namespace — отвечает за разграничение id для процессов в системе. По большему счету обеспечивает создание и маунт /procспециальной файловой системе.
  2. Mount Namespace — изолирует ресурсы файловых систем. Особенно важно обратить внимание на точки монтирования
  3. Network Namespace — изолирует все что связано с сетью — маршруты, файрволы, сокеты, etc.
  4. IPC Namespace — разделяет примитивы для межпроцессного взаимодействия. Например семафоры, общая память и очереди сообщений
  5. UTS Namespace — изоляция обеспечивающая каждый контейнер именем и NIS domain name
  6. User Namespace — создает изоляцию для пользователей и групп
  7. Cgroup Namespace — а вот об этом поподробнее

Cgroup

CGroup расшифровывается как control group и позволяет ограничивать для группы доступы к ресурсам(CPU, память, сеть, etc.).

Наличие такого функционала поможет нам избежать критических проблем с избыточным использованием ресурсов