第3章 操作系统及相关程序设计2_内存管理_第1页
第3章 操作系统及相关程序设计2_内存管理_第2页
第3章 操作系统及相关程序设计2_内存管理_第3页
第3章 操作系统及相关程序设计2_内存管理_第4页
第3章 操作系统及相关程序设计2_内存管理_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、普通高等教育“十一五”国家级规划教材“十二五”普通高等教育本科国家级规划教材赵英良等.软件开发技术基础(第2版). 机械工业出版社第3章 操作系统及程序设计 存储管理应用程序设计软件开发技术基础西安交通大学计算机教学实验中心2 3.3 存储管理应用程序设计l本节内容本节内容l内存管理的相关概念内存管理的相关概念lWindows XP的内存管理的内存管理l虚拟存储管理程序设计虚拟存储管理程序设计l动态链接库的应用动态链接库的应用西安交通大学计算机教学实验中心3 3.3.1 存储存管理存储存管理 l存储器存储器storage, memmoryl能接收数据和保存数据、而且能根据命令提能接收数据和保存

2、数据、而且能根据命令提供这些数据的装置。供这些数据的装置。l内存储器(简称内存、主存、物理存储器)内存储器(简称内存、主存、物理存储器)l外存储器(简称外存、辅助存储器)外存储器(简称外存、辅助存储器)l操作系统的存储管理主要是对内存进行管操作系统的存储管理主要是对内存进行管理,以使多道程序能够合理地使用内存资理,以使多道程序能够合理地使用内存资源而不引起冲突源而不引起冲突西安交通大学计算机教学实验中心1.存储管理的主要任务存储管理的主要任务l内存空间的分配与释放内存空间的分配与释放l内存空间的地址变换内存空间的地址变换l内存空间的分区保护内存空间的分区保护l内存空间的扩充内存空间的扩充4西安

3、交通大学计算机教学实验中心2.存储管理的主要方法存储管理的主要方法l单一连续存储管理单一连续存储管理l分区式存储管理分区式存储管理l页式存储管理页式存储管理l段式存储管理段式存储管理l虚拟存储管理虚拟存储管理5西安交通大学计算机教学实验中心虚拟存储管理虚拟存储管理l虚拟存储管理解决程序的大小大于当前空虚拟存储管理解决程序的大小大于当前空闲的内存时的运行问题闲的内存时的运行问题l思想是程序运行之前,不是将它的全部信思想是程序运行之前,不是将它的全部信息一次性装入内存,而是只将一部分先装息一次性装入内存,而是只将一部分先装入内存,另一部分暂时留在外存。入内存,另一部分暂时留在外存。l进程在运行过程

4、中,如果要访问的信息不进程在运行过程中,如果要访问的信息不在内存时,进行中断请求,并由操作系统在内存时,进行中断请求,并由操作系统将它们调入内存,以保证进程的正常执行。将它们调入内存,以保证进程的正常执行。6西安交通大学计算机教学实验中心73.地址映射地址映射l(1)物理地址)物理地址l(2)物理地址空间)物理地址空间l(3)程序地址)程序地址l(4)程序地址空间)程序地址空间(逻辑地址空间、虚地址空间)(逻辑地址空间、虚地址空间)l(5)地址映射)地址映射l(6)地址映射方式)地址映射方式l编程或编译时确定地址映射关系编程或编译时确定地址映射关系l静态地址映射静态地址映射l动态地址映射动态地

5、址映射西安交通大学计算机教学实验中心84.内存的扩充内存的扩充l内外存数据传输的控制内外存数据传输的控制l把即将执行的程序和数据调入内存,而把把即将执行的程序和数据调入内存,而把那些处于等待的程序和数据调出内存。那些处于等待的程序和数据调出内存。l基本的控制办法:基本的控制办法:l覆盖覆盖l交换交换西安交通大学计算机教学实验中心93.3.2 Windows XP的存储管理lWindows XP的主存管理采用请求调页簇式的的主存管理采用请求调页簇式的页式虚存管理。页式虚存管理。l32位的位的Windows XP上的虚拟地址空间最多可上的虚拟地址空间最多可达达4GB,每个用户进程可以占有,每个用户

6、进程可以占有2GB的私有地的私有地址空间,操作系统占有剩下的址空间,操作系统占有剩下的2GB空间。空间。lWindows为每个进程分配的是虚拟内存空间,为每个进程分配的是虚拟内存空间,每个虚拟地址并不直接对应着物理地址,而是每个虚拟地址并不直接对应着物理地址,而是由一种称为物理内存管理器的机制来转译,由由一种称为物理内存管理器的机制来转译,由它来按页管理内存,并在页的映像结构中保存它来按页管理内存,并在页的映像结构中保存一张虚拟地址表,利用这张表将虚拟地址映射一张虚拟地址表,利用这张表将虚拟地址映射为相应的物理地址为相应的物理地址西安交通大学计算机教学实验中心lWindows采用的高级内存分配

7、方案是基于句柄采用的高级内存分配方案是基于句柄的分配方法的分配方法l程序员可以通过使用程序员可以通过使用Windows API的的GlobalAlloc或或LocalAlloc函数获得一个代表所函数获得一个代表所分配内存的句柄,然后再调用分配内存的句柄,然后再调用GlobalLock或或LocalLock函数得到执行该内存的地址函数得到执行该内存的地址,此时可此时可以使用这一块内存以使用这一块内存l使用完毕,必须通过使用完毕,必须通过GlobalLock或或LocalLock函数对内存解锁,从而由操作系统回收这块内函数对内存解锁,从而由操作系统回收这块内存空间存空间10西安交通大学计算机教学实

8、验中心lWin32 API中还提供中还提供lVirtualXXX形式的以页为单位的虚拟内存形式的以页为单位的虚拟内存函数函数,lCreateMapFile,MapViewofFile内存映内存映射文件函数,射文件函数,l以及以及HeapXXX堆栈函数等。堆栈函数等。11西安交通大学计算机教学实验中心3.3.3 虚拟存储管理程序设计虚拟存储管理程序设计l在进行在进行Windows下的内存空间管理的程下的内存空间管理的程序设计中序设计中l可以通过可以通过VirtualAlloc函数来申请一块虚函数来申请一块虚拟内存拟内存l通过通过VirtualFree函数释放虚拟内存。函数释放虚拟内存。12西安交

9、通大学计算机教学实验中心l【例例3-6】使用动态申请的虚拟内存空间使用动态申请的虚拟内存空间来编写一个计算任意数的阶乘的程序。来编写一个计算任意数的阶乘的程序。l计算较小数阶乘的程序很容易编写,而对于计算较小数阶乘的程序很容易编写,而对于较大数阶乘的计算一般做法是使用数组,但较大数阶乘的计算一般做法是使用数组,但由于由于C+中的数组一般最多只能定义中的数组一般最多只能定义10万个万个元素,可以通过使用动态内存分配(指针)元素,可以通过使用动态内存分配(指针)来突破这个限制。本程序采用动态申请虚拟来突破这个限制。本程序采用动态申请虚拟内存空间的方法,动用虚拟内存以申请更大内存空间的方法,动用虚拟

10、内存以申请更大的范围。的范围。13西安交通大学计算机教学实验中心14使用的主要内存管理函数使用的主要内存管理函数LPVOID VirtualAlloc( /申请虚拟内存内存申请虚拟内存内存 LPVOID lpAddress, / 起始地址起始地址 DWORD dwSize, / 大小大小 DWORD flAllocationType, / 分配类型分配类型!(MEM_COMMIT等)等) DWORD flProtect / 保权限(保权限(PAGE_READWRITE等)等)); / MEM_RESERVE/ MEM_COMMIT 在内存或者指定的磁盘页文件在内存或者指定的磁盘页文件BOOL

11、VirtualFree( /释放虚拟内存释放虚拟内存 LPVOID lpAddress, /起始地址起始地址 DWORD dwSize, /大小大小 DWORD dwFreeType /释放类型(释放类型(MEM_RELEASE等)等));p135西安交通大学计算机教学实验中心l解题步骤:解题步骤:1.从键盘输入从键盘输入n,它为要求阶乘的数;,它为要求阶乘的数;2.通过函数通过函数VirtualAlloc保留保留n*10240 的地址的地址空间,并申请使用空间,并申请使用 其中的其中的n*1024 的地址空的地址空间;其中间;其中n*1024为作者的大致估算,为作者的大致估算,1000以内数

12、的阶乘所需要的运算空间。而以内数的阶乘所需要的运算空间。而n*10240为预保留的为预保留的10倍的空间。倍的空间。3.调用计算阶乘函数调用计算阶乘函数lfac;一位一位显示阶乘;一位一位显示阶乘结果;结果;4.通过函数通过函数VirtualFree 释放虚拟内存。释放虚拟内存。15西安交通大学计算机教学实验中心163.3.4 动态连接库的建立使用动态连接库的建立使用 动态链接库(动态链接库(Dynamic-Link Library),简称),简称DLL,是基于,是基于Windows程序设计的一个非常重程序设计的一个非常重要的组成部分。要的组成部分。(4方面优点)方面优点)1DLL是基于是基于

13、Windows的程序模块,它不仅包的程序模块,它不仅包含可执行代码,还可以包含数据,各种资源,含可执行代码,还可以包含数据,各种资源,扩大了库文件的使用范围。扩大了库文件的使用范围。 2使用使用DLL的动态连接不是将库代码拷贝,只的动态连接不是将库代码拷贝,只在程序中记录函数的入口点和接口,在程序执在程序中记录函数的入口点和接口,在程序执行时才将库代码装入内存,如果有多个程序使行时才将库代码装入内存,如果有多个程序使用相同的用相同的DLL,也只需将,也只需将DLL在内存中装载一在内存中装载一次,节省了内存开销。次,节省了内存开销。西安交通大学计算机教学实验中心173DLL独立于编程语言,可以使

14、用目前流行的多独立于编程语言,可以使用目前流行的多种计算机语言或开发工具来编制和调用,比如:种计算机语言或开发工具来编制和调用,比如:VC+、C+Builder、PB、VB、Delphi和汇编和汇编语言等。语言等。4对于一个大型的、不断更新的应用程序,可以对于一个大型的、不断更新的应用程序,可以将许多重复的功能写成将许多重复的功能写成DLL,用主程序调用,用主程序调用,这样既减少了开发的工作量,又提高了访问速这样既减少了开发的工作量,又提高了访问速度。度。西安交通大学计算机教学实验中心18静态链接库静态链接库*.libl(1)创建)创建Win32 Static Library 类型的工程类型的

15、工程西安交通大学计算机教学实验中心19l(2)添加一个头文件()添加一个头文件(*.h)和一个)和一个c+ source(*.cpp) 文件文件西安交通大学计算机教学实验中心20l头文件是函数的声明,如:头文件是函数的声明,如:#ifndef _STACK_LIB_H#define _STACK_LIB_H/extern Cint sum(int n); /函数声明函数声明#endif西安交通大学计算机教学实验中心21lc+ source文件是函数定义:文件是函数定义:int sum(int n)int s=0;int i;for(i=1;iAdd to Project-Files命令,将命令

16、,将*.lib加入到工程中加入到工程中l(9)在程序中使用库中的函数)在程序中使用库中的函数西安交通大学计算机教学实验中心25西安交通大学计算机教学实验中心26#include#include stack_lib.hvoid main(void)int a=9;a=sum(10);coutaendl;西安交通大学计算机教学实验中心27动态链接库动态链接库*.DLLl(1)创建)创建Win32 Dynamic-Link Library类型的工程类型的工程l(2)创建两个文件)创建两个文件*.cpp和和*.def西安交通大学计算机教学实验中心28*.cpp编写代码编写代码#includeint S

17、ummary(int); /函数声明函数声明int Factorial(int); /函数声明函数声明/DllEntryPoint():The entry point of the DLL/西安交通大学计算机教学实验中心29入口点处理过程入口点处理过程BOOL WINAPI BOOL WINAPI DLLEntryPointDLLEntryPoint(HINSTANCE (HINSTANCE hDLL,DWORDhDLL,DWORD dwReasondwReason, , LPVOID Reserved) LPVOID Reserved) switch(switch(dwReasondwRea

18、son) ) case DLL_PROCESS_ATTACH:case DLL_PROCESS_ATTACH: /?/?break;break; case DLL_PROCESS_DETACH:case DLL_PROCESS_DETACH: /?/?break;break; return TRUE;return TRUE; 西安交通大学计算机教学实验中心30自己的过程函数自己的过程函数1int Summary(int n) /求求1,2,n的和的和int sum=0;int i;for(i=1;i=n;i+)sum+=i;return sum;西安交通大学计算机教学实验中心31自己的过程函数

19、自己的过程函数2int Factorial(int n) /计算计算n的阶乘的阶乘int Fact=1;int i;for(i=1;i=n;i+)Fact=Fact*i;return Fact;西安交通大学计算机教学实验中心32*.def模块定义文件模块定义文件LIBRARY dll_lib;CODE PRELOAD MOVEABLE DISCARDABLE;DATA PRELOAD MOVEABLE SINGLEEXPORTS;The names of the DLL functionsSummary ;函数名函数名Factorial ;函数名函数名西安交通大学计算机教学实验中心33l(3) Build菜单生成菜单生成DLLl(4)创建)创建Win32 Console Application应用程序应用程序l(5)将)将(3)中生成的动态链接库中生成的动态链接库*.DLL复复制到新工程的制到新工程的debug文件夹中文件夹中西安交通大学计算机教学实验中心34l(6)编辑新工程)编辑新工程cpp程序文件程序文件#include#include stdafx.h

温馨提示

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

评论

0/150

提交评论