Работа с памятью — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (Хранение в физической памяти)
м
Строка 1: Строка 1:
 
[[Категория:С++ 2 семестр]]
 
[[Категория:С++ 2 семестр]]
 
{{В разработке}}
 
{{В разработке}}
{{TODO|t=не надо писать сюда про потоки и вообще выполнение проги {{---}} на это будет сделана отдельная страничка }}
 
  
 
==Определение==
 
==Определение==
Строка 14: Строка 13:
 
==Старт процесса==
 
==Старт процесса==
 
При старте процесса, в адресное пространство помещается код исполняемой программы и код используемых в программе библиотек (например, Kernel.dll). Так же, в адресном пространстве хранится <tex>heap</tex>, в который будут записываться глобальные переменные.
 
При старте процесса, в адресное пространство помещается код исполняемой программы и код используемых в программе библиотек (например, Kernel.dll). Так же, в адресном пространстве хранится <tex>heap</tex>, в который будут записываться глобальные переменные.
{{TODO|t=налить воды }}
+
{{TODO|t=расписать подробнее - надо ли?}}
  
 
==Хранение адресного пространства==
 
==Хранение адресного пространства==

Версия 21:48, 10 июля 2011

Эта статья находится в разработке!

Определение

Адресное пространство
Хранение в физической памяти

При запуске программы операционная система создает процесс, которому выделяется адресное пространство размером [math]4GB[/math] в 32-битных системах, и [math]2^{64}B[/math] в 64-битных, представляющее из себя массив байт. В этом массиве можно писать и читать данные из любого его места. Ясно, что адресное пространство не может полностью содержаться в физической памяти, поэтому представим, что эта память просто дана каждому процессу, неважно, где она находится. Важно помнить, что у каждого процесса свое адресное пространство, которое не пересекается с адресными пространствами других программ.

Старт процесса

При старте процесса, в адресное пространство помещается код исполняемой программы и код используемых в программе библиотек (например, Kernel.dll). Так же, в адресном пространстве хранится [math]heap[/math], в который будут записываться глобальные переменные.

TODO: расписать подробнее - надо ли?

Хранение адресного пространства

Хранение в физической памяти

Адресное пространство разбито на страницы объемом по [math]4kB[/math]. Для каждой страницы в хранится ее адрес в физической памяти, либо указание, что эта страница пуста (в таком случае хранить саму страницу не надо - поэтому все адресные пространства помещаются в физической памяти). Физическая память формируется из оперативной памяти ([math]RAM[/math]), места на жестком диске, отведенного под [math]swap[/math], и места на жестком диске, где хранится непосредственно код программы.

Подгрузка страниц в оперативную память

При обращении к той или иной странице, если она не находится в оперативной памяти, она загружается туда. Для этого, либо в оперативке находится свободное место, либо выбирается страница, которая будет выгружена оттуда. Если эта страница уже существует на жестком диске, и не была изменена за время ее пребывания в оперативной памяти, она просто удаляется оттуда; иначе - записывается в [math]swap[/math].