- •Билет 1 Поколения компьютеров
- •1.1. Первое поколение компьютеров.
- •1.2. Второе поколение компьютеров.
- •1.3. Третье поколение – компьютеры на интегральных схемах.
- •1.4. Компьютеры четвертого поколения и далее.
- •Аппаратный уровень вычислительной системы
- •2.2. Управление физическими ресурсами
- •2.3. Управление логическими/виртуальными ресурсами.
- •Система программирования – это комплекс программ, обеспечивающий поддержание жизненного цикла программы в вычислительной системе.
- •2.5 Прикладные системы
- •Этапы развития
- •2.5.3 Основные тенденции в развитии современных прикладных систем
- •. Выводы
- •Билет №6 Основы архитектуры компьютера. Основные компоненты и характеристики. Структура и функционирование цп. Центральный процессор Структура, функции цп
- •Регистры общего назначения (рон)
- •Специальные регистры
- •Буферизация работы с операндами
- •Алгоритм для записи данных в озу
- •Буферизация выборки команд
- •Примерный алгоритм использования
- •Определение. Последовательность действий при обработке
- •3.6.1 Внешние запоминающие устройства (взу).
- •3.6.1.1 Устройство последовательного доступа
- •3.6.1.2 Устройства прямого доступа
- •3.6.2 Организация потоков данных при обмене с внешними устройствами
- •3.6.4 Организация управления внешними устройствами
- •Прерывания: организация работы внешних устройств.
- •Синхронная работа с ву
- •Асинхронная работа с ву
- •Билет 11 Иерархия памяти
- •4.4. Иерархия памяти.
- •Билет 12 Мультипрограммный режим
- •Билет 13 Организация регистровой памяти (регистровые окна, стек)
- •5.2. Модель организации регистровой памяти в Intel Itanium.
- •Билет 14 Виртуальная оперативная память Аппарат виртуальной памяти
- •Билет 15
- •Системы с распределенной памятью – mpp.
- •Системы с общей памятью – smp.
- •Системы с неоднородным доступом к памяти – numa.
- •Кластерные системы.
- •Билет 17. Терминальные комплексы. Компьютерные сети. Терминальные комплексы.
- •Многомашинные вычислительные комплексы
- •Билет 18 Базовые понятия, определения, структура
- •Системы разделения времени
- •Сетевые, распределенные ос
- •Билет 21 Семейство протоколов tcp/ip
- •Ip адрес представляется последовательностью четырех байтов. В адресе кодируется уникальный номер сети, а также номер компьютера (сетевого устройства в сети).
- •Транспортный уровень
- •Уровень прикладных программ
- •Однако жизненные циклы процессов в реальных системах могут иметь свою, системно-ориентированную совокупность этапов.
- •Типы процессов
- •Принципы организации свопинга.
- •Определение процесса. Контекст
- •Контекст процесса
- •Аппарат системных вызов в oc unix.
- •Базовые средства организации и управления процессами
- •Механизм замены тела процесса.
- •Завершение процесса.
- •Жизненный цикл процессов
- •Формирование процессов 0 и 1
- •Основные задачи планирования
- •Планирование распределения времени цп между процессами
- •8.3.1 Кванты постоянной длины.
- •8.3.2 Кванты переменной длины
- •Алгоритмы, основанные на приоритетах
- •8.4.1 Планирование по наивысшему приоритету (highest priority first - hpf).
- •8.4.2 Класс подходов, использующих линейно возрастающий приоритет.
- •8.4.3 Нелинейные функции изменения приоритета
- •8.5 Разновидности круговорота.
- •8.6 Очереди с обратной связью (feedback – fb).
- •Билет 27 Смешанные алгоритмы планирования
- •Билет 29 Планирование в системах реального времени
- •Семафоры.
- •Мониторы.
- •Дополнительная синхронизация: переменные-условия.
- •Обмен сообщениями.
- •Синхронизация.
- •Адресация.
- •Длина сообщения.
- •Билет 33 Классические задачи синхронизации процессов. «Обедающие философы»
- •Билет 34 Задача «читателей и писателей»
- •Билет 35 Задача о «спящем парикмахере»
- •Сигналы.
- •Обработка сигнала.
- •Программа “Будильник”.
- •Двухпроцессный вариант программы “Будильник”.
- •Программные каналы
- •Использование канала.
- •Реализация конвейера.
- •Совместное использование сигналов и каналов – «пинг-понг».
- •Именованные каналы (fifo)
- •Модель «клиент-сервер».
- •Билет 39 Трассировка процессов. Трассировка процессов.
- •Трассировка процессов.
- •Для билетов 40-42 общая часть Именование разделяемых объектов.
- •Генерация ключей: функция ftok().
- •Общие принципы работы с разделяемыми ресурсами.
- •Очередь сообщений.
- •Доступ к очереди сообщений.
- •Отправка сообщения.
- •Получение сообщения.
- •Управление очередью сообщений.
- •Использование очереди сообщений.
- •Очередь сообщений. Модель «клиент-сервер»
- •Билет 41 Разделяемая память
- •Создание общей памяти.
- •Доступ к разделяемой памяти.
- •Открепление разделяемой памяти.
- •Управление разделяемой памятью.
- •Общая схема работы с общей памятью в рамках одного процесса.
- •Семафоры.
- •Доступ к семафору
- •Операции над семафором
- •Управление массивом семафоров.
- •Работа с разделяемой памятью с синхронизацией семафорами.
- •1Й процесс:
- •2Й процесс:
- •Механизм сокетов.
- •Типы сокетов. Коммуникационный домен.
- •Создание и конфигурирование сокета. Создание сокета.
- •Связывание.
- •Предварительное установление соединения. Сокеты с установлением соединения. Запрос на соединение.
- •Сервер: прослушивание сокета и подтверждение соединения.
- •Прием и передача данных.
- •Завершение работы с сокетом.
- •Резюме: общая схема работы с сокетами.
- •Билет 44
- •Структурная организация файлов
- •Атрибуты файла
- •Типовые программные интерфейсы работы с файлами
- •Индексные узлы (дескрипторы)
- •Модели организации каталогов
- •Варианты соответствия: имя файла – содержимое файла
- •Организация фс Unix
- •Логическая структура каталогов
- •Билет 50. Модель версии System V Структура фс
- •Работа с массивами номеров свободных блоков
- •Работа с массивом свободных ид
- •Индексные дескрипторы
- •Адресация блоков файла
- •Файл каталог
- •Установление связей
- •Недостатки фс модели версии System V
- •Билет 51. Модель версии ffs bsd
- •Стратегии размещения
- •Внутренняя организация блоков
- •Структура каталога ffs
- •Архитектура.
- •Программное управление внешними устройствами
- •Буферизация обмена
- •Планирование дисковых обменов
- •Билет 54 .Raid системы.
- •Файлы устройств, драйверы
- •Буферизация при блок-ориентированном обмене
- •Билет 57. Управление оперативной памятью
- •Двухуровневая организация
Прием и передача данных.
Собственно для приема и передачи данных через сокет используются три пары функций.
#include <sys/types.h>
#include <sys/socket.h>
int send(int sockfd, const void *msg, int len, unsigned int flags);
int recv(int sockfd, void *buf, int len, unsigned int flags);
Эти функции используются для обмена только через сокет с предварительно установленным соединением. Аргументы функции send(): sockfd – дескриптор сокета, через который передаются данные, msg и len - сообщение и его длина. Если сообщение слишком длинное для того протокола, который используется при соединении, оно не передается и вызов возвращает ошибку EMSGSIZE. Если же сокет окажется переполнен, т.е. в его буфере не хватит места, чтобы поместить туда сообщение, выполнение процесса блокируется до появления возможности поместить сообщение. Функция send() возвращает количество переданных байт в случае успеха и -1 в случае неудачи. Код ошибки при этом устанавливается в errno. Аргументы функции recv() аналогичны: sockfd – дескриптор сокета, buf и len – указатель на буфер для приема данных и его первоначальная длина. В случае успеха функция возвращает количество считанных байт, в случае неудачи -16.
Последний аргумент обеих функций – flags – может содержать комбинацию специальных опций. Нас будут интересовать две из них:
MSG_OOB – этот флаг сообщает ОС, что процесс хочет осуществить прием/передачу экстренных сообщений
MSG_PEEK – данный флаг может устанавливаться при вызове recv(). При этом процесс получает возможность прочитать порцию данных, не удаляя ее из сокета, таким образом, что последующий вызов recv() вновь вернет те же самые данные.
Другая пара функций, которые могут использоваться при работе с сокетами с предварительно установленным соединением – это обычные read() и write(), в качестве дескриптора которым передается дескриптор сокета.
И, наконец, пара функций, которая может быть использована как с сокетами с установлением соединения, так и с сокетами без установления соединения:
#include <sys/types.h>
#include <sys/socket.h>
int sendto(int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen);
int recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen);
Первые 4 аргумента у них такие же, как и у рассмотренных выше. В последних двух в функцию sendto() должны быть переданы указатель на структуру, содержащую адрес получателя, и ее размер, а функция recvfrom() в них возвращает соответственно указатель на структуру с адресом отправителя и ее реальный размер. Отметим, что перед вызовом recvfrom() параметр fromlen должен быть установлен равным первоначальному размеру структуры from. Здесь, как и в функции accept, если нас не интересует адрес отправителя, в качестве from можно передать NULL.
Завершение работы с сокетом.
Если процесс закончил прием либо передачу данных, ему следует закрыть соединение. Это можно сделать с помощью функции shutdown():
# include <sys/types.h>
# include <sys/socket.h>
int shutdown (int sockfd, int mode);
Помимо дескриптора сокета, ей передается целое число, которое определяет режим закрытия соединения. Если mode=0, то сокет закрывается для чтения, при этом все дальнейшие попытки чтения будут возвращать EOF. Если mode=1, то сокет закрывается для записи, и при осуществлении в дальнейшем попытки передать данные будет выдан кода неудачного завершения (-1). Если mode=2, то сокет закрывается и для чтения, и для записи.
Аналогично файловому дескриптору, дескриптор сокета освобождается системным вызовом close(). При этом, разумеется, даже если до этого не был вызван shutdown(), соединение будет закрыто. Таким образом, в принципе, если по окончании работы с сокетом мы собираемся закрыть соединение и по чтению, и по записи, можно было бы сразу вызвать close() для дескриптора данного сокета, опустив вызов shutdown(). Однако, есть небольшое различие с тем случаем, когда предварительно был вызван shutdown(). Если используемый для соединения протокол гарантирует доставку данных (т.е. тип сокета – виртуальный канал), то вызов close() будет блокирован до тех пор, пока система будет пытаться доставить все данные, находящиеся «в пути» (если таковые имеются), в то время как вызов shutdown() извещает систему о том, что эти данные уже не нужны и можно не предпринимать попыток их доставить, и соединение закрывается немедленно. Таким образом, вызов shutdown() важен в первую очередь для закрытия соединения сокета с использованием виртуального канала.