2013操作系统实验指导书

《 操作系统》
实验指导书
适用专业:   计算机科学与技术
      网络工程   
      软件工程   
   
  太原科技大学计算机科学与技术学院
  2013年 3 月
前  言
操作系统是计算机的核心和灵魂。操作系统软件的设计对整个计算机的功能和性能起着至关重要的作用,所以此门课也是必不可少的,是面向计算机科学与技术、网络工程、软件工程
等大多数计算机专业本科生开设的一门计算机专业课程。
操作系统是计算机系统的核心,《操作系统》课程是计算机科学与技术专业的重要必修课。本课程的目的是使学生掌握现代计算机操作系统的基本原理、基本设计方法及实现技术,具有分析现行操作系统和设计、开发实际操作系统的基本能力。
操作系统实验是操作系统课程的重要组成部分,属于学科基础实验范畴。作为与相关教学内容配合的实践性教学环节,应在操作系统理论课教学过程中开设。
操作系统是计算机科学与技术专业必修的专业基础课程,操作系统实验的作用是:理解操作系统的设计和实现思路,掌握典型算法。基本要求是:理解进程的概念,理解死锁,掌握银行家算法;掌握请求页式存储管理的实现原理及页面置换算法。学生应具有高级语言编程能力、具有数据结构等基础知识。


