чем определяется максимальный размер сегмента

Организация памяти

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

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

Как известно программист, когда пишет программы работает не с физическим адресом, а только с логическим. И то если он программирует на ассемблере. В том же Си ячейки памяти от программиста уже скрыты указателями, для его же удобства, но если грубо говорить указатель это другое представление логического адреса памяти, а в Java и указателей нет, совсем плохой язык. Однако грамотному программисту не помешают знания о том как организована память хотя бы на общем уровне. Меня вообще очень огорчают программисты, которые не знают как работает машина, обычно это программисты Java и прочие php-парни, с квалификацией ниже плинтуса.

Так ладно, хватит о печальном, переходим к делу.
Рассмотрим адресное пространство программного режима 32 битного процессора (для 64 бит все по аналогии)
Адресное пространство этого режима будет состоять из 2^32 ячеек памяти пронумерованных от 0 и до 2^32-1.
Программист работает с этой памятью, если ему нужно определить переменную, он просто говорит ячейка памяти с адресом таким-то будет содержать такой-то тип данных, при этом сам програмист может и не знать какой номер у этой ячейки он просто напишет что-то вроде:
int data = 10;
компьютер поймет это так: нужно взять какую-то ячейку с номером стопицот и поместить в нее цело число 10. При том про адрес ячейки 18894 вы и не узнаете, он от вас будет скрыт.

Все бы хорошо, но возникает вопрос, а как компьютер ищет эту ячейку памяти, ведь память у нас может быть разная:
3 уровень кэша
2 уровень кэша
1 уровень кэша
основная память
жесткий диск

Это все разные памяти, но компьютер легко находит в какой из них лежит наша переменная int data.
Этот вопрос решается операционной системой совместно с процессором.
Вся дальнейшая статья будет посвящена разбору этого метода.

Архитектура х86 поддерживает стек.
чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента
Стек это непрерывная область оперативной памяти организованная по принципу стопки тарелок, вы не можете брать тарелки из середины стопки, можете только брать верхнюю и класть тарелку вы тоже можете только на верх стопки.
В процессоре для работы со стеком организованны специальные машинные коды, ассемблерные мнемоники которых выглядят так:

push operand
помещает операнд в стек

pop operand
изымает из вершины стека значение и помещает его в свой операнд

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

Теперь кратко рассмотрим что такое регистры.
Это ячейки памяти в самом процессоре. Это самый быстрый и самый дорогой тип памяти, когда процессор совершает какие-то операции со значением или с памятью, он берет эти значения непосредственно из регистров.
В процессоре есть несколько наборов логик, каждая из которых имеет свои машинные коды и свои наборы регистров.
Basic program registers (Основные программные регистры) Эти регистры используются всеми программами с их помощью выполняется обработка целочисленных данных.
Floating Point Unit registers (FPU) Эти регистры работают с данными представленными в формате с плавающей точкой.
Еще есть MMX и XMM registers эти регистры используются тогда, когда вам надо выполнить одну инструкцию над большим количеством операндов.

Рассмотрим подробнее основные программные регистры. К ним относятся восемь 32 битных регистров общего назначения: EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP
Для того чтобы поместить в регистр данные, или для того чтобы изъять из регистра в ячейку памяти данные используется команда mov:

mov eax, 10
загружает число 10 в регистр eax.

mov data, ebx
копирует число, содержащееся в регистре ebx в ячейку памяти data.

Регистр ESP содержит адрес вершины стека.
Кроме регистров общего назначения, к основным программным регистрам относят шесть 16битных сегментных регистров: CS, DS, SS, ES, FS, GS, EFLAGS, EIP
EFLAGS показывает биты, так называемые флаги, которые отражают состояние процессора или характеризуют ход выполнения предыдущих команд.
В регистре EIP содержится адрес следующей команды, которая будет выполнятся процессором.
Я не буду расписывать регистры FPU, так как они нам не понадобятся. Итак наше небольшое отступление про регистры и стек закончилось переходим обратно к организации памяти.

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

