Vlákno názorů k článku Programujeme v jazyce Assembler v Linuxu: Úvod od Atom - Opravdu je v paměti vždy jen jedna stránka...

  • Článek je starý, nové názory již nelze přidávat.
  • 1. 7. 2004 10:05

    Atom (neregistrovaný)

    Opravdu je v paměti vždy jen jedna stránka programu? Co když je smyčka na hranici stránek, tak se pořád střídavě nahrávají z disku ty dvě stránky, které ji obsahují? To snad ne... Proč je program tedy zaváděn do 128MB, když je v paměti vždy jen jedna stránka (4kB). Nemyslí se tím stránkováním spíš něco jiného?
    Proč je k adrese 0xBFFFFFFF připsáno "hranice 4 GB", když 4GB=0xffffffff?
    Nemá v tom autor trochu hokej?

  • 1. 7. 2004 11:34

    Michal Ludvig (neregistrovaný)

    1) autor v tom evidentne drobatko hokej ma.

    2) stranek programu je v pameti tolik kolik je treba a kolik se vejde. Pokud uz nektere nejsou treba nebo je nutne uvolnit misto, tak jsou dve moznosti: a) kdyz se jedna o kod, tak se zahodi, protoze se v pripade potreby muze opet dohrat z binarky na disku. b) pokud se jedna o data, odlozi se do swapu.

    3) horni hranici adresniho prostoru zabira kernel. Neni sice pristupny pro cteni z userspace, ale je tam a zabira misto.

    4) co se tyka adresy 0xBFFF... tak tam obvykle zacina stack, neboli zasobnik.

  • 1. 7. 2004 18:16

    hkmaly (neregistrovaný)

    1) Nerekl bych drobatko. Na druhou stranu neni jediny.

    2) Stranky programu se nahravaji, kdyz jsou potreba (je tedy pravda ze nemusi byt nahrane vsechny). Kdyz globalne dojde pamet, coz se casto nestane po mnoho behu programu, tak se nejaka stranka nejakeho programu odmapuje a odswapuje nebo zahodi. (Podrobny algoritmus je dost slozity).

    3) Spravne. Presneji, kernel zabira misto od 0xC0000000 do 0xFFFFFFFF ve standartni konfiguraci kernelu.

    4) Zasobnik sice zacina na 0xBFFFFFFF, ale jak je na Intelu zvykem roste DOLU. Takze treba pokud pouzivas 12KB zasobniku, je zasobnik od 0xBFFFFFFF do 0xBFFFD000.

    5) Kde vzal autor 128MB netusim.

  • 30. 7. 2004 18:18

    anonymní

    Na zacatku sa z programu nahra do pameti jenom jedna stranka. Kdyz jsou potreba dalsi stranky, dohrajou sa (eventualne se neco z pameti vyhodi aby se udelalo misto). Cili na zacatku tesne pred spustenim programu je v pamati opravdu jenom jedna stranka z celeho programu (ostatni se prihrajou pozdeji).

    Jeste k tomu kernelu: kernel v adresnim prostoru procesu muze zabirat az 2 GB (zalezi na konfiguraci jadra) ale u x86 (teoreticky) jadro nemusi zabirat nic (nevim vsak presne, jak je to resene, patrne pri teto konfiguraci volani jadra zpusobi prepnuti procesu na nejakej "kernel process", ktery pozadavek obslouzi) nebo jenom par MB (kod + datasegment jadra jsou v adresnim prostoru procesu, ostatni datove struktury uz ne).

  • 1. 7. 2004 18:23

    hkmaly (neregistrovaný)

    Jeste bych dodal ze 0xBFFFFFFF je pochopitelne hranice 3 GB.