Внимание ! Вопросы к тесту выложены исключительно в ознакомительных целях: количество вопросов может не совпадать с действительным, актуальность не поддерживается,- за решением теста Welcome to the cashier! Рабочим названием платформы .NET было:
Next Generation Web Services Project 42 COM Object Runtime COM+ 2.0 Lightning COM
Платформа .NET разработана:
Microsoft Sun Oracle Borland
Разработка платформы .NET началась в:
2000 г. 1997 г. 1998 г. 1996 г.
Для чего используются метаинструменты?
для трансформации программ для разработки программ для тестирования программ для анализа и преобразования программ
Какая составляющая современного компилятора осуществляет лексический и синтаксический анализ программы и переводит программу в некоторое промежуточное представление?
Какой организацией стандартизована спецификация основной части платформы .NET?
European Computer Manufactures Association Institute of Electrical and Electronics Engineers Computer and Business Equipment Manufacturers Association American National Standards Institut
Для принципов выполнения программ в UCSD p-System и .NET верно:
программы на CIL непосредственно выполнялись интерпретатором заметных отличий в выполнении программ не имеется программы на CIL перед выполнением транслируются в код для конкретного процессора программы, закодированные в p-коде, непосредственно выполнялись интерпретатором
К предшественникам платформы .NET можно отнести:
Язык Fortran Технология ANDF Платформа Java UCSD p-System
Операционная система UCSD p-System была разработана в:
1981 году 1978 году 1979 году 1980 году
Для платформы Java верно:
в настоящее время является основным конкурентом платформы .NET по архитектуре и своим возможностям наиболее близка к платформе .NET краеугольным камнем является виртуальная машина широкому распространению способствовало развитие Internet-технологий Java byte-code - это набор инструкций виртуальной машины была разработана в середине 1990-х годов в Sun Microsystems
Две разнесенные во времени и пространстве фазы процесса компиляции программ технологии ANDF - это?
перевод программы из формата ANDF трансляция программы, представленной в формате ANDF, в исполняемый файл интерпретация программы, представленной в формате ANDF, в исполняемый файл перевод программы в формат ANDF
Для формата ANDF верно:
не зависит от инсталляторов не зависит от операционных систем не зависит от особенностей аппаратных платформ не зависит от языков программирования
Из каких компонентов состоит платформа .NET?
Common Language Runtime Common Runtime .NET .NET Framework Library .NET Framework Class Library
На основе спецификации CLI, разрабатываются следующие ее реализации:
GNU Rotor проект Portable .NET платформа Mono
Составными частями спецификации CLI являются:
Metadata System Common Type System Virtual Execution System Common Language Specification Common Intermediate Language Common File System
С точки зрения обеспечения безопасности в классификацию CIL-кода можно включить:
независимый код верифицируемый код безопасный код недопустимый код допустимый код открытый код
Программа ngen представляет собой:
JIT-компилятор четвертого типа JIT-компилятор второго типа JIT-компилятор первого типа JIT-компилятор третьего типа
Укажите типичные ошибки при управлении памятью:
преждевременное освобождение памяти двойное освобождение утечки памяти фрагментация адресного пространства
Абстрагировавшись от конкретных особенностей .NET, можно сказать, что основная цель системы типов заключается в:
фиксации определенного класса ошибок в программе до ее выпонения предотвращении определенного класса ошибок в программе до ее выпонения исправлении определенного класса ошибок в программе до ее выпонения отслеживании определенного класса ошибок в программе до ее выпонения
Все ошибки в программах можно разделить на две категории:
перехватываемые и неперехватываемые критические и не критические допустимые и недопустимые теоритические и фактические
В качестве примеров перехватываемых ошибок можно привести:
выход за границы массива обращение к памяти по нулевому указателю деление на ноль передача управления на неправильный адрес
Для программы, написанной на языке со строгой проверкой, справедливы следующие утверждения:
борьба с перехватываемыми ошибками остается в компетенции программиста перехватываемые ошибки могут возникать запрещенные перехватываемые ошибки также невозможны неперехватываемые ошибки не могут возникнуть
Какие пути существуют для диагностики запрещенных ошибок:
динамическая проверка во время выполнения статическая проверка программы до ее выполнения фактическая проверка во время выполнения теоретическая проверка программы до ее выполнения
Неперехватываемые ошибки возникают:
при делении на ноль при выходе за границы массива при обращении к памяти по нулевому указателю при передаче управления на неправильный адрес
Ядро общей системы типов .NET состоит из следующих категорий:
reference types value types performance types system types
Классы могут содержать следующие элементы:
objects properties fields events methods
Интерфейсы могут рассматриваться как чисто абстрактные классы, содержащие только следующие элементы:
статические поля статические события статические методы абстрактные события абстрактные свойства абстрактные методы
Для объектных ссылок и значений типов-значений вводятся следующие отношения:
допустимости равенства совместимости идентичности
Одной из основных причин ухудшения производительности Java-программ является медленная работа сборщика мусора, вызванная:
большим количеством мелких объектов в куче малым количеством мелких объектов в куче малым количеством мелких объектов в структурах большим количеством мелких объектов в структурах
Все структуры неявно наследуют от библиотечного класса:
Выберите верные утверждения для упакованных типов-значений:
получение объекта упакованного типа-значения осуществляется путем упаковки не могут быть объявлены программистом с помощью упаковки мы можем превратить значение любого типа-значения в объект эти типы являются ссылочными и самоописывающими система автоматически определяет тип для типа-значения
В .NET имеются категории указателей:
unmanaged pointers unsystem pointers system pointers managed pointers
Для того чтобы программы оставались безопасными, на использование управляемых указателей наложен целый ряд следующих ограничений:
указатели могут храниться только в локальных переменных и параметрах методов управляемые указатели могут содержать только адреса ячеек запрещены указатели на указатели за каждым указателем закреплен тип ячейки, на которую он может указывать
В реализациях CLI вместо интерпретатора CIL-кода используется:
VES JIT-компилятор CIL-транслятор JVM
Абстрактная виртуальная машина способна выполнять:
произвольный код избранный код управляемый код абстрактный код
VES является значительно более абстрактной моделью, чем:
виртуальная машина Java UCSD p-System Технология ANDF CLI
В чем причина того, что VES является более абстрактной моделью, чем JVM?
изначально Java была ориентирована на реализацию в бытовых приборах байт-код Java должен был выполняться специальными процессорами VES не является более абстрактной моделью, чем JVM аппаратная реализация VES никогда даже не предполагалась
Изучение работы виртуальной машины CLI заключается в том, чтобы понять:
что представляет собой виртуальная машина что представляет собой состояние виртуальной машины как изменяется виртуальная машина при трансляции программ как состояние виртуальной машины меняется во времени
Нити (threads) могут:
могут отображаться на нити операционной системы работать последовательно работать параллельно работать в режиме вытесняющей многозадачности могут отображаться на процессы
Состояние виртуальной машины является совокупностью состояний:
процессов нитей состояния кучи состояния виртуальной памяти
Виртуальная машина может выполнять сразу несколько:
классов нитей программ объектов
Состояние кучи определяется состояниями содержащихся в ней:
нитей объектов методов классов
Если активный метод закончит свою работу, то его состояние будет:
занесено в историю списка удалено из списка добавлено в начало списка добавлено в конец списка
Состояние нити представляет собой односвязный список состояний:
методов объектов классов кучи
Элементы состояния метода можно условно разделить на следующие группы:
неизменяемые данные временные данные изменяемые данные системные данные
Изменяемые данные доступны из тела метода для:
чтения записи исполнения
Для неизменяемых данных верно:
предназначены для внутреннего использования в системе выполнения доступны только для записи предназначены для системного использования доступны только для чтения
Элементами состояния метода, входящими в группу изменяемых данных являются:
Evaluation Stack Local Variable Array Local Memory Pool Instruction Pointer Argument Array
Что из изменяемых данных содержит адрес следующей инструкции в теле метода, которая будет выполнена системой выполнения:
Evaluation Stack Argument Array Local Memory Pool Instruction Pointer
В группу неизменяемых данных входят следующие элементы состояния метода:
methodInfo handle Local Memory Pool Return State Handle Local Variable Array Security Descriptor
Глубина стека в VES задается:
динамически в названии объекта динамически в заголовке метода статически в заголовке метода статически в названии объекта
Тип F представляет собой:
8-байтовое целое со знаком число с плавающей точкой управляемый указатель объектная ссылка 4-байтовое целое со знаком
В виртуальной системе выполнения вместо регистров применяется:
объекты стек вычислений слоты ячейки
Беззнаковый тип unsigned int32 при загрузке на стек вычислений становится:
float64 знаковым int32 float32 знаковым int64
Память из области локальных данных может быть явно выделена с помощью инструкции:
localoc local localloc loc
Слоты, из которых состоят массивы переменных и параметров:
имеют специальный флаг не имеют значений адресуемы не имеют адреса
Работает на основе построения графа достижимости объектов:
механизм автоматического управления памятью группа объектов управляемая куча сборщик мусора с поколениями
Одной из основных особенностей платформы .NET, делающих ее привлекательной для разработки приложений, является механизм:
garbage collection generational garbage collector managed heap system heap
По спецификации CLI память для объектов, используемых в программе, выделяется в:
механизме автоматического управления памятью сборщике мусора с поколениями управляемой куче структуре объектов
Специальный указатель HeapPtr содержит адрес, по которому будет выделена память:
для следующего объекта для текущего объекта для последнего объекта для предыдущего объекта
Для некоторых объектов определены методы Finalize, выполняющие некие действия:
при добавлении объекта в кучу при создании объекта в куче при выполнении объекта в куче при удалении объекта из кучи
Функция malloc выполняет следующие действия:
внесение необходимых изменений в список блоков поиск свободного блока нужного размера разбивку блока форматирование блоков
Дефрагментация заключается в сдвиге достижимых объектов:
к концу кучи на место удаляемых недостижимых объектов к середине кучи на место удаляемых недостижимых объектов к началу кучи на место удаляемых недостижимых объектов к метке кучи на место удаляемых недостижимых объектов
Что такое корень (root)
указатель на кучу, расположенный вне кучи указатель на объект кучи, расположенный вне кучи указатель на кучу, расположенный в куче указатель на объект кучи, расположенный в куче
Запуск сборщика мусора осуществляется в тот момент, когда совокупный размер объектов в куче:
становится меньше некоторой границы достигает некоторой границы превышает допустимый максимум
Все объекты делятся на следующие категории:
поколение 1 поколение 3 поколение 0 поколение 2
Большими считаются объекты, размер которых превышает:
100 000 байт 85 000 байт 80 000 байт 75 000 байт
Файл, который может быть загружен в память загрузчиком операционной системы и затем исполнен - это:
В операционной системе Windows исполняемые файлы, как правило, имеют расширения:
".exe" ".com" ".bat" ".dll"
Основным форматом для хранения исполняемых файлов в операционной системе Windows является:
COM Executable (CE) Linear Executable (LE) New Executable (NE) Portable Executable (PE)
Смысл раздельной компиляции заключается в том, что части программы (модули) компилируются независимо в объектные файлы, которые затем связываются:
интерпретатором в один исполняемый файл компилятором в один исполняемый файл компоновщиком в один исполняемый файл транслятором в один исполняемый файл
Управление памятью в Windows NT/2k/XP/2k3 осуществляет:
task scheduler virtual-memory manager event viewer system manager
В ".NET Framework Glossary" утверждается, что:
COFF - это формат объектных файлов COFF - это формат исполняемых файлов PE - это формат исполняемых файлов PE - это формат объектных файлов
Менеджер виртуальной памяти использует страничную схему управления памятью, при которой вся физическая память делится на одинаковые отрезки размером в:
2512 байт 4096 байт 1024 байт 512 байт
Каждый процесс в Windows запускается в своем виртуальном адресном пространстве размером в:
8 Гб 1 Гб 2 Гб 4 Гб
Для memory-mapped files верно:
это мощная возможность операционной системы это отображаемые в кэш-память файлы не каждое обращение к отображенному в память файлу вызывает операцию чтения/записи это отображаемые в память файлы
Секция в PE-файле представляет:
код глобальные переменные таблицы импорта ресурсы
Разность виртуального адреса данного элемента и базового адреса, по которому PE-файл загружен в память - это:
секция PE-файла образ PE-файла RVA некоторого элемента PE-файла PE некоторого элемента RVA-файла
Как правило, все exe-файлы содержат в поле ImageBase значение:
Какие поля в заголовоке CLI содержат информацию о версии CLR, для которой предназначена данная сборка:
long Flags; short MajorRuntimeVersion; short MinorRuntimeVersion; long EntryPointToken;
Описывает свойства сборки следующее поле заголовока CLI:
long Flags; long CodeManagerTable[2]; struct { long RVA, Size; } VTableFixups; long Cb;
В заголовоке CLI поле "long Cb;":
содержит информацию о версии CLR описывает свойства сборки не используется и всегда заполнено нулями содержит размер заголовка в байтах
Какое поле заголовка CLI не используется и всегда заполнено нулями:
long ManagedNativeHeader[2]; long CodeManagerTable[2]; long ExportAddressTableJumps[2]; struct { long RVA, Size; } StrongNameSignature; struct { long RVA, Size; } Resources; struct { long RVA, Size; } VTableFixups;
Токен метаданных, указывающий на точку входа в сборку для заголовока CLI - это:
long EntryPointToken; long Flags; short MinorRuntimeVersion; long CodeManagerTable[2];
описания объектов, находящихся в сборке .NET назначения секций, находящихся в сборке .NET создания классов, находящихся в сборке .NET описания типов, находящихся в сборке .NET
Расположение метаданных задается:
в начале секции ".text" в секции ".reloc" в телах методов в заголовке CLI
Метаданные и CIL-код практически не зависят от остальных элементов:
формата исполняемого файла формата системного файла формата интерпретируемого файла формата транслируемого файла
Для формата исполняемых файлов .NET верно:
расположение данных внутри секций является более или менее произвольным расположение секций является более или менее произвольным исполняемые файлы могут содержать несколько секций исполняемые файлы могут содержать только одну секцию
В качестве примера компонентный подход к разработке программного обеспечения можно привести:
C++ Microsoft Visual Studio .NET Microsoft Office C
Взаимодействие компонентов, написанных на разных языках:
может существенно снизить эффективность получаемого кода не может снизить эффективность получаемого кода требует от разработчика создания различных интерпретаторов требует от разработчика дополнительных усилий
Преимущества компонентного подхода перевешивают:
проблемы в создании компонентов проблемы в интерпретации компонентов проблемы в организации взаимодействия компонентов проблемы в компиляции компонентов
Отсутствие удовлетворительной технологии взаимодействия компонентов приводит к следующим негативным явлениям:
для разработки программной системы используется только один язык программирования программа выглядит как гигантский монолит, из которого трудно выделить отдельные части появляются чрезмерно универсальные языки программирования
В компонентной системе можно выделить следующие виды взаимодействия компонентов:
системное взаимодействие, когда компоненты запушены на одном компьютере межпроцессное взаимодействие, при котором компоненты работают в разных процессах взаимодействие в сети, когда компоненты запущены на разных компьютерах взаимодействие внутри адресного пространства одного процесса
Организация компонентного программирования на базе библиотек подпрограмм обладает следующими недостатками:
библиотеки подпрограмм плохо подходят для объектно-ориентированных языков библиотека рассчитана на использование конкретного компоновщика двоичный код библиотеки жестко привязан к аппаратной платформе
В терминах CORBA информационная магистраль называется:
OBR ORB BOR BRO ROB
Технология COM поддерживает следующие виды взаимодействия компонентов:
взаимодействие внутри адресного пространства процесса взаимодействие по сети виртуальное взаимодействие межпроцессное взаимодействие
Для открытых исходных текстов верны утверждения:
если компоненты написаны на разных языках, то соединить их вместе не просто исходные тексты могут распространяться по лицензии с назваием GNU Public License исходные тексты в отличие от двоичных файлов содержат информацию о типах открытые компоненты почти всегда имеют так называемые "заразные" лицензии
Компоненты на платформе .NET представляют собой:
секции .NET сборки .NET объекты .NET классы .NET
Какие особенности платформы .NET позволяют среде выполнения автоматически обеспечивать взаимодействие компонентов вне зависимости от того, на каком языке они написаны:
выполнение любой программы управляется средой выполнения CTS любая программа, работающая в среде .NET, использует общую систему типов CTS выполнение любой программы управляется средой выполнения CLR любая программа, работающая в среде .NET, использует общую систему типов CLR
При взаимодействия двух объектов на платформе .NET, объекты Client и Server находятся в разных компонентах, работающих:
в адресном пространстве двух процессов в адресном пространстве трех процессов в адресном пространстве разных процессов в адресном пространстве одного процесса
Надстройка, использующая проецирование для реальной передачи данных - это:
Sockets RPC COM Pipes
Флаг доступа для членов типа Public имеет следующее значение:
Флаг доступа для членов типа, имеющий значение 0x00000002 - это:
FamAndAssem Family FamOrAssem Assembly
Флаг видимости для типов NestedAssembly имеет следующее значение:
0x00000006 0x00000000 0x00000005 0x00000007
В данном примере:
Default Public ReadOnly Property Array (ByVal Index As Integer) As Integer Get Return Arr(Index) End Get End Property Public ReadOnly Property Count() As Integer Get Return Arr.Length End Get End Property
для доступа к отсортированному массиву используются свойства: Count Array Public Get
Основными правилами Common Language Specification являются:
глобальные поля и методы не поддерживаются спецификацией методы не должны иметь переменного количества параметров спецификация распространяется только на доступные извне части экспортируемых из библиотеки типов объекты исключений должны наследовать от System.Exception упакованные типы-значения, неуправляемые указатели и типизированные ссылки не должны использоваться регистр букв в идентификаторах не имеет значения
Класс InsertSorted Array:
using VBLib; public class InsertSortedArray: SortedArray { protected override void Sort() { for (int i = 0; i < Arr.Length-1; i++) { int max = i; for (int j = i+1; j < Arr.Length; j++) if (Arr[j] > Arr[max]) max = j; int tmp = Arr[i]; Arr[i] = Arr[max]; Arr[max] = tmp; } } public InsertSortedArray(int[] A): base(A) { } }
переопределяет абстрактный метод:
Sort() SortedArray Arr[i] Arr[max]
Язык Common Intermediate Language является независимым от аппаратной платформы:
Какие инструкции языка CIL, служат для организации вычислений:
арифметические инструкции инструкции для удаления значений инструкции для загрузки и сохранения значений инструкции для организации передачи управления
Инструкция ldnull имеет следующий код:
0x22 0x23 0x20 0x14 0x15 0x21
Для обмена значениями между стеком вычислений и памятью предназначены следующие инструкции:
инструкции для загрузки и сохранения значений инструкции для организации буфера системные инструкции арифметические инструкции
Сколько существует вариантов инструкций для работы с переменными и параметрами:
0 2 3 1
Код 0xDF соответствует инструкции:
stind.r4 stind.i stind.r8 stind.i1
Инструкция pop имеет следующий код:
0x25 0x10 0x26 0x11 0x57 0x4E
Среди базовых бинарных операций сложением является инструкция:
add xor mul div.un
Арифметические инструкции можно разделить на следующие категории:
унарные операции инструкции преобразования значений бинарные операции инструкция ckfinite
Какая инструкция интерпретирует целое значение, лежащее на вершине стека, как не имеющее знака и преобразует его к вещественному типу:
conv.ovf.i conv.r8 conv.i2 conv.r.un
Инструкция ckfinite имеет код: 0x65 0xC3 0x5E 0xD
Безусловными инструкциями являются:
bgt.un.s br. brtrue brfalse.s ble br.s
Сколько существует инструкций безусловного перехода?
0 3 1 2
Инструкции для организации передачи управления можно разделить на следующие категории:
инструкция множественного выбора switch инструкции безусловного перехода инструкция вызова метода call инструкции условного перехода инструкция возврата из метода ret
Инструкция beq имеет следующий код:
0x3C 0x3E 0x42 0x3D 0x3F 0x3B
Какие инструкции потребляют со стека вычислений один операнд и, в зависимости от его значения, осуществляют или не осуществляют переход по указанному во встроенном операнде относительному адресу:
базовые инструкции условного перехода дополнительные короткие инструкции безусловного перехода дополнительные инструкции условного перехода дополнительные длинные инструкции условного перехода
Диаграмма стека для базовых инструкций условного перехода выглядит следующим образом:
С точки зрения операционной системы объекты ядра, поддерживающие интерфейс синхронизируемых объектов, могут находиться в следующих состояниях:
stop nonsignaled nonstop signaled
Функция WaitForSingleObject осуществляет ожидание:
четырех объектов одного объекта трех объектов двух объектов пяти объектов
Функции проверяют состояние ожидаемого объекта или ожидаемых объектов и продолжают выполнение, только если:
объекты вызваны объекты свободны объекты в ожидании объекты заняты
Некоторый объект, который может находиться в одном из двух состояний: занятом или свободном - это:
мьютекс семафор событие
Для захвата мьютекса используется функция:
CreateMutex GetMutex ReleaseMutex WaitFor...
Для ограничения числа потоков, имеющих одновременный доступ к какому-либо ресурсу предназначены:
семафоры события мьютексы указатели
Какие объекты предназначены для выполнения операций через заданные промежутки времени или в заданное время:
специальные таймеры ожидающие таймеры системные таймеры
Внимание ! Вопросы к тесту выложены исключительно в ознакомительных целях: количество вопросов может не совпадать с действительным, актуальность не поддерживается,- за решением теста Welcome to the cashier! Процесс автоматического доказательства того, что этот код не разрушает память - это:
Сколько известно подходов для алгоритмов верификации кода, позволяющие снизить их сложность и добиться терминируемости:
1 4 2 0 3 5
Верификаторы, предназначенные для выявления определенного класса ошибок в программах, используются при разработке программ на этапе:
тестирования кодирования разработки отладки
Сколько существует подходов для ограничения задачи для верификаторов?
3 1 5 2
Верификаторы, способные доказать, что программа, принадлежащая некоторому классу программ, не разрушает память, служат:
для обеспечения безопасности для обеспечения дискретизации для подготовки отладки для обеспечения терминируемости
Верификатор кода .NET может доказать, что сборки, генерируемые компиляторами C#, J# и Visual Basic .NET:
не разрушают буфер разрушают память не разрушают память разрушают буфер
Верификатор .NET предназначен:
для проверки интерпретируемости кода для процесса отладки для поиска ошибок в программах для обеспечения безопасности системы
Отметьте верные утверждения, касающиеся разрушающего память кода:
всем перечисленным может воспользоваться злоумышленник любой CIL-код можно непосредственно компилировать с помощью ILASM существуют компиляторы, которые в общем случае могут порождать такой код в языке C# предусмотрены unsafe-блоки и unsafe-методы, внутри которых может находиться такой код
Код, для которого верификатор доказал, что он не разрушает память:
транслируемый код верифицированный код верифицируемый код компилируемый код
Код, для которого верификатор может доказать, что он не разрушает память:
верифицируемый код верифицированный код интерпретируемый код транслируемый код
Данные о количестве слотов на стеке и типы значений, лежащих в этих слотах - это:
буфер стека конфигурация стека состояние стека объем стека
Правилами совместимости типов S и T будут следующие:
S[] := T[], если S := T и размерности массивов совпадаю S := T, если S и T - интерфейсы, и реализация T требует реализации S S := null, если S - объектный тип или интерфейс S& := T&, если S := T
Алгоритм верификации работает со следующими данным:
изменяемые данные пользовательские данные произвольные данные неизменяемые данные
CoInitialize(NULL); IMetaDataDispenser *dispenser; HRESULT h = CoCreateInstance( CLSID_CorMetaDataDispenser, NULL, CLSCTX_INPROC_SERVER, IID_IMetaDataDispenserEx, (void **)&dispenser ); if (h) printf("Error");
осуществляется: начало работы с .NET получение указателя на интерфейс IMetadataDispenserEx: начало работы с Metadata Unmanaged API инициализации системы COM
Генерация метаданных осуществляется через методы интерфейса IMetadataEmit, которые можно условно разделить на следующие группы:
методы DefineXXX методы FindXXX методы EnumXXX методы SetXXX методы GetXXX
При завершении работы с Metadata Unmanaged API необходимо освободить указатели на полученные интерфейсы следующим образом:
dispenser->OpenScope(); mdimp->Release();
mdimp->OpenScope(); dispenser->"test.exe"
mdimp->Release(); dispenser->Release();
Класс Module, позволяет получить набор экземпляров класса:
Module ConstructorInfo Type MethodInfo Assembly FieldInfo
Библиотека рефлексии содержит классы для работы с метаданными на высоком уровне, которые располагаются в пространствах имен:
Библиотека рефлексии спроектирована таким образом, что создание объектов рефлексии, соответствующих элементам метаданных, осуществляется:
путем вызова методов других методов рефлексии путем вызова методов других объектов рефлексии путем вызова объектов других объектов рефлексии путем вызова объектов других методов рефлексии
Кроме чтения метаданных, библиотека рефлексии позволяет:
изменять значения полей вызывать методы типов, входящих в обрабатываемую сборку создавать экземпляры типов, входящих в обрабатываемую сборку читать значения полей
Для генерации метаданных и CIL-кода в библиотеке рефлексии предназначены классы:
Целью динамической генерации кода является использование информации, доступной только во время выполнения программы, для:
повышения качества компиляции исполняемого кода повышения качества исполняемого кода повышения динамичночти исполняемого кода повышения качетсва верификации исполняемого кода
Применение динамической генерации оправдано, если:
запуск этого фрагмента осуществляется многократно выполнение фрагмента не связано с затратами времени процессора запуск этого фрагмента осуществляется однократно выполнение фрагмента связано с существенными затратами времени процессора
В .NET доступны следующие способы организации динамической генерации кода:
порождение программы на языке C++ и вызов компилятора C# порождение программы на языке C и вызов компилятора C непосредственное порождение метаданных и CIL-кода порождение программы на языке C# и вызов компилятора C#
При динамической генерации кода тип процессора - эта та часть информации, которая становится известной:
только во время выполнения программы после выполнения программы до выполнения программы до или во время выполнения программы
Программно вычисление численного интегрирования функции можно выполнять следующими способами:
путем динамической генерации программы на языке C# путем динамической генерации метаданных и CIL-кода без динамической генерации кода
Имея какой класс мы можем записать обобщенный алгоритм интегрирования методом прямоугольников:
Math Abstract Func Function
В .NET доступны следующие способы организации динамической генерации кода:
порождение программы на языке C++ и вызов компилятора C# порождение программы на языке C и вызов компилятора C непосредственное порождение метаданных и CIL-кода порождение программы на языке C# и вызов компилятора C#
Идеальным вариантом представления функции, которое бы не зависело от конкретного способа вычисления значения функции является:
вещественный класс Function реальный класс Function псевдокласс Function абстрактный класс Function
Для проверки работоспособности алгоритма следующего алгоритма:
static double Integrate(Function f, double a, double b, int n) { double h = (b-a)/n, sum = 0.0; for (int i = 0; i < n; i++) sum += h*f.Eval((i+0.5)*h); return sum; }
можно объявить тестовый класс TestFunction, реализующий вычисление функции f(x) = x * sin(x) следующим образом:
public class TestFunction: Function { public override double Eval(double x) { } }
public class TestFunction: Function { public override double Eval { return x * Math.Sin(x); } }
public class TestFunction: Function { public override double Eval(double x) { return x * Math.Sin; } }
public class TestFunction: Function { public override double Eval(double x) { return x * Math.Sin(x); } }
В данном примере:
public abstract class Expression { public abstract string GenerateCS(); public abstract void GenerateCIL(ILGenerator il); public abstract double Evaluate(double x); }
метод GenerateCS:
транслирует выражение в CIL-код выполняет непосредственное вычисление значения выражения транслирует выражение в фрагмент программы на C#
В данном примере:
public abstract class Expression { public abstract string GenerateCS(); public abstract void GenerateCIL(ILGenerator il); public abstract double Evaluate(double x); }
метод Evaluate: выполняет непосредственное вычисление значения выражения транслирует выражение в фрагмент программы на C# транслирует выражение в CIL-код
В данном примере:
public abstract class Expression { public abstract string GenerateCS(); public abstract void GenerateCIL(ILGenerator il); public abstract double Evaluate(double x); }
метод GenerateCIL:
выполняет непосредственное вычисление значения выражения транслирует выражение в CIL-код транслирует выражение в фрагмент программы на C#
Классы, отвечающие за компиляцию исходного кода, относятся:
к пространству имен System.CodeDom.Compiler к пространству имен System.Compiler к пространству имен CodeDom.Compiler к пространству имен System.CodeDom.Compiler.Text
Порождение текста C#-программы и компиляция этой программы с помощью компилятора C#, доступного через библиотеку классов .NET является:
самым сложным способом автоматической генерации кода самым сложным способом динамической генерации кода самым простым способом автоматической генерации кода самым простым способом динамической генерации кода
При трансляции выражений в CIL метод начинается:
с создания заготовки для будущей динамической сборки с создания заготовки для будущей сборки с создания динамической сборки
Вызывая метод DefineDynamicAssembly домена приложений мы можем получить:
метод класса AssemblyBuilder класс Assembly объект класса AssemblyBuilder класс AssemblyBuilder
Компилятор C# создает конструкторы:
без параметров по умолчанию с параметрами по умолчанию с специальными параметрами без специальных параметров
При каком способе вычисления значения функции на динамическую сборку будет затрачено 547 мс, на компьютере с процессором Intel Pentium 4 с тактовой частотой 3000 МГц и 1 Гб оперативной памяти:
интерпретация дерева выражения предварительная компиляция С# предварительная компиляция в CIL
Результаты измерений эффективности трех способов вычисления выражений, проведенных на компьютере с процессором Intel Pentium 4 с тактовой частотой 3000 МГц и 1 Гб оперативной памяти показывают, что динамическая генерация кода может:
на два порядка уменьшить время работы программы на четыре порядка увеличить время работы программы на три порядка уменьшить время работы программы на пять порядков увеличить время работы программы
При генерации динамической сборки через классы пространства имен System.Reflection.Emit конструкторы:
добавляются автоматически добавляются статически автоматически не добавляются
Правило Expr ::= local x assign Expr можно описать так:
пустой список фактических параметров метода операция присваивания переменной x значения выражения параметр метода с именем x унарный минус
Определим набор функций, отображающих различные деревья абстрактного синтаксиса в соответствующие им последовательности инструкций CIL, можно считать, что каждая функция принимает в качестве параметра:
не содержащие развилки и содержащие защищенные блоки содержащие развилки и не содержащие защищенных блоков не содержащие развилок и защищенных блоков содержащие развилки и защищенные блоки
Для peephole-оптимизации CIL-кода вместо:
stloc(starg) x ldloc(Ldarg) х
можно использовать:
idc.i4.0 stloc(starg) x
pop
ldloc(ldarg) x dup
dup stloc(starg) x
pop pop
Использование каких структурных конструкций позволяет существенно упростить генерацию развилок:
множественный выбор последовательность цикл с постусловием выбор цикл с предусловием
Алгоритм peephole-оптимизации использует понятие:
пакета блока фрейма секции
Разделить фаз генерации и оптимизации кода позволяет
существенно упростить генератор сделать генератор независимым от оптимизатора повторно использовать генератор с другими оптимизаторами повторно использовать оптимизатор с другими генераторами
Функций какого набора транслируют деревья абстрактного синтаксиса в последовательности инструкций:
При удалении псевдонима Y переменной X осуществляются следующие действия:
все использования переменной Y заменяются использованиями переменной X инструкция инициализации переменной Y заменяется инструкцией pop инструкция инициализации переменной Y заменяется инструкцией dup
При воспроизведении константы C, являющейся значением переменной Y осуществляются следующие действия:
инструкция инициализации переменной Y заменяется инструкцией pop инструкция инициализации переменной Y заменяется инструкцией dup инструкции ldloc(ldarg) Y заменяются инструкциями ldr C инструкции ldloc(ldarg) Y заменяются инструкциями ldc C
Очень сильно зависит от того, какая вычислительная система и какие аспекты работы этой системы рассматриваются с точки зрения многозадачности:
конкретная реализция языка программирования конкретная реализация многозадачности конкретная реализция среды программирования конкретная реализция операционной системы
Для современных операционных систем и для различных систем программирования в современном мире поддержка разработки и реализация:
интеграции стала необходимой многозадачности стала необходимой изоляции стала необходимой
Способом реализации многозадачности могут быть:
использование механизмов передачи сообщений использование асинхронных операций ввода-вывода обмен данными через область совместно доступной памяти
Одновременное выполнение нескольких задач на одном или нескольких процессорах:
В современных компьютерах одновременно сосуществует несколько различных реализаций мультипроцессирования, но практически всегда применяются следующие функционально различные устройства:
видеосистема интеллектуальные периферийные устройства контроллеры прямого доступа к памяти центральный процессор
Для каких систем критической становится среда передачи данных:
MPP SMP NUMA cc-NUMA
В каких компьютерах несколько процессоров подключены к общей оперативной памяти и имеют к ней равноправный и конкурентный доступ:
MPP системам NUMA и cc-NUMA архитектуры SMP машины
В случае невытесняющей многозадачности решение о переключении принимает:
следующая после выполняемой в данный момент задачи операционная система выполняемая в данный момент задача контроллер домена
Для cc-NUMA архитектуры верно:
формально на ней могут работать операционные системы, созданные для SMP систем каждый процессорный узел имеет некоторый объем оперативной памяти оперативная память является общей и разделяемой между всеми процессорами на аппаратном уровне решены вопросы когерентности кэш-памяти различных процессоров
На многопроцессорных системах при реальной возможности распараллеливания задач по разным процессорам, обычно используют механизм разделения времени:
на произвольном процессоре на одном из доступных процессоров на двух параллельных процессорах на каждом из доступных процессоров
Большинство современных операционных систем используют комбинированные планировщики, одновременно применяющие:
В современных полновесных реализациях Windows планировщик ядра выделяет процессорное время:
секциям блокам потокам переменным окружения
В Windows определен следующий список событий, которые приводят к перепланированию потоков:
выделенный потоку квант исчерпан изменена привязка к процессору изменен приоритет потока создание и завершение потока поток перешел в состояние ожидания поток вышел из состояния ожидания
При выборе потока для выполнения учитываются приоритеты потоков (абсолютные приоритеты) - система начинает выполнять:
код потока с наименьшим приоритетом из числа готовящихся к исполнению код потока с наибольшим приоритетом из числа готовящихся к исполнению код потока с наименьшим приоритетом из числа готовых к исполнению код потока с наибольшим приоритетом из числа готовых к исполнению
При переходе из состояния "ожидание" в "готовность": если ожидание было долгим, то стек потока может быть выгружен:
из оперативной памяти из буфера системы из системной памяти из операционной системы
Диспетчер памяти Windows при выделении памяти для запускаемого процесса старается учитывать доступность памяти для назначенного процессора в случае:
MPP системы NUMA системы SMP системы
Процессор, на котором запускается приложение в первый раз:
Процесс выбора потока для выполнения усложняется в случае SMP систем, когда помимо приоритета готового к исполнению потока учитывается:
на каком процессоре ранее выполнялся код данного потока на каком процессоре ранее выполнялся код предыдущего потока на каком процессоре может выполнялся код данного потока на каком процессоре выполнятся код данного потока
Планировщик Windows динамически изменяет:
длительность квантов приоритеты, назначаемые потокам задачи выполняемые потоками
Если на одном из процессоров в многопроцессорной системе работает поток с меньшим приоритетом, то последний вытесняется:
и заменяется новым потоком и образ памяти разрушается и стек потока обнуляется и процессор начинает простаивать
Квантование потоков осуществляется:
по тикам системного таймера по тикам системного времени по тикам сетевого таймера по тикам встроенного бипера
Фиксированная длительность короткого кванта со значением 1 равна:
6 36 12 18
Какой параметр реестра предназначен для управления квантованием:
Когда процесс запускается, операционная система в нем самостоятельно создает:
вторичный поток, начинающий исполнение кода этого процесса первичный поток, начинающий исполнение кода следующего процесса первичный поток, начинающий исполнение кода этого процесса вторичный поток, начинающий исполнение кода предыдущего процесса
Используемые в операционной системе средства реализации многозадачности можно разделить на следующие группы:
средства управления потоками и волокнами взаимодействие потоков в рамках разных процессов взаимодействие между процессами разных компьютеров взаимодействие с устройствами взаимодействие потоков в рамках одного процесса взаимодействие между процессами одного компьютера
Гибрид средств управления потоками и асинхронного ввода-вывода в Windows называется:
"порт окончания ввода-вывода" "порт исполнения ввода-вывода" "порт завершения ввода-вывода" "порт ожидания ввода-вывода"
Потоки, работающие в рамках одного процесса, имеют возможность взаимодействовать друг с другом:
используя общее пространство процесса используя общее адресное пространство потоков используя общее адресное пространство используя общее адресное пространство процесса
Взаимодействие потоков, работающие в рамках одного процесса может:
приводить к конфликтам произвольного доступа потока к общим данным процесса приводить к конфликтам одновременного доступа требовать средств изоляции некоторых данных одного потока от данных другого требовать средств изоляции некоторых данных одного потока от общих данных
При взаимодействие между процессами одного компьютера диспетчер памяти операционной системы должен предусмотреть средства организации:
разделяемых между процессами данных разделяемой между процессами памяти разделяемой между потоками памяти разделяемых потоков
В общем случае память разных компьютеров можно рассматривать как:
интегрированную друг с друга изолированную друг от друга отображаемую друг в друга общее адресное пространство
Многие операционные системы предоставляют дополнительные средства межпроцессного взаимодействия, многие из них являются:
надстройками над средствами работы с файловыми системами надстройками над средствами работы с данными надстройками над средствами работы с разделяемой памятью надстройками над средствами работы с потоками
В Windows для реализации асинхронного ввода-вывода предусмотрены функции типа:
WriteFile ReadFile WriteFileEx ReadFileEx
Обычные операции ввода-вывода происходят:
в асинхронном режиме в произвольном режиме в параллельном режиме в синхронном режиме
В Windows для реализации асинхронного ввода-вывода предусмотрена следующая специальня структура:
OVERLAPPED APPED OVERLAPPEDD OVERLAPPE
Специальная структура OVERLAPPED используется для:
взаимодействия с последовательной операцией взаимодействия с асинхронной операцией взаимодействия с параллельной операцией взаимодействия с синхронной операцией
Выяснить состояние асинхронной операции, дождаться ее завершения или отменить ее, не дожидаясь завершения можно с помощью следующего набора функций:
Какой способ может обеспечить самую быструю реакцию на завершение операции ввода-вывода, но ценой более высокой загрузки процессора:
выполнение синхронных операций с ожиданием на объектах ядра выполнение асинхронных операций с опросом состояния выполнение асинхронных операций с ожиданием на объектах ядра выполнение синхронных операций с опросом состояния
состояние операции ввода-вывода и возвращает признак ее завершения состояние операции ввода-вывода и возвращает признак ее исполнения состояние операции вывода и возвращает признак ее завершения состояние операции ввода и возвращает признак ее завершения
Для реализации асинхронного ввода-вывода в операционной системе предусмотрен специальный механизм, основанный на:
Для того, чтобы процесс или поток мог ссылаться на объекты ядра, созданные другим процессом или потоком предусмотрены следующие механизмы:
объекты могут быть унаследованы дочерним процессом при его создании процесс-владелец объекта может передать его описатель любому другому процессу объект может иметь собственное уникальное имя
Объектами ядра являются:
потоки почтовые ящики файлы процессы события
Дескриптор безопасности (Security Descriptor) содержит информацию:
о владельце объекта первичной группе пользователей один список управления доступом два списка управления доступом
Какая функция превращает псевдоописатель процесса в настоящий описатель, действующий только в текущем процессе:
Windows предоставляет следующие способы измерения интервалов:
"мультимедийный" таймер высокоточный таймер таймер высокого разрешения таймер низкого разрешения
Если стандартное разрешение мультимедийного таймера на данном компьютере хуже 5-10 мс, то у функции timeBeginPeriod есть побочный эффект - улучшение разрешения повлияет на работу:
плнировщика всех потоков планировщика отдельного процесса планировщика отдельного потока планировщика во всей системе
Планировать исполнение исполнение волокон можно с помощью:
Разработка серверов, обслуживающих асинхронно поступающие запросы является:
одной из типовых задач одной из специальных задач нетипичной задачей одной из легких задач
Реализация однопоточного сервера для обслуживания асинхронно поступающие запросы нецелесообразна по следующим причинам:
запросы могут приходить в то время, пока сервер простаивает запросы могут приходить в то время, пока сервер занят выполнением предыдущего такой сервер не сможет эффективно задействовать многопроцессорную систему такой сервер не сможет эффективно задействовать операционную систему
Механизм проецирования файлов является базовым средством для передачи данных:
между адресными пространствами потоков между адресными пространствами процедур между адресными пространствами секций между адресными пространствами процессов
Для явного сброса данных из оперативной памяти в файл можно использовать следующую функцию:
для создания адресной памяти для создания общей памяти для создания разделяемой памяти для создания изолированной памяти
Дан массив инструкций P размера N и массив предложений обработки исключений EH размера M, какое поле является количество инструкций, входящих в защищенную область:
TryLength TryOffset ClassToken FilterOffset
Вы можете обратится к нам напрямую, через:
По Skype: molodoyberkut По Telegram: @MolodoyBerkut По ICQ: 657089516