10 2019 档案
摘要:7.1 阻塞与非阻塞 IO 阻塞操作是指在执行设备操作的时候,若不能获取资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足。 非阻塞操作的进程在不能进行设备操作时,并不挂起,要么放弃,要么不停的查询,直到可以进行操作为止。 驱动
阅读全文
摘要:6.4 信号量 信号量(semaphore)是操作系统中最典型的用于同步和互斥的手段,信号量的值可以是 0,1 或者 n。信号量与操作系统的经典概念 PV 操作对应。 P(S): 将信号量 S 的值减 1,即 S = S - 1 如果 S >= 0,则该进程继续执行,否则该进程置为等待状态,排入等待
阅读全文
摘要:在 Linux 设备驱动中必须要解决的一个问题是多个进程对共享资源的访问,并发的访问会导致竞态。 6.1 并发与竞态 并发(Concurrency)指的是多个执行单元同时、并行的执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(Race Conditi
阅读全文
摘要:5.1 Linux 字符设备驱动结构 5.1.1 cdev 结构体 在 Linux 内核中,使用 cdev 结构体描述一个字符设备。 使用宏可以从 dev_t 中获取主设备号和次设备号,同时也可以通过主设备号和次设备号生成 dev_t cdev 的初始化: cdev_alloc: cdev_add:
阅读全文