- •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.4. Абстракция данных.
"Абстракция данных" - популярная и в общем неверно определяемая техника
программирования. Фундаментальная идея состоит в разделении несущественных
деталей реализации подпрограммы и характеристик существенных для для
корректного ее использования.
Такое разделение может быть выражено через специальный "интерфейс",
сосредотачивающий описание всех возможных применений программы.
Типичный пример такого интерфейса :
- множество функций, которые могут иметь доступ к структурам
данных, посредством которых представлена "абстракция".
Одна из причин неполноты общепринятого определения состоит в том, что
любая языковая конструкция, поддерживающая абстракцию данных будет выражать
только некоторые аспекты фундаментальной идеи при недостаточности
выражения других. Например:
1. Упрятывание интерфейсов - Возможность спецификации интерфейсов,
препятствующих искажению данных и освобождающих пользователя от
необходимости знать детали реализации.
2. Конструирование интерфейсов - Возможность спецификации
интерфейсов, поддерживающих и навязывающих определенные соглашения
по использованию абстракций.
Примеры включают перегрузку знаков операций и динамическую типизацию.
3. Конкретизация - Возможность создания и инициализации
одного или более "экземпляров" (переменных объектов копий версий)
одной абстракции.
4. Локализация - Возможность упрощения реализации абстракции, принимая
во внимание, что весь доступ к ней направляется через ее интерфейс.
Примеры включают упрощение правил видимости и соглашений по вызову внутри
реализации.
5. Программная среда - Возможность поддержки разработки программм,
использующих абстракции. Примеры включают : загрузчики, понимающие
абстракции; библиотеки абстракций; отладчики, позволяющие программисту
работать в терминах абстракции.
6 Эффективность - Некоторая конструкция языка должна быть
"достаточна эффективна" для того, чтобы быть полезной.
Предполагаемая сфера применения - важный фактор для определения,
какие конструкции должны быть представлен в языке. Напротив,
эффективность конструкций определяет насколько свободно они
могут использоваться в данной программею Эффективность должна
рассматриваться в трех разных контекстах : при компиляции,
связывании и выполнении.
Основной упор при проектировании возможностей абстракции данных в С
делался на 2 и 3 аспектах, то есть на тех возможностях, которые позволяют
программисту обеспечивать элегантные и эффективные интерфейсы к абстракции.
С абстракция данных поддерживает возможность для программиста определять
новые типы, называемые "классами". Члены класса доступны только функциям
из явно объявленного набора. Просто упрятывание информации может быть
достигнуто, например, так :
class data_type
{ // описание данных
/* список функций, которые могут
использовать описания данных
("дружественные" функции) */
};
где только "дружественные функции (*1) могут иметь доступ к переменным
класса d a t a _ t y p e в том виде как они определены в описании данных.
В качестве альтернативы и часто более элегантно можно определить тип
данных, в котором множество функций, имеющих доступ к переменным класса,
само является составной частью самого типа:
class object_type {
/* описания, используемые
для реализации object_type */
public:
/* описания, специфицирующие
интерфейс с object_type */
};
Одна очевидная не нетривиальная цель многих современных проектов
языков программирования состоит в том, чтобы дать возможность
пользователю определять "абстрактные типы данных" с характеристиками
подобным характеристикам фундаментальных типов данных языка.
Ниже мы покажем, как добавляется тип данных c o m p l e x в язык С
и при этом к комплексным переменным могут применяться обычные
арифметические операции. Например :
complex a, x, y, z;
a = x/y + 3*z;
Идея представления объекта черным ящиком в дальнейшем поддерживается
механизмом иерархического конструирования классов из других классов.
Например:
class shape { ... };
class circle : shape { ... };
Класс shape в добавление к тому, что он используется как класс shape
может быть использован просто как circle. Говорят что класс circle есть
производный класс (*2) с классом shape в качестве своего базового класса.
Имеется возможность отсрочить разрешение типа объектов, имеющих общие
базовые классы до времени выполнения. Это позволяет манипулировать
объектами разных типов некоторым общим образом.