Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Защита информации от несанкционированного доступа 5 страница



4) Сигналы, причиной которых служит возникновение непредвиденных оши­бок.

5) Сигналы, посылаемые процессу, выполняющийся в режиме задачи (напри­мер, сигнал тревоги через опре­деленное время (таймер)).

6) Сигналы, с помощью которых может производиться трассировка выполне­ния процессов.

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

Обработка сигналов

3 способа:

1) Процесс может завершаться при поступлении сигнала.

2) Процесс может не обращать внимание на сигнал.

3) Процесс может выполнить пользовательскую функцию при получении.

oldfunction = signal (signum, function)

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

function – адрес функции.

oldfunction – возвращаемое значение.

Вместо адреса функции 2 предопределенных значения: 1 и 0.

Если 1, то процесс игнорирует все последующие сигналы с номера signum. Если 0, то процесс в режиме ядра завершается.

Для посылки сигнала используют системную функцию kill:

kill (PID, signum)

В pid указывается адресат, а в signum номер сигнала.

Если pid – положительное целое число, то ядро пошлет процессу сигнал с иденти­фикатором pid. Если pid = 0, то сигнал пошлется всем процессам, входящих в группу с процессом, вызвавшим функцию kill. Если pid = –1, то сигнал пошлется всем процессам, у которых код идентификатора пользователя совпадает с тем, под которым выполняется про­цесс, вызывавший kill. Пользователь сигнал со значением –1 послать не может. Если процесс, пославший сигнал, вы­полняется под кодом идентификации «суперпользователь», сигнал пошлется всем процессам, кроме идентификаторов 0 и 1 (его не может послать пользователь) Если pid – отрица­тельное число (но не –1), то сигнал пошлется всем процессам, входящих в группу с номе­ром, равным абсолютному значению pid.

У процесса есть и групповой идентификатор. Процесс получает уникальный код идентификации, потомок на­следуют код идентификации группы, наследует все права.


Вопрос 49: ОС UNIX. Управление памятью. Виртуальная память. Принцип Ден­нинга. Структура виртуального адресного пространства.

Управление памятью. Свопинг

В UNIX System V Release 4 реализована сегментно-страничная модель памяти в ее традиционном виде. Наряду с механизмом управления страницами используется и механизм свопинга, когда на диск выталкиваются все страницы какого-либо процесса. Свопинг применяется в "предаварийных" ситуациях, когда размер свободной оперативной памяти уменьшается до некоторого заданного порога, так что работа всей системы очень затрудняется.

На рисунке 5.11 показаны основные структуры, описывающие виртуальное адресное пространство отдельного процесса. В дескрипторе процесса proc содержится указатель на структуру as, с помощью которой описываются все виртуальные сегменты, кото­рыми обладает данный процесс. Элемент a_seg в структуре as указывает на первый дескриптор сегмента процесса. Каждый дескриптор сегмента (структура seg) описывает один виртуальный сегмент процесса. Дескрипторы сегментов процесса связаны в двунаправленный список. Дескриптор сегмента содержит базовый адрес начала сегмента в виртуальном адресном пространстве процесса, размер сег­мента, а также указатели на операции, которые допускаются над этим сегментом (дублирование, освобождение, отображение и т.д.).

Имеются следующие типы виртуальных сегментов:

Есть еще два типа сегментов:

Поле s_data дескриптора сегмента указывает на структуру данных segvn_dat, в которой содержится специфическая для сег­мента информация:

Рис. 5.11. Сегментно-страничная модель виртуальной памяти UNIX

Каждый сегмент имеет связь с дисковым пространством, на котором хранятся данные, отображаемые в данный сегмент вир­туального адресного пространства. Это может быть файл или часть файла на диске, или же это может быть область свопинга, которая файлом не является. Сегмент кода или сегмент инициализированных данных обычно связан с файлом, в котором хранится исполняемая программа. Под связью с файлом понимается отображение виртуального сегмента и его страниц на определенную область диска, из которой загружаются данные виртуальных страниц сегмента при их перемещении в оперативную память, а также куда помещаются данные при вытеснении виртуальных страниц на диск. Виртуальные страницы, которые были изначально взяты из определенного файла (который описывается на уровне ядра структурой vnode), называются vnode-страницами, а страницы, которые появились только при развертывании процесса (а это обычно страницы стека или неинициализированных сегментов данных) - анонимными страницами. Однако анонимные страницы также имеют связь с файлом, в который они выталкиваются при их вытеснении из физической памяти (так называемое свопинг-устройство). На свопинг-устройство также указывает vnode, поэтому в этом качестве может выступать любой файл, а перемещение страниц из свопинг-устройства в память осуществляется теми же функциями, что используются для vnode-стра­ниц.

