Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS Possible answers to the exam / Ответы на ОС.docx
Скачиваний:
176
Добавлен:
03.06.2014
Размер:
3.11 Mб
Скачать
    • Реализация RAID-систем:

    • - программная (software-based);

    • - аппаратная - шинно-ориентированная (bus-based);

    • - аппаратная - автономная подсистема (subsystem-based).

    • Программная реализация RAID:

    • Главное преимущество программной реализации - низкая стоимость.

    • Но при этом у нее много недостатков:

    • - низкая производительность,

    • - загрузка дополнительной работой центрального процессора,

    • - увеличение шинного трафика.

    • Программно обычно реализуют простые уровни RAID - 0 и 1, так как они не требуют значительных вычислений.

    • Учитывая эти особенности, RAID системы с программной реализацией используются в серверах начального уровня.

    • Ядро GNU/Linux 2.6.28 (последнее из вышедших в 2008 году) поддерживает программные RAID следующих уровней: 0, 1, 4, 5, 6, 10. Загрузка поддерживается только с диска RAID 1.

    • Файловая система ZFS поддерживает уровни RAID: 0, 1, 5, 6, а также составные уровни.

    • Серверные версии MS Windows 2000 и старше поддерживают программный RAID 0, RAID 1 и RAID 5.

    • 5. Файловые системы fat и fat32. Структура логического диска. Элемент каталога. Логическая, физическая организация файлов. Хранение длинных имён. Raid – системы.

    • 5.1 Файловая система fat16.

    • Первый сектор жёсткого диска (сектор 1, дорожка 0) содержит так называемую главную загрузочную запись (Master Boot Record = MBR), которая загружается в память под управлением BIOS и выполняется.

    • В конце первого сектора HDD находится таблица разделов диска (Partition table). Эта таблица содержит до четырёх элементов, описывающих разделы диска.

    • Разделы могут трех типов: первичными (1), расширенными (1), не-DOS разделами (2-3). Основной раздел может содержать код загрузки операционной системы. Расширенный раздел может быть дополнительно разбит на подразделы. Каждому разделу и подразделу операционная система ставит в соответствие логический диск и назначает свое имя (C:, D:, E: и т.д.)

    • Таблица разделов логического диска

    • 5.2 Структура логического диска fat.

    • Загрузочная запись (первый сектор диска) – служит для загрузки ОС и организация хранения данных.

    • FAT (File Allocation Table) – таблица размещения файлов.

    • Корневой каталог – для FAT16 512 записей о файлах и каталогах, расположенных в корне файловой системы.

    • 5.3 Элемент каталога fat16.

    • Функции FAT:

    • - Хранение информации о размещении файлов на диске;

    • - Хранение информации о свободном месте на диске;

    • - Хранение информации о сбойных кластерах на диске.

    • 5.4 Логическая организация данных.

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

    • Фрагментация и дефрагментация.

    • Файл, который занимает на диске более одного непрерывного участка, называется фрагментированным.

    • Фрагментация диска - это появление на диске множества свободных участков, разделенных занятыми участками.

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

    • Файловые системы FAT выделяют для записываемых на диск файлов некоторое количество кластеров, в зависимости от размера файла.

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

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

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

    • Размеры разделов и кластеров fat16 для Windows 95-2000.

    • Файловая система vfat.

    • ФС Virtual FAT появилась в первой версии Win’95.

    • Во второй версии Win’95 пользователям была предложена уже FAT32.

    • Virtual FAT поддерживала длинные имена файлов (LFN), но была 16-разрядной.

    • Длинные имена (LFN) хранятся в специально отформатированных 32-байт записях, байт атрибутов у которых равен 0Fh.

    • Поддерживает разделы до 4 Гб.

    • Long File Names.

    • FAT32 преодолела ограничение прежней системы наименования файлов "8.3". В VFAT имя файла может содержать до 255 символов. К счастью, FAT32 воспринимает файлы, которые уже существовали на диске, даже если эти файлы используются 16-битовыми приложениями, разработанными не для Windows 95. Для каждого имени файла VFAT создает псевдоним, соответствующий нотации "8.3". Например, у файла "Файл с длинным именем" будет псевдоним "файлсд~1 .doc" в FAT. Более того, VFAT тома совместимы с DOS и Windows 3.1.

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

    • Длинные имена (LFN) хранятся в специально отформатированных 32-байт записях, байт атрибутов у которых равен 0Fh. Для конкретного файла или подкаталога непосредственно перед его единственной записью каталога с его именем в формате 8.3 находится группа из одной или нескольких записей, представляющих длинное имя. Каждая такая запись содержит часть длинного имени файла не более 13 символов, и ОС составляет полное длинное имя из всех записей.

    • Длинные имена файлов хранятся на диске в указанном формате и размещаются в одном или нескольких 32-байт элементах каталога перед элементами каталога для коротких имен. Символы, составляющие имя файла, представлены в кодах Unicode, т. е. на каждый из них по 2 байта.

    • Элемент каталога vfat.

    • Пример длинного имени.

    • THEQUI~1.FOX

    • Проблемы длинных имен:

    • На первый взгляд использованный в VFAT механизм длинных имен файлов позволяет сохранить преемственность с прикладными программами прошлого поколения и выглядит идеальным.

    • Однако этот метод далек от совершенства:

    • - Требуется больше дискового пространства;

    • - Бóльшая фрагментация (на уровне каталогов).

    • Файловая система FAT32:

    • FAT32 это развитие файловой системы FAT(VFAT, FAT16).

    • 32-разрядная адресация кластеров – максимальное число адресуемых кластеров – 4 294 377 472.

    • Поддержка  больших разделов (более 4Gb), кроме этого уменьшен размер кластера на разделе.

    • Поддержка длинных имен до 255 символов, причем нет ограничений на число и размер расширения.

    • Корневой каталог, раньше имевший фиксированный размер и строго определенное место на диске, теперь можно свободно наращивать по мере необходимости подобно подкаталогу. Теперь не существует ограничений на число записей в корневом каталоге. Это особенно важно, поскольку под каждое длинное имя файла используется несколько записей каталога.

    • Имеет более высокую надежность: FAT32 способна перемещать корневой каталог, создает резервную копию загрузочного сектора и может работать с резервной копией FAT.

    • Структура элемента каталога:

    • Чтобы обеспечить возможность работы с возросшим числом кластеров, в записи каталога для каждого файла должно выделяться 4 байт для начального кластера файла .

    • 2 дополнительных байта (по сравнению с FAT16 и VFAT) выделяются среди зарезервированных 10 байт.

    • Сравнение FAT16 и FAT32:

    • 6. Файловая система NTFS. Тома NTFS. Физическая структура MFT и метафайлы. Атрибуты в NTFS. Хранение файлов и каталогов. Сжатие файлов в NTFS. Защита целостности данных. Дополнительные возможности в NTFS.

    • 6.1 Файловая система ntfs.

    • Разработана для быстрого выполнения стандартных файловых операций типа чтения, записи и поиска.

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

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

    • 6.2 Тома ntfs.

    • Структура NTFS начинается с тома (volume). Том соответствует логическому разделу на диске и создается, когда Вы форматируете диск или часть его для NTFS.

    • На одном диске может находиться один или несколько томов.

    • NTFS обрабатывает каждый том независимо от других.

    • Типы томов:

    • 1. Простой том (simple)

    • 2. Составной том (spanned) – том, использующий более одного раздела для формирования одного

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

    • большего по объему, чем любой имеющийся на компьютере физический диск.

    • 3. Зеркальный том (mirrored, RAID 0) содержит копии своих данных на двух разделах. В случае

    • зеркала запись данных производится на оба раздела, а считывание происходит только с одного.

    • Зеркальный том устойчив к сбою одного диска, в этом случае работает оставшаяся половина.

    • 4. Чередующийся набор томов (stripped , RAID 1) – том, состоящий из нескольких разделов, по

    • которым равномерными блоками распределены данные. Размер блока данных - 64 Кбайт. Первый

    • блок данных размером в 64 Кбайт хранится на первом разделе, вторые 64 Кбайт на втором и т.д.

    • Чередующиеся наборы томов могут повысить производительность системы, если использовать

    • разделы, размещенные на разных дисках, поскольку операции чтения-записи могут выполняться

    • параллельно.

    • 5. Чередующийся набор томов с четностью (RAID-5) – это чередующийся набор с дополнительным

    • блоком данных размером в 64 Кбайт. Дополнительный блок содержит информацию о четности,

    • которую система может использовать при восстановлении данных, расположенных на одном из

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

    • Внутреннее имя тома:

    • В разделе HKEY_LOCAL_ MACHINE\SYSTEM\MountedDevices системного реестра хранится информация о базовых дисках.

    • Внутреннее имя имеет форму \??\Volume{XX-XX-XX-XX}, где X — числа, образующие глобальный уникальный ID (GUID), присвоенный тому операционной системой.

    • Для работы с томами существует системная утилита mountvol (будет рассмотрена позже)

    • 6.3 Mft и ее структура.

    • Каждый файл на томе NTFS представлен записью в специальном файле, называемом главной файловой таблицей (MFT – master file table).

    • NTFS резервирует первые 16 записей таблицы для специальной информации. Первая запись этой таблицы описывает непосредственно главную файловую таблицу;

    • За ней следует зеркальная запись (mirror record) MFT. Если первая запись MFT разрушена, то NTFS читает вторую запись для отыскания зеркального файла MFT, первая запись которого идентична первой записи MFT. Местоположения сегментов данных MFT и зеркального файла MFT записаны в секторе начальной загрузки. Дубликат сектора начальной загрузки находится в логическом центре диска.

    • Третья запись MFT — файл регистрации (log file); используется для восстановления файлов. Файл регистрации подробно описан ниже. Семнадцатая и последующие записи главной файловой таблицы используются собственно файлами и каталогами (также рассматриваются как файлы NTFS) на томе. На слайде показана упрощенная структура MFT.

    • Метафайлы:

    • Первые 16 файлов NTFS (метафайлы) носят служебный характер.

    • Метафайлы находятся корневом каталоге NTFS диска – они начинаются с символа имени "$".

    • Для метафайлов указан реальный размер - можно узнать, например, сколько ОС тратит на каталогизацию всего диска.

    • Перечень метафайлов

        • $MFT

        • список содержимого тома NTFS

        • $MFTmirr

        • копия первых 4 записей таблицы MFT

        • $LogFile

        • файл поддержки журналирования шагов транзакций

        • $Volume

        • служебная информация - метка тома, версия файловой системы, т.д.

        • $AttrDef

        • список стандартных атрибутов файлов на томе

        • $.

        • корневой каталог

        • $Bitmap

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

        • $Boot

        • Загрузочный сектор раздела NTFS

        • $BadClus

        • Список всех плохих кластеров тома. Кластер считается плохим, если в нем есть один плохой сектор

        • $Secure

        • База данных атрибутов безопасности. Применяется в NTFS начиная с версии 5.0

        • $Upcase

        • файл - таблица соответствия заглавных и прописных букв в имен файлов на текущем томе.

        • $Extend

        • Файл хранит расширенную информацию файловой системы NTFS начиная с версии 5.0 (дисковые квоты, точки монтирования и т.д.)

    • 4 метафайла зарезервировано

    • 6.4 Атрибуты файлов.

    • Главная файловая таблица отводит определенное количество пространства для каждой записи файла (4Кбайт). Атрибуты файла записываются в распределенное пространство MFT.

    • Каждая запись MFT состоит из заголовка записи, за которым следует последовательность пар (заголовок атрибута, значение).

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

    • Заголовок атрибута

        • Смещение,

        • байт

        • Размер,

        • байт

        • Описание

        • 0x00

        • 4

        • Тип атрибута

        • 0x04

        • 4

        • Размер области памяти, занимаемой атрибутом

        • 0x08

        • 1

        • Флаг нерезидентного атрибута

        • 0x09

        • 1

        • Длина имени атрибута

        • 0x0A

        • 2

        • Смещение области данных атрибута

        • 0x0C

        • 2

        • Флаг упакованного атрибута

        • 0x0E

        • 2

        • Идентификатор атрибута

    • Атрибуты файлов NTFS - 1

        • Standard Information (стандартная информация)

        • Стандартный атрибут. Дата и время создания и последнего изменения файла, дата и время последнего доступа к файлу, флаги доступа к файлу, а также дата и время изменения записи MFT, соответствующей данному файлу.

        • Attribute List (список атрибутов)

        • Перечисляет все другие атрибуты.

        • Filename (имя файла)

        • Имя файла или каталога. В этом атрибуте хранится имя файла или каталога, набор флагов доступа, размер файла, а также ссылка на запись MFT каталога, в котором хранится данный файл или каталог.

        • MS-DOS Name

        • Имя файла в формате 8.3

        • Version

        • Номер последней версии файла

        • Security Descriptor (дескриптор безопасности)

        • Фиксирует информацию о том, кто может обращаться к файлу, кто является его владельцем и так далее (ACL)

        • Data (данные)

        • Содержит данные файла

    • Атрибуты файлов NTFS - 2

        • Volume Version

        • версия тома, используется только в системных файлах тома

        • Volume Information (информация о томе)

        • Используется только в системном файле тома и включает в частности версию и имя тома

        • Volume Name

        • отметка тома

        • Index Root (корневой индекс)

        • Корневая вершина дерева типа B+, используемого для поиска файлов в каталоге. Всегда резидентный.

        • Index Allocation (размещение индекса)

        • Узлы ветвей дерева типа B+. нерезидентные части индексного списка B-дерева

        • External Attribute Information

        • номер первого кластера и количество кластеров нерезидентного атрибута

        • Bitmap (битовый массив)

        • Предоставляет информацию об использовании записей в MFT или каталоге

    • 6.5 Хранение файлов.

    • Файлы NTFS в общем случае состоят из следующих атрибутов:

    • 1. Заголовок записи MFT (H - header)

    • 2. стандартная информация (SI - standard information);

    • 3. Имя файла ( FN - file name);

    • 4. Данные (data);

    • 5. дескриптор безопасности (SD - security descriptor).

    • Резидентное хранение файлов и каталогов:

    • Файлы и каталоги с размером менее размера записи MFT могут полностью содержаться внутри записи MFT.

    • Подобный подход обеспечивает очень быстрый доступ к файлам.

    • Если значение атрибута хранится непосредственно в MFT, время, необходимое NTFS для доступа к нему, значительно сокращается. Вместо того, чтобы искать файл в таблице и затем считывать цепочку кластеров для поиска данных файла (как это делается, например, в файловой системе FAT), NTFS обращается к диску только один раз и немедленно считывает данные.

    • Нерезидентное хранение файлов:

    • Конечно, в большинстве случаев все данные файла не помещаются в запись MFT, поэтому этот атрибут, как правило, является нерезидентным.

    • Для увеличения эффективности кластеры выделяются файлам по возможности в виде блоков (серий, пробегов) последовательных кластеров. Каждый блок описывается отдельной записью – (стартовый кластер, число кластеров). Файл без фрагментации описывается всего одной записью.

    • Нерезидентное хранение файлов среднего размера:

    • Нерезидентное хранение больших и сверхбольших файлов:

    • Если файл настолько велик (или сильно фрагментирован), что его атрибут данных не помещается в одной записи MFT, то этот атрибут становится нерезидентным, то есть он находится в другой записи таблицы MFT, ссылка на которую помещена в исходной записи о файле. Эта ссылка называется внешним атрибутом (external attribute).

    • Каталоги NTFS:

    • Каталог на NTFS представляет собой специфический файл, хранящий ссылки на другие файлы и каталоги, создавая иерархическое строение данных на диске. Файл каталога поделен на блоки, каждый из которых содержит имя файла, базовые атрибуты и ссылку на элемент MFT, который уже предоставляет полную информацию об элементе каталога. Внутренняя структура каталога представляет собой бинарное B+ дерево (форма двоичного дерева, в каждом узле которого хранится несколько элементов), элементы которого сортируются по имени.

    • Для поиска файла с данным именем в линейном каталоге, таком, например, как у FAT-а, системе приходится просматривать все элементы каталога, пока она не найдет нужный. Бинарное же дерево располагает имена файлов таким образом, чтобы поиск файла осуществлялся более быстрым способом - с помощью получения двухзначных ответов на вопросы о положении файла.

    • Вывод - для поиска одного файла среди 1000, например, FAT придется осуществить в среднем 500 сравнений (наиболее вероятно, что файл будет найден на середине поиска), а системе на основе дерева - всего около Log2(N), т.е 10-ти (2^10 = 1024).

    • Хранение каталогов:

    • Небольшие записи каталогов находятся полностью внутри структуры MFT так же, как записи файла (копии атрибута File_Name файлов и подкаталогов). Для хранения используется атрибут $Index_Root (корневой индекс), который всегда резидентный !

    • В том случае, когда атрибуты файла (или каталога) не умещаются в MFT и требуется выделение дополнительного пространства:

    • 1. Для хранения описания файлов выделяются нерезидентные индексные буферы (4 Кбайт),

    • каждый из которых имеет виртуальный номер кластера (virtual clusters numbers, VCN) для

    • сквозной нумерации кластеров в рамках одной записи MFT;

    • 2. Корневой индекс хранит корень дерева B+ и ссылки (VCN) на индексные буферы.

    • 3. Соответствие между VCN и LCN хранится в атрибуте каталога $Index_Allocation. Примечание:

    • Логические номера кластеров (LCN), представляют последовательность кластеров всего тома

    • Пример хранения каталогов:

    • а.) запись MFT для небольшого каталога (резидентное хранение)

    • б) запись MFT для большогокаталога (нерезидентное хранение)

    • Запись MFT для небольшого каталога:

    • Запись MFT для небольшого каталога содержит несколько каталоговых записей, каждая из которых описывает файл или каталог.

    • Фиксированная запись содержит индекс записи MFT файла, длину имени файла, а также другие разнообразные поля и флаги.

    • Поиск файла в каталоге по имени состоит в последовательном переборе всех имен файлов.

    • Хранение корневого каталога

    • 6.6 Сжатие файлов.

    • Файловая система NTFS поддерживает прозрачное сжатие файлов. Сжатие файлов производится следующим образом.

    • Когда файловая система NTFS записывает на диск файл, помеченный для сжатия, она изучает первые 16 логических блоков файла, независимо от того, сколько сегментов на диске они занимают. Затем к этим блокам применяется алгоритм сжатия. Если полученные на выходе блоки могут поместиться в 15 или менее блоков, то сжатые данные записываются на диск, предпочтительно в виде одного сегмента. Если получить выигрыш не получается, то данные 16 блоков записываются без сжатия. Затем алгоритм повторяется для следующих 16 блоков и т.д.

    • Сжатие файла частями по 16 блоков явилось компромиссом, если бы порции были меньше, то эффективность бы сжатия снизилась. Если размер блока был бы больше, то это замедлило бы произвольный доступ.

    • На слайде показан файл, в котором первые 16 блоков успешно сжаты в 8 блоков, следующие 16 не могут быть сжаты, наконец, последние 16 блоков также успешно сжаты на 50%.

    • Эти три части файла записаны в виде трех сегментов, информация о которых хранится в записи MFT. “Пропущенные” блоки обозначаются в записи MFT как сегменты с нулевым дисковым адресом. На слайде за заголовком (0,48) следует 5 пар, две для первого (сжатого) сегмента, одна для несжатого и две для последнего (сжатого) сегмента.

    • При чтении этого файла система NTFS должна знать, какие из сегментов файла сжаты, а какие нет. Она видит это по дисковым адресам. Дисковый адрес 0 указывает на то, что предыдущий сегмент сжат. Дисковый блок 0 не может использоваться для хранения данных во избежание неоднозначности (это загрузочный сектор).

    • Произвольный доступ к сжатому файлу возможен, но не прост. Например, для чтения блока 35 необходимо определить где находится этот блок и распаковать весь сегмент.

    • Разреженные файлы (sparse files):

    • Другой тип сжатия известен как разреженные файлы.

    • Если у вас есть файлы, которые содержат множество нулей (попросту говоря в файле есть "пустые области"), то NTFS позволяет сохранять пространство диска, давая таким файлам определение sparse (разреженный).

    • Так вот при сохранении таких файлов система просто не выделяет место для пустых областей файла - в результате чего и достигается уменьшение размера файла. При обращении системы к частям, отмеченным как пустые, NTFS просто возвращает нулевые значения. При просмотре свойств файла система сообщит о зарезервированном для него размере, хотя фактический объем может занимать в сотни тысяч раз меньший объем.

    • Разреженные файлы применяются, в частности, в журнале NTFS ($LogFile).

    • 6.7 Защита целостности данных.

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

    • 1. Тома с аппаратной или программное поддержкой RAID 0, RAID 4, RAID 5 и пр.

    • 2. Горячая фиксация - позволяет файловой системе при возникновении ошибки из-за плохого

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

    • 3. Механизм транзакций - каждая операция ввода-вывода, которая изменяет файл на разделе NTFS,

    • рассматривается файловой системой как транзакция и может выполняться только как неделимый

    • блок.

    • Система восстановления NTFS гарантирует корректность файловой системы, а не ваших данных.

    • Целостность данных и кэширование:

    • NTFS осуществляет доступ к кэшированным файлам, отображая последние в виртуальную память выполняя чтение и запись.

    • Диспетчер кэша оптимизирует дисковый ввод-вывод при помощи средства отложенной записи (lazy writer) - набора системных потоков управления, вызывающих диспетчер виртуальной памяти для сброса содержимого кэша на диск в фоновом режиме (асинхронная запись на диск).

    • В связи с применением механизма отложенной записи данные записанные в кэш-память могут быть потеряны с случае сбоя электропитания.

    • Горячая фиксация:

    • а) MFT-запись файла с плохим кластером;

    • б) исправленная MFT-запись файла;

    • 6.8 Дополнительные возможности.

    • Дополнительные возможности NTFS:

    • Hard Link – несколько имен для одного файла

    • Точки подсоединения NTFS (junction point)

    • Создание Hard Link:

    • fsutil hardlink create <новый файл> <существующий файл

    • Пример: fsutil hardlink create c:\foo.txt c:\bar.txt

    • Точки подсоединения:

    • Другим новшеством в Windows 2000 стало монтирование устройств. Утилита Disk Administrator Windows NT позволяла назначить тому букву латинского алфавита. Этот довольно простой метод дает возможность обратиться к любому дисковому устройству из стандартного меню открытия файла. Естественным ограничением на количество локальных и подключенных сетевых устройств было число 26, соответствующее числу букв латинского алфавита.

    • Подмонтирование возможно только к пустым папкам на NTFS-томах, а точки монтирования вы можете создать или из оснастки «Управление дисками», или из командной строки при помощи команды mountvol. Для того, чтобы отличить подмонтированные накопители от обычных папок, Explorer показывает их иконками соответствующих устройств. Для чего это может понадобиться? Во-первых, можно таким образом преодолеть ограничение на количество доступных логических дисков (ранее их не могло быть больше 26 - по числу букв латинского алфавита), повысить ёмкость существующих томов не используя динамические и… создавать отказоустойчивые папки на обычных томах.

    • Например, при монтировании нового основного раздела к папке D:\My Work Stuff все последующие обращения к этой папке будут автоматически переадресованы на соответствующий новый основной раздел, даже если он расположен на другом физическом диске, чем устройство D:. Если новый том является отказоустойчивым, то и папка D:\My Work Stuff считается отказоустойчивой, даже если само устройство D: этим качеством не обладает.

    • 7. Сравнение структуры логического диска fat32 и тома ntfs . Функции win32 api для работы с файлами.

    • 8. Сравнение структуры логического диска Fat32 и тома ntfs. Варианты организации асинхронной работы с файлами.

    • 7.1 Файловая система ntfs vs. Fat.

    • Поиск данных файла:

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

    • FAT32, из-за большой области самой таблицы размещения будет испытывать огромные трудности, если фрагменты файла разбросаны по всему диску. Для доступа к фрагменту файла в системе FAT16 и FAT32 приходится обращаться к соответствующей ячейке таблицы FAT.

    • В системе FAT16, где максимальный размер области FAT составляет 128 Кбайт, это не составит проблемы – вся область FAT просто хранится в памяти, или же считывается с диска целиком за один проход и буферизируется. FAT32 же, напротив, имеет типичный размер области FAT порядка сотен килобайт, а на больших дисках – даже несколько мегабайт.

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

    • На что влияет этот параметр: на скорость навигации по файлу (доступ к произвольному фрагменту файла). Любая работа с большими файлами данных и документов, если их размер - несколько мегабайт и более. Этот параметр показывает, насколько сильно сама файловая система  страдает от фрагментации файлов.

    • Вывод: Абсолютный лидер - FAT16, он никогда не заставит систему делать лишние дисковые операции для данной цели. Затем идет NTFS - эта система также не требует чтения лишней информации, по крайней мере, до того момента, пока файл имеет разумное число фрагментов. FAT32 испытывает огромные трудности, вплоть до чтения лишних сотен килобайт из области FAT, если файл разбросан по разным областям диска. Работа с внушительными по размеру файлами на FAT32 в любом случае сопряжена с огромными трудностями - понять, в каком месте на диске расположен тот или иной фрагмент файла, можно лишь изучив всю последовательность кластеров файла с самого начала, обрабатывая за один раз один кластер (через каждые 4 Кбайт файла в типичной системе). Стоит отметить, что если файл фрагментирован, но лежит компактной кучей фрагментов - FAT32 всё же не испытывает больших трудностей, так как физический доступ к области FAT будет также компактен и буферизован.

    • Поиск свободного места:

    • Для определения того, свободен ли данный кластер или нет, системы на основе FAT должны просмотреть одну запись FAT, соответствующую этому кластеру. Для поиска свободного места на диске может потребоваться просмотреть почти всего FAT – это 128 Кбайт (максимум) для FAT16 и до нескольких мегабайт (!) – в FAT32. Для того, чтобы не превращать поиск свободного места в катастрофу (для FAT32), ОС приходится идти на различные ухищрения.

    • NTFS имеет битовую карту свободного места, одному кластеру соответствует 1 бит. Для поиска свободного места на диске приходится оценивать объемы в десятки раз меньшие, чем в системах FAT и FAT32.

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

    • На что влияет этот параметр: на скорость создания файлов, особенно больших. Сохранение или создание в реальном времени больших мультимедийных файлов (.wav, к примеру), копирование больших объемов информации, т.д. Этот параметр показывает, насколько быстро система сможет найти место для записи на диск новых данных, и какие операции ей придется для этого проделать.

    • Вывод: NTFS имеет наиболее эффективную систему нахождения свободного места. Стоит отметить, что действовать "в лоб" на FAT16 или FAT32 очень медленно, поэтому для нахождения свободного места в этих системах применяются различные методы оптимизации, в результате чего и там достигается приемлемая скорость. (Одно можно сказать наверняка - поиск свободного места при работе в DOS на FAT32 - катастрофический по скорости процесс, поскольку никакая оптимизация невозможна без поддержки хоть сколь серьезной операционной системы).

    • Работа с каталогами и файлами:

    • FAT16 и FAT32 имеют очень компактные каталоги, размер каждой записи которых предельно мал. Работа с каталогами FAT производится достаточно быстро, так как в подавляющем числе случаев каталог не фрагментирован и находится на диске в одном месте. Единственная проблема – высокая трудоемкость поиска файлов в больших каталогах. Система хранения данных – линейный массив – не позволяет организовать эффективный поиск файлов в таком каталоге.

    • NTFS использует гораздо более эффективный способ адресации – бинарное дерево. Сам каталог NTFS представляет собой гораздо менее компактную структуру, чем каталог FAT – это связано с гораздо большим (в несколько раз) размером одной записи каталога. Это обстоятельство приводит к тому, что каталоги на томе NTFS могут быть сильно фрагментированы. Размер типичного каталога в FAT укладывается в один кластер, тогда как сотня файлов (и даже меньше) в каталоге на NTFS уже приводит к размеру файла каталога, превышающему типичный размер одного кластера. Это, в свою очередь, может привести к фрагментации файла каталога, и уменьшить положительный эффект от более эффективной организации самих данных.

    • Каждая файловая система выполняет элементарные операции с файлами - доступ, удаление, создание, перемещение и т.д. Скорость работы этих операций зависит от принципов организации хранения данных об отдельных файлах и от устройства структур каталогов.

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

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

    • Преимущества каталогов NTFS становятся реальными и неоспоримыми только в том случае, если в одно каталоге присутствуют тысячи файлов - в этом случае быстродействие компенсирует фрагментированность самого каталога и трудности с физическим обращением к данным (в первый раз - далее каталог кэшируется). Напряженная работа с каталогами, содержащими порядка тысячи и более файлов, проходит на NTFS буквально в несколько раз быстрее, а иногда выигрыш в скорости по сравнению с FAT и FAT32 достигает десятков раз.

    • Итоги

        • Параметр

        • Лидер

        • Аутсайдер

        • Поиск данных файла

        • FAT16, NTFS

        • FAT32

        • Поиск свободного места

        • NTFS

        • FAT32

        • Работа с каталогами и файлами

        • NTFS(*)

        •  䦋㌌㏒㧀좈໱琰茞ᓀ㵂Ü

    • (*) Для больших каталогов

    • Тома FAT32 могут теоретически быть больше 2 ТБ, но операционные системы Windows Server 2003, Windows 2000 и Windows XP могут форматировать диски объемом только до 32 ГБ. (Windows Server 2003, Windows 2000 и Windows XP Professional могут читать и записывать на большие по объему тома FAT32, отформатированные другими операционными системами).

    • Тома NTFS могут теоретически быть объемом до 16 эксабайт (ЭБ), но практический предел составляет 2 ТБ.

    • Пользователь может определить размер кластера при форматировании тома NTFS. Однако NTFS-сжатие не поддерживается для кластеров, размер которых больше 4 КБ.

    • 7.2 Функции win32 api для работы с файлами.

    • Соответствие Win32 API и UNIX:

        • Win32 API

        • UNIX

        • Описание

        • CreateFile

        • open

        • создать новый файл или открыть существующий

        • DeleteFile

        • unlink

        • удалить существующий файл

        • CloseHandle

        • close

        • закрыть файл

        • ReadFile

        • read

        • прочитать данные из файла

        • WriteFile

        • write

        • записать данные в файл

        • SetFilePointer

        • Iseek

        • установить указатель работы с файлом

        • GetFileAttributes

        • stat

        • вернуть аттритбуты файла

        • LockFile

        • fcntl

        • заблокировать регион файла для решения взаимного исключения

        • UnlockFile

        • fcntl

        • разблокировать регион файла

        • CreateDirectory

        • mkdir

        • создать новый каталог

        • RemoveDirectory

        • rmdir

        • удалить пустой каталог

        • FindFirstFile

        • opendir

        • выполнить инициализацию для начала чтения записей каталога

        • FindNextFile

        • readdir

        • прочитать следующую запись каталога

        • MoveFile

        • rename

        • перенести файл из одного каталога в другой

        • SetCurrentDirectory

        • chdir

        • изменить текущий каталог

    • Работа с каталогами и файлами:

    • функция выполняемое действие

        • GetCurrentDirectory

        • Получение текущего каталога

        • SetCurrentDirectory

        • Смена текущего каталога

        • GetSystemDirectory

        • Получение системного каталога

        • GetWindowsDirectory

        • Получение основного каталога системы

        • CreateDirectory

        • Создание каталога

        • RemoveDirectory

        • Удаление каталога

        • CopyFile

        • Копирование файла

        • MoveFile

        • MoveFileEx

        • Перемещение или переименование файла

        • DeleteFile

        • Удаление файла

    • Работа с томами:

    • Для выяснения того, какие логические диски существуют в системе, используется функция DWORD GetLogicalDrives( void )

    • Каждый установленный бит возвращаемого значения соответствует существующему в системе логическому устройству. Например, если в системе существуют диски A:, C: и D:, то возвращаемое функцией значение равно 13(десятичное).

    • Функция DWORD GetLogicalDrivesStrings( DWORD cchBuffer, LPTSTR lpszBuffer) заполняет lpszBuffer информацией о корневом каталоге каждого логического диска в системе. В приведенном выше примере буфер будет заполнен символами: A:\<null>C:\<null>D:\<null><null>

    • Параметр cchBuffer определяет длину буфера. Функция возвращает реальную длину буфера, необходимую для размещения всей информации.

    • Для определения типа диска предназначена функция: UINT GetDriveType( LPTSTR lpszRootPathName )

    • В качестве параметра ей передается символическое имя корневого каталога (напр. A:\), а возвращаемое значение может быть одно из следующих:

        • Идентификатор

        • Описание

        • 0

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

        • 1

        • Корневой каталог не существует

        • DRIVE_REMOVABLE

        • Гибкий диск

        • DRIVE_FIXED

        • Жесткий диск

        • DRIVE_REMOTE

        • Сетевой диск

        • DRIVE_CDROM

        • Компакт диск

        • DRIVE_RAMDISK

        • RAM диск

    • Для получения подробной информации о носителе используется функция GetVolumeInformation. Она заполняет параметры информацией об имени тома, названии файловой структуры, максимальной длине имени файла, дополнительных атрибутах тома, специфических для файловой структуры.

    • Функция GetDiskFreeSpace сообщает информацию о размерах сектора и кластера и о наличии свободных кластеров.

    • Создание и открытие файла:

    • HANDLE CreateFile (

    • LPCTSTR lpFileName, // pointer to name of the file

    • DWORD dwDesiredAccess, // access (read-write) mode

    • DWORD dwShareMode, // share mode

    • LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security descriptor

    • DWORD dwCreationDistribution, // how to create

    • DWORD dwFlagsAndAttributes, // file attributes

    • HANDLE hTemplateFile // handle to file with attributes to copy

    • );

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

    • Параметры CreateFile ():

    • Параметр dwDesiredAccess задает тип доступа к файлу. Можно определить флаги GENERIC_READ и GENERIC_WRITE а так же их комбинацию для разрешения чтения или записи в файл.

    • Параметр dwShareMode определяет режим совместного использования файла различными процессами. Если этот параметр равен нулю, то никакой другой поток не сможет открыть этот же файл. Флаги FILE_SHARE_READ и FILE_SHARE_WRITE а так же их комбинация разрешают другим потокам осуществлять доступ к файлу для чтения или записи.

    • Параметр dwCreationDistribution определяет действия функции в зависимости от того, существует ли уже файл с указанным именем.

    • - CREATE_NEW - Создает файл, если файл существует, то ошибка.

    • - CREATE_ALWAYS - Создает файл , если файл существует, то старый файл удаляется и новый создается.

    • - OPEN_EXISTING - Открывает существующий файл.

    • - OPEN_ALWAYS - Создает файл, если файл не существует, то создается новый файл.

    • - TRUNCATE_EXISTING - Открывает файл и урезает его до нулевой длины

    • Параметр dwFlagsAndAttributes определяет атрибуты файла, если он создается и задает режим работы с файлом.

    • - FILE_ATTRIBUTE_ARCHIVE, FILE_ATTRIBUTE_HIDDEN, FILE_ATTRIBUTE_NORMAL, FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_SYSTEM, FILE_ATTRIBUTE_TEMPORARY

    • - Атрибуты файла могут комбинироваться за исключением FILE_ATTRIBUTE_NORMAL, который всегда используется в одиночестве.

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

    • FILE_FLAG_NO_BUFFERING - Не осуществлять кэширование и опережающее чтение

    • - FILE_FLAG_RANDOM_ACCESS - Кэшировать как файл произвольного доступа

    • - FILE_FLAG_SEQUENTIAL_SCAN - Кэшировать как файл последовательного доступа

    • - FILE_FLAG_WRITE_TROUGH - Не буферизовать операцию записи. Производить запись на диск немедленно.

    • - FILE_FLAG_DELETE_ON_CLOSE - Уничтожить файл при закрытии. Полезно комбинировать с атрибутом FILE_ATTRIBUTE_TEMPORARY.

    • - FILE_FLAG_OVERLAPPED - Работа с файлом будет осуществляться асинхронно.

    • Синхронный и асинхронный ввод/вывод:

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

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

    • Функции файлового ввод-вывода:

    • BOOL ReadFile(

    • HANDLE hFile, // handle of file to read

    • LPVOID lpBuffer, // address of buffer that receives data

    • DWORD nNumberOfBytesToRead, // number of bytes to read

    • LPDWORD lpNumberOfBytesRead, // address of number of bytes read

    • LPOVERLAPPED lpOverlapped // address of structure needed for overlapped I/O

    • );

    • BOOL WriteFile(

    • HANDLE hFile, // handle to file to write to

    • LPCVOID lpBuffer, // pointer to data to write to file

    • DWORD nNumberOfBytesToWrite, // number of bytes to write

    • LPDWORD lpNumberOfBytesRead, // pointer to number of bytes written

    • LPOVERLAPPED lpOverlapped // address of structure needed for overlapped I/O

    • );

    • Параметры функция файлового ввода-вывода:

    • Параметры функции ReadFile () имеют следующее предназначение:

    • - hFile – описатель объекта ядра “файл”, полученный в результате вызова функции CreateFile

    • - LpBuffer – адрес буфера, в который будет производиться чтение

    • - nNumberOfBytesToRead – количество байт, которые необходимо прочитать

    • - lpNumberOfBytesRead – адрес переменной, в которой будет размещено количество реально прочитанных байт. Существенно, что сразу после выполнения функции ReadFile, этот параметр не может быть установлен, так как операция чтения только началась.

    • - lpOverlapped – указатель на структуру OVERLAPPED, управляющую асинхронным вводом выводом.

    • Параметры функции WriteFile () аналогичны параметрам функции ReadFile ().

    • Пример синхронного копирования файла:

    • /* Open files for input and output. */

    • inhandle = CreateFile("data", GENERIC_READ, 0, NULL, OPEN_EXlSTING, 0, NULL);

    • outhandle = CreateFile ("newf", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    • /* Copy the file. */

    • do {

    • s = ReadFile(inhandle, buffer, BUF_SIZE, &count, NULL);

    • if (s && count > 0) WriteFile(outhandle, buffer, count, Socnt, NULL);

    • } while (s>0 && count>0);

    • /* Close the files. */

    • CloseHandle (inhandle):

    • CloseHandle (outhandle);

    • Асинхронный ввод-вывод:

    • Для организации асинхронной работы с файлами необходимо при вызове функции CreateFile () установить флаг FILE_FLAG_OVERLAPPED в параметре dwFlagsAndAttributes.

    • После этого функции ReadFile () и WriteFile () будут работать асинхронно, т.е. только запускать операции ввода вывода и не ожидать их завершения.

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

    • typedef struct _OVERLAPPED {

    • DWORD Internal; //Используется операционной системой. Хранит статус завершения операции.

    • DWORD InternalHigh; //Используется ОС. Хранит количество переданных байт.

    • DWORD Offset; //Позиция в файле, начиная с которой необходимо

    • производить операцию чтения (записи).

    • DWORD OffsetHigh; //Количество байт для передачи.

    • HANDLE hEvent; //Описатель события, которое произойдет при завершении операции чтения (записи).

    • } OVERLAPPED;

    • Вариант 1 организации асинхронного ввода-вывода:

    • Перед запуском операции создается объект ядра “событие” и его описатель передается в функцию ReadFile () или WriteFile () в качестве элемента hEvent параметра lpOverlapped.

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

    • Выполнение программы при этом приостанавливается до завершения операции ввода-вывода.

    • Вариант 2 организации асинхронного ввода-вывода:

    • Событие не создается. В качестве ожидаемого объекта выступает сам файл. Его описатель передается в функцию WaitForSingleObject ().

    • Этот метод прост и корректен, но не позволяет производить параллельно несколько операций ввода-вывода с одним и тем же файлом.

    • Вариант 3 организации асинхронного ввода-вывода:

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

    • Существенно, что эти функции выполняются в том же самом потоке что и функции файлового ввода/вывода. Это значит, что поток, запустивший операции чтения записи должен обратиться к функции ожидания, чтобы разрешить системе вызвать функцию завершения.

    • 9. Методы распределения памяти с использованием дискового пространства. Стратегии управления виртуальной памятью.

    • Классификация методов распределения памяти.

    • 9.1 Методы распределения памяти с использованием дискового пространства.

    • Понятие виртуальной памяти:

    • Уже достаточно давно пользователи столкнулись с проблемой размещения в памяти программ, размер которых превышал имеющуюся в наличии свободную память. Решением было разбиение программы на части, называемые оверлеями. 0-ой оверлей начинал выполняться первым. Когда он заканчивал свое выполнение, он вызывал другой оверлей. Все оверлеи хранились на диске и перемещались между памятью и диском средствами ОС. Однако разбиение программы на части и планирование их загрузки в ОП должен был осуществлять программист.

    • Развитие методов организации вычислительного процесса в этом направлении привело к появлению метода, известного под названием виртуальная память.

    • Термин виртуальная память обычно ассоциируется с возможностью адресовать пространство памяти, гораздо большее, чем емкость первичной (реальной) памяти конкретной вычислительной машины. Концепция виртуальной памяти является далеко не новой, впервые она была реализована в вычислительной машине Atlas, созданной в Манчестерском университете в Англии в 1960г.

    • Виртуальная память (ВП) – это совокупность программно-аппаратных средств, позволяющих выполнять программы, размер которых превосходит имеющуюся оперативную память.

    • Для этого менеджер ВП решает следующие задачи:

    • - размещает данные в запоминающих устройствах разного типа, например, часть программы в оперативной памяти, а часть на диске;

    • - перемещает по мере необходимости данные между запоминающими устройствами разного типа, например, подгружает нужную часть программы с диска в оперативную память (свопинг);

    • - преобразует виртуальные адреса в физические.

    • Физические и виртуальные адреса:

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

    • - адреса, на которые делает ссылки выполняющийся процесс, называются виртуальными адресами (ВА);

    • - адреса, которые существуют в первичной памяти, называются реальными (или физическими) адресами (ФА).

    • Для установления соответствия между ВА и ФА разработаны различные способы. Так, механизмы динамического преобразования адресов (DAT - Dynamic Address Translation) обеспечивают преобразование ВА в ФА время выполнения процесса.

    • Механизм отображения адресов:

    • Все подобные системы обладают общим свойством: смежные адреса виртуального адресного пространства процесса не обязательно будут смежными в реальной памяти, это свойство называют “искусственной смежностью”.

    • Способы организации виртуальной памяти:

    • - страничное распределение;

    • - сегментное распределение;

    • - сегментно-страничное распределение.

    • Страничное распределение.

    • Виртуальное адресное пространство (ВАП) каждого процесса делится на части одинакового, фиксированного для данной ОС размера, называемые виртуальными страницами. Размер страницы кратен степени двойки, это позволяет упростить механизм преобразования адресов.

    • ОП делится на физические страницы такого же размера.

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

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

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

    • Свопинг при страничном распределении:

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

    • Если данная виртуальная страница находится в ОП, то выполняется преобразование ВА в ФА.

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

    • Страничное распределение: преобразование ВА в ФА

    • Рассмотрим механизм преобразования виртуального адреса в физический при страничной организации памяти.

    • Виртуальный адрес при страничном распределении может быть представлен в виде пары (p, s), где p - номер виртуальной страницы процесса (нумерация страниц начинается с 0), а s - смещение в пределах виртуальной страницы. Учитывая, что размер страницы равен 2 в степени k, смещение s может быть получено простым отделением k младших разрядов в двоичной записи виртуального адреса. Оставшиеся старшие разряды представляют собой двоичную запись номера страницы p.

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

  2. Из этой записи извлекается номер физической страницы,

  3. К номеру физической страницы присоединяется смещение.