reactos操作系统实现(38)
由于Reactos是以线程为最小的调度单位,如果仅仅创建进程的数据结构,不足以运行进程的任务,每个进程至少需要一个线程才可以运行,下面就来分析系统进程的线程创建,代码如下:
#195 /* Setup the system initialization thread */
#196 Status = PsCreateSystemThread(&SysThreadHandle,
#197 THREAD_ALL_ACCESS,
#198 &ObjectAttributes,
#199 0,
#200 NULL,
#201 Phase1Initialization,
#202 LoaderBlock);
#203 if (!NT_SUCCESS(Status)) return FALSE;
#204
这段代码里是调用函数PsCreateSystemThread来创建一个系统的线程。
#001 /*
#002 * @implemented
#003 */
#004 NTSTATUS
#005 NTAPI
#006 PsCreateSystemThread(OUT PHANDLE ThreadHandle,
#007 IN ACCESS_MASK DesiredAccess,
#008 IN POBJECT_ATTRIBUTES ObjectAttributes,
#009 IN HANDLE ProcessHandle,
#010 IN PCLIENT_ID ClientId,
#011 IN PKSTART_ROUTINE StartRoutine,
#012 IN PVOID StartContext)
#013 {
设置目标进程为空。
#014 PEPROCESS TargetProcess = NULL;
保存了进程句柄。
#015 HANDLE Handle = ProcessHandle;
#016 PAGED_CODE();
#017 PSTRACE(PS_THREAD_DEBUG,
#018 "ProcessHandle: %p StartRoutine: %p StartContext: %p/n",
#019 ProcessHandle, StartRoutine, StartContext);
#020
检查进程句柄是否为空,如果为空,就是系统进程的线程,否则是用户进程的线程。
#021 /* Check if we have a handle. If not, use the System Process */
#022 if (!ProcessHandle)
#023 {
#024 Handle = NULL;
#025 TargetProcess = PsInitialSystemProcess;
#026 }
#027
这里调用共享函数PspCreateThread来创建线程。
#028 /* Call the shared function */
#029 return PspCreateThread(ThreadHandle,
#030 DesiredAccess,
#031 ObjectAttributes,
#032 Handle,
#033 TargetProcess,
#034 ClientId,
#035 NULL,
#036 NULL,
#037 FALSE,
#038 StartRoutine,
#039 StartContext);
#040 }
通过上面代码可以看到,最终调用函数PspCreateThread创建一个线程。
相关文章
- 操作系统目录与文件系统---21
- 操作系统linux:银行家算法(C语言实现)
- rust写操作系统 rCore tutorial 学习笔记:实验指导五 驱动与文件
- 从零开始学习UCOSII操作系统2–UCOSII的内核实现「建议收藏」
- SQL Server内存遭遇操作系统进程压榨案例分析
- linux操作系统利用python实现任务管理器可视化功能
- 开源力量:Linux 操作系统(linux开源操作系统)
- 表 Linux 注册表:实现操作系统有力管理 (linux注册)
- 行数Linux操作系统中统计代码行数的方法(linux统计代码)
- Linux操作系统:实现创新计算目标(linux干什么的)
- Linux操作系统:实现快速、高效的管理(linuxbfd)
- Linux下运行QQ:实现多款操作系统共享即时通讯(linux下运行qq)
- 我要彻底放弃 Debian 操作系统!-Michael Stapelberg
- 初探Linux:改变世界的开源操作系统(linux换语言)
- Linux:基于C语言的操作系统(linux基于什么语言)
- 《代码英雄》第一季(1):操作系统战争(上)
- 深入探讨POSIX Linux操作系统(posixlinux)
- 台式机轻松安装linux系统,助您解决操作系统兼容问题(台式机装linux)
- Linux U盘启动:实现你的个性化操作系统(做linux u盘启动)
- 一键学习:快速掌握Linux操作系统中CD命令的实现方法(linuxcd命令实现)
- ESXi虚拟机安装实现MacOS操作系统(esximacos)
- Linux操作系统避免刷屏的方法(linux 刷屏)
- 利用Oracle操作系统实现表格删除(Oracle之删除表)