линейный адрес=Базовый адрес сегмента(на картинке это начало сегмента) + смещение
Сегмент кода
Сегмент данных
Сегмент стека

Используемый сегмент стека задается значением регистра SS.
Смещение внутри этого сегмента представлено регистром ESP, который указывает на вершину стека, как вы помните.
Сегменты в памяти могут друг друга перекрывать, мало того базовый адрес всех сегментов может совпадать например в нуле. Такой вырожденный случай называется линейным представлением памяти. В современных системах, память как правило так организована.

Теперь рассмотрим определение базовых адресов сегмента, я писал что они содержаться в регистрах SS, DS, CS, но это не совсем так, в них содержится некий 16 битный селектор, который указывает на некий дескриптор сегментов, в котором уже хранится необходимый адрес.
чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента
Так выглядит селектор, в тринадцати его битах содержится индекс дескриптора в таблице дескрипторов. Не хитро посчитать будет что 2^13 = 8192 это максимальное количество дескрипторов в таблице.
Вообще дескрипторных таблиц бывает два вида GDT и LDT Первая называется глобальная таблица дескрипторов, она в системе всегда только одна, ее начальный адрес, точнее адрес ее нулевого дескриптора хранится в 48 битном системном регистре GDTR. И с момента старта системы не меняется и в свопе не принимает участия.
А вот значения дескрипторов могут меняться. Если в селекторе бит TI равен нулю, тогда процессор просто идет в GDT ищет по индексу нужный дескриптор с помощью которого осуществляет доступ к этому сегменту.
Пока все просто было, но если TI равен 1 тогда это означает что использоваться будет LDT. Таблиц этих много, но использоваться в данный момент будет та селектор которой загружен в системный регистр LDTR, который в отличии от GDTR может меняться.
Индекс селектора указывает на дескриптор, который указывает уже не на базовый адрес сегмента, а на память в котором хранится локальная таблица дескрипторов, точнее ее нулевой элемент. Ну а дальше все так же как и с GDT. Таким образом во время работы локальные таблицы могут создаваться и уничтожаться по мере необходимости. LDT не могут содержать дескрипторы на другие LDT.
Итак мы знаем как процессор добирается до дескриптора, а что содержится в этом дескрипторе посмотрим на картинке: чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента
Дескрипторы состоит из 8 байт.
Биты с 15-39 и 56-63 содержат линейный базовый адрес описываемым данным дескриптором сегмента. Напомню нашу формулу для нахождения линейного адреса:

линейный адрес = базовый адрес + смещение
[база; база+предел)
(база+предел; вершина]

Кстати интересно почему база и предел так рвано располагаются в дескрипторе. Дело в том что процессоры х86 развивались эволюционно и во времена 286х дескрипторы были по 8 бит всего, при этом старшие 2 байта были зарезервированы, ну а в последующих моделях процессоров с увеличением разрядности дескрипторы тоже выросли, но для сохранения обратной совместимости пришлось оставить структуру как есть.
Значение адреса «вершина» зависит от 54го D бита, если он равен 0, тогда вершина равна 0xFFF(64кб-1), если D бит равен 1, тогда вершина равна 0xFFFFFFFF (4Гб-1)
С 41-43 бит кодируется тип сегмента.
000 — сегмент данных, только считывание
001 — сегмент данных, считывание и запись
010 — сегмент стека, только считывание
011 — сегмент стека, считывание и запись
100 — сегмент кода, только выполнение
101- сегмент кода, считывание и выполнение
110 — подчиненный сегмент кода, только выполнение
111 — подчиненный сегмент кода, только выполнение и считывание

44 S бит если равен 1 тогда дескриптор описывает реальный сегмент оперативной памяти, иначе значение S бита равно 0.

Самым важным битом является 47-й P бит присутствия. Если бит равен 1 значит, что сегмент или локальная таблица дескрипторов загружена в оперативку, если этот бит равен 0, тогда это означает что данного сегмента в оперативке нет, он находится на жестком диске, случается прерывание, особый случай работы процессора запускается обработчик особого случая, который загружает нужный сегмент с жесткого диска в память, если P бит равен 0, тогда все поля дескриптора теряют смысл, и становятся свободными для сохранения в них служебной информации. После завершения работы обработчика, P бит устанавливается в значение 1, и производится повторное обращение к дескриптору, сегмент которого находится уже в памяти.

