首页 > 其他分享 >学习笔记6

学习笔记6

时间:2023-10-22 18:44:46浏览次数:34  
标签:NULL int 笔记 学习 pthread 进程 多任务处理 include

知识点总结

多任务处理

  • 多任务处理是操作系统的一个关键特性,允许多个进程并发运行。
  • 多任务处理提供了更好的系统利用率,可以在同一时间内运行多个进程。
  • 多任务处理有助于提供更好的响应时间,允许用户交互并同时运行多个应用程序。



进程

  • 进程是正在执行的程序的实例,包括程序的代码、数据、寄存器状态和有关该进程的系统资源信息。
  • 每个进程都有一个唯一的进程标识符(PID),用于唯一标识和操作该进程。
  • 新进程通常通过fork系统调用创建,产生的新进程被称为子进程。

多任务处理系统

  • 多任务处理系统使用调度器来确定在给定时间内哪些进程运行。
  • 调度器可以使用不同的调度算法(如时间片轮转或优先级调度)来决定执行顺序。
  • 进程可以处于运行态(正在执行)、就绪态(等待执行)或休眠态(等待某个事件)。
  • 进程之间的状态转换和调度取决于它们的状态和优先级。





进程同步

  • 进程同步是确保多个进程协调工作的关键问题,避免数据竞争和其他并发问题。
  • 互斥锁用于确保只有一个进程可以访问共享资源,避免竞争条件。
  • 信号量是一种同步工具,用于控制并发访问和避免资源争夺问题,可以用于进程间通信和协调。
  • 条件变量用于在多个进程之间进行通信和协调,可以用于等待某个条件为真时执行操作。

进程终止

  • 进程可以正常终止,通常是执行完主要任务或调用exit系统调用来实现的。
  • 进程也可以被操作系统强制终止,如出现错误或资源不足。
  • 父进程通常会使用wait或waitpid系统调用等待子进程终止,并获取子进程的退出状态码。

常见问题和解决方案

死锁问题

  • 问题描述:多个进程或线程相互等待对方释放资源,导致所有进程都无法继续执行。
  • 解决方案:避免死锁,可采用资源分配顺序策略、超时机制或死锁检测与解除。

竞争条件问题

  • 问题描述:多个进程或线程尝试同时访问共享资源,导致不可预测的结果。
  • 解决方案:使用互斥锁或信号量确保资源的互斥访问,或采用事务处理方式。

资源泄漏问题

  • 问题描述:进程在终止时未释放已分配的资源,导致系统资源泄漏。
  • 解决方案:编写良好的代码以确保资源在不再需要时被正确释放,或使用自动资源管理工具。

进程间通信问题

  • 问题描述:进程需要在不同地址空间的情况下进行通信,如父子进程或不相关进程之间的通信。
  • 解决方案:使用进程间通信(IPC)机制,如管道、消息队列、共享内存、套接字等,以安全地进行数据传递。

进程崩溃问题

  • 问题描述:进程崩溃可能导致数据损坏或系统不稳定。
  • 解决方案:实施进程监控和自动重启机制,以便在进程崩溃时快速恢复。

资源争夺问题

  • 问题描述:多个进程竞争有限的资源,如锁、内存或文件句柄。
  • 解决方案:实施资源管理策略,防止资源争夺,或通过限制资源使用来避免资源过度使用。

性能问题

  • 问题描述:系统负载高,响应时间慢,或进程之间的竞争导致性能下降。
  • 解决方案:优化代码、使用多线程或进程池,采用更高效的算法,提高系统性能。

实践

多任务处理

#include <stdio.h>
#include <unistd.h>

int main() {
    int pid = fork(); // 创建子进程
    if (pid == 0) {
        // 子进程代码
        printf("Child process is running\n");
    } else if (pid > 0) {
        // 父进程代码
        printf("Parent process is running\n");
    } else {
        // 创建进程失败
        perror("fork");
    }
    return 0;
}

创建多进程

#include <stdio.h>
#include <pthread.h>

int shared_variable = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

void *increment(void *arg) {
    for (int i = 0; i < 100000; i++) {
        pthread_mutex_lock(&mutex);
        shared_variable++;
        pthread_mutex_unlock(&mutex);
    }
    return NULL;
}

int main() {
    pthread_t thread1, thread2;
    pthread_create(&thread1, NULL, increment, NULL);
    pthread_create(&thread2, NULL, increment, NULL);

    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    printf("Shared variable: %d\n", shared_variable);
    return 0;
}

子进程和父进程的终止

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
    int pid = fork();
    if (pid == 0) {
        // 子进程
        printf("Child process is running\n");
        exit(0); // 正常终止子进程
    } else if (pid > 0) {
        // 父进程
        sleep(2); // 等待2秒
        printf("Parent process is running\n");
    }
    return 0;
}

标签:NULL,int,笔记,学习,pthread,进程,多任务处理,include
From: https://www.cnblogs.com/xuyuanqi/p/17780818.html

相关文章

  • 信息安全系统设计与实现第四章学习笔记
    一、知识点归纳1.并发计算导论在早期,大多数计算机只有一个处理组件,称为处理器或中央处理器(CPU)。受这种硬件条件的限制,计算机程序通常是为串行计算编写的。要求解某个问题,先要设计一种算法,描述如何一步步地解决问题,然后用计算机程序以串行指令流的形式实现该算法。在只有一个CPU......
  • 学习笔记6
    第三章Unix/Linux进程管理多任务处理多任务处理指的是同时进行几项独立活动的能力这种逻辑并行性称为“并发”多任务处理是所有操作系统的基础进程的概念进程是对映像的执行如下是一个非常简单的PROC结构体:next是指向下一个PROC结构体的指针ksp保存的堆栈指针pid是......
  • 第三章学习笔记
    第三章学习笔记一、Linux进程管理1.多任务处理在计算机技术中,多任务处理指的是同时执行几个独立的任务。在单处理器(单CPU)系统中,一次只能执行一个任务。多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操作从一个任务切换到另一个任务。不同任务之......
  • Go笔记(3)-3种go语言的键盘输入详解
    go语言的键盘输入详解go语言中有三种输入函数,分别是:fmt.Scanf()可以按照指定的格式进行输入fmt.Scanln()通过指针将值赋值给变量fmt.Scan()(1)fmt.ScanScan从标准输入扫描文本,读取空白符分隔的值保存到传递给本函数的参数中,将换行符视为空白符使用......
  • 学习笔记6
    关于知识点知识点归纳第三章Unix/Linux进程管理3.1多任务处理一般来说,多任务处理指的是同时进行几项独立活动的能力。计算机科学中的多任务处理:操作系统:多任务处理是操作系统的核心功能之一,它允许多个程序在同一台计算机上并行运行,提高了资源利用率。多线程:多线程是在......
  • 2023-2024-1 20231424 《计算机基础与程序设计》第4周学习总结
    2023-2024-120231424《计算机基础与程序设计》第4周学习总结作业信息作业属于的课程2022-2023-1-计算机基础与程序设计作业要求2022-2023-1计算机基础与程序设计第一周作业作业目标自学计算机科学概论第4章,第5章和C语言程序设计第3章作业正文https://www......
  • #学期2023-2024-1 20231416 《计算机基础与程序设计》》第四周学习总结
    ##作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第四周作业这个作业的目标自学教材:计算机科学概论第4章,第5章,C语言程序设计第3章并完成云班课测试作业正文 https://www.cnblogs.com/shanshu......
  • 机器学习——数据操作(读这一篇就够了!)
    为了能够完成各种数据操作,我们需要某种方法来存储和操作数据。 首先,我们介绍维数组,也称为&amp;lt;strong&amp;gt;&amp;lt;em&amp;gt;张量&amp;lt;/em&amp;gt;&amp;lt;/strong&amp;gt;(tensor)。使用过Python中NumPy计算包的读者会对本部分很熟悉。无论使用哪个深度学习框架,它的&......
  • 学习笔记6
    知识点总结:多任务处理:多任务处理是操作系统的一个关键特性,它允许多个进程并发运行。操作系统的多任务处理提供了更好的系统利用率,因为它能够在同一时间内运行多个进程,而不仅仅是一个。多任务处理有助于提供更好的响应时间,因为它允许用户交互并同时运行多个应用程序。进程:......
  • 程序设计语言学习5
    九、上下文无关文法十、中缀后缀表达式 ......