Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЭВМ лекции

.pdf
Скачиваний:
63
Добавлен:
08.05.2015
Размер:
2.95 Mб
Скачать

Внижней части сетевой архитектуры находится драйвер платы сетевого адаптера. NT в настоящее время поддерживает драйверы устройств, выполненные

всоответствии со спецификацией NDIS (Network Device Inerface Spocification)

версии 3.0. NDIS предоставляет гибкую среду обмена данными между транспортными протоколами и сетевыми адаптерами. NDIS 3.0 позволяет

отдельному компьютеру иметь несколько установленных в нем плат сетевого адаптера. 0 свою очередь каждая плата сетевого адаптера может поддерживать

несколько транспортных протоколов для доступа к различным типам сетевых станций.

Модель безопасности NT включает монитор безопасности (Security Reference Monitor), процессор входа в систему (Logon Process) и безопасные защищенные подсистемы.

Вмногозадачной операционной системе, каковой является NT, приложения совместно используют ряд ресурсов системы, включая память компьютера, устройства ввода/вывода, файлы и процессор(ы) системы. NT включает набор компонентов безопасности, которые гарантируют, что приложения не смогут обратиться к этим ресурсам 6e:i соответствующего разрешения.

Монитор безопасности отвечает за проведение в жизнь политики проверки правильности доступа и контроля, определенной локальной подсистемой безопасности, Монитор безопасности обеспечивает услуги по подтверждению доступа к объектам, проверке привилегий пользователя и генерации сообщений как для привилегированного режима, так и для режима пользователя. Монитор безопасности, подобно другим частям операционной системы, выполняется в привилегированном режиме.

ВNT процесс входа в систему предусматривает обязательный вход в систему безопасности для идентификации пользователя. Каждый пользователь

должен иметь бюджет и должен использовать пароль для обращения к этому бюджету.

Прежде чем пользователь сможет обратиться к любому ресурсу компьютера с NT, он должен войти в систему через процесс входа в систему для того, чтобы подсистема безопасности могла распознать имя пользователя и пароль. Только

281

после успешного установления подлинности монитор безопасности выполняет процедуру проверки правильности доступа для определения права пользователя на обращение к этому объекту.

Защищенность ресурсов одна из особенностей, предоставляемая моделью безопасности. Задачи не могут обращаться к чужим ресурсам (типа памяти) иначе, чем через применение специальных механизмов совместного использования.

NT также предоставляет средства контроля, которые позволяют администратору фиксировать действия пользователей.

Программная среда Windows

Благодаря интерфейсу вызовов функций в Windows доступ к системным ресурсам осуществляется через целый ряд системных функций. Совокупность таких функций называется прикладным программным интерфейсом, или API (Application Programming Interface), Для взаимодействия с Windows приложение запрашивает функции API, с помощью которых реализуются все необходимые системные действия, такие как выделение памяти, вывод на экран, создание окон и т. п.

Библиотека MFC инкапсулирует многие функции API. Хотя программам и разрешено обращаться к ним напрямую, все же чаще выполняется через соответствующие функции-члены. Как правило, функции-члены либо аналогичны функциям API, либо непосредственно обращаются к нужной части интерфейса,

Библиотеки динамической загрузки (DLL)

Поскольку API состоит из большого числа функций, может сложиться впечатление, что при компиляции каждой программы, написанной для Windows, к ней подключается код довольно значительного объема. В действительности это не так. Функции API содержатся в библиотеках динамической загрузки (Dynamic Link Libraries, или DLL), которые загружаются в память только в тот момент, когда к ним происходит обращение, т. е. при выполнении программы. Рассмотрим, как осуществляется механизм динамической загрузки.

Динамическая загрузка обеспечивает ряд существенных преимуществ. Во- первых, поскольку практически все программы используют API-функции, то

282

благодаря DLL-библиотекам существенно экономится дисковое пространство,

которое в противном случае занималось бы большим количеством повторяющегося кода, содержащегося в каждом из исполняемых файлов. Во- вторых, изменения и улучшения в Windows-приложениях сводятся к обновлению только содержимого DLL-библиотек. Уже существующие тексты программ не требуют перекомпиляции.

Широкое распространение получили две версии API. Первая называется Win16 и представляет собой 16-разрядную версию, используемую в Windows 3,1. Вторая, 32-разрядная версия, называется Win32 и используется в Windows 9x и Windows NT/2000/XP. Win32 является надстройкой для Winl6 (т. е. фактически включает в себя этот интерфейс), так как большинство функций имеет то же название и применяется аналогичным образом. Однако будучи в принципе похожими, интерфейсы вес же отличаются друг от друга. Win32 поддерживает 32-разрядную линейную адресацию, тогда как Winl6 работает только с 16- разрядной сегментированной моделью памяти. Это привело к тому, что некоторые функции были модифицированы таким образом, чтобы принимать 32- разрядные аргументы и возвращать 32-разрядные значения. Часть из них пришлось изменить с учетом 32-разрядной архитектуры. Была реализована поддержка потоковой многозадачности, новых элементов интерфейса и прочих нововведений Windows.

Многозадачность в системе Windows

В Windows 3.1 имеется только один тип многозадачности основанный на процессах. В новых системах Windows поддерживается два типа многозадачности: основанный на процессах и основанный на потоках. Рассмотрим их чуть подробнее.

Процесс это программа, которая выполняется. При многозадачности такого типа две или более программы могут выполняться параллельно. Конечно,

они по очереди используют ресурсы центрального процессора и с технической точки зрения выполняются не одновременно, но благодаря высокой скорости работы компьютера это практически незаметно.

283

Поток это отдельная часть исполняемого кода. Название произошло от понятия «направление протекания процесса». В многозадачности данного типа

отдельные потоки внутри одного процесса также могут выполняться одновременно. Все процессы имеют, по крайней мере, один поток, но в Windows 95 и Windows NT их может быть несколько.

В Windows 95 и Windows NT допускается существование процессов, две или более частей которых выполняются одновременно. При работе в этих операционных системах возможно параллельное выполнение как программ, так и их отдельных частей. Это позволяет писать очень эффективные программы.

Другое существенное различие между многозадачностями Windows 3.1 и Windows 95/NT заключается в том, что в Windows 3.1 используется неприоритетная многозадачность. Это означает, что процесс, выполняющийся в данный момент, получает доступ к ресурсам центрального процессора и удерживает их в течение необходимого ему времени. Таким образом,

неправильно выполняющаяся программа может захватить все ресурсы процессора и не давать выполняться другим процессам. В indows 95 и Windows NT используется приоритетная многозадачность. В этом случае каждому активному потоку предоставляется определенный промежуток времени работы процессора.

По истечении данного промежутка управление автоматически передается следующему потоку. Это не дает возможность программам полностью захватывать ресурсы процессора.

Во многих операционных системах взаимодействие между системой и программой инициализирует программа. Например, в DOS программа запрашивает разрешение на ввод и вывод данных. Говоря другими словами, не Windows-программы сами вызывают операционную систему. Обратного процесса не происходит. В Windows все наоборот: именно система вызывает программу. Это осуществляется следующим образом: программа ожидает получения сообщения от Windows. Когда это происходит, то выполняется некоторое действие. После его завершения программа ожидает следующего coo6щения.

284

Windows может посылать программе сообщения различных типов. Например, каждый раз при щелчке мышью в окне активной программы посылается соответствующее сообщение. Другой тип сообщений посылается, когда необходимо обновить содержимое активного окна. Сообщения посылаются также при нажатии клавиши, если программа ожидает ввода с клавиатуры. По отношению к программе сообщения появляются случайным образом. Поэтому Windows-программы похожи на программы обработки прерываний: невозможно предсказать, какое сообщение появиться в следующий момент.

27.2. Среды программирования

Компилятор (англ. compile — собирать вместе, составлять) — компьютерная программа или техническое средство, выполняющее преобразование исходного текста программы, написанного на языке высокого уровня, в машинный язык, язык близкий к машинному, или в объектный модуль. Процесс работы компилятора называется компиляцией.

Виды компиляции:

Пакетная. Компиляция нескольких исходных модулей в одном пункте задания.

Построчная. То же, что и интерпретация.

Условная. Компиляция, при которой транслируемый текст зависит от условий, заданных в исходной программе. Так, в зависимости от значения некоторой константы, можно включать или выключать трансляцию части текста программы.

Процесс компиляции состоит из следующих этапов:

Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем.

Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора.

Семантический анализ. Дерево разбора обрабатывается с целью

установления его семантики (смысла) — привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным

285

представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки.

Оптимизация. Выполняется удаление излишних конструкций и упрощение кода с сохранением его смысла. Оптимизация может быть на разных уровнях и этапах, например над промежуточным кодом или над конечным машинным кодом.

Генерация кода. Из промежуточного представления выдается код на целевом языке.

Вконкретных реализациях компиляторов, эти этапы могут быть разделены или совмещены в том или ином виде.

Транслятор обрабатывающая программа, предназначенная для преобразования исходной программы в объектный модуль.

Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати тексты программы и т. д.

Трансляция программы преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой.

Язык, на котором представлена входная программа, называется исходным языком, а сама программа исходным кодом. Выходной язык называется целевым языком или объектным кодом.

Виды трансляторов:

Адресный. Функциональное устройство, преобразующее виртуальный адрес в реальный адрес.

Диалоговый. Обеспечивает использование языка программирования в режиме разделения времени.

Многопроходной. Формирует объектный модуль за несколько просмотров исходной программы.

Обратный. То же, что детранслятор.

286

Однопроходной. Формирует объектный модуль за один последовательный просмотр исходной программы.

Оптимизирующий. Выполняет оптимизацию кода в создаваемом объектном модуле.

Синтаксически-ориентированный (синтаксически-управляемый). Получает

на вход описание синтаксиса и семантики языка и текст на описанном языке, который и транслируется в соответствии с заданным описанием.

Тестовый. Набор макрокоманд языка ассемблера, позволяющих задавать различные отладочные процедуры в программах, составленных на языке

