快乐虾
http://blog.csdn.net/lights_joy/
lights@hb165.com
本文适用于
ADSP-BF561
uclinux-2008r1.5-RC3(移植到vdsp5)
Visual DSP++ 5.0(update 5)
欢迎转载,但请保留作者信息
在start_kernel函数中调用的第二个与进程管理相关的函数是fork_init:
fork_init(num_physpages);
在此调用中num_physpages实际表示了SDRAM中总共的页面数量,对于64M内存(实际限制为60M)其值为0x3bff。
fork_init函数的实现在kernel/fork.c中:
void __init fork_init(unsigned long mempages)
{
#ifndef __HAVE_ARCH_TASK_STRUCT_ALLOCATOR
#ifndef ARCH_MIN_TASKALIGN
#define ARCH_MIN_TASKALIGN L1_CACHE_BYTES
#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);
#endif
/*
* The default maximum number of threads is set to a safe
* value: the thread structures can take up at most half
* of memory.
*/
max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);
/*
* we need to allow at least 20 threads to boot a system
*/
if(max_threads < 20)
max_threads = 20;
init_task.signal->rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
init_task.signal->rlim[RLIMIT_NPROC].rlim_max = max_threads/2;
init_task.signal->rlim[RLIMIT_SIGPENDING] =
init_task.signal->rlim[RLIMIT_NPROC];
}
在此函数中,首先创建了一个用于分配task_struct的缓冲区,这样就可以用SLAB算法快速分配task_struct这个结构体的对象了。
max_threads是在fork.c中定义的一个全局变量
int max_threads; /* tunable limit on nr_threads */
此外还有
/*
* Size of kernel stack for each process. This must be a power of 2...
*/
#define THREAD_SIZE 8192 /* 2 pages */
因而对于64M内存,max_threads将限制为0x3bf,即959。
分享到:
相关推荐
cdt_fork_caster.prt
pcf_FORK_CHECK_GITLAB-源码.rar
前端大厂最新面试题-fork_clone_branch.docx
FORK_轨道角动量_轨道角动量_光束_光的轨道角动量_叉型图.zip
FORK_轨道角动量_轨道角动量_光束_光的轨道角动量_叉型图_源码.zip
动态依赖注入框架_HK2_hk2-fork_下载.zip
fork函数示例
linux内核 do_fork 函数源代码浅析。 经典讲解!
自己写的 多进程 访问数据库的demo,适用于mysql数据库
vfork函数示例
一个稳定、优化、支持良好的 1.17 Paper fork。 特征 Tuinity 和 Paper 的漏斗速度提高 30% 根据实体与玩家的距离减少实体行为,从而提高实体性能。 通过删除无用的分配来减少 GC 时间和频率,这也提高了 CPU 性能...
:star-struck: ” :fork_and_knife: 项目简介菜单和美食推荐平台(ref送货种族,芒果盘) :fork_and_knife: 项目目的一个用于练习和检查JavaFX,Oracle DataBase(数据建模,PL / SQL,JDBC)的项目,而不是用于...
用线程所写的TCP服务器,功能完善,有图有真相
Python安装包,亲测可用。使用pip install 文件名.whl安装使用
linux 进程 线程 fork 的深入思考 一道面试题的思考
spotifork:fork_and_knife:创建一个Spotify播放列表注意:自从我开始该项目以来,Spotify的API发生了变化(其中一个,现在请参阅URI中的区别)。 但是,我已经实现了一个快速修复程序,以使Spotifork再次工作。...
Java团队项目 fork_team_proj //这是我必须检查的,不要推送
babylonjs_agv_seer_fork_oa.pngbabylonjs_agv_seer_fork_oa.pngbabylonjs_agv_seer_fork_oa.png
main_memory_start += rd_init(main_memory_start, RAMDISK*1024); #endif mem_init(main_memory_start,memory_end); trap_init(); blk_dev_init(); chr_dev_init(); tty_init(); time_init(); sched_init()...