操作系统大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一:获得当前系统中正在运行的所有进程的优先级
程序源代码:
#include
#include
#include
using std::cout;
using std::endl;
void main(){
//...........初始化存放进程信息的结构体................
PROCESSENTRY32 PR;
::ZeroMemory(&PR,sizeof(PR));
PR.dwSize=sizeof(PR);
//............获得进程快照...........................
HANDLE JinCKZ=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//............获取进程信息并输出.....................
BOOL ToF=::Process32First(JinCKZ,&PR);//第一个进程
while(ToF){
HANDLE XinXi=::OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,PR.th32ProcessID); if(XinXi!=NULL){
DWORD YouXJ=::GetPriorityClass(XinXi);
//.............输出信息.....................
cout<<"进程ID: "< switch(YouXJ){ case HIGH_PRIORITY_CLASS: cout<<"HIGH"< break; case NORMAL_PRIORITY_CLASS: cout<<"NORMAL"< break; case IDLE_PRIORITY_CLASS: cout<<"IDLE"< break; case REALTIME_PRIORITY_CLASS: cout<<"REALTIME"< break; default: cout<<"UNKNOWN"< break; } ::CloseHandle(XinXi); } //...................转向下一进程.............. ToF=::Process32Next(JinCKZ,&PR); } } 运行结果: 对程序的分析: 该程序思路是先获得所有进程的快照,然后逐个将进程的信息放入结构体中,然后将其输出。关键的API为:1.CreateToolhelp32Snapshot()作用为进程拍快照。2 .Process32First()作用为得到第一个进程。3. OpenProcess()打开进程。4. GetPriorityClass()作用为获取优先级。5. CloseHandle()作用为关闭句柄。 实验三:使用互斥对象实现线程同步 ⏹两个线程对同一个变量进行访问,其中一个线程 对变量做加1操作,一个线程对其做减1操作。 改变其数值后将该数值写入输出流中 ⏹分析:不作同步操作和采用同步操作将分别出现 什么现象 程序源代码: #include #include using namespace std; long val=0; //共享变量 HANDLE hMutex=NULL; //互斥对象 //..............进程函数................ DWORD WINAPI WorkThread1(LPVOID lParam) { WaitForSingleObject(hMutex,INFINITE); //获取互斥对象 val=val+1; (hMutex); //释放互斥对象 return val; } DWORD WINAPI WorkThread2(LPVOID lParam) { WaitForSingleObject(hMutex,INFINITE); val=val-1; ReleaseMutex(hMutex); return val; } void main() { HANDLE hThread1=CreateThread(NULL,0,WorkThread1,NULL,0,NULL); //创建线程WaitForMultipleObjects(1,&hThread1,TRUE,INFINITE); //等待线程结束 cout< HANDLE hThread2=CreateThread(NULL,0,WorkThread2,NULL,0,NULL); WaitForMultipleObjects(1,&hThread2,TRUE,INFINITE); cout< CloseHandle(hThread1); //关闭句柄 CloseHandle(hThread2); CloseHandle(hMutex); } 运行结果: