文章

面试题学习笔记 | 操作系统 - 进程

线程和进程有什么区别

对于这个问题,首先我们要了解什么是进程,什么是线程

  • 进程(process):一个运行中的程序实例,拥有独立的内存空间和系统资源。进程是操作系统分配资源的基本单位

  • 线程(thread):属于进程,也被称为轻量级进程,更加轻量化。多个线程可以在同一个进程里同时执行,共享进程的内存空间和资源(比如文件句柄、数据段),但是每个线程有独立的栈和寄存器。线程是CPU 调度的基本单位

二者的主要区别还体现在以下两个方面:

  1. 资源消耗不同

    • 进程需要为其分配独立的内存空间和系统资源,创建和切换进程的开销较大

    • 线程直接共享进程的资源,创建线程的开销较小,线程切换的开销也小于进程切换

  2. 通信方式不同

    • 进程之间由于内存空间独立,通信较为复杂,需要使用管道、消息队列、共享内存、套接字等方式

    • 线程共享进程的内存空间,可以直接读写内存,但需要同步机制防止数据错误

进程之间的通信方式有哪些

常见的进程之间的通信方式有以下几种:

  1. 管道(pipes)

    • 单向通信方式,允许父进程和子进程之间或者在同一主机上的不同进程传递数据

    • 分为匿名管道(父子进程之间)和命名管道(可用于无亲缘关系的进程间通信)

  2. 消息队列(message queues)

    • 允许进程发送消息到队列,接收方按需求获取,支持跨进程通信

  3. 共享内存(shared memory)

    • 允许多个进程访问同一块内存区域,实现快速数据交换

    • 需要使用同步机制防止竞态条件和数据不一致问题

  4. 信号量(semaphores)

    • 用于管理共享资源访问,实现进程间互斥与同步

  5. 信号(signal)

    • 一种异步通信方式,用于通知目标进程发生特定事件(如中断、终止)

  6. 套接字(socket)

    • 网络通信基础,允许不同主机上的进程进行通信

  7. 文件(file)

    • 进程可通过读写文件进行通信,常用于间接通信(如临时文件、共享文件)

进程调度算法有哪些

常见的进程调度算法有以下几种:

  1. 先来先服务(FCFS,First-Come, First-Served)

    • 按照进程到达顺序调度,适用于批处理系统

    • 简单易实现,但可能长任务拖延短任务

  2. 短作业优先(SJF,Shortest Job First)

    • 优先调度执行时间最短的进程,减少平均等待时间

    • 分为抢占式和非抢占式

    • 需要预先知道任务执行时间,交互式系统中可行性低

  3. 优先级调度(Priority Scheduling)

    • 根据进程优先级进行调度,优先级高的进程先执行

    • 可能导致低优先级进程长期得不到调度(饥饿现象)

  4. 时间片轮转(RR,Round Robin)

    • 为每个进程分配固定时间片,时间片结束后调度下一个进程

    • 适用于交互式系统,提高系统响应性能

    • 时间片大小影响系统性能

  5. 最高响应比优先(HRRN,Highest Response Ratio Next)

    • 通过计算响应比选择下一个调度进程

    • 适用于批处理环境,可平衡长短任务的等待时间,防止短任务过多导致长任务饥饿

  6. 多级反馈队列调度(MLFQ,Multilevel Feedback Queue)

    • 结合多个调度策略,适用于多任务、多类型操作系统

    • 进程被放入不同优先级队列,优先级高的先执行

    • 执行时间越长,优先级可能降低

总结

  • 线程和进程:进程是资源分配单位,线程是CPU 调度单位。线程共享进程资源,开销小,但需要同步机制

  • 进程通信:包括管道、消息队列、共享内存、信号量、信号、套接字、文件,各有适用场景

  • 调度算法:包括FCFS、SJF、优先级调度、RR、HRRN、MLFQ,不同算法适用于不同应用场景

License:  CC BY 4.0