eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingWątki a ramki stosów
Ilość wypowiedzi w tym wątku: 5

  • 1. Data: 2011-05-26 23:00:28
    Temat: Wątki a ramki stosów
    Od: pozytywne wibracje <p...@m...onet.eu>

    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?
    Gdy mam wiele wątków, to każdy ma stos w adresie oddzielonym od siebie o
    minimum 1 MiB?
    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?
    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ę?
    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?
    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?
    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?


  • 2. Data: 2011-05-27 22:58:34
    Temat: Re: Wątki a ramki stosów
    Od: Marek Borowski <m...@b...com>

    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






  • 3. Data: 2011-05-27 23:34:53
    Temat: Re: Wątki a ramki stosów
    Od: pozytywne wibracje <p...@m...onet.eu>

    W dniu 2011-05-28 00:58, Marek Borowski pisze:

    Dzięki za odpowiedź.

    > On 27-05-2011 01:00, pozytywne wibracje wrote:
    >> 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).

    To nie jest tak że na stertę przeznacza się cały zakres wolnych adresów?

    >> 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.

    A czy jest jakaś możliwość zrobienia tego programowo?

    >> 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.

    A w jaki sposób debuggery potrafią wyświetlić stos wywołań funkcji?

    >> 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.

    Jest GetThreadContext.
    Rejestr FS wskazuje na jakąś strukturę opisującą bieżący wątek - jaką?


  • 4. Data: 2011-05-28 12:37:40
    Temat: Re: Wątki a ramki stosów
    Od: Marek Borowski <m...@b...com>

    On 28-05-2011 01:34, pozytywne wibracje wrote:
    > W dniu 2011-05-28 00:58, Marek Borowski pisze:
    >
    > Dzięki za odpowiedź.
    >
    >> On 27-05-2011 01:00, pozytywne wibracje wrote:
    >>> 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).
    >
    > To nie jest tak że na stertę przeznacza się cały zakres wolnych adresów?
    >
    Nie. Poza tym w windows mozesz miec wiele stert, zarzadanych przez rozne
    komponenty.

    >>> 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.
    >
    > A czy jest jakaś możliwość zrobienia tego programowo?
    >
    Tzn w ramach istniejacego procesu ? No rozwiazan jest kilka.
    Np. Mozesz uzyc VirtualQuery() do odnaleznienia regionow i na podstawie
    wielkosci, typu i protekcji wyciagnac pewnie wnioski.

    >>> 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.
    >
    > A w jaki sposób debuggery potrafią wyświetlić stos wywołań funkcji?
    >
    Maja dostep do plikow symboli, ktore zawieja niezbedne informacje.

    > >> 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.
    >
    > Jest GetThreadContext.
    > Rejestr FS wskazuje na jakąś strukturę opisującą bieżący wątek - jaką?
    NT_TIB.


    Pozdr

    Marek


  • 5. Data: 2011-05-28 12:52:40
    Temat: Re: Wątki a ramki stosów
    Od: Marek Borowski <m...@b...com>

    On 28-05-2011 01:34, pozytywne wibracje wrote:
    > W dniu 2011-05-28 00:58, Marek Borowski pisze:
    >
    > Dzięki za odpowiedź.
    >
    >> On 27-05-2011 01:00, pozytywne wibracje wrote:
    >>> 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).
    >
    > To nie jest tak że na stertę przeznacza się cały zakres wolnych adresów?
    >
    Nie. Poza tym w windows mozesz miec wiele stert, zarzadanych przez rozne
    komponenty

    >>> 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.
    >
    > A czy jest jakaś możliwość zrobienia tego programowo?
    >
    Tzn w ramach istniejacego procesu ? No rozwiazan jest kilka.
    Np. Mozesz uzyc VirtualQuery() do odnaleznienia regionow i na podstawie
    wielkosci, typu i protekcji wyciagnac pewnie wnioski.

    >>> 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.
    >
    > A w jaki sposób debuggery potrafią wyświetlić stos wywołań funkcji?
    >
    Maja dostep do plikow symboli, ktore zawieja niezbedne informacje.

    > >> 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.
    >
    > Jest GetThreadContext.
    > Rejestr FS wskazuje na jakąś strukturę opisującą bieżący wątek - jaką?
    NT_TIB.


    Pozdr

    Marek



strony : [ 1 ]


Szukaj w grupach

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: