Linux常用知识点

Linux

进程间通信

例如:$ping localhost | cut -c 1-24

基于管道的进程间数据交换发生在内核空间,创建管道后,这个管道在内核空间中会有一个专用的缓冲区,用于写入和读取数据。

进程控制块

操作系统对进程的管理就是先描述,后组织。怎么对进程进行描述的呢?答案就是:进程控制块PCB是对进程描述的一个结构体。这里我们知道了PCB是用来描述进程的一个结构体。是为了我们后面对进程更好的组织和管理。

  在Linux下描述进程的PCB是task_struct

进程控制块(PCB,Process Control Block) 是操作系统用来管理和控制进程的一个数据结构。每当操作系统创建一个新进程时,都会为该进程分配一个 PCB,存储该进程的相关信息。PCB 是操作系统进行进程调度和管理的核心,它保存了与进程执行相关的重要信息,帮助操作系统在进程切换时恢复进程的状态。

PCB 包含的主要信息:

  1. 进程状态(Process State)

    • 表示进程当前的状态,例如 就绪运行等待终止等。
  2. 程序计数器(Program Counter, PC)

    • 存储进程下一条指令的地址。操作系统在上下文切换时,通过该信息能够恢复进程的执行状态。
  3. CPU 寄存器的值

    • 包括通用寄存器、浮点寄存器、指令寄存器、堆栈指针等,这些是进程执行时用到的寄存器内容。
    • 当进程切换时,操作系统需要保存当前进程的寄存器状态,以便下次恢复执行时继续从正确的位置开始。
  4. 内存管理信息

    • 包括进程的地址空间信息,比如页表、段表等,用来管理进程的虚拟内存和物理内存映射。
  5. 进程标识符(PID, Process ID)

    • 每个进程都会有一个唯一的标识符,操作系统通过该 ID 来识别进程。
  6. 父进程和子进程信息

    • 记录进程的父进程和子进程关系,通常有 PPID(父进程 ID)和 PID(当前进程 ID)字段。
  7. 调度信息

    • 包括调度优先级、时间片、等待队列、调度队列等,操作系统利用这些信息来决定进程的调度顺序。
  8. I/O 状态信息

    • 包括与进程相关的输入输出设备的信息,以及与 I/O 操作相关的缓冲区、文件描述符等。
  9. 进程的资源信息

    • 包括进程拥有的资源,如打开的文件、占用的系统资源、网络连接等。
  10. 进程的计时信息

    • 包括进程使用的 CPU 时间、启动时间、终止时间等,用于进程的时间管理和调度。

PCB 在进程调度中的作用:

  • 上下文切换:操作系统通过保存当前进程的 PCB 和加载下一个进程的 PCB,来实现进程的上下文切换。这意味着当 CPU 从一个进程切换到另一个进程时,操作系统能够恢复每个进程的执行状态,使得进程看起来像是“并行”执行。

  • 进程管理:操作系统可以通过检查和修改 PCB 中的信息,来管理进程的生命周期,如创建、销毁、挂起、恢复等。

PCB 结构示例:

假设一个 PCB 结构可能如下所示:

struct PCB {
    int pid;               // 进程 ID
    int ppid;              // 父进程 ID
    int state;             // 进程状态(就绪、运行、等待等)
    int priority;          // 进程优先级
    int program_counter;   // 程序计数器
    int registers[32];     // CPU 寄存器
    int memory_info;       // 内存管理信息(页表等)
    int io_info;           // I/O 状态信息
    int resource_info;     // 资源使用情况
    // 其他资源和状态信息...
};

线程和进程

1. 进程(Process)

定义:

进程是一个程序在操作系统中运行时的实例,它包含了程序代码、当前活动、堆栈、数据以及程序执行所需的其他资源。每个进程都有自己独立的地址空间、代码、数据、堆栈和系统资源(如文件句柄、内存等)。

主要特点:
  • 独立性:每个进程都有自己的独立内存空间(虚拟地址空间),互相之间不能直接访问对方的内存。
  • 资源占用:进程启动时会分配一定的系统资源(如内存、CPU 时间、I/O 设备等)。每个进程通常有自己的堆、栈、文件描述符等资源。
  • 调度:进程由操作系统调度和管理,通常有较大的开销,因为涉及到上下文切换(保存和恢复进程的状态)。
  • 隔离性:不同进程之间的错误不会直接影响其他进程,这种隔离性提高了系统的稳定性和安全性。
进程的生命周期:
  1. 创建:由操作系统或用户请求启动。
  2. 执行:进程会在 CPU 上执行。
  3. 阻塞:进程可能会等待某些资源或事件(如 I/O 操作)。
  4. 终止:执行完毕或被终止。
进程间通信(IPC):

进程间的通信需要特殊的机制,如:

  • 管道(Pipes)
  • 消息队列(Message Queues)
  • 共享内存(Shared Memory)
  • 信号量(Semaphores)

2. 线程(Thread)

定义:

线程是进程内的一个执行单元。一个进程可以有多个线程,这些线程共享进程的资源(如内存、文件描述符等),但每个线程有自己的寄存器、堆栈和程序计数器。线程是 CPU 调度的基本单位。

主要特点:
  • 共享资源:同一进程内的所有线程共享进程的内存空间、全局变量等资源,因此线程之间的通信非常高效。
  • 较轻量级:线程的创建、销毁和切换开销相对较小,因为它们共享大部分资源,不需要操作系统分配和管理大量资源。
  • 并发执行:多线程可以并发执行,通常用于提高程序的响应性和并行处理能力。
  • 独立执行:每个线程有自己的程序计数器和栈空间,它们的执行流是独立的,但共享进程的堆和全局变量。
线程的生命周期:
  1. 创建:由主线程或其他线程创建。
  2. 执行:线程会在 CPU 上执行。
  3. 阻塞:线程可能会等待某些资源或事件。
  4. 终止:线程执行完成后终止。
线程之间的通信:

线程之间的通信非常简单,因为它们共享同一个进程的内存空间。常见的通信方式包括:

  • 共享内存
  • 互斥锁(Mutexes)
  • 条件变量(Condition Variables)
  • 读写锁(Read/Write Locks)

3. 进程与线程的比较

特性进程(Process)线程(Thread)
定义进程是程序的一个实例,拥有独立的资源。线程是进程中的一个执行单元,多个线程共享进程资源。
资源分配每个进程有独立的内存空间、文件描述符等资源。线程共享进程的内存空间和资源,每个线程有自己的堆栈和寄存器。
调度与切换开销进程切换开销较大,需要保存和恢复整个进程的状态。线程切换开销较小,因为线程共享进程资源。
通信方式进程间通信较复杂,通常需要 IPC(如共享内存、消息队列)。线程间通信简单,通过共享内存或同步机制即可。
创建与销毁进程的创建和销毁需要较多的操作系统资源。线程的创建和销毁较为轻量。
独立性进程相互独立,彼此的错误不会直接影响。线程共享同一进程的内存空间,线程之间的错误可能影响整个进程。
可靠性与稳定性由于进程间隔离,系统的稳定性较高。由于线程共享内存,某个线程出错可能导致整个进程崩溃。

4. 进程和线程的使用场景

  • 进程:适用于需要完全独立的资源和隔离的应用场景,如运行多个应用程序、进程间通信比较复杂的情况。

    • 例如,操作系统中运行的不同应用程序、数据库服务器中的每个数据库实例。
  • 线程:适用于需要并发处理的任务,线程轻量化的特点使得它非常适合并行计算、I/O 密集型任务和响应性要求高的应用场景。

    • 例如,Web 服务器、图形用户界面(GUI)应用程序、并行计算(如科学计算、数据处理等)。

总结:

  • 进程 是操作系统分配资源的基本单位,每个进程都有独立的内存空间和资源,进程间相互独立。
  • 线程 是进程中的最小执行单位,线程之间共享进程资源,它们的创建、调度和切换比进程轻量,因此常用于并发和多任务处理。

两者在性能、资源分配、调度策略等方面有不同的优势和应用场景。在实际开发中,经常会根据需要选择使用进程或线程,甚至是两者结合的方式来实现并发或并行计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值