2

Ну. Я в значительной степени смущен концепцией memory mapped file, используемой в virtual address spaces.использование отображенного в памяти файла в виртуальном адресном пространстве

В следующей ссылке у меня есть googled.

http://en.wikipedia.org/wiki/Virtual_address_space

Я нашел раздел

  Then the application's executable file is mapped into the Virtual Address Space. 
      Addresses in the process VAS are mapped to bytes in the exe file. 
      The OS manages the mapping: 

        0           4GB 
     VAS  |---vvvvvvv------------------------------------| 
     mapping  |-----| 
     file bytes  app.exe 

     The v's are values from bytes in the mapped file. 

Теперь то, что эта память отображается файл, чтобы сделать с конкретным процессом в определенном виртуальном адресном пространстве (спутать в последнем заявлении в вышеуказанном разделе)?

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

+0

Это описанию того, как код исполняемого файла запускается загружается в память, используя отображение памяти. – Barmar

ответ

3

Первое, что вам нужно понять, это различие между физическим адресом и виртуальным адресом. Когда ваша программа записывает данные на определенный (виртуальный) адрес памяти, адрес вашей записи преобразуется в фактический адрес на чипе RAM. Если физический адрес не запрограммирован для определенного виртуального адреса, вы обычно получите нарушение доступа или ошибку сегментации.

Способ, которым это работает, - модуль управления памятью (MMU) генерирует исключение ЦП, которое вызывает выполнение перехода к обработчику ошибок ядра. В случае нарушения доступа ваш процесс завершается.

Ядро в состоянии сделать некоторые другие умные вещи. Если ваш процесс неактивен, он может скопировать некоторую физическую память, используемую вашим процессом, в файл подкачки (и удалить записи из mmu), когда вы обращаетесь к указанным адресам, исключение CPU не прервет вашу программу. Вместо этого ядро ​​сначала приостановит процесс. Затем он скопирует данные из файла подкачки обратно в память, перепрограммирует MMU. Затем ядро ​​возобновит процесс, и процесс получит доступ к памяти, как если бы она всегда была там. Что касается процесса, то ничего особенного не произошло. Этот процесс известен как Demand Paging.

Когда вы загружаете файл mmap, ядро ​​эффективно выполняет поисковый запрос, но из вашего указанного файла чтения, а не из файла подкачки. Процесс точно такой же. Исключение доступа к ЦП приведет к тому, что данные из файла будут считаны в ОЗУ, к которым вы обращаетесь как обычная память. Когда вы закрываете файл, память записывается обратно в файл, освобожденный. Большим преимуществом является то, что вы можете использовать данные в файле с указателями.

Надеется, что это помогает

 Смежные вопросы

  • Нет связанных вопросов^_^