实验一    windows进程的创建
实验学时:2
实验类型:验证
实验要求:必修
一、实验目的
本课题实习的目的是,加深对wiundows进程概念及进程管理各部分内容的理解;熟悉windows进程管理API的使用。
二、实验要求
1.将源程序编译、链接后形成和文件。
2.在命令行方式下输入……> master  slave回车,将在master进程中创建slave进程,观察程序运行的结果。
3.自己设计一个小程序,完成在master进程中启动该程序的操作。
4.撰写上机报告。
三、实验内容
下面程序是两个简单的控制台应用程序,第一个程序( MASTER )运行第二个程序( SLAVE ) , 并进入睡眠。 SLAVE 程序从命令行读取MASTER程序的进程 ID(PID), 并等待 MASTER 程序终止之后,SLAVE做了一些事情之后,也结束。这些程序用到了以下几个重要技术:
pigi
1.使用 CreateProcess
CreateProcess 函数
⑴ 函数原型:
BOOL CreateProcess( LPCTSTR lpApplicationName , LPTSTR lpCommandLine , LPSECURITY_ATTRIBUTES lpProcessAttributes , LPSECURITY_ATTRIBUTES lpThreadAttributes ,BOOL bInheritHandles , DWORD dwCreationFlags , LPVOID lpEnvironment ,
LPCTSTR lpCurrentDirectory , LPSTARTUPINFO lpStartupInfo , LPPROCESS_INFORMATION lpProcessInformation );
⑵ 参数:
lpApplicationName :指向一个以空结尾的串,他指定了要执行的模块
lpCommandLine :指向一个以空结尾的串,该串定义了要执行的命令行。
lpProcessAttributes :指向一个 SECURITY_ATTRIBUTES 结构,该结构决定了返回的句柄是否可被子进程继承。
lpThreadAttributes :指向一个 SECURITY_ATTRIBUTES 结构,该结构决定了返回的句柄是否可被子进程继承。
bInheritHandles , : 表明新进程是否从调用进程继承句柄。
dwCreationFlags : 定义控制优先类和进程创建的附加标志。
lpEnvironment :指向一个新进程的环境块。
lpCurrentDirectory :指向一个以空结尾的串,该串定义了子进程的当前驱动器和当前目录。
lpStartupInfo :指向一个 STARTUPINFO 结构,该结构定义了新进程的主窗口将如何显示。
lpProcessInformation : 指向 PROCESS_INFORMATION 结构,该结构接受关于新进程的表示信息。
⑶ 返回值:
若函数调用成功,则返回值不为 0 ;若函数调用失败,返回值为 0 。
在上述参数中,参数 lpStartupInfo 是 STARTUPINFO 结构。可以用来设置控台的标题,新窗口的的初始大小和位置,及重定向标准输入和输出。新程序通常可以忽略多数这些数据项,如果选择那样做的话。可以规定该结构体中的标志,已表明要设置的数据段。有时,不想设置任何信息,也必须传递一个有效的指针给空结构(确定设置大小到 cb ,及设置 dwFlags 成员为 0 )。参数 lpProcessInformation 返回进程和线程句柄,还包括进程
和线程 ID 。这些句柄拥有在参数 lpProcessAttributes 和 lpThreadAttributes 中规定的访问。
要注意,针对 CreateProcess 的一些参数对控制台应用程序是特定的,而其它参数则对各种应用程序有用。大多数情况下,并不一定要填入 STARTUPINFO 结构,但无论如何必须提供它。其返回值是布尔型的,而真正感兴趣的返回值发生于作为参数传送的结构中( PROCESS_INFORMATION )。 CreateProcess 返回该结构中的进程 ID 及其句柄,以及初始线程 ID 及其句柄。可以将 ID 发送到其它进程,或使用句柄来控制新进程。
粘扣
2.使用 WaitForSingleObject
荸荠去皮机WaitForSingleObject 的目的是要确定句柄是否处于发送信号的状态。当进程结束时,进程句柄发出信号。当调用 WaitForSingleObject 时,就规定进程句柄和超时值,如果超时为 0 ,则该命令就立刻返回,且能够确定进程的状态。如果超时是常数 INFINITE ,则命令就不返回,直到目标进程退出为止。当然,还可以规定超时值,其导致该命令等待要结束的进程一段时间。如果进程在超时届满前结束,该命令就返回,并指出句柄在发射信号状态。否则,就返回一个负值。不管句柄在何种状态, WaitForSingleObject 将成功返回,
没有错误发生。要确定进程的状态,就必须比较返回值为 WAIT_OBJECT_0 (已发信号的)和 WAIT_TIMEOUT (未发信号的)。真正的错误返回值为 WAIT_FAILED 。另外可能的返回值是 WAIT_ABANDONED ,是不会看到何时处理进程。要等待一个进程,就必须带有 SYNCHRONIZE 特权的打开局柄。
这里要注意,进程 ID 与进程句柄不同。不能简单地在进程之间传送句柄,这意味着除非有句柄,否则不能从外部进程直接操纵一个进程。不过 OpenProcess 命令将允许任何程序(有足够的安全特权)将进程标示符(可以用来于其它进程通信)变换为进程句柄。通过调用 GetCurrentProcessId ,还可以了解当前进程标示符。如果要想与其他无关的进程共享,以使能够打开进程句柄,这是非常有用的。但调用 OpenProcess 时,可以请求对进程的访问。对每种进程的访问,也许有或也许没有访问要打开进程的安全性,于是试图请求是仅仅需要的。例如,如果要了解进程的返回代码,就需要 PROCESS_QUERY_INFORMATION 的访问。要终止进程,就必须有 PROCESS_TERMINATE 的访问。
3.源程序清单:
/
/master.cpp
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>
void main(int argc,char *argv[]) 气门座圈
{
ip调度系统char cmd[128];
if (argc!=1)
strcpy(cmd,argv[1]);
else
strcpy(cmd,"");
int pid=GetCurrentProcessId(); cout<<"process ID:"<<pid<<endl;
cout<<"Master 准备启动:"<<cmd<<"\n";
sprintf(cmd+strlen(cmd), " %d",pid);
cout.flush();
STARTUPINFO info;
memset(&info,0,sizeof(info));
info.cb=sizeof(info);
PROCESS_INFORMATION pinfo;
if(!CreateProcess(NULL,cmd,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&info,&pinfo))
{
cout<<"Master: 从进程"<<cmd<<" 没有到\n";
cout<<"Master:重新输入从进程名\n";
}
cout<<"Master:睡觉去喽……………………………………………………………………\n";
cout.flush();
Sleep(10000);静压实验
for(int i=1;i<5;i++)cout<<"睡醒了\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n";
cout<<"Master:刷牙、洗脸、吃饭\n";
cout<<"Master:结束!!!!!\n";

本文发布于:2024-09-21 02:49:11,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/102851.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   句柄   结构   程序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议