
Высокоуровневое управление каналами в posix
#include <stdio.h>
FILE * popen(const char *pcszCommand, const char *pcszType);
//характеризуется не целочисленными директивами, а указателями на строку FILE
/
/Путь
к файлу, строка, соотв. режиму.
int pclose(FILE *stream); //закрытие ранее открытого канала
FILE * fdopen(int nFD, const char *pcszMode); //Низкоур. дескр. -> высокоур.
size_t fread(void *pvBuf, size_t uSize, size_t uCount, FILE *stream); //Чтение и запись \/ массивов
size_t fwrite(const void *pcvBuf, size_t uSize, size_t uCount, FILE *stream);
int feof(FILE *stream); //Проверка на конец
int fclose(FILE *stream); //Закрытие файла
Реализация popen()
Родительский процесс
1 pipe(anFD) //Создается канал
2 fork() //Ответвл. доч. процесса
3 если pcszType "r", то //если режим откр. файла соотв. r, то закр. часть, предн. для записи и наоборот
close(anFD[1])
иначе // pcszType "w"
close(anFD[0])
4 если pcszType "r", то //Возвр. ту часть, отв. за чтение
вернуть fdopen(anFD[0], pcszType)
иначе // pcszType "w"
вернуть fdopen(anFD[1], pcszType)
Дочерний процесс
1 если pcszType "r", то //Если r, то вывод в консоль, иначе забрать из консоли
dup2(anFD[1], 1)
иначе // pcszType "w"
dup2(anFD[0], 0)
2 close(anFD[i]) (2 раза)
3 execve(pcszCommand, argv, envp)
Реализация pclose()
Родительский процесс
1 wait4() для дочернего процесса.
Размещается код из исполняемого файла. b – двоичный, t- текстовый
Блокировка род. процесса, пока не завершит работу дочерний
Именованные каналы POSIX
Можно получать доступ по имени
POSIX mkfifo()
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pcszPathName, mode_t ulMode); //Путь, режим
Неименованные каналы Windows API
BOOL WINAPI CreatePipe(
__out PHANDLE phReadPipe, //Дескр на чтение
__out PHANDLE phWritePipe, // на запись
__in_opt LPSECURITY_ATTRIBUTES lpPipeAttributes, //Аттр безопасности
__in DWORD dwSize //Размер буфера );
Управление памятью
Задачи:
Версии ядра
- Перемещаемость кода и данных. (неск раз запущенная программа может попасть в разл области)
- Защита памяти. (плохо раб. программы не должны влиять на другие или на ОС)
- Совместное использование памяти. (Явное разделение общ. разделов)
- Логическая организация в виде сегментов, модулей. (Размещение в разных обл. памяти)
- Двухуровневая память. (быстрая оперативная и медленная на HDD, желательно, чтобы ОС предоставляло эту возм-сть)
Фиксированное распределение памяти
|
|
|
|
|
|
Резерв |
Резерв
|
Появилась в OS360
Просто одинаково делится на области. Пр-ма может работать в любой области без изм-ий. Не может занимать более одной области.
Варианты OS/360
Задачи
3 Редакции
Single Sequential Scheduler (SSS). – 1 зад. последовательная
Primary Control Program (PCP). – самая простая версия ОС
Multiple Sequential Scheduler (MSS). – многозад.
Multiprogramming with a Fixed number of Tasks (MFT). - фикс. кол-во задач.
Multiple Priority Scheduler (MPS). – планировщик с разл. приоритетом.
Multiprogramming with a Variable number of Tasks (MVT). – переменные области
Проблема OS/360 – фрагментация памяти
Распределение
памяти
Реальный режим
адресация памяти в реальном режиме процессора 80x86
MS-DOS – резидентные программы
В программе – модуль упр-я памятью
Лог. адрес – исп. пр-мой, физический - ?
В x86 адрес 2-компонентный
Адрес = сегмент x 16 + смещение
Короткие и длинные адреса
Пример (Assembler 8086)
mov bx, 01h
mov ax, [bx] ; короткая адресация: ds:[bx]
mov es, ax
mov cx, es:[bx] ; длинная адресация
Пример (Borland C++ 3.1 и т. д.)
int n;
int *far lpn = &n;
int *near npn = &n; //near – ограниченный сегмент 64 кб
Одному и тому же физ. адресу могут соотв. разные логические, т.к. разные комбинации сегмен-смещение.
Сегментная организация памяти в процессоре 8086 В микропроцессорах i8086/88 сегментация памяти осуществляется простым способом. Все адресное пространство в 1 Мбайт разбивается на несколько (от 16 до 65536) смежных блоков памяти. Каждый такой блок может иметь размер от 16 байт до 64 Кбайт и выравнивается на шестнадцатибайтной границе. Блок памяти длиной в 16 байт и выравненный на 16-ти байтной границе называется параграфом. Для обращения к любому адресу в памяти необходимо знать его физический адрес, который в микропроцессорах i8086/88 и реальном режиме работы микропроцессоров x86 совпадает с его линейным адресом.
В общем случае для формирования линейного адреса необходимо знать базу (Base, Segment) и смещение (Offset) этого адреса. В микропроцессорах i8086/88 оба компонента линейного адреса являются шестнадцатиричными.
Для микропроцессоров x86 в реальном режиме работы смещение (Offset) является одновременно эффективным адресом. Эффективные адреса формируются в Intel-совместимых микропроцессорах с помощью регистров данных (смотри VOLIII(6), "Системные регистры центрального процессора".) Эффективный адрес формируется следующим образом.: к восьми или шестнадцатиразрядному смещению в программе добавляется 16-ти разрядное содержимое базового регистра и 16-ти разрядное содержимое индексного регистра. (смотри VOLIII(6) "Классификация регистров данных").
Режимы адресации, начиная с 80286
Режимы
- реальный;
- защищённый.
Назначение реального режима
- Совместимость с предыдущим ПО;
- Начальная загрузка системы.
Способы разбиения памяти
Определения
Сегмент: (segment)—область памяти заданного размера.
Страница: (page)—диапазон линейных адресов (размер от архитектуры) и данные по ним. (в смежном адр. пространстве)
Страничный кадр: (page frame, физическая страница)—единица разбиения физической памяти, принадл. 1 странице.
Селектор
формат селектора в защищённом режиме процессора 80286
RPL(0..3) – запрашиваемый уровень привилегий (0 – режим ядра)
TI (0..1) – индикатор табл. 0 – глобальный табл. дескриптор, 1 – локальный
Индекс 0..8191
Сегментные регистры
сегментные регистры процессоров архитектуры X86
Обозн. Название Примечание
CS Code Segment (CPL—Current Privilege Level) - код
DS Data Segment - данных
SS Stack Segment - стека
ES Extra Segment – расшир-й регистр
FS (сегмент общего назначения)
GS (сегмент общего назначения)
GDTR Global Descriptor Table Register (адрес (24 бит) и размер (8 бит))
LDTR Local Descriptor Table Register (адрес (24 бит) и размер (8 бит))
трансляция адресов в защищённом режиме процессора 80286
логический адрес -> блок сегментации -> физический адрес
Блок сегментации избавляет адрес от компоненты селектора
На табл. дескр-ра указ. CDTR или LDTR, какая из них – флаг TI
Поля дескриптора сегмента (8 байт)
Поле - Бит Название (Примечание)
Base - 32 (линейный адрес начала)
G - 1 Granularity ( 0 -> размер в байтах, иначе в 4 096-байтных блоках. Опр-ет размер стека)
Limit - 20 (размер (1 байт . . . 1 Мбайт или 4 Кбайт . . . 4 Гбайт. В размере сегмента)
S - 1 System (0 -> хранит системные данные (LDT, . . . ) иначе обычный сегмент кода/данных)
DPL - 2 Descriptor Privilege Level (Уровень привилегий)
P - 1 Присутствие (1 -> сегмент присутствует (в Linux всегда))
Type - 4 (тип сегмента)
Типы сегментов
Тип / Таблица/ S / Хранение
кода/ GDT, LDT / 1 /сегмент кода
данных / GDT, LDT / 1 / сегмент данных или стека
состояния задачи (TSS) / GDT / 0 / сегмент с проц. регистрами.
локальной таблицы дескрипторов / GDT / 0 / сегмент с LDT.
Работа блока сегментации
Алгоритм
1 TI = 0 => базовый линейный адрес из GDTR, иначе—из LDTR. (проверка текущего уровня привелегий)
2 адрес дескриптора сегмента = базовый линейный адрес + 8 x индекс;
3 max {CPL (текущий); RPL (запрошенный)} > DPL (значение в дескрипторе) => General Protection Fault (GP);
4 Из дескриптора сегмента выбирается поле «базовый адрес» (Base);
5 линейный адрес = базовый адрес + смещение. (физ. адрес)
1-3 только когда меняются соотв. ? сегменты
Использование сегментации в ОС
Linux
- Для каждого процессора существует GDT, содержащая 4 дескриптора сегментов (Base = 0, G = 1, Limit = 0xFFFFF = 220 1):
- Для всех процессов ядра:
- код ядра;
- данные ядра;
- Для всех процессов пользователя:
- код пользователя;
- данные пользователя.
- + некоторые специфические сегменты.
- Для каждого процесса создаётся LDT по умолчанию ядром. Некоторые приложения обращаются к нему (Wine, . . . )
Windows 3.1
- 1 GDT, 1 LDT для системной виртуальной машины и по 1 LDT для каждой ВМ для DOS-приложения (режим V86). (1 LDT на всю вирт. машину, т.е. адр. пр-во, у всех приложений одна память, прил-я могли обмениваться данными и портить данные друг друга)
- Сегменты кода, данных приложений могут помечаться как фикс., перемещаемые, перемещаемые + удаляемые, …
Windows NT
- Модель flat: 1 сегмент для кода и данных для приложения, сегментные регистры не должны меняться им.
Трансляция адресов (80386)
логический адрес -> блок сегментации -> линейный адрес -> блок управления страницами -> физический адрес
Таблица адресов для каждой пр-мы – 4 Мб. Если постранично – пр-ме не нужны все табл. страниц, для них можно не выд. память.
Поля таблицы страниц (4 байт)
Поле / Бит / Примечание
Present (флаг) / 1 / флаг присутствия (размещена данная стр. или нет (апп. прерывание в этом случае))
адрес / 20 / 20 старших бит.
Accessed / 1 / устанавливается, когда блок управления адресует соответствующий кадр (каждый раз при обращ-ии к памяти) Если флаг доступа всё время 0, в случае перегрузки эти страницы – первые кандидаты на выгрузку в файл подкачки.
Dirty / 1 / (для таблицы страниц) устанавливается, когда выполняется запись в кадр
Read/Write / 1 / права доступа на запись. (1 – rw, 0 – read only)
User/Supervisor / 1 / уровень привилегий ( = 3 или < 3). (1 – могут все, 0 – только привелег.)
Page Size / 1 / (для каталога страниц) = 1 => размер страницы = 4 Мбайт
Работа блока управления страницами
Алгоритм
1 Адрес элемента Каталога Таблицы Страниц = *cr3 + 4 x каталог (старше 10 бит)
2 Адрес Таблицы Страниц—из поля «адрес» элемента Каталога Таблиц
3 Адрес элемента Таблицы Страниц = адрес Таблицы Страниц x 4 096 + 4 x таблица;
4 Адрес страницы—из поля «адрес» дескриптора Таблицы Страниц
5 Физический адрес = адрес страницы x 4 096 + смещение.
Вместимость Каталога Таблиц/Таблицы Страниц
До 1 024 элементов.
Буфер ассоциативной трансляции
Буфер ассоциативной трансляции: (translation lookaside buffer, TLB)—кэш, отображающий (недавно вычисленные) линейные адреса в физические.
Этот кэш сущ-ет в каждом процессорном ядре, не треб. согласования с разными ядрами
Расширение размера страниц
формат смещения в режиме адресации расширенных страниц процессора Pentium
Режим расширения размера страниц: (Page size extension, PSE)—режим, включаемый полем PSE регистра CR4 (поле «Page size» элемента таблицы = 1).
2 и 3е поля объединяются в целях ускорения обращения в случаях больших размеров памяти. Вкл. спец. битом RSE. Существует начиная с пентиумов.
Механизм расширения физических адресов
формат смещения в режиме расширения физических адресов процессора Pentium Pro
Механизм расширения физических адресов: (Physical Address Extension, PAE)—режим, включаемый полем PAE регистра CR4. Отличия:
- поле «адрес» элемента таблицы увеличивается с 32 до 36 бит => элемент таблицы увеличивается с 4 до 8 байт;
- количество элементов таблиц уменьшается с 1 024 до 512.
Расширение размера страниц
формат смещения в режиме long mode архитектуры AMD64 (x86-64)
В 64-разр. 4 ур-ня вложенности. Всего 48 бит. 256 Тбайт можно адресовать. (Если бы исп. 64, то 15 Эбайт). Схема адресации ост. такой же. Исчезают такие рудименты 32-бит, как сегмент.
Использование страничной адресации в Windows 3.1
Страничный (32-битный) режим адресации используется только виртуальными драйверами, работающими в 0-м кольце защиты.
Компоненты диспетчера памяти
Функциональность ntoskrnl.exe (ядро памяти)
- Сервисы управления виртуальной памятью (приложения, драйверы устройств режима ядра). (то, что доступно обычным приложениям)
- Обработчики ловушек трансляции недействительных адресов и нарушения прав доступа.
- Системные потоки режима ядра. (зан. обработкой страниц)
Системные потоки диспетчера памяти
Потоки режима ядра
- Поток обнуления страниц (zero page thread). (Низший приоритет, заполняет 0 своб. страницы)
- Диспетчер рабочих наборов (working set manager). (обработка, раз в 1 сек или когда не хватает)
- Поток загрузки и выгрузки стеков (process/stack swapper). (стеки вызовов процессов)
- Подсистема записи модифицированных страниц (modified page writer). (если сущ-ет страница, имеющая образ в файле и меняется, то этот поток записывает в файл)
- Подсистема записи спроецированных страниц (mapped page writer). (то же для страниц, отобр. польз. файл в память).
- Поток сегмента разыменования (dereference segment thread). (изм. размеров кэша и файла подкачки?)
Состояния страниц
Состояния страниц в диспетчере памяти
- Свободная (free). (не выделен)
- Зарезервированная (reserved). (вкл. в адр. пр-во, но не найден страничный кадр)
- Переданная (committed). (выделена, можно пользоваться)
Последовательность работы со страницами
1 Резервирование (reserving).
2 Передача (committing).
3 Возврат (decommitting).
4 Освобождение (freeing).
Выделение памяти
LPVOID WINAPI VirtualAlloc(
__in_opt LPVOID lpvAddress, //не обяз., с какого
__in SIZE_T dwSize, //Размер
__in DWORD flAllocationType, //Тип размещения
__in DWORD flProtect //Те же флаги, что при отобр. файла в память
);
flAllocationType
MEM_RESERVE – резервирование
MEM_COMMIT - передача
MEM_RESERVE | MEM_COMMIT (одновременно)
MEM_LARGE_PAGES – большие страницы
MEM_RESERVE | MEM_PHYSICAL – физ. страницы
Освобождение памяти
Windows API VirtualFree()
BOOL WINAPI VirtualFree(
__in LPVOID lpvAddress,
__in SIZE_T dwSize,
__in DWORD dwFreeType
);
dwFreeType Ограничения
MEM_DECOMMIT — (вернуть)
MEM_RELEASE dwSize == 0 (полное освобождение)
Адресное пространство процесса в 32-битном режиме
1я половина – дост. процессу
верх. 2 Гб – в том случае, если выз. функция ядра
64 Кб – охранные зоны, доступ запрещен.
Напр., указатель NULL -> Попытка доступа -> ошибка доступа к странице
Доступность 3 (4) Гбайт для процесса
Условия доступности более 2 Гбайт для 32-разрядного процесса
- Флаг IMAGE_FILE_LARGE_ADDRESS_AWARE в образе исполняемого файла.
- Настройка 32-разрядной системы (BCDEdit /set increaseuserva 3072) или 64-разрядная система.
Размер адресного пространства для 64-разрядного процесса
- 8 Тбайт для платформы AMD64 (x86-64).
Сеанс
Сеанс: (session)—средство удалённой работы при помощи служб терминалов (Terminal Services) и быстрого переключения пользователей.
Win должна позволять многопольз. режим. Сеанс – средство для этого.
Оконная станция: (window station)—объект, содержащий буфер обмена, таблицу атомов один или несколько рабочих столов и имеющий атрибуты безопасности и права доступа.
Данные сеанса
Оконная станция;
Пространство имён; (имя станции\имя сеанса\имя процесса…) . . .
Системные пулы памяти
Пул неподкачиваемой памяти: (nonpaged pool)—диапазон системных виртуальных адресов, присутствующих и доступных всё время (=> без ошибок страниц).
Пул подкачиваемой памяти: (paged pool)—диапазон системных виртуальных адресов, которые система может выгружать в страничный файл/загружать из файла.
Структура виртуального адресного пространства
Виды данных в адресном пространстве
- Принадлежащие процессу (код/данные);
- Принадлежащие сеансу (код/данные);
- Принадлежащие системе (код/данные);
Код ядра;
Драйверы;
Таблицы страниц процесса; (нах. в памяти)
Области системной подкачиваемой/неподкачиваемой памяти.
. . . (мн-во всевозм. вспомог. данных)
Использование PSE
Большие страницы – тот код и данные, к которым нужно обращ. быстрее.
При уст-ке с-мы копируются те библиотеки, которые больше подходят для к-ра.
Возможности использования больших страниц
- Базовые образы ОС (ntoskrnl.exe и hal.dll);
- Базовые системные данные (структуры, описывающие состояния страничных кадров, . . . );
- Запросы большого ввода/вывода;
- Для приложений закрытые области памяти, выделенные VirtualAlloc() с использованием флага MEM_LARGE_PAGE;
- Другие заданные драйверы при настройке в реестре.
Использование PAE
Расширение физ. адресов.
Расширения оконного доступа к адресам: (Address Windowing Extensions, AWE)—часть Windows API для доступа к памяти обычным процессам с использованием PAE.
Порядок работы с памятью
1 Выделение физической памяти (AllocateUserPhysicalPages());
2 Создание окна (VirtualAlloc() с флагом MEM_PHYSICAL);
3 Проецирование части физической памяти на окно (MapUserPhysicalPages(), MapUserPhysicalPagesScatter()).
Адресное пространство процесса в 32-битном режиме
Адресное пространство процесса в Linux
1 Гбайт – ядро физ. памяти. Проецируется в верхний Гбайт для каждого процесса.
Особенности распределения адресного пространства
Каталог страниц явл. частью контекста процесса, т.е. сущ-ет по 1 экз. для каждого процесса.
Организация виртуального адресного пространства процессов
- Ядро сохраняет регистр cr3 в дескрипторе процесса => каждый процесс имеет собственный глобальный каталог таблиц.
- Первые 3 ГБайт адресного пространства доступны для процессов, различны.
- Последний 1 ГБайт доступен в режиме ядра, отображается в одну область памяти.
- Потоки ядра работают в 3–4 Гбайтном диапазоне верхних адресов, не ссылаясь ниже => неважно, какой таблицей страниц они пользуются. Для избежания лишних сбросов TLB-буферов используется таблица дескрипторов последнего процесса.
Управление динамической памятью
Организация управления. Особенность, влияющая на разработку программ.
Виды оперативной памяти
- постоянно выделенная ядру;
- динамическая.
Запросы на выделение памяти со стороны ядра
Удовлетворяются немедленно:
- ядро является приоритетным компонентом;
- ядро доверяет самому себе.
Запросы на выделение памяти со стороны пользовательского процесса
- процессу сразу выделяется диапазон ячеек, само выделение откладывается до момента обращения (лениво);
- код процесса может содержать ошибки.
Исключения при обращении к памяти
Причины
- Адреса, указанные вследствие программных ошибок;
- Адреса принадлежат отсутствующей странице, хотя принадлежат адресному пространству процесса => соответствующий кадр должен быть выделен.
Обработка исключения обращения к странице
если адрес принадлежит адресному пространству процесса, то
если вид доступа ~ правам доступа к области, то
допустимое обращение, выделить страничный кадр;
иначе - недопустимое обращение, послать SIGSEGV;
иначе
если исключение в режиме пользователя, то
недопустимое обращение, послать SIGSEGV;
иначе - ошибка ядра, уничтожить процесс;
«Жадное» выделение памяти
Старая реализация функции fork()
1 Выделение страничных кадров под таблицы страниц потомка.
2 Выделение страничных кадров под страницы потомка.
3 Инициализация таблиц страниц потомка
4 Копирование страниц родителя в страницы потомка.
«Ленивое» выделение памяти
Особенности реализации функции fork()
- Страничные кадры не копируются, а используются совместно родителем и потомком;
- Страничные кадры помечаются недоступными для записи;
- Если родитель или потомок попытается записать в общую страницу, возникнет исключение, ядро создаст копию, оригинал останется доступным только для чтения.
- Если потом произойдёт попытка записи в исходную страницу, ядро проверит, является ли процесс единственным владельцем её (поле дескриптора страницы _count == 0). Да => пометит её как доступную на запись.
- _count == -1 ) страница считается свободной.
Выделение страниц по требованию
Пример (проверка выделения памяти)
int main()
{ try
{ char *pchData = new char[100000000];
// . . . }
catch (const std::bad_alloc &)
{ // . . . }
}
Утилизация страничных кадров
Особенности работы с памятью
ОС Linux не делает проверок размеров доступной памяти => кеши диска и т. д. растут неограниченно.
Алгоритм утилизации страничных кадров: (Page Frame Reclaiming Algorithm, PFRA)—выбирает занятые страничные кадры для выгрузки на диск.
Выгрузка страниц
Виды страниц
- Неутилизируемые (динамически выделенные ядру, временно заблокированные, . . . )
- Выгружаемые (анонимные в АП режима пользователя)
- Синхронизируемые (отображение файлов в режиме пользователя, дисковые кэши, . . . )
- На выброс (неиспользуемые, в кэшах памяти).
Случаи утилизации
- Дефицит памяти в системе;
- Гибернация;
- Периодическая утилизация.
Работа с файлами
Адресация данных на аппаратном уровне
Сектор: (sector)—аппаратно адресуемый блок данных носителя (512 байт).
Кластер: (cluster)—адресуемый блок, используемый файловой системой, содержит несколько секторов.
Метаданные: (metadata)—данные, хранящиеся в томе, необходимые для поддержания работы файловой системы (не принадлежат пользовательским данным в файлах).
Способы адресации секторов
- Cylinder-Head-Sector (CHS).
- Logical Block Address (LBA).
Разделы дисков
организация разделов физического диска
Дескрипторы разделов
Главная загрузочная запись: (Master Boot Record, MBR)—находится в первом физическом секторе (секторах), содержит:
- код загрузки (bootstrap code);
- таблицу разделов (partition table)—до 4;
- сигнатуру; . . .
Загрузочная запись тома: (Volume Boot Record, VBR)—находится в начале неразделённого диска или раздела диска, содержит код загрузки.
Расширенная загрузочная запись: (Extended Boot Record, EBR)—находится в начале логического раздела, структура, как у MBR, но запись для II раздела указывает на следующую EBR.
Таблица разделов GUID
Таблица разделов GUID: (GUID Partition Table, GPT)—стандарт формата размещения разделов на диске.
Особенности
- Открытый стандарт (часть Unified Extensible Firmware Interface —UEFI);
- Ограничение на размер диска: 8 Збайт - 512 байт (у MBR: 2Tбайт - 512 байт);
- Заголовок GPT и таблица разделов хранятся в начале и конце диска;
- «Защитный MBR» в начале диска; (дублируется)
- Таблица разделов содержит контрольные суммы (CRC32) и GUID диска;
- Элементы таблицы разделов содержат GUID типов разделов и разделов.
FAT (12, 16, 32)
Система / Кластеров / Размеры кластера / Максимальный размер тома
FAT12 / 4 096 / 512 байт – 8Кбайт / 32Мбайт
FAT16 / 65 536 / 512 байт – 64Кбайт / 4 Гбайт
FAT32 / 268 435 456 / 4Кбайт – 32Кбайт / 8Тбайт
Для большого диска нужны большие кластеры.
Организация FAT
организация метаданных системы FAT
Запись FAT
Информация записи таблицы размещения файлов (file allocation table)
- Номер следующего кластера цепочки;
- Отметка конца цепочки (0xFFFF);
- Отметка плохого кластера;
- Отметка неиспользуемого кластера (0).
Запись каталога
Информация записи таблицы каталогов (directory table)
Массив из записей – имя файла. Если 1й символ 0 – удален
- Короткое имя «8.3» (DATA TXT), I символ имеет особые значения;
- Атрибуты:
«только для чтения» (read only);
«скрытый» (hidden);
«системный» (system); (нежелательно перемещать при дефраг-ии)
«метка тома» (volume label);
«подкаталог» (subdirectory);
«архивный» (archive);
- Дата/время последнего изменения файла;
- Номер кластера начала файла;
- Размер файла в байтах.
Таблица размещения файлов и каталог
Особенности системы FAT
Преимущества
- широкая распространённость;
- простота реализации;
- высокая скорость на небольших носителях;
- малый объём метаданных.
Недостатки
- ограничения по размеру томов и файлов;
- невысокая надёжность;
- нагрузка на небольшую часть диска;
- фрагментация;
- отсутствие поддержки
- безопасности и других возможностей;
- патенты (FAT32, длинные имена).
NTFS
Особенности системы NTFS
- индексирование файлов по атрибутам;
- защита файлов и каталогов;
- дисковые квоты; (на ур-не файл. с-мы – о макс. объеме для каждого польз-ля)
- сжатие файлов; (на ур-не файл. с-мы)
- жёсткие связи;
- символьные ссылки (точки соединения);
- шифрование.
Ext2. Индексный дескриптор
Индексный дескриптор: (inode)—структура файловой системы, содержащая всю информацию о файле в файловой системе, используется для его идентификации.
Информация в индексном дескрипторе
номер (уникален); тип; количество жёстких ссылок; длина в байтах;
идентификатор пользователя-владельца;
идентификатор группы-владельца;
отметки времени:
изменения состояния индексного дескриптора;
последнего обращения к файлу;
оследнего изменения файла;
права доступа и режим файла. . . .
Журналируемая файловая система
Журналируемая файловая система: (journaling file system)—ФС, ведущая журнал транзакций перед их исполнением в выделенной области диска в циклическом буфере.
Запись обо всех изменениях (транзакциях), сначала запис., потом изм.
Примеры: NTFS; Ext3; Ext4 (отключается).
Концепция виртуальной файловой системы
Через общий интерфейс обращ. к разл. ФС.
взаимодействие приложения с файлами
приложение -> виртуальна файловая система -> (Ext2; FAT16)
Специальная файловая система
Специальная файловая система: (special file system)—предоставляет доступ к данным и особым возможностям ядра через интерфейс VFS. (Другой фариант физ. ФС)
Точка монтирования: (mount point)—путь в виртуальной файловой системе (текущей доступной физической файловой системе), отображающий содержимое другой файловой системы.
Примеры специальных файловых систем (Linux)
Название / Точка монтирования / Описание
pipefs / — / Каналы
proc / /proc / Структуры данных ядра
shm / /dev/shm / Общая память
sockfs / — / сокеты
sysfs / /sys / Системные данные
tmpfs / любая / Временные файлы
Файлы виртуальной файловой системы
Принадлежащие дисковой или сетевой файловой системе
- обычный файл;
- каталог;
- символьная ссылка;
Принадлежащие специализированной файловой системе
- файл блочного устройства;
- файл символьного устройства;
- именованный канал (FIFO);
- сокет.
Монтирование файловых систем в процессе загрузки
Пример (/etc/fstab)
# f i l e sys mount point type options dump pass
proc /proc proc nodev,noexec,nosuid 0 0
/dev/sda5 / ext4 errors=remount-ro 0 1
/dev/sda2 none swap sw 0 0
/dev/sdb2 /mnt/disk_d ntfs auto,defaults,fmask=003,uid=1000 0 0
# . . .
Открытый файл
Открытый файл: структура ядра, определяющая параметры работы процесса с файлом.
Информация в открытом файле
- режим;
- позиция;
- идентификаторы пользователя и группы;
- таблица файловых операций;
. . .