概述
CR3寄存器:用来记录页目录表的物理基地址的寄存器,简称PDBR(page directory base register)
切换CR3寄存器意味着切换地址空间
不同进程拥有不同的地址空间(CR3内容)隔离的保护
线程:CPU的调度单位
任务
任务状态段(task state segment)
进程:线程的住所—容器(container)
Os组织和管理程序的重要单位
进程终止的方式:
主程的入口函数返回(推荐方式)
进程主动退出:一个线程调用ExitProcess
进程被动终止:另一个进程调用了Terminate Process
进程中的所有线程都终止
线程组成部分:
一个核心态的对象,操作系统用来保存系统信息
线程堆栈,用来存放线程运行时的函数参数和局部变量
GUI进程有一个主UI线程,处理消息循环和用户交互
如果这个线程被挂起来或者忙于处理任务,应用程序会失去响应
没有界面,在后台工作,如分析数据、数据库操作
线程的上下文context:
Instruction-pointer:用户和核心态堆栈指针
指向这个线程所在的地址空间的指针(page table directory)
Windows使用32个优先级别,从0~31数值越大,优先级越高
用户态虚拟空间的状态:
Free 自由,可被分配
Reserving 被预留,不再分配,没有影射到物理内存,不能访问
Commited 被影射到物理内存
进程使用的内存:
Private bytes:地址的虚拟地址空间中已分配的内存,不包括和其他进程共享的内存
VIRTUAL BYTES:进程所使用的虚拟地址空间的大小,包括和其他进程共享的内存,例如,共享的动态链接库
Working set:进程所使用的物理内存的大小
内存映射文件
操作系统使用内存映射文件来装载.exe和.dll文件
使用内存映射文件来处理大文件,每次只映射一部分文件内容映射到进程的地址空间
Pagefile用来保存进程正在使用的修改过的内存,当这部分被访问时,这些内容再被从page file转移到物理内存
Page fault缺页处理:
被访问的页面不在物理内存里,但是在硬盘文件里或paging file里或内存映像文件里
操作系统分配物理内存。把所需访问内容转移。这个进程对应用程序是透明的
进程使用内存的类型总结
虚拟内存:用于存储大块的数组或数据结构
内存映射文件:用于映射可执行文件,大文件或多进程之间共享文件
堆:用于大量的小块分配,进程使用的内存大部分来自堆。堆实际上就是操作系统的堆管理器,是从虚拟内存分配的
堆栈:保存线程运行时的变量,寄存器信息等。堆栈空间有限,如果一个线程的堆栈用完,而且不能再增长,应用程序会崩溃
DLL:
Dll不能直接运行,必须装载到一个进程中
Dll的image文件映射到进程的地址空间,然后所有线程可调用dll中函数Ntdll.dll,kernel.dll,usersz.dll
如果应用程序没有处理异常,应用程序会崩溃
常见的异常:访问非法内存地址,线程堆栈溢出,遇到断点,执行非法指令(线程堆栈被破坏)
参与启动过程的软硬件:
ROM中的POST(Power Onself-Test)代码
BIOS/EFI(extended firmware interface)
MBR(main boot record)
引导扇区(boot sector)
NTLDR/Winload
NTOSKRNL/HAL/BOOTVID/KDROM
SMSS.EXE
CSRSS.EXE
Winlogan.exe
最后
以上就是糟糕薯片为你收集整理的深入理解windows内部原理系列--笔记二的全部内容,希望文章能够帮你解决深入理解windows内部原理系列--笔记二所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复