[Uwaga: ta odpowiedź ma konkretnie na celu odniesienie się do ostatniej edycji i nie stanowi innego uzupełnienia kilku już opublikowanych odpowiedzi dźwiękowych.]
Tak więc, powtarzając: mikrokod (przynajmniej do pierwszego przybliżenia) jest specyficznym rodzajem oprogramowania układowego.
„Mikrokod” w tym kontekście jest po prostu marketingiem nad „oprogramowaniem procesora”.
Cóż, to nie marketing. Marketing nazwałby to XBoost Pro ™ . Jest to raczej termin inżynierski; jeśli projektujesz procesory, ważne jest dla ciebie rozróżnienie między mikrokodem a innym oprogramowaniem układowym procesora (i rodzajem oprogramowania typowym dla innych urządzeń). Jeśli nie, prawdopodobnie nie jest.
Jeśli projektujesz płyty główne lub piszesz systemy operacyjne, prawdopodobnie używasz „aktualizacji mikrokodu” jako skrótu dla bardziej nieporęcznej i mniej znanej „aktualizacji oprogramowania procesora”. Większość aktualizacji oprogramowania układowego procesora wpływa przede wszystkim na mikrokod, więc jest wystarczająco blisko tego samego. Prawdopodobnie znasz różnicę, ale nie musisz się tym przejmować .
Użytkownik końcowy nie musi wiedzieć ani dbać o różnicę, aw idealnym świecie nigdy nie usłyszałby słowa „mikrokod”.
Domyślam się, że zwrócił na ciebie uwagę w prasie na temat ostatnich luk w zabezpieczeniach dotyczących spekulacyjnego wykonywania, choć mogłeś również słyszeć to wcześniej w kontekście, który sprawił, że stało się bardziej oczywiste, że nie musisz się tym przejmować. Luki te zostały wydane wcześniej niż planowano, co mogło spowodować, że relacje prasowe będą mniej wyleczone, niż mogłoby być inaczej. Z punktu widzenia użytkownika końcowego należy zainstalować aktualizacje systemu BIOS, aktualizacje systemu operacyjnego, aw niektórych przypadkach aktualizacje aplikacji; nie musisz wiedzieć ani się tym przejmować, jeśli którykolwiek z nich zawiera nowy mikrokod.
Tak więc, nawet zdając sobie sprawę, że prawdopodobnie nie musisz wiedzieć ani się tym przejmować, nadal możesz być zainteresowany czystą ciekawością: jak możesz rozróżnić mikrokod od innego oprogramowania?
Cóż, pierwszą rzeczą, którą należy rozpoznać, jest to, że niekoniecznie istnieje jedna twarda i szybka definicja, jest to raczej sytuacja Bleggsa i Rubesa . Mimo to możemy powiedzieć o mikrokodzie:
Mikrokod zwykle działa wewnątrz procesora, a nie na procesorze. To widok wysokiego poziomu.
Architektura mikrokodu zazwyczaj wygląda zupełnie inaczej niż architektura zwykłego kodu, w tym zwykłego oprogramowania układowego. Prawdopodobnie będzie wysoce równoległy i zostanie wdrożony znacznie bliżej sprzętu. Kilka istniejących odpowiedzi (w tym twoja własna) omawia to, chociaż należy zauważyć, że szczegóły mogą się różnić w zależności od konstrukcji procesora.
Chociaż sprzęt jest często zaprojektowany do uruchamiania wyłącznie oprogramowania wewnętrznego dostarczonego przez producenta, nie jest to szczególnie rzadkie w przypadku korzystania z oprogramowania firm trzecich - chociaż prawdopodobnie spowoduje to unieważnienie gwarancji! Mikrokod innej firmy jest o wiele rzadszy, chociaż uważam, że w czasach starożytnych (mówię o tym, że procesor był mniej więcej wielkości chleba) niektórzy użytkownicy końcowi modyfikowali mikrokod w swoich procesorach. O ile mi wiadomo, nie jest to możliwe w przypadku procesorów używanych w komputerach PC.
Mikrokod zazwyczaj tłumaczy lub pomaga wdrożyć architekturę publicznego zestawu instrukcji, tj. Uruchamia kod maszynowy używany przez projektanta systemu operacyjnego i programistów aplikacji. Więcej na ten temat w następnej sekcji.
„Wykonanie a dane” wiele paradygmatów używa tego paradygmatu
Obawiam się w myląco różne sposoby, ale odniosę się do własnego komentarza. Ta sekcja służy również do rozwinięcia ostatniego punktu wypunktowania powyżej. Celem jest tutaj próba rozróżnienia zadania wykonywanego przez procesor (osiągniętego przez połączenie sprzętu i mikrokodu) od zadania wykonywanego przez typowe urządzenie (osiągniętego przez połączenie sprzętu i oprogramowania układowego). Mam zamiar wybrać dysk twardy SATA.
Dysk SATA postępuje zgodnie z instrukcjami z komputera, które są w stylu „odczytaj dane z sektora 5123” i „zapisz te dane do sektora 1 321”. Oprogramowanie układowe napędu jest odpowiedzialne za spowodowanie tego przez sprzęt i zazwyczaj jest to dość zwyczajny kod działający na jakimś wbudowanym procesorze. Instrukcje napędu przychodzą sekwencyjnie, chociaż mogą nie być przetwarzane w kolejności, w której przybywają. Te instrukcje nie są programem, są wysyłane przez program działający na głównym procesorze. W szczególności nie ma przepływu kontroli, tzn. Nie ma instrukcji, aby powiedzieć napędowi SATA, które instrukcje należy uruchomić w następnej kolejności.
Procesor odpowiada za komputer. Po zakończeniu inicjalizacji uruchamia się instrukcje („kod maszynowy”) dostarczone przez płytę główną (BIOS, inny rodzaj oprogramowania układowego), które nakazują uruchomienie kodu maszynowego dostarczonego przez system operacyjny, który nakazuje uruchomienie dostarczonego kodu maszynowego przez dostawców aplikacji. Sam procesor pobiera kod maszynowy z pamięci EEPROM (w przypadku BIOS-u) lub pamięci RAM (w przypadku systemu operacyjnego i aplikacji). W szczególności kod maszynowy ma kontrolę: kod maszynowy informuje CPU, jaki kod maszynowy ma wykonać w następnej kolejności. Możesz kilkakrotnie zapętlać ten sam kod maszynowy, możesz uruchamiać różne fragmenty kodu w zależności od danych, nad którymi pracuje kod - instrukcje w języku interfejsu urządzenia, takim jak kod SATA, mogą wykonywać ograniczony zestaw prostych zadań, ale kod maszynowy może zrobićcokolwiek . (Zobacz także Kompletność Turinga ).
Możemy przepisać ten ostatni punkt powyżej, ponieważ: mikrokod zazwyczaj implementuje język Turing Complete; zwykłe oprogramowanie układowe zwykle nie.
Co to znaczy „instrukcje sprzętowe są interpretowane” za pomocą mikrokodu.
Prawda, ale prawdopodobnie myląca; ważną kwestią jest rozróżnienie między kodem maszynowym, który ma kontrolę i Turing Complete, a instrukcjami zdefiniowanymi przez interfejs urządzenia, taki jak SATA, który nie ma i nie jest.
Czy „mikrokod” ma zastosowanie do kodu działającego na kartach dźwiękowych
Nie, karty dźwiękowe otrzymują instrukcje, a nie kod, podobnie jak dyski SATA. Instrukcje mogą wyglądać jak „zagraj ostro” lub „zinterpretuj te dane jako kształt fali i odtwórz”. Wciąż bardzo proste.
i karty graficzne (GPU)?
Staromodne karty graficzne (te bez GPU) są takie same jak dyski SATA. Instrukcje są jak „ustaw ten piksel na ten kolor” lub „napisz A w tej pozycji”.
... Procesory graficzne są skomplikowane i znajdują się gdzieś pomiędzy dwoma światami, które próbowałem opisać powyżej. Prawdopodobnie najłatwiej jest myśleć o nich jako o wyspecjalizowanym komputerze umieszczonym wewnątrz komputera głównego, który ma własne procesory. To prawda, że urządzenia takie jak dyski SATA mają również wbudowane procesory, ale różnica polega na tym, że wbudowany procesor w napędzie SATA uruchamia tylko kod dostarczony przez producenta napędu, podczas gdy procesory graficzne również obsługują kod dostarczony przez system operacyjny i / lub dostawcę aplikacji. To naprawdę osobne pytanie.
TL; DR: mikrokod to specyficzny rodzaj oprogramowania układowego, który pomaga sprzętowi wdrożyć zestaw instrukcji Turing Complete.