Рубрика «виртуальная память»
Иллюзия памяти: как индустрия десятилетиями маскировала ограничения железа
2026-05-12 в 13:01, admin, рубрики: cxl, distributed systems, HBM, latency, raid, redis, ruvds_статьи, виртуальная память, кэширование, памятьКак работает компьютер. Простая статья для начинающих программистов
2025-11-09 в 15:58, admin, рубрики: api, gpu, векторные операции, виртуальная память, интерпретаторы, компиляция, кэш, Параллелизм, процессор, регистрВ этой статье изложено всё, что нужно знать об устройстве компьютера с точки зрения программиста. А именно:
-
для чего нужен тактовый генератор, регистры, кэши и виртуальная память
-
что такое архитектура процессора
-
что такое машинный код и код ассемблера
-
чем отличается компиляция в машинный код в C, C++ или Rust от компиляции в байт-код виртуальной машины в языках типа Java и C#; в чём их отличие от интерпретируемых языков вроде JavaScript или Python
-
что такое динамические и статические библиотеки (.dll/.so, .lib/.a); что такое фреймворк
-
что такое API и web-API
Ассемблер: рассматриваем каждый байт «Hello, World!». Как на самом деле работают программы на уровне процессора и ОС
2025-08-26 в 8:05, admin, рубрики: elf, linux, timeweb_статьи, ассемблер, библиотеки, виртуальная память, компиляция, низкоуровневое программирование, Си, системный вызов❯ Глоссарий
-
Ассемблер — программа, которая преобразует (транслирует) код, написанный на языке ассемблера в машинный код;
-
Язык Ассемблера — низкоуровневый язык программирования, где машинный инструкции (числа) заменены на мнемоники (слова) для удобства человека.
-
Программа — текстовый файл, который содержит в себе код на каком либо из языков программирования;
-
Процесс — абстракция операционной системы, позволяющая следить и управлять ходом выполнения программы;
❯ Введение: что будет в статье?
Введение в память, мотивация виртуальной, отображение между физической и виртуальной
2025-05-29 в 14:16, admin, рубрики: c++, call stack, concurrency, heap, rip, виртуальная память, операционные системыДля начала рассмотрите картинку ниже:
Структуры данных для программистов игр: bulk data
2019-10-04 в 4:23, admin, рубрики: bulk data, C, c++, виртуальная память, Клиентская оптимизация, массивы, массивы структур, Программирование, разработка игр, структуры данных, структуры массивов, указатели
Любому программисту будет полезно понимание различных структур данных и способов анализа их производительности. Но на практике мне ни разу не пригождались АВЛ-деревья, красно-чёрные деревья, префиксные деревья, списки с пропусками, и т.д. Некоторые структуры данных я использую только для одного конкретного алгоритма и ни для чего больше (например, кучи для реализации очереди с приоритетом в алгоритме поиска пути A*).
В повседневной работе я обычно обхожусь на удивление малым количеством структур данных. Чаще всего мне пригождаются:
- Общие массивы данных (Bulk data) — способ эффективного хранения большого количества объектов.
- Слабые ссылки (Weak reference) (или дескрипторы (handle)) — способ обращения к объектам в bulk data без сбоев программы в случае, если объект удалён.
- Индексы — способ быстрого доступа к отдельным подмножествам в bulk data.
- Массивы массивов — способ хранения объектов bulk data с динамическими размерами.
Я посвящу несколько статей тому, как я обычно реализую все эти структуры. Давайте начнём с простейшей и самой полезной — bulk data.Читать полностью »
Разработка Unix подобной OS — Виртуальное адресное пространство (6)
2019-09-17 в 12:13, admin, рубрики: C, адресное пространство, виртуальная память, как создать свою ос, системное программирование, ядроВ предыдущей статье мы рассмотрели основы работы в защищенном режиме IA-32. Сегодня пришла пора научиться работать с виртуальным адресным пространством.
Читать полностью »
Пишем операционную систему на Rust. Реализация страничной памяти (новый вариант)
2019-03-27 в 18:03, admin, рубрики: Rust, x86, виртуальная память, операционная система, отображение полной памяти, рекурсивные таблицы страниц, системное программирование, страничная организация памяти, трансляция адресов, ядро ОСВ этой статье разберёмся, как реализовать поддержку страничной памяти в нашем ядре. Сначала изучим различные методы, чтобы фреймы физической таблицы страниц стали доступны ядру, и обсудим их преимущества и недостатки. Затем реализуем функцию преобразования адресов и функцию создания нового сопоставления.
Этот цикл статей опубликован выложен на GitHub. Если у вас какие-то вопросы или проблемы, открывайте там соответствующий тикет. Все исходники для статьи лежат в этой ветке.
Ещё одна статья о страничной организации памяти?
Если вы следите за этим циклом, то видели статью «Страничная память: продвинутый уровень» в конце января. Но меня раскритиковали за рекурсивные таблицы страниц. Поэтому решил переписать статью, применив иной подход для доступа к фреймам.
Читать полностью »
Операционная система на Rust. Страничная память: продвинутый уровень
2019-02-05 в 18:35, admin, рубрики: Rust, виртуальная память, операционная система x86, рекурсивные таблицы страниц, системное программирование, страничная организация памяти, трансляция адресов, ядро ОСВ этой статье объясняется, как ядру операционной системы получить доступ к фреймам физической памяти. Изучим функцию для преобразования виртуальных адресов в физические. Также разберёмся, как создавать новые сопоставления в таблицах страниц.
Этот блог выложен на GitHub. Если у вас какие-то вопросы или проблемы, открывайте там соответствующий тикет. Все исходники для статьи здесь.
Введение
Из прошлой статьи мы узнали о принципах страничной организации памяти и о том, как работают четырёхуровневые страничные таблицы на x86_64. Мы также обнаружили, что загрузчик уже настроил иерархию таблиц страниц для нашего ядра, поэтому ядро работает на виртуальных адресах. Это повышает безопасность, но возникает проблема: как получить доступ к настоящим физическим адресам, которые хранятся в записях таблицы страниц или регистре CR3?
Читать полностью »
Фантом: большая сборка мусора
2017-06-29 в 16:56, admin, рубрики: Алгоритмы, виртуальная память, Компиляторы, персистентность, Программирование, сборка мусора, системное программированиеЭта статья — продолжение, начало здесь. Для тех, кто не кликнул на ссылку, краткая вводная:
Мы обсуждаем сборку мусора в операционной системе Фантом, то есть в среде виртуальной (байткод-) машины, работающей в персистентной оперативной памяти. Размер персистентной памяти — порядка размера диска, то есть единицы терабайт на сегодня и, потенциально, десятки и сотни терабайт завтра.
Поскольку речь идёт о виртуальной памяти, то существенная часть объектов в любом случае находится не в оперативной памяти, независимо от того, какой алгоритм и вообще подход мы избрали. То есть — стоимость доступа к объекту велика. Это, в общем случае, дисковая операция.
Кроме того, следует ожидать, что в сетевой среде совокупности таких виртуальных машин будут обмениваться прокси-объектами, то есть будет существовать граф объектов, растянутый на много машин в сети и, конечно, во всём этом кошмаре потенциально потребуется уметь собирать мусор не только на одной машине, но и по сети.
Принятая мной идея схемы сборки мусора в такой среде выглядит как совокупность двух сборщиков.
Читать полностью »
Эксперимент: ищем int i = 0xDEADBEEF в дампе физической памяти
2017-02-27 в 10:17, admin, рубрики: kd, windbg, адресация, виртуальная память, отладка, разработка под windows, системное программирование, метки: адресация
Изучение виртуального адресного пространства и алгоритма преобразования адресов заметно упростится, если начать с несложного практического примера. Для этого напишем простую программу, выводящую адрес локальной переменной:
int main()
{
unsigned i = 0xDEADBEEF;
std::cout << "address of i is " << std::hex << &i;
std::cin.get(); //Чтобы процесс не завершился
return 0;
}
Затем попробуем найти физический адрес и просмотреть значение по этому адресу.

