1、阻塞
阻塞操作是指在执行设备操作时,托不能获得资源,则挂起进程直到满足操作所需的条件后再进行操作。被挂起的进程进入休眠状态(不占用cpu资源),从调度器的运行队列转移到等待队列,直到条件满足。
2、非阻塞
非阻塞操作是指在进行设备操作是,若操作条件不满足并不会挂起,而是直接返回或重新查询(一直占用CPU资源)直到操作条件满足为止。
当用户空间的应用程序调用read(),write()等方法时,若设备的资源不能被获取,而用户又希望以阻塞的方式来访问设备,驱动程序应当在设备驱动层的对应 read(),write()操作中,将该进程阻塞直到资源可以获取为止;若用户是以非阻塞方式获取资源,当资源不能获取时设备驱动的read()、write()应当立即返回,用户空间的read()、write()也相应的立即返回。
阻塞从字面上听起来似乎意味着效率低,其实不是这样。如果以非阻塞方式,用户想获取某一资源只能不停地查询,这样会占用CPU大量资源。而阻塞访问,若不能获取资源就会进入休眠从而节省CPU资源给其他进程使用。
很显然阻塞的进程会进入到休眠状态,因此必须保证有一个地方能够唤醒休眠的进程。唤醒进程的地方一般都在中断里面,意味硬件资源的获得同时往往伴随着一个中断。