操作系统课程设计毕业设计论文.docx

上传人:b****5 文档编号:3256318 上传时间:2022-11-21 格式:DOCX 页数:28 大小:208.31KB
下载 相关 举报
操作系统课程设计毕业设计论文.docx_第1页
第1页 / 共28页
操作系统课程设计毕业设计论文.docx_第2页
第2页 / 共28页
操作系统课程设计毕业设计论文.docx_第3页
第3页 / 共28页
操作系统课程设计毕业设计论文.docx_第4页
第4页 / 共28页
操作系统课程设计毕业设计论文.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

操作系统课程设计毕业设计论文.docx

《操作系统课程设计毕业设计论文.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计毕业设计论文.docx(28页珍藏版)》请在冰豆网上搜索。

操作系统课程设计毕业设计论文.docx

操作系统课程设计毕业设计论文

目录

第一章基本原理1

$1.1代码中涉及的概念1

$1.2各个文件的作用2

第二章功能实现4

$2.1各个函数的功能4

$2.1.1必读函数CreateProcess4

$2.1.2ProcessInfo.cpp中各个主要的函数作用5

$2.2功能5

$2.3界面显示6

第三章实现9

$3.1代码精读ProcessInfo.cpp9

$3.2代码精读ToolHelp.cpp19

第四章实验心得27

 

第一章基本原理

$1.1代码中涉及的概念

ProcessInfo应用程序中主要是运用了Toolhelp函数来实现的。

关于ToolHelp后面会具体写到。

下面先写一下我在读代码时遇到的一些陌生的概念。

 

1.进程

在《操作系统》中进程(process)的定义是指一个程序在给定数据集合上的一次执行过程,是系统进行资源分配和运行调度的独立单位。

3内核对象

每个内核对象只是内核分配的一个内存块,并且只能由该内核访问。

该内存块是一种数据结构,它的成员负责维护该对象的各种信息。

有些数据成员(如安全性描述符、使用计数等)在所有对象类型中是相同的,但大多数数据成员属于特定的对象类型。

例如,进程对象有一个进程ID、一个基本优先级和一个退出代码,而文件对象则拥有一个字节位移、一个共享模式和一个打开模式。

当调用一个用于创建内核对象的函数时,该函数就返回一个用于标识该对象的句柄。

为了使操作系统变得更加健壮,这些句柄值是与进程密切相关的。

内核对象句柄,是用来标识某个内核对象的一个ID 同一个对象的该id对于每个进程是不同的。

4快照

定义:

关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。

快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。

作用:

为存储用户提供了另外一个数据访问通道,当原数据进行在线应用处理时,用户可以访问快照数据,还可以利用快照进行测试等工作。

5模块

为完成某一功能所需的一段程序或子程序;或指能由编译程序、装配程序等处理的独立程序单位;或指大型软件系统的一部分。

6线程

线程(thread)是"进程"中某个单一顺序的控制流。

一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。

在多线程OS中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。

7堆栈

在程序中,堆用于动态分配和释放程序所使用的对象。

在以下情况中调用堆操作:

  1.事先不知道程序所需对象的数量和大小。

  2.对象太大,不适合使用堆栈分配器。

3.堆使用运行期间分配给代码和堆栈以外的部分内存。

$1.2数据类型

在Windows应用程序设计中,既可以使用C的基本数据类型,也可以使用Windows自定义的数据类型,但是要注意的是,Windows自定义的数据类型的关键字都要大写。

具体的数据类型可以在VC++中右击“gotoDefinition”查看。

$1.2各个文件的作用

一般而言,每个C++/C程序通常由头文件(headerfiles)和定义文件(definitionfiles)组成。

头文件作为一种包含功能函数、数据接口声明的载体文件,用于保存程序的声明(declaration),而定义文件用于保存程序的实现(implementation)。

在ProcessInfo示例中:

ProcessInfo.cpp是定义文件,ToolHelp.hResource.hCmnHdr.h都是头文件。

下面依次讲解各个文件

1CmnHdr.h

所有范例程序皆在引入其他标头档前将CmnHdr.h标头档引入。

该文件包含了巨集码、连结器的指示词以及其他贯穿所有范例应用程序的常见程序代码。

当想尝试某些不同的东西时,需要做的事就是修改CmnHdr.h,然后重新建置所有范例应用程序。

2ToolHelp.h

ProcessInfo应用程序中主要是运用了Toolhelp函数来实现的。

作者用C++类封装了一个ToolHelp快照。

使得调用ToolHelp变得更容易一些。

4ProcessInfo.cpp

程序实现的主文件,代码实现中会具体分析。

第二章功能描述

$2.1各个函数的功能

$2.1.1必读函数CreateProcess

要想显示一个进程的信息,就必须要知道这个进程是怎样被创建的。

进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:

1.一个是操作系统用来管理进程的内核对象。

内核对象也是系统用来存放关于进程的统计信息的地方。

2.另一个是地址空间,它包含所有可执行模块或DLL模块的代码和数据。

它还包含动态内存分配的空间。

如线程堆栈和堆分配空间。

