windows程序设计02

上传人:r****d 文档编号:251230045 上传时间:2024-11-06 格式:PPT 页数:38 大小:79.50KB
收藏 版权申诉 举报 下载
windows程序设计02_第1页
第1页 / 共38页
windows程序设计02_第2页
第2页 / 共38页
windows程序设计02_第3页
第3页 / 共38页
资源描述:

《windows程序设计02》由会员分享,可在线阅读,更多相关《windows程序设计02(38页珍藏版)》请在装配图网上搜索。

1、,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Windows程序设计根底,32,位处理器有,3,种工作模式,:,实模式:重启以后到载入,WINDOWS,以前都是实模式,纯,32,位,windows,是不能进入实模式的。,保护模式:保护模式提供的保护机制管理和维护自己,保护主要指对存储器的保护。进入保护模式是每个,32,位系统必须的。,虚拟,86,模式:为了让以前的,16,位程序能在,32,位下运行,,32,位处理器就提供了虚拟,86,模式。,第二章,win32,程

2、序运行原理,2.1 CPU,的保护模式和,Windows,系统,扩展模式:,1兼容模式:该模式下,64位操作系统运行在32位兼容环境,能正常运行16,32位应用程序就像根本的保护模式一样,访问32位地址空间,但不能运行纯16位实模式程序就是不能运行虚拟86模式程序了。264位模式:在该模式下,处理器完全执行64位指令,使用64位地址空间和64操作数,运行16,32位程序必须切换到兼容模式。,64,位处理器,系统管理模式:当SMI引脚为有效进入系统管理模式,首先保存当前的CPU上下文。它有独立的地址空间,用来执行电源管理或系统平安方面的指令。根本模式,32位处理器对多任务操作系统的支持性主要表达

3、在,1在硬件上为任务之间的切换提供了良好的条件,2实现了多任务隔离,“进程地址空间独立,在windows下,任务被进程取代,进程就是正在运行的应用程序的实例。但是占用cpu时间片的不是进程,而是线程。,Windows,的多任务实现,虚拟内存,保护模式下,32位处理器有32根地址线,处理器寻址范围0 x000000000 xFFFFFFFF232,4GB。,32位机器上的RAM的大小很难到达4GB,windows为每个进程分配4GB的地址空间主要依靠cpu的支持。cpu在保护模式下支持虚拟内存。它可以帮助操作系统将磁盘空间当作内存空间来使用。,各进程内的地址空间安排,2GB,的系统空间,2GB,

4、的用户空间,0 xFFFFFFFF,0 x80000000,0 x7FFFFFFF,0 x00000000,整个系统共用,每个进程私有,用户空间局部是进程私有地址空间,进程不能以任何方式读、写其他进程此局部空间中的数据。对所有应用程序,大量进程数据被保存在块空间中而相互独立,所以应用程序很少被其他程序打断,使系统更加稳定。,系统空间局部放置操作系统的代码,包括内核代码、设备驱动代码、设备I/O缓冲区等。系统空间局部在所有的进程中是共享的。在32位系统中,这些数据结构被完全的保护起来,如果试图访问这局部内存,访问线程会遇到一个访问异常。,两种地址空间区别,32位处理器共定义了4种0-3特权级别,

5、或称环。0是最高级特权级,3级是最低级用户级。,为了阻止应用程序访问或者修改关键的系统数据,windows提供了两种访问模式:,内核模式使用0级:系统程序的代码在此模式下运行,用户模式使用3级:用户程序的代码在此模式下运行,内核模式和用户模式,CPU,支持的特权级类别,应用程序,常规扩展,系统服务,内核,级别,0,级别,1,级别,2,级别,3,在实模式下,没有级别之分,.,在保护模式下,CPU,有,4,个特权级别,.,虽然每个进程都有自己的4G地址空间。但内核模式下的系统和设备驱动程序共用一块虚拟地址空间。即整个系统共用的2G局部。虚拟内存中的每一页的页属性中都有访问模式标记,它标识了哪一个模