Отображение виртуальных страниц сегмента на физические задается с помощью таблицы HAT (Hardware Address Translation), указатель на которую имеется в структуре адресного пространства процесса as. Структура таблицы HAT зависит от аппа­ратной платформы, но в любом случае с ее помощью можно найти таблицу или таблицы страниц, содержащих дескрипторы страниц (структуры типа pte). Дескриптор страницы содержит признак наличия данной виртуальной страницы в физической памяти, номер соответствующей физической страницы, а также ряд признаков типа "модификация", "была ссылка", помогающих операционной сис­теме планировать процесс вытеснения виртуальных страниц на диск.

В UNIX System V Release 4 используется алгоритм перемещения виртуальных страниц процесса в физическую память по за­просу. Обычно при запуске процесса в физическую память помещается только небольшая часть страниц, необходимая для старта про­цесса, а остальные страницы загружаются при страничных сбоях. Очевидно, что начальный период работы любого процесса порождает повышенную нагрузку на систему. Если при поиске виртуального адреса в соответствующем дескрипторе обнаруживается признак отсутствия этой страницы в физической памяти, то происходит страничное прерывание, и ядро перемещает эту страницу с диска в физическую память. Для поиска страницы на диске используется информация из структуры s_data сегмента - либо vnode и offset, если страница типа vnode, либо информация о расположении анонимной страницы в области свопинга с помощью информации о ее распо­ложении там по карте amp.

Если в физической памяти недостаточно места для размещения затребованной процессом страницы, то ОС выгружает неко­торые страницы на диск. Этот процесс осуществляется специальным процессом ядра, "выталкивателем страниц", имеющем в UNIX System V Release 4 имя pageout. Для принятия решения о том, какую виртуальную страницу нужно переместить на диск, процессу pageout нужно иметь информацию о текущем состоянии физической памяти.

Виртуальная память (ВП)

Используется сегментно-страничное распределение. При глобальном алгоритме – ищется во всех процессах, а при локальном – в одном процессе. При использовании гло­бального алгоритма могут быть тупики.

«Если в момент времени t программа обращается к страницам, то при надлежащем выборе t для того же набора с большей вероятностью это программа будет обращаться к тем же страницам». {c, …, a} – {T, T – t}.

С увеличением времени набор изменился. Смена рабочего набора не часто.

В самой ОС используется следующее представление виртуальной памяти:

ВП каждого процесса представлена в виде набора сегментов, три из которых обяза­тельны для каждого процесса, два – …… Сегменты описываются в структуре.

Сегменты:

1. сегменты программного кода – доступен только для чтения и может быть раз­деляем (принадлежать разным процес­сам).

2. сегмент данных – доступен для чтения и записи и является частным (принад­лежит одному процессу).

3. сегмент стека – доступен для чтения и записи и является частным (принадле­жит одному процессу).

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

5. сегмент файлов, отображаемых в ВП – можно отображать файл в память и ра­ботать как с частью ОП. Откачки не про­исходит.

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

Описатель каждого сегмента содержит индивидуальные характеристики сегмента такие, как:

§ виртуальный адрес начала сегмента

§ размер сегмента в байтах

§ список операций, которые можно выполнить над сегментом

§ статус сегмента

§ указатель на таблицу описателей станиц сегмента

На уровне страниц поддерживается два вида описательных структур. Для каждой станицы физической ОП существует опи­сатель, входящий в один из трех списков.

1 список – описатель указания страниц, не допускающий модификаций.

2 список – список описателя свободных страниц, которые не используются.

3 список – список страниц, которые могут изменяться.

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

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

- Просматривается таблица отображения всех сегментов ВП данного процесса.

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

Любой процесс, который требует страницы не из своего набора, становится канди­датом на ……………– ему не предостав­ляют ресурсы центральный процесс, он становится на очередь на откачку (т.е. выгружается из памяти).

Упрощенная версия:

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


Вопрос 50: ОС UNIX. Системные вызовы управления вводом-выводом.

Системные вызовы для управления вводом - выводом

Open – открыть

Create – создать

Dup –сделать копию

Read – чтение

Write – запись

Close – закрыть

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

fd = open(pathname, flags, modes);

