windows学习笔记3——windows体系结构(应用程序角度)

一. 进程和线程

进程是一个程序的实例,是静态的;进程不会运行,是线程的容器。


组成部分:

一个核心态的对象,操作系统用来保存进程的信息;

地址空间:包含可执行文件和所有动态链接库的代码和数据,以及动态分配的内存。


进程的终止:

终止之后windows会释放进程所使用的内存、句柄等所有资源。

进程终止方式:

主线程入口函数返回;

进程主动退出,一个线程调用ExitProcess这个API;

进程被动终止,另一个进程抵用了TerminateProcess;

进程中的所有线程都终止;

任务管理器中的结束任务和结束进程;


线程:

创建一个进程的上下文中,在进程的地中空间中运行;

线程是动态的,一个进程至少有一个线程;

进程中的所有线程共享进程的地址空间;


组成部分:

一个核心态的对象,操作系统用来保存线程的信息;

线程堆栈:用于存放线程运行时的函数参数和局部变量等;


线程的运行:

当一个进程初始化时,系统会创建这个进程的主线程;

这个线程最初执行C/C++运行时间库的启动代码,这些启动代码会调用程序的入口函数;

GUI进程有一个主UI线程,处理纤细循环和用户交互,如果这个线程被挂起或忙于处理任务,应用程序会失去响应;

工作线程没有界面,在后台工作,例如分析数据、数据库操作;


线程的终止:

线程函数返回;线程调用ExitThread;其他线程调用TerminateThread;该线程所在进程终止。


线程调度:Context Switch

下面的事件会出发操作系统的线程调度

一个线程进入ready状态;一个线程离开运行状态;一个线程的优先级改变;一个线程的processor affinity(指定处理器)改变。


线程优先级:windows使用32个优先级级别,线程优先级有进程优先级和线程优先级共同决定。


线程同步


二. 内存管理

进程的虚拟地址空间:32位地址上,进程的虚拟地址空间是4G;缺省情况下,用户态和核心态虚拟地址空间各占2GB,个进程的用户地址空间相互独立。


调节用户态空间大小,应用程序的二进制文件的文件头上要有LARGERADDRESSWARE标志次啊能访问高于2GB的用户态地址空间。


用户态虚拟地址空间的状态:free,reserving,committed。


进程使用的内存:

priviate bytes:进程的虚拟地址空间中已分配的内存,不包括和其他进程共享的内存;

virtual bytes:()

working set:进程所使用的物理内存的大小(很多代码是放在pagefiles中的)


内存映射文件:

操作系统使用内存映射文件来装载.exe和.dll文件;操作保留一段虚拟地址空间,把一个文件中的一部分映射到这段地址空间;这样内存映射文件可以处理大文件,每次只把一部分文件内容衣舍到进程的地址空间;


物理内存和paging file:

paging file用来保存进程正在使用的修改过的内存,这部分内容在很长一段时间内不会被cpu使用,相当于内存扩展。


缺页处理:将访问的内容从扩展的虚拟内存中督导物理内存中。这个过程对应用程序是透明的。


线程堆栈:reserve 1MB,commit 2 page

堆:分配小块的内存heapcreate


集成使用内存的类型总结:

虚拟内存;内存映射文件;堆;堆栈;


三. 动态链接库

DLL中的内容:函数、数据结构、资源等;

DLL不能直接运行,必须被装载到一个进程中;

DLL被映射到


DLL的入口函数:下面的事件发生时会调用DLL的入口函数

进程装载;进程卸载;进程创建新线程;线程终止;


DLL装载的两种类型:

load-time dynamic linking:编译器将可执行文件所需的dll的名字放在可执行文件头的import中。

run-time dynamic linking:应用程序运行之后调用LoadLibrary这个API装载DLL,操作系统定位并装载DLL。用GetProcAddress获得DLL的输出函数地址,并使用这些函数。


DLL的搜索顺序:

注册表键值safedllsearchmode决定


knownDLL


DLL Hook:

应用程序注册hook可简史一些特定的事件。Hook DLL被装载到其他进程里,一旦遇到上述事件,HookDLL会执行相应的hook过程。一些恶意软件会用这种方法窃取用户输入的用户名和密码。 


四. 异常处理

应用程序可能遇到异常,若应用程序没有处理这些异常,应用程序会崩溃;


异常处理过程:

先查找有没有debug工具;然后查找有没有处理异常的函数;操作系统调用一个API记录;


windows error reporting;


小结:(一个UI程序运行实例)

运行一个UI应用程序app.exe;

进程的创建和地址空间的创建;

装载所需的DLL;

主线程启动消息循环;

点击open file按钮,win32api调用,call stack,I/O;

打开文件,内存分配,句柄;

关闭文件,异常,非法操作;











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值