目录
学习笔记6
知识点归纳
第3章 Unix/linux进程管理
-
多任务处理
Unix/Linux操作系统支持多任务处理,即同时运行多个程序或任务。每个任务都是一个进程,独立运行,互不干扰。 -
进程的概念:
进程是操作系统中的一个程序执行实例。它包含了程序的代码和相关数据,以及程序执行时的各种状态信息。每个进程都是系统资源的一个独立单位,有自己的内存空间、文件描述符等。 -
多任务处理系统:
Unix/Linux系统是多任务处理系统的典型代表,它可以同时执行多个进程。系统通过进程调度算法来分时使用CPU资源,实现多个进程的并发执行。 -
进程同步:
进程同步是指控制多个进程之间的执行顺序,以避免竞争条件(Race Condition)和数据不一致等问题。常用的同步机制包括互斥锁、信号量、条件变量等,用于确保进程的有序执行和数据的一致性。 -
进程终止:
进程可以因为多种原因终止,包括正常退出、异常退出、被其他进程终止等。进程的终止会释放系统资源,包括内存、文件描述符等,确保系统的稳定性和资源的有效利用。 -
创建进程:
使用fork()系统调用在Unix/Linux系统中创建新的进程。父进程调用fork()后,会创建一个新的子进程,两者在不同的内存空间中运行。
#include <unistd.h>
#include <stdio.h>
int main() {
pid_t pid;
pid = fork();
if (pid == 0) {
// 子进程执行的代码
printf("This is child process\n");
} else {
// 父进程执行的代码
printf("This is parent process\n");
}
return 0;
}
- 等待子进程结束
使用wait()系统调用,父进程可以等待子进程的结束,防止子进程成为僵尸进程(Zombie Process)。
#include <sys/wait.h>
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid;
int status;
pid = fork();
if (pid == 0) {
// 子进程执行的代码
printf("This is child process\n");
} else {
// 父进程等待子进程结束
wait(&status);
printf("Child process has terminated\n");
}
return 0;
}
- 进程同步 - 互斥锁:
使用互斥锁来保护共享资源,确保在同一时刻只有一个进程可以访问共享资源。
#include <pthread.h>
#include <stdio.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* thread_function(void* arg) {
pthread_mutex_lock(&mutex);
// 访问共享资源的代码
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main() {
pthread_t thread;
pthread_create(&thread, NULL, thread_function, NULL);
pthread_join(thread, NULL);
return 0;
}
苏格拉底挑战
问题与解决方案
问题:可能遇到僵尸进程。
解决方案:在创建子进程后,使用wait()或waitpid()函数等待子进程的结束。这样,父进程会等待子进程结束并回收其资源,防止子进程变成僵尸进程。
#include <sys/wait.h>
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid;
int status;
pid = fork();
if (pid == 0) {
// 子进程执行的代码
printf("This is child process\n");
} else {
// 父进程等待子进程结束
waitpid(pid, &status, 0);
printf("Child process has terminated\n");
}
return 0;
}
问题:处理进程之间的同步和互斥问题
解决方案:使用互斥锁(Mutex)等同步机制来保护共享资源,确保在同一时刻只有一个进程可以访问共享资源。