РЕФЕРАТ 6
ВВЕДЕНИЕ 9
Определения, обозначения и сокращения 11
1 Анализ предметной области 13
1.1 Процесс сборки мусора 13
1.2 Требования к языку и системе 18
1.3 Достоинства и недостатки автоматической сборки мусора 19
1.4 Реализация алгоритма для языков программирования С/С++ 22
1.5 Реализация доступа к памяти для сборки мусора 27
1.6 Особенности микропроцессорной архитектуры SPARC 29
1.7 Особенности микропроцессорной архитектуры «Эльбрус» 35
2 Постановка задачи 41
2.1 Постановка задачи организации доступа к памяти для архитектуры
микропроцессора «Эльбрус» 41
2.2 Тестирование реализации алгоритма и анализ результатов 41
2.3 Кроссплатформенная сборка 42
2.4 Оптимизация решения 42
3 Изучение реализованных методик решений 44
3.1 Описание существующих аналогов 45
3.2 Особенности организации памяти микропроцессора «Эльбрус».. 55
4 Реализация сборки мусора для новых платформ 61
4.1 Принцип платформенных реализаций 61
4.2 Структура архитектурно-зависимых частей 62
4.3 Описание операционной системы и процессора в заголовочных
файлах (gcconfig.h, gc_priv.h, gc.h) 64
4.4 Реализация доступа к процедурному стеку для архитектуры
«Эльбрус» 67
4.5 Определение границ обрабатываемой памяти (os_dep.c) 71
4.6 Передача данных о границах процедурного стека (mach_dep.c)... 72
4.7 Операция «Остановки мира» (pthread_stop_world.c) 72
4.8 Маркировка участков памяти (mark_rts.c) 73
5 Тестирование реализации и анализ результатов 74
5.1 Проведение внутренних тестов сборщика мусора 74
5.2 Сравнение результатов на Эльбрусе и на Intel 75
5.3 Выводы по проведенным тестированиям 75
6 Кроссплатформенная сборка 76
6.1 Особенности кроссплатформенной сборки для архитектуры
«Эльбрус» 76
6.2 Уровни оптимизации компилятора 77
6.3 Сборка под различные архитектуры (E2K, x86, SPARC) 79
7 Использование и дальнейшая оптимизация решения 81
7.1 Применение сборщика мусора на сторонних приложениях 81
7.2 Оптимизация решения на основе результатов эксплуатации 83
7.3 Результаты проведенной оптимизации 85
ЗАКЛЮЧЕНИЕ 86
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 87
ПРИЛОЖЕНИЕ А. Графическая часть магистерской диссертации 89
Память является одним из самых важных ресурсов компьютера, и в силу того, что она имеет ограничения по размеру, программисту необходимо предусматривать способы ее очистки.
Первичным вариантом для освобождения ресурсов является ручное управление памятью. Сущность метода заключается в том, что программист для создания объекта в динамической памяти явно вызывает команду выделения памяти. Данная команда возвращает указатель на выделенную область памяти, который сохраняется и используется для доступа к ней. До тех пор, пока объект нужен для работы программы, программа обращается к нему через ранее сохраненный указатель. Когда надобность в объекте проходит, то программист явно вызывает команду освобождения памяти, передавая указатель на удаляемый объект. В любом языке, допускающем создание объектов в динамической памяти, потенциально возможны две проблемы: висячие ссылки и утечки памяти.
Висячие ссылки - это оставшаяся в использовании ссылка на объект, который уже удален. После удаления объекта все сохранившиеся в программе ссылки на него становятся «висячими». Память, занимаемая ранее объектом, может быть передана операционной системе и стать недоступной, или быть использована для размещения нового объекта в той же программе. В первом случае попытка обратиться по «повисшей» ссылке приведет к срабатыванию механизма защиты памяти и аварийной остановке программы, а во втором - к непредсказуемым последствиям.
Создав объект в динамической памяти, программист может не удалить его после завершения использования. Если ссылающийся на объект переменной будет присвоено новое значение и на объект других ссылок нет, он становится программно недоступным, но продолжает занимать память, поскольку команда его удаления не вызывалась. Данная ситуация называется утечкой памяти.
Приведенные проблемы ручного управления памятью послужили основой для создания автоматического процесса, который бы решал данные задачи. Сборка мусора - технология, которая позволяет с одной стороны, упростить программирование, избавив программиста от необходимости вручную удалять объекты, созданные в динамической памяти, с другой - устранять ошибки, вызванные неправильным ручным управлением памятью.
Если бы память компьютера была бесконечной, можно было бы просто оставлять ненужные объекты в памяти. Процесс сборки мусора является эмуляцией такого бесконечного компьютера на конечной памяти. Из этого следует: если во время загрузки программы доступно больше оперативной памяти, чем может потребоваться для работы, то сборщик мусора не будет выполнять процесс по очистки памяти. Таким образом, менеджер памяти будет выделять память программе, как только она потребуется, и, по условиям, это выделение всегда будет успешным, то есть, если компьютер имеет больше оперативной памяти, чем это требуется программе, то эмуляция бесконечной памяти не нужна.
В системе со сборкой мусора обязанность освобождения памяти от объектов, которые больше не используются, возлагаются на среду исполнения программы. Программист лишь создает динамические объекты и пользуется ими. Все вопросы, связанные с удалением объектов, решаются средой разработки. Для осуществления сборки мусора в состав среды исполнения включается специальный программный модуль, называемый сборщиком мусора. Этот модуль периодически запускается, определяет, какие из созданных в динамической памяти объектов более не используется, и по необходимости освобождает занимаемую ими память.
В силу того, что сборщик мусора работает напрямую с памятью компьютера, такому модулю памяти необходимо иметь прямой доступ аппаратным и процедурным стекам памяти. Организация памяти в компьютере напрямую зависит от архитектуры процессора и операционной системы.
При выполнении работы были решены поставленные задачи и достигнута заявленная цель. Сборщик мусора полностью портирован под архитектуру микропроцессора «Эльбрус» и добавлен в состав дистрибутива.
Для осуществления поставленной цели в ходе работы были решены следующие задачи:
- реализован доступ сборщику мусора к процедурному стеку путем использования аппаратурных операций откачки регистрового файла;
- осуществлен доступ к стеку вызовов и управляемой куче посредством получения данных из файловой системы, содержащей информацию о системных процессах;
- проведены внутренние тестирования сборщика мусора и анализ полученных результатов путем сравнения с реализациями на других архитектурах;
- реализована кроссплатформенная сборка адаптируемого программного пакета под архитектуры E2K, SPARC и x86;
- проведена эксплуатация сборщика мусора на стороннем приложении;
- на основе профилирования работы стороннего программного приложения проведена оптимизация решения;
- выявлено ускорение работы сборщика мусора с новыми модификациями;
- полностью адаптированный сборщик мусора добавлен в состав дистрибутива.
1. Велихов Е. П. Сергей Алексеевич Лебедев // Информационные технологии и вычислительные системы. — 2002. — № 3. — 31-35 с.
2. Бурцев В. С. Параллелизм вычислительных процессов и развитие архитектуры ЭВМ. — М.: Торус пресс, 2006.
3. Борисов Ю. И. Проектные центры компьютеростроения в программах обеспечения национальной безопасности // Матер. конф. «Перспективы развития высокопроизводительных архитектур. История, современность и будущее отечественного компьютеростроения». — 2008. — № 1. — 8-14 с.
4. Бабаян Б. А. История развития архитектур вычислительных машин // Ершовские лекции по информатике. — Новосибирск: Изд-во Ин-та информатики им. А. П. Ершова СО РАН, 2009.
5. Ким А. К., Перекатов В. И., Сахин Ю. Х. Развитие и реализация архитектуры вычислительных комплексов серии «Эльбрус» для решения задач ракетно-космической обороны // Вопросы радиоэлектроники. Сер. ЭВТ. — 2010. — Вып. 3. — 5-17 с.
6. В.Л. Григорьев. Микропроцессор i486. Архитектура и программирование. /М.: "МИКАП", 1993 г. - 14 с.
7. А.В. Нестеренко. ЭВМ и профессия программиста. /М.: Просвещение, 1990 - 214-216 с.
8. Boehm, H., and D. Chase, "A Proposal for Garbage-Collector-Safe C Compilation'', Journal of C Language Translation 4, 2 (Decemeber 1992), pp. 126-141.
9. Boehm, H., "Simple Garbage-Collector-Safety", Proceedings of the ACM SIGPLAN '96 Conference on Programming Language Design and Implementation.
10. Hans-J. Boehm and Alan J. Demers, «Boehm Garbage Collector C/C++,» 2004.
11. Raymond T. Chen, «Everybody thinks about garbage collection the wrong way,» IEEE Trans. on Antennas and Propagation, 2010.
12. Джон Л. Хеннеси, Дэвид А. Паттерсон, «Компьютерная архитектура. Количественный подход,» Перевод с английского М. В. Таранчевой под редакцией к.т.н. А. К. Кима, 2016. - 348 с.
13. The SPARC architecture manual: Version 9. — Englewood Cliffs, N.J.: Prentice Hall, 1993.
14. Hennessy J. L., Patterson D. A. Computer Architecture. А Quantitative Approach. — 4 rev. ed. — Elsevier Science, 2006.
15. Волконский В. Ю., Грабежной А. В., Муханов Л. Е., Нейман-заде М. И. Исследования влияния подсистемы памяти на производительность распараллеленных программ // Вопросы радиоэлектроники. Сер. ЭВТ. — 2011. — Вып. 3. — 22-38 с.
16. Галазин А. Б., Ступаченко Е. В., Шлыков С. Л. Программный метод предварительной подкачки кода в архитектурах со статическим планированием // Программирование. — 2008. — № 1. — 67-74 с.
17. Иванов Д. С. Распределение регистров при планировании инструкций для VLIW-архитектур // Программирование. — 2010. — № 6. — 74-80 с.