张林计算机操作系统实验.pdf
《张林计算机操作系统实验.pdf》由会员分享,可在线阅读,更多相关《张林计算机操作系统实验.pdf(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、操 作 系 统 实 验 指 导目 录 1、Windows 2 000进 程 观 测(2 学 时)2、Windows 2000进 程 控 制(2 学 时)3、Windows 2000线 程 同 步(2 学 时)4、Windows 2000线 程 间 通 信(2 学 时)5、Windows 2000内 存 结 构(4 学 时)实 验 一 Windows 2000进 程 观 测 一、背 景 知 识 Windows 2000可 以 识 别 的 应 用 程 序 包 括 控 制 台 应 用 程 序、G U I应 用 程 序 和 服 务 应 用 程 序。控 制 台 应 用 程 序 可 以 创 建 GUI,G
2、 U I应 用 程 序 可 以 作 为 服 务 来 运 行,服 务 也 可 以 向 标 准 的 输 出 流 写 入 数 据。不 同 类 型 应 用 程 序 间 的 惟 一 重 要 区 别 是 其 启 动 方 法。Windows 2000是 以 N T的 技 术 构 建 的,它 提 供 了 创 建 控 制 台 应 用 程 序 的 能 力,使 用 户 可 以 利 用 标 准 的 C+工 具,如 iostream库 中 的 cout和 c in对 象,来 创 建 小 型 应 用 程 序。当 系 统 运 行 时,Windows 2000的 服 务 通 常 要 向 系 统 用 户 提 供 所 需 功 能
3、。服 务 应 用 程 序 类 型 需 要 ServiceMail。函 数,由 服 务 控 制 管 理 器(S C M)加 以 调 用。SC M是 操 作 系 统 的 集 成 部 分,负 责 响 应 系 统 启 动 以 开 始 服 务、指 导 用 户 控 制 或 从 另 一 个 服 务 中 来 的 请 求。其 本 身 负 责 使 应 用 程 序 的 行 为 像 一 个 服 务。通 常,服 务 登 录 到 特 殊 的 LocalSystem账 号 下,此 账 号 具 有 与 开 发 人 员 创 建 的 服 务 不 同 的 权 限。当 令 C+编 译 器 创 建 可 执 行 程 序 时,编 译 器
4、将 源 代 码 编 译 成 O B J文 件,然 后 将 其 与 标 准 库 相 链 接。产 生 的 EX E文 件 是 装 载 器 指 令、机 器 指 令 和 应 用 程 序 的 数 据 的 集 合。装 载 器 指 令 告 诉 系 统 从 哪 里 装 载 机 器 代 码。另 一 个 装 载 器 指 令 告 诉 系 统 从 哪 里 开 始 执 行 进 程 的 主 线 程。在 进 行 某 些 设 置 后,进 入 开 发 者 提 供 的 m ain()、ServiceM ain()或 W inM ain()函 数 的 低 级 入 U点。机 器 代 码 中 包 括 有 控 制 逻 辑,它 所 做 的
5、 事 包 括 跳 转 到 Windows A P I函 数,进 行 计 算 或 向 磁 盘 写 入 数 据 等。Windows允 许 开 发 人 员 将 大 型 应 用 程 序 分 为 较 小 的、互 相 有 关 系 的 服 务 模 块,即 动 态 链 接 库(D L L)代 码 块,在 其 中 包 含 应 用 程 序 所 使 用 的 机 器 代 码 和 应 用 程 序 的 数 据。二、实 验 目 的 通 过 对 Windows 2000编 程,进 一 步 熟 悉 操 作 系 统 的 基 本 概 念,较 好 地 理 解 Windows 2000的 结 构。三、实 验 内 容 与 步 骤 1.简
6、 单 的 控 制 台 应 用 程 序 我 们 先 来 创 建 一 个 名 为“Hello,World”的 应 用 程 序。步 骤 1:登 录 进 入 W indow s操 作 系 统。步 骤 2:启 动 ViuralC+6.01File(文 件)-New(新 建),P ro ject(项 目)-Win32 console Application(Win32 控 制 台 项 目)然 后 填 写 Project name:example 1Location:则 开 始 进 入 Win32 Console Application向 导 程 序 选 择 An empty project;此 时 创 建
7、 一 个 新 的 W in32控 制 台 空 项 目。File(文 件)-New(新 建)-Files(文 件)-C+source files确 认 Add to project:example 1填 写 File:Hello.cpp最 后 选 取“OK”步 骤 3:将 清 单 1-1中 的 程 序 键 入。清 单 1-1 一 个 简 单 的 Windows 2000控 制 台 应 用 程 序/hello 项 目#include void main()std:cout”Hello,Windows 2000 std:endl;步 骤 4:编 译 生 成 H ello.E X E,并 执 行 操
8、作 能 否 正 常 进 行?如 果 不 行,则 可 能 的 原 因 是 什 么?运 行 结 果:能,Hello,Windows 2000步 骤 5:运 行 Hello.EXE程 序,产 生 用 户 键 入 的 一 行 文 字。运 行 结 果:2.GUI应 用 程 序 在 下 面 的 实 验 中,C+编 译 器 创 建 一 个 G U I应 用 程 序,代 码 中 包 括 了 W inM ainO方 法,这 是 G U I类 型 的 应 用 程 序 的 标 准 入 口 点。步 骤 1:File(文 件)-New(新 建)-Project(项 目)-Win32 Application(Win32
9、应 用 项 目)2然 后 填 写 Project name:example2Location:则 开 始 进 入 Win32 Application向 导 程 序 选 择 An empty project;此 时 创 建 一 个 新 的 W in32应 用 空 项 目。File(文 件)-New(新 建)-Files(文 件)C+source files确 认 Add to project:example2填 写 File:l-2.cpp最 后 选 取“OK”步 骤 2:将 清 单 1-2中 的 程 序 键 入。清 单 1-2 Windows 2000的 GUI应 用 程 序/msgbox 项
10、 目#include/标 准 的 include/告 诉 连 接 器 与 包 括 MessageBoxAPI函 数 的 user32库 进 行 连 接#pragma comment(lib,ttuser32.1ibM)/这 是 个 可 以 弹 印 信 息 框 然 后 退 出 的 筒 单 的 应 用 程 序 int APIENTRY WinMain(HINSTANCEHINSTANCELPSTRint(:MessageBox(NULL,“Hello,Windows 2000”,“Greetings”,MB_OK);/*hlnstance*/,I*hPrevInstance*/,/*IpCmdLi
11、ne*/,/*nCmdShow*/)/没 有 父 窗 口/消 息 框 中 的 文 本/消 息 框 标 题/其 中 只 有 一 个 O K按 钮/返 回 0 以 便 通 知 系 统 不 进 入 消 息 循 环 return(O);)3步 骤 3 编 译 生 成 1-2.E X E,并 执 行 或 在“命 令 提 示 符”窗 口 运 行 1-2.EXE文 件:C:1-2.EXE运 行 结 果(试 将 其 中 的 信 息 与 清 单 3-1程 序 的 运 行 结 果 进 行 比 较):_都 弹 出 一 个 对 话 框 hello,wi ndo ws2000_在 清 单 1-2的 GU I应 用 程
12、序 中,首 先 需 要 Windows.h头 文 件,以 便 获 得 传 送 给 W inM ain()和 MessageBox()A P I函 数 的 数 据 类 型 定 义。接 着 的 pragma指 令 指 示 编 译 器/连 接 器 找 到 User32.LIB库 文 件 并 将 其 与 产 生 的 EXE文 件 连 接 起 来。这 样 就 可 以 运 行 简 单 的 命 令 行 命 令 CL MsgBox.CPP来 创 建 这 一 应 用 程 序,如 果 没 有 pragma指 令,则 MessageBox()A P I函 数 就 成 为 未 定 义 的 了。这,指 令 是 Visu
13、al Studio C+编 译 器 特 有 的。接 下 来 是 W inM ain()方 法。其 中 有 四 个 由 实 际 的 低 级 入 口 点 传 递 来 的 参 数。hlnstance参 数 用 来 装 入 与 代 码 相 连 的 图 标 或 位 图 类 的 资 源,无 论 何 时,都 可 用 GetModuleHandle()API函 数 将 这 些 资 源 提 取 出 来。系 统 利 用 实 例 句 柄 来 指 明 代 码 和 初 始 的 数 据 装 在 内 存 的 何 处。句 柄 的 数 值 实 际 上 是 E X E文 件 映 像 的 基 地 址,通 常 为 0 x004000
14、00。下 一 个 参 数 hPrevInstance是 为 向 后 兼 容 而 设 的,现 在 系 统 将 其 设 为 NULL。应 用 程 序 的 命 令 行(不 包 括 程 序 的 名 称)是 IpCmdLine参 数。另 外,系 统 利 用 nCmdShow参 数 告 诉 应 用 程 序 如 何 显 示 它 的 主 窗 口(选 项 包 括 最 小 化、最 大 化 和 正 常)。最 后,程 序 调 用 MessageBoxOAPI函 数 并 退 出。如 果 在 进 入 消 息 循 环 之 前 就 结 束 运 行 的 话,最 后 必 须 返 回 0。3.进 程 对 象 操 作 系 统 将 当
15、 前 运 行 的 应 用 程 序 看 作 是 进 程 对 象。利 用 系 统 提 供 的 惟 一 的 称 为 句 柄(HAN DLE)的 号 码,就 可 与 进 程 对 象 交 互。这 一 号 码 只 对 当 前 进 程 有 效。本 实 验 表 示 了 一 个 简 单 的 进 程 句 柄 的 应 用。在 系 统 中 运 行 的 任 何 进 程 都 可 调 用 GelCurrentProcess()A P I函 数,此 函 数 可 返 回 标 识 进 程 本 身 的 句 柄。然 后 就 可 在 W indows需 要 该 进 程 的 有 关 情 况 时,利 用 这 一 句 柄 来 提 供。步 骤
16、 1:File(文 件)-New(新 建)-Project(项 目)-Win32 console Application(Win32 控 制 台 4项 目)然 后 填 写 Project name:example3Location:则 开 始 进 入 Win32 Console Application向 导 程 序 选 择 An empty project;此 时 创 建 一 个 新 的 W in32控 制 台 空 项 目。File(文 件)-New(新 建)-Files(文 件)-C+source files确 认 Add to project:example 1填 写 File:Hello
17、.cpp最 后 选 取“OK”步 骤 2:将 清 单 1-3中 的 程 序 键 入。清 单 3 获 得 和 使 用 进 程 的 句 柄/prochandle 项 目#include#include/确 定 自 己 的 优 先 权 的 简 单 应 用 程 序 void main()(/从 当 前 进 程 中 提 取 句 柄 HANDLE hProcessThis=:GetCurrentProcess();/请 求 内 核 提 供 该 进 程 所 属 的 优 先 权 类 DWORD dwPriority=:GetPriorityClass(hProcessThis);/发 出 消 息,为 用 户
18、描 述 该 类 std:cout”Current process priority:;switch(dwPriority)(case HIGH_PRIORITY_CLASS:std:cout H igh;break;case NORMAL_PRIORITY_CLASS:5std:cout ttNormaF,;break;case IDLE_PRIORITY_CLASS:std:cout“Idle”;break;case REALTIME_PRIORITY_CLASS:std:cout”Realtime”;break;default:std:cout“unknown”;break;)std:co
19、ut std:endl;)清 单 1-3中 列 出 的 是 一 种 获 得 进 程 句 柄 的 方 法。对 于 进 程 句 柄 可 进 行 的 惟 一 有 用 的 操 作 是 在 A P I调 用 时,将 其 作 为 参 数 传 送 给 系 统,正 如 清 单 1-3中 对 GetPriorityClassO A P I函 数 的 调 用 那 样。在 这 种 情 况 下,系 统 向 进 程 对 象 内“窥 视”,以 决 定 其 优 先 级,然 后 将 此 优 先 级 返 回 给 应 用 程 序。OpenProcess()和 CreateProcess()A P I函 数 也 可 以 用 于 提
20、 取 进 程 句 柄。前 者 提 取 的 是 已 经 存 在 的 进 程 的 句 柄,而 后 者 创 建 一 个 新 进 程,并 将 其 句 柄 提 供 出 来。步 骤 3:编 译 生 成 1-3.E X E,并 执 行 或 在“命 令 提 示 符”窗 口 运 行 1-3.EXE文 件:运 行 结 果:Current process priority:N ormal_步 骤 4:File(文 件)-New(新 建)-Project(项 目)-Win32 console Application(Win32 控 制 台 项 目)然 后 填 写 Project name:example3Locati
21、on:则 开 始 进 入 Win32 Console Application向 导 程 序 选 择 An empty project;此 时 创 建 一 个 新 的 W in32控 制 台 空 项 目。File(文 件)-New(新 建)-Files(文 件 又 C+source Ries6确 认 Add to project:example 1填 写 File:Hello.cpp最 后 选 取“OK”步 骤 5:将 清 单 1-4中 的 程 序 键 入。清 单 1-4显 示 如 何 找 出 系 统 中 正 在 运 行 的 所 有 进 程,如 何 利 用 OpenProcess()A P I函
22、 数 来 获 得 每 一 个 访 问 进 程 的 进 一 步 信 息。清 单 4 利 用 句 柄 查 出 进 程 的 详 细 信 息/proclist 项 目#include windows.h#include#include/当 在 用 户 模 式 机 内 核 模 式 下 都 提 供 所 耗 时 间 时,在 内 核 模 式 下 进 行 所 耗 时 间 的 6 4 位 计 算 的 帮 助 方 法 DWORD GetKernelModePercentage(const FILETIME&ftKemel,const FILETIME&ftUser)(/将 FILETIME结 构 转 化 为 6 4
23、位 整 数 ULONGLONG qwKernel=(ULONGLONG)ftKernel.dwHighDateTime)32)+ftKernel.dwLowDateTime;ULONGLONG qwUser=(ULONGLONG)ftUser.dwHighDateTime)32)+ftUser.dwLowDateTime;/将 消 耗 时 间 相 加,然 后 计 算 消 耗 在 内 核 模 式 下 的 时 间 百 分 比 ULONGLONG qwTotal=qwKernel+qwUser;DWORD dwPct=(DWORD)(ULONGLONG)100*qwKemel)/qwTotal);r
24、eturn(dwPct);7/以 下 是 将 当 前 运 行 进 程 名 和 消 耗 在 内 核 模 式 下 的 时 间 百 分 数 都 显 示 出 来 的 应 用 程 序 void main()/对 当 前 系 统 中 运 行 的 进 程 拍 取“快 照”HANDLE hSnapshot=:CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,/提 取 当 前 进 程 0);/如 果 是 当 前 进 程,就 将 其 忽 略/初 始 化 进 程 入 口 PROCESSENTRY32 pe;:ZeroMemory(&pe,sizeof(pe);pe.dwSize
25、=sizeof(pe);/按 所 有 进 程 循 环 BOOL bMore=:Process32First(hSnapshot,&pe);while(bMore)(/打 开 用 于 读 取 的 进 程 if(hProcess!=NULL)(HANDLE hProcess=:OpenProcess(PROCESS_QUERYJNFORMATION,/指 明 要 得 到 信 息 FALSE,/不 必 继 承 这,句 柄 pe.th32ProcessID);/要 打 开 的 进 程/找 出 进 程 的 时 间 FILETIME ftCreation,ftExit,ftKernelMode,ftUse
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 操作系统 实验
限制150内