linux内存池
内存池(memory pool) 是linux2.6的一个新的特性。基本上将,一个内存池允许一个内核成分,如块设备子系统,仅在内存不足的紧急情况下分配一些动态内存来使用。
内存池是动态内存的储备,只能被特定的内核成分(即池的“拥有者”)使用。拥有者通常不使用储备;但是,如果动态内存变得极其稀有以至于所有普通内
存分配请求都将失败的话,那么作为最后的解决手段,内核成分就能调用特定的内存池函数提取储备得到的所需的额内存。因此,创建一个内存池就像手头放些灌装
食物作为储备,当没有新鲜食物时就使用开罐器。
一个内存池常常叠加在slab分配器之上————也就是说,它被用来保存sla对象的储备。但是一般而言,内存池能被用来分配任何一种类型的动态内存,从整个页框到使用kmalloc()分配的小内存区。因此,我们将一般内存池处理的内存单元看着“内存元素”、
内存池由:mempool_t对象描述,它的字段如下表:
类型 名称 说明
spinlock_t lock 用来保护对象字段的自旋锁
int min_nr 内存池中元素的最大个数
int curr_nr 当前内存池中元素的个数
void ** elements 指向一个数组的指针,该数组由指向保留元素的指针组成
void *
相关文档:
/* Offtimer.c.For auto halt. */
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#define DELAY 60/* Time of sleeping */
int main()
{
time_t now;
struct tm *p;
while(1)
{
now = time(NULL);
&n ......
IDT的初步初始化
在实模式时,idt被初始化并由bios例程使用。一旦linux接管,idt就被移到ram的另一个区域,并进行第二次初始化,因为linux没有利用任何bios例程。
IDT存放在idt_table表中,有256个表项。6字节的idt_descr变量指定了idt的大小和它的地址,只有当内核用lidt汇编指令初始化idtr寄存器时才用到这个变量。
在 ......
信号指定处理函数
void (*signal (int signum,void (*handle)(int)))(int);设置某个信号的处理方法
int sigaction(int signum,const struct sigaction *act,struct sigaction *oldact);用于检查或改变进程在接到信号时的动作
信号集操作函数
static inline void sigaddset(sigset_t *set,int _sig);
static inline voi ......
【recv/recvfrom/recvmsg系统调用】
功能描述:
从套接字上接收一个消息。对于recvfrom 和 recvmsg,可同时应用于面向连接的和无连接的套接字。recv一般只用在面向连接的套接字,几乎等同于recvfrom,只要将recvfrom的第五个参数设置NULL。
如果消息太大,无法完整存放在所提供的缓冲区,根据不同的套接字,多余 ......