6、式下的代码才有权限访问该页。系统地址空间的页仅仅能够从内核模式访问,所有用户地址空间的页都从用户模式访问。,当应用程序调用一个系统函数的时候,用户的应用程序会从用户模式切换到内核模式去执行。例如:Win32函数ReadFile最终会调用Windows内部的从文件中读取数据的程序代码,因为这些代码访问了系统内部的数据,所以他们必须运行在内核模式下。,内核模式:,研究WDMWindows Driver Model,设备驱动类,用户模式:,SDK程序设计,两种模式下的程序设计,内核对象是系统提供的用户模式下代码与内核模式下代码进行交互的根本接口。软件开发人员会经常的创立、翻开和操作内核对象。,2.2

7、,内核对象,为了管理应用程序,系统有必要维护一些不允许用户应用程序直接访问的数据。一个内核对象就是一块内核分配的内存,它只能被运行在内核模式下的代码访问。内核对象记录的数据在整个系统中只有一份,故也称系统资源。,内核对象和普通的数据结构间的最大区别是其内部数据结构是隐藏的,必须调用一个对象效劳才能从此对象中得到数据,或者是向其输入数据,而不能直接读或者改变对象的内部数据。增加这些限制来保证内核对象包含一致的状态。,引入内核对象,系统可方便的完成以下任务:,1为系统资源提供可识别的名字。,2在进程之间共享资源和数据。,3保护资源不被未经认可的代码访问。,4跟踪对象的引用情况。在不被使用时,释放占

8、有空间。,内核对象的数据结构仅能从内核模式访问,所以直接在内存中定位这些数据结构对应用程序来说是不可能的。应用程序必须使用API函数访问内核对象。调用函数创立内核对象时,函数会返回标识此内核对象的句柄。,为了使系统稳定,这些句柄和进程有关,就是仅对创立该内核对象的进程有效。,假设要多个进程共享一个内核对象,要调用DuplicateHandle函数复制一个进程句柄传给其他进程即可。,对象句柄,内核对象是进程内的资源,使用计数属性指明进程对特定内核对象的引用次数,第一次创立内核对象时,系统为进程分配内核对象资源,并将该内核对象的使用计数属性初始化为1。翻开一次使用计数加1,关闭,系统将使用计数减1

9、,当系统发现引用次数是0时,它就会自动关闭资源。,使用计数,2.3 进程的创立,进程和线程,进程是一个正在运行的程序,它拥有自己的虚拟地址空间,拥有自己的代码、数据和其他系统资源,如进程创立的文件、管道、同步对象等。一个进程也包含了一个或者多个运行在此进程内的线程。,线程是进程内执行代码的独立实体。没有它,进程中的程序代码是不可能执行的。操作系统创立进行后会创立一个线程执行进程中的代码,称主线程,它在运行过程中创立其他线程,一般将主线程创立的线程称为该进程的辅助线程。,进程是不活泼的,一个进程要完成任何事情,必须有一个运行在它的地址空间中的线程。此线程负责执行该进程地址空间的代码。每个进程至少

10、拥有一个在它的地址空间中运行的线程。对一个不包含任何线程的进程来说,它是没有理由继续存在下去的,系统会自动销毁该进程和它的地址空间。,进程和程序,程序:一连串静态的指令,进程:一个容器,它包含一系列运行在这个程序实例上下文中的线程使用的资源。,Win32进程的两个组成局部,进程内核对象:操作系统使用此内核对象来管理该进程。这个内核对象也是操作系统存放进程统计信息的地方。,私有的虚拟地址空间:此地址空间包含了所有可执行的或者是DLL模块的代码和数据,它也是程序动态申请内存的地方,比方说线程堆栈和进程堆。,应用程序必须有一个入口函数,它在程序开始运行时被调用。控制台应用程序入口函数是,main,。

