OS实验一
(完整word版)操作系统实验报告.实验一 WINDOWS进程初识
操作系统教程实验指导书实验一WINDOWS进程初识1、实验目的(1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。
(2)掌握WINDOWS API的使用方法。
(3)编写测试程序,理解用户态运行和核心态运行。
2、实验内容和步骤(1)编写基本的Win32 Consol Application步骤1:登录进入Windows,启动VC++ 6.0。
步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。
创建一个新的控制台应用程序工程。
步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。
步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。
编译成可执行文件。
步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe运行结果 (如果运行不成功,则可能的原因是什么?) :答:运行成功,结果:(2)计算进程在核心态运行和用户态运行的时间步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。
步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。
步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。
操作系统实验报告
篇一:操作系统实验报告完全版《计算机操作系统》实验报告班级:姓名:学号:实验一进程控制与描述一、实验目的通过对windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解windows 2000的结构。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解windows 2000中进程的“一生”。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional、visual c++6.0企业版。
三、实验内容和步骤第一部分:程序1-1windows 2000 的gui 应用程序windows 2000 professional下的gui应用程序,使用visual c++编译器创建一个gui应用程序,代码中包括了winmain()方法,该方法gui类型的应用程序的标准入口点。
:: messagebox( null, “hello, windows 2000” , “greetings”,mb_ok) ;/* hinstance */ , /* hprevinstance */, /* lpcmdline */, /* ncmdshow */ )return(0) ; }在程序1-1的gui应用程序中,首先需要windows.h头文件,以便获得传送给winmain() 和messagebox() api函数的数据类型定义。
接着的pragma指令指示编译器/连接器找到user32.lib库文件并将其与产生的exe文件连接起来。
这样就可以运行简单的命令行命令cl msgbox.cpp来创建这一应用程序,如果没有pragma指令,则messagebox() api函数就成为未定义的了。
这一指令是visual studio c++ 编译器特有的。
接下来是winmain() 方法。
其中有四个由实际的低级入口点传递来的参数。
操作系统实验指导书
操作系统实验指导书实验⼀操作系统⽤户接⼝实验⼀、实验⽬的熟悉操作系统的命令接⼝、图形⽤户接⼝和程序接⼝。
⼆、实验内容:1、使⽤操作系统的命令接⼝。
使⽤Windows常⽤命令:dir 、md、copy、date、help,显⽰这些命令的结果,并解释这些命令的作⽤。
图1-1 命令控制台图1-2 windows常⽤命令图1-3 windows常⽤命令图1-4 windows常⽤命令使⽤图1-5 windows常⽤命令使⽤2、使⽤操作系统的程序接⼝。
VB环境下:编制⼀⼩程序,使其可通过某个系统调⽤来获得os 提供的某种服务,如打开控制⾯板:Shell "rundll32.exe Shell32.dll,Control_RunDLL", 1VC环境下:⽤C语⾔编制⼀个⼩程序,使其可通过Localtime( )系统调⽤来获得OS提供的时间和⽇期。
3、使⽤操作系统的图形⽤户接⼝(略)。
三、思考:OS向⽤户提供的命令接⼝、图形⽤户接⼝和程序接⼝分别适⽤于哪些场合?实验⼆进程创建与撤消⼀、实验⽬的1、加深对进程概念的理解和进程创建与撤消算法;2、进⼀步认识并发执⾏的实质。
⼆、实验内容本实验完成如下三个层次的任务:(1)系统级—以普通⽤户⾝份认识windows的进程管理。
通过windows的“任务管理器”观察进程的状态,进⾏进程的创建、切换和撤销。
(2)语⾔级—以普通程序员⾝份认识⾼级语⾔VC++/Java/VB的进程创建与撤销⼯具。
(3)模拟级—以OS设计师⾝份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。
三、实验步骤1、windows的进程管理当前状态图2-1 windows任务管理器切换前图2-2 windows任务管理器切换后图2-3 windows任务管理器撤销图2-4 windows任务管理器2、VC++进程创建与撤销⼯具Windows所创建的每个进程都从调⽤CreateProcess() API函数开始,该函数的任务是在对象管理器⼦系统内初始化进程对象。
操作系统实验报告心得体会范文大全(8篇)
操作系统实验报告心得体会范文大全(8篇)操作系统实验报告心得体会范文大全篇一:通过这一学期学习,才慢慢接触专业课。
刚开始觉得挺难得我都有点不想学这个专业了,慢慢的我觉得有趣多了。
虽然我学的不是很好,最起码我能给自己装系统了。
我给自己的电脑装过window7、xp系统。
从一开始连个cmos设置都不会进去,到现在能装各种机型的系统。
让我最高兴的事是我会建立网站了,以及能制作出复杂点的,漂亮的网页了。
从刚开始学装windowserver20xx时,我真的懵懵懂懂的,那开始是真的不想学这个专业了,那段时间还学java编程,我真的快崩溃了,后悔自己干嘛学这个专业,我根本就是没有天赋,感觉大学这四年完蛋了,大一大二还没有感觉,现在真实的感受到了,但后来发现,我是越来越感觉有兴趣了,只要肯付出课后肯钻研,就一定会有一点收获的。
通过这次网页课程设计激发学习兴趣,调动学习的自觉性,自己动脑、动手,动口,运用网络资源,结合教材及老师的指导,通过自身的实践,创作出积聚个人风格、个性的个人网页。
总体来说,整个学期的学习过程,我学会了很多知识,在此次网页设计中,我充分利用了这次设计的机会,全心全意投入到网页世界,去不断的学习,去不断的探索;同时去不断的充实,去不断的完善自我,在网络的天空下逐渐的美化自己的人生!做好页面,并不是一件容易的事,它包括个人主页的选题、内容采集整理、图片的处理、页面的排版设置、背景及其整套网页的色调等很多东西。
本次课程设计不是很好,页面过于简单,创新意识反面薄弱,这是我需要提高的地方。
需要学的地方还有很多,需要有耐心、坚持,不断的学习,综合运用多种知识,才能设计出好的web页面。
总体来说,通过这次的对网页和网站课程设计,有收获也有遗憾、不足的地方,但我想,我已经迈入了网页设计的大门,只要我再认真努力的去学习,去提高,凭借我对网页设计的热情和执着,我将来设计出的网页会更加专业,更完善。
操作系统实验报告心得体会范文大全篇二:转眼间,学习了一个学期的计算机操作系统课程即将结束。
实验一操作系统用户接口实验
实验一:操作系统用户接口实验班级:计科f1406 姓名:王家平学号:2014160106191. 实验目的:熟悉操作系统的命令接口、图形接口和程序接口2. 实验内容:1)使用linux常用命令:pwd、ls 、cd、mkdir、copy、date,显示这些命令的结果,并解释这些命令的作用;2)用C语言编制一个小程序,使其可通过Localtime( )系统调用来获得OS提供的时间和日期。
3.实验代码:#include<time.h>main(){char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};time_t timep;struct tm *p;time(&timep); /*取得当地时间*/p=localtime(&timep); /*转换时间*/printf ("%d%d%d ", (1900+p->tm_year),( 1+p->tm_mon),p->tm_mday);printf("%s%d:%d:%d\n", wday[p->tm_wday],p->tm_hour,p->tm_min, p->tm_sec);}运行结果:4.实验感想:本次实验的实验目的是熟悉操作系统的命令接口、图形接口和程序接口。
在实验中使用了linux的常用命令:pwd、ls 、cd、mkdir、copy、date等命令。
而且还用C语言在linux系统下编写了一个小程序,使其可通过Localtime( )系统调用来获得OS提供的时间和日期。
通过这次实验我深刻的了解到了操作系统是用户与计算机硬件系统之间的接口,用户通过操作系统的帮助,可以快速、有效和安全、可靠地操纵计算机系统中的各类资源,以处理自己的程序。
OS实验一
否
进程时间 片数为0? 是 撤消该进程
撤消该进程
否
进程队列空?
是
否 结束 是 进程队列空?
2、时间片轮转算法说明 (1)PCB的结构(如下图所示):轮转法中,设PCB的结构如 右图所示,其中各数据项的含义如下: Id:进程标识符号,取值1—5。 Span:在某一轮中,分配给此进程的时间片数,取值1—3。 Used:现运行进程在本轮执行过程已用的时间片数。 Need:进程尚需的CPU时间数,初值表示该进程需要运行的 总时间,取值范围5—10。并随机产生,每运行一个时间片 need减1;need为0则进程结束。 Status:进程状态R(运行),W(就绪),F(完成);初始时 所有进程处于就绪状态。 Next:指向就绪队列中下一个进程的PCB的指针。
OS实验一
进程调度
1、实验目的:本次实验要求用C语言编写一个进程调度 模拟程序,使用优先级或时间片轮转法实现进程调 度。目的是理解进程调度算法及其应用。 2、实验环境:Turbo C 2.0/3.0或VC++6.0 3、实验学时: 4学时,必做实验。 4、实验内容 1)设计有5个进程并发执行的模拟调度程序,每 个程序由一个PCB表示。 2)模拟调度程序可任选两种调度算法之一实现。 3)程序执行中应能在屏幕上显示出各进程的状态 变化,以便于观察调度的整个过程。
RUN
1
HEAD
Tail
3
5
… …
2
0 …
…
RUN ----当前运行进程指针; HEAD──就绪进程队列的PCB链链首指针; TAIL──就绪进程队列的PCB链链尾指针;
… R
W
W
W
输入调度算法Alg
pritity
物联网操作系统原理(LiteOS)12内核实验一
• 在创建成功时,返回LOS_OK • 创建失败,根据失败原因返回对应的返回值
4
任务入口函数
• 部分代码解析
• Example01_Task#:任务#的入口函数
• 周期性打印内容并持续占用CPU • 若没有轮询执行,任务将持续占用CPU,其他任务无法执行
static VOID * Example01_Task1(UINT32 uwArg) { const CHAR *pcTaskName = "Task 1 is running\n"; UINT32 i; for (;;) { puts(pcTaskName); for (i = 0; i < TASK_LOOP_COUNT; i++) { // 占用CPU耗时运行 } }
printf("Example_Task1 create Failed!\n"); return LOS_NOK; }
11
任务入口函数
• 期望运行结果
• 两个任务轮流输出不同内容
12
任务优先级抢占
• 实验目标
• 掌握任务优先级的设置 • 理解高优先级任务对低优先级任务的抢占
• 实验内容
• 创建两个不同优先级的任务 • 通过入口函数和参数定义两个任务不同的功能
• 实验内容
• 创建两个同优先级的任务 • 通过入口函数给任务指定不同的功能
3
任务入口函数
• 任务创建函数LOS_TaskCreate
• 创建新任务 • 参数:任务ID TskID
• 在创建成功后会赋值为实际分配到的任务ID
• 参数:任务属性 params
• 定义了任务的各个属性,在下个实验会有详细分析 • 任务属性中可以指定入口函数,即任务实际执行的函数
os实验要求
利用程序设计语言编程,模拟并发执行进程的同步
与互斥(要求:进程数目不少于 ቤተ መጻሕፍቲ ባይዱ 个)。
实验二 编程模拟进程的调度算法
(一)实验目的 1. 了解引起处理机调度的原因; 于第14周完成;
利用程序设计语言编程,模拟并发执行进程的同步与互斥(要求:进程数目不少于 3 个)。 分析比较各调度算法的基本思想及其优缺点。
3. 理解操作系统原理中 “互斥” 和 “同步” 的涵义。 掌握实现页面置换的 Optimal 、FIFO 和 LRU 算法基本思想。
(2)程序检查在实验课上进行,最迟 (1)按要求独立完成 3 个实验内容 进一步理解 “临界资源” 的概念;
(二)实验内容 利用程序设计语言编程,模拟并发执行进程的同步与互斥(要求:进程数目不少于 3 个)。
(二)实验内容 进一步理解几种典型的处理机调度算法;
理解操作系统原理中 “互斥” 和 “同步” 的涵义。 利用程序设计语言编程,模拟并发执行进程的同步与互斥(要求:进程数目不少于 3 个)。
利用程序设计语言编程,模拟实现处理机调度中: 实验一 编程模拟进程的同步与互斥
利用程序设计语言编程,模拟实现处理机调度中:先来先服务、高优先权和时间片轮转调度算法。
中 Optimal、FIFO 和 LRU 页面置换算法。 (要求:进程分配的物理块数目不少于 5 个)
进一步理解 “临界资源” 的概念;
分析比较各调2度.算法把的基握本思在想及多其优个缺点进。 程并发执行过程中对临界资源访问时的
于第14周完成;
必要约束条件; (要求:等待调度的进程数目不少于 5 个)
利用程序设计语言编程,模拟实现处理机调度中:先来先服务、高优先权和时间片轮转调度算法。 实验三 编程模拟页面置换算法
北航os实验报告
北航os实验报告北航OS实验报告一、引言操作系统(Operating System,简称OS)是计算机系统中最基础的软件之一,它负责管理和控制计算机硬件资源,为用户和应用程序提供一个可靠、高效的工作环境。
本文将对北航OS实验进行详细的报告和分析。
二、实验目的本次北航OS实验的目的是让学生深入理解和掌握操作系统的基本原理和实现方式。
通过实践,学生将学会设计和实现一个简单的操作系统,了解操作系统的核心功能和运行机制。
三、实验内容1. 系统引导实验开始时,我们需要编写引导程序,将操作系统加载到计算机的内存中,并跳转到操作系统的入口地址开始执行。
这一步骤是整个实验的起点,也是操作系统正常运行的基础。
2. 中断处理操作系统需要能够处理各种中断事件,如时钟中断、键盘中断等。
学生需要实现中断处理程序,使操作系统能够响应和处理这些中断事件,并根据具体情况进行相应的操作。
3. 进程管理操作系统需要能够管理多个进程的创建、调度和终止。
学生需要设计并实现进程管理模块,包括进程控制块(PCB)的数据结构和进程调度算法。
通过合理的调度策略,提高系统的并发性和响应速度。
4. 内存管理操作系统需要管理计算机的内存资源,包括内存的分配和释放。
学生需要设计并实现内存管理模块,使用合适的算法来管理内存的分配和回收,避免内存泄漏和碎片化问题。
5. 文件系统操作系统需要提供文件系统来管理计算机中的文件和数据。
学生需要设计并实现一个简单的文件系统,包括文件的创建、读写和删除等操作。
通过文件系统,用户可以方便地存储和管理自己的数据。
四、实验过程在实验过程中,我们遇到了许多挑战和问题,但通过不断的尝试和调试,我们最终成功实现了一个简单的操作系统。
以下是我们在实验过程中遇到的一些关键问题和解决方案:1. 内存管理在实验过程中,我们发现内存管理是一个非常关键的问题。
如果内存管理不当,容易导致内存泄漏或者内存碎片化,从而影响系统的性能和稳定性。
我们通过设计一个位图来管理内存的分配和释放,使用首次适应算法来分配内存,并通过合理地回收内存来避免内存泄漏问题。
操作系统设备管理实验报告
操作系统设备管理实验报告1.计算机操作系统计算机操作系统(operating system缩写作OS)是管理计算机硬件与软件资源的计算机的系统程序, 同时也是计算机系统的内核与基石。
操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。
操作系统也提供一个让用户与系统交互的操作界面。
操作系统在计算机系统中的位置1)操作系统位于底层硬件与用户之间, 是两者沟通的桥梁。
用户可以通过操作系统的用户界面, 输入命令。
操作系统则对命令进行解释, 驱动硬件设备, 实现用户要求。
•2)以现代标准而言, 一个标准PC的操作系统应该提供以下的功能: •进程管理: 计算机中的应用程序都是以进程单位运行的, 操作系统调度多个进程到CPU执行的过程称为进程管理。
•内存管理: 操作系统管理计算机内存, 控制着内存的分配和回收, 管理者内存与外存的信息交换, 以及配合硬件做地址转换。
•文件系统: 管理硬盘的数据, 可将数据已目录或者文件的形式存储。
•网络通信:管理与计算机外部的网络通信, 例如通过浏览器浏览网页, 打印文件等。
安全机制: 控制一些安全机制, 包含计算机非法入侵和一些合法校验。
用户界面: 图形界面。
驱动程序:与硬件交互的计算机软件, 操作系统通过驱动程序与硬件交互, 例如:USB驱动。
2.常见的操作系统1)Windowswindows10微软创始人比尔.盖茨Windows操作系统是美国微软公司推出的一款操作系统。
该系统从1985年诞生到现在, 经过多年的发展完善, 相对比较成熟稳定, 是当前个人计算机的主流操作系统。
Windows系统的特点:a、Windows操作系统界面友好, 窗口制作优美, 操作动作易学, 多代系统之间有良好的传承, 计算机资源管理效率较高, 效果较好。
b、Windows操作系统作为优秀的操作系统, 由开发操作系统的微软公司控制接口和设计, 公开标准, 因此, 有大量商业公司在该操作系统上开发商业软件。
OS_时间片轮转调度算法
时间片轮转调度算法一.实验目的:1)学习时间片轮转调度算法。
2)学习C++程序设计的方法。
二.实验环境:1)一台运行Windows2000Professional操作系统计算机。
2)计算机中需要安装VisualC++6.0企业版。
三.实验内容:本实验主要是实现时间片轮转调度算法。
1)进入VisualC++的窗口,新建一个C++的文件,命名为01.cpp.2)在源程序编辑窗口输入如下的源程序:#include<iostream>#include<string>#include<time.h>using namespace std;int n;class PCB{public:int pri;//进程优先数int runtime;//进程运行CPU时间int pieceOftime;//轮转时间片string procname;//进程名string state;//进程状态int needOftime;//还需要时间int Counter;PCB * next;};PCB * run = NULL;PCB * ready = NULL;PCB * finish = NULL;PCB * tial = ready;void Dtime(int t);void Prinft(int a){if(a==1){cout<<"进程名称"<<"\\t"<<"优先数"<<"\\t"<<"还需要时间"<<"\\t"<<"已运行时间"<<"\\t"<<"状态:"<<en dl;}elsecout<<"进程名称"<<"\\t"<<"已运行时间"<<"\\t"<<"还需要时间"<<"\\t"<<"计数器"<<"\\t"<<"时间片"<<" \\t"<<"状态"<<endl;}void Prinft(int b,PCB * p){if(b==1){cout<<p->procname<<"\\t\\t"<<p->pri<<"\\t"<<p->needOftime<<"\\t\\t"<<p->runtime<<"\\t\\t"<<p->state<< endl;}elsecout<<p->procname<<"\\t\\t"<<p->runtime<<"\\t\\t"<<p->needOftime<<"\\t\\t"<<p->Counter<<"\\t"<<p->pi eceOftime<<"\\t"<<p->state<<endl;}void display(int c){PCB *p;if(run!=NULL) /*如果运行指针不空*/Prinft(c,run); /*输出当前正在运行的PCB*///Dtime(2);p=ready; /*输出就绪队列PCB*/while(p!=NULL){Prinft(c,p);p=p->next;}//Dtime(2);p=finish; /*输出完成队列的PCB*/while(p!=NULL){Prinft(c,p);p=p->next;}}void insert(PCB *p)//插入就绪队列按Pri大小{PCB *S1,*S2;if(ready==NULL){p->next = NULL;ready = p;}else{S1 = ready;S2 = S1;while(S1!=NULL){if(S1->pri >= p->pri){S2 = S1;S1 = S1->next;}elsebreak;}if(S2->pri >= p->pri){S2->next = p;p->next = S1;}else{p->next = ready;ready = p;}}}bool CTProcessOfPri(){PCB * Node;cout <<"输入创建进程的数目:"<<endl; cin >>n;for(int j = 0;j < n; j++){Node = new PCB;if(Node==NULL)return false;else{cout <<"输入进程的名称,进程需CPU时间:"<<endl;cin >>Node->procname>>Node->needOftime;Node->runtime = 0;Node->state ="就绪";Node->pri =Node->needOftime;cout <<"进程"<<Node->procname<<"创建完毕!"<<endl;}insert(Node);}return true;}void priority(int i){run = ready;ready = ready->next;run->state = "运行";Prinft(i);while(run!=NULL) /*当运行队列不空时,有进程正在运行*/{run->runtime=run->runtime+1;run->needOftime=run->needOftime-1;run->pri=run->pri-1; /*每运行一次优先数降低1个单位*/if(run->needOftime==0) /*如所需时间为0将其插入完成队列*/ {run->state = "完成";run->next = finish;finish = run;run=NULL; /*运行队列头指针为空*/if(ready!=NULL) /*如就绪队列不空*/{run = ready;run->state = "运行";ready = ready->next;}}else if((ready!=NULL)&&(run->pri<ready->pri)){run->state="就绪";insert(run);run = ready;run->state = "运行";ready = ready->next;}display(i); /*输出进程PCB信息*/}}void queue(PCB *p){if(ready==NULL){p->next = NULL;ready = p;tial = p;}else{tial->next = p;tial = p;p->next = NULL;}}bool CTProcessOfRuntime(){PCB * Node;int m;cout <<"输入创建进程的数目:"<<endl;cin >>n;cout <<"输入时间片:"<<endl;cin >>m;for(int j = 0;j < n; j++){Node = new PCB;if(Node==NULL)return false;else{cout <<"输入进程的名称,进程需CPU时间:"<<endl;cin >>Node->procname>>Node->needOftime;Node->runtime = 0;Node->state ="就绪";Node->Counter = 0;Node->pieceOftime = m;cout <<"进程"<<Node->procname<<"创建完毕!"<<endl; }queue(Node);}return true;}void Runtime(int c){run = ready;ready = ready->next;run->state = "运行";Prinft(c);while(run!=NULL){run->runtime=run->runtime+1;run->needOftime=run->needOftime-1;run->Counter = run->Counter + 1;if(run->needOftime==0){run->state = "完成";run->next = finish;finish = run;run = NULL;if(ready!=NULL){run = ready;ready = ready->next;}}else if(run->Counter == run->pieceOftime){run->Counter = 0;run->state = "就绪";queue(run);run=NULL;if(ready!=NULL){run = ready;run->state = "运行";ready = ready->next;}}display(c);}}int main(){int i;cout <<"*******************************************"<<endl;cout <<"* 1 优先数调度算法 2 循环时间片轮转算法*"<<endl; cout <<"*************** 0 退出 *******************"<<endl; cin >>i;switch(i){case 1:CTProcessOfPri();priority(i);break;case 2:CTProcessOfRuntime();Runtime(i);break;default:break;}return 0;}void Dtime(int t){time_t current_time;time_t start_time;time(&start_time);do{time(& current_time);}while((current_time-start_time)<t);3)编译并运行,其结果为:4)输入相应的操作,结果为:。
操作系统安全实验及代码
操作系统系统安全实验实验一获取系统信息1.实验目的:了解API函数获取心态信息方法熟悉VC程序设计2.实验内容:利用API函数,获取系统软、硬件信息。
主要包括硬件方面:处理机信息(架构、级别、数量、版本),内存信息(当前内存大小、可用内存大小、虚拟内存大小),磁盘信息(磁盘卷标、序列号、总空间、可用空间等);软件方面:操作系统信息(主版本号、次版本号、补丁版本号等),文件信息(文件系统类型、操作系统目录、可执行文件目录)。
3.参见参考代码。
①getmemInf.cpp#include <windows.h>#include <iostream>using namespace std;int main(int argc, char** argv){MEMORYSTATUS mem;ZeroMemory(&mem, sizeof(mem));GlobalMemoryStatus(&mem);mem.dwLength = sizeof(mem);cout << "物理内存:" << mem.dwTotalPhys /1024 /1024 << endl;cout << "剩余内存:" << mem.dwAvailPhys / 1024 /1024 << endl;cout << "虚拟内存:" << mem.dwTotalVirtual /1024 / 1024 << endl;cout << "剩余虚拟内存:" << mem.dwAvailVirtual / 1024 / 1024 << endl;system("PAUSE");return 0;}②getOSinf.cpp#include <windows.h>#include <iostream>#pragma warning(disable:4996)using namespace std;int main(int argc, char** argv){OSVERSIONINFOEX os;bool ret;os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);ret = GetVersionEx((OSVERSIONINFO *)&os); // Not OSVERSIONINFOEXif (ret == false){cout << "GetVersionEx error." << endl;return -1;}cout << "主版本号:" << os.dwMajorVersion << endl;cout << "次版本号:" << os.dwMinorVersion << endl;cout << "编译次数:" << os.dwBuildNumber << endl;cout << "平台类型:" << os.dwPlatformId << endl; //ver_platform_* cout << "产品类型:" << os.wProductType << endl; //ver_nt_*cout << "程序组掩码" << os.wSuiteMask << endl; //ver_suite_*cout << "补丁主版本:" << os.wServicePackMajor << endl;cout << "补丁次版本:" << os.wServicePackMinor << endl;system("PAUSE");}③getSysinf.cpp#include <windows.h>#include <iostream>#include <bitset>using namespace std;typedef struct MyVolumnInfo{TCHAR diskRootPath[256];TCHAR volNameBuf[256];DWORD volSize;DWORD volSerialNumber;DWORD maxComponetLength;DWORD fileSystemFlag;TCHAR fileSystemName[256];DWORD fileSystemNameSize;}MYVOLUMNINFO;int main(int argc, char** argv){TCHAR winDir[256];TCHAR sysDir[256];TCHAR diskName[256]; //不可小于256TCHAR diskLogicName[256];DWORD diskString;LPWSTR szDiskName;MYVOLUMNINFO volInfo;UINT64 diskAvail, diskTotal, diskFree;SYSTEM_INFO sysInf;ZeroMemory(winDir, sizeof(winDir));ZeroMemory(sysDir, sizeof(sysDir));ZeroMemory(diskName, sizeof(diskName));ZeroMemory(&volInfo, sizeof(volInfo));ZeroMemory(diskLogicName, sizeof(diskLogicName));ZeroMemory(&sysInf, sizeof(sysInf));GetSystemInfo(&sysInf);GetWindowsDirectory(winDir, sizeof(winDir));GetSystemDirectory(sysDir, sizeof(sysDir));wcout << "处理器架构:" << sysInf.wProcessorArchitecture << endl;wcout << "处理器类型:" << sysInf.dwProcessorType << endl;wcout << "处理器数量:" << sysInf.dwNumberOfProcessors << endl;wcout << "处理器级别:" << sysInf.wProcessorLevel << endl;wcout << "处理器版本:" << sysInf.wProcessorRevision << endl;wcout << "处理器掩码:" << sysInf.dwActiveProcessorMask << endl; //3=11B,表示两个都用wcout << "页面大小:" << sysInf.dwPageSize << endl;wcout << "虚拟内存颗粒:" << sysInf.dwAllocationGranularity << endl;wcout << "应用程序最小地址:" << sysInf.lpMinimumApplicationAddress << endl;wcout << "应用程序最大地址:" << sysInf.lpMaximumApplicationAddress << endl;wcout << "Windows:" << winDir << endl;wcout << "System:" << sysDir << endl;diskString = GetLogicalDrives();cout << bitset<32> (diskString) << endl;GetLogicalDriveStrings(sizeof(diskLogicName), diskLogicName);szDiskName = (LPWSTR)diskLogicName;while (*szDiskName != '\0\0'){wcout << szDiskName << endl;GetVolumeInformation(szDiskName, volInfo.volNameBuf, 255, &volInfo.volSerialNumber, \ &volInfo.maxComponetLength, &volInfo.fileSystemFlag, volInfo.fileSystemName, 255);wcout << "卷标名称:" << volInfo.volNameBuf << endl;wcout << "磁盘序列号:" << volInfo.volSerialNumber << endl;wcout << "最大文件名长度:" << volInfo.maxComponetLength << endl;wcout << "文件系统标志:" << volInfo.fileSystemFlag << endl;wcout << "文件系统名称:" << volInfo.fileSystemName << endl;GetDiskFreeSpaceEx(szDiskName, (PULARGE_INTEGER)&diskAvail, (PULARGE_INTEGER)&diskTotal, \(PULARGE_INTEGER)&diskFree);wcout << "可用空间:" << diskAvail / 1024 / 1024 << "MB" << endl;wcout << "总空间:" << diskTotal / 1024 / 1024 << "MB" << endl;wcout << "剩余空间:" << diskFree / 1024 / 1024 << "MB" << endl;szDiskName = szDiskName + lstrlen(szDiskName) + 1;ZeroMemory(&volInfo, sizeof(volInfo));}system("PAUSE");return 0;}实验二系统注册表操作实验目的:了解注册表基本常识了解注册表项目含义利用API函数添加、删除、修改注册表实验内容1. 编写代码,打开指定注册表项目,获得项目取值。
实验一、二(OS)
实验一进程同步和互斥(建议4学时)一、实验目的1.掌握临界资源、临界区概念及并发进程互斥、同步访问原理。
2.学会使用高级语言进行多线程编程的方法。
3.掌握利用VC++或Java语言线程库实现线程的互斥、条件竞争,并编码实现P、V 操作,利用P、V操作实现两个并发线程对有界临界区的同步访问。
4.通过该实验,学生可在源代码级完成进程同步互斥方案的分析、功能设计、编程实现,控制进程间的同步、互斥关系。
二、实验要求1.知识基础:学生应在完成进程和线程及调度等章节的学习后进行。
2.开发环境与工具:硬件平台——个人计算机。
软件平台-Windows操作系统,vc++语言或Java语言开发环境。
3.运用高级语言VC++或Java语言线程库及多线程编程技术进行设计实现。
三、实验内容1.实现临界资源、临界区、进程或线程的定义与创建。
2.利用两个并发运行的进程,实现互斥算法和有界缓冲区同步算法。
四、实验方案指导该实验方案由以下几个关键设计项目组成:1.并发访问出错。
即设计一个共享资源,创建两个并发线程,二者并发访问该共享资源。
当没有采用同步算法设计时,线程所要完成的某些操作会丢失。
2.互斥锁。
并发线程使用线程库提供的互斥锁,对共享资源进行访问。
3.软件方法。
设计并编程实现计数信号量、P操作函数、V操作函数,并发线程通过调用P,V操作函数实现线程的互斥。
4.同步访问多缓冲区。
利用上面的软件方法完成P,V操作,可实现两个线程对多缓冲区的同步访问。
五、实验方案实现范例以下是对该项目中包含的部分设计功能的实现方法、实现过程、技术手段的描述,供师生参考。
1.模拟线程并发运行。
假设我们使用POSIX线程库,而POSIX并没有真正提供线程间的并发运行需求。
我们设计的系统应支持符合RR调度策略的并发线程,每个线程运行一段时间后自动挂起,另一个线程开始运行。
这样一个进程内所有线程以不确定的速度并发执行。
2.模拟一个竞争条件——全局变量。
操作系统用户接口实验
实验一操作系统用户接口实验一、实验目的:1、熟悉操作系统的命令接口2、图形接口和程序接口二、实验内容:1、使用linux常用命令:pwd、ls 、cd、mkdir、copy、date,显示这些命令的结果,并解释这些命令的作用;2、用C语言编制一个程序,使其可通过Localtime系统调用来获得OS提供的时间日期三、实验要求:在Linux操作系统下完成。
四、程序和实验结果:#include<stdio.h>#include<time.h>main(){char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};time_t timep;struct tm *p;time(&timep); /*取得当地时间*/p=localtime(&timep); /*转换时间*/printf ("%d%d%d ", (1900+p->tm_year),( 1+p->tm_mon),p->tm_mday);printf("%s%d:%d:%d\n", wday[p->tm_wday],p->tm_hour,p->tm_min, p->tm_sec);}五、实验心得:通过实验,我熟悉了使用linux常用命令(pwd、ls 、cd、mkdir、copy、date),进一步了解了这些命令的作用。
同时也学会了用C语言编制一个小程序,使其可通过Localtime( )系统调用来获得OS提供的时间和日期。
在输入程序过程中,一个字母输入错误就得不到正确的实验结果,在实验中我不仅熟悉操作系统的命令接口图形接口和程序接口,更懂得了细节决定成败的道理。
操作系统 实验
实验一Windows进程观测一、实验目的通过对Windows编程,进一步熟悉操作系统的基本概念,较好地理解Windows的结构。
1-1运行结果(如果运行不成功,则可能的原因是什么?) :_________________1-2运行结果:____:__________在网络百度到解决方法:Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows1-3运行结果:__________________1-4运行结果:__二实验心得:(1)通过实验我知道了操作系统是用来控制及指挥电脑系统运作的软件程序。
操作系统管理和控制系统资源。
计算机的硬件、软件、数据等都需要操作系统的管理。
操作系统通过许多的数据结构,对系统的信息进行记录,根据不同的系统要求,对系统数据进行修改,达到对资源进行控制的目的。
(2)windows进程的组成:a一个私有的虚拟地址空间b一个可执行程序c一个已经打开句柄的列表d一个被称为访问令牌的安全区e一个被称为进程id的唯一标识实验二 Windows进程控制一、实验目的1) 通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows进程的“一生”。
2) 通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法。
请回答:Windows所创建的每个进程都是以调用_____ CreateProcess()_____API函数开始和以调用_____ ExitProcess()______ 或___ TerminateProcess()___API函数终止。
2-1步骤5:编译完成后,单击“Build”菜单中的“Build 2-1.exe”命令,建立2-1.exe可执行文件。
操作系统实验心得(精选多篇)
第一篇:操作系统实验每一次课程设计度让我学到了在平时课堂不可能学到的东西。
所以我对每一次课程设计的机会都非常珍惜。
不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。
所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。
但是每完成一个任务我都兴奋不已。
一开始任务是任务,到后面任务就成了自己的作品了。
总体而言我的课设算是达到了老师的基本要求。
总结一下有以下。
2、同学间的讨论,这是很重要的。
老师毕竟比较忙。
对于课程设计最大的讨论伴侣应该是同学了。
能和学长学姐讨论当然再不过了,没有这个机会的话,和自己班上同学讨论也是能够受益匪浅的。
大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。
3、敢于攻坚,越是难的问题,越是要有挑战的心理。
这样就能够达到废寝忘食的境界。
当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。
但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。
在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的1)访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域3)其他例如:<1>定义了指针后记得初始化,在使用的时候记得判断是否为null<2>在使用数组的时候是否被初始化,数组下标是否越界,数组元素是否存在等<3>在变量处理的时候变量的格式控制是否合理等解决方法1.利用gdb逐步查找段错误:2.分析core件3.段错误时启动调试:4.利用backtrace和objdump进行分析:总而言之,对待课设要像对待自己的作品一样,不要当作任务来完成。
第二篇:操作系统实验总结学号:姓名:班级:在本学期的计算机操作系统这门课学习当中,为了更的了解操作系统相关知识,我们通过os lab平台做了几个实验。
《操作系统课程》实验(实训)指导大纲
《操作系统课程》实验(实训)指导大纲课程编号:G611SG0004课程性质:学科基础课适用专业:计算机科学与技术网络工程数字媒体实验学时:16实验教材:自编符合《认证标准》:具有运用工程基础知识和本专业基本理论知识解决问题的能力,具有系统的工程实践学习经历;完成本课程实验(实训)总软件最少行数: 2000实验成绩评价方法:学生每完成一个实验项目,要求独立认真的填写实验报告。
实验指导教师将根据学生完成实验的态度和表现,结合填写的实验报告评定实验成绩,成绩的评定按百分制评分。
老师根据平时实验的分数之和取平均分,得出综合成绩。
实验(实训)内容:实验一操作系统安装及熟练使用(一)实验目的熟悉Windows//Linux操作系统的安装过程与安装方法,并掌握该操作系统所提供的用户接口环境,并为后续实验做好编程环境准备。
(二)实验项目内容1、熟悉Windows//Linux操作系统的安装过程与安装方法,并掌握该操作系统所提供的用户接口环境,通过系统提供的用户管理程序、查看系统中的用户情况、进程、线程、内存使用情况等,学会使用它进行监视进程的状况、系统资源的使用情况及用户情况。
并为后续实验做好编程环境准备。
2、用C语言编写一小段程序,使其可以通过某个系统调用来获得OS提供的某种服务。
(三)主要仪器设备一台PC机(四)实验室名称计算机中心实验室(五)实验报告撰写(撰写的格式采用教务处所提供的样本见附件)......实验二编程模拟进程间的同步和互斥(一)实验目的通过实验加强对进程同步和互斥的理解,并掌握进程(线程)的创建和调用方法。
学会使用信号量解决资源共享问题。
学生可以自己选择在Windows或Linux系统下编写。
代码不得少于200行。
(二)实验项目内容1.以下为Linux系统下参考程序,请编译、运行并观察程序的输出,并分析实验结果,写出实验报告。
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<time.h>#include<sys/types.h>#include<sys/wait.h>#include<linux/sem.h>#define NUM_PROCS 5#define SEM_ID 250#define FILE_NAME "/tmp/sem_aaa"#define DELAY 4000000void update_file(int sem_set_id, char *file_path, int number){struct sembuf sem_op;FILE *file;//等待信号量的数值变为非负数,此处设为负值,相当于对信号量进行P操作sem_op.sem_num=0;sem_op.sem_op=-1;sem_op.sem_flg=0;semop(sem_set_id,&sem_op,1);//写文件,写入的数值是当前进程的进程号file=fopen(file_path,"w");if(file){//临界区fprintf(file,"%d\n",number);printf("%d\n",number);fclose(file);}//发送信号,把信号量的数值加1,此处相当于对信号量进行V操作sem_op.sem_num=0;sem_op.sem_op=1;sem_op.sem_flg=0;semop(sem_set_id,&sem_op,1);}//子进程写文件void do_child_loop(int sem_set_id,char *file_name){ pid_t pid=getpid();int i,j;for(i=0;i<3;i++){update_file(sem_set_id,file_name,pid);for(j=0;j<4000000;j++);}}int main(int argc,char **argv){int sem_set_id; //信号量集的IDunion semun sem_val; //信号量的数值,用于semctl()int child_pid;int i;int rc;// 建立信号量集,ID是250,其中只有一个信号量sem_set_id=semget(SEM_ID,1,IPC_CREAT|0600);if(sem_set_id==-1){perror("main: semget");exit(1);}//把第一个信号量的数值设置为1sem_val.val=1;rc=semctl(sem_set_id,0,SETVAL,sem_val);if(rc==-1){perror("main:semctl");exit(1);}//建立一些子进程,使它们可以同时以竞争的方式访问信号量for(i=0;i<NUM_PROCS;i++){child_pid=fork();switch(child_pid){case -1:perror("fork");case 0: //子进程do_child_loop(sem_set_id,FILE_NAME);exit(0);default: //父进程接着运行break;}}//等待子进程结束for(i=0;i<NUM_PROCS;i++){int child_status;wait(&child_status);}printf("main:we're done\n");fflush(stdout);return 0;}2.写一程序模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。
操作系统 实验lab1
实验一 Linux系统的基本操作1.目的要求熟悉Linux系统运行环境,掌握Linux操作系统上的基本操作。
2、实验内容1)登录Linux系统和使用GNOMEa)在启动系统,登陆进入系统后,桌面上有3个图标,它们的名字和作用是什么?它们和windows系统的什么软件功能相当?A.Root 主目录和我的电脑相同B.从这里开始Windows 资源管理器C.回收站和windows回收站相同b)在屏幕的最上方(或者最下方),有一个快捷栏,其中有哪些图标,它们的名字和作用是什么?它们和windows系统的什么软件功能相当?A.Mozilla 万维网浏览器浏览互联网和Windouws的Internet exploer相似B.Evolution电子邮件发送电子邮件并管理你的日程 Writer 文字处理和windows 的office word 相似 Impress 创建演示文稿和windows 的officePPT相似 Cak 制作电子表格和windows 的office excce相似F. 打印管理器设置和监视打印机2)Linux系统的基本命令a)列举打开Linux终端的两种方式,分别叙述其过程A.点击桌面右键,再点及新建终端B.点击主菜单,再点击系统工具,点击终端b) 使用pwd命令可以查看用户当前所处的工作目录,你的工作目录是/rootb)使用____ls______________命令可以查看当前文件夹的内容c)分别键入命令who,man date,cal5,exit解释各个命令具体实现的功能A.Who显示登入的用户,时间,终端B.Man date 查询命令的用法C.Cal5显示公元5年的日历D.exit 退出当前程序3)Linux系统的文件、目录和权限a)查询当前用户所处的位置pwdb)在当前文件夹下创建一个名为os的文件夹mkdir osc)使os目录成为当前目录cd osd)创建一个名为file.c的文本文件,该文件放置在文件夹os中touch file.ce)把file.c文件拷贝到用户主目录中(登陆进系统时所处的目录),文件名不变cp file.c ~f)把主目录中的file.c文件更名为source.cmv ~/file.c ~/source.cg)返回到主目录cdh)使用命令"ls –l",其显示内容是什么?对各列内容进行解释?drws-r-xr-x 2 root root 4096 1月3 01 :03 os-r w- r-- r-- 2 root root 0 1月01:21 source.c.c分别表示用户对文件或文件夹的访问权限,用户,组,建立时间,文件夹或文件名称-i)删除文件夹osrmdir osj)删除当前目录下所有以source开始的文件rm source *.c4)Linux通配符的使用。
os实验环境的使用
实验1 实验环境的使用实验性质:验证建议学时:2学时 9月6号一、实验目的● 熟悉操作系统集成实验环境OS Lab的基本使用方法。
● 练习编译、调试EOS操作系统内核以及EOS应用程序。
二、预备知识阅读本书第1章,对EOS操作系统和OS Lab集成实验环境有一个初步的了解。
重点学习第1.3节,掌握EOS 操作系统内核和EOS应用程序的源代码是如何生成可执行文件的,以及OS Lab是如何将这些可执行文件写入软盘镜像文件并开始执行的。
三、实验内容3.1 启动OS Lab1. 在安装有OS Lab的计算机上,可以使用两种不同的方法来启动OS Lab:● 在桌面上双击“Tevation OS Lab”图标。
或者● 点击“开始”菜单,在“程序”中的“Tevation OS Lab”中选择“Tevation OS Lab”。
2. OS Lab每次启动后都会首先弹出一个用于注册用户信息的对话框(可以选择对话框标题栏上的“帮助”按钮获得关于此对话框的帮助信息)。
在此对话框中填入学号和姓名后,点击“确定”按钮完成本次注册。
3. 观察OS Lab主窗口的布局。
OS Lab主要由下面的若干元素组成:菜单栏、工具栏以及停靠在左侧和底部的各种工具窗口,余下的区域用来放置编辑器窗口。
3.2 学习OS Lab的基本使用方法练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab的基本使用方法(主要包括新建项目、生成项目、调试项目等)。
3.2.1 新建Windows控制台应用程序项目新建一个Windows控制台应用程序项目的步骤如下:1. 在“文件”菜单中选择“新建”,然后单击“项目”。
2. 在“新建项目”对话框中,选择项目模板“控制台应用程序 (c)”。
3. 在“名称”中输入新项目使用的文件夹名称“oslab”。
4. 在“位置”中输入新项目保存在磁盘上的位置“C:\test”。
5. 点击“确定”按钮。
新建完毕后, OS Lab 会自动打开这个新建的项目。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姓名、班级、学号、日期实验一Windows 2000进程的“一生”一、实验简介:该实验共有3个小实验,分别是:4.1 创建进程;4.2 正在运行的进程;4.3 终止进程。
二、实验目的:1.通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows 2000进程的“一生”。
2.通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法。
实验1.1:创建进程一、实验内容1) 调试实验3-5中的程序。
2) 观察并分析程序。
二、实验过程及结果步骤1:登录进入Windows 2000 Professional。
步骤2:在“开始”菜单中单击“程序”-“Microsoft Visual Studio 6.0”–“Microsoft Visual C++ 6.0”命令,进入Visual C++窗口。
步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序3-5.cpp。
步骤4:单击“Build”菜单中的“Compile 3-5.cpp”命令编辑3-5.cpp步骤5:编译完成后,单击“Build”菜单中的“Build 3-5.exe”命令,建立3-5.exe可执行文件。
步骤6:在工具栏单击“Execute Program”(执行程序) 按钮,或者按Ctrl + F5键,或者单击“Build”菜单中的“Execute 3-5.exe”命令,执行3-5.exe程序。
步骤7:按Ctrl + S键可暂停程序的执行,按Ctrl + Pause (Break) 键可终止程序的执行。
实验说明:1)本实验显示了创建子进程的基本框架。
该程序只是再一次地启动自身,显示它的系统进程ID和它在进程列表中的位置。
2)清单3-5展示的是一个简单的使用CreateProcess() API函数的例子。
首先形成简单的命令行,提供当前的EXE文件的指定文件名和代表生成克隆进程的号码。
运行结果分析:每次执行结果 process ID 一直会变,但clone ID 不变都是0三、回答问题1)(结合背景知识回答)该程序中使用的CreateProcess() API函数,此函数的大多数数都可取缺省值,但是创建标志参数使用了:CREATE_NEW_CONSOLE,标志,指示新进程分配它自己的控制台,这使得运行示例程序时,在任务栏上产生许多活动标记。
然后该克隆进程的创建方法关闭传递过来的句柄并返回main() 函数。
在关闭程序之前,每一进程的执行主线程暂停一下,以便让用户看到其中的至少一个窗口。
2)CreateProcess() 函数有10 个核心参数?本实验程序中设置的各个参数的值是:CreateProcess( 对应的数值如下:LPCTSTR lpApplivationName// 产生这个EXE的应用程序的名称szFilename,LPCTSTR lpCommandLine // 告诉其行为像一个子进程的标志szCmdLine,LPPROCESS_INFORMA TION lpProcessInformation // 缺省的进程安全性NULL,LPSECURIITY_A TTRIBUTES lpThreadAttributes // 缺省的线程安全性NULL,BOOL bInheritHandle // 不继承句柄FALSE,DWORD dwCreationFlage // 使用新的控制台CREATE_NEW_CONSOLE, LPVOID lpEnvironment // 新的环境NULL,LPCTSTR lpCurrentDirectory // 当前目录NULL,STARTUPINFO lpStartupInfo // 启动信息&si,LPSECURIITY_A TTRIBUTES lpProcessAttributes // 返回的进程信息&pi) ;)3)部分程序在Visual C++环境完成编译、链接之后,还可以在Windows 2000的“命令提示符”状态下尝试执行该程序,看看与在可视化界面下运行的结果有没有不同?为什么?结果没有什么不同.四、实验总结(包括实验中遇到的问题及解决方法,还存在的问题,通过本次实验学到些什么等)实验1.2:正在运行的进程一、实验内容:1) 调试实验3-6中的程序。
2) 观察并分析程序。
二、实验步骤:步骤1:在Visual C++ 窗口的工具栏中单击“打开”按钮,在“打开”对话框中找到并打开实验源程序3-6.cpp。
步骤2:单击“Build”菜单中的“Compile 3-6.cpp”命令,再单击“是”按钮确认。
系统对3-6.cpp进行编译。
步骤3:编译完成后,单击“Build”菜单中的“Build 3-6.exe”命令,建立3-6.exe可执行文件。
\步骤4:在工具栏单击“Execute Program”(执行程序) 按钮,执行3-6.exe程序。
步骤5:单击Ctrl + Alt + Del键,进入“Windows任务管理器”,在“应用程序”选项卡中右键单击“3-6”任务,在快捷菜单中选择“转到进程”命令。
在“Windows任务管理器”的“进程”选项卡中,与“3-6”任务对应的进程映像名是(为什么?) :_VCPAWN.EXE___.右键单击该进程名,在快捷菜单中选择“设置优先级”命令,可以调整该进程的优先级,如设置为“高”后重新运行3-6.exe程序,屏幕显示有变化吗?为什么?屏幕显示如下内容:因为设置了优先级,把进程的优先级设置成高了.实验说明:1)清单3-6实验中的程序中列出了用于进程信息查询的API函数GetProcessVersion() 与GetVersionEx() 的共同作用,可确定运行进程的操作系统的版本号。
2)清单3-6中的程序向读者表明了如何获得当前的PID和所需的进程版本信息。
为了运行这一程序,系统处理了所有的版本不兼容问题。
接着,程序演示了如何使用GetVersionEx() API函数来提取OSVERSIONINFOEX结构。
这一数据块中包括了操作系统的版本信息。
3)清单3-6的最后一段程序利用了操作系统的版本信息,以确认运行的是Windows 2000。
代码接着将当前进程的优先级提高到比正常级别高。
四、描述运行结果运行结果是:从运行结果可以看出:当前PID信息:3488,当前操作系统版本:5.1五、问题:1)分析清单3-6中的程序,简述该程序是如何获得当前的PID和所需的进程版本信息?从运行结果可以看出:当前PID信息:3488,当前操作系统版本:5.12)在本程序中用到了哪些主要Windows API函数?用到的Windows API 函数有:GetCurrentProcessId();和GetProcessV ersion(); GetCurrentProcessId();是为了得到当前运行进程的ID。
GetProcessVersion();函数得到当前操作系统的版本信息。
实验1.3:终止程序一、实验内容:1) 调试实验3-7中的程序。
2) 观察并分析程序。
二、实验步骤:步骤1:在Visual C++ 窗口的工具栏中单击“打开”按钮,在“打开”对话框中找到并打开实验源程序3-7.cpp。
步骤2:单击“Build”菜单中的“Compile 3-7.cpp”命令,再单击“是”按钮确认。
系统对3-7.cpp进行编译。
步骤3:编译完成后,单击“Build”菜单中的“Build 3-7.exe”命令,建立3-7.exe可执行文件。
步骤4:在工具栏单击“Execute Program”按钮,执行3-7.exe程序。
查看运行结果。
三、实验说明:1)在清单3-7列出的程序中,先创建一个子进程,然后指令它发出“自杀弹”互斥体去终止自身的运行。
2)清单3-7中的程序说明了一个进程从“生”到“死”的整个一生。
第一次执行时,它创建一个子进程,其行为如同“父亲”。
在创建子进程之前,先创建一个互斥的内核对象,其行为对于子进程来说,如同一个“自杀弹”。
当创建子进程时,就打开了互斥体并在其他线程中进行别的处理工作,同时等待着父进程使用ReleaseMutex() API发出“死亡”信号。
然后用Sleep() API调用来模拟父进程处理其他工作,等完成时,指令子进程终止。
3)当调用ExitProcess() 时要小心,进程中的所有线程都被立刻通知停止。
在设计应用程序时,必须让主线程在正常的C++ 运行期关闭(这是由编译器提供的缺省行为) 之后来调用这一函数。
当它转向受信状态时,通常可创建一个每个活动线程都可等待和停止的终止事件。
4)在正常的终止操作中,进程的每个工作线程都要终止,由主线程调用ExitProcess()。
接着,管理层对进程增加的所有对象释放引用,并将用GetExitCodeProcess() 建立的退出代码从STILL_ACTIVE改变为在ExitProcess() 调用中返回的值。
最后,主线程对象也如同进程对象一样转变为受信状态。
5)等到所有打开的句柄都关闭之后,管理层的对象管理器才销毁进程对象本身。
还没有一种函数可取得终止后的进程对象为其参数,从而使其“复活”。
当进程对象引用一个终止了的对象时,有好几个API函数仍然是有用的。
进程可使用退出代码将终止方式通知给调用GetExitCodeProcess() 的其他进程。
同时,GetProcessTimes() API函数可向主调者显示进程的终止时间。
四、描述运行结果1)创建了子进程;2)子进程正在等待“杀掉”自己;3)表示运行的整个过程,先由创建子进程,然后又删除子进程。
五、问题:Windows所创建的每个进程都是以调用CreateProcess() API函数开始和以调用ExitProcess()或TerminateProcess()API函数终止。