Jestem zmieszany. Uruchamianie Fedory Linux lscpu
daje:
Architecture: i686
CPU op-mode(s): 32-bit, 64-bit
...
Ale kiedy próbuję zainstalować program 64-bitowy (Chrome), pojawia się błąd:
Pakiet /....x86_64.rpm ma niezgodną architekturę x86_64. Prawidłowe architektury to [„i686”, „i586”, „i486”, i386 ”]
Jestem mniej zainteresowany instalacją Chrome, a bardziej interesuje mnie, dlaczego lscpu
mój procesor może działać w trybie 64-bitowym; najwyraźniej nie może to oznaczać, że mogę uruchamiać programy 64-bitowe. Czy ktoś może to wyjaśnić?
cat /proc/cpu
, myślę, że przy rozruchu możesz wybrać, czy chcesz uruchomić w trybie 64 lub 32-bitowym/proc/cpuinfo
. Rodzi to jednak bardziej ciekawe pytania. Te*_lm
flagi wskazują oba moje procesory obsługują tryb długi, ale rozmiary adresowe są „36 bitów fizyczny” ..Odpowiedzi:
lscpu
informuje, że twoja architektura to i686 (32-bitowy procesor Intel) i że twój procesor obsługuje tryby pracy 32-bitowy i 64-bitowy. Nie będziesz w stanie zainstalować aplikacji zbudowanych na x64, ponieważ są one zbudowane specjalnie dla architektur x64.Twój konkretny procesor może obsłużyć pakiety wbudowane w i386 lub i686. Istnieje wiele sposobów weryfikacji preferencji dotyczących architektury i systemu operacyjnego.
lscpu
Jak już wiesz, możesz użyć polecenia lscpu. Działa dobrze, dając ogólne pojęcie o tym, do czego zdolny jest procesor.
/ proc / cpuinfo
W rzeczywistości są to dane dostarczane przez jądro, które większość narzędzi, takich jak
lscpu
wyświetlanie, używa. Uważam, że to wyjście jest trochę miłe, ponieważ pokazuje pewne informacje o numerze modelu dotyczące konkretnego procesora. Pokaże także sekcję dla każdego rdzenia, który może mieć procesor.Oto dane wyjściowe dla jednego rdzenia:
Oto jak wyglądają 3 pierwsze wiersze każdej sekcji rdzenia:
Dane wyjściowe
/proc/cpuinfo
mogą również wskazywać rodzaj architektury zapewnianej przez procesor poprzez różne flagi, które pokazuje. Zwróć uwagę na następujące wiersze powyższego polecenia:Flagi, które kończą się na,
_lm
informują, że twój procesor obsługuje „tryb długi”. Tryb długi to inna nazwa 64-bitowa.uname
Za pomocą tego polecenia można ustalić, jaką platformę zbudowano dla jądra. Na przykład:
64-bitowe jądro
Jądro 32-bitowe
Wyjście to może być wyrafinowany kawałek dalej za pomocą przełączników,
[-m|--machine]
,[-p|--processor]
, i[-i|--hardware-platform]
.Oto dane wyjściowe dla tych samych powyższych systemów.
64-bitowy
32-bitowy
UWAGA: Istnieje również wersja short-form
uname -m
, które można uruchomić za pomocą polecenia samodzielnej,arch
. Zwraca dokładnie to samo, couname -m
. Możesz przeczytać więcej oarch
poleceniu w dokumentacji coreutils .fragment
hwinfo
Prawdopodobnie musi to być najlepsze narzędzie do analizy twojego sprzętu
hwinfo
. Ten pakiet może pokazać prawie wszystko, co chcesz / musisz wiedzieć o dowolnym sprzęcie, bezpośrednio z terminala. Oszczędź mi dziesiątki razy, gdy potrzebuję trochę informacji z układu na płycie głównej systemu lub potrzebuję znać wersję płyty w gnieździe PCI.Możesz wysłać zapytanie do różnych podsystemów komputera. W naszym przypadku przyjrzymy się
cpu
podsystemowi.Ponownie, podobne do
/proc/cpuinfo
tego polecenia pokazuje skład każdego pojedynczego rdzenia w systemie wielordzeniowym. Oto pierwsza linia z każdej sekcji rdzenia, aby dać ci pomysł.getconf
Jest to prawdopodobnie najbardziej oczywisty sposób, aby powiedzieć, jaką architekturę procesor prezentuje systemowi operacyjnemu. Korzystając z
getconf
zapytania o zmienną systemową LONG_BIT. To nie jest zmienna środowiskowa.lshw
Jeszcze jedno narzędzie, podobne pod względem możliwości do
hwinfo
. Możesz zapytać o wszystko, co chcesz wiedzieć o sprzęcie bazowym. Na przykład:Tryby pracy procesora?
Kilka poleceń informuje, że coś, co wygląda na 32-bitowy procesor, obsługuje tryby 32-bitowe i 64-bitowe. Może to być trochę mylące i mylące, ale jeśli zrozumiesz historię procesorów, a konkretnie Intel, będziesz wiedział, że mają historię grania w gry z ich produktami, w których procesor może mieć zestaw instrukcji, który obsługuje 16-bitów, ale może zająć więcej pamięci RAM niż 2 ^ 16.
To samo dzieje się z tymi procesorami. Większość ludzi wie, że 32-bitowy procesor może obsłużyć tylko 2 ^ 32 = 4 GB pamięci RAM. Ale istnieją wersje procesorów, które mogą rozwiązać więcej. Te procesory często wykorzystują jądro Linuksa z sufiksem PAE - Physical Address Extension . Używanie jądra obsługującego PAE wraz z tym sprzętem pozwoli na adresowanie do 64 GB w systemie 32-bitowym.
Możesz pomyśleć, dlaczego potrzebuję architektury 64-bitowej? Problem z tymi procesorami polega na tym, że przestrzeń jednego procesu jest ograniczona do 2 ^ 32, więc jeśli masz duży program symulacyjny lub obliczeniowy, który potrzebował więcej niż 2 ^ 32 przestrzeni adresowalnej w pamięci RAM, to nie pomogłoby ci z tym.
Zobacz stronę wikipedii na mikroarchitekturze P6 (i686) .
TL; DR - Więc jaka jest architektura mojego procesora?
Zasadniczo może to być mylące, ponieważ w wielu powyższych poleceniach i metodach używa się luźno terminu „architektura”. Jeśli jesteś zainteresowany tym, czy podstawowy system operacyjny jest 32-bitowy czy 64-bitowy, użyj tych poleceń:
Jeśli natomiast chcesz poznać architekturę procesora, użyj tych poleceń:
W szczególności chcesz poszukać pól, w których jest napisane np. „Szerokość: 64” lub „szerokość: 32”, jeśli używasz takiego narzędzia
lshw
, lub poszukaj flag:lm
: Long Mode (x86-64: amd64, znany również jako Intel 64, czyli 64-bitowy)lahf_lm
: LAHF / SAHF w trybie długimPrezentacja tych 2 flag informuje, że procesor jest 64-bitowy. Ich nieobecność informuje, że jest to wersja 32-bitowa.
Zobacz te adresy URL, aby uzyskać dodatkowe informacje na temat flag procesora.
Bibliografia
strony podręcznika
artykuły:
źródło
lscpu
jest nieco mylące w tym, że „Architektura: i686” w rzeczywistości odnosi się do uruchamiania 32-bitowego systemu operacyjnego.Jeśli twoje jądro jest 32-bitowym jądrem Linux-a, nie będziesz mógł uruchamiać programów 64-bitowych, nawet jeśli twój procesor to obsługuje.
Zainstaluj 64-bitowe jądro (i oczywiście cały system operacyjny), aby uruchomić 64-bitowe
źródło
Dla kompletności: ponieważ na większości architektur 64-bitowych możliwe jest uruchomienie kodu 32-bitowego, zarówno w przestrzeni jądra, jak i przestrzeni użytkownika, nie należy zapominać, że w rzeczywistości istnieją 4 możliwe kombinacje:
uname
jest zwykłym sposobem określania wariantu jądra. W przestrzeni użytkownikafile
jest całkiem dobry w rozpoznawaniu plików wykonywalnych:file $SHELL
lubfile /sbin/init
są wygodnymi idiomami. Samo istnienie obu/lib/*.so
i/lib64/*.so
zwykle jest dobrym wskazaniem, że system obsługuje oba warianty przestrzeni użytkownika.źródło
Aby wiedzieć, czy zainstalowany system Ubuntu ma 32 lub 64 bity:
a) getconf LONG_BIT
b) uname -m
Jeśli pokazuje i686 lub i386, oznacza to 32 bity. Jeśli pokazuje x86_64, oznacza to 64 bity.
Jeśli procesor ma 32 bity, Ubuntu musi mieć 32 bity. Jeśli procesor ma 64 bity, może pracować z 64 lub 32 bitami. Możemy więc wybrać: Ubuntu może mieć 32 bity lub 64 bity.
Aby wiedzieć, czy procesor ma 32 lub 64 bity:
a) grep -w lm / proc / cpuinfo
Jeśli widzimy, że lm na czerwono ma 64 bity. W przeciwnym razie ma 32 bity.
b) sudo lshw | grep "opis: CPU" -A 12 | szerokość grep
Mówi jasno, co chcemy wiedzieć.
Polecenie dla obu informacji:
lscpu
Wystarczy spojrzeć na pierwsze 2 wiersze wyniku: „Architektura” informuje o zainstalowanej wersji systemu Linux: „i686 ″ reprezentuje jeden z 32 bitów, podczas gdy„ x86_64 ″ oznacza 64-bitowy. „Tryb (y) operacji na procesorze” informuje o procesorze. „32-bit” oznacza jeden z 32 bitów, podczas gdy „32-bit, 64-bit” lub „64-bit” oznacza 64-bitowy.
źródło