11、,int main(int argc,char*argv),应用程序的启动过程,开始,主线程调用,C/C+,运行期启动函数,N,操作系统调用,CreateProcess,函数创建新的进程,系统创建一个进程内核对象,使用计数初始化为,1,系统为进程创建主线程,成功,调用程序入口函数,main,Y,结束,系统为新进程创建虚拟地址空间,加载应用程序运行时需要代码和数据,CreateProcess,函数,WIN32API函数CreateProcess用来创立一个新的进程和它的主线程,,这个新进程运行指定的可执行文件。函数原型:BOOL CreateProcess(LPCTSTR lpApplicati

12、onName,/可执行文件名称 LPTSTR lpCommandLine,/指定要传递给执行模块的参数 LPSECURITY_ATTRIBUTES lpProcessAttributes,/进程平安性 LPSECURITY_ATTRIBUTES lpThreadAttributes,/进程平安性 BOOL bInheritHandles,/指定当前进程中的可继承句柄是否可被新进程继承 DWORD dwCreationFlags,/指定新进程的优先级及其他创立标志,LPVOID lpEnvironment,/指定新进程使用的环境变量,LPCTSTR lpCurrentDirectory,/指定新

13、进程使用的当前目录,LPSTARTUPINFO lpStartupInfo,/指定新进程中主窗口的位置、大小和句柄等,LPPROCESS_INFORMATION lpProcessInformation/返回新进程的标志信息,);,lpApplicationName:指向一个NULL结尾的、用来指定可执行模块的字符串。这个字符串可以是可执行模块的绝对路径,也可以是相对路径,在后一种情况下,函数使用当前驱动器和目录建立可执行模块的路径。这个参数可以被设为NULL,在这种情况下,可执行模块的名字必须处于 lpCommandLine 参数的最前面并由空格符与后面的字符分开。这个被指定的模块可以是一个

14、Win32应用程序。如果适当的子系统在当前计算机上可用的话,它也可以是其他类型的模块如MS-DOS 或 OS/2。,lpCommandLine,:指向一个,NULL,结尾的、用来指定要运行的命令行。,这个参数可以为空,那么函数将使用参数指定的字符串当作要运行的程序的命令行。如果,lpApplicationName,和,lpCommandLine,参数都不为空,那么,lpApplicationName,参数指定将要被运行的模块,,lpCommandLine,参数指定将被运行的模块的命令行。新运行的进程可以使用,GetCommandLine,函数获得整个命令行。,C,语言程序可以使用,argc,和

15、,argv,参数。,如果lpApplicationName参数为空,那么这个字符串中的第一个被空格分隔的要素指定可执行模块名。如果文件名不包含扩展名,那么.exe将被假定为默认的扩展名。如果文件名以一个点.结尾且没有扩展名,或文件名中包含路径,.exe将不会被加到后面。如果文件名中不包含路径,Windows将按照如下顺序寻找这个可执行文件:1.当前应用程序的目录。2.父进程的目录。3.Windows 95:Windows系统目录,可以使用GetSystemDirectory函数获得。Windows NT:32位Windows系统目录。可以使用GetSystemDirectory函数获得,目录名

16、是SYSTEM32。4.在Windows NT中:16位Windows系统目录。不可以使用Win32函数获得这个目录,但是它会被搜索,目录名是SYSTEM。5.Windows目录。可以使用GetWindowsDirectory函数获得这个目录。6.列在PATH环境变量中的目录。如果被创立的进程是一个以MS-DOS或16位Windows为根底的应用程序,lpCommandLine参数应该是一个以可执行文件的文件名作为第一个要素的绝对路径,因为这样做可以使32位Windows程序工作的很好,这样设置lpCommandLine参数是最强壮的。,dwCreationFlags:指定附加的、用来控制优先级和进程的创立的标志。以下的创立标志可以以除下面列出的方式外的任何方式组合后指定。,值:,CREATE_DEFAULT_ERROR_MODE,含义:新的进程不继承调用进程的错误模式。,值:,CREATE_NEW_CONSOLE,含义:新的进程将使用一个新的控制台,而不是继承父进程的控制台。这个标志不能与,DETACHED_PROCESS,标志一起使用。,值:,CREATE_NEW_PROCESS_

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  sobing.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!