• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak komputer/procesor rozumie i zapamiętuje struktury danych

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
140 wizyt
pytanie zadane 25 sierpnia 2019 w Systemy operacyjne, programy przez Vitall Początkujący (400 p.)

Cześć,

swoją przygodę z informatyką rozpocząłem ok. rok temu, ale gdzieś od ok. 10 miesięcy z powodów życiowych działam w informatyce z nieregularnymi przerwami.

Jako, że jedną z zasadniczych podstaw są struktury danych - sposób uporządkowania informacji w komputerze, a wśród nich m. in. stosy, kolejki, listy, tablice, drzewa, rekordy, itd. moje pytanie odnośnie nich jest następujące:

w jaki sposób komputer rozumie (i zapisuje/zapamiętuje) co to jest stos, kolejka, itd. ???

Struktura danych, np. stos jest to pojęcie abstrakcyjne - ok. Wyobrażamy sobie dosłownie stos, żeby złapać jak to działa. Możemy myśleć o tym jak np. o stosie książek - zgoda.
Możemy sobie zaimplementować stos za pomocą dowolnego języka programowania, np. C++ - zgoda.
Ale tu już się rodzą pytania... mianowicie wiadomo, że do komputera dosłownie nie włożymy stosu - oczywista oczywistość, jednak na czym polega implementacja struktury danych - jak komputer ją zapisuje/rozumie ???

Nie wiem, czy na pewno przekazuję tu swoją niepewność/wątpliwość w odpowiednio jasny sposób.
Czy chodzi o to, że procesor, a dokładnie jego pamięć korzysta z tych struktur danych i jeśli tak, to dokładnie w jaki sposób to się odbywa? Nie mam jakiejś specjalnej wiedzy o procesorach, coś tam wiem, ale nie za wiele.

I jeszcze jedna kwestia odnośnie struktur danych - czy one służą tylko i wyłącznie językom programowania jako narzędziu służącym do implementacji algorytmów, czy może też do przechowywania danych w komputerze niezależnie od programistyki?

Bardzo Was proszę o odpowiedzi w miarę możliwości łopatologiczne. 
Z góry dziękuję każdemu, kto poświęci swój czas, żeby mi pomóc (i innym, których podobnie trawi ten problem).

Pozrawiam,
Vitall

1 odpowiedź

+1 głos
odpowiedź 26 sierpnia 2019 przez Patrycjerz Mędrzec (192,460 p.)
wybrane 5 września 2019 przez Vitall
 
Najlepsza
  1. Stos to jedna z najważniejszych struktur danych w informatyce. Na jego zasadzie działa m.in. stos wywołań. Umożliwia on poprawne działanie programów jako zbioru funkcji. Bez niego niemożliwe byłoby ich wywoływanie oraz tworzenie w nich argumentów czy zmiennych lokalnych. W architekturze x86 (czyli większość dzisiejszych PC-tów) stos wywołań jest przechowywany normalnie w pamięci operacyjnej i wskazuje na niego rejestr esp​. W nowoczesnych systemach operacyjnych każdy proces ma swoją wirtualną przestrzeń adresową, mapowaną na rzeczywistą, co ułatwia programowanie oraz zwiększa bezpieczeństwo (dany proces nie może modyfikować pamięci innego procesu). W tej pamięci wirtualnej przechowywany jest stos, gdzie system sam przypisuje rejestrowi esp odpowiedni adres (nie wiem, czy procesor rozumie, co to pamięć wirtualna i czy ona jest przypisywana do tego rejestru, proszę o wytłumaczenie).
  2. Tablice mogą mieć różną reprezentację w pamięci. Mogą być przechowywane na stosie lub na tzw. stercie, czyli pozostałej części pamięci procesu (bez stosu i paru dodatkowych części) przydzielanej dynamicznie, o znacznie większym rozmiarze od stosu. Dostęp do takiej pamięci jest wolniejszy (procesor nie doda lub odejmie od wartości rejestru esp odpowiedniego przesunięcia, tylko musi mapować adres wirtualny na rzeczywisty). Na stosie zazwyczaj (to zależy od języka programowania) tablice są przechowywane jako jeden ciąg danych, ale z powodu ograniczenia jego rozmiaru, nie może być ona za duża, jedynie do lokalnych obliczeń. Na stercie natomiast mogą być przechowywane różnorako, czyli jako jeden ciąg, jako lista jedno- lub dwukierunkowa, a także w postaci innych struktur. To już inwencja programisty lub użytej technologii.
  3. Struktury, takie jak stos (abstrahując od wywołań funkcji), drzewa, kolejki, rekordy itp. mogą być przechowywane gdziekolwiek i jakkolwiek. To zależy głównie od rozmiaru takiej struktury i użytej technologii. Jeśli jest mała i służy do lokalnych obliczeń w funkcji, to użyjemy stosu. Jeśli jest to coś większego, to zaalokujemy to dynamicznie na stercie.
  4. Struktur danych używamy wszędzie tam, gdzie potrzebujemy pewnego uporządkowanego sposobu  przechowywania danych. Może to być np. ramka protokołu HTTP lub metadane w formacie JPEG. Może to być uzależnione od wykorzystywanego algorytmu (chyba w bazach danych silnik może przechowywać rekordy w postaci drzewa, w celu szybszego wyszukiwania) lub specyfiki urządzenia (dana struktura musi mieć rozmiar będący wielokrotnością słowa maszynowego) itp. Nie można więc ograniczać ich wykorzystania jedynie w algorytmice, gdyż są uniwersalne w całej informatyce.
komentarz 27 sierpnia 2019 przez j23 Mędrzec (186,240 p.)

Może to być np. ramka protokołu HTTP

Miałeś chyba na myśli ramkę TCP/IP.

komentarz 27 sierpnia 2019 przez Patrycjerz Mędrzec (192,460 p.)

Mogłem to rzeczywiście nazwać inaczej, np. żądaniem.

1
komentarz 5 września 2019 przez Vitall Początkujący (400 p.)

@Patrycjerz, dzięki wielkie za odpowiedź. Wahałem się chyba z  tydzień z odpisaniem komentarza, bo czuję, że będę drążył temat, ale jeszcze nie teraz. W razie czego, odnowię temat. Jeszcze raz - dzięki :D

Ogólnie polecasz jakieś pozycje do zgłębienia wiedzy?

komentarz 5 września 2019 przez Patrycjerz Mędrzec (192,460 p.)
Ja osobiście nie czytałem żadnych książek na ten temat. Po prostu miałem tego typu tematy na studiach oraz przewinęły się podczas nauki C++.

Jeśli masz jeszcze jakieś pytanie, to wal śmiało. Postaram się odpowiedzieć w miarę możliwości.

Podobne pytania

+1 głos
2 odpowiedzi 164 wizyt
pytanie zadane 8 października 2021 w Offtop przez livingr4t Nowicjusz (200 p.)
0 głosów
2 odpowiedzi 403 wizyt

89,727 zapytań

138,332 odpowiedzi

309,340 komentarzy

59,649 pasjonatów

Advent of Code 2022

Top 15 użytkowników

  1. 429p. - Argeento
  2. 427p. - nidomika
  3. 396p. - Mikbac
  4. 392p. - ssynowiec
  5. 390p. - Łukasz Eckert
  6. 387p. - TheLukaszNs
  7. 386p. - rucin93
  8. 382p. - Marcin Harasimowicz
  9. 382p. - Michal Drewniak
  10. 378p. - JMazurkiewicz
  11. 373p. - tokox
  12. 367p. - Jarosław Roszyk
  13. 362p. - adrian17
  14. 359p. - overcq
  15. 350p. - Mawrok
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...