我是靠谱客的博主 糟糕薯片,最近开发中收集的这篇文章主要介绍深入理解windows内部原理系列--笔记二,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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内部原理系列--笔记二所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部