Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Part2.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
212.49 Кб
Скачать

Высокоуровневое управление каналами в 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

# . . .

Открытый файл

Открытый файл: структура ядра, определяющая параметры работы процесса с файлом.

Информация в открытом файле

- режим;

- позиция;

- идентификаторы пользователя и группы;

- таблица файловых операций;

. . .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]