На этом заканчивается преобразование логического адреса в линейный, и я думаю на этом стоит прерваться. В следующий раз я расскажу вторую часть преобразования из линейного в физический.
А так же думаю стоит немного поговорить о передачи аргументов функции, и о размещении переменных в памяти, чтобы была какая-то связь с реальностью, потому размещение переменных в памяти это уже непосредственно, то с чем вам приходится сталкиваться в работе, а не просто какие-то теоретические измышления для системного программиста. Но без понимания, как устроена память невозможно понять как эти самые переменные хранятся в памяти.
В общем надеюсь было интересно и до новых встреч.

Источник

Управление памятью. Методы, алгоритмы и средства

6.6. Сегментная организация виртуальной памяти

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

Например, у компилятора есть много таблиц, которые формируются по мере трансляции, включая в себя [10]:

Во время компиляции каждая из первых четырех таблиц непрерывно растет. Последняя таблица при компиляции непредсказуемо увеличивается или уменьшается. В одномерной памяти эти пять таблиц должны размещаться в смежных частях виртуального адресного пространства, как показано на рис. 6.18. В одномерном адресном пространстве при росте таблиц одна может «упереться» в другую. Можно было бы программным путем забирать памяти у одних таблиц и передавать другим. Но такая работа аналогична управлению собственными оверлеями, что представляет собой неудобство и большую скучную (возможно, неоплачиваемую) работу.

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

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

Помимо простоты управления увеличивающимися или сокращающимися структурами данных, сегментированная память обладает и другими преимуществами.

Сравнение страничной организации памяти и сегментации приведено ниже.

ВопросСтраничнаяСегментация
Нужно ли программисту знать о том, что используется эта техника?НетДа
Сколько в системе линейных адресных пространств?ОдноМного
Может ли суммарное адресное пространство превышать размеры физической памяти?ДаДа
Возможно ли разделение процедур и данных, а также раздельная защита для них?НетДа
Легко ли размещаются таблицы с непостоянными размерами?НетДа
Облегчен ли совместный доступ пользователей к процедурам?НетДа
Зачем была придумана эта техника?Чтобы получить большое линейное адресное пространство без затрат на физическую памятьДля разбиения программ и данных на независимые адресные пространства, облегчения защиты и совместного доступа

На этапе создания процесса во время загрузки его образа в оперативную память ОС создает таблицу сегментов процесса, аналогичную таблице страниц, в которой для каждого сегмента указывается:

Если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок оперативной памяти, в который данный сегмент загружается в единственном экземпляре. Обычно программы в этих сегментах являются рентабельными ( reentrant able ), т.е. обладают свойством повторной входимости кода. Код таких программ не изменяется процессом.

Механизм преобразования виртуального адреса при сегментной организации очень схож с преобразованием виртуального адреса при страничной организации. Однако факт произвольного размера сегментов приводит к тому, что нельзя обойтись конкатенацией номера сегмента и смещения. В данном случае физический адрес получается сложением базового адреса сегмента, который определяется по номеру сегмента n из таблицы сегментов, и смещения S. Схема преобразования виртуального адреса при сегментной организации памяти приведена на рис. 6.19.

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Источник

8.1 Основные понятия сегментации

Рассмотрим пример, когда программа использует одно адресное пространство.

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

программа использует одно адресное пространство

Недостатки такой системы:

Один участок может полностью заполниться, но при этом останутся свободные участки. Можно конечно перемещать участки, но это очень сложно.

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

Рассмотрим то же пример с использованием сегментов:

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Каждый сегмент может расти или уменьшаться независимо от других.

В этом случае адрес имеет две части:

Сегменты не мешают друг другу.

Начальный адрес процедуры всегда начинается с (n,0). Что упрощает программирование.

Облегчает совместное использование процедур и данных.

Раздельная защита каждого сегмента (чтение, запись).

8.2 Реализация сегментации

Если страницы имеют фиксированный размер, то сегменты нет.

У сегментов так же, как и у страниц, существует проблема фрагментации.

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

8.2.1 Сегментация с использованием страниц: MULTICS

Каждая программа обеспечивалась до 2^18 сегментов (более 250 000), каждый из которых мог быть до 65 536 (36-разрядных) слов длиной.

Т.к. записей в таблице более 250 000, она сама разбита на страницы.

Сама таблица является отдельным сегментом.

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Сегмент с таблицей дескрипторов указывающих на таблицы страниц для каждого сегмента

Нормальный размер страницы равен 1024 словам. Если сегмент меньше 1024, то он либо не разбит на страницы, либо разбит на страницы по 64 слова.

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Когда происходит обращение к памяти, выполняется следующий алгоритм:

По номеру сегмента находится дескриптор сегмента.

Проверяется, находиться ли таблица страницы в памяти. Если в памяти, определяется ее расположение. Если нет, вызывается сегментное прерывание.

Проверяется, находиться ли страница в чем разница» rel=dofollow»>страница в памяти. Если в памяти, определяется ее расположение в памяти. Если нет в памяти, вызывается страничное прерывание.

К адресу начала страницы прибавляется смещение, в результате получаем адрес нужного слова в оперативной памяти.

Происходит запись или чтение.

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Преобразование адреса в системе MULTICS

Так как такой алгоритм будет работать достаточно медленно. Аппаратура системы MULTICS содержит высокоскоростной буфер быстрого преобразования адреса (TLB) размером в 16 слов. Адреса 16 наиболее часто использующихся страниц хранятся в буфере.

8.2.2 Сегментация с использованием страниц: Intel Pentium

Каждая программа обеспечивается до 16К сегментов, каждый из которых может быть до 1 млдр 36-разрядных слов длиной.

Основа виртуальной памяти системы Pentium состоит из двух таблиц:

Каждый селектор (указывает на дескриптор) представляет собой 16-разрядный номер.

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Селектор в системе Pentium

13 битов определяют номер записи в таблице дескрипторов, поэтому эти таблицы ограничены, каждая содержит 8К (2^13) сегментных дескрипторов.

1 бит указывает тип используемой таблицы дескрипторов LDT или GDT.

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Уровни привилегированности в системе Pentium

Уровни привилегированности запрещают выполняемому коду обратиться к более низкому уровню.

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Дескриптор программного (не данных) сегмента в системе Pentium (всего 8 байт (64 бита)).

Если размер сегмента указан в страницах, он может достигать 2^32 байтов (2^20 * 4Кбайт (2^12) (размер страницы в Pentium)).

Алгоритм получение физического адреса:

Селектор загружается в регистр (для сегмента команд в CS, для сегмента данных в DS).

Определяется глобальный или локальный сегмент (LDT или GDT).

Дескриптор извлекается из LDT или GDT, и сохраняется в микропрограммных регистрах.

Если дескриптор в памяти и смещение не выходит за пределы сегмента, программа может продолжить работу, если нет, происходит прерывание.

Система Pentium прибавляет базовый адрес к смещению, и получает линейный адрес,
если страничная организация памяти не используется, то он является физическим адресом (адрес получен),
— если страничная организация памяти используется, то он является виртуальным адресом.

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

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Преобразование пары (селектора, смещение) в физический адрес

При 32-разрядном (2^32=4Гбайт) адресе и 4Кбатной странице, сегмент может содержать 1 млн страниц (4Гбайт/4Кбайта). Поэтому используется двухуровневое отображение (создана таблица (страничный каталог) содержащая список из 1024 таблиц страниц), благодаря чему можно снизить количество записей в таблице страниц до 1024.

В этом случае сегмент в 4 Мбайта (1024 записи по 4 Кбайта страницы), будет иметь страничный каталог только с одной записью (и 1024 в таблице страниц), вместо 1 млн в одной таблице.

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Отображение линейного адреса на физический адрес

