
【操作系统】实验一 进程的描述与控制
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-2运行结果
1-3运行结果
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);
运行结果为:
实验1-4
进程在内核模式下消耗的时间占总时间的百分比。
参考文献
CPU使用率通常表示CPU在非空闲任务上花费的时间的简单百分比。但这有点简化。在任何现代操作系统中,CPU实际上都是以两种非常不同的模式花费时间:
1.内核模式
在内核模式下,执行代码具有对底层硬件的完全且不受限制的访问。它可以执行任何CPU指令并引用任何内存地址。内核模式通常保留用于操作系统的最低级别,最可信任的功能。内核模式下的崩溃是灾难性的,将导致整台机器停机。
2.用户模式
在用户模式下,执行代码无法直接访问硬件或参考存储器。在用户模式下运行的代码必须委托给系统API才能访问硬件或内存。由于这种隔离提供的保护,用户模式下的崩溃总是可以恢复的。您计算机上运行的大多数代码都将在用户模式下执行。
可以在任务管理器中启用内核时间显示,如上面的屏幕截图所示。实线是总CPU时间; 虚线是内核时间。两者之间的差距是用户时间。