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

15) Файлы, проецируемые в память

Файлы, отображаемые в память(memory-mapped files, далее — MMF). Иногда их использование может дать довольно таки существенный прирост производительности по сравнению с обычной буферизированной работой с файлами. Это механизм, который позволяет отображать файлы на участок памяти. Таким образом, при чтении данных из неё, производится считывание соответствующих байт из файла. С записью аналогично.  Пример. Допустим, перед нами стоит задача обработки большого файла(несколько десятков или даже сотен мегабайт). Казалось бы, задача тривиальна — открываем файл, поблочно копируем из него в память, обрабатываем. Что при этом происходит. Каждый блок копируется во временный кэш, затем из него в нашу память. И так с каждым блоком. Налицо неоптимальное расходование памяти под кэш + куча операций копирования. Что же делать? Тут-то нам на помощь и приходит механизм MMF. Когда мы обращаемся к памяти, в которую отображен файл, данные загружаются с диска в кэш(если их там ещё нет), затем делается отображение кэша в адресное пространство нашей программы. Если эти данные удаляются — отображение отменяется. Таким образом, мы избавляемся от операции копирования из кэша в буфер. Кроме того, нам не нужно париться по поводу оптимизации работы с диском — всю грязную работу берёт на себя ядро ОС. Скорость работы программы, которая делает то же, но с помощью MMF. Так вот вторая работает быстрее почти на 30%. А это совсем неплохо.  Чтобы воспользоваться этой возможностью, мы должны сообщить ядру о нашем желании отобразить файл в память. Делается это с помощью функции mmap().

16) Сокеты

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

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

Для указания пространства имен используются константы, начинающиеся с PF_ (сокращение "семейство протокола"). Например, PF_LOCAL или PF_UNIX определяют локальное пространство имен, и PF_INET определяет Интернет пространство имен.

Второй параметр, стиль взаимодействия, представляет собой константу, начинающиюся с SOCK_ . SOCK_STREAM опеределяет стиль взаимодейтсвия соединение, SOCK_DGRAM- стиль датаграмы.

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

Для каждой пары существует лучший протокол, поэтому можно указать 0, что соответсвует этому протоколу. Если команда socket выполнена успешно, в качестве результата возвращается дескриптор файла для сокета. С помощью команд read и write , можно читать и записывать данные в сокет.

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

Любая техника записи в дескриптор файла, может использоваться при записи в сокет. Функция send , определенная для дескрипторов файлов сокета, аналогична функции write с несколькими дополнительными параметрами.

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