В системе Pentium также есть буфер быстрого преобразования адреса (TLB), в котором хранятся наиболее часто используемые комбинации Каталог-Страница на физический адрес страничного блока. Только если комбинация в TLB отсутствует, выполняется это алгоритм.

8.3 Особенности реализации в UNIX

В LUNIX системе на 32-разрядной машине каждый процесс получает 3Гбайта виртуального пространства для себя, и 1Гбайт для страничных таблиц и других данных ядра.

На компьютерах Pentium, используется двухуровневые таблицы страниц, и размер страниц фиксирован 4Кбайта

На компьютерах Alpha, используется трехуровневые таблицы страниц, и размер страниц фиксирован 8Кбайт

Для каждой программы выделяется 3 сегмента:

Источник

Управление перегрузкой и основные алгоритмы работы TCP

Опции

Заголовок TCP может содержать до 40 байт информации опций. Опции передают дополнительную информацию для пункта назначения или выравнивают другие опции. Определены две категории опций: однобайтовая и многобайтовая опция. Первая категория имеет два типа опций: оконечная опция и нет операции. Вторая категория содержит три типа опций: размер максимального сегмента, коэффициент масштаба, а также метку времени ( Рис. 11.4.).

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Конец опции. Это опция в 1 байт используется для заполнения поля опции, чтобы выровнять формат. Она должна быть использована только как последняя опция и только с одного конца. После этой опции приемник ищет полезную нагрузку. Иногда поле опции может содержать более чем один байт. Это означает, что необходимо выровнять поле опции, используя несколько опций типа «нет операции» (ничего не делать), после чего поставить конец опции ( Рис. 11.5.). Конец опции несет три значения информации для конечного пункта, она указывает, что:

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Нет операций. Эта опция ( Рис. 11.6.) в один байт используется как разделитель между опциями. Например, она может применяться для выравнивания следующей опции до 32-битовой границы.

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Максимальный размер сегмента (MSS – Maximum segment size). Эта опция определяет размер наибольшего куска данных, который может быть получен пунктом назначения сегмента TCP. Вопреки своему имени она определяет максимальный размер данных, но не максимальный размер сегмента. В то же время, поле длиной 16 бит может быть значением 65 535 байт. Значение по умолчанию — 536.

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

Возьмем, например, канал оптического кабеля ( OC-24 ), имеющего пропускную способность 1 244 160 Мбит/с и соединяющего два компьютера куском 6000 миль. Когда одна станция посылает данные другой, требуется по меньшей мере 64 мс, чтобы принять подтверждение. В течение этого периода могут быть посланы 10 Мбайт. Однако размер окна позволяет станции послать только 65 535 байт.

Для того чтобы увеличить размер окна, используется масштабный коэффициент окна. Новый размер окна находится повышением в 2 раза числа, заданного масштабным коэффициентом окна. Затем этот результат умножается на значение размера окна в заголовке.

Например, если значение масштабного коэффициента окна равно 3, действующий размер окна есть восьмикратное значение размера окна. Масштабный коэффициент может иметь значение не более 16 — наибольшее из позволяемых TCP/IP, то есть максимальный размер окна может быть 2 16 x 2 16 = 2 32 и совпадать с максимальным значением порядкового номера. Заметим, что размер окна не может быть больше, чем максимальное значение порядкового номера.

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

чем определяется максимальный размер сегмента. Смотреть фото чем определяется максимальный размер сегмента. Смотреть картинку чем определяется максимальный размер сегмента. Картинка про чем определяется максимальный размер сегмента. Фото чем определяется максимальный размер сегмента

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

Метка времени. Это 10-битовая опция с форматом, показанным на Рис. 11.9. Поле метки времени заполняется источником, когда сегмент покидает источник. Пункт назначения получает сегмент и накапливает значение метки времени. Когда пункт назначения посылает подтверждение байтов в этом сегменте, он вводит накопленное предыдущее значение в поле «эхо ответа». Источник, когда получает подтверждение, проверяет текущее время по сравнению с этим значением. Разность – это время прохождения «туда и обратно». Время «туда и обратно» может быть использовано TCP динамически для определения времени повторной передачи, как это уже обсуждалось.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *