Salt la conținut

SUBIECTE NOI
« 1 / 5 »
RSS
Puteti sa-mi indicati numele soft...

Pret zugravit

Megalopolis (2024)

Integra A8690
 Solutie asamblare perete - cada.

Balans la ridicare picior dupa ac...

Izolatie intre OSB si placa de be...

instalatie incalzire apartament 2...
 HEV D Segment - intrebari/pareri ...

Hyperos consum excesiv baterie?

Contractul pentru Salubrizare est...

Elicopterul care-l transporta pe ...
 Sfaturi achizitionare apartament ...

Permis de conducere nou

Packet Loss la Digi

Masurare parametri CATV prin Conn...
 

Organizarea RAM-ului

- - - - -
  • Vă rugăm să vă autentificați pentru a răspunde
36 răspunsuri în acest subiect

#1
chri5ty

chri5ty

    Junior Member

  • Grup: Members
  • Mesaje: 143
  • Înscris: 31.01.2008
De mai multe ori m-am lovit peste tot felul de necazuri, cand am ajuns sa studiez memoria calculatorului. Am crezut ca nu o sa fie greu sa stapanesc niste notiuni noi, insa dupa mai multe surprize, am ajuns sa nu mai inteleg nimic  :deadtongue: . Inainte sa postez, am mai citit cateva topic-uri "din zona" si nu am gasit dublura la subiectul asta.


Vreau sa invat TOT despre RAM, si ca sa stiti cam pe unde sunt, am sa va prezint ce stiu in momentul de fata:

- Fiecare octet din RAM are o adresa unica.
- Daca avem o informatie pe 4 octeti (spre exemplu 0x12345678), in RAM, se vor memora octetii in ordinea 78|56|34|12, unde adresa creste de la stanga la dreapta.
- Initial, calculatoarele puteau memora adrese de memorie pe 16 biti, permitandu-le sa identifice orice octet din primii 64Kb de memorie.
- Windows-ul suporta adrese de memorie de pana la 32 de biti, accesand pana la 4Gb de memorie continua.

- Aici e o problema  :deadtongue: : cand cei 64 Kb nu au mai fost suficienti, s-a implementat segmentarea (cosmarul meu), care marea limita de memorie pana la 1Mb. Am mai intalnit la unele probleme de programare: "Limita de memorie 16 Mb". :cursing:
- Aici apare inca o problema: compilatoarele au optiunea de utiliza un anumit model de memorie (tiny, small, huge.. etc). Am gasit intr-o carte o explicatie a lor, din care nu am inteles chiar nimic  :deadtongue: . Am motive sa cred ca are legatura cu segmentarea asta afurisita.
- Stiu ce presupune normalizarea pointerilor. Ramane doar sa inteleg cum se lucreaza cu memoria din ASM.


Va rog sa imi raspundeti fie cu explicatii, fie cu link-uri. Am citi si eu de pe net ce am gasit, dar nu era suficient.

#2
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Mesaje: 40.640
  • Înscris: 30.07.2003
Teoria aia era valabila sub MS-DOS...
Acum avem sisteme pe 32 sau 64 biti cu model de memorie total diferit si extrem de simplu...
Asa ca nu stiu de ce iti mai bati capul...

#3
chri5ty

chri5ty

    Junior Member

  • Grup: Members
  • Mesaje: 143
  • Înscris: 31.01.2008

Citat

Teoria aia era valabila sub MS-DOS...
Acum avem sisteme pe 32 sau 64 biti cu model de memorie total diferit si extrem de simplu...
Asa ca nu stiu de ce iti mai bati capul...
Eu vreau sa stiu, totusi. Imi trebuie sa stiu si cum functioneaza sistemele vechi, pentru ca lucrez probleme pt concursuri / olimpiade, si alea folosesc astfel de sisteme.

Editat de chri5ty, 03 noiembrie 2008 - 16:59.


#4
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Mesaje: 27.268
  • Înscris: 10.08.2006

Vizualizare mesajchri5ty, pe Nov 3 2008, 17:50, a scris:

- Daca avem o informatie pe 4 octeti (spre exemplu 0x12345678), in RAM, se vor memora octetii in ordinea 78|56|34|12, unde adresa creste de la stanga la dreapta.
wikipedia: endianess

#5
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Mesaje: 40.640
  • Înscris: 30.07.2003

Vizualizare mesajchri5ty, pe Nov 3 2008, 16:50, a scris:

cand cei 64 Kb nu au mai fost suficienti, s-a implementat segmentarea (cosmarul meu), care marea limita de memorie pana la 1Mb.
Nu segmentarea a impins limita la 1Mb ci faptul ca procesorul avea acum 20 linii de adresare in loc de 16 (2 ^ 20 = 1Mb) dar sistemul de operare stia sa lucreze tot cu 16 linii (biti) si astfel a trebuit inventat un mecanism de accesare bazat pe acei 16 biti (segmente de 64 Kb)...


Vizualizare mesajchri5ty, pe Nov 3 2008, 16:58, a scris:

pentru ca lucrez probleme pt concursuri / olimpiade, si alea folosesc astfel de sisteme.
La astfel de concursuri parca matematica e cuvantul de ordinde, nu arhitectura software/hardware  :huh: desi m-as bucura sa fie ultima, dar nu cred !

#6
msmihai

msmihai

    Senior Member

  • Grup: Senior Members
  • Mesaje: 5.271
  • Înscris: 02.09.2006
niciodata nu am inteles faza cu cele 20 de linii de adresare :) Ce insemnau mai exact ? Daca tot suntem la lectia de istorie :)
la facultate pur si simplu ni s-a bagat pe gat  lucrul asta .

#7
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Mesaje: 40.640
  • Înscris: 30.07.2003

Vizualizare mesajmsmihai, pe Nov 3 2008, 21:49, a scris:

niciodata nu am inteles faza cu cele 20 de linii de adresare
Procesorul comunica cu memoria prin 20 sarme/conectori/linii adresare/biti si astfel putea adresa 2 ^ 20 = 1Mb memorie

#8
tudor_turcu

tudor_turcu

    Senior Member

  • Grup: Senior Members
  • Mesaje: 2.377
  • Înscris: 12.09.2003
Din cate tin minte, explicatia pentru care procesoarele 8086 si 8088 aveau 20 (16+4) de linii de adresare si nu 32 sau alta valoare mai mare a fost pentru ca la vremea respectiva (in jurul lui 1980) s-a considerat ca e arhisuficient pentru un program sa poata adresa 2^20 bytes (deci 1 MB)..

Pare o valoare mica, da sa nu uitam ca pe un PC la vremea respectiva rula un sistem de operare mono-tasking, ce rula in mod normal o singura aplicatie (in afara sistemului de oparare), in mod text-only, de obicei black&white pe un ecran cu rezolutia de 25x40 (caractere), sistemul de oparare si programul erau incarcate de obicei de pe o caseta sau floppy, nu de pe un HDD - astfel ca un program care sa ceara mai mult de 640 KB trebuia s afaca ceva cu totul special..

Editat de tudor_turcu, 03 noiembrie 2008 - 22:29.


#9
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Mesaje: 40.640
  • Înscris: 30.07.2003
80286 a introdus 24 linii de adresare si astfel se ajungea la 2 ^ 24 = 16 Mb... adica fara numar pe atunci  :D

#10
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Mesaje: 27.268
  • Înscris: 10.08.2006
Citește și tu aici: http://webster.cs.uc...ganization.html și pe wikipedia. Sunt atâtea articole care explică bine încât e greu de imaginat ca cineva de aici să stea să-ți explice mai pe îndelete.

#11
chri5ty

chri5ty

    Junior Member

  • Grup: Members
  • Mesaje: 143
  • Înscris: 31.01.2008
Deci sistemele de adresare pe 20, repsectiv 24 de biti s-au introdus pe rand, cum au aparut noi arhitecturi de procesoare?
80386 e modelul folosit azi, cu adresare pe 32 de biti? Metoda de adresare depinde strict de arhitectura procesorului, sau trebuie initializata reprezentarea cea mai potrivita la incarcarea sistemului, prin 2-3 instructiuni?


Citat

Din cate tin minte, explicatia pentru care procesoarele 8086 si 8088 aveau 20 (16+4) de linii de adresare si nu 32 sau alta valoare mai mare a fost pentru ca la vremea respectiva (in jurul lui 1980) s-a considerat ca e arhisuficient pentru un program sa poata adresa 2^20 bytes (deci 1 MB)..
Cam asta stiam si eu  :)

#12
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Mesaje: 40.640
  • Înscris: 30.07.2003

Vizualizare mesajchri5ty, pe Nov 4 2008, 00:37, a scris:

80386 e modelul folosit azi, cu adresare pe 32 de biti?
Da, dar e pe duca si asta fiindca se tinde spre 64...

Vizualizare mesajchri5ty, pe Nov 4 2008, 00:37, a scris:

Metoda de adresare depinde strict de arhitectura procesorului, sau trebuie initializata reprezentarea cea mai potrivita la incarcarea sistemului, prin 2-3 instructiuni?
Procesoarele au pastrat compatibilitatea, pot trece de la un mod la altul sau pot emula unul din modurile vechi...
Faptul ca s-a marit linia de adresare nu inseamna ca s-a pastrat modelul segment:offset (atentie)...

Editat de neagu_laurentiu, 04 noiembrie 2008 - 07:47.


#13
Gurban_Dan

Gurban_Dan

    Active Member

  • Grup: Members
  • Mesaje: 1.267
  • Înscris: 13.07.2005
<<Deci sistemele de adresare pe 20, repsectiv 24 de biti s-au introdus pe rand, cum au aparut noi arhitecturi de procesoare?
80386 e modelul folosit azi, cu adresare pe 32 de biti? Metoda de adresare depinde strict de arhitectura procesorului, sau trebuie initializata reprezentarea cea mai potrivita la incarcarea sistemului, prin 2-3 instructiuni?>>

Am sa explic cateva lucruri simple:
Celula elemetara este un bistabil:
http://www.hobbyproj...s/bistable.html
cam ca aici, bine ca se foloseste MOS nu bipolar si nici exemplul nu este prea bine alea, pentru ca circuitul din imagine sare din 1 in 0 si invers la fiecare 1 ajuns la el si memoreaza acesta stare.
Acum o biti formeza un octet.
Dar de unde stim ce octat adresam ? RAM-ul include ceea ce in electronica numim decodor, adica un circuit de genul:
http://www.ee.surrey...er/decoder1.htm
In acest exemplu se adu 2 intrai deci pe 2 biti si ai 4 iesiri.
Practic printr-o succesinue de porti logice scriu un numar pe 8 biti si imi alimeteaza doar octetul x.

Acum,
Luam ca exemplu magistrala de date: DS:[SI]
Initaial s-a foloit un word cum ar fi SI.
El are valoare maxima 0FFFFh=65535zecima= 64k in reprezentarea memoriei,

Cand asta nu a mai fost suficienta s-a inventat segmetul si offsetul accesat
mov al, ds:[si]

DS este octet si are valoare maxima FF
Acum dintr-o trista inspiratia s-au adunat cam asa:
DS=1111 1111 -------------  +
SI=------ 1111 1111 1111 1111
------------------------------------
    10000 1110 1111 1111 1111 in binar      Mihai astea cred ca sunt 20 de linii de adresare pentru ca sa duci valoare asta de la procesor in RAM in mod paralel cum se obisnuieste iti trebuie 20 de fire electrice gen panglica care sa merga de la unul la celalat.        
    1   0    E        F      F       F    in hexa
   1 110 015 in zecimal . Asta este cam 1Moctet. Nu este un MB!, este cam atat.

Altfel spus adresa BIOS-ului este 0:400 dai si 40:000

Acum trecand pe 32 de biti in loc de ax a aparut eax
eax = 0FFFF FFFFh
partea low din eax este tot ax.
A mai ramas si DS si au aparut alte resitre de segmat noi.
Aste pentru ca si procesorele noi sa poate interpreta programe facute pentru cele vechi.
Deci acum memoria se poate adresa doar cu ESI, dar si cu DS:SI daca vrem sa adresam doar o parte.
Daca lucrez sun 32 biti nu mai poat umbla la DS care este pastrat undeva.

Si o reprezentare schematica a unui procesor:


http://www.hobbyproj...or_systems.html

Editat de Gurban_Dan, 05 noiembrie 2008 - 17:27.


#14
mp_nova_2004

mp_nova_2004

    Junior Member

  • Grup: Members
  • Mesaje: 85
  • Înscris: 08.02.2007
Putin off-topic:

Vizualizare mesajGurban_Dan, pe Nov 5 2008, 17:19, a scris:

Asta este cam 1Moctet. Nu este un MB!

Ce vrei sa spui?

#15
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Mesaje: 27.268
  • Înscris: 10.08.2006

Vizualizare mesajmp_nova_2004, pe Nov 5 2008, 18:11, a scris:

Putin off-topic:



Ce vrei sa spui?

... vrea sa introduca termeni diferiti pentru 1. "mb" asa cum este folosit in industrie si 2. "mo" asa cum este folosit in IT.

Mo este defapt termenul romanesc pentru Mb, iar industria profita de diferenta aceea de 1024 vs 1000 oricum.

#16
AndreiASM

AndreiASM

    Active Member

  • Grup: Members
  • Mesaje: 1.021
  • Înscris: 24.06.2007

Vizualizare mesajchri5ty, pe Nov 3 2008, 16:50, a scris:

...

In mare masura ai primit raspuns la intrebarile tale. In ceea ce priveste modelul de memorie ales, aceasta se facea doar pe compilatoarele de DOS. Sub Windows/LINUX/UNIX, nu ai de ales, modelul ti-e impus ca fiind cel flat. Ce inseamna flat? Data/codul/stiva se afla intr-o zona de memorie continua, nesegmentata. Te vei gandi cum e posibil? Simplu. In mod protejat (modul in care lucreaza SO actuale), se foloseste paginarea, nu segmentarea. Dimensiunea unei pagini variaza, si e in general 4 sau 8 KB. Partea folositoare e ca intr-o pagina poti sa ai orice adresa virtuala vrei. Deci pot fi oricate programe care folosesc aceeasi adresa, pentru ca folosesc o adresa virtuala, care se afla in interiorul propirului spatiu virtual de memorie, si adresele sunt pe 32 de biti. In DOS, mai existau aplicatii care isi adresau de exemplu date in segmente diferite fie pe 16 fie pe 32 de biti, deoarece se pastra compatiblitatea. Tiny/small de exemplu indica offseturi de 16 biti pentru cod/date/stiva si pointeri de tip near (16 biti), huge indica adrese de 32 de biti, etc.

In ceea ce priveste latimea de banda a magistralei de date/adrese ea indica practic cati biti pot fi transferati simultan. Evident, o magistrala pe 20 de biti poate transfera 20 biti simultan, etc. etc.

LE: si cu ce consideri ca o sa te ajute aceste elemente legate de arhitectura procesorului/sistemului de operare la concursuri...?

Editat de AndreiASM, 05 noiembrie 2008 - 19:21.


#17
tudor_turcu

tudor_turcu

    Senior Member

  • Grup: Senior Members
  • Mesaje: 2.377
  • Înscris: 12.09.2003

Vizualizare mesajOriginalCopy, pe Nov 5 2008, 18:15, a scris:

... vrea sa introduca termeni diferiti pentru 1. "mb" asa cum este folosit in industrie si 2. "mo" asa cum este folosit in IT.
Mo este defapt termenul romanesc pentru Mb, iar industria profita de diferenta aceea de 1024 vs 1000 oricum.
[offtopic]
Cred ca l-ai zapacit si mai mult :) - Mo (MegaOctet) si MB (MegaByte) sunt unul si acelasi lucru (prespunand ca 1 Byte are 8 biti) - problema ca prefixul 'Mega' e folosit cu intelesuri diferite in diferite cazuri, de unele persoane:
- in general, prefixul 'Mega' reprezinta 1 milion (10^6) conform standardului SI (http://en.wikipedia.org/wiki/SI) - folosit in cazuri gen MegaTona sau MegaJoule
- in computing/IT/software, prefixum M (Mega) e folosit de obicei ca avand valoarea 1.048.576 (220); cum ziceai, in unele cazuri, unii au folosit ulterior si in IT prefixul Mega- "subintelegand" valoarea de 1 mil., mai ales in ce priveste capacitatea mediilor de stocare (harddiscuri).
In incercarea de a elimina confuzia, s-a propus sa se foloseasca prefixul 'Mebi' (MiB - MebiByte) pentru a desemna 1.048.576 Bytes, prefix care a fost standardizat de organizatii precum IEC (IEC 60027-2), SI, IEEE, ANSI insa nu a avut mare success deocamdata printre oamenii obisnuiti..

Editat de tudor_turcu, 05 noiembrie 2008 - 21:37.


#18
chri5ty

chri5ty

    Junior Member

  • Grup: Members
  • Mesaje: 143
  • Înscris: 31.01.2008

Citat

10000 1110 1111 1111 1111 in binar Mihai astea cred ca sunt 20 de linii de adresare pentru ca sa duci valoare asta de la procesor in RAM in mod paralel cum se obisnuieste iti trebuie 20 de fire electrice gen panglica care sa merga de la unul la celalat.

Poate nu pricep eu ceva simplu de tot, dar nu sunt aici 21 de fire? Se trimite adresa "pe din doua"? Adica offset-ul si restul adresei? Sau poate se memoreaza bitul cel mai semnificativ in registrul FLAGS? La nivel de hardware, am inteles ca se comunica cu 20 de fire, nu numai cu RAM-ul, ci cu toate componentele.


Citat

Acum trecand pe 32 de biti in loc de ax a aparut eax
eax = 0FFFF FFFFh
partea low din eax este tot ax.
A mai ramas si DS si au aparut alte resitre de segmat noi.
Aste pentru ca si procesorele noi sa poate interpreta programe facute pentru cele vechi.
Deci acum memoria se poate adresa doar cu ESI, dar si cu DS:SI daca vrem sa adresam doar o parte.
Daca lucrez sun 32 biti nu mai poat umbla la DS care este pastrat undeva.
Din prea multe greseli de ortografie, nu am reusit sa inteleg asta: "resitre de segmat noi".

Ca sa lucrez sub 32 de biti, trebuie sa intru in modul protejat presupun. Acum nu mai pos sa accesez DS-ul, dar adresarea se face mai simplu, cu ESI (registru de 32 de biti, in care se poate memora o adresa completa), nu?


Citat

Data/codul/stiva se afla intr-o zona de memorie continua, nesegmentata. Te vei gandi cum e posibil? Simplu. In mod protejat (modul in care lucreaza SO actuale), se foloseste paginarea, nu segmentarea. Dimensiunea unei pagini variaza, si e in general 4 sau 8 KB. Partea folositoare e ca intr-o pagina poti sa ai orice adresa virtuala vrei. Deci pot fi oricate programe care folosesc aceeasi adresa, pentru ca folosesc o adresa virtuala, care se afla in interiorul propirului spatiu virtual de memorie, si adresele sunt pe 32 de biti.

Uite o chestie de care am uitat sa intreb: Adresele virtuale sunt manevrate doar de sistemul de operare, nu? Si mai exact, cum? Parca mi-ai zis odata ca toate executabilele functioneaza la adresa virtuala 0x00600000 (sau asa ceva). Cui folosesc adresele virtuale? Intr-un executabil, instructiunile nu au adrese relative, fata de inceputul imaginii din RAM? Seteaza un registru la o valoare x si isi vede de treaba. Toate adresele pornesc de la 0.

Paginile acelea de 4/8k sunt produsul imaginatiei cuiva? Daca adresarea memoriei tot e flat, cui foloseste sa o mai imparta in bucatele? "Am un compilator bun si gata!" E de datoria executabilului sa manevreze corect adresele de memorie, si de datoria sistemului de operare sa ii ofere accesul doar in zonele alocate. Eu asa cred.



Am cam luat-o la vale cu ideile revolutionare :rolleyes:.



Anunturi

Bun venit pe Forumul Softpedia!

Utilizatori activi: 1

0 membri, 1 vizitatori, 0 utilizatori anonimi

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate