Компоненты систем программирования (1119464), страница 3
Текст из файла (страница 3)
Учёт регистровой структуры вычислительнойаппаратуры2. Удаление излишних команд3. Оптимизация потока управления и удалениенедостижимых участков программ4. Снижение “стоимости” программы,5. Использование машинных идиом, слияние,дробление и развёртывание циклов6. Учёт векторных и конвейерных свойствархитектуры72Машинно-зависимаяоптимизация• Задача распределения регистров и оптимизацииих использования есть NP-полная задача• Методы распределения регистров:• “жёсткое” распределение• распределение на основе анализа графапотока управления• узлы – базовые блоки программы• дуги – переходы между базовыми блоками• распределение на основе раскраски графавзаимодействия регистров73Машинно-зависимаяоптимизация• Распределение на основе раскраски графавзаимодействия регистров:• число регистров полагается равным числу переменных• два узла (регистра) соединяются дугой, если дварегистра должны хранить некоторые значенияодновременно• никакие соседние узлы не имеют одинаковых цветов• число цветов соответствует числу реальных регистров• если цветов не хватает, узлы итеративно удаляются• максимально долго остаются на регистрах переменные,74используемые во внутренних циклах программыМашинно-зависимаяоптимизация• Удаление недостижимых участков программ#define DEBUG...if (DEBUG) { ...
}0• Снижение “стоимости” программыДеление на π = 3.1415 можно заменитьумножением на величину 1/π = 0.3183• Учёт векторных и конвейерных свойств архитектурыA+B+C+D+E+F => ((((A+B)+C)+D)+E)+F (один поток вычислений)A+B+C+D+E+F => ((A+B)+C)+((D+E)+F) (два потока вычислений),тогда операции A+B и D+E и сложения с использованием ихрезультатов выполняются в параллельном режиме75Оптимизация программ• Основное средство получения высокоэффективныхпрограмм – правильный выбор алгоритмовЗамена алгоритма сортировки вставками алгоритмомбыстрой сортировки приводит к изменению временисортировки N элементов с 2.02N2 на 12log2NДля реальной программы сортировки 100 чисел этоизменение уменьшает совокупное время работы в 2.5раза, для 100000 чисел достигается снижение времениработы реальной программы в 1000 раз!76Распределение памяти• Во время распределения памяти компилятор ставит всоответствие языковым конструкциям исходнойпрограммы адрес, определяет их размер иприписывает им атрибуты областей памяти,необходимых для этих языковых конструкций• Выбор области памяти и распределение памяти в этойобласти проводятся• для объектов данных• для выполняемых фрагментов программ• операторов• блоков77• функций и процедурРаспределение памяти• Область памяти есть совокупность объединённыхмежду собой элементов памяти, причём логикаобъединения задаётся семантикой входного языка• Области памяти необходимы для хранения:• кодов пользовательских программ и данных,необходимых для работы этих программ• кодов системных программ, обеспечивающихподдержку пользовательских программ в периодих выполнения• записей о текущем состоянии процесса выполненияпрограмм (например, записей об активации78процедур)Характеристики областей памятиСпособиспользованияЛокальнаяОбласть памятиСтатическаяСпособ распределенияГлобальнаяСтековаядисциплинаПамять,распределяемаяпрограммистомДинамическаяДисциплинапроизвольногораспределенияПамять,распределяемаякомпилятором79Критерии выбора стратегии идисциплины распределенияпамяти• Эффективность начального распределения памяти• Эффективность восстановления статуса “свободнойпамяти”• Эффективность уплотнения свободных участковобластей памяти (эффективность объединениясвободных фрагментов во фрагменты суммарногоразмера)80Выбор стратегии и дисциплиныраспределения памяти• Для кодов пользовательских программ, кодовсистемных программ, буферов ввода/вывода• статические области памяти и стратегиястатического распределения81Выбор стратегии и дисциплиныраспределения памяти• Для глобальных, статических переменных, констант,внутренних структур данных• статические области памяти и стратегиястатического распределения• Для локальных переменных• динамическая стратегия со стековойдисциплиной• Для переменных, создаваемых по явному запросу• динамическая стратегия с дисциплинойпроизвольного распределения –82Выбор стратегии и дисциплиныраспределения памяти• Для записей о текущем состоянии процессавыполнения программ, а также для записей о входах вблоки операторов, которые по сути есть процедурыбез параметров• статическая стратегия с выделениемфиксированных зон в памяти (для каждойнерекурсивной процедуры и каждого блоканерекурсивных процедур)• динамическая стратегия со стековойдисциплиной (для языков программирования,83поддерживающих рекурсивные процедуры)Структура размещенияотдельных областей в памятиКоманды и константыСтатические данныеСтекКуча84Технологии динамическогораспределения памяти• Выделение блоков памяти стандартного размерасвободно занято• Выделение блоков памяти, размер которых заданпараметром запросасвободнозанято85Типовая структура блока памятиРазмер данного блокапамятиСчётчик ссылок илипометки занятостиУказатели,ссылающиеся наданный блокПамять, выделяемая позапросу86Технологии динамическогораспределения памяти• Определение занятости блоков памяти с помощьюсчётчиков ссылокp=q• Проблема недостижимых циклических ссылок87Технологии динамическогораспределения памяти• Определение занятости блоков памяти с помощьюпометок• все ранее выделявшиеся блоки помечаются как свободные• анализируются все указатели и помечаются занятыми всеблоки, на которые они ссылаются• итеративно анализируются все указатели, хранящиеся ввиде значений полей объектов, размещённых в блоках,помеченных, как занятые; процесс останавливается, когдановые занятые блоки перестают возникать• все недостижимые по указателям блоки памяти остаютсясвободными, занятая ими память уплотняется,88модифицируются значения действующих указателейОсновные компоненты системыпрограммирования••••••••••Средства интеграции компонентов системыпрограммированияРедакторы текстов, включая универсальныемакропроцессорыТрансляторы: интерпретаторы, компиляторы и ассемблерывместе с препроцессорамиБиблиотеки и редакторы связейЗагрузчики (в составе ОС)Средства конфигурированияОтладчикиСредства тестированияПрофилировщикиСправочные системы89Управление вызовомсистемных программ••Режим работы с командной строкой оператора илиоперационной системы:gcc -c -S -da -dp -dA b.cppКонцепция командных файлов:@echo off@if exist t40.* del t40.*@if exist kopu.?n del kopu.?n@if exist kopu.?n0 del kopu.?n0@..\..\exe\ac40 -d-l -itest.a40 -zt40.o40@..\..\exe\rsv -it40.o40 -zt40.r40@..\..\exe\nstr -k0x0 -p0x0 -it40.r40 -zt40.n40@..\..\exe\pnk -ikopu.n40 -w0x1000 -zt40.m40@del t40.?4090Интегрированная средаразработки•••••••Пользователь освобождается от необходимостиустанавливать параметры запуска компонентов системыНе требуется знания языка управления заданиямиоперационной системыРабота ведётся в терминах описания программного проектаи его характеристикПользователю предоставлен графический интерфейсАвтоматически запускаются необходимые компоненты, откоторых получаются результаты работыОсновное преимущество интегрированной среды – вудобстве работы её пользователяДополнительные удобства связаны с объединением в одномтехнологическом процессе нескольких компонентов системы91программирования – редакторов, компиляторов, отладчиковРедакторы текстов имакропроцессоры•Текстовые редакторы: пакетные и диалоговые•Пакетные редакторы не требуют непосредственногоприсутствия программиста для своей работы, получая на входисправляемый текст и пакетное задание на редактирование:Заменить-18/19+текст замены+Исключить-23/27Переставить-34/38/2Исключить-45/К•Макроподстановка (редактирование по шаблонам) состоитиз ввода макроопределений и обработки макровызовов92Редакторы текстов ивстроенные макропроцессоры•В более традиционных системах (PL/1, Си, Си++, Java,различные макроассемблеры) макроопределениянапоминают определения функций и их формальныхпараметров, а макровызовы напоминают операции вызовафункций с фактическими параметрами:/* Препроцессор языка Си */#define byte0(b) ((int)((b)>>24))#define byte2(b) ((int)(((b)>>8)&0xff))i = byte0 (w) + byte2 (w);/* Макроассемблер NM6403 */macro CALL_BUILTIN_2x1(Func, Arg1, Arg2, Res)delayed call Func;push Arg1;push Arg2;Res = gr7;end CALL_BUILTIN_2x1;CALL_BUILTIN_2x1(IDiv32, IWord, IDivider, IResult);Универсальныемакропроцессоры•Макровызовом может быть произвольная строкапроизвольного текста, при отождествлении входной строки сшаблоном проводится выделение фактических параметров:.’$’0 (+-*/)Управляющие символыEnd program.Шаблон № 14’F7$This line repeats 4 times under count control’F1$’F8 ’F0$$EXPR ’ TO CHECK.
Шаблон № 2Transformation 5 yields ’15$’10’37,$Iteration on ’10. Next member ’30$’F8$$$Далее следуют макровызовыEXPR (PL1,PL2,PL3,(PL41,PL42,PL43),PL5,PL6,PL7) TO CHECK.End program.94Диалоговые редакторы итекстовые процессоры••••Диалоговые редакторы: строчные и экранныеРазвитием экранных редакторов являются текстовыепроцессоры (Microsoft Office WORD)Текстовые процессоры концентрируются на атрибутах текста(шрифт, цвет и другие), эти программы чаще всегоиспользуются для подготовки программной документации, вособенности, технической документацииДокументы тестовых процессоров можно формировать иобрабатывать программным способом, для чего в системыпрограммирования включены специальные библиотеки,обеспечивающие доступ как к самим документам, так и котдельным их фрагментам – абзацам, таблицам, ихэлементам, отдельным словам, шрифтам и так далее95Функции редактора текста врамках интегрированной среды••••••Средство отображения хода процесса разработки программНекоторые функции лексических и синтаксическиханализаторов компиляторов: редактор выделяет ключевыеслова языка особым шрифтом и цветом, “подсвечивает”соответствующие открывающие и закрывающие скобкиЛексический анализ “на лету” – поиск и выделение лексемвходного языка в тексте программы непосредственно впроцессе её создания разработчикомПостроение таблиц идентификаторов и констант для передачиих компиляторамВыдача подсказок, пояснений, вариантов текста и гиперссылокВыдача справочной информации по семантике и синтаксисуиспользуемого языка программирования, по операционной96системе и системе программирования, по библиотекеРедакторы связей(компоновщики)•••Компилятор не создаёт полную программу: работая с текстомодной части программы, он знает о других только то, что онидолжны существовать, и их программные интерфейсыОсновное назначение редактора связей – осуществитьпривязку нескольких модулей, полученных в процессенескольких сеансов компиляции, друг к другуОсновные задачи редактора связей:• связывание между собой объектных модулей единойпрограммы, порождаемых компилятором• подготовка таблицы трансляции относительных адресов• статическое подключение библиотек с целью полученияединого исполняемого модуля• подготовка таблицы точек вызова функций динамических97библиотекЗагрузчики(в составе ОС)•••••Компиляторы и редакторы связей работают сотносительными адресами объектов в зонах памятиЗагрузчики чаще оказываются составными частямиоперационных систем, поскольку выполняемые ими функциизависят от архитектуры вычислительной системы иконкретной физической конфигурации этой системыОсновная задача загрузчика:• преобразование условных относительных адресовразделов памяти в истинные (абсолютные)Настраивающий загрузчик выполняет трансляцию адресов вмомент запуска программыДинамический загрузчик работает с динамическизагружаемыми компонентами библиотек и объектными98модулямиБиблиотеки:статические и динамическиеСвойство библиотеки• Накладные расходы вовремя работы программы• Независимость готовыхпрограмм отиспользованных библиотек• Эффективностьиспользования памяти• Трудоёмкость исправленияпрограмм при измененияхв библиотеке• Размер готовых программстатическойдинамической+–±±–+––++99Средства конфигурированияпрограммных комплексов• Этапы развития и виды средств управленияконфигурацией• конфигурирование из командной строки• использование командных файлов• работа в интегрированных средах спроектами программных комплексов• использование систем управленияверсиями программных комплексов100Системы управления версиямипрограммных комплексов• Примеры действующих систем:• Visual SourceSafe (Microsoft Visual Studio)• Peforce SCM (Software Configuration Management)• Rational ClearCase (IBM)• Concurrent Versions System – CVS• Subversion• Основные задачи СУВ – ответы на вопросы:• Кто совершил данное изменение?• Когда они его совершили?• Зачем они это сделали?• Какие ещё изменения произошли в то же самое101время?Средства отладки программ• Важнейшие методы отладки программ:• расстановка операторов выдачипромежуточных результатов работыпрограммы• исследование содержимого памяти,занятой командами или даннымипрограммы,• использование автоматизированныхсредств отладки (двоичных и символьныхотладчиков)102Средства отладки программ••Отладчик организует проверочные запуски программ,способствует локализации и исправлению ошибокПрименение отладчика позволяет:• проводить пошаговое выполнение по командам, строкамтекста или операторам входного языка• выполнять программу до достижения точки остановки• выполнять программу до истинности логическоговыражения над переменными и адресами программы• проводить трассировку и обратную трассировку• выдавать диагностику в терминах входного языка• просматривать (и изменять) значения переменныхпрограммы и содержимое областей памяти• изменять текст отлаживаемой программы и продолжатьотладку без полной перекомпиляции103Средства отладки программ•Интеграция отладчиков с другими компонентами системпрограммирования:• текстовые редакторы• помощь при расстановке точек останова• помощь при делении текста на отдельные строки припошаговом исполнении• компиляторы и редакторы связей• доступ к таблицам имён и адресов, к описаниямобластей видимости• редактирование текста непосредственно в процессеотладки104Средства тестирования программ••Тестирование – процесс сравнения результатов работыпрограмм с заранее рассчитанными результатамивыполнения тестовых примеровСтратегия (методы) тестирования — систематическиеметоды, используемые для отбора и/или создания тестов,которые должны быть включены в тестовый комплект• Стратегия поведенческого теста (поведенческое,функциональное тестирование или тестирование чёрногоящика) основана на технических требованиях• Стратегия структурного теста (тестированиепрозрачного или белого ящика) определяется структуройтестируемого объекта и требует полного доступа кструктуре объекта• Стратегия гибридного теста – комбинация105поведенческой и структурной стратегийСредства тестирования программ••••Автономное тестирование детально проверяет каждыйпрограммный компонент ещё до объединения в единыйпрограммный комплекс, не принимая во внимание аспектывзаимодействия с другими программами комплексаКомплексное тестирование проверяет правильностьвзаимодействия внутренних программных компонентов иправильность взаимодействия комплекса с пользователямиПользовательское тестирование проверяет результатыработы с прикладной точки зренияТехническое тестирование проверяет безопасную иэффективную работу программы в нормальном и пиковомрежимах её использования, а также функциональность всмысле её влияния на технические параметры программы106Средства тестирования программ•••Сценарии тестирования и тестовые примеры должныохватывать все варианты возможного поведения и реакциипрограммы, как в режиме нормальной работы, так и в случаевозникновения необычных ситуаций (компилятор тестируетсяне только на правильных программах, но и на программах,содержащих все возможные ошибки)Средства автоматизированного тестирования программобеспечивают управление тестированием, высокую скоростьтестирования и повторяемость тестовРегрессивное тестирование – проверка сохранности ранееимевшейся функциональности, позволяя убедиться, что нетолько новая функциональность работает правильно, но истарая, имевшаяся в программном продукте до внесения внего изменений, не нарушена107Профилировщики•••••Профилирование программы – один из способов повыситьэффективность её работы, то есть определить время,затрачиваемое на выполнение отдельных её фрагментовПрофилировщик выявляет проблемы, которые решаются:• отказом от лишних вычислений• корректировкой алгоритма во избежание вызованеэффективных функций• отказом от многократных повторных вычислений путёмхранения результатов для последующего использованияПрофилировщики выявляют фрагменты программ, влияющиена производительность, с чем отладчики не справляютсяПрофилировщик позволяет настраивать поведение системы вусловиях реальной эксплуатации и визуализировать событиядля быстрого обнаружения проблемы108Пример профилировщика – программа prof ОС UNIXСправочные системы•••Справочные системы – обширные базы данных свключёнными в них сведениями по всем интересующимпользователей вопросамМетод удалённой работы с документацией: текстыдокументов не тиражируются и не передаютсяпользователям, но становятся доступными через ИнтернетИнтеграция компонентов систем программированияпозволяет совместить работу текстовых редакторов,компиляторов и справочных систем:• с помощью в текстового редактора можно выделятьидентификаторы программы и получать информацию обобъектах, имеющих такое имя, что значительно облегчаетработу пользователям, желающим быстро вспомнитьзнакомую им информацию109Библиотекисистем программирования•Причины широкого распространения библиотечных средств:• необходимость оказывать поддержку программам вовремя их исполнения на вычислительной машине• потребность накапливать полезные программы ипередавать их другим пользователям, не раскрываядеталей реализации запрограммированных алгоритмов•По функциональному наполнению все используемые всоставе современных систем программирования библиотекиклассифицируются следующим образом:• библиотеки функций, процедур и макроопределений• библиотеки классов• библиотеки компонентов110Библиотекисистем программирования• Необходимость оказания системной поддержкипрограммам, проходящим обработку в системахпрограммирования, привело к созданию первыхбиблиотек – библиотек системных программ• Пакеты прикладных программ выполняют веськомплекс операций по обработке информации• В Научно-исследовательском Вычислительномцентре МГУ создана библиотека численного анализадля использования с трансляторами pgf77 и pgcc сязыков Фортран-77 и Си, разработанными PortlandGroup/STM111[http://www.srcc.msu.su/num_anal/lib_na/libnal.htm]Пакет прикладных программ NAG(The Numerical Algorithms Group)•Языки программирования Си, варианты языка Фортран –Фортран-77/90/95•Вычислительные системы••Intel x86-32, Intel x86-64, Compaq Alpha Tru64, IBM RS/6000Операционные системы•Microsoft Windows, Linux, Sun Solaris, Silicon Graphics IRIX•Трансляторы Intel Linux pgf77, Intel Linux g77•Набор из 76 статистических расширений для моделированияи мультивариативных методов непараметрической статистикидля электронных таблиц Microsoft Excel для ОС Windows95/98/NT/2000/XP/Vista/Win7112Библиотеки классовсистем программирования• Библиотеки классов могут представлять собой:• совокупности независимых классов• иерархии классов• иерархии шаблонов классов• Иерархические библиотеки• с общим базовым классом (например, классTObject библиотеки VCL)• с набором иерархических деревьев (“лес”,например, библиотека STL)113Библиотеки компонентовсистем программирования•В состав библиотек компонентов входят законченныепрограммные модули для построения типичных приложений•Библиотеки компонентов включают в себя генераторыотчётов, компоненты для построения сводных таблиц,компоненты для построения графиков и диаграмм,компоненты для создания графических интерфейсов и т.