操作系统
1. 什么是进程?什么是线程?
方面 | 进程 | 线程 |
---|---|---|
基本单位 | 操作系统资源分配和调度的基本单位 | 程序执行的基本单位,属于进程的一部分. |
内存 | 进程之间是相互独立的,具有独立的内存空间。 | 同一进程内的线程共享内存,线程之间没有内存隔离。 |
通信方式 | 需要通过进程间通信机制(如管道、共享内存、消息队列等)。 | 线程之间共享进程资源,通信更方便(如直接访问共享变量)。 |
适用场景 | 更适合需要隔离的独立任务(如操作系统服务)。 | 更适合并发性高的任务(如多线程网络服务器)。 |
2. 内核线程和用户线程的区别?
相同点:内核线程和用户线程都是线程的一种,都可以执行任务。
不同点:内核线程是由操作系统创建和管理的,运行在内核态;而用户线程是由应用程序创建和管理的,运行在用户态。内核线程可以访问操作系统所有资源,执行任何操作系统提供的服务,如文件系统、网络等;用户线程只能访问应用程序的资源,只能执行应用程序提供的服务。内核现成的创建、销毁、切换、调度由操作系统内核负责,而用户线程由应用程序自己控制。
3. 进程的几种状态?
在操作系统中,进程是一个程序的运行实例,它会 随着运行的不同阶段和资源需求的变化而经历多种状态。
状态名称 | 说明 |
---|---|
新建(New) | 进程正在被创建,但尚未进入就绪队列,无法执行。 |
就绪(Ready) | 进程已分配了必要的资源,等待 CPU 调度执行。 |
运行(Running) | 进程正在 CPU 上执行。 |
阻塞(Blocked/Waiting) | 进程等待某种事件(如 I/O 操作完成)或资源(如锁)时进入此状态。 |
终止(Terminated) | 进程执行完成或因某种原因被终止,进入终止状态,操作系统会回收资源。 |
4. 进程创建方式
特性 | fork() |
vfork() |
---|---|---|
地址空间 | 父子进程拥有独立的地址空间。 | 父子进程共享同一地址空间,直到子进程调用 exec() 或 exit() 。 |
父进程执行状态 | 父进程和子进程可以并发执行,调度顺序不确定。 | 父进程会被挂起,直到子进程调用 exec() 或 exit() 。 |
效率 | 相较于 vfork() ,开销较大(但现代系统已优化)。 |
开销小,性能更高。 |
用途 | 适用于需要保留父进程地址空间的场景。 | 适用于子进程需要立刻执行新程序的场景(通过 exec() )。 |
内存安全性 | 子进程独立,不会影响父进程内存。 | 子进程可以影响父进程内存(共享地址空间)。 |
5. 进程间通信方式有哪些?有什么优缺点?
**通信方式 ** | 优点 | 缺点 | 适用场景 |
---|---|---|---|
管道 | 简单易用,适合父子进程通信 | 半双工,不适合大规模通信 | 父子进程间简单数据交换 |
消息队列 | 支持无亲缘关系进程通信,异步通信 | 消息容量有限,要考虑数据覆盖问题 | 多消息类型的异步传递 |
共享内存 | 高性能,支持大数据量传输 | 需额外同步机制,管理复杂 | 高性能数据共享 |
信号量 | 高效的同步和互斥控制 | 不能传递数据,只能用于同步 | 共享资源的访问控制 |
6. 僵尸进程、孤儿进程和守护进程是什么?
特性 | 僵尸进程 | 孤儿进程 | 守护进程 |
---|---|---|---|
定义 | 子进程已退出,但父进程未回收其资源。 | 父进程已退出,但子进程仍在运行。 | 独立于控制终端,在后台运行的长期进程。 |
原因 | 父进程未调用 wait() 。 |
父进程意外退出或主动终止。 | 手动设计,用于后台运行任务。 |
控制 | 系统不会主动清理,需要父进程处理。 | 自动由 init 进程接管,无需人工干预。 |
通过特定程序设计和初始化。 |
危害 | 可能耗尽系统的进程号资源。 | 无危害,由操作系统管理。 | 无危害,正常运行的后台任务。 |
7. 如何清理僵尸进程?
当系统中出现了僵尸进程时,我们是无法通过kill命令把他清除的,但是我们可以通过杀死他的父进程,让他变成孤儿进程,并进一步由系统中的 init 进程(PID=1)收养并清理。
标签:操作系统,05,线程,内核,进程,执行,运行 From: https://www.cnblogs.com/R-247274/p/18617933