2015-12-14 13 views
0

Я не могу понять, как файлы управляются в I/O с памятью. Как обычно. Если мы открываем файл, используя open или fopen, он возвращает указатель файла fd или соответственно. После этого откроется, где файл находится для обработки. Это в памяти (копия файла, который находится на жестком диске) или нет? Если он не находится в памяти, где данные извлекаются последовательным системным вызовом чтения или записи или он извлекает данные с жесткого диска для каждого времени вызова чтения или записи. В противном случае копия файла сохраняется в памяти, и к файлу обращается процесс для манипуляции furthur, и как только процесс будет завершен, файл будет скопирован на жесткий диск. В приведенных выше концепциях сработал сценарий?Memory Mapped I/O в Unix

Ниже приводится определение, данное для памяти отображается I/O в Расширенном Программирование в Unix среде (второе издание) книги:

Отображаемые в памяти ввода/вывода позволяет нам сопоставить файл на диске в буфер в памяти, так что, когда мы извлекаем байты из буфера, считываются соответствующие байты файла. Аналогично, когда мы храним данные в буфере, соответствующие байты автоматически записываются в файл. Это позволяет нам выполнять ввод-вывод без использования чтения или записи.

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

Кто-нибудь объясняет рабочий механизм функциональных возможностей ввода-вывода с памятью и mmap?

+1

Водители ....................................... –

+0

что означает? Я использую ubuntu 12.04 – mrg

+0

Читайте об [кеше страницы] (https://en.wikipedia.org/wiki/Page_cache) и http://linuxatemyram.com/ и [виртуальном адресном пространстве] (https: //en.wikipedia .org/wiki/Virtual_address_space) –

ответ

3

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

Когда вы сохраняете карту памяти, система снова настраивает учетную запись, а также настраивает (виртуальную) память «отображение», что означает диапазон действительных адресов, которые, если используются, будут отражать чтение (или запись) основного файла. Это не означает, что весь файл нужно читать сразу, потому что он может быть «выгружен» по требованию, то есть система может предоставить вам диапазон адресов, а затем дождаться, когда вы действительно его используете, прежде чем загружать какие-либо данные там , Эта «ошибка страницы» поддерживается аппаратным устройством, называемым модулем управления памятью, или MMU. Эта же система используется при запуске исполняемого файла - система может просто сопоставить его в виртуальную память и читать страницы (фрагменты) с диска только по мере необходимости.

+0

Каков диапазон действительного адреса. Является ли адрес файла, который находится на жестком диске? – mrg

+0

Нет, это диапазон адресов в «виртуальной памяти», который представляет собой концепцию для каждого процесса, то есть число имеет смысл только для процесса, чья «виртуальная память» есть. Один процесс может видеть 0x2000 как один объект, а другой может видеть тот же виртуальный адрес 0x2000, как и все. Файлы на диске не имеют «адресов» в одном и том же плоском/линейном смысле - это задача операционной системы, чтобы скрыть этот факт от вас. –

+0

Мне нравится уподоблять обратный «файл подкачки» :) – 0xC0000022L

1

Это в памяти (копия файла, который находится на жестком диске) или нет?

Согласно Computer Programming and Utilization, когда вы открываете файл с fopen, его содержимое загружается в память. (Частично или полностью).

Если это не в памяти, где данные Роботу последующего чтения или системного вызова записи

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

what is mapping a file into memory? enter image description here Для более см here

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

отображенных в памяти файл представляет собой сегмент виртуальной памяти, который был присвоен прямыми байты-в-байт корреляции с некоторой частью файла или файл-как resource.Refer this

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

+0

Обычно libc буферизует данные в userland при использовании fwrite/fprintf/etc, а не в ядре. Кроме того, данные обычно не копируются в ядро, а непосредственно записываются из его местоположения в пользовательском пространстве через DMA – Ctx

+0

При чтении данных? – mrg

+0

Обновление ответа :-) –

0

После этого откройте, где находится файл для обработки. Это в памяти (копия файла, который находится на жестком диске) или нет?

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

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

с диска.

или Он извлекает данные с жесткого диска для каждого времени вызова чтения или записи.

Фактически, вы также должны учитывать эффект от любого кеширования.

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

№ файла ведет себя, как будто это все на диске.

И здесь они определили, что память помещается между стеком и кучей.

Не в том, что вы указали.

В этой памяти, какой тип данных присутствует после сопоставления файла.

Данные в файле. Вопрос «какой тип данных» не имеет смысла. Данные - это данные.

Он содержит копию файла или адрес файла, который находится на жестком диске.

Он эффективно содержит копию файла.

И как приведенный выше сценарий становится истинным.

Через виртуальную память. Слишком широка, чтобы покрыть здесь.