игра брюс 2048
Главная / Операционные системы / Внутреннее устройство ядра Linux / Тест 38

Внутреннее устройство ядра Linux - тест 38

Упражнение 1:
Номер 1
Что описывает структура sk_buff?

Ответ:

 (1) данные которые приложение записывает в сокет или файл 

 (2) полный сетевой пакет 

 (3) фрейм протокола TCP/IP 

 (4) сетевой пакет без MAC заголовка 


Номер 2
Как соотносятся приходящий пакет и структура sk_buf?

Ответ:

 (1) структура sk_buf содержит данные сетевого пакета 

 (2) структура sk_buf содержит часть данных сетевого пакета, под остальное выделяется буфер памяти 

 (3) структура sk_buf содержит MAC и IP заголовки пакета и указатели на данные сетевого пакета 

 (4) структура sk_buf описывает данные сетевого пакета, находящегося в отдельной от него области памяти 


Номер 3
Какие данные содержит структура sk_buf?

Ответ:

 (1) указатели на начало и конец памяти с данными сетевого пакета 

 (2) смещения начала и конца данных 

 (3) указатели на заголовок следующиего 

 (4) поле cb (управляющий блок) используемый протоколами 


Упражнение 2:
Номер 1
Какие указатели на данные пакета содержит sk_buff

Ответ:

 (1) голова (head) 

 (2) конец (end) 

 (3) хвост (tail) 

 (4) данные (data) 

 (5) заголовки (headers) 


Номер 2
Какие ограничения и трудности имеет линейный sk_buff?

Ответ:

 (1) трудности возникают при работе с сетевыми пакетами размером большим размера страницы памяти 

 (2) трудности возникают при работе с большим количеством сетевых пакетов 

 (3) трудности возникают при больших задержках сетевых пакетов 

 (4) при обработке трафика трудностей и ограничений не возникает 


Номер 3
Возможно ли и если возможно, в каких случаях данные сетевого пакета размещаются более чем в одном буфере памяти?

Ответ:

 (1) если ядро не может выделить сплошную область памяти необходимого размера 

 (2) если данные приходят из сети небольшими порциями, а не все сразу 

 (3) если не проходит проверка контрольной суммы 

 (4) если размер пакета превышает некоторое заданное значение 


Упражнение 3:
Номер 1
Что происходит в сетевой подсистеме с sk_buff для исходящего трафика?

Ответ:

 (1) создаётся sk_buf, инициализируются указатели, для пустого sk_buff 

 (2) вызывается метод skb_reserve() для сдвига data и tail в сторону конца буфера 

 (3) каждый протокол выполняет операцию skb_push двигает указатель data в сторону начала буфера 

 (4) каждый протокол выполняет операцию skb_put двигает указатель end в сторону начала буфера 

 (5) вызывается метод skb_put() - двигает хвост в сторону конца буфера 


Номер 2
Какой модуль сетевой подсистемы создаёт и инициализирует объект sk_buf для исходящего трафика?

Ответ:

 (1) подсистема сокетов 

 (2) сетевой протокол верхнего уровня 

 (3) net device 

 (4) драйвер сетевого устройства 


Номер 3
Каким образом происходит формирование заголовков сетевого пакета?

Ответ:

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

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

 (3) каждый протокол формирует и записывает в буфер сетевого пакета заголовок своего уровня 

 (4) драйвер сетевого устройства, получив всё необходимую информацию формирует и записывает сетевой пакет 


Упражнение 4:
Номер 1
Что случается с структурами данных sk_buff и памятью на входящем трафике?

Ответ:

 (1) сетевой пакет копируется в память 

 (2) создаётся структура sk_buff 

 (3) объект sk_buff передаётся стеку протоколов, где каждый протокол "откусывает" свой заголовок вызовом skb_pull, a перед этим вызывает проверку такой возможности, используя метод skb_may_pull 

 (4) при необходимости вызывается функция skb_copy_bits() для копирования данных из "paged" части 

 (5) каждый протокол копирует свои данные в свои очереди 


Номер 2
Какой модуль создаёт и инициализирует структуру sk_buff при обработке входящего трафика?

Ответ:

 (1) протокол TCP 

 (2) протокол IP 

 (3) VFS 

 (4) net device 

 (5) драйвер сетевого устройства 


Номер 3
При получении пакета создаётся объект sk_buff. Какие значения указателей этой структуры возможны сразу после её создания?

Ответ:

 (1) data cовпадает с head 

 (2) data смещён от head вправо на размер заголовка Ethernet 

 (3) tail совпадает с end 

 (4) все указатели равны нулю 


Упражнение 5:
Номер 1
Для чего используется функция сетевой подсистемой skb_copy_bits?

Ответ:

 (1) для копирования части заголовка, оказавшейся в paged области памяти в линейную 

 (2) для копирования данных из области памяти приложения в область памяти ядра 

 (3) для клонирования структур sk_buf 

 (4) для дублирования данных сетевого пакета 


Номер 2
Для чего используется функция skb_may_pull()

Ответ:

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

 (2) достаточно ли в линейном буфере данных для обработки очередного заголовка 

 (3) проверка достаточного количества места в памяти для данных сетевого пакета 

 (4) для копирования части заголовка, оказавшейся в paged области памяти в линейную 


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

Ответ:

 (1) сетевой пакет может быть выброшен из обработки 

 (2) может быть использована функция skb_copy_bits() для недостающих данных из "paged" областей памяти 

 (3) сетевой пакет помечается как неполный и сохраняется 

 (4) выполняется перезапрос сетевого пакета 


Упражнение 6:
Номер 1
Что делает с указателями структуры sk_buf метод skb_pull?

Ответ:

 (1) сдвигает tail влево 

 (2) сдвигает указатели data и tail от начала буфера вправо на одно и то же смещение 

 (3) сдвигает data вправо 

 (4) по результатам выделения памяти под сетевой пакет задаёт значения head и end 


Номер 2
Что делает функция skb_reserve?

Ответ:

 (1) выделяет память под сетевой пакет 

 (2) сдвигает указатели data и tail от начала буфера вправо на одно и то же смещение 

 (3) сдвигает только указатель tail от начала буфера вправо 

 (4) выделяет память под сетевой пакет и сдвигает указатели tail и end от начала буфера вправо 


Номер 3
Что делает операция skb_push

Ответ:

 (1) сдвигает указатель data влево от tail 

 (2) выделяет память под сетевой пакет 

 (3) сдвигает указатели data и tail от начала буфера вправо на одно и то же смещение 

 (4) сдвигает data вправо 


Упражнение 7:
Номер 1
Каковы направления оптимизации структуры sk_buf?

Ответ:

 (1) уменьшается размер структуры 

 (2) оптимизируется выделение памяти с минимальной фрагментацией и клонирование объектов 

 (3) оптимизируется проверки целостности сетевых пакетов 

 (4) учитывается разрядности системы и кэш линии при размещении полей на структуре 


Номер 2
Каким образом sk_buf используется при обработке на стеке TCP/IP?

Ответ:

 (1) нет никакой специфики 

 (2) вводятся дополнительные указатели на заголовки протоколов TCP/IP 

 (3) вводится поле "cb" для хранения состояний протоколов 

 (4) используется специальный кеш для "двойных" структур для оптимизации клонирования 

 (5) оптимизируется освобождение памяти для избежание излишней фрагментации 

 (6) целое число объектов sk_buf должны полностью заполнять страницу памяти 


Номер 3
Каким образом sk_buf оптимизируется с точки зрения выделения памяти?

Ответ:

 (1) структура sk_buff для каждой платформы проектируется с учётом разрядности архитектуры 

 (2) целое число объектов sk_buf должны полностью заполнять страницу памяти 

 (3) структура sk_buff спроектирована с учётом кэш линии 

 (4) 64-х разрядные указатели на данные внутри области данных сетевого пакета заменяются на 32-разрядные смещения 

 (5) нет никакой специальной оптимизации 


Упражнение 8:
Номер 1
Что содержится в поле "управляющий блок" (cb) структуры sk_buff?

Ответ:

 (1) некоторые протоколы хранят там настройки соединения 

 (2) указатели на данные и заголовок каждого протокола 

 (3) некоторые протоколы хранят там свои данные 

 (4) указатели на структуру sock 


Номер 2
Как каждый протокол обходится с ранее оставленными в поле "cb" (управляющий блок) структуры sk_buff данными другого протокола?

Ответ:

 (1) каждый протокол дописывает свои данные к концу данных предыдущего протокола 

 (2) каждый протокол рассматривает это поле как пустое и использует его по своему усмотрению 

 (3) если поле уже заполнено, то протокол не использует его, а выделяет дополнительную память 

 (4) только протокол TCP использует это поле, поэтому такой проблемы нет 


Номер 3
Каким образом проверяется что данные, описывающие состояние протокола не переполнили поле "cb" (управляющие блок) структуры sk_buf?

Ответ:

 (1) это определяется в ходе code review и тестирования 

 (2) проверка на этапе отладки с использование макроса BUG_ON() 

 (3) проверка на этапе компиляции посредством макроса BUILD_BUG_ON() 

 (4) если данные переполняют поле, то сетевой протокол перестаёт работать, поэтому такая ситуация быстро находится в эксплуатации по анализу дампа 




Главная / Операционные системы / Внутреннее устройство ядра Linux / Тест 38