
- •Автоматизированное рабочее место. Его состав, функции, аппаратное и программное обеспечение.
- •Администрирование и мониторинг Windows nt/2000.
- •Адресация в сети Internеt.
- •Алгоритм. Свойства алгоритма. Способы описания алгоритма. Примеры.
- •Аппаратно – зависимые компоненты в ос.
- •Архитектура Windows nt/2000. Ядро и вспомогательные модули ос
- •Архитектура монитора обработки транзакций (схема и описание).
- •Архитектура эвм. Обобщенная структурная схема эвм (классическая).
- •Архитектуры файл – сервер и клиент – сервер локальных сетей.
- •Базовые классы vcl. Характеристика. Примеры.
- •Блокировка в sql Server 2000. Методы управления блокированием ресурсов.
- •Блокировки в sql Server 2000 (2003). Методы управления блокированием ресурсов.
- •Блочно – модульный принцип организации программ в языке Турбо Паскаль. Локальные и глобальные переменные. Примеры.
- •Виды совместимости ос.
- •Внешние устройства пк: диалоговые, запоминающие, телекоммуникационные.
- •Выполнение арифметических операций в двоичной, шестнадцатеричной системах счисления. Примеры
- •Двоичная арифметика. Примеры.
- •Дискретная модуляция аналоговых сигналов. Импульсно – кодовая модуляция.
- •Достоинства и недостатки объектно – ориентированного программирования.
- •Достоинства и недостатки объектно – ориентированной модели данных
- •Жизненный цикл программного обеспечения.
- •Иерархическая модель данных.
- •Иерархическая модель представления данных. Ее достоинства и недостатки.
- •Иерархическая структура памяти эвм: уровни иерархии, назначение зу различных типов.
- •Информатика как наука. Основные направления научных исследований в области информатики.
- •Информационное, аппаратное и программное обеспечение кс: структура и функции.
- •Информационные технологии автоматизированного офиса.
- •Информационные технологии обработки текстовых данных.
- •Использование распределенной файловой системы при работе с бд.
- •Использование триггеров в sql Server 2000.
- •Классификация и краткая характеристика языков программирования
- •Классификация и характеристики принтеров.
- •Классификация периферийных устройств ввода-вывода.
- •Классическая архитектура ос. Ядро и вспомогательные модули ос
- •Кодирование информации. Равномерные и неравномерные коды. Двоичное кодирование.
- •Коммутация каналов в сетях: сущность, оценка, область применения
- •Коммутация пакетов в сетях.
- •Компоненты sql Server 2000 (2003).
- •Компоненты интерфейсов Windows в Delphi.
- •Технологии fddi
- •Концепция виртуальной памяти.
- •Краткая характеристика простых типов данных в языке Турбо Паскаль. Основные функции обработки простых типов данных. Примеры.
- •Линии связи и их характеристики.
- •Логическая и физическая организация файловых систем.
- •Маршрутизация пакетов в сетях: методы маршрутизации, их характеристика и области применения.
- •Методы и средства защиты информации в ккс от несанкционированного доступа.
- •Механизм использования шаблонов в Delphi.
- •Микроядерная архитектура ос.
- •Многомашинные вычислительные системы.
- •Многопроцессорные вычислительные системы.
- •Модуль. Структура модуля в языке Турбо – Паскаль. Примеры.
- •Модуль. Структура модуля в языке Турбо – Паскаль. Примеры.
- •Название и характеристика кэш – памяти
- •Назначение и компоненты хранилища данных.
- •Назначение и роль ос в работе пк. Примеры.
- •Назначение и характеристики системы прерываний. Порядок обработки прерывания.
- •Назначение классов tPersistent и tComponent. Примеры.
- •Назначение центрального процессора (цп). Магистральный принцип передачи информации в цп, его преимущества и недостатки.
- •Назначение, состав и виды ос.
- •Нормальные формы, их назначение.
- •Обеспечение безопасности в Windows nt/2000.
- •Объект. Методы объектов в языке Турбо Паскаль.
- •Операции алгебры логики. Схемы, реализующие основные логические элементы эвм. Примеры.
- •Определение степени связи между сущностями при проектировании бд.
- •Организация ввода – вывода данных в Delphi.
- •Организация параллелизма вычислений в современных процессорах
- •Организация программ в языке Турбо Паскаль. Локальные и глобальные параметры. Примеры.
- •Организация списков в языке Турбо Паскаль. Примеры.
- •Организация циклов
- •Основная характеристика языков запроса бд.
- •Основные показатели оценки качества программы
- •Основные понятия метода проектирования бд, сущность – связь. Примеры.
- •Основные понятия эффективности функционирования кс
- •Основные свойства класса tControl. Примеры
- •Основные события, возникающие от клавиатуры в Delphi. Примеры
- •Операции над строками
- •Основные средства защиты в субд.
- •Основные средства защиты, встроенные в ос.
- •Основные средства разработки бд.
- •Основные структуры алгоритмов, примеры.
- •2. Алгоритмы разветвляющейся структуры
- •3. Алгоритмы циклической структуры
- •4. Алгоритмы со структурой вложенных циклов
- •5. Подчиненные алгоритмы
- •Основные структуры алгоритмов
- •2. Алгоритмы разветвляющейся структуры
- •3. Алгоритмы циклической структуры
- •4. Алгоритмы со структурой вложенных циклов
- •5. Подчиненные алгоритмы
- •Основные типы данных в Object Pascal.
- •Основные типы моделей данных.
- •Основные фунции микропроцессора. Характеристики микропроцессора.
- •Основные характеристики и особенности локальных компьютерных сетей (лкс).
- •Основные характеристики эвм.
- •Основные этапы разработки бд.
- •1. Разработка, утверждение тз и подборка под него готовых частей
- •2. Определение необходимых таблиц и связей между ними, полей таблиц и ключевых полей в бд
- •3. Проектирование интерфейса приложения
- •4. Тестирование, создание документации, сдача проекта и расчет
- •Основные этапы создания приложений в Delphi.
- •Особенности технологий Fast Ethernet и 100 vg'- AnyLan.
- •Перевод чисел из одной системы исчисления в другую (восьмеричная, десятичная, шестнадцатеричная система исчисления). Примеры
- •Передача дискретных данных на канальном уровне: используемые протоколы, способы связи между отправителем и получателем.
- •Передача дискретных данных на физическом уровне: цифровое кодирование и аналоговая модуляция.
- •Передача дискретных данных
- •Переносимость ос на разные аппаратные платформы.
- •Периферийные устройства пк.
- •Перспективы развития кс.
- •Перспективы развития телекоммуникаций в России.
- •Планирование и диспетчеризация потоков в процессе функционирования ос.
- •Подпрограммы – функции. Примеры.
- •Показатели целевой и экономической эффективности функционирования кс
- •Поколения эвм и их краткая характеристика.
- •Понятие «информационная культура». В чем она проявляется?
- •Понятие и классификация информационных технологий.
- •Понятие индекса. Использование индексирования в бд.
- •Понятие информации. Дискретная и аналоговая информация. Носители информации.
- •Понятие информационного общества. Характерные черты информационного общества.
- •Понятие мультипрограммирования. Способы управления процессом в режиме мультипрограммирования.
- •Понятие отношения. Условия, при которых таблицу можно считать отношением.
- •Понятие процесса и потока в ос.
- •Понятие процессов. Виды процессов.
- •Понятие распределенной бд, ее достоинства и недостатки.
- •Порты ввода – вывода: параллельный и последовательный.
- •Представление команд в эвм. Основные стадии выполнения команд.
- •Преимущества и недостатки микроядерной архитектуры ос
- •Прикладные сервисы Internet: электронная почта, телеконференции, почтовые списки, передача файлов.
- •Применение эвм в научных исследованиях, медицине, образовании.
- •Принципы объектно – ориентированного программирования.
- •Принципы построения глобальных компьютерных сетей (гкс).
- •Программы – функции. Вызов функции. Примеры.
- •Проектирование рекурсивных алгоритмов в языке Турбо – Паскаль. Пример.
- •Простые типы данных в языке Турбо Паскаль. Основные функции обработки простых типов данных. Примеры.
- •Процедуры. Формальные, фактические параметры. Примеры.
- •Прямой доступ к памяти
- •Пути совершенствования и развития телекоммуникаций в России
- •Распределение памяти при выполнении программ. Строчные переменные в языке Турбо Паскаль. Примеры.
- •Режимы передачи информации: сущность, оценка, области изменения.
- •Резервное копирование. Типы резервного копирования sql Server 2000.
- •Резервное копирование. Типы резервного копирования sql Server 2000 (2003).
- •Реляционная модель данных.
- •Ресурсы вычислительной системы. Управление ресурсами.
- •Рынок информационных продуктов и услуг. Инфраструктура информационного рынка.
- •Самосинхронизирующие коды: состав, характеристика, области применения.
- •Связывание таблиц в бд. Основные виды связей. Примеры
- •Сетевая модель данных.
- •Сетевое коммуникационное оборудование лкс: состав и назначение.
- •Сетевое оборудование ккс: состав и назначение.
- •Сетевые ос.
- •Система ввода – вывода. Программирование рекурсивных алгоритмов в языке Турбо Паскаль. Примеры.
- •Система ввода вывода : структура с одним общим интерфейсом
- •Система ввода-вывода: структура с каналами ввода-вывода
- •Система команд эвм общего назначения, методы адресации, типы команд, типы и размеры операндов.
- •Системы автоматизированного поиска в Internet: состав и области применения.
- •Системы ввода – вывода: структуры с общим интерфейсом.
- •Системы счисления. Двоичная, восьмеричная, шестнадцатиричная системы счисления. Примеры представления числа в указанных системах счисления
- •Сканеры, модемы, их назначение и характеристики
- •Состав основной памяти компьютера. Конструктивное исполнение модулей памяти.
- •Составляющие элементы реляционной модели данных и формы их представления.
- •Сравнительная характеристика файловых систем fat, ntfs.
- •Средства синхронизации потоков в ос
- •Стандартные визуальные компоненты в Delphi.
- •Странично – сегментная организация памяти
- •Строковые типы данных в языке Турбо Паскаль. Основные процедуры и функции обработки строковых данных. Примеры.
- •Структура и функции программного обеспечения ккс.
- •Структура и функции программного обеспечения лкс.
- •Структура и функции системы обеспечения безопасности (соб) ккс
- •Структура и характеристика языка sql
- •Структура программы в языке Турбо Паскаль
- •Структура проекта в Delphi
- •Структура типов данных в языке Турбо Паскаль.
- •Структурированные типы данных: массивы, записи, множества в языке Турбо Паскаль. Примеры.
- •Структурная организация и взаимодействие узлов и устройств эвм
- •Текстовые файлы в языке Турбо Паскаль. Стандартные средств обработки текстовых файлов. Примеры.
- •Типизированные и нетипизированные файлы в языке Турбо Паскаль. Стандартные средства обработки файлов. Примеры.
- •Типовая структура гкс
- •Типовая структура ккс.
- •Типовая структура ккс.
- •Типовые струкуры многопроцессорных систем
- •Типы гкс и их особенности
- •Типы сетей связи и тенденции их развития
- •Требования к ос. Классификация ос.
- •Трехзвенная модель распределенной системы бд.
- •Управление доступом к передающей среде. Методы и протоколы доступа.
- •Управление проектами в Delphi.
- •Условные конструкции языка Турбо Паскаль. Примеры.
- •Форма. Управление понятиями формы в Delphi. Примеры.
- •Формы представления чисел в эвм. Коды чисел: прямой, обратный, дополнительный
- •Характеристика Microsoft sql Server 2000. Компоненты sql Server 2000.
- •Характеристика Windows 2003.
- •Характеристика Windows nt/2000.
- •Характеристика внешних запоминающих устройств (взу).
- •1. Накопители на жестких магнитных дисках
- •2. Накопители на компакт-дисках
- •4. Накопители на гибких магнитных дисках
- •Характеристика и области применения сетей Frame Relay.
- •Характеристика и области применения сетей isdn.
- •Характеристика и области применения сетей атм.
- •Характеристика и области применения сетей х.25
- •Характеристика интегрированной среды разработки программ Delphi.
- •Характеристика класса tObject. Методы класса. Примеры.
- •Характеристика клиентского программного обеспечения в Internet.
- •Характеристика накопителей на гибких и жестких магнитных дисках.
- •Накопители на жестких дисках
- •Характеристика протоколов семейства tcp/ip
- •Характеристика сетевой модели данных.
- •Характеристика спутниковых сетей связи.
- •Характеристика технологии Ethernet.
- •Характеристика языка sql. Функциональные категории языка sql.
- •Характеристика языка программирования Турбо Паскаль.
- •Характеристики основных топологий в лкс.
- •Эталонная модель взаимодействия открытых систем osi.
Средства синхронизации потоков в ос
Важным понятием синхронизации потоков является понятие “критической секции” программы. Критическая секция – это часть программы, результат выполнения которой может непредсказуемо меняться, если переменные, относящиеся к этой части программы, изменяются другими потоками в то время, когда выполнение этой части еще не завершено. Критическая секция всегда определяется по отношению к определенным критическим данным, при несогласованном изменении которых могут возникнуть нежелательные эффекты. В предыдущем примере такими критическими данными являлись записи файла базы данных. Во всех потоках, работающих с критическими данными, должна быть определена критическая секция. Заметим, что в разных потоках критическая секция состоит в общем случае из разных последовательностей команд.
Для синхронизации потоков одного процесса программист может использовать глобальные блокирующие переменные. С этими переменными, к которым все потоки процесса имеют прямой доступ, программист работает, не обращаясь к системным вызовам ОС. Каждому набору критических данных ставится в соответствие двоичная переменная, которой поток присваивает значение 0, когда он входит в критическую секцию, и значение 1, когда он ее покидает.
Блокирующие переменные могут использоваться не только при доступе к разделяемым данным, но и при доступе к разделяемым ресурсам любого вида.
Если все потоки написаны с учетом вышеописанных соглашений, то взаимное исключение гарантируется. При этом потоки могут быть прерваны операционной системой в любой момент и в любом месте, в том числе в критической секции.
Однако следует заметить, что одно ограничение на прерывания все же имеется. Нельзя прерывать поток между выполнением операций проверки и установки блокирующей переменной. Поясним это. Пусть в результате проверки переменной поток определил, что ресурс свободен, но сразу после этого, не успев установить переменную в 0, был прерван. За время его приостановки другой поток занял ресурс, вошел в свою критическую секцию, но также был прерван, не завершив работы с разделяемым ресурсом. Когда управление было возвращено первому потоку, он, считая ресурс свободным, установил признак занятости и начал выполнять свою критическую секцию. Таким образом, был нарушен принцип взаимного исключения, что потенциально может привести к нежелательным последствиям. Во избежание таких ситуаций в системе команд многих компьютеров предусмотрена единая, неделимая команда анализа и присвоения значения логической переменной (например, команды ВТС, BTR и BTS процессора Pentium). При отсутствии такой команды в процессоре соответствующие действия должны реализовываться специальными системными примитивами, которые бы запрещали прерывания на протяжении всей операции проверки и установки. Примитив – базовая функция ОС.
Реализация взаимного исключения описанным выше способом имеет существенный недостаток: в течение времени, когда один поток находится в критической секции, другой поток, которому требуется тот же ресурс, получив доступ к процессору, будет непрерывно опрашивать блокирующую переменную, бесполезно тратя выделяемое ему процессорное время, которое могло бы быть использовано для выполнения какого-нибудь другого потока. Для устранения этого недостатка во многих ОС предусматриваются специальные системные вызовы для работы с критическими секциями.
Итак, пусть поток-писатель начинает свою работу с проверки доступности критической секции – операции Р(b), и пусть он первым войдет в критическую секцию. Выполняя операцию Р(е), он может обнаружить отсутствие свободных буферов и перейти в состояние ожидания. Как уже было показано, из этого состояния его может вывести только поток-читатель, который возьмет очередную запись из буфера. Но поток-читатель не сможет этого сделать, так как для этого ему потребуется войти в критическую секцию, вход в которую заблокирован потоком-писателем. Таким образом, ни один из этих потоков не может завершить начатую работу и возникнет тупиковая ситуация, которая не может разрешиться без внешнего воздействия.
Рассмотрим еще один пример тупика. Пусть двум потокам, принадлежащим разным процессам и выполняющимся в режиме мультипрограммирования, для выполнения их работы нужно два ресурса, например принтер и последовательный порт. Такая ситуация может возникнуть, например, во время работы приложения, задачей которого является распечатка информации, поступающей по модемной связи.
Тупиковые ситуации надо отличать от простых очередей, хотя те и другие возникают при совместном использовании ресурсов и внешне выглядят похоже: поток приостанавливается и ждет освобождения ресурса. Однако очередь – это нормальное явление, неотъемлемый признак высокого коэффициента использования ресурсов при случайном поступлении запросов. Очередь появляется тогда, когда ресурс недоступен в данный момент, но освободится через некоторое время, позволив потоку продолжить выполнение. Тупик же, что видно из его названия, является в некотором роде неразрешимой ситуацией. Необходимым условием возникновения тупика является потребность потока сразу в нескольких ресурсах.
Невозможность потоков завершить начатую работу из-за возникновения взаимных блокировок снижает производительность вычислительной системы. Поэтому проблеме предотвращения тупиков уделяется большое внимание. На тот случай, когда взаимная блокировка все же возникает, система должна предоставить администратору-оператору средства, с помощью которых он смог бы распознать тупик, отличить его от обычной блокировки из-за временной недоступности ресурсов. И, наконец, если тупик диагностирован, то нужны средства для снятия взаимных блокировок и восстановления нормального вычислительного процесса.
Тупики могут быть предотвращены на стадии написания программ, т.е. программы должны быть написаны таким образом, чтобы тупик не мог возникнуть при любом соотношении взаимных скоростей потоков. В запрашивали ресурсы в одинаковой последовательности, то тупик был бы в принципе невозможен. Другой, более гибкий подход к предотвращению тупиков заключается в том, что ОС каждый раз при запуске задач анализирует их потребности в ресурсах и определяет, может ли в данной мультипрограммной смеси возникнуть тупик. Если да, то запуск новой задачи временно откладывается. ОС может также использовать определенные правила при назначении ресурсов потокам, например, ресурсы могут выделяться операционной системой в определенной последовательности, общей для всех потоков.
В тех же случаях, когда тупиковую ситуацию не удалось предотвратить, важно быстро и точно ее распознать, поскольку блокированные потоки не выполняют никакой полезной работы. Если тупиковая ситуация образована множеством потоков, занимающих массу ресурсов, распознавание тупика является нетривиальной задачей. Существуют формальные, программно-реализованные методы распознавания тупиков, основанные на ведении таблиц распределения ресурсов и таблиц запросов к занятым ресурсам. Анализ этих таблиц позволяет обнаружить взаимные блокировки.
Рассмотренные выше механизмы синхронизации, основанные на использовании глобальных переменных процесса, обладают существенным недостатком – они не подходят для синхронизации потоков разных процессов. В таких случаях операционная система должна предоставлять потокам системные объекты синхронизации, которые были бы видны для всех потоков, даже если они принадлежат разным процессам и работают в разных адресных пространствах.
Примерами таких синхронизирующих объектов ОС являются системные семафоры, мьютексы, события, таймеры и другие – их набор зависит от конкретной ОС, которая создает эти объекты по запросам процессов. Чтобы процессы могли разделять синхронизирующие объекты, в разных ОС используются разные методы. Некоторые ОС возвращают указатель на объект. Этот указатель может быть доступен всем родственным процессам, наследующим характеристики общего родительского процесса. В других ОС процессы в запросах на создание объектов синхронизации указывают имена, которые должны быть им присвоены. Далее эти имена используются разными процессами для манипуляций объектами синхронизации. В таком случае работа с синхронизирующими объектами подобна работе с файлами. Их можно создавать, открывать, закрывать, уничтожать.
Кроме того, для синхронизации могут быть использованы такие “обычные” объекты ОС, как файлы, процессы и потоки. Все эти объекты могут находиться в двух состояниях: сигнальном и несигнальном – свободном. Для каждого объекта смысл, вкладываемый в понятие “сигнальное состояние”, зависит от типа объекта. Так, например, поток переходит в сигнальное состояние тогда, когда он завершается. Процесс переходит в сигнальное состояние тогда, когда завершаются все его потоки. Файл переходит в сигнальное состояние в том случае, когда завершается операция ввода-вывода для этого файла. Для остальных объектов сигнальное состояние устанавливается в результате выполнения специальных системных вызовов. Приостановка и активизация потоков осуществляются в зависимости от состояния синхронизирующих объектов ОС.
Потоки с помощью специального системного вызова сообщают операционной системе о том, что они хотят синхронизировать свое выполнение с состоянием некоторого объекта. Будем далее называть этот системный вызов Wait(X), где Х – указатель на объект синхронизации. Системный вызов, с помощью которого поток может перевести объект синхронизации в сигнальное состояние, назовем Set(X).
Поток, выполнивший системный вызов Wait(X), переводится операционной системой в состояние ожидания до тех пор, пока объект Х не перейдет в сигнальное состояние. Примерами системных вызовов типа Wait() и Set() являются вызовы MaitForSingleObject() и SetEvent() в Windows NT, DosSemWait() и DosSemSet() в OS/2, s1eep() и wakeup() в UNIX.
Поток может ожидать установки сигнального состояния не одного объекта, а нескольких. При этом поток может попросить ОС активизировать его при установке либо одного из указанных объектов, либо всех объектов. Поток может в качестве аргумента системного вызова Wait() указать также максимальное время, которое он будет ожидать перехода объекта в сигнальное состояние, после чего ОС должна его активизировать в любом случае. Может случиться, что установки некоторого объекта в сигнальное состояние ожидают сразу несколько потоков. В зависимости от объекта синхронизации в состояние готовности могут переводиться либо все ожидающие это событие потоки, либо один из них.
Синхронизация тесно связана с планированием потоков. Во-первых, любое обращение потока с системным вызовом Wait(X) влечет за собой действия в подсистеме планирования – этот поток снимается с выполнения и помещается в очередь ожидающих потоков, а из очереди готовых потоков выбирается и активизируется новый поток. Во-вторых, при переходе объекта в сигнальное состояние (в результате выполнения некоторого потока – либо системного, либо прикладного) ожидающий этот объект поток (или потоки) переводится в очередь готовых к выполнению потоков. В обоих случаях осуществляется перепланирование потоков, при этом если в ОС предусмотрены изменяемые приоритеты и/или кванты времени, то они пересчитываются по правилам, принятым в этой операционной системе.
Рассмотрим несколько примеров, когда в качестве синхронизирующих объектов используются файлы, потоки и процессы.
Пусть программа приложения построена так, что для выполнения запросов, поступающих из сети, основной поток создает вспомогательные серверные потоки.
При поступлении от пользователя команды завершения приложения основной поток должен дождаться завершения всех серверных потоков и только после этого завершиться сам. Следовательно, процедура завершения должна включать вызов Wait(X1, Х2, …), где X1, Х2 – указатели на серверные потоки. В результате выполнения данного системного вызова основной поток будет переведен в состояние ожидания и останется в нем до тех пор, пока все серверные потоки не перейдут в сигнальное состояние, т.е. завершатся. После этого ОС переведет основной поток в состояние готовности. При получении доступа к процессору основной поток завершится. Другой пример. Пусть выполнение некоторого приложения требует последовательных работ-этапов. Для каждого этапа имеется свой отдельный процесс. Сигналом для начала работы каждого следующего процесса является завершение предыдущего. Для реализации такой логики работы необходимо в каждом процессе, кроме первого, предусмотреть выполнение системного вызова Wait(X), в котором синхронизирующим объектом является предшествующий поток.
Объект-файл, переход которого в сигнальное состояние соответствует завершению операции ввода-вывода с этим файлом, используется в тех случаях, когда поток, инициировавший эту операцию, решает дождаться ее завершения, прежде чем продолжить свои вычисления.
Однако круг событий, с которыми потоку может потребоваться синхронизировать свое выполнение, отнюдь не исчерпывается завершением потока, процесса или операции ввода-вывода. Поэтому в ОС, как правило, имеются и другие, более универсальные объекты синхронизации, такие, как событие (event), мьютекс (mutex), системный семафор и другие.