人工智能操作系统的相关说明(机器人控制系统需使用实时操作系统)
704
2022-05-28
Linux 操作系统中,各种设备驱动(device driver)通过设备控制器(device controller)来管理各种设备(device),其关系如下图所示:
这些设备之中,
受同一个 device driver 管理的设备都有相同的 major number,这个数字可以看作设备的类别号码,被内核用于识别一类设备
受同一个 device driver 管理的同一类设备中的每一个设备都有不同的 minor number,这个数字可以看作设备编号,被设备驱动用来识别每个设备
这些设备之中,
受同一个 device driver 管理的设备都有相同的 major number,这个数字可以看作设备的类别号码,被内核用于识别一类设备
受同一个 device driver 管理的同一类设备中的每一个设备都有不同的 minor number,这个数字可以看作设备编号,被设备驱动用来识别每个设备
设备驱动主要有三大类:
面向包的网络设备驱动(package oriented network device driver)
面向块的存储设备驱动(block oriented storage device driver),提供缓冲式(buffered)的设备访问。
面向字节的字符设备驱动 (byte oriented char device driver),有时也称为裸设备(raw devices),提供非缓冲的直接的设备访问(unbuffered direct access),比如串口设备,摄像头,声音设备等。实际上,除了网络设备和存储设备以外的其它设备都是某种字符设备。
除此以外,还有一类设备,称为伪设备(pseudo device),它们是软件设备。Linux 上的 device 不一定要有硬件设备,比如 /dev/null, /dev/zero 等。
关于字符设备和块设备的更多区别:
块设备只能以块为单位接受输入和返回输出,而字符设备则以字节为单位。大多数设备是字符设备,因为它们不需要缓冲而且不以固定块大小进行操作。
块设备对于I/O 请求有对应的缓冲区,因此它们可以选择以什么顺序进行响应,字符设备无须缓冲且被直接读写。对于存储设备而言调 读写的顺序作用巨大,因为在读写连续的扇区比分离的扇区更快。
字符设备只能被顺序读写,而块设备可以随机访问。虽然块设备可随机访问,但是对于磁盘这类机械设备而言,顺序地组织块设备的访问可以提高性能。
用户空间的各种应用是通过 device driver 来操作设备的:
从这个图上可以看出:
网络设备驱动之上,分别有包调度器(packet scheduler),网络协议层(network protocols),NetFilter (防火墙)和 scoket 层,其中,网络设备驱动以 socket 作为应用层的接口
块设备驱动之上,分别有 I/O Scheduler,通用块层(generic block layer)和文件系统,其中,块设备驱动以设备文件 (device file)作为应用层的接访问口
字符设备驱动之上,分别有 Line discipline 和 terminals,其中,terminals 作为和应用的访问接口
应用程序通过访问这些设备文件像操作文件一样来访问这些设备,可以使用的接口包括:
int open(const char *path, int oflag, ... )
int close(int fd);
ssize_t write(int fd, const void *buf, size_t nbyte)
ssize_t read(int fd, void *buf, size_t nbyte)
int ioctl(int d, int request, ...)
在 Linux 系统上,设备驱动可以被动态加载和删除
lsmod - 列出当前已经被加载的模块
insmod
modprobe
rmmod
Linux 存储
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。