操作系统实验报告_第1页
操作系统实验报告_第2页
操作系统实验报告_第3页
操作系统实验报告_第4页
操作系统实验报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1 / 14 操作系统实验报告 计算机操作系统 实验报告 班级: 姓名: 学号: 实验一 进程控制与描述 一、实验目的 通过对 Windows 2000 编程,进一步熟悉操作系统的基本概念,较好地理解 Windows 2000 的结构。通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解 Windows 2000中进程的“一生”。 二、实验环境 硬件环境:计算机一台,局域网环境; 软件环境: Windows 2000 Professional、 Visual C+ 企业版。 三、实验内容和步骤 第一部分 : 程序 1-1Windows 2000 的 GUI 应用程序 Windows 2000 Professional 下的 GUI应用程序,使用 Visual C+编译器创建一个 GUI 应用程序,代码中包括了WinMain方法,该方法 GUI类型的应用程序的标准入口点。 # include # pragma comment int APIENTRY 2 / 14 WinMain ; /* hInstance */ , /* hPrevInstance */, /* lpCmdLine */, /* nCmdShow */ ) return ; 在程序 1-1 的 GUI 应用程序中,首先需要头文件,以便获得传送给 WinMain 和 MessageBox API 函数的数据类型定义。 接着的 pragma 指令指示编译器 /连接器找到库文件并将其与产生的 EXE文件连接起来。这样就可以运行简单的命令行命令 CL 来创 建这一应用程序,如果没有 pragma指令,则 MessageBox API 函数就成为未定义的了。这一指令是Visual Studio C+ 编译器特有的。 接下来是 WinMain 方法。其中有四个由实际的低级入口点传递来的参数。 hInstance 参数用来装入与代码相连的 图 标 或 位 图 一 类 的 资 源 , 无 论 何 时 , 都 可 用GetModuleHandle API 函数将这些资源提取出来。系统利用实例句柄来指明代码和初始的数据装在内存的何处。句柄的数值实际上是 EXE 文件映像的基地址,通常为 0x00400000。下一个 参数 hPrevInstance 是为向后兼容而设的,现在系统将其设为 NULL。应用程序的命令行 是 lpCmdLine 参数。另外,系统利用 nCmdShow 参数告诉应用程序如何显示它的主窗口 。 3 / 14 最后,程序调用 MessageBox API 函数并退出。如果在进入消息循环之前就结束运行的话,最后必须返回 0。 先分析程序功能,再写出运行结果: 操作系统将当前运行的应用程序看作是进程对象。利用系统提供的惟一的称为句柄 的号码,就可与进程对象交互。这一号码只对当前进程有效。 在 系 统 中 运 行 的 任 何 进 程 都 可 调 用GetCurrentProcess API 函数,此函数可返回标识进程本身的句柄。然后就可在 Windows需要该进程的有关情况时,利用这一句柄来提供。 程序 1-2: 获得和使用进程的句柄 # include # include void main HANDLE hProcessThis = : GetCurrentProcess ; DWORD dwPriority = : GetPriorityClass ;std : cout case HIGH_PRIORITY_CLASS: std : cout case NORMAL_PRIORITY_CLASS: std : cout case IDLE_PRIORITY_CLASS: std : cout case REALTIME_PRIORITY_CLASS: std : cout std : cout ” ; break; std : cout 程序 1-2 中列出的是一种获得 进程句柄的方法。对于进程句柄可进行的惟一有用的操作是在4 / 14 API 调用时,将其作为参数传送给系统,正如程序 1-2 中对GetPriorityClass API 函数的调用那样。在这种情况下,系统向进程对象内“窥视”,以决定其优先级,然后将此优先级返回给应用程序。 OpenProcess 和 CreateProcess API 函数也可以用于提取进程句柄。前者提取的是已经存在的进程的句柄,而后者创建一个新进程,并将其句柄提供出来。 先分析程序功能,再写出运行结果: 程序 1-3显示如何找出 系统中正在运行的所有进程,如何利用 OpenProcess API 函数来获得每一个访问进程的进一步信息。 程序 1-3 利用句柄查出进程的详细信息 / proclist 项目 # include # include # include DWORD GetKernelModePercentage ULONGLONG qwKernel = ) ;ULONGLONG qwUser = ) ; ULONGLONG qwTotal = qwKernel + qwUser;DWORD dwPct = 100*qwKernel) / qwTotal) ;return ; void main 5 / 14 HANDLE hSnapshot = : CreateToolhelp32Snapshot ; PROCESSENTRY32 pe; : ZeroMemory ) ; = sizeof ; BOOL bMore = : Process32First ;while HANDLE hProcess = : OpenProcess ; if FILETIME ftCreation, ftExit, ftKernelMode, ftUserMode; : GetProcessTimes ; DWORD dwPctKernel = : GetKernelModePercentage ; std : cout : CloseHandle ; bMore = : Process32Next ; 程序 1-3程序首先利用 Windows 2000 的新特性,即工具帮助库来获得当前运行的所有进程的快照。然后应用程序进入快照中的每一个进程,得到其以 PROCESSENTRY32 结构表示的属性。这一结构用来向 OpenProcess API 函数提供进程的 ID。 Windows 跟踪每一进程的有关时间,示例中是通过打开的进程句柄和 GetProcessTimes API 来直询得到有关时间的。接下来,一个定制的帮助函数取得了几个返回的数值,然后计算进程在内核模式下消耗的时 间占总时间的百分比。程序的其余部分比较简单,只是将有关信息显示给用户,清除进程句柄,然后继续循环,直到所有进程都计算过为止。 先分析程序功能,再写出运行结果: 第二部分:进程的“一生” 6 / 14 1、 创建进程 /创建子进程 # include # include # include void StartClone TCHAR szFilenameMAX_PATH ; : GetModuleFileName ;TCHAR szCmdLineMAX_PATH ; : sprintf ;STARTUPINFO si; : ZeroMemory , sizeof ) ; = sizeof ; PROCESS_INFORMATION pi; BOOL bCreateOK = : CreateProcess ;if : CloseHandle ; : CloseHandle ; int main 实 实验课程:学生姓名 :学 号:专业班级: 验 报 告 计算机操作系统 2016年 11月 3日 目 录 一、 实验一 ?02-06 二、 实验二 ?07-17 三、 实验三 四、 实验四 五、 实验五 ?18-24 ?25-28 ?29-37 7 / 14 1 南昌大学实验报告 -操作系统安装及其接口环境 学生姓名:学 号: 专业班级:实验类型: 验证 综合 设计 创新实验日期: 实验成绩: 一、实验目的 熟悉 Windows/Linux操作系统的安装过程与安装方法,并掌握该操作系统所提供的用户接口环境,并为后续实验做好编程环境准备。 二、实验内容 1、熟悉 Windows/Linux 操作系统的安装过程与安装方法,并掌握该操作系统所提供的用户接口环 境,通过系统提供的用户管理程序、查看系统中的用户情况、进程、线程、内存使用情况等,学会使用它进行监视进程的状况、系统资源的使用情况及用户情况。并为后续实验做好编程环境准备。 2、用 C语言编写一小段程序,使其可以通过某个系统调用来获得 OS提供的某种服务。 三、实验要求 1 了解所安装的操作系统对软硬件资源的具体要求; 2 机器最低硬件配置要求; 3 操作系统所提供的用户接口环境的熟悉; 8 / 14 4 了解主要 BIOS CMOS 参数的含义及其设置方法; 5 掌握程序编写中系统调用的方法。 四、主要实验步骤 1 window xp操作系统的安装与安装方法 打开的光盘中找到所需文件的正确路径,这时会打开“欢迎使用Microsoft Windows XP”窗口,如图 1 所示。 图 1 “欢迎使用 Microsoft Windows XP”窗口 在这个窗口的“您希望做什么?”选项组中,选择“安装可选的 Windows组件”选项, 2 对系统组件进行自定义安装。 选择“安装 Microsoft Windows XP”选项,可以打开中文版 Windows XP 的安装界面,如图 2 所示。 图 2 “欢迎使用 Windows 安装程序”对话框 在界面左侧显示安装的进程以及安装总共所需要的时间,在右侧的“欢迎使用 Windows 安装程序”对话框中,可以选择执行哪一类型的安装,在“安装类型”下拉列表框有“升级安装”和“全新安装”两种选项,在此提醒用户“升级安装”会保留已安装的程序、数据文件和现有的计算机设置,而“全新安装”将替换原有的 Windows或在不同的硬盘或磁盘分区上安装 Windows,它会造成硬盘上所有数据的丢失。在这里选择“升级安装”,单击“下一步”按钮继续。 9 / 14 在接下来的对话框中要求阅读许可协议,当看完此协议后,可以选择“我接受这个协议”单选项,只有接受此协议,才能继续进行安装,如图 3 所示。 图 3 “许可协议”对话框 在“许可协议”对话框中进行选择后,单击“下一步”按钮打开“您的产品密钥”对话框,要求用户输入所安装的 Windows产品的密钥。在输入时用户要确保所输内容正确无误,否则安装过程不能继续,如图 4 所示。 3 图 4 “您的产品密钥”对话框 在“产品密钥”文本框中输入正确的内容后,单击“下一步”按钮可以打开“获得更新的安装程序文件”对话框,选择“否,跳过这一步继续安装 Windows”单选项,然后单击“下一步”按钮继续安装过程,如图 5所示。 图 5 “获得更新的安装程序文件”对话框 这时已经进入“准备安装”阶段,系统会开始复制安装所需要的文件,在“正在复制安装文件”中显示了文件复制的进度,在界面的右侧将出现中文版 Windows XP 的新增功能的介绍,如果用户在此时要退出安装,可 以在键盘上按下 Esc 键,即可取消安装程序,如图 6 所示。 图 6 复制安装文件 4 10 / 14 操作系统实验报告 学号 姓名 班级 实验一实验报告 【实验名称】:并发程序设计 【实验目的】:掌握在程序中创建新进程的方法, 观察并理解多道程序并发执行 的现象。 【实验原理】: fork:建立子进程。子进程得到父进程地址空间的一个复制。 返回值:成功时,该函数被调用一次,但返回两次,fork对 子进程返回 0,对父进程返回子进程标识符。不成功时对父进程返回 -1,没有子进程。 【实验内容】:首先分析一下程序运行时其输出结果有哪几种可能性,然后实际 调试该程序观察其实际输出情况,比较两者的差异,分析其中的原因。 void main intx=5; if ) x+=30; printf ; else printf; printf; 11 / 14 【实验要求】:每个同学必须独立完成本实验、提交实验报 告、源程序和可执行 程序。实验报告中必须包含预计的实验结果,关键代码的分析,调试记录,实际的实验结果,实验结果分析等内容。 【预计的实验结果】 35 5 35 5 【关键代码分析】 1,代码主要由 fork 函数和一个 if else 条件分支语句组成。 2, fork 函数,它是 Linux的系统调用。 函数定义: int fork;返回值: 子进程中返回 0,父进程中返回子进程 ID,出错返回 -1 函数说明: 一个现 有进程可以调用 fork 函数创建一个新进程。由 fork创建的新进程 被称为子进程。 fork 函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回 0值而父进程中返回子进程 ID。 子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间12 / 14 的“副本”,这意味着父子进程间不共享这些存储空间,它们之间共享的存储空间只有代码段。 linux 将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。 3,父进程和子进程的代码段都是上面的所有代码,由 定义可知不过子进程的代码只从创建此子进程那里开始执行。也就是从 if )语句开始,出现了子进程,两个进程并发执行。 当这个程序执行 if) 时,操作系统创建一个新的进程,并且在进程表中相应为它建立一个新的 PCB表项。其中子进程从父进程继承到了大部分的参数。也有独有的参数,如进程号等。但是此后他们是独立的两个进程。在子进程里创建的东西是子进程的,在父进程创建的东西是父进程 的。可以完全看成普通的两个进程。所以在执行printf; 的时候,父子进程当然都会执行它,因为他们本身程序段里都有这句代 码。 【调试记录】 在红帽终端里做 gdb调试 在第五行加入断点,执行 run 得到 5 5,这是子进程执行的结果。再执行 next得到 35 35,这是父进程的结果。这里可以看出,由父进程创建的子进程先执行完毕,但是宏观上是并发执行。 【实际的实验结果】 5 5 35 35 【实验结果分析】 13 / 14 从实际结果来看,子进程比父进程先执行完,但是由 fork 函数,我们可知,两者优先级应该是一样的。至于哪个可能先执行,可能和操作系统的具体调度算法

温馨提示

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

评论

0/150

提交评论