reactos操作系统实现(34)
来源:互联网 发布:led广告牌制作软件 编辑:程序博客网 时间:2024/06/05 09:44
现在就来分析第一阶段的进程管理器初始化函数PspInitPhase0,如下:
#001 BOOLEAN
#002 NTAPI
#003 PspInitPhase0(INPLOADER_PARAMETER_BLOCK LoaderBlock)
#004 {
#005 NTSTATUS Status;
#006 OBJECT_ATTRIBUTESObjectAttributes;
#007 HANDLE SysThreadHandle;
#008 PETHREAD SysThread;
#009 MM_SYSTEMSIZE SystemSize;
#010 UNICODE_STRING Name;
#011 OBJECT_TYPE_INITIALIZERObjectTypeInitializer;
#012 ULONG i;
#013
获取系统物理内存的大小。
#014 /* Get the system size*/
#015 SystemSize =MmQuerySystemSize();
#016
下面根据内存大小来做进程管理器进程个数设置。
#017 /* Setup some memoryoptions */
#018 PspDefaultPagefileLimit= -1;
#019 switch (SystemSize)
#020 {
中等规模系统内存。
#021 /* Medimum systems*/
#022 case MmMediumSystem:
#023
#024 /* Increase theWS sizes a bit */
#025 PsMinimumWorkingSet += 10;
#026 PsMaximumWorkingSet += 100;
#027
大规模系统内存。
#028 /* Large systems */
#029 case MmLargeSystem:
#030
#031 /* Increase theWS sizes a bit more */
#032 PsMinimumWorkingSet += 30;
#033 PsMaximumWorkingSet += 300;
#034
最小的,就使用默认参数。
#035 /* Small and othersystems */
#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 quantumtable */
#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 limitsby 1MB */
#072 PspDefaultPagedLimit<<= 20;
#073 PspDefaultNonPagedLimit<<= 20;
#074 if(PspDefaultPagefileLimit != -1U) PspDefaultPagefileLimit <<= 20;
#075
- reactos操作系统实现(34)
- reactos操作系统实现(1)
- reactos操作系统实现(2)
- reactos操作系统实现(3)
- reactos操作系统实现(4)
- reactos操作系统实现(5)
- reactos操作系统实现(6)
- reactos操作系统实现(7)
- reactos操作系统实现(8)
- reactos操作系统实现(9)
- reactos操作系统实现(10)
- reactos操作系统实现(11)
- reactos操作系统实现(12)
- reactos操作系统实现(13)
- reactos操作系统实现(14)
- reactos操作系统实现(15)
- reactos操作系统实现(16)
- reactos操作系统实现(17)
- Samba 3.4.0 发布
- JDBC MYSQL 初探
- VS2005快捷键大全
- 人微言轻,自然发生的现象
- CentOS yum源
- reactos操作系统实现(34)
- linux挂载新硬盘
- Class.forName 介绍
- iBatis DAO入门与进阶
- Linux里用top命令详解
- C++ vtable的生成以及vptr的赋值跟踪实验
- PHP中调用FCK的方法
- Linux:mount命令挂载共享文件
- NCache