云昴

【操作系统】实验一 进程的描述与控制

| 【专业·学习】操作系统

VS 2017 环境变量(步骤3)

我的电脑->属性->环境变量->高级系统设置->打开Path,添加:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86

这个步骤是添加了cl指令的地址

新建Lib变量,添加两个路径:

变量名:LIB
变量值:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\lib\x86;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17134.0\ucrt\x86

新建INCLUDE变量,添加两个路径:

变量名:INCLUDE
变量值:C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt;C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\include

进入C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build,双击运行vcvarsall.bat文件。

1-1运行结果

图1 1-1 运行结果

1-2运行结果

图2 1-2 运行结果

1-3运行结果

图3 1-3 运行结果

1-4运行结果

图4 1-4 运行结果

实验总结

1.对于实验1-1学会了在命令行下对cpp文件进行编译;

2.实验1-2调用了WinMain api。

WinMain是一个函数,该函数的功能是被系统调用,作为一个32位应用程序的入口点。WinMain函数应初始化应用程序,显示主窗口,进入一个消息接收一发送循环,这个循环是应用程序执行的其余部分的顶级控制结构。

当接收到一个WM_QUIT消息时,程序就中止。这时,WinMain函数应退出应用程序,并且返回传递给WM_QUIT消息的wParam参数的值。如果由于调用PostQuitMessage函数而接收到WM_QUIT消息,wParam的值是PostQuitMessage函数的nExitCode的值。

3.实验1-3

优先级为0的线程:系统启动时,会创建一个优先级为0的“页面清零线程”,它只有在系统中没有其他可调度线程时,才能调度,用来清除内存中的闲置页面。

优先级在1 ~ 15之间的线程:一般用户模式下,线程的优先级都在该范围。

优先级在16 ~ 30之间的线程:一般是内核线程。

对于进程而言,Windows有一个“优先级类”的概念。这些优先级类作用与进程中的所有线程。Windows 2000/XP/2003/Vista支持6个“优先级类”:

1、Real-time:实时

2、High:高

3、Above normal:高于标准

4、Normal:标准

5、Below normal:低于标准

6、Idle:空闲。

所以我们也可以设置程序的优先级,添加代码:

SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);

运行结果为: 图5 运行结果

实验1-4

进程在内核模式下消耗的时间占总时间的百分比。
参考文献

图6 任务管理器

CPU使用率通常表示CPU在非空闲任务上花费的时间的简单百分比。但这有点简化。在任何现代操作系统中,CPU实际上都是以两种非常不同的模式花费时间:

1.内核模式

在内核模式下,执行代码具有对底层硬件的完全且不受限制的访问。它可以执行任何CPU指令并引用任何内存地址。内核模式通常保留用于操作系统的最低级别,最可信任的功能。内核模式下的崩溃是灾难性的,将导致整台机器停机。

2.用户模式

在用户模式下,执行代码无法直接访问硬件或参考存储器。在用户模式下运行的代码必须委托给系统API才能访问硬件或内存。由于这种隔离提供的保护,用户模式下的崩溃总是可以恢复的。您计算机上运行的大多数代码都将在用户模式下执行。

可以在任务管理器中启用内核时间显示,如上面的屏幕截图所示。实线是总CPU时间; 虚线是内核时间。两者之间的差距是用户时间。

实验报告源码下载

云昴