Aktywne Wpisy
nuKER_ +87
#kryminalne #patologiazmiasta #seba
"17 lat żyję, a ty mi piętnastaka dajesz!?"- Nie żyje autor słynnych słów. Jego zachowanie w sądzie widziała kiedyś cała Polska.
Konrad Nowacki w 2007 roku został skazany za pobicie, którego ofiara cudem przeżyła. Kiedy usłyszał wyrok 15 lat pozbawienia wolności, zaczął się odgrażać w stronę sędziego. Nagranie było tak zwanym hitem internetu, jednym z pierwszych polskich virali.
Po 13 latach wyszedł na wolność, a w
"17 lat żyję, a ty mi piętnastaka dajesz!?"- Nie żyje autor słynnych słów. Jego zachowanie w sądzie widziała kiedyś cała Polska.
Konrad Nowacki w 2007 roku został skazany za pobicie, którego ofiara cudem przeżyła. Kiedy usłyszał wyrok 15 lat pozbawienia wolności, zaczął się odgrażać w stronę sędziego. Nagranie było tak zwanym hitem internetu, jednym z pierwszych polskich virali.
Po 13 latach wyszedł na wolność, a w
źródło: IMG_0397
Pobierz
monky +18
Uuuuu.. poszło na lajwie
( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°)
( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°)






Lekcja 3.
Temat: Bity,bajty,słowa- słowem pamięć.
Zacznijmy od czegoś co bardzo trudno sobie uświadomić.
bit to podstawowa jednostka informacji, pojedyncza cyfra binarna 1 albo 0.
I wszystko jest spoko dopóki te bity są jakieś wirtualne, nienamacalne.
Problem jednak polega na tym że każdego jednego bitu w komputerze można dotknąć.
Bit nagle przestaje być cyfrą a staje się zestawem tranzystorów,kondensatorem,żyłą czy falą.
Bajtem nazwiemy 8 takich bitów "obok siebie".
Słowo to ilość informacji którą procesor może obrobić na raz.
Intel 4004 pierwszy cywilny mikroprocesor miał słowo 4 bitowe, a omawiany 8086 ma słowo 16 bit.
Historia zna wynalazki o słowach dowolnej szerokości i 10bit to nie najdziwniejsze co było.
Taka definicja słowa jest problematyczna głównie dlatego że Intel używa przewrotnego nazewnictwa.
Mimo że i386 miał słowo 32bitowe a AMD64 64bitowe to w świecie x86 słowem nazywamy 16 bitów.
Jak więc Intel nazywa kolejne wielkości "słowa" ?
1 bajt to po prostu bajt i definiujemy go dyrektywą db (define byte)
2 bajty to słowo (zgodnie z 8086) definiujemy dyrektywą dw (define word)
4 bajty, słowo 32 bitowe (i386) definiujemy dyrektywą dd (define dubleword)
8 bajtów czyli 64bity definiujemy dyrektywą dq (define quadword)
i odpowiadają temu rejestry
1- AL,AH,BL,BH,CL,CH,DL,DH
2- AX,BX,CX,DX,SP,DI,SI,BP,IP
4- EAX,EBX,ECX,EDX,ESP,EDI,ESI,EBP,EIP // dostępne od i386
8- RAX,RBX,RCX,RDX,RSP,RDI,RSI,RBP,RIP,R8,R9,R10,R11,R12,R13,R15 //dostępne od AMD64
widzimy że tryb 64 bitowy dodaje nam poza szerokością dodatkowe rejestry ogólnego przeznaczenia.
|-------------------------------RAX------------------------------|________________________________|----------------EAX-------------|
________________________________________________|-------AX-------|
________________________________________________|---AH--|---AL---|
Tak to mniej więcej wygląda na przykładzie rejestru akumulatora.
i jest to jedne rejestr, co często umyka uwadze młodych programistów.
ZMIANA WARTOŚCI NP. AX SPOWODUJE ZMIANĘ RÓWNIEŻ RAX,EAX,AX,AL,AH BO TO FIZYCZNIE JEDEN REJESTR.
Wszystko to spoko tylko że pamięć zbudowana jest w architekturze bajtowej. Oznacza to że najmniejszą
a zarazem jedyną cegiełką budującą pamięć jest 1 bajt. Jak zapisać więc np słowo w RAMie?
Tu mamy 2 opcje
Little endian i Big endian
Big endian to przepisanie na żywca, a little endian to zapisanie mniejsze niżej a więc odwrotnie.
sądzę że najlepiej będzie jak zapiszemy do pamięci wartość 0x12345678
0x00 0x01 0x02 0x03 Adres0x12 0x34 0x56 0x78 Big Endian
0x78 0x56 0x34 0x12 little endian
Po co to tak odwrócono? taki zapis ułatwia przycinanie.
wyobraźmy sobie że ładujemy zmienną z pamięci z pod adresu 0x00 do rejestru.
przy załadowaniu do rejestru 32 bitowego nie ma problemu, a co jak byśmy potrzebowali tylko
najmłodszy bajt?
w przypadku Big Endian możemy załadować do rejestr 32 bit i potem dopiero patrzeć na najmłodsze
8 bitów by odczytać. Nie jest to zbyt praktyczne, dlatego stosuje się little Endian gdzie
chcąc załadować kilka młodszych bajtów starczy załadować do odpowiedniego rejestru i już.
Mam nadzieję, że to jest jasne.
Ok omówiliśmy więc rejestry i spróbowaliśmy spojrzeć na pamięć, zanim przyjrzymy się jak zbudowane
są inne pamięci zobaczmy jak się je szereguje.
https://upload.wikimedia.org/wikipedia/commons/thumb/0/0c/ComputerMemoryHierarchy.svg/1280px-ComputerMemoryHierarchy.svg.png
dla porządku "przepisze tu ten obrazek"
L0- najszybsze,najmniejsze,najdroższe: Rejestry
L1- Cache wykonywany w technologi SRAM, szybszy i mniejszy z 2
L2- Cache wykonywany w technologi SRAM, wolniejszy i większy z 2
L3- Pamięć RAM w technologi DRAM.
L4- Pamięć masowa....
SRAM(Cache) i DRAM(RAM) czym to się różni?
Budowa komórki:
SRAM StaticRandomAccessMemory składa się z 2 zapętlonych bramek NOT, pamięć ta nie znika po odczycie
https://upload.wikimedia.org/wikipedia/commons/thumb/9/9d/SRAM_Cell_Inverter_Loop.png/220px-SRAM_Cell_Inverter_Loop.png
DRAM DynamicRandomAccessMemory składa się z kondensatora którego naładowania trzeba pilnować i jego
stan jest tracony przy odczycie, zatem musi automatycznie nastąpić jeszcze zapis, a to kosztuje nas czas.
http://euler.mat.uson.mx/~havillam/ca/CS323/0708.cs-323027.png
Jak więc widzimy pamięć SRAM wymaga od nas więcej zasilania, ale za to jest prostsza w użyciu i szybsza.
Organizacja:
I tu spokojnie z punktu widzenia programisty CAŁA pamięć wygląda jak DRAM, więc nie przerażać się
SRAM:
jest tablicą asocjacyjną odzwierciedlającą cały RAM. Pewno zapytasz jak zmieścić 16GB w 8MB
i odpowiedź brzmi nie da się.
Każdy wiersz takiej pamięci składa się z 1 lub więcej kanałów wyglądających tak:
|@Etykieta|dane,dane,dane,danewięc pamięć 2 kanałowa wygląda tak:
|@Etykieta|dane,dane,dane,dane|@Etykieta|dane,dane,dane,daneDRAM:
Tu mamy jedną wielką przestrzeń, podajesz adres dostajesz dane, tak prosto.
Odczyt/Zapis:
SRAM:
Adres dzielimy na pola
|@Etykieta|Wiersz|offset|Następnie idziemy do wiersza
Wierszporównujemy znalezioną tam wartość@Etykietaz tą jaką mamyw Adresie. Jak pasuje to czytamy wskazaną przez
offsetkolumnę z danymi. Przy pamięci wielokanałowejwykonujemy ten krok dla każdego z kanałów. Jak trafimy to spoko. Jeśli jednak nie uda nam się trafić
przechodzimy do odczytu z pamięci DRAM. Przed tym jednak należy odłożyć wiersz z pamięci Cache do RAMu
i dopiero wtedy załadować kilka bajtów na jego miejsce. Jak więc widać pudło nas dużo kosztuje.
W pamięci cache są jeszcze bity informujące o ważności tego co się tam znajduje oraz statystyczne
pomagające podjąć decyzje co wywalić z tej pamięci a co zachować.
DRAM
Wystawiamy sygnał RAS Row Adress Strobe by wskazać "kolumnę" z której czytamy
Potem czekamy chwilę i wystawiamy sygnał CAS Column Adress Strobe by pobrać odpowiedni wiersz.
Sygnał CAS można podać kilkakrotnie.
Z uwagi na wydajność podczas takiego żądania wysyłane jest kilka bajtów do procesora.
Po wysłaniu sygnału CAS musimy poczekać chwilkę na dane, czas wyrażony w cyklach jaki to zajmuje
jest parametrem kości nazwanym CL (CAS Latency). Dlatego jest to ważny parametr pamięci jeśli
ktoś chce się brandzlować pod #pcmasterrace
Taka a nie inna organizacja pamięci Cache ma sens z uwagi na 2 bardzo ważne zasady wynikłe z obserwacji:
1. zasada lokalności przestrzennej
2. zasada lokalności czasowej
obie te zasady sprowadzają się do tego że program będzie kręcił się wśród małej ilości danych
a ewentualne skoki będą wykonywanie nie daleko.
Na koniec kilka uwag dot tego co widzi programista a co jest w rzeczywistości.
Programista widzi 4GB pamięci wirtualnej w trybie 32 bit. Odzwierciedlenie tego na pamięć rzeczywistą
to wyższa szkoła jazdy i używa się do tego takich wymyślnych rzeczy jak strony pamięci
upakowane w katalogi itd. Taka organizacja pozwala implementować SWAP na #linux i Plik wymiany w #windows
Jeśli jesteście zainteresowani jak ta cała magia z pamięcią wirtualną chętnie opiszę,
ale w innym wpisie ten jest nazbyt długi.
To co powinieneś pamiętać po tej lekcji to:
1. Można odwołać się do młodszej częsci rejestru jednak AX to kawałek rejestru EAX a nie osobny rejestr.
2. Co znaczy Little endian i Big Endian oraz jak zapisywane są dane
3. Masz 4GB ramu a na resztę jako programista masz w------e.
4. Jeśli składasz mocnego PC spójż na wielkość pamięci Cache procesora oraz CL w pamięci RAM
Za dotrwanie do tego miejsca ciekawostka:
No i jak zwykle chce poznać waszą opinie na temat tej lekcji, co jest nie jasne a czego było za dużo?
nowsze są lepiej przemyślane
starsze było po prostu prostsze
no ale jak by nie patrzeć każdy ma Intela :(
http://www.avr-asm-download.de/beginner_en.pdf
Chętnie zobaczyłbym ARMy i jakieś odczarowanie tych wszystkich assemblerowych czarów inicjalizujących mikrokontroler.
W takim razie jak wysle np dane do karty graficznej? Pamiec RAM to tylko czesc pamieci operacyjnej. Na pamiec operacyjna mapowane sa adresy ram jak rowniez np portow peryferiow.
@wytrzzeszcz: Polecam opisać UltraSparc, są to dziś proceosory serwerowe na specjalne zamówienie.
Sama zasada działania tego procesora jest cholernie fascynująca ( ͡° ͜ʖ ͡°)
https://www.youtube.com/watch?v=WZZdiE3_dj0
Ponoć dość często lecą na złom, więc zbierać bo #gimbynieznajo (⌐ ͡■ ͜ʖ ͡■)
@paprok: Czy się mylę?
W końcu kupiłeś SUN E450 z 1997r. który jeszcze do niedawna się całkiem nieźle sprawdzał ( ͡° ͜ʖ ͡°)