Ja mam jeszcze takie jedno pytanie bo w procesorach jest podana liczba rdzeni i liczba wątków czy każdy rdzeń ma własne rejestry procesora pamięć cache czy pamięć cache jest cała dla wszystkich rdzeni ? ja to wygląda w rdzeniach i wątkach ?
Tak każdy rdzeń ma swoje rejestry, pamięć cache L1 i L2, A L3 jest współdzielona między innymi rdzeniami.
Stąd też te paskudne ataki meltdown i spectral, czy te nowe w mac os, które pozwalały ładować do cache cudzych procesów dane, bo procesor myślał, że dla tej ścieżki wykonania jest potrzebny kod z nieupoważnionego miejsca.
Te ataki były o tyle kreatywne, ale połatali je, ale dalej coś jest, niedługo cache będą kompletnie izolowane dla bezpieczeństwa, ale jeszcze nie wymyślili jak to rozwiązać.
Mogłeś zasymulować odwołanie do pamięci, która nie istnieje i spekulatywnym wykonaniem procesor odwołał się do pamięci co nie istnieje lub nie ma dostępu, co normalnie daje exeption, ale w tym przypadku jest on ignorowany, mógł tak odczytać jakąś wartość z pamięci kernela, potem tą wartość użyć żeby odczytać wartość ze znanej tablicy, wyrównanej do wielkości cache i jak mierzyłeś czas dostępu to wiedziałeś, który cache został zaladowany i mogłeś bajt odczytać pamięci, a potem po prostu bajt po bajcie całą pamięć, to był jeden z piękniejszych ataków kiedyś.
Mam takie pytanie co bardziej preferujecie prędkość zegara procesora czy ilość rdzeni bo mi się wydaje, że w przypadku jak jest w systemie duża ilość procesów to wtedy lepje wychodzi ilość rdzeni procesora, natomiast jak uruchomi jeden proces i w nim jeden wątek to będzie tylko jeden rdzeń wykonywał obliczenia.
Im większa częstotliwość tym więcej energii jest generowane, jest na to wzór, gdzie P = C * V**2 * f
czyli chip wytwarza tym więcej energii im większa pojemność, napięcie do kwadratu razy częstotliwość.
Więcej energii to więcej ciepła przy dużych częstotliwościach potrzebne jest chłodzenie wodne.
Wiadomo lepiej więcej rdzeni, ale też jak proces czeka na coś to wywołuje blokujące wywołanie, wtedy oddaje czas idle i idzie spać, kernel systemu rejestruje wakeup event gdy pojawi się informacja.
Np. czekasz na jakąś wiadomość i nie chcesz w pętli robić spin locka, który zużywa 100% procesora, chyba że zredukujesz to robiąc delay czasowy i sprawdza czy jest wiadomość.
Jak zrobisz select, to wtedy do kolei w kernelu doda się twoje oczekiwanie i jak kernel dostanie wiadomość to wybudzi twój proces, dlatego jest tak dużo nieużywanych rdzeni, większość czeka na coś, co jakiś czas odrysowuje czy inne rzeczy robi, też nie w czasie rzeczywistym, a ileś razy na sekundę.
Inna rzecz, to procesory mają phase locked loop, mogą nieużywanym rdzeniom zmniejszać częstotliwości pracy, czy je kompletnie wyłączać żeby zaoszczędzić energię.
Te nowe technologie procesorów energooszczędnych to już w ogóle nie wiem jak działają, bo mogą tam być jakieś mega inteligentne rozwiązania jak je zrobili, nie interesuje się tym aktualnie.