下面两个函数返回page指针: alloc_pages(gfp_mask,order); alloc_page(gfp_mask); 下面几个函数返回线性地址: __get...
下面两个函数返回page指针: alloc_pages(gfp_mask,order); alloc_page(gfp_mask); 下面几个函数返回线性地址: __get...
tasklet:调度一个tasklet,表明我们只是希望内核选择某个其后的时间来执行调度的函数。与定时器类 似,tasklet也会在“软件中断”上下文以原子模...
内核定时器可用来在未来的某个时间点(基于时钟滴答)调度执行的某个函数。 当定时器运行时,调度定时器的进程可能正在休眠或在其他处理器上执行,或干脆已经退出。 定时器运行在软中断...
异步通知:poll此类方法是采用轮询机制实现,有时不算一个好方法。而通过异步通知,应用程序可以在数据可用时收到一个信号,而不需要不停得使用轮询来关注数据。 异步通知的实现: ...
非堵塞型I/O:当数据不可用时,进程调用read或write系统调用时,进程不会堵塞,会立即返回,即使现在没有数据可读或者可写。 非堵塞型I/O分为 两种:显示和隐式的。 显...
堵塞型I/O:当数据不可用时,如果进程调用read或write系统调用时,此时会造成进程的堵塞,当数据传输完成后,再返回进程。 休眠的两个规则: 永远不要在原子上下文中休眠。...
首先32位linux内核(2.6.32)中线性地址(虚拟地址)分为两块: 3G~4G为内核地址空间 其余为进程地址 内核总共占据物理内存1G,分为3部分: DMA(0~15M...
对我们的块驱动程序的参数进行设置(磁头,柱面,扇区/柱面),通过对fosp中的getgeo成员进行赋值: static struct block_device_operati...
上一节给出了一个块驱动程序的框架。其中 static struct request_queue *simp_blkdev_queue; 这个结构很重要,我们将它的处理函数设置...
这个是对CU上OstrichFly的“写一个块设备驱动“文章的读书笔记。 首先建立一个”常规”的块驱动程序: 为设备申请一块连续的内存,作为磁盘: uns...
第17章 回收页框 页框回收算法 内存及磁盘高速缓存抓取了那么多的页框但从未释放任何页框。因此,迟早所有的空闲内存将被分配给进程和高速缓存。Linux内核的页框回收算法(pa...
第八章 内存管理 本章通过三部分内容描述内核给自己动态分配内存: 页框处理 ...
第二章 内存寻址 内存地址 内存地址分为三种:逻辑地址(logical address)(段+偏移量) 线性地址(linear ad...