全部博文(14)
2012年(14)
分类: LINUX
2012-12-06 16:13:19
函数: fork_init()4种PID的位码表初始化
原形:
void __init fork_init(unsigned long mempages)
参数:
Mempages:一般为系统中实际存在的全部物理内存总页数
返回值:
无
函数注释:
void __init fork_init(unsigned long mempages)
{
#ifndef __HAVE_ARCH_TASK_STRUCT_ALLOCATOR //ia64中定义
#ifndef ARCH_MIN_TASKALIGN //arm中不定义
#define ARCH_MIN_TASKALIGN L1_CACHE_BYTES
//将task_struct结构存放的最小对齐方式设置为按处理器硬件cache line大小对齐
#endif
/* create a slab on which task_structs can be allocated */
task_struct_cachep =
kmem_cache_create("task_struct", sizeof(struct task_struct),
ARCH_MIN_TASKALIGN, SLAB_PANIC, NULL, NULL);
//为task_struct创建高速缓存内存
#endif
max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);
//linux允许最多用系统物理内存的1/8来存放task_t结构
if(max_threads < 20) //如果max_threads 小于20
max_threads = 20; //将max_threads设置为20
//系统至少支持20个进程
init_task.signal->rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
//将0号进程的task_t结构中的进程数资源限制的当前值设置为系统允许进程的一半
init_task.signal->rlim[RLIMIT_NPROC].rlim_max = max_threads/2;
//将0号进程的task_t结构中的进程数资源限制的最大值设置为系统允许进程的一半
}