现在就来分析第一阶段的进程管理器初始化函数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
分享到:
相关推荐
ReactOS项目致力于为大家开发一个免费而且完全兼容 Microsoft Windows XP 的操作系统。ReactOS 旨在通过使用类似构架和提供完整公共接口实现与 NT 以及 XP 操作系统二进制下的应用程序和驱动设备的完全兼容。 ...
本书通过分析ReactOS的源代码介绍了Windows内核各个方面的结构、功能、算法与具体实现。全书从“内存管理”、“进程”、“进程间通信”、“设备驱动”等多个方面进行分析介绍,所有的分析都有ReactOS的源代码(以及...
本书通过分析ReactOS的源代码介绍了Windows内核各个方面的结构、功能、算法与具体实现。全书从“内存管理”、“进程”、“进程间通信”、“设备驱动”等多个方面进行分析介绍,所有的分析都有ReactOS的源代码(以及...
JS操作系统 Web上的统一操作系统。 使用的技术: HTML CSS JavaScript React-JS 如何在本地运行: 克隆仓库git clone https://github.com/NJACKWinterOfCode/JS-OS.git 进入JS-OS光盘进入JS-OS cd JS-OS 安装...
漫谈兼容内核之一:ReactOS怎样实现系统调用 漫谈兼容内核之二:关于kernel-win32的对象管理 漫谈兼容内核之三:Kernel-win32的文件操作 漫谈兼容内核之四:Kernel-win32的进程管理 漫谈兼容内核之五:Kernel-win32...
在本文档中,我们以Windows NT和ReactOS提供的Fibers实现为参考,介绍了可加载内核模块(LKM)实现。 虽然用户空间实现通常因其开销少且易于调试而成为首选,但是内核空间实现允许更深入地了解内核子系统的工作方式...
01:ReactOS怎样实现系统调用.pdf 02:关于kernel -win32的对象管理.pdf 03:关于kernel-win32的文件操作.pdf 04:Kernel-win32的进程管理.pdf 05:Kernel-win32的系统调用机制.pdf 06:二进制映像的类型识别.pdf 07...
React式对象实现。 结帐 用法 var obj = new ReactiveObject ( { 'foo' : '1' } ) ; obj . defineProperty ( 'bar' , 2 ) ; obj . foo = '2' ; obj . undefineProperty ( 'foo' ) ; // Don't use 'delete obj.foo' ...
远线程注入 每个进程都有自己的虚拟地址空间,对32位进程来说,这个地址空间的大小为4GB。...如下摘自ReactOS 3.14的代码所示,CreateRemoteThread实际实现的功能就是调用NtCreateThread创建一个属于目标进程的线程。
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、...
漫谈兼容内核之一:ReactOS怎样实现系统调用 漫谈兼容内核之二:关于kernel-win32的对象管理 漫谈兼容内核之三:Kernel-win32的文件操作 漫谈兼容内核之四:Kernel-win32的进程管理 漫谈兼容内核之五:Kernel-win32...
艺术家,专辑和曲目都以文件和文件夹的形式呈现,并且可以在Winamp重新实现轻松地进行操作和播放。现场环境动机构建软件应该保持乐趣。 这个项目主要是一个沙箱,我可以尝试并提高对React和TypeScript的了解。 这也...
isIpad() 设备型号为 iPad Device.isIphone() 设备型号为 iPhone Properties Device.model 设备型号,如 iPhone 或 iPad Device.deviceName 设备名称,如 John Smith 的 iPhone Device.systemName设备操作系统名称...
内存转储是通过使用NTFS事务完成的,NTFS事务使我们可以将转储写入内存,并且MiniDumpWriteDump API已被ReactOS的MiniDumpWriteDump实现改编所取代。 然后,BOF使用base64对内存中的数据进行编码,将其分块,然后...
谈兼容内核之一:ReactOS怎样实现系统调用.pdf 漫谈兼容内核之二:关于kernel -win32的对象管理.pdf 漫谈兼容内核之三:关于kernel-win32的文件操作.pdf 漫谈兼容内核之四:Kernel-win32的进程管理.pdf 漫谈兼容内核...
在许多情况下,操作员习惯于处理遥测,实时图表,警报等,这可以帮助他们确定有问题的机器并做出React以解决任何潜在的问题。 但是,一个问题浮现在脑海:如果机器可以自动调整自身并为用户提供自我修复功能,那...
功能,主题,UI / API文本,错误消息,命令内置支持: Arista EOS 鸟思科IOS-XR 思科IOS / IOS-XE 思科NX-OS FRRouting 了华为瞻博JunOS 米克罗蒂克诺基亚SR OS TNSR 虚拟操作系统对任何其他配置支持(可选)通过SSH...
xe-crawlerxe-crawler 是遵循声明式、可监测理念的分布式爬虫,其计划提供 Node.js、Go、Python 多种实现,能够对于静态 Web 页面、动态 Web 页面、关系型数据库、操作系统等异构多源数据进行抓取。xe-crawler 希望...
实现分块功能可以采用手动循环的对每个块依次操作,也可以使用Matlab提供的分块处理功能blkproc。 选择两张大小相同的图像,分别进行DFT变换后,置换两幅图像的幅度和相位信息后再作反变换,观察并分析结果。 主要...