微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

reactos操作系统实现(34)

现在就来分析第一阶段的进程管理器初始化函数PspInitPhase0,如下:

#001 BOOLEAN

#002 NTAPI

#003 PspInitPhase0(IN PLOADER_ParaMETER_BLOCK LoaderBlock)

#004 {

#005 NTSTATUS Status;

#006 OBJECT_ATTRIBUTES ObjectAttributes;

#007 HANDLE SysThreadHandle;

#008 PETHREAD SysThread;

#009 MM_SYstemSIZE SystemSize;

#010 UNICODE_STRING Name;

#011 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;

#012 ULONG i;

#013

获取系统物理内存的大小。

#014 /* Get the system size */

#015 SystemSize = MmQuerySystemSize();

#016

下面根据内存大小来做进程管理器进程个数设置。

#017 /* Setup some memory options */

#018 PspDefaultPagefileLimit = -1;

#019 switch (SystemSize)

#020 {

中等规模系统内存。

#021 /* Medimum systems */

#022 case MmMediumSystem:

#023

#024 /* Increase the WS sizes a bit */

#025 PsMinimumWorkingSet += 10;

#026 PsMaximumWorkingSet += 100;

#027

大规模系统内存。

#028 /* Large systems */

#029 case MmLargeSystem:

#030

#031 /* Increase the WS sizes a bit more */

#032 PsMinimumWorkingSet += 30;

#033 PsMaximumWorkingSet += 300;

#034

最小的,就使用认参数。

#035 /* Small and other systems */

#036 default:

#037 break;

#038 }

通过上面这段代码,就可以看到Reactos会根据内存大小来选择不同的进程个数,以便达到优化系统性能。在一个内存过少的设备里,是不可能创建很多并发进程的。

把所有线程、进程和文件加载通知设置为空。

#039

#040 /* Setup callbacks */

#041 for (i = 0; i < PSP_MAX_CREATE_THREAD_NOTIFY; i++)

#042 {

#043 ExInitializeCallBack(&PspThreadNotifyRoutine[i]);

#044 }

#045 for (i = 0; i < PSP_MAX_CREATE_PROCESS_NOTIFY; i++)

#046 {

#047 ExInitializeCallBack(&PspProcessnotifyRoutine[i]);

#048 }

#049 for (i = 0; i < PSP_MAX_LOAD_IMAGE_NOTIFY; i++)

#050 {

#051 ExInitializeCallBack(&PspLoadImageNotifyRoutine[i]);

#052 }

#053

设置进程调度表。比如进程是多长时间就轮转一次,还是实时地运行一个线程。

#054 /* Setup the quantum table */

#055 PsChangeQuantumTable(FALSE,PsRawPrioritySeparation);

#056

下面设置分页内存和非分页内存使用限制。

#057 /* Set quota settings */

#058 if (!PspDefaultPagedLimit) PspDefaultPagedLimit = 0;

#059 if (!PspDefaultNonPagedLimit) PspDefaultNonPagedLimit = 0;

#060 if (!(PspDefaultNonPagedLimit) && !(PspDefaultPagedLimit))

#061 {

#062 /* Enable give-backs */

#063 PspDoingGiveBacks = TRUE;

#064 }

#065 else

#066 {

#067 /* disable them */

#068 PspDoingGiveBacks = FALSE;

#069 }

#070

现在只能分配1MB内存页面

#071 /* Now multiply limits by 1MB */

#072 PspDefaultPagedLimit <<= 20;

#073 PspDefaultNonPagedLimit <<= 20;

#074 if (PspDefaultPagefileLimit != -1U) PspDefaultPagefileLimit <<= 20;

#075

原文地址:https://www.jb51.cc/react/308500.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