- •1. Вычислительные машины.
- •1.1. Модель эвм фон-Неймана.
- •1.2. Архитектуры современных эвм. Основные принципы работы отдельных компонентов. Центральные процессоры. Каналы (устройства обмена).
- •1.3. Иерархия и организация памяти эвм. Запоминающие устройства с произвольной выборкой. Внешние запоминающие устройства. Стековая память.
- •1.4. Организация и обработка прерываний от внешних устройств эвм. Схема с общей шиной. Буферизация.
- •1.5. Относительная адресация. Виртуальная память. Прямой доступ к памяти.
- •Страничная организация виртуальной памяти
- •Сегментная организация виртуальной памяти
- •1.6. Конвейеризация. Устройства ввода-вывода. Организация ввода-вывода.
- •1.7. Векторные машины. Машины с архитектурой risc. Многопроцессорные машины. Понятие о параллельных процессах.
- •Типы Процессорная симметричность
- •Потоки команд и данных
- •Соединения процессоров
- •Программные реализации Многопроцессорная обработка с sisd
- •Многопроцессорная обработка simd
- •Многопроцессорная обработка misd
- •Многопроцессорная обработка mimd
- •Понятия и терминология параллельного программного обеспечения
- •2. Персональные эвм.
- •2.1. Архитектура семейства микропроцессоров 286/586 (регистры, сегментация памяти, реальный и виртуальный режимы, защита памяти, шина, структура памяти, структура ввода/вывода, прерывания).
- •2.2. Пэвм. Система команд и способы представления информации. Архитектура математического сопроцессора.
- •3. Программный интерфейс вычислительных систем.
- •3.1. Программирование на машинном языке. Ассемблеры и макроассемблеры. Компиляторы.
- •3.2. Система управления вводом/ выводом. Спулинг.
- •3.3. Языки высокого уровня. Интерпретаторы. Абсолютные и перемещающие загрузчики. Связывающие загрузчики и редакторы связей.
- •3.4. Микропрограммы. Эмуляция. Микропрограммная поддержка.
- •4. Операционные системы.
- •4.1. Функции ядра операционной системы.
- •4.2. Управление заданиями и процессами. Понятие процесса, состояния процесса. Обработка прерываний.
- •4.3. Управление памятью, файловые системы. Концепции распределения памяти. Понятия оверлейного перекрытия, свопинга. Концепции виртуальной памяти.
- •4.4. Понятие файла, организация файла, файловой системы. Блок управления файлом.
- •4.5. Управление внешними устройствами и связью. Принципы функционирования систем управления вводом/выводом.
- •4.6. Ос. Поддержка систем программирования. Надежность, безопасность и защита. Поддержка интерфейса прикладного программирования (api)
- •4.7. Понятие о режимах реального времени. Мультизадачность и многопоточость.
- •4.8. Составные части ос ms dos, unix, Windows 95/98.
- •4.9. Загрузка ос. Основные группы команд ms dos, unix.
- •5. Парадигмы программирования.
- •5.1. Процедурное, декларативное и объектно-ориентированное программирование.
- •5.2. Логическое и функциональное программирование.(Принципы и сравнительная характеристика).
- •5.3. Параллельное программирование.
- •5.4. Абстракция данных.
- •6. Формальные языки и грамматики.
- •6.1. Иерархия Хомского.
- •6.2. Регулярные грамматики. Конечные автоматы.
- •6.3. Кс-грамматики и мп-автоматы.
- •6.4. Алгоритмическая разрешимость проблем в автоматных и кс языках.
- •6.5. Нисходящий и восходящий анализ.
5.2. Логическое и функциональное программирование.(Принципы и сравнительная характеристика).
Декларативные (функциональные и логические) языки (зародились в 60-е годы)
Особенность
Программный код на декларативном языке программирования представляет собой описание действий, которые можно осуществлять, а не последовательный набор команд.
Преимущества
Легче формализуется математическими средствами.
Как следствие, программы проще тестировать, т.е. проверять на наличие ошибок.
Высокая степень абстракции.
Недостатки
Снижение скорости работы программы.
Применение
Доказательство теорем.
Возможность обработки разнородных данных.
a) Функциональные языки
Особенность
Программу на функциональном языке можно представить как функцию с одним или несколькими аргументами.
Преимущества
Автоматическое динамическое распределение памяти компьютера для хранения данных.
Программист получает возможность абстрагироваться от представления данных и других рутинных операциях и сосредоточиться на предметной области.
Недостатки
Нелинейная структура программы, следовательно, такое программирование сложно для понимания.
Относительно невысокая эффективность вычислений.
Применение
Обработка рекурсивных структур данных.
Обработка символьной информации.
Примеры языков: Haskell, LISP
b) Логические языки
Особенность
Программа представляет собой совокупность правил или логических высказываний.
В программе могут быть логические причинно-следственные связи.
Преимущества
Возможность откатов, т.е. возвращения к предыдущей подцели при отрицательном результате одного из вариантов в процессе поиска решения. Это избавляет от необходимости поиска решения путем полного перебора вариантов и увеличивает эффективность реализации.
Недостатки
Узкий класс решаемых задач.
Применение
Эмуляция искусственного интеллекта.
Разработка экспертных систем.
Примеры языков: Prolog.
Целью логического и функционального программирования является вывод решений и они тесно связаны с задачами, решаемыми в искусственном интеллекте и экспертных системах (ЭС). На начальном этапе развития систем искусственного интеллекта (СИИ) и ЭС даже выделился целый класс специализированных языков программирования: языки логического и функционального программирования.
Процедурная программа состоит из последовательности операторов и предложений, управляющих последовательностью их выполнения. В основе такого программирования лежат взятие значения какой-то переменной, совершение над ним действия и сохранение нового значения с помощью оператора присваивания, и так до тех пор пока не будет получено желаемое окончательное значение.
Функциональная программа состоит из совокупности определений функций. Функции, в свою очередь, представляют собой вызовы других функций и предложений, управляющих последовательностью вызовов. Каждый вызов возвращает некоторое значение и вызвавшую ее функцию, вычисление которой после этого продолжается. Этот процесс повторяется до тех пор, пока запустившая процесс функция не вернет результат пользователю.
В логических языках программирования для решения задачи достаточно описания структуры и условий этой задачи. Поскольку последовательность и способ выполнения программы не фиксируется, как при описании алгоритма, программы могут в принципе работать в обоих направлениях, то есть программа может как на основе исходных данных вычислить результаты, так и по результатам - исходные данные.
Наиболее известными языками функционального программирования являются ЛИСП и РЕФАЛ, а логического - Пролог. Однако, с развитием языков программирования (в частности, с появлением объектно-ориентированных языков) и баз данных область их применения сузилась. Так ЛИСП используется как оболочка Автокад, а РЕФАЛ как средство для построения метаязыков и метакомпиляторов.
Поэтому в дальнейшем внимание будет уделено не рассмотрению конкретных языков функционального и логического программирования, а подходам, лежащим в основе их реализации и являющимися базовыми при создании систем принятия решений.
ЛИСП и Пролог в свое время являлись базовыми для создания экспертных систем. Поэтому, для того чтобы наглядно представить какой круг задач решается с помощью логического и функционального программирования, рассмотрим задачи, возникающие в ЭС. Прежде всего, это задачи прямого и обратного вывода.