Управлението на паметта е една от основните функции на операционната система. Съвременните операционни системи позволяват на всеки процес да получи повече виртуална памет от общия размер на действителната (физическа) памет в дадена компютърна система. Основната цел на управлението на паметта е чрез комбиниране на голяма, но бавна памет с малка, но бърза памет, за постигане на ефекта на по-голямата високоскоростна памет.
Разделянето между фиксиран и променлив дял е неефективно по отношение на използването на паметта, тъй като фиксираният дял води до вътрешна, а динамична във външна фрагментация. Възможно решение на проблема с фрагментацията е да се позволи процесът да не бъде записан в непрекъснат блок памет. Програмата може да се разпръсне произволно в паметта. В този случай работната памет се разделя на по-малки блокове с фиксиран размер, наречени рамки. Логичното адресно пространство на програмата също е разделено на блокове със същия размер, наречени страници. Когато се въведе програма в паметта, страниците се записват в свободни рамки за памет. За по-лесно прехвърляне на програми от диск в работеща памет, дискът също е разделен на рамки със същия размер като кадрите с памет. Така един кадър от диска се записва в един кадър от работната памет. Системата за пейджинг работи по следния начин: когато програмата е приета за изпълнение, нейният размер се изчислява, което се изразява с необходимия брой страници. Ако достатъчен брой кадри е безплатен, процесът се записва в паметта на страница. В същото време в таблицата с рамки се въвежда броят на кадрите, в които са написани всяка страница.
Потребителската програма и свързаните с нея данни могат да бъдат разделени на няколко сегмента. Сегментите на всички програми не трябва да са с еднакъв размер, въпреки че има максимална дължина на сегмента. Както при пейджинга, логичният адрес, който използва сегментацията, се състои от две части, в този случай броя на сегментите и дислокациите в този сегмент. Поради използването на сегменти с различни размери, сегментацията е подобна на динамичното разделяне. При липса на схема за наслагване или използване на виртуална памет, е необходимо всички програмни сегменти да бъдат заредени в паметта за изпълнение. Разликата в сравнение с динамичния дял е, че сегментирането може да отнеме повече от един дял и този дял не трябва да е съседен. Сегментирането решава проблема с вътрешната фрагментация, но както и динамичното разделяне, проблемът с външната фрагментация остава. Въпреки това, тъй като процесът е разделен на няколко по-малки части, външната фрагментация обикновено е по-малка. За разлика от страницата, която е невидима за програмиста, сегментацията обикновено е видима и подходяща за организиране на програми и данни. За целите на модулното програмиране програмата или данните могат да бъдат разделени допълнително в няколко по-малки сегмента. Недостатъкът на тази техника е, че програмистът трябва да знае ограниченията на максималния размер на сегмента. Следващото удобство при използването на сегменти с различни размери е, че няма вероятна връзка между логически и физически адреси. Подобно на пейджинга, простата техника на сегментиране използва таблицата на сегментите за всеки процес и списък на наличните блокове в основната памет.
Страницата осигурява виртуално и физическо адресно пространство и вторично пространство на паметта на блокове (страници) с еднаква дължина. Това позволява да се разпределя непрекъснатото виртуално адресно пространство към процеса на дисперсия (не непременно непрекъснато разпределен) в реалното адресно пространство и вторичната памет. Дори страницата като термин се отнася до паметта, а не до логическите обекти, които са видими на програмно ниво. Сегментирането осигурява виртуално адресно пространство на блокове (сегменти), които директно съответстват на обекти на програмно ниво. Поради това сегментът няма фиксирана дължина, така че дори размерът на сегмента може да бъде променен по време на изпълнение на програмата. Следователно защитата и разделянето са възможни на ниво обект и има видими процеси, при които се извършва сегментиране.
Програмистът на приложението не знае за страницата. Той пише програми, сякаш паметта е линейна, а операционната система и процесорът са загрижени за нейното разделяне и преобразуване във виртуални адреси. Програмистът на системите за сегментиране обаче изброява две части от адреса, сегмента и страницата в своите програми. Всички страници са с еднакъв размер, докато сегментите са различни. Сегментирането има множество линейни адресни пространства и пейджинг само едно. Сегментите позволяват логически дял и защита на компонентите на приложението, а страниците не.
Страницата, която е прозрачна за програмиста, елиминира външната фрагментация и по този начин гарантира ефективно използване на основната памет. Частите, които се движат във и извън основната памет са фиксирани и със същия размер, така че е възможно да се разработят сложни алгоритми за управление на паметта, които да използват поведението на програмата. Сегментирането е видимо за разработчика и има възможност да управлява растежа на структурата на данните, модулността и поддръжката за обмен и защита.
пейджинг | сегментиране |
фиксиран размер на страниците | сегментите не са фиксирани по размер |
невидим за програмист | видим за програмист |
едно линейно адресно пространство | множество линейни адресни пространства |
не позволява логически дял и защита на компонентите на приложението | позволява |