где pathname - имя файла, flags указывает режим открытия (например, для чтения или записи), а modes содержит права доступа к файлу в случае, если файл создается. Системная функция open возвращает целое число (*), именуемое пользовательским дескриптором файла. Другие операции над файлами, такие как чтение, запись, позиционирование головок чтения-записи, воспроизведение дескриптора файла, установка параметров ввода-вывода, определение статуса файла и закрытие файла, используют значение дескриптора файла, возвращаемое системной функцией open.

Синтаксис вызова системной функции read (читать):

number = read(fd, buffer, count)

где fd - дескриптор файла, возвращаемый функцией open, buffer - адрес структуры данных в пользовательском процессе, где будут размещаться считанные данные в случае успешного завершения выполнения функции read, count – количество байт, которые пользователю нужно прочитать, number - количество фактически прочитанных байт.

Синтаксис вызова системной функции write (писать):

number = write(fd, buffer, count);

где переменные fd, buffer, count и number имеют тот же смысл, что и для вызова системной функции read.

Процесс закрывает открытый файл, когда процессу больше не нужно обращаться к нему. Синтаксис вызова системной функции close (закрыть):

close (fd);

где fd - дескриптор открытого файла. Ядро выполняет операцию закрытия, используя дескриптор файла и информацию из соответствующих записей в таблице файлов и таблице индексов. Если счетчик ссылок в записи таблицы файлов имеет значение, большее, чем 1, в связи с тем, что были обращения к функциям dup или fork, то это означает, что на запись в таблице файлов делают ссылку другие пользовательские дескрипторы, что мы увидим далее; ядро уменьшает значение счетчика и операция закрытия завершается. Если счетчик ссылок в таблице файлов имеет значение, равное 1, ядро освобождает запись в таблице и индекс в памяти, ранее выделенный системной функцией open (алгоритм iput). Если другие процессы все еще ссылаются на индекс, ядро уменьшает значение счетчика ссылок на индекс, но оставляет индекс процессам; в противном случае индекс освобождается для переназначения, так как его счетчик ссылок содержит 0. Когда выполнение системной функции close завершается, запись в таблице пользовательских дескрипторов файла становится пустой. Попытки процесса использовать данный дескриптор заканчиваются ошибкой до тех пор, пока дескриптор не будет переназначен другому файлу в результате выполнения другой системной функции. Когда процесс завершается, ядро проверяет наличие активных пользовательских дескрипторов файла, принадлежавших процессу, и закрывает каждый из них. Таким образом, ни один процесс не может оставить файл открытым после своего завершения.

Системная функция open дает процессу доступ к существующему файлу, а системная функция creat создает в системе новый файл. Синтаксис вызова системной функции creat:

fd = creat(pathname, modes);

где переменные pathname, modes и fd имеют тот же смысл, что и в системной функции open. Если прежде такого файла не существовало, ядро создает новый файл с указанным именем и указанными правами доступа к нему; если же такой файл уже существовал, ядро усекает файл (освобождает все существующие блоки данных и устанавливает размер файла равным 0) при наличии соответствующих прав доступа к нему (***)).

Системная функция dup копирует дескриптор файла в первое свободное место в таблице пользовательских дескрипторов файла, возвращая новый дескриптор пользователю. Она действует для всех типов файла. Синтаксис вызова функции:

newfd = dup (fd);

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


Вопрос 51: ОС UNIX. Средства взаимодействия с пользователем.


Вопрос 53: Методы защиты информации в ОС МСВС.

Характеристика ОС MSVS

Для сертификации высоких классов …………………приведен метод ОС……………………………………………………………………

Для построения мобильной системы вооруженных сил добав­лены……………………………………………………………….

MSVS представляет из себя:

- Многопользовательская

- Многозадачная

- Обеспечивает многоуровневую систему приоритетов

- Виртуальная память

- Возможность работы в сети

- Многопроцессорная конфигурация

- Кластерная конфигурация

- Функционирует на платформах Intel, Mix, Spark

- Файловая система поддерживает имена файлов до 256 символов с возможностью работы на рус­ском языке, списке прав доступа, существует возможность использовать файловую систему FAT, NTFS, ISO 9660 (компакт - диски)

В состав входят:

- Графическая подсистема

- Система печати поддерживает мандатное управление доступа, маркировка печатных лис­тов…………………………..

- Факт печати регистрируется в журнале печати

