进程概念与进程控制
发布人:shili8
发布时间:2024-12-22 02:26
阅读次数:0
**进程概念与进程控制**
在计算机系统中,进程是程序的执行实例。每个进程都有自己的虚拟地址空间、进程控制块(PCB)、进程状态等特征。进程控制是操作系统管理进程的一种方式,它涉及到进程的创建、调度、同步和通信等方面。
**1. 进程概念**
进程是程序执行的一个实例,具有自己的虚拟地址空间、进程控制块(PCB)、进程状态等特征。每个进程都有自己的独立的内存空间,进程之间不会相互干扰。
**2. 进程控制块(PCB)**
进程控制块(PCB)是操作系统为每个进程维护的一个数据结构,它包含了进程的基本信息,如进程ID、进程状态、进程优先级等。PCB是进程管理的核心。
**3. 进程状态**
进程状态是指进程当前的执行状态,包括:
* **就绪态(Ready)**:进程正在等待CPU分配。
* **运行态(Running)**:进程正在被CPU执行。
* **阻塞态(Blocked)**:进程由于某种原因暂时停止了执行。
**4. 进程控制**
进程控制是操作系统管理进程的一种方式,它涉及到进程的创建、调度、同步和通信等方面。下面是一些常见的进程控制函数:
* **fork()**:创建一个新的进程。
* **exec()**:执行一个新程序,替换当前进程的内存空间。
* **wait()**:等待子进程结束,并获取其返回值。
* **kill()**:终止一个进程。
###代码示例
c#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
// 创建一个新的进程int main() {
pid_t pid = fork();
if (pid == -1) {
// fork失败,返回-1 perror("fork");
exit(1);
} else if (pid ==0) {
// 子进程执行 printf("子进程PID:%d
", getpid());
sleep(2); // 等待2秒 printf("子进程结束
");
return0;
} else {
// 父进程执行 printf("父进程PID:%d
", getpid());
wait(NULL); // 等待子进程结束 printf("父进程结束
");
return0;
}
}
###代码注释* **fork()**函数创建一个新的进程,返回值为新进程的PID。如果创建失败,则返回-1。
* **exec()**函数执行一个新程序,替换当前进程的内存空间。
* **wait()**函数等待子进程结束,并获取其返回值。
### 进程控制块(PCB)
ctypedef struct {
int pid; // 进程ID int state; // 进程状态 int priority; // 进程优先级} PCB;
### 进程状态
cenum ProcessState {
READY =0, // 就绪态 RUNNING =1, // 运行态 BLOCKED =2 // 阻塞态};
### 进程控制函数
cvoid createProcess(PCB *pcb); // 创建一个新的进程void scheduleProcess(PCB *pcb); // 调度一个进程void synchronizeProcess(PCB *pcb); // 同步一个进程void communicateProcess(PCB *pcb); // 通信一个进程
### 进程控制函数实现
cvoid createProcess(PCB *pcb) {
// 创建一个新的进程 pid_t pid = fork();
if (pid == -1) {
// fork失败,返回-1 perror("fork");
exit(1);
} else if (pid ==0) {
// 子进程执行 printf("子进程PID:%d
", getpid());
sleep(2); // 等待2秒 printf("子进程结束
");
return;
} else {
// 父进程执行 printf("父进程PID:%d
", getpid());
wait(NULL); // 等待子进程结束 printf("父进程结束
");
return;
}
}
void scheduleProcess(PCB *pcb) {
// 调度一个进程 if (pcb->state == READY) {
// 进程处于就绪态,调度执行 printf("调度进程PID:%d
", pcb->pid);
return;
} else {
// 进程不处于就绪态,不进行调度 printf("进程不处于就绪态
");
return;
}
}
void synchronizeProcess(PCB *pcb) {
// 同步一个进程 if (pcb->state == BLOCKED) {
// 进程处于阻塞态,同步执行 printf("同步进程PID:%d
", pcb->pid);
return;
} else {
// 进程不处于阻塞态,不进行同步 printf("进程不处于阻塞态
");
return;
}
}
void communicateProcess(PCB *pcb) {
// 通信一个进程 if (pcb->state == READY || pcb->state == RUNNING) {
// 进程处于就绪态或运行态,通信执行 printf("通信进程PID:%d
", pcb->pid);
return;
} else {
// 进程不处于就绪态或运行态,不进行通信 printf("进程不处于就绪态或运行态
");
return;
}
}
### 进程控制函数使用示例
cint main() {
PCB pcb;
// 创建一个新的进程 createProcess(&pcb);
// 调度一个进程 scheduleProcess(&pcb);
// 同步一个进程 synchronizeProcess(&pcb);
// 通信一个进程 communicateProcess(&pcb);
return0;
}
### 进程控制函数使用示例注释* **createProcess()**函数创建一个新的进程。
* **scheduleProcess()**函数调度一个进程。
* **synchronizeProcess()**函数同步一个进程。
* **communicateProcess()**函数通信一个进程。
### 进程控制函数使用示例实现
cvoid createProcess(PCB *pcb) {
// 创建一个新的进程 pid_t pid = fork();
if (pid == -1) {
// fork失败,返回-1 perror("fork");
exit(1);
} else if (pid ==0) {
// 子进程执行 printf("子进程PID:%d
", getpid());
sleep(2); // 等待2秒 printf("子进程结束
");
return;
} else {
// 父进程执行 printf("父进程PID:%d
", getpid());
wait(NULL); // 等待子进程结束 printf("父进程结束
");
return;
}
}
void scheduleProcess(PCB *pcb) {
// 调度一个进程 if (pcb->state == READY) {
// 进程处于就绪态,调度执行 printf("调度进程PID:%d
", pcb->pid);
return;
} else {
// 进程不处于就绪态,不进行调度 printf("进程不处于就绪态
");
return;
}
}
void synchronizeProcess(PCB *pcb) {
// 同步一个进程 if (pcb->state == BLOCKED) {
// 进程处于阻塞态,同步执行 printf("同步进程PID:%d
", pcb->pid);
return;
} else {
// 进程不处于阻塞态,不进行同步 printf("进程不处于阻塞态
");
return;
}
}
void communicateProcess(PCB *pcb) {
// 通信一个进程 if (pcb->state == READY || pcb->state == RUNNING) {
// 进程处于就绪态或运行态,通信执行 printf("通信进程PID:%d
", pcb->pid);
return;
} else {
// 进程不处于就绪态或运行态,不进行通信 printf("进程不处于就绪态或运行态
");
return;
}
}
### 进程控制函数使用示例

