C++模拟1.创建进程 2.阻塞执行进程 3.执行进程 4.唤醒第一个阻塞进程 5.执行进程时间片到 6.终止进程 7.查看进程 8.查看内存占用情况")
时间: 2023-08-31 07:42:57 浏览: 69
### 回答1:
好的,以下是C++模拟的代码:
```c++
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
// 进程结构体
struct Process {
int id; // 进程ID
int status; // 进程状态,0:阻塞,1:就绪,2:执行
int executeTime; // 执行时间
int priority; // 优先级
int blockTime; // 阻塞时间
Process(int i, int e, int p) {
id = i;
status = 1;
executeTime = e;
priority = p;
blockTime = 0;
}
};
vector<Process> processList; // 进程列表
// 创建进程
void createProcess() {
int id, executeTime, priority;
cout << "请输入进程ID、执行时间和优先级,以空格隔开:";
cin >> id >> executeTime >> priority;
Process p(id, executeTime, priority);
processList.push_back(p);
cout << "成功创建进程!" << endl;
}
// 阻塞进程
void blockProcess() {
int id;
cout << "请输入要阻塞的进程ID:";
cin >> id;
for (int i = 0; i < processList.size(); i++) {
if (processList[i].id == id && processList[i].status == 2) {
processList[i].status = 0;
processList[i].blockTime = time(NULL);
cout << "成功阻塞进程!" << endl;
return;
}
}
cout << "进程不存在或进程未执行!" << endl;
}
// 执行进程
void executeProcess() {
int id;
cout << "请输入要执行的进程ID:";
cin >> id;
for (int i = 0; i < processList.size(); i++) {
if (processList[i].id == id && processList[i].status == 1) {
processList[i].status = 2;
cout << "成功执行进程!" << endl;
return;
}
}
cout << "进程不存在或进程已执行或阻塞!" << endl;
}
// 唤醒第一个阻塞进程
void wakeUpProcess() {
for (int i = 0; i < processList.size(); i++) {
if (processList[i].status == 0) {
processList[i].status = 1;
cout << "成功唤醒进程!" << endl;
return;
}
}
cout << "没有阻塞的进程!" << endl;
}
// 执行进程时间片到
void timeOut() {
bool flag = false;
for (int i = 0; i < processList.size(); i++) {
if (processList[i].status == 2) {
processList[i].status = 1;
flag = true;
cout << "时间片到,成功切换进程!" << endl;
break;
}
}
if (!flag) {
cout << "没有正在执行的进程!" << endl;
}
}
// 终止进程
void killProcess() {
int id;
cout << "请输入要终止的进程ID:";
cin >> id;
for (int i = 0; i < processList.size(); i++) {
if (processList[i].id == id) {
processList.erase(processList.begin() + i);
cout << "成功终止进程!" << endl;
return;
}
}
cout << "进程不存在!" << endl;
}
// 查看进程
void viewProcess() {
cout << "当前进程列表:" << endl;
cout << "ID\t状态\t执行时间\t优先级\t阻塞时间" << endl;
for (int i = 0; i < processList.size(); i++) {
cout << processList[i].id << "\t";
if (processList[i].status == 0) {
cout << "阻塞\t";
} else if (processList[i].status == 1) {
cout << "就绪\t";
} else {
cout << "执行\t";
}
cout << processList[i].executeTime << "\t" << processList[i].priority << "\t" << processList[i].blockTime << endl;
}
}
// 查看内存占用情况
void viewMemory() {
cout << "内存占用情况:" << endl;
cout << "进程ID\t执行时间" << endl;
for (int i = 0; i < processList.size(); i++) {
cout << processList[i].id << "\t" << processList[i].executeTime << endl;
}
}
int main() {
int choice;
while (true) {
cout << "请输入要进行的操作:1.创建进程 2.阻塞执行进程 3.执行进程 4.唤醒阻塞进程 5.执行进程时间片到 6.终止进程 7.查看进程 8.查看内存占用情况 0.退出" << endl;
cin >> choice;
switch (choice) {
case 0:
return 0;
case 1:
createProcess();
break;
case 2:
blockProcess();
break;
case 3:
executeProcess();
break;
case 4:
wakeUpProcess();
break;
case 5:
timeOut();
break;
case 6:
killProcess();
break;
case 7:
viewProcess();
break;
case 8:
viewMemory();
break;
default:
cout << "无效的操作!" << endl;
break;
}
}
return 0;
}
```
这个模拟程序实现了创建进程、阻塞执行进程、执行进程、唤醒第一个阻塞进程、执行进程时间片到、终止进程、查看进程和查看内存占用情况等功能。你可以根据需要进行修改和扩展。
### 回答2:
1.创建进程:创建进程是指在计算机系统中新建一个现有程序的实例,以便在操作系统的管理下独立运行。创建进程的方式可以是通过系统调用或者其他进程通过fork()或exec()等函数创建。
2.阻塞执行进程:当一个进程需要等待某些事件发生时,可以选择阻塞自己的执行,让其他进程占用CPU资源。阻塞执行进程通常是通过调用系统函数或者等待一个信号量来实现。
3.执行进程:执行进程是指操作系统从就绪队列中选择一个进程,并分配CPU资源给该进程执行。在一个多道程序系统中,有多个进程可以执行,操作系统通过调度算法来选择下一个要执行的进程。
4.唤醒第一个阻塞进程:当一个等待事件发生的进程收到事件信号时,操作系统会将其从阻塞状态转为就绪状态,并放入就绪队列中。一旦进程被唤醒,它就可以参与到CPU资源的竞争中来。
5.执行进程时间片到:为了公平地分配CPU资源,操作系统通常会采用时间片轮转的调度算法。当一个进程的时间片用完后,操作系统会剥夺该进程的CPU控制权,并将其重新放入就绪队列中等待下一轮调度。
6.终止进程:当一个进程完成了它的任务,或者出现了无法继续执行的错误,操作系统就会将其终止。终止进程的方式可以通过调用exit()函数或者发送终止信号来实现。
7.查看进程:在操作系统中,可以通过系统工具或者命令来查看当前运行的进程信息,包括进程ID、进程状态、占用的CPU和内存等。
8.查看内存占用情况:了解计算机系统中内存的使用情况对于性能优化和故障排除非常重要。可以通过系统工具或者命令来查看当前内存占用的情况,包括已使用内存、空闲内存以及内存交换等信息。
### 回答3:
1. 创建进程:当操作系统接收到一个新的任务时,会为该任务创建一个新的进程。创建进程的过程包括为该进程分配独立的内存空间、创建相应的数据结构等。
2. 阻塞执行进程:当一个进程发起某些阻塞型操作,如等待用户输入或等待某个资源就绪时,该进程会被标记为阻塞状态,暂停执行,直到满足相应的条件。
3. 执行进程:处于就绪状态的进程会被调度器选择并执行。执行进程时,操作系统会分配给该进程一定的CPU时间片,进程利用这段时间执行其指定的任务。
4. 唤醒第一个阻塞进程:当被阻塞的进程所需资源就绪后,操作系统会将其唤醒,使其重新进入就绪状态,并等待调度器选择执行。
5. 执行进程时间片到:每个进程在执行时都有一个时间片,当其时间片用完后,操作系统会将其状态设置为就绪状态,并选择下一个进程执行。
6. 终止进程:当一个进程完成了其任务,或者发生了错误、崩溃等情况时,操作系统会将其标记为终止状态,并释放其占用的资源。
7. 查看进程:操作系统提供了一些工具或命令,可以用来查看当前正在运行的进程,可以查看进程的进程ID、进程状态、所占用的资源等信息。
8. 查看内存占用情况:操作系统提供了相应的工具或命令,可以用来查看当前内存的使用情况,包括已使用的内存量、剩余的内存量等信息。通过查看内存占用情况,可以及时调整进程的内存分配,以提高系统的性能和效率。
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)