一、引言
- 理解设备和文件的关系
- 理解系统调用和系统API等关系
- 掌握系统调用的工作过程
- 掌握系统调用open/read/write/fcntl等使用
二、Linux中的设备管理
1、设备无关性
为了提高操作系统的可适应性和可扩展性,目前几乎所有的操作系统都实现了设备的独立性
概念:Linux采用文件系统管理硬件设备,所有的设备都看成是特殊的文件(目录、套接字也可以是文件),从而将硬件设备的特性及管理细节对用户隐藏起来,实现设备无关性。
如何理解Linux采用文件系统管理硬件设备?
硬件设备是指显示器、鼠标、键盘等,而这些硬件设备在Linux中是以文件系统存在
2、设备管理的特点
- 每个设备都对应文件系统中的一个索引节点,都有一个文件名。对设备的使用类似于对文件的存取。
- 应用程序通常可以通过系统调用open()打开设备文件,建立起与目标设备的连接。
- 设备驱动程序都是系统内核的一部分,它们必须为系统内核或者它们的子系统提供一个标准的接口,他们使用一些标准的内核服务,如内存分配等。
3、设备分类
- 按设备信息交换单位来分:字符设备、块设备。
- 按设备属主关系:系统设备、用户设备。
- 按设备共享属性来分:独享设备、共享设备(打印机,U盘)。
4、Linux设备操作
设备或文件操作的两种方式:用户编程接口 API、系统调用。如下图
三、系统调用
系统调用是操作系统提供给用户的一组“特殊”接口。用户态主动要求切换到内核态,从而使用内核提供的各项服务,运行后将结果返回给应用程序(内核态–>用户态)。比如,Linux创建进程时中用户态的fork()
会调用到内核态的sys_fork()
和do_fork()
等。