
1.站在进程角度——内核只属于自己,整个执行流贯穿用户进程代码到内核代码。或者换句话说,可以把内核看成用户进程的一个动态链接库,内核代码仅仅是进程的一部分代码。
2.站在内核角度看——内核属于所有进程,所有进程共用内核代码。在执行流层面,内核中的同一函数(比如一个驱动的ioctl)被多个进程并发执行。在数据流层面,所有在同一函数的并发执行流他们的数据流都是独立的(无全局变量,都是栈上的局部变量)。
3.那内核(比如:驱动程序)中的全局变量会有什么后果?——那就会出现多个执行流并发访问的情况,需要加锁保护。那么,换个角度,是不是可以在驱动程序中定义全局变量来实现进程间通信?上个代码看看:
驱动代码:
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- static const char devname[] = "ldengdev";
- static int major = 0;
- static struct class* devclass =