面试题学习笔记 | 操作系统 - 进程
线程和进程有什么区别
对于这个问题,首先我们要了解什么是进程,什么是线程
进程(process):一个运行中的程序实例,拥有独立的内存空间和系统资源。进程是操作系统分配资源的基本单位
线程(thread):属于进程,也被称为轻量级进程,更加轻量化。多个线程可以在同一个进程里同时执行,共享进程的内存空间和资源(比如文件句柄、数据段),但是每个线程有独立的栈和寄存器。线程是CPU 调度的基本单位
二者的主要区别还体现在以下两个方面:
资源消耗不同:
进程需要为其分配独立的内存空间和系统资源,创建和切换进程的开销较大
线程直接共享进程的资源,创建线程的开销较小,线程切换的开销也小于进程切换
通信方式不同:
进程之间由于内存空间独立,通信较为复杂,需要使用管道、消息队列、共享内存、套接字等方式
线程共享进程的内存空间,可以直接读写内存,但需要同步机制防止数据错误
进程之间的通信方式有哪些
常见的进程之间的通信方式有以下几种:
管道(pipes):
单向通信方式,允许父进程和子进程之间或者在同一主机上的不同进程传递数据
分为匿名管道(父子进程之间)和命名管道(可用于无亲缘关系的进程间通信)
消息队列(message queues):
允许进程发送消息到队列,接收方按需求获取,支持跨进程通信
共享内存(shared memory):
允许多个进程访问同一块内存区域,实现快速数据交换
需要使用同步机制防止竞态条件和数据不一致问题
信号量(semaphores):
用于管理共享资源访问,实现进程间互斥与同步
信号(signal):
一种异步通信方式,用于通知目标进程发生特定事件(如中断、终止)
套接字(socket):
网络通信基础,允许不同主机上的进程进行通信
文件(file):
进程可通过读写文件进行通信,常用于间接通信(如临时文件、共享文件)
进程调度算法有哪些
常见的进程调度算法有以下几种:
先来先服务(FCFS,First-Come, First-Served):
按照进程到达顺序调度,适用于批处理系统
简单易实现,但可能长任务拖延短任务
短作业优先(SJF,Shortest Job First):
优先调度执行时间最短的进程,减少平均等待时间
分为抢占式和非抢占式
需要预先知道任务执行时间,交互式系统中可行性低
优先级调度(Priority Scheduling):
根据进程优先级进行调度,优先级高的进程先执行
可能导致低优先级进程长期得不到调度(饥饿现象)
时间片轮转(RR,Round Robin):
为每个进程分配固定时间片,时间片结束后调度下一个进程
适用于交互式系统,提高系统响应性能
时间片大小影响系统性能
最高响应比优先(HRRN,Highest Response Ratio Next):
通过计算响应比选择下一个调度进程
适用于批处理环境,可平衡长短任务的等待时间,防止短任务过多导致长任务饥饿
多级反馈队列调度(MLFQ,Multilevel Feedback Queue):
结合多个调度策略,适用于多任务、多类型操作系统
进程被放入不同优先级队列,优先级高的先执行
执行时间越长,优先级可能降低
总结
线程和进程:进程是资源分配单位,线程是CPU 调度单位。线程共享进程资源,开销小,但需要同步机制
进程通信:包括管道、消息队列、共享内存、信号量、信号、套接字、文件,各有适用场景
调度算法:包括FCFS、SJF、优先级调度、RR、HRRN、MLFQ,不同算法适用于不同应用场景