最近,我的 Gmail 上出现一条小消息,通知我我的 google chrome 版本不再兼容。所以我尝试更新我的 chrome(我有一段时间没有关心我的 chrome 版本,我的版本是 45.0.2454.99)。
所以我按照 chrome 本身给出的说明进行操作,并google-chrome-stable_current_amd64.deb为我的 Debian下载了它。
当我尝试使用以下方法安装它时:
dpkg -i google-chrome-stable_current_amd64.deb
Run Code Online (Sandbox Code Playgroud)
它给我带来了一个错误:
dpkg: error processing archive google-chrome-stable_current_amd64.deb
(--install): package architecture (amd64) does not match system
(i386)
Run Code Online (Sandbox Code Playgroud)
直到今天我怀疑我的电脑是 64 位的,所以我跑了 uname -a
Linux MyComp 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u4 (2015-09-19) x86_64 GNU/Linux
“free”命令显示我的 SO 知道有 8gigs 的内存:
total used free shared buffers cached
Mem: 8071684 5521740 2549944 325624 360696 1918748
Run Code Online (Sandbox Code Playgroud)
添加编辑:仍然dpkg --print-architecture 产生i386
我的操作系统怎么了?是不是 x64?为什么我的 chrome 无法升级?
我知道 chrome 停止了 …
输出uname:
root@debian:~ # uname -a
Linux 5asnb 2.6.32-5-amd64 #1 SMP Mon Jun 13 05:49:32 UTC 2011 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
但是,/sbin/init可执行文件显示为 32 位:
root@debian:~ # file /sbin/init
/sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
Run Code Online (Sandbox Code Playgroud)
该系统的其他方面似乎也有矛盾:
root@debian:~ # echo $HOSTTYPE
i486
root@debian:~ # getconf LONG_BIT
32
Run Code Online (Sandbox Code Playgroud) 长话短说,我将 Ubuntu 12.04 64 位服务器设置为 VirtualBox (4.1.18) 的虚拟机。我将访客机从 AMD 芯片组(游戏机)迁移到 Intel Xeon(支持双处理器的服务器硬件),认为不会有任何问题。在服务器上设置好来宾机器后,我启动了来宾机器,却发现它挂在“正在加载初始 Ramdisk”处。
我安装了 Ubuntu 12.04 64 位设置 ISO 以查看是否可以查看任何日志,但在尝试从 ISO 启动时得到“内核需要 x86-64 CPU,但仅检测到 i686 CPU”。请记住,源计算机和目标计算机上的主机操作系统也是 Ubuntu 12.04 Server 64 位。这让我研究了来宾操作系统如何查看虚拟机中的 CPU 信息。我发现 CPU 信息在主机上与在源计算机上的来宾上看起来完全相同。
源 CPU 信息:
Processor - AMD Phenom™ II X4
Model - 925
OPN Tray - HDX925WFK4DGI
OPN PIB - HDX925WFGIBOX
Operating Mode 32 Bit - Yes
Operating Mode 64 Bit - Yes
Revision - C2
Base Speed (MHz) - 2800
Boost Speed (MHz)
Voltages - …Run Code Online (Sandbox Code Playgroud) 我收到一系列与此类似的错误
file /usr/share/doc/glibc/NEWS from install of glibc-2.25-10.fc26.i686 conflicts with file from package glibc-2.25-7.fc26.x86_64
Run Code Online (Sandbox Code Playgroud)
当我尝试时dnf update,当我做dnf install任何事情时都会出现 Python 异常。这些是同时出现的新错误,可能与我昨天在 a 中遇到的电源故障有关dnf update,尽管历史日志似乎表明它在断电之前已经完成,但有一些错误。
当前的完整错误dnf update:
Error: Transaction check error:
file /usr/share/doc/glibc/NEWS from install of glibc-2.25-10.fc26.i686 conflicts with file from package glibc-2.25-7.fc26.x86_64
file /usr/share/man/man1/xmlwf.1.gz from install of expat-2.2.4-1.fc26.i686 conflicts with file from package expat-2.2.1-1.fc26.x86_64
file /usr/share/doc/sqlite-libs/README.md from install of sqlite-libs-3.20.1-1.fc26.i686 conflicts with file from package sqlite-libs-3.19.3-1.fc26.x86_64
file /usr/share/doc/gdk-pixbuf2/NEWS from install of gdk-pixbuf2-2.36.9-1.fc26.i686 conflicts …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习操作系统概念。这是两个简单的Python代码:
while True:
pass
Run Code Online (Sandbox Code Playgroud)
和这个:
from time import sleep
while True:
sleep(0.00000001)
Run Code Online (Sandbox Code Playgroud)
问题:为什么运行第一个代码时 CPU 使用率为 100%,但运行第二个代码时 CPU 使用率约为 1% 到 2%?我知道这可能听起来很愚蠢,但为什么我们不能实施类似的事情sleep在不使用睡眠系统调用的情况下实现用户空间模式之类的东西?
注意:我试图理解Linux 内核的睡眠系统调用,但说实话我不明白那里发生了什么。我还搜索了 NOP 汇编代码,结果发现它并不是真的什么都不做做,而是做了一些无用的事情(比如 xchg eax、eax),也许这就是 100% CPU 使用率的原因。但我不确定。
究竟有哪些睡眠系统调用的汇编代码是我们无法在用户空间模式下执行的?是不是类似 HLT 的东西
我还尝试HLT在代码中使用汇编,如下所示:
section .text
global _start
_start:
hlt
halter:
jmp _start
section .data
msg db 'Hello world',0xa
len equ $ - msg
Run Code Online (Sandbox Code Playgroud)
但运行此代码后,我看到内核一般保护错误如下:
[15499.991751] traps: hello[22512] general protection fault ip:401000 sp:7ffda4e83980 error:0 in hello[401000+1000]
Run Code Online (Sandbox Code Playgroud)
不知道是不是和保护环有关,或者是我的代码错误?这里的另一个问题是操作系统是否在系统HLT调用下使用或其他受保护的汇编命令 …
我正在检查我的 C 程序的预处理输出,碰巧查看了头文件 wordsize.h
它位于
/usr/include/i386-linux-gnu/bits/wordsize.h
该文件只包含一个宏
#define __WORDSIZE 32
Run Code Online (Sandbox Code Playgroud)
我的问题是,字长是由安装的编译器决定的,还是与我安装的操作系统(32 位或 64 位)有关,还是与我的硬件配置有关?机器。
我是 Linux 下的开发新手。
因此,当我运行 Raspbian(基本上是带有 LXDE 的 ARM Debian 衍生产品)时,我可以使用 aptitude 安装任何普通软件包。但是,例如,如果我想下载一个 .deb 文件,我将不得不选择 32 位或 64 位并下载它,然后尝试在 Raspbian 上运行它(它不起作用)。
为什么从官方存储库安装软件包可以在 ARM 系统上运行?为什么不是不兼容?
我也对硬件和软件位之间的区别有些困惑。ARM 是硬件,对吧?
我想知道二进制文件是否使用(编译用于)特殊指令集,如 SSE 4.1/4.2、AVX、F16C。如何确定包中的二进制文件是否使用某些指令集?
我知道我可以configure在手动编译软件包时使用开关启用此类指令,但是当使用来自 Debian 存储库的预编译软件包时,必须有一个默认值。
可能二进制文件没有用太具体的指令集编译,因为它们不能在任何系统上使用,或者,根据二进制文件,它们是用替代子程序编译的,这些子程序用基本指令“模拟”处理,以支持缺乏此类功能的 CPU。
我知道我可以查看rulesDebian 源包的文件,但我很感兴趣,如果有更简单的方法可以做到这一点。
man uname
-m, --machine print the machine hardware name
-i, --hardware-platform print the hardware platform or "unknown"
Run Code Online (Sandbox Code Playgroud)
这里的硬件平台到底是什么意思?它与“机器硬件名称”有何不同?我在SE上发现了一些相关问题,但接受的答案似乎存在一些矛盾。我在哪里可以找到有关此术语的准确信息?
我有一个将用于 ARM 处理器的文件系统映像,但我想先在上面安装一些东西,比如桌面等。所以我想在我的 Linux 机器上安装文件系统,然后从那里 chroot 到它,并从该系统在其上安装东西。这是可能的,还是 i386 和 ARM 软件之间的差异会阻止我?
如果可能,我该怎么做?只是尝试 chroot [pathtorootfs] 会给出一个关于无法找到 bash 的错误。
cpu-architecture ×10
64bit ×3
debian ×2
32bit ×1
architecture ×1
arm ×1
c ×1
chroot ×1
dnf ×1
fedora ×1
kernel ×1
linux ×1
linux-kernel ×1
osx ×1
programming ×1
sleep ×1
system-calls ×1
ubuntu ×1
x86 ×1