学习笔记6

学习笔记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)等同步机制来保护共享资源,确保在同一时刻只有一个进程可以访问共享资源。

posted @ 2023-10-22 20:49  LLLZTTT  阅读(2)  评论(0编辑  收藏  举报
$