ассемблера.

Интерпретатор (языка программирования) — вид транслятора, осуществляющего пооператорную (покомандную) обработку и выполнение исходной программы или запроса (в отличие от компилятора, транслирующего всю программу без её выполнения).

Типы интерпретаторов

Простой интерпретатор анализирует и тут же выполняет (собственно интерпретация) программу покомандно (или построчно), по мере поступления её исходного кода на вход интерпретатора. Достоинством такого подхода является мгновенная реакция. Недостаток такой

интерпретатор обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой.

Интерпретатор компилирующего типа это система из компилятора, переводящего исходный код программы в промежуточное представление, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Достоинством таких систем является большее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки большее требование к ресурсам и требование на корректность исходного кода.

Алгоритм работы простого интерпретатора

287

прочитать инструкцию;

проанализировать инструкцию и определить соответствующие действия;

выполнить соответствующие действия;

если не достигнуто условие завершения программы, прочитать следующую инструкцию и перейти к пункту 2.

Достоинства интерпретаторов

Большая переносимость интерпретируемых программ программа будет работать на любой платформе, на которой есть соответствующий интерпретатор.

Как правило, более совершенные и наглядные средства диагностики ошибок в исходных кодах.

Упрощение отладки исходных кодов программ.

Недостатки

Интерпретируемая программа не может выполняться отдельно без программы-интерпретатора.

Интерпретируемая программа выполняется медленнее, поскольку

промежуточный анализ исходного кода и планирование его выполнения требуют дополнительного времени в сравнении с непосредственным исполнением машинного кода, в который мог бы быть скомпилирован исходный код.

Практически отсутствует оптимизация кода, что приводит к дополнительным потерям в скорости работы интерпретируемых программ.

Компоновщик (редактор связей, линкер от англ. link editor, linker) — программа, которая производит компоновку принимает на вход один или несколько объектных модулей и собирает по ним исполняемый модуль.

Для связывания модулей, компоновщик использует таблицы имён, созданные компилятором в каждом из объектных модулей. Такие имена могут быть двух типов:

288

Определённые или экспортируемые имена функции и переменные,

определённые в данном модуле и предоставляемые для использования другим модулям.

Неопределённые или импортируемые имена функции и переменные, на которые ссылается модуль, но не определяет их внутри себя

Работа компоновщика заключается в том, чтобы в каждом модуле разрешить ссылки на неопределённые имена. Для каждого импортируемого имени находится его определение в других модулях, упоминание имени заменяется на его адрес.

Загрузчик (англ. loader) — программа, отвечающая за загрузку исполняемых файлов и запуск соответствующих новых процессов. Обычно является частью операционной системы, но может быть и самостоятельной программой к примеру, позволяющей операционной системе запускать программы, скомпилированные для других операционных систем.

При запуске новой программы загрузчик должен:

Считать информацию из запускаемого файла.

Если необходимо загрузить в память недостающие динамические библиотеки.

Заменить в коде новой программы неизвестные адреса на точные, с учётом текущего размещения памяти. Это называется «релокацией» (от англ. relocation) или «перемещением».

Создать в памяти образ нового процесса и запланировать его к исполнению.

Отладчик является модулем среды разработки или отдельным приложением, предназначенным для поиска ошибок в программе. Отладчик позволяет выполнять пошаговую трассировку, отслеживать значения переменных в процессе выполнения программы, устанавливать точки или условия останова и т. д.

Текстовый редактор компьютерная программа, предназначенная для создания и изменения текстовых файлов, а также их просмотра на экране, вывода на печать, поиска фрагментов текста и т. п.

289

27.3. Утилиты

Утилита (англ. utility или tool) — программный продукт, предназначенный не для решения какой-либо прикладной задачи, а для решения вспомогательных задач.

Компьютерные утилиты можно разделить на три группы:

Утилиты сервисного обслуживания компьютера,

утилиты расширения функциональности,

информационные утилиты.

Утилиты сервисного обслуживания (УСО):

дефрагментаторы проверяют степень фрагментации файлов и свободного пространства на доступных системе разделах логических накопителей, устраняют (снижают) её дефрагментируют, а также могут перемещать файлы для расположения в порядке, обеспечивающем оптимальное время доступа (минимальное к часто используемым файлам за счёт большего

к редко используемым)

утилиты по контролю ошибок и повреждений структуры разделов проверяют на наличие ошибок, файловую систему, и устройство хранения данных (жёсткий диск, устройство на основе Flash-памяти, дискету…). Также могут обращаться к SMART-модулю жёсткого диска для контроля его служебной информации;

утилиты контроля целостности системы сканируют конфигурационные файлы, символьные ссылки и/или ярлыки с целью поиска некорректных записей, а также удалённых или перемещённых файлов.

Утилиты расширения функциональности:

утилиты-конвертеры занимаются переконвертированием файлов,

представляющих собой различное представление одного и того же типа данных, но в разных форматах: аудио, видео, графические, конструкторские, модельные, программные файлы.

К ним относятся:

290

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]