eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingWątki a ramki stosówRe: Wątki a ramki stosów
  • Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!.PO
    STED!not-for-mail
    From: Marek Borowski <m...@b...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Wątki a ramki stosów
    Date: Sat, 28 May 2011 00:58:34 +0200
    Organization: http://onet.pl
    Lines: 55
    Message-ID: <irpab2$qqq$1@news.onet.pl>
    References: <irmm26$q06$1@news.onet.pl>
    NNTP-Posting-Host: 82-210-183-160.home.aster.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: news.onet.pl 1306537122 27482 82.210.183.160 (27 May 2011 22:58:42 GMT)
    X-Complaints-To: n...@o...pl
    NNTP-Posting-Date: Fri, 27 May 2011 22:58:42 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.17)
    Gecko/20110414 Lightning/1.0b2 Thunderbird/3.1.10
    In-Reply-To: <irmm26$q06$1@news.onet.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:190749
    [ ukryj nagłówki ]

    On 27-05-2011 01:00, pozytywne wibracje wrote:
    > Gdy mam program wielowątkowy to czy mam stosy w jednej przestrzeni
    > adresowej? Przypuśćmy że mam minimalny rozmiar stosu 16 KiB a maksymalny
    > 1 MiB, wtedy w podglądzie execa za pomocą viewera Total Commandera mam:
    > "Size of Stack Reserve" które odpowiada maksymalnemu, a "Size of Stack
    > Commit" minimalnemu.
    > Oznacza to że bierze w porcjach 16 KiB globalnej pamięci fizycznej ale
    > rezerwuje obszar adresów cały 1 MiB?
    Oznacza to tyle iz rezewuje region 1MB w virtualnej przestrzeni
    adresowej ale tylko 16KB (2 strony) jest zamapowane na fizyczna pamiec.
    Nastepne 4KB strony pamieci do mapowane w miare zapelniaja sie stosu. W
    przypadku dojscia do konca generowny jest EXCEPTION_STACK_OVERFLOW.

    > Gdy mam wiele wątków, to każdy ma stos w adresie oddzielonym od siebie o
    > minimum 1 MiB?
    Tak.

    > Tworzę nowy wątek za pomocą funkcji CreateThread, jako parametr
    > dwStackSize moge podać zero i wtedy stos wątku powinien otrzymać tyle
    > miejsca co stos głównego wątku. Natomiast mogę podać rozmiar - jest to
    > rozmiar początkowy. Maksymalny jest taki sam dla wszystkich?
    Nie. Mozesz podac wiekszy. System postara sie znalesc region o
    odpowiedniej wielkosci.

    > Mam coś takiego:
    > jest stos, 1 MiB rezerwacji adresów, inne wolne adresy na stertę. I
    > teraz tworzę wątek, czy stos wątku nie wejdzie na stertę?
    Nie. (Generalnie).

    > W jaki sposób dla procesu odczytać całą mapę adresów: gdzie jest kod,
    > gdzie dane, gdzie rezerwacja sterty a gdzie stosy wątków?
    Pobawic sie debugerem.

    > Jak wylistować wszystkie adresy stosów, a dla konkretnego stosu jak
    > wylistować stos wywołań procedur, czy można w ogóle odróżnić adres
    > procedury na stosie od zmiennej przechowywanej na stosie?
    Zasadniczo nie.

    > Zastanawia mnie też jak Garbage Collector rozpoczyna swoją pracę. Są
    > opisy rekurencyjnego zaznaczania które zaczyna się od korzeni ale jak ze
    > stosów pobrać te korzenie, poza tym mogą być w rejestrach, a co się
    > stanie z wartością z rejestrów przy przełączeniu na inny wątek? czy
    > odkładane są na bieżący stos, czy gdzieś indziej?
    Zachowywane sa w strukturze CONTEXT w pamieci jadra systemu. Ale
    istnieje API umozliajace jej pobranie.


    Pozdrawiam

    Marek





Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: