Управление памятью в Linux
(продолжение предыдущего поста)
1. Введение.
→ Система управления памятью в Linux контролирует, как операционная система использует оперативную память (RAM), пространство подкачки (swap) и виртуальную память.
→ Ядро гарантирует, что каждый процесс получает необходимый объём памяти, сохраняя при этом стабильность и производительность системы.
→ В Linux используется система виртуальной памяти, которая предоставляет каждому процессу собственное изолированное адресное пространство.
2. Виртуальная память
→ Виртуальная память позволяет процессам работать так, будто у них есть доступ к большому непрерывному объёму памяти — даже если физическая оперативная память меньше.
→ Linux сопоставляет виртуальную память с физической с помощью таблиц страниц.
→ Обеспечивает:
→ Изоляцию между процессами;
→ Эффективное использование оперативной памяти;
→ Поддержку крупных приложений.
3. Страничная организация памяти (paging)
→ Память разделена на небольшие блоки фиксированного размера — страницы (обычно 4 КБ).
→ Ядро загружает страницы программы в оперативную память по мере необходимости.
→ Если оперативная память заполнена, неиспользованные страницы перемещаются в пространство подкачки.
→ Страничная организация повышает эффективность многозадачности.
4. Роль блока управления памятью (MMU, Memory Management Unit)
→ MMU — это аппаратный компонент, который преобразует виртуальные адреса в физические.
→ Сохраняет преобразования в кэше, называемом TLB (Translation Lookaside Buffer, буфер ассоциативной трансляции).
→ Быстродействие доступа к памяти зависит от эффективного использования MMU и TLB.
5. Распределение физической памяти
→ В Linux используются два основных распределителя памяти:
→ Система buddy (Buddy System) — выделяет большие непрерывные блоки памяти.
→ Распределитель slab (Slab Allocator) — выделяет память для объектов ядра (inodes, дескрипторы файлов).
→ Обеспечивает минимальную фрагментацию и более быстрое выделение памяти.
6. Пространство подкачки (swap)
→ Swap — это область на диске, используемая как буфер переполнения, когда физическая оперативная память заполнена.
→ Неактивные страницы перемещаются в swap.
→ Помогает системе работать стабильно, но работает значительно медленнее, чем оперативная память.
→ Команды:
→
→
7. Зоны памяти
→ Linux разделяет физическую память на зоны в зависимости от аппаратных ограничений:
→ ZONE_DMA — память, используемая для прямого доступа к памяти (DMA).
→ ZONE_NORMAL — обычная память, доступная ядру.
→ ZONE_HIGHMEM — верхняя память, не отображаемая напрямую ядром (в 32‑битных системах).
→ Помогает ядру распределять память в зависимости от архитектуры системы.
8. Кэширование и буферы
→ Linux использует свободную память для кэширования, чтобы повысить производительность.
→ Типы:
→ Page Cache — хранит недавно использованные файлы.
→ Buffer Cache — хранит метаданные для ускоренного доступа к диску.
→ Кэшированные данные автоматически освобождаются, когда программам требуется больше памяти.
9. OOM Killer (Out‑of‑Memory Killer, «убийца при нехватке памяти»)
→ Когда память и swap полностью использованы, Linux запускает OOM Killer.
→ Выбирает и завершает процессы, потребляющие много памяти, чтобы освободить оперативную память.
→ Предотвращает зависание системы.
10. Инструменты мониторинга памяти
→ Распространённые команды для проверки использования памяти:
→
→
→
→
→
11. Интерфейсы памяти в /proc
→ Linux предоставляет информацию о памяти через файловую систему proc:
→
→
→
(продолжение предыдущего поста)
1. Введение.
→ Система управления памятью в Linux контролирует, как операционная система использует оперативную память (RAM), пространство подкачки (swap) и виртуальную память.
→ Ядро гарантирует, что каждый процесс получает необходимый объём памяти, сохраняя при этом стабильность и производительность системы.
→ В Linux используется система виртуальной памяти, которая предоставляет каждому процессу собственное изолированное адресное пространство.
2. Виртуальная память
→ Виртуальная память позволяет процессам работать так, будто у них есть доступ к большому непрерывному объёму памяти — даже если физическая оперативная память меньше.
→ Linux сопоставляет виртуальную память с физической с помощью таблиц страниц.
→ Обеспечивает:
→ Изоляцию между процессами;
→ Эффективное использование оперативной памяти;
→ Поддержку крупных приложений.
3. Страничная организация памяти (paging)
→ Память разделена на небольшие блоки фиксированного размера — страницы (обычно 4 КБ).
→ Ядро загружает страницы программы в оперативную память по мере необходимости.
→ Если оперативная память заполнена, неиспользованные страницы перемещаются в пространство подкачки.
→ Страничная организация повышает эффективность многозадачности.
4. Роль блока управления памятью (MMU, Memory Management Unit)
→ MMU — это аппаратный компонент, который преобразует виртуальные адреса в физические.
→ Сохраняет преобразования в кэше, называемом TLB (Translation Lookaside Buffer, буфер ассоциативной трансляции).
→ Быстродействие доступа к памяти зависит от эффективного использования MMU и TLB.
5. Распределение физической памяти
→ В Linux используются два основных распределителя памяти:
→ Система buddy (Buddy System) — выделяет большие непрерывные блоки памяти.
→ Распределитель slab (Slab Allocator) — выделяет память для объектов ядра (inodes, дескрипторы файлов).
→ Обеспечивает минимальную фрагментацию и более быстрое выделение памяти.
6. Пространство подкачки (swap)
→ Swap — это область на диске, используемая как буфер переполнения, когда физическая оперативная память заполнена.
→ Неактивные страницы перемещаются в swap.
→ Помогает системе работать стабильно, но работает значительно медленнее, чем оперативная память.
→ Команды:
→
swapon -s — просмотр информации о swap; →
free -h — проверка использования swap.7. Зоны памяти
→ Linux разделяет физическую память на зоны в зависимости от аппаратных ограничений:
→ ZONE_DMA — память, используемая для прямого доступа к памяти (DMA).
→ ZONE_NORMAL — обычная память, доступная ядру.
→ ZONE_HIGHMEM — верхняя память, не отображаемая напрямую ядром (в 32‑битных системах).
→ Помогает ядру распределять память в зависимости от архитектуры системы.
8. Кэширование и буферы
→ Linux использует свободную память для кэширования, чтобы повысить производительность.
→ Типы:
→ Page Cache — хранит недавно использованные файлы.
→ Buffer Cache — хранит метаданные для ускоренного доступа к диску.
→ Кэшированные данные автоматически освобождаются, когда программам требуется больше памяти.
9. OOM Killer (Out‑of‑Memory Killer, «убийца при нехватке памяти»)
→ Когда память и swap полностью использованы, Linux запускает OOM Killer.
→ Выбирает и завершает процессы, потребляющие много памяти, чтобы освободить оперативную память.
→ Предотвращает зависание системы.
10. Инструменты мониторинга памяти
→ Распространённые команды для проверки использования памяти:
→
free -h — обзор оперативной памяти и swap; →
top — использование памяти процессами в реальном времени; →
htop — интерактивный монитор памяти; →
vmstat — статистика виртуальной памяти; →
cat /proc/meminfo — подробная информация о памяти.11. Интерфейсы памяти в /proc
→ Linux предоставляет информацию о памяти через файловую систему proc:
→
/proc/meminfo — обзор памяти; →
/proc/<pid>/maps — структура памяти процесса; →
/proc/<pid>/smaps — детальное использование по сегментам памяти.❤8👍2💯2
→ Полезно для отладки утечек памяти и анализа распределения памяти процессами.
12. NUMA (Non‑Uniform Memory Access, неоднородный доступ к памяти)
→ На серверах с несколькими процессорами время доступа к памяти зависит от процессора.
→ Linux поддерживает распределение памяти с учётом NUMA для оптимизации производительности.
→ Гарантирует, что процессы используют память, расположенную ближе к процессору, на котором они выполняются.
12. NUMA (Non‑Uniform Memory Access, неоднородный доступ к памяти)
→ На серверах с несколькими процессорами время доступа к памяти зависит от процессора.
→ Linux поддерживает распределение памяти с учётом NUMA для оптимизации производительности.
→ Гарантирует, что процессы используют память, расположенную ближе к процессору, на котором они выполняются.
Telegram
METANIT.COM
Управление памятью в Linux
(продолжение в следующем посте)
(продолжение в следующем посте)
❤6🔥1🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
Теория графов наглядно на примере кубика-рубика
🤓32🤔17❤6👍3🤯3😐1
Хабр и ЭКОПСИ провели масштабное исследование на основании опроса более 30000 айтишников и составили новый рейтинг IT-брендов работодателей.
Основные тренды: компании перестраиваются, команды меняются, новых работодателей почти нет, а конкуренция обострилась и среди специалистов, и среди компаний, рост зарплат в IT-сфере замер, повышение производительности труда (прежде всего, за счёт сокращения издержек). Из-за высокой ключевой ставки ЦБ многим закредитованным компаниям трудно поддерживать инвестпроекты и развивать новые направления. В результате за этот год мы увидели серию масштабных сокращений сотрудников. Часть компаний прекратила активный найм, другие существенно сокращают бюджеты на «нецелевые расходы».
1-ое место рейтинга заняла Авиасейлс (привлекательность — 91%, узнаваемость — 97%). Авито на 2-м (привлекательность — 88%, узнаваемость — 98%). На 3-м месте 2ГИС: ее привлекательность — 86%, узнаваемость — 97%.
Полный обзор: https://habr.com/ru/specials/965986/
Основные тренды: компании перестраиваются, команды меняются, новых работодателей почти нет, а конкуренция обострилась и среди специалистов, и среди компаний, рост зарплат в IT-сфере замер, повышение производительности труда (прежде всего, за счёт сокращения издержек). Из-за высокой ключевой ставки ЦБ многим закредитованным компаниям трудно поддерживать инвестпроекты и развивать новые направления. В результате за этот год мы увидели серию масштабных сокращений сотрудников. Часть компаний прекратила активный найм, другие существенно сокращают бюджеты на «нецелевые расходы».
1-ое место рейтинга заняла Авиасейлс (привлекательность — 91%, узнаваемость — 97%). Авито на 2-м (привлекательность — 88%, узнаваемость — 98%). На 3-м месте 2ГИС: ее привлекательность — 86%, узнаваемость — 97%.
Полный обзор: https://habr.com/ru/specials/965986/
🔥2🥰2👏1😁1
Rust опередил C/C++ по объёму кода, добавляемого в платформу Android
Использование Rust при разработке системных компонентов Android началось в 2020 году. В 2025 году объём нового кода на Rust в Android превысил объём добавляемого за год кода на C и C++.
Кроме того, в 2025 году впервые доля уязвимостей, вызванных ошибками при работе с памятью, оказалось меньше 20% от общего числа уязвимостей. Для сравнения в 2024 году этот показатель в Android составлял 24%, а в 2019 году - 76%. При этом средний показатель по индустрии продолжает оставаться на уровне 70%.
Также внедрение Rust положительно повлияло на скорость, продуктивность и качество разработки. Для кода на Rust зафиксировано в 4 раза меньше откатов изменений в результате выявления непредвиденных ошибок, а также снижение времени рецензирования на 25%.
https://security.googleblog.com/2025/11/rust-in-android-move-fast-fix-things.html
Использование Rust при разработке системных компонентов Android началось в 2020 году. В 2025 году объём нового кода на Rust в Android превысил объём добавляемого за год кода на C и C++.
Кроме того, в 2025 году впервые доля уязвимостей, вызванных ошибками при работе с памятью, оказалось меньше 20% от общего числа уязвимостей. Для сравнения в 2024 году этот показатель в Android составлял 24%, а в 2019 году - 76%. При этом средний показатель по индустрии продолжает оставаться на уровне 70%.
Также внедрение Rust положительно повлияло на скорость, продуктивность и качество разработки. Для кода на Rust зафиксировано в 4 раза меньше откатов изменений в результате выявления непредвиденных ошибок, а также снижение времени рецензирования на 25%.
https://security.googleblog.com/2025/11/rust-in-android-move-fast-fix-things.html
❤26🤮15👍4🔥2🤔2👎1💊1
Пример стека микросервисов для продакшена
1. API‑шлюз (API Gateway)
Единая точка входа для всех клиентских запросов. Обеспечивает маршрутизацию, фильтрацию и балансировку нагрузки.
2. Реестр сервисов (Service Registry)
Каталог всех доступных сервисов. Шлюз использует его для обнаружения сервисов. Примеры: Consul, Eureka, Zookeeper.
3. Сервисный слой (Service Layer)
Отдельные микросервисы, выполняющие конкретные бизнес‑функции.
4. Сервер авторизации (Authorization Server)
Обеспечивает безопасность микросервисов и управляет контролем доступа.
5. Хранилище данных
Базы данных приложения.
6. Распределённое кэширование
Повышает производительность за счёт уровней кэширования.
7. Асинхронная коммуникация
Очереди сообщений обеспечивают асинхронное взаимодействие между сервисами.
8. Визуализация метрик
Сервисы передают метрики в Prometheus, которые отображаются на панелях Grafana.
9. Агрегация логов
Централизованное логирование с использованием стека ELK.
1. API‑шлюз (API Gateway)
Единая точка входа для всех клиентских запросов. Обеспечивает маршрутизацию, фильтрацию и балансировку нагрузки.
2. Реестр сервисов (Service Registry)
Каталог всех доступных сервисов. Шлюз использует его для обнаружения сервисов. Примеры: Consul, Eureka, Zookeeper.
3. Сервисный слой (Service Layer)
Отдельные микросервисы, выполняющие конкретные бизнес‑функции.
4. Сервер авторизации (Authorization Server)
Обеспечивает безопасность микросервисов и управляет контролем доступа.
5. Хранилище данных
Базы данных приложения.
6. Распределённое кэширование
Повышает производительность за счёт уровней кэширования.
7. Асинхронная коммуникация
Очереди сообщений обеспечивают асинхронное взаимодействие между сервисами.
8. Визуализация метрик
Сервисы передают метрики в Prometheus, которые отображаются на панелях Grafana.
9. Агрегация логов
Централизованное логирование с использованием стека ELK.
❤🔥4👍4❤2🤡1
Machine Learning vs Deep Learning vs Generative AI (Машинное обучение vs Глубокое обучение vs Генеративный ИИ)
(продолжение в следующем посте)
(продолжение в следующем посте)
❤1👍1
Machine Learning vs Deep Learning vs Generative AI (Машинное обучение vs Глубокое обучение vs Генеративный ИИ)
(продолжение предыдущего поста)
В чем реальная разница? Краткий обзор:
1️⃣ Машинное обучение (ML)
* Работает с структурированными данными (например, CSV‑файлы, файлы Excel).
* Использует простые алгоритмы, такие как деревья решений, метод опорных векторов (SVM) и др.
* Лучше всего подходит для таких задач, как выявление мошенничества, одобрение кредитов, классификация спама.
* Быстрое обучение, простая интерпретация результатов.
* Инструменты: scikit‑learn, XGBoost.
2️⃣ Глубокое обучение (DL)
* Подраздел машинного обучения, использующий нейронные сети (CNN, RNN, трансформеры).
* Работает со сложными данными — изображениями, аудио, длинными текстами.
* Лежит в основе систем распознавания лиц, голосовых помощников, машинного перевода.
* Требует больше вычислительных ресурсов и данных.
* Инструменты: TensorFlow, PyTorch, Keras.
3️⃣ Генеративный ИИ (GenAI)
* Подраздел глубокого обучения, создающий новый контент — текст, изображения, видео.
* Построен на трансформерах, таких как GPT, DALL·E, Stable Diffusion.
* Лежит в основе ChatGPT, Claude, Midjourney.
* Требует огромных объёмов данных и графических процессоров (GPU)/тензорных процессоров (TPU).
* Результат — не просто метка, а полноценный контент.
* Инструменты: Hugging Face, OpenAI API, Midjourney.
(продолжение предыдущего поста)
В чем реальная разница? Краткий обзор:
1️⃣ Машинное обучение (ML)
* Работает с структурированными данными (например, CSV‑файлы, файлы Excel).
* Использует простые алгоритмы, такие как деревья решений, метод опорных векторов (SVM) и др.
* Лучше всего подходит для таких задач, как выявление мошенничества, одобрение кредитов, классификация спама.
* Быстрое обучение, простая интерпретация результатов.
* Инструменты: scikit‑learn, XGBoost.
2️⃣ Глубокое обучение (DL)
* Подраздел машинного обучения, использующий нейронные сети (CNN, RNN, трансформеры).
* Работает со сложными данными — изображениями, аудио, длинными текстами.
* Лежит в основе систем распознавания лиц, голосовых помощников, машинного перевода.
* Требует больше вычислительных ресурсов и данных.
* Инструменты: TensorFlow, PyTorch, Keras.
3️⃣ Генеративный ИИ (GenAI)
* Подраздел глубокого обучения, создающий новый контент — текст, изображения, видео.
* Построен на трансформерах, таких как GPT, DALL·E, Stable Diffusion.
* Лежит в основе ChatGPT, Claude, Midjourney.
* Требует огромных объёмов данных и графических процессоров (GPU)/тензорных процессоров (TPU).
* Результат — не просто метка, а полноценный контент.
* Инструменты: Hugging Face, OpenAI API, Midjourney.
Telegram
METANIT.COM
Machine Learning vs Deep Learning vs Generative AI (Машинное обучение vs Глубокое обучение vs Генеративный ИИ)
(продолжение в следующем посте)
(продолжение в следующем посте)
❤1👍1
В руководство по языку C# и .NET добавлены новые статьи:
Определение составных операторов присваивания
https://metanit.com/sharp/tutorial/3.63.php
Типизированные блоки расширений
https://metanit.com/sharp/tutorial/3.64.php
#csharp #dotnet
Определение составных операторов присваивания
https://metanit.com/sharp/tutorial/3.63.php
Типизированные блоки расширений
https://metanit.com/sharp/tutorial/3.64.php
#csharp #dotnet
❤25👍10🫡3🤮2