Для построения защищенной системы для временной совместимости с Windows NT, используется система терминального доступа к NT. Встроены средства защиты, удовлетворяющие требованиям 2 класса защищаемости средств вычислительной техники от NSDN согласно требованиям в гостехкомиссии.

Существуют средства защиты включения:

- Мандатное

- Полное дискретизиционное

- Рулевое управление доступа система реали­зует…………………………………………………………………………………………………………………………………………………………..

В зависимости от информации, которая содержится в заголовке API – пакета, на любом промежу­точном или конечном узел может переслать, уничтожить пакет или послать уведомление. Выбор действия – фильтрация пакета. Для этого программа API – chance. Ядро заполняется с 3 наборами правил фильтрации пакетов. В каждом есть правило или условия, которые должны выполнить.

В системе реальная поддержка контроля целостности ТИ, которая представляет из себя БД, где раз­мер, имя, дата создания и т.д. для файла. Есть контроллер суммы, т.е. сигнатура.


Вопрос 52: ОС UNIX. Существующие типы файлов.

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

Обычные файлы (или регулярные) файлы реально представляют собой набор блоков (возможно, пустой) на устройстве внешней памяти, на котором поддерживается файловая система. Такие файлы могут содержать как текстовую информацию (обычно в формате ASCII), так и произвольную двоичную информацию. Файловая система не предписывает обычным файлам какую-либо структуру, обеспечивая на уровне пользователей представление обычного файла как последовательности байтов. Используя базовые системные вызовы (или функции библиотеки ввода/вывода, которые мы рассмотрим в разделе 4), пользователи могут как угодно структуризовать файлы. В частности, многие СУБД хранят базы данных в обычных файлах ОС UNIX. Для некоторых файлов, которые должны интерпретироваться компонентами самой операционной системы, UNIX поддерживает фиксированную структуру. Наиболее важным примером таких файлов являются объектные и выполняемые файлы. Структура этих файлов поддерживается компиляторами, редакторами связей и загрузчиком. Однако, эта структура неизвестна файловой системе. Для нее такие файлы по-прежнему являются обычными файлами.

Файлы-каталоги. Наличие обычных файлов недостаточно для организации иерархических файловых систем. Требуется наличие каталогов, которые сопоставляют имена файлов или каталогов с их физическим описанием. Каталоги представляют собой особый вид файлов, которые хранятся во внешней памяти подобно обычным файлам, но структура которых поддерживается самой файловой системой. Структура файла-каталога очень проста. Фактически, каталог - это таблица, каждый элемент которой состоит из двух полей: номера i-узла данного файла в его файловой системе и имени файла, которое связано с этим номером (конечно, этот файл может быть и каталогом). Если просмотреть содержимое текущего рабочего каталога с помощью команды ls -ai, то можно получить, например, следующий вывод:

inode File

number name

_________________________

33.

122..

54 first_file

65 second_file

65 second_again

77 dir2

Этот вывод демонстрирует, что в любом каталоге содержатся два стандартных имени - "." и "..". Имени "." сопоставляется i-узел, соответствующий самому этому каталогу, а имени ".." - i-узел, соответствующий "родительскому" каталогу данного каталога. "Родительским" (parent) каталогом называется каталог, в котором содержится имя данного каталога. Файлы с именами "first_file" и "second_file" - это разные файлы с номерами i-узлов 54 и 65 соответственно. Файл "second_again" представляет пример так называемой жесткой ссылки: он имеет другое имя, но реально описывается тем же i-узлом, что и файл "second_file". Наконец, последний элемент каталога описывает некоторый другой каталог с именем "dir2". Этот последний файл, как и любой обычный файл, хранится в файловой системе как набор блоков запоминающего устройства. Однако файловая система знает, что на самом деле это каталог со структурой, контролируемой файловой системой. Поэтому файлам-каталогам соответствует особый тип файла (обозначенный в их i-узлах), по отношению к которому возможно выполнение только специального набора системных вызовов: mkdir, производящего новый каталог, rmdir, удаляющий пустой (незаполненный) каталог, getdents, позволяющего прочитать содержимое указанного каталога. Отсутствует системный вызов, позволяющий прямо писать в файл-каталог. Какими бы правами вы не обладали по отношению к файлу-каталогу, прямая запись информации в него запрещена - прямое следствие фиксированной (и закрытой от пользователей) структуры файлов-каталогов. Запись в файлы-каталоги производится неявно при создании и уничтожении файлов и каталогов, однако читать из файла-каталога при наличии соответствующих прав можно (пример - стандартная утилита ls, которая как раз и пользуется системным вызовом getdents).

