# 设备
# 计算机结构
- 1945 年,冯·诺依曼(Von Neumann)在论文中提出了一种可以存储指令并执行的计算机结构,被称为冯·诺依曼结构,是目前最流行的计算机结构。
- 冯诺依曼结构在逻辑上分为五个部分:
- 运算器(Arithmetic Unit)
- :负责执行指令、进行运算。
- 核心部件是算术逻辑单元(Arithmetic Logic Unit ,ALU),能进行算术运算、逻辑运算、位运算等操作。
- 运算结果会保存到存储器中,或者暂存在累加器中。
- 控制器(Control Unit)
- :负责从存储器读取指令,进行译码分析(即编码的逆过程),然后调用相关部件执行该指令。
- 例如读取到一个跟运算相关的指令,就取出操作数,发送到运算器进行运算。
- 存储器(Memory Unit)
- :负责用于存储数据和指令。
- 主要分为内部存储器、外部存储器两种,简称为内存、外存。
- 输入设备
- :负责接收用户或其它设备输入的信息,转换成计算机能识别的数据,然后保存到存储器中。
- 例如鼠标、键盘。
- 输出设备
- :负责将计算机的数据转换成适当形式的信息,输出给用户或其它设备。
- 例如显示屏、打印机。
- 输入、输出设备统称为 IO 设备。
- 运算器(Arithmetic Unit)
# /dev
Linux 中,所有硬件设备,都以逻辑文件的形式,映射到 /dev 目录下。例如:
/dev/hd[a-d]
:IDE 接口的设备(主要是硬盘)。- IDE 接口是一种传统的并行接口,传输速度较慢,已被淘汰。
- 例如 /dev/hda 表示硬盘 a 。编号 a 说明它是系统启动后识别到的第一个这种类型的设备。
/dev/sd[a-p]
:SATA 接口的设备(主要是硬盘)、SCSI 接口的设备(主要是硬盘)、USB 接口的设备。/dev/vd[a-]
:虚拟磁盘。/dev/fd[0-1]
:软盘。/dev/cdrom
:光驱。/dev/mouse
:鼠标。/dev/lp[0-15]
:打印机。
# 块、字符设备
按读写单位的不同,将设备分类:
- 块设备(block deivce)
- :读写时以 block 为单位。例如磁盘。
- 读写块设备时,默认会经过操作系统的 Cache 缓冲、缓存。
- 如果不经过操作系统的 Cache ,则称为裸设备(raw device),IO 性能更高。
- 字符设备(character device)
- :读写时以 char 为单位。例如键盘、终端。
# 终端设备
- Linux 中,与终端交互时,都是通过读写 /dev 目录下的串口设备文件。
- 它们可能是真实存在的硬件设备,也可能是虚拟设备。
主要分类:
- 控制台设备(console device)
- :文件名为
/dev/console
,用于接收系统内核的一些输出信息,只有 root 用户能读写。
- :文件名为
- 虚拟控制台(virtual console)
- :文件名的正则表达式为
/dev/tty\d*
。 /dev/tty
指向当前 shell 使用的终端,比如 /dev/tty1、/dev/pts/0 。/dev/tty0
指向当前 shell 使用的虚拟控制台,只有 root 用户能读写。
- :文件名的正则表达式为
- 伪终端(pseudo terminals ,ptys)
- :用于模拟终端操作的进程。比如在桌面上打开的终端、通过 SSH 登录的终端。
- 文件名的正则表达式为
/dev/pts/\d+
。 - 例:假设 SSH 登录时,执行 w 命令,查询到当前终端为 pts/0 。然后执行以下命令:
[root@CentOS ~]# echo Hello > /dev/stdout # 将输出重定向到 stdout ,这会输出到当前终端 Hello [root@CentOS ~]# echo Hello > /dev/tty # 将输出重定向到当前终端 Hello [root@CentOS ~]# echo Hello > /dev/tty1 [root@CentOS ~]# echo Hello > /dev/pts/0 Hello [root@CentOS ~]# echo Hello > /dev/pts/6 # 该伪终端不存在,因此不允许重定向 -bash: /dev/pts/6: Permission denied
- 通过 SSH 登录时,用户输入的 stdin 数据会先被通过 sshd 服务传给远程主机上的 shell 进程,再写入 /dev/tty 文件,最后被系统内核读取、处理。
- 串行端口终端(serial ports terminal)
- :表示通过计算机串行端口连接的终端设备。
- 文件名的正则表达式为
/dev/ttyS\d+
。 - 例如,执行命令
echo "Hello World" > /dev/ttyS1
,就是将数据发送到 S1 端口,相当于 DOS 系统的 COM1 。
# 相关命令
# lscpu
lscpu # 显示 CPU 的信息
# lsmem
lsmem # 显示内存的信息
# lsblk
lsblk # 显示系统所有的块设备
-p # 显示每个设备的完整路径
-f # 显示每个块设备的文件系统、UUID(通用唯一识别码)
- 例:
[root@CentOS ~]# lsblk -p NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT /dev/sr0 11:0 1 3.5M 0 rom /dev/vda 253:0 0 50G 0 disk └─/dev/vda1 253:1 0 50G 0 part /
- /dev/sr0 是 rom ,/dev/vda 是磁盘设备,/dev/vda1 是一个磁盘分区,挂载在/。
- MAJ:MIN :主设备号和次设备号。
- RM :是否为可卸载设备。
- RO :是否为只读设备。
- TYPE :分为磁盘(disk)、分区(partition)、只读存储器(rom)三种。
- MOUTPOINT :挂载点。
# lshw
lshw # 显示所有硬件设备的详细信息
-short # 只显示简洁的设备列表
-class cpu # 只显示 cpu 类的信息(同理可显示其它类设备)
-json # 显示成 json 格式
- 安装:
yum install lshw
- 需要用 root 权限执行。