C Unix-使用不同的驱动程序树? 背景:

C Unix-使用不同的驱动程序树? 背景:,c,linux,unix,tree,drivers,C,Linux,Unix,Tree,Drivers,我的问题有一个很强的假设:没有用户可以列出驱动程序树 我在看书 如果创建了一个新的操作系统,并且没有用户可以列出驱动程序树,那么是否需要这样一个复杂的驱动程序树呢 我的感觉是:不,只要内核能够很快找到一个驱动程序 然后我们可以将自己限制在一个结构数组中,如下所示: struct descript_driver { /* the usual struct with the functions * pointers(.open = blah, .mmap = blah and

我的问题有一个很强的假设:没有用户可以列出驱动程序树

我在看书

如果创建了一个新的操作系统,并且没有用户可以列出驱动程序树,那么是否需要这样一个复杂的驱动程序树呢

我的感觉是:不,只要内核能够很快找到一个驱动程序

然后我们可以将自己限制在一个结构数组中,如下所示:

struct descript_driver {

    /* the usual struct with the functions 
     * pointers(.open = blah, .mmap = blah and so on). 
     */
    struct actions act;

    char * driver_name;
    char * vendor_name;  

    int vendorid; 
    int class_type; // GRAPHIC, NETWORK, CAMERA (#define or enum)...
    int major_id;
    int minor_id;
};

/* 256 is just an example. It could be more, or less. 
 * There are up to 256 majors but potentially a lot of minors. 
 * And each one has its index.
 * Addressing is O(1).
 */
struct descript_driver array_of_drivers[256];
让驱动程序/内核记住它的索引,只在数组中流动

中断仍然是主要的数字。 多亏了这个小数字,仍然很容易找到合适的函数来调用O(1)

我的想法有问题吗?这是完善我的项目的一个重要方面


多亏了

许多物理设备布局都是在树上布置的。例如,连接到USB集线器的USB驱动器。连接到PCIe交换机的PCIe视频卡。是的,在我的案例中,它们将通过各自的类使用正确的集线器。它们也会被布置好。但他们很快就能解决问题。我可能在你的评论中漏掉了一些东西,我对此表示歉意。我的意思是内核的设备布局通常反映了设备的物理布局。我们总是可以通过对象的指针(不比索引大多少)访问对象,并且我们通常希望能够非常快速地访问设备的子设备和父设备。这是一棵树。为什么我们需要设备的子设备和父设备?最后,它增加了智能和计算;我不知道为什么需要它。一个简单的索引就可以做到这一点。代码已经很智能了,内核应该只是执行。而当前的O(1)由于缓存未命中而变慢。