Специальные файлы. Специальные файлы не хранят данные. Они обеспечивают механизм отображения физических внешних устройств в имена файлов файловой системы. Каждому устройству, поддерживаемому системой, соответствует, по меньшей мере, один специальный файл. Специальные файлы создаются при выполнении системного вызова mknod, каждому специальному файлу соответствует порция программного обеспечения, называемая драйвером соответствующего устройства. При выполнении чтения или записи по отношению к специальному файлу, производится прямой вызов соответствующего драйвера, программный код которого отвечает за передачу данных между процессом пользователя и соответствующим физическим устройством. При этом имена специальных файлов можно использовать практически всюду, где можно использовать имена обычных файлов. Например, команда cp myfile /tmp/kuz перепишет файл с именем myfile в подкаталог kuz рабочего каталога. В то же время, команда cp myfile /dev/console выдаст содержимое файла myfile на системную консоль вашей установки. Различаются два типа специальных файлов - блочные и символьные.Блочные специальные файлы ассоциируются с такими внешними устройствами, обмен с которыми производится блоками байтов данных, размером 512, 1024, 4096 или 8192 байтов. Типичным примером подобных устройств являются магнитные диски. Файловые системы всегда находятся на блочных устройствах, так что в команде mount обязательно указывается некоторое блочное устройство. Символьные специальные файлы ассоциируются с внешними устройствами, которые не обязательно требуют обмена блоками данных равного размера. Примерами таких устройств являются терминалы (в том числе, системная консоль), последовательные устройства, некоторые виды магнитных лент. Иногда символьные специальные файлы ассоциируются с магнитными дисками. При обмене данными с блочным устройством система буферизует данные во внутреннем системном кеше. Через определенные интервалы времени система "выталкивает" буфера, при которых содержится метка "измененный". Кроме того, существуют системные вызовы sync и fsync, которые могут использоваться в пользовательских программах, и выполнение которых приводит к выталкиванию измененных буферов из общесистемного пула. Основная проблема состоит в том, что при аварийной остановке компьютера (например, при внезапном выключении электрического питания) содержимое системного кеша может быть утрачено. Тогда внешние блочные файлы могут оказаться в рассогласованном состоянии. Например, может быть не вытолкнут супер-блок файловой системы, хотя файловая система соответствует его вытолкнутому состоянию. Заметим, что в любом случае согласованное состояние файловой системы может быть восстановлено (конечно, не всегда без потерь пользовательской информации). Обмены с символьными специальными файлами производятся напрямую, без использования системной буферизации.


Вопрос 54: Стандарты защищенности ОС и адекватная политика безопасности.

ОС называется защищенной, если она предусматривает средства защиты от основных классов угроз (см. выше).

ОС частично-защищенная, если предусматриваются не все средства защиты.

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

В отношении ОС политика безопасности определяет то, какие пользователи могут работать, к каким доступ, какие события должны регистрироваться в журнале событий и т.д.

Адекватная политика безопасности – это такая политика безопасности, которая обеспечивает доста­точный уровень безопасности ОС. Адекватная политика безопасности – это необязательно та политика безопасности, при которой достигается максимальный уровень защищенности ОС.

Два подхода к созданию защищенной ОС:

1. комплексный (механизм защиты внедряется на стадии разработки ОС; на момент создания сис­темы должна быть продумана линия зашиты)

2. фрагментальный (простота, но система не гарантирует защиты от комплексных угроз). Пре­имущества: защиты организуется одним модулей, относительная дешевизна.

Стандарт защищенности (оранжевая книга):

1) отсутствие криптографических средств защиты информации

2) отсутствие вопросов защиты типа «отказ в обслуживании»

3) отсутствие защиты от программных закладок

4) недостаточно рассматриваются вопросы взаимодействия нескольких экземпляров защищен­ных систем в локальной или глобальной сети

Документы:

1. средства вычислительной техники (СВТ) (защита от MSD информации, показатели защищенно­сти от MSD информации). Рассматриваются требования к обеспечению защищенности отдель­ных программно-аппаратных компонентов (элементов) и защищенных комплексных систем. Под СВЧ понимаются не только аппаратные средства, но и совокупность программ и техниче­ских элементов систем обработки данных, способных функционировать самостоятельно либо в составе других систем. Для СВЧ 7 классов защищенности.





Дата публикования: 2015-02-03; Прочитано: 220 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.019 с)...