20Aug
Некад је забавно гледати на површински ниво компјутерског искуства, а друге дане је забавно изводити у унутрашње радове.Данас преузимамо поглед на структуру рачунарске меморије и колико ствари можете запакирати у штап РАМ-а.
Данашње питање & амп;Сесија одговора долази нам захваљујући СуперУсер-у подскупу Стацк Екцханге-а, групације К & ама;
Питање
СуперУсер читач Јохан Смохан се бори са начином на који процесор и величина меморије заједно раде на укупном броју адреса.Он пише:
Колико меморијских адреса можемо добити са 32-битним процесором и 1ГБ РАМ-ом и колико са 64-битним процесором?
Мислим да је нешто овако:
1ГБ РАМ-а подељеног са било 32 бита 4 бита( ?) Да бисте добили број меморијских адреса?
Читао сам на Википедији да 1 меморијска адреса је широка 32 бита или 4 октета( 1 октет = 8 бита), у поређењу са 64-битним процесором гдје 1 меморијска адреса или 1 цео број је широк 64 бита или 8 октета.Али не знам да ли сам добро схватио.
Ово су типови питања која могу задржати радозналост у ноћи.Колико је адреса доступна под сваким од хипотетичких система Јохан?
Одговорност
СуперУсер сарадник Гроностај нуди увид у то како се РАМ дели и користи:
Кратак одговор: Број доступних адреса је једнак мањи од оних:
- Величина меморије у бајтовима
- Највећи непотписани интегер који може бити сачувану речи машине машине ЦПУ
Дуги одговор и објашњење горе наведеног:
Меморија се састоји од бајтова( Б).Сваки бајт се састоји од 8 бита( б).
1 Б = 8 б1 ГБ РАМ-а је заправо 1 ГиБ( гибибите, не гигабајт).Разлика је:
1 ГБ = 10 ^ 9 Б = 1 000 000 000 Б 1 ГиБ = 2 ^ 30 Б = 1 073 741 824 БСваки бајт меморије има своју адресу, без обзира колико је велика реч ЦПУ машина.На пример.Интел 8086 ЦПУ је био 16-битан и адресирао је меморију по бајтовима, тако да су модерни 32-битни и 64-битни ЦПУ-ови.То је узрок прве границе - не можете имати више адреса него меморијски бајтови.
Адреса меморије је само број бајтова које ЦПУ мора прескочити од почетка меморије да би дошао до оног који тражи.
- Да бисте приступили првом бајту, мора прескочити 0 бајтова, тако да је прва бајтова адреса 0.
- Да бисте приступили другом бајту, мора прескочити 1 бајт, тако да је његова адреса 1.
- ( и тако даље. ..)
- Да бисте приступилипоследњи бајт, ЦПУ прескочи 1073741823 бајтова, тако да је његова адреса 1073741823.
Сада морате знати шта 32-битно значи.Као што сам већ рекао, то је величина машинске ријечи.
Машинска реч је количина меморије коју ЦПУ користи за држање бројева( у РАМ-у, кешу или унутрашњим регистрима).32-битни ЦПУ користи 32 бита( 4 бајта) за држање бројева.Меморијске адресе су и бројеви, тако да се на 32-битном ЦПУ меморијска адреса састоји од 32 бита.
Сада размислите о овоме: ако имате један бит, можете је уштедјети двије вриједности: 0 или 1. Додајте још један бит и имате четири вриједности: 0, 1, 2, 3. На три бита можете уштедјети осамвредности: 0, 1, 2. .. 6, 7. Ово је заправо бинарни систем и ради овако:
Бинарна децимална 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 10 1010 111011 12 1100 13 1101 14 1110 15 1111Ради тачно као уобичајено додавање, али максимална цифра је 1, а не 9. Децимално 0 је 0000, онда додате 1 и добијате 0001, додате још једном и имате 0010.догађај је као да имате децимални број 09 и додате један: промените 9 на 0 и повећајте следећу цифру.
Из горњег примера можете видети да увек постоји максимална вриједност коју можете задржати у броју са константним бројем битова - јер када су сви битови 1 и покушате да повећате вриједност за 1, сви битови ће постати 0, па ће се прекинутиброј.То се зове "интегер оверфлов" и узрокује бројне неугодне проблеме, како за кориснике тако и за програмера.
11111111 = 255 + 1 ----------- 100000000 = 0( 9 бита овде, па 1 је исечено)- За 1 бит највећа вредност је 1,
- 2 бита - 3,
- 3 бита -7,
- 4 бита - 15
Највећи могући број је увек 2 ^ Н-1, где је Н број битова.Као што сам већ рекао, меморијска адреса је број и такође има максималну вриједност.Због тога је величина машине реч такође ограничење броја доступних меморијских адреса - понекад ваш ЦПУ једноставно не може да обради бројеве довољно велике да адресира више меморије.
Тако на 32 бита можете држати бројеве од 0 до 2 ^ 32-1, а то је 4 294 967 295. То је више од највеће адресе у РАМ-у од 1 ГБ, тако да ће у вашем специфичном случају количина РАМ-а бити ограничавајући фактор.
Ограничење РАМ-а за 32-битни ЦПУ је теоретски 4 ГБ( 2 ^ 32), а за 64-битни ЦПУ 16 ЕБ( екабитес, 1 ЕБ = 2 ^ 30 ГБ).Другим ријечима, 64-битни ЦПУ могао би да адресира цео Интернет. .. 200 пута;)( процјењује ВулфрамАлпха).
Међутим, у стварним оперативним системима, 32-битни ЦПУ-ови могу да адресирају око 3 ГБ РАМ-а.То је због интерне архитектуре оперативног система - неке адресе су резервисане за друге сврхе.Можете прочитати више о овој такозваној 3 ГБ баријери на Википедији.Ово ограничење можете подићи помоћу Проширења физичке адресе.
Говорећи о адресирању меморије, треба навести неколико ствари: виртуалну меморију , сегментацију и страничком .
Виртуелна меморија
Као што је @Даниел Р Хицкс истакао у другом одговору, оперативни системи користе виртуелну меморију.То значи да апликације заправо не раде на стварним меморијским адресама, већ на онима које нуди ОС.
Ова техника омогућава оперативном систему да пренесе неке податке из РАМ-а у такозвани Пагефиле( Виндовс) или Свап( * НИКС).ХДД је неколико магнитуда спорији од РАМ-а, али то није озбиљан проблем за ретко доступне податке и омогућава ОС-у да обезбеђује апликације више РАМ-а него што сте заправо инсталирали.
Пејџинг
Оно о чему смо причали до сада се назива схема равног адресирања.
Пагинг је шема алтернативног адресирања која омогућава адресирање више меморије које обично можете да користите једним речјем машине у равном моделу.
Замислите књигу пуну речима од четири слова.Рецимо да на свакој страници има 1024 бројева.Да бисте адресирали број, морате знати две ствари:
- Број странице на којој се штампа ова реч.
- Који је текст на овој страници онај који тражите.
Сада је управо то како модерни к86 процесори рукују меморијом.Подијељен је на странице од 4 килограма( по 1024 ријечи машина) и те странице имају бројеве.(заправо стране такође могу бити 4 МиБ велике или 2 МиБ са ПАЕ).Када желите да адресирате меморијску ћелију, потребан вам је број странице и адреса на овој страници.Имајте на уму да се на сваку меморијску ћелију упућује тачно један пар бројева, што неће бити случај за сегментацију.
Сегментација
Па, овај је прилично сличан пејџингу.Коришћен је у Интел 8086, само да наведемо један пример.Групе адреса се сада зову сегменти меморије, а не странице.Разлика је да се сегменти могу преклапати, и они много се преклапају.На пример, на 8086 већина меморијских ћелија било је доступно из 4096 различитих сегмената.
Пример:
Рецимо да имамо 8 бајтова меморије, све држећи нуле, осим за 4. бајт који је једнак 255.
Илустрација за модел равне меморије:
_____ |0 ||0 ||0 ||255 ||0 ||0 ||0 ||0 |-----Илустрација за пагед меморију са 4-бајтним страницама:
ПАГЕ0 _____ |0 ||0 ||0 |ПАГЕ1 |255 |_____ ----- |0 ||0 ||0 ||0 |-----Илустрација за сегментоване меморије са 4-бајтним сегментима помереним за 1:
СЕГ 0 _____ СЕГ 1 |0 |_____ СЕГ 2 |0 ||0 |_____ СЕГ 3 |0 ||0 ||0 |_____ СЕГ 4 |255 ||255 ||255 ||255 |_____ СЕГ 5 ----- |0 ||0 ||0 ||0 |_____ СЕГ 6 ----- |0 ||0 ||0 ||0 |_____ СЕГ 7 ----- |0 ||0 ||0 ||0 |_____ ----- |0 ||0 ||0 ||0 |----- ----- ----- -----Као што видите, четврти бајт се може адресирати на четири начина:( адресирање од 0)
- Сегмент 0, офсет 3
- Сегмент 1,офсет 2
- Сегмент 2, офсет 1
- Сегмент 3, офсет 0
То је увек исте меморијске ћелије.
У реалним имплементацијама сегменти се померају за више од 1 бајт( за 8086 је било 16 бајтова).
Оно што је лоше у сегментацији јесте да је компликовано( али мислим да то већ знате;) Шта је добро, да можете користити неке паметне технике за креирање модуларних програма.
На пример, можете унети неки модул у сегмент, а затим претварати да је сегмент мањи него што је заиста( само довољно мали да задржи модул), а затим изаберите први сегмент који се не преклапа са тим псеудо-мањи и учитаваследећи модул и тако даље.У суштини, оно што добијате овако су странице променљиве величине.
Имате ли нешто да додате објашњењу?Звучи у коментарима.Желите да прочитате више одговора од других корисничких корисника Стацк Екцханге?Овде погледајте комплетну тему.