windows程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《windows程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- windows 程序设计 课件
- 资源描述:
-
1、Windows程序设计基础程序设计基础32位处理器有位处理器有3种工作模式种工作模式:实模式:重启以后到载入实模式:重启以后到载入WINDOWS以前都是实模式,以前都是实模式,纯纯32位位windows是不能进入实模式的。是不能进入实模式的。保护模式:保护模式提供的保护机制管理和维护自己保护模式:保护模式提供的保护机制管理和维护自己,保护主要指对存储器的保护。进入保护模式是每个保护主要指对存储器的保护。进入保护模式是每个32位位系统必须的系统必须的。虚拟虚拟86模式:为了让以前的模式:为了让以前的16位程序能在位程序能在32位下运行,位下运行,32位处理器就提供了虚拟位处理器就提供了虚拟86模
2、式模式。第二章第二章 win32程序运行原理程序运行原理2.1 CPU的保护模式和的保护模式和Windows系统系统扩展模式:扩展模式:1)兼容模式:该模式下,)兼容模式:该模式下,64位操作系统运行在位操作系统运行在32位兼位兼容环境,能正常运行容环境,能正常运行16,32位应用程序就像基本的保护位应用程序就像基本的保护模式一样,访问模式一样,访问32位地址空间,但不能运行纯位地址空间,但不能运行纯16位实模位实模式程序(就是不能运行虚拟式程序(就是不能运行虚拟86模式程序了)。模式程序了)。2)64位模式:在该模式下,处理器完全执行位模式:在该模式下,处理器完全执行64位指令,位指令,使用
3、使用64位地址空间和位地址空间和64操作数,运行操作数,运行16,32位程序必须位程序必须切换到兼容模式。切换到兼容模式。64位处理器位处理器系统管理模式:当系统管理模式:当SMI引脚为有效进入系统管理模式,引脚为有效进入系统管理模式,首先保存当前的首先保存当前的CPU上下文。它有独立的地址空间,用上下文。它有独立的地址空间,用来执行电源管理或系统安全方面的指令。(基本模式)来执行电源管理或系统安全方面的指令。(基本模式)32位处理器对多任务操作系统的支持性主要位处理器对多任务操作系统的支持性主要体现在体现在 1)在硬件上为任务之间的切换提供了良好的)在硬件上为任务之间的切换提供了良好的条件条
4、件 2)实现了多任务隔离,)实现了多任务隔离,“进程进程”地址空间独地址空间独立立 在在windows下,任务被进程取代,进程就是下,任务被进程取代,进程就是正在运行的应用程序的实例。但是占用正在运行的应用程序的实例。但是占用cpu时间时间片的不是进程,而是线程。片的不是进程,而是线程。Windows的多任务实现的多任务实现虚拟内存虚拟内存 保护模式下,保护模式下,32位处理器有位处理器有32根地址线,根地址线,处理器寻址范围(处理器寻址范围(0 x000000000 xFFFFFFFF)()(232,4GB)。)。32位机器上的位机器上的RAM的大小很难达到的大小很难达到4GB,window
5、s为每个进程分配为每个进程分配4GB的地址空间主要的地址空间主要依靠依靠cpu的支持。的支持。cpu在保护模式下支持虚拟内在保护模式下支持虚拟内存。它可以帮助操作系统将磁盘空间当作内存存。它可以帮助操作系统将磁盘空间当作内存空间来使用。空间来使用。各进程内的地址空间安排各进程内的地址空间安排2GB的系统空间2GB的用户空间0 xFFFFFFFF0 x800000000 x7FFFFFFF0 x00000000整个系统共用整个系统共用每个进程私有每个进程私有 用户空间部分是进程私有地址空间,进程不能以任用户空间部分是进程私有地址空间,进程不能以任何方式读、写其他进程此部分空间中的数据。对所有应何
6、方式读、写其他进程此部分空间中的数据。对所有应用程序,大量进程数据被保存在块空间中而相互独立,用程序,大量进程数据被保存在块空间中而相互独立,所以应用程序很少被其他程序打断,使系统更加稳定。所以应用程序很少被其他程序打断,使系统更加稳定。系统空间部分放置操作系统的代码,包括内核代码、系统空间部分放置操作系统的代码,包括内核代码、设备驱动代码、设备设备驱动代码、设备I/O缓冲区等。系统空间部分在所缓冲区等。系统空间部分在所有的进程中是共享的。在有的进程中是共享的。在32位系统中,这些数据结构位系统中,这些数据结构被完全的保护起来,如果试图访问这部分内存,访问线被完全的保护起来,如果试图访问这部分
7、内存,访问线程会遇到一个访问异常。程会遇到一个访问异常。两种地址空间区别两种地址空间区别 32位处理器共定义了位处理器共定义了4种(种(0-3)特权级别,)特权级别,或称环。或称环。0是最高级(特权级),是最高级(特权级),3级是最低级级是最低级(用户级)。(用户级)。为了阻止应用程序访问或者修改关键的系统数为了阻止应用程序访问或者修改关键的系统数据,据,windows提供了两种访问模式:提供了两种访问模式:内核模式(使用内核模式(使用0级):系统程序的代码在此模式级):系统程序的代码在此模式下运行下运行用户模式(使用用户模式(使用3级):用户程序的代码在此模式级):用户程序的代码在此模式下运
8、行下运行内核模式和用户模式内核模式和用户模式CPU支持的特权级类别支持的特权级类别应用程序应用程序常规扩展常规扩展系统服务系统服务内核内核级别级别0级别级别1级别级别2级别级别3在实模式下在实模式下,没有级没有级别之分别之分.在保护模式在保护模式下下,CPU有有4个特权个特权级别级别.虽然每个进程都有自己的虽然每个进程都有自己的4G地址空间。但地址空间。但内核模式下的系统和设备驱动程序共用一块虚内核模式下的系统和设备驱动程序共用一块虚拟地址空间。即整个系统共用的拟地址空间。即整个系统共用的2G部分。虚拟部分。虚拟内存中的每一页的页属性中都有访问模式标记,内存中的每一页的页属性中都有访问模式标记
9、,它标识了哪一个模式下的代码才有权限访问该它标识了哪一个模式下的代码才有权限访问该页。系统地址空间的页仅仅能够从内核模式访页。系统地址空间的页仅仅能够从内核模式访问,所有用户地址空间的页都从用户模式访问。问,所有用户地址空间的页都从用户模式访问。当应用程序调用一个系统函数的时候,用当应用程序调用一个系统函数的时候,用户的应用程序会从用户模式切换到内核模式去户的应用程序会从用户模式切换到内核模式去执行。例如:执行。例如:Win32函数函数ReadFile最终会调用最终会调用Windows内部的从文件中读取数据的程序代内部的从文件中读取数据的程序代码,因为这些代码访问了系统内部的数据,所码,因为这
10、些代码访问了系统内部的数据,所以他们必须运行在内核模式下。以他们必须运行在内核模式下。内核模式:内核模式:研究研究WDM(Windows Driver Model)设备驱动类设备驱动类 用户模式:用户模式:SDK程序设计程序设计两种模式下的程序设计两种模式下的程序设计 内核对象是系统提供的用户模式下代码与内核对象是系统提供的用户模式下代码与内核模式下代码进行交互的基本接口。软件开内核模式下代码进行交互的基本接口。软件开发人员会经常的创建、打开和操作内核对象。发人员会经常的创建、打开和操作内核对象。2.2 内核对象内核对象 为了管理应用程序,系统有必要维护一些不为了管理应用程序,系统有必要维护一
11、些不允许用户应用程序直接访问的数据。一个内核允许用户应用程序直接访问的数据。一个内核对象就是一块内核分配的内存,它只能被运行对象就是一块内核分配的内存,它只能被运行在内核模式下的代码访问。内核对象记录的数在内核模式下的代码访问。内核对象记录的数据在整个系统中只有一份,故也称系统资源。据在整个系统中只有一份,故也称系统资源。内核对象和普通的数据结构间的最大区别内核对象和普通的数据结构间的最大区别是其内部数据结构是隐藏的,必须调用一个对是其内部数据结构是隐藏的,必须调用一个对象服务才能从此对象中得到数据,或者是向其象服务才能从此对象中得到数据,或者是向其输入数据,而不能直接读或者改变对象的内部输入
12、数据,而不能直接读或者改变对象的内部数据。增加这些限制来保证内核对象包含一致数据。增加这些限制来保证内核对象包含一致的状态。的状态。引入内核对象,系统可方便的完成以下任务:引入内核对象,系统可方便的完成以下任务:1)为系统资源提供可识别的名字。)为系统资源提供可识别的名字。2)在进程之间共享资源和数据。)在进程之间共享资源和数据。3)保护资源不被未经认可的代码访问。)保护资源不被未经认可的代码访问。4)跟踪对象的引用情况。在不被使用时,释放)跟踪对象的引用情况。在不被使用时,释放占有空间。占有空间。内核对象的数据结构仅能从内核模式访问,所以内核对象的数据结构仅能从内核模式访问,所以直接在内存中
13、定位这些数据结构对应用程序来说是不直接在内存中定位这些数据结构对应用程序来说是不可能的。应用程序必须使用可能的。应用程序必须使用API函数访问内核对象。函数访问内核对象。调用函数创建内核对象时,函数会返回标识此内核对调用函数创建内核对象时,函数会返回标识此内核对象的句柄。象的句柄。为了使系统稳定,这些句柄和进程有关,就是仅为了使系统稳定,这些句柄和进程有关,就是仅对创建该内核对象的进程有效。对创建该内核对象的进程有效。若要多个进程共享一个内核对象,要调用若要多个进程共享一个内核对象,要调用DuplicateHandle函数复制一个进程句柄传给其他进函数复制一个进程句柄传给其他进程即可。程即可。
14、对象句柄对象句柄 内核对象是进程内的资源,使用计数属性内核对象是进程内的资源,使用计数属性指明进程对特定内核对象的引用次数,第一次指明进程对特定内核对象的引用次数,第一次创建内核对象时,系统为进程分配内核对象资创建内核对象时,系统为进程分配内核对象资源,并将该内核对象的使用计数属性初始化为源,并将该内核对象的使用计数属性初始化为1。打开一次使用计数加。打开一次使用计数加1,关闭,系统将使用,关闭,系统将使用计数减计数减1,当系统发现引用次数是,当系统发现引用次数是0时,它就会时,它就会自动关闭资源。自动关闭资源。使用计数使用计数2.3 进程的创建进程的创建进程和线程进程和线程 进程是一个正在运
15、行的程序,它拥有自己的虚进程是一个正在运行的程序,它拥有自己的虚拟地址空间,拥有自己的代码、数据和其他系统资拟地址空间,拥有自己的代码、数据和其他系统资源,如进程创建的文件、管道、同步对象等。一个源,如进程创建的文件、管道、同步对象等。一个进程也包含了一个或者多个运行在此进程内的线程。进程也包含了一个或者多个运行在此进程内的线程。线程是进程内执行代码的独立实体。没有它,线程是进程内执行代码的独立实体。没有它,进程中的程序代码是不可能执行的。操作系统创建进程中的程序代码是不可能执行的。操作系统创建进行后会创建一个线程执行进程中的代码,称主线进行后会创建一个线程执行进程中的代码,称主线程,它在运行
16、过程中创建其他线程,一般将主线程程,它在运行过程中创建其他线程,一般将主线程创建的线程称为该进程的辅助线程。创建的线程称为该进程的辅助线程。进程是不活泼的,一个进程要完成任何进程是不活泼的,一个进程要完成任何事情,必须有一个运行在它的地址空间中的事情,必须有一个运行在它的地址空间中的线程。此线程负责执行该进程地址空间的代线程。此线程负责执行该进程地址空间的代码。每个进程至少拥有一个在它的地址空间码。每个进程至少拥有一个在它的地址空间中运行的线程。对一个不包含任何线程的进中运行的线程。对一个不包含任何线程的进程来说,它是没有理由继续存在下去的,系程来说,它是没有理由继续存在下去的,系统会自动销毁
17、该进程和它的地址空间。统会自动销毁该进程和它的地址空间。进程和程序进程和程序程序:一连串静态的指令程序:一连串静态的指令进程:一个容器,它包含一系列运行在这个进程:一个容器,它包含一系列运行在这个程序实例上下文中的线程使用的资源。程序实例上下文中的线程使用的资源。Win32进程的两个组成部分进程的两个组成部分进程内核对象:操作系统使用此内核对象来进程内核对象:操作系统使用此内核对象来管理该进程。这个内核对象也是操作系统存管理该进程。这个内核对象也是操作系统存放进程统计信息的地方。放进程统计信息的地方。私有的虚拟地址空间:此地址空间包含了所私有的虚拟地址空间:此地址空间包含了所有可执行的或者是有
18、可执行的或者是DLL模块的代码和数据,模块的代码和数据,它也是程序动态申请内存的地方,比如说线它也是程序动态申请内存的地方,比如说线程堆栈和进程堆。程堆栈和进程堆。应用程序必须有一个入口函数,它在程序应用程序必须有一个入口函数,它在程序开始运行时被调用。控制台应用程序入口函数开始运行时被调用。控制台应用程序入口函数是是main。int main(int argc,char*argv)应用程序的启动过程应用程序的启动过程开始开始主线程调用主线程调用C/C+运行期启动函数运行期启动函数N操作系统调用操作系统调用CreateProcess函数创建新的进程函数创建新的进程系统创建一个进程内核对象,使用
19、计数初始化为系统创建一个进程内核对象,使用计数初始化为1系统为进程创建主线程系统为进程创建主线程成功成功调用程序入口函数调用程序入口函数mainY结束结束系统为新进程创建虚拟地址空间,加载应用程序运行时需要代码和数据系统为新进程创建虚拟地址空间,加载应用程序运行时需要代码和数据CreateProcess函数函数WIN32API函数函数CreateProcess用来创建一个新的进程和它的主线程,用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。这个新进程运行指定的可执行文件。函数原型:函数原型:BOOL CreateProcess(LPCTSTR lpApplicationNam
20、e,/可执行文件名称可执行文件名称 LPTSTR lpCommandLine,/指定要传递给执行模块的参数指定要传递给执行模块的参数 LPSECURITY_ATTRIBUTES lpProcessAttributes,/进程安全性进程安全性 LPSECURITY_ATTRIBUTES lpThreadAttributes,/进程安全性进程安全性 BOOL bInheritHandles,/指定当前进程中的可继承句柄是否可被新进程继承指定当前进程中的可继承句柄是否可被新进程继承 DWORD dwCreationFlags,/指定新进程的优先级及其他创建标志指定新进程的优先级及其他创建标志 LPV
展开阅读全文