Добавил:
Я и кто? Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты РОС.docx
Скачиваний:
10
Добавлен:
10.09.2023
Размер:
1.18 Mб
Скачать

Билет 25

  1. Понятие модульного программирования. Цель и принципы.

Студфайлс

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

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

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

Основные концепции модульного программирования:

  • каждый модуль имеет единственную точку входа и выхода;

  • размер модуля по возможности должен быть минимизирован;

  • вся система построена из модулей;

  • каждый модуль не зависит от того, как реализованы другие модули.

Кусочек с лекций из прошлого семестра

Один из плюсов модульности заключается в том, что такую систему проще продать; ведь покупателю не обязательно может быть нужна ВСЯ система целиком. Вторым плюсом является то, что такую систему проще внедрять. (Для внедрения в предприятие большой системы нужно много денег, времени, людей. Малое количество предприятий может на это пойти.)

  1. Коротко дайте формат сегмента протокола TCP. Что содержится в поле ACK? Коротко дайте суть процедуры трехстороннего рукопожатия. SEQ выбирается ОС случайно? Применяется адаптивный timeout или нет?

Формат сегмента:

Это поток 32битных слов (мы всегда работаем словом), он состоит из:

- исходного порта (source port),

- destination port (порт TCP – номер почтового ящика, по которому хранится адрес процесса, который будет запускаться),

- sequence number (последовательный номер – поле, которое содержит номер первого байта, с которого начинается сообщение. Если сообщение фрагментировано, то TCP использует последовательные номера, чтобы потом пересобрать и создать на приемном канале весь сегмент. Транспортный уровень – работа с сегментами),

- номер подтверждения (acknowledgement number – последовательный номер следующего байта данных, которых источник предполагает получить. Если принимающий пакет несет 40 байт информации с номером подтверждения 0, то номер подтверждения = 40. Мы намерены получить 40 байт),

- смещение (offset – количество 32битных слов в заголовке),

- флаги (flags – контрольная информация для установки соединения и контроля задания приоритетов). Есть urgent флаг – поинтер на то, что это поле срочного пакета (поставь меня в очередь буферу, но с высоким приоритетом), есть флаг push – отправляет на немедленную отсылку (поставь меня первым в буфере), есть флаг reset – необходимо переустановить соединение, есть флаг synch (? «син») – начинаем соединение, есть флаг fin – не имеем больше информации, нечего передавать

- контрольная сумма

- sliding window – число байт, которые принимаем или передаем в текущий момент. Договариваемся о размерах этого самого окна

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

Что содержится в поле ACK?

ACK - Acknowledgement number. Это номер подтверждения. Содержится там номер следующего байта данных, которых источник предполагает получить (см. выше).

Коротко дайте суть процедуры трехстороннего рукопожатия.

Когда начинается соединение, то драйвер протокола TCP устанавливает соединение при помощи флага synch, оканчивает соединение при помощи флага fin. У них есть специальная процедура «рукопожатие TCP», оно трехстороннее. У нас «сэк» (sequence number) выбирается случайно, acknowledgement number я не знаю, и я отправляю сегмент (например от станции к серверу). Сервер говорит «я понял, ты 730 байт, якобы, мне передавал, теперь я жду 731-го, и у меня в «эке» (acknowledgement number) будет 731, а в «сэке» будет случайное значение (например 431) - это процесс рукопожатия – и отправляю соответствующий сегмент станции». Станция говорит: «хорошо, я понял, я теперь буду принимать «эк» с 431-го, а «сэк» будет 731-й. я снова тебе отправляю «эк» 431, «сэк» 731, ты меняешь местами «эк» 731, «сэк» 431 на сервере, а на станции, наоборот, «эк» 431, «сэк» 731. Все, установили рукопожатие».

SEQ выбирается ОС случайно?

(Этот момент со студфайлов, в лекции не сказано)

Изначально SEQ случайно выбирается ОС. После каждой передачи SEQ увеличивается на количество переданных байт.

Применяется адаптивный timeout или нет?

Если коротко: да, применяется

Далее полный фрагмент из лекции по этой части вопроса:

В TCP есть еще ряд проблем.

Передача данных. TCP богат дубликатами (где-то потеряли подтверждение acknowledgement)

При превышении timeout, для его вычисления, TCP начинает мерить RTT (пробег сегмента туда и обратно, время). Если timeout, за который я жду повторную передачу, будет долгий, то будет медленно. Если timeout маленький, то будут ненужные повторные передачи, я не успеваю все собрать на приемном конце. Вычисление timeout – специальный (в основном адаптивный) алгоритм, эти алгоритмы приспосабливаются к загрузке канала. Они используют метод задержки для адаптации к реальному времени прохождения сигнала в прямом и обратном направлении (FTT). Они будут этот timeout все время менять. Это сказывается на производительности системы, и гарантировать скорость другими средствами становится тяжело, потому что драйверы TCP живут отдельной жизнью. Они отправляют дубликаты по своему усмотрению, они меняют timeout-ы и + меняют размеры скользящего окна и меняют размер пересылаемой информации, все время меняя загрузку канала.