BOOLCreateProcess(

PCTSTRpszApplicationName,

 //pszApplicationName指定要创建进程的应用程序名,如在此设置需要全名

  PTSTRpszCommandLine,

 //需要创建进程的命令行参数,一般第一个字符用来存储应用程序名,不需要全地址

  PSECURITY_ATTRIBUTESpsaProcess,

   //描述进程的可继承特征,为SECURITY_ATTRIBUTES结构体

   PSECURITY_ATTRIBUTESpsaThread,

   //描述主线程的可继承性

   BOOLbInheritHandles,

   //被创建的进程是否继承当前进程的内核操作权限

   DWORDfdwCreate,

   //规定如何创建进程

   PVOIDpvEnvironment,

   //pvEnvironment参数用于指向包含新进程将要使用的环境字符串的内存块。

   //在大多数情况下,为该参数传递NULL,使子进程能够继承它的父进程正在使用的一组环境字符串。

   PCTSTRpszCurDir,

   //pszCurDir允许父进程设置子进程的当前驱动器和目录。

   //如果本参数是NULL,则新进程的工作目录将与生成新进程的应用程序的目录相同。

   PSTARTUPINFOpsiStartInfo,

   //位置窗口标题显示名称光标等信息,包含了控制台模式和窗体模式

   //一般使用默认值但是需要初始化长度

   PPROCESS_INFORMATIONppiProcInfo);

当一个线程调用CreateProcess时,系统就会创建一个进程内核对象,其初始使用计数是1。

该进程内核对象不是进程本身,而是操作系统管理进程时使用的一个较小的数据结构。

可以将进程内核对象视为由进程的统计信息组成的一个较小的数据结构。

然后,系统为新进程创建一个虚拟地址空间,并将可执行文件或任何必要的DLL文件的代码和数据加载到该进程的地址空间中。

$2.1.2ProcessInfo.cpp中各个主要的函数作用

这里只是介绍各个函数的作用,具体怎么实现我在代码精度那里有注释。

1.AddText(HWNDhwnd,PCTSTRpszFormat,...)

这个函数的作用是显示大文本框中的内容

2.VOIDDlg_PopulateProcessList(HWNDhwnd))

更新列表显示内容

3.VOIDDlg_PopulateModuleList(HWNDhwnd)

更新模块的显示内容

4.PVOID GetModulePreferredBaseAddr(DWORD dwProcessId, PVOID pvModuleRemote) 

该函数接受一个进程ID和该进程中的一个模块的地址。

然后它查看该进程的地址空间,找出该模块,并读取模块的标题信息,以确定该模块首选的基地址,一个模块始终应该加载到它的首选基地址中。

5.VOIDShowProcessInfo(HWNDhwnd,DWORDdwProcessID)

显示进程的信息

6.VOIDShowModuleInfo(HWNDhwnd,PCTSTRpszModulePath)

显示模块信息

7.BOOLDlg_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam){

设置图标

8.BOOLDlg_OnSize(HWNDhwnd,UINTstate,intcx,intcy)

相应窗口大小改变的回调函数

9.voidDlg_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)

响应菜单选择事件的回调函数

10.INT_PTRWINAPIDlg_Proc(HWNDhwnd,UINTuMsg,WPARAMwParam,LPARAMlParam)

消息映射

$2.2功能

当启动该程序时,便会出现图2-1所示的窗口。

ProcessInfo首先枚举目前正在运行的一组进程,并在顶部的组合框中列出每个进程的名字和ID。

然后,第一个进程被选定,并在较大的编辑控件中显示关于该进程的信息。

可以看到,与该进程的ID一道显示的还有它的父进程的ID,进程的优先级类,以及该进程环境中当前正在运行的线程数目。

当查看这个进程列表时,可以使用VMMap菜单项(当查看模块信息时,该菜单项禁用)。

如果选定VMMap菜单项,可使VMMap示例应用程序启动运行。

该应用程序将在指定进程的地址空间中运行。

模块信息部分显示了映射到进程的地址空间中的模块的列表(可执行文件和DLL文件)。

固定模块是指进程初始化时隐含加载的模块。

如果是显式加载的DLL模块,则显示DLL的使用计数。

第二个域显示映射模块的地址。

如果模块不是在它的首选基地址上映射的,那么首选基地址显示在括号中。

第三个域显示模块的大小(用字节数表示)。

最后显示的是模块的全路径名。

线程信息部分显示了该进程中当前运行的一组线程。

每个线程ID和优先级均被显示。

除了进程信息外,可以选择Modules!

菜单项。

这将使得ProcessInfo能够枚举当前通过系统加载的模块,并将每个模块的名字放入顶部的组合框。

然后ProcessInfo可以选定第一个模块,并显示关于它的信息,如图2-2所示。

 

图2-1

图2–2

$2.3界面显示

1启动exe:

在下拉列表中列出每个进程的名字和ID。

下面则显示选中的进程的具体信息如下图所以:

2查看暴风影音的进程和ID如下图:

3选择Modules!

菜单项。

ProcessInfo能够枚举当前通过系统加载的模块,并将每个模块的名字放入顶部的组合框。

点击暴风的那一栏如下图所示:

 

第三章实现

$3.1代码精读ProcessInfo.cpp

/******************************************************************************

Module:

ProcessInfo.cpp

Notices:

Copyright(c)2000JeffreyRichter

******************************************************************************/

#include"..\CmnHdr.h"/*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1