Linux自学day23-进程和线程

1. 什么是进程?

进程是程序执行的过程,涵盖创建、调度和消亡阶段,是活的。

程序是一段数据的集合,是死的。

进程还是操作系统资源分配的最小单元,拥有独立的虚拟地址空间,包括文本段、数据段、系统数据段等区域,用于存储代码、数据等不同类型信息。

2. 进程空间如何划分?每个区域的特点?每个区域存放哪些数据?

32 位操作系统中,进程有 0 - 4G 虚拟内存空间,包含内核栈区系统数据段堆区数据段未初始化数据段 (.bss)、字符串常量区 (.rodata)、文本段

文本段:存储代码和指令;

数据段:存放全局变量、静态变量、字符串常量,编译时分配空间,程序结束回收;

系统数据段:栈区由操作系统管理,存放局部变量,变量定义时分配空间,作用域结束回收,未初始化值为随机值;堆区由程序员管理,通过 malloc 申请、free 释放;

内核:操作系统核心区域,用户无法访问,负责多种系统管理任务。

3. 常见的进程调度算法有哪些?

常见的进程调度算法有:

先来先执行(先到的任务先执行)

高优先级调度算法(优先执行优先级高的任务)

时间片轮转调度算法(CPU 按固定时间片在进程间切换执行)

多级队列反馈(根据进程特性划分队列,不同队列有不同调度策略)

负载均衡调度算法(将任务均衡分配到多个处理器上执行)

4. 进程状态分为哪几种类型?

进程状态分为:

就绪态(正在运行的任务,未占用 CPU)

运行态(正在运行且占用 CPU)

可唤醒等待态(进程挂起,等待资源到达后继续执行)

不可唤醒等待态(进程挂起,等待特定信号继续执行)

暂停态(进程挂起,等待 CPU 指令继续执行)

僵尸态(代码执行完毕,但空间仍存在)

结束态(代码执行完毕,空间被回收)

5. 进程相关的命令有哪些?

进程相关命令有:

top:按 CPU 占用率查看当前所有进程任务

ps -ef:查看所有进程,可与 grep 组合查找特定进程

ps -aux:查看进程状态

pstree:查看所有进程的关系

kill:通过 PID 或进程名终止进程

在命令后加 &:在后台执行程序。

6. 如何创建进程?fork 和 vfork 有什么区别?

通过 fork 函数创建进程,fork 函数调用后会创建一个子进程,父进程和子进程从 fork 函数调用处开始并发执行。

fork 和 vfork 的区别在于:

fork 创建的子进程拥有独立的地址空间,父子进程的地址空间相互独立

vfork 创建的子进程共享父进程的地址空间,子进程执行期间父进程被阻塞,直到子进程调用 exit 或 exec 系列函数,并且 vfork 保证子进程先运行。

7. 什么是僵尸进程?如何产生?如何避免?

僵尸进程是进程执行结束后,空间没有被回收的进程。

产生原因是子进程结束时,父进程未回收其空间。

避免方法有两种:

一是让父进程先结束,子进程成为孤儿进程被 init 进程收养,子进程结束时 init 进程回收其空间;二是子进程结束时,父进程使用 wait 或 waitpid 函数回收子进程空间。

相关推荐
双叶8362 小时前
(C语言)虚数运算(结构体教程)(指针解法)(C语言教程)
c语言·开发语言·数据结构·c++·算法·microsoft
TDD_06284 小时前
【运维】Centos硬盘满导致开机时处于加载状态无法开机解决办法
linux·运维·经验分享·centos
x66ccff4 小时前
vLLM 启动 GGUF 模型踩坑记:从报错到 100% GPU 占用的原因解析
linux
序属秋秋秋5 小时前
算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】
c语言·c++·学习·算法
William.csj5 小时前
Linux——开发板显示器显示不出来,vscode远程登录不进去,内存满了的解决办法
linux·vscode
想睡hhh5 小时前
c语言数据结构——八大排序算法实现
c语言·数据结构·排序算法
KeithTsui5 小时前
GCC RISCV 后端 -- 控制流(Control Flow)的一些理解
linux·c语言·开发语言·c++·算法
森叶5 小时前
linux如何与windows进行共享文件夹开发,不用来回用git进行拉来拉去,这个对于swoole开发者来说特别重要
linux·git·swoole
liulilittle5 小时前
Linux 高级路由策略控制配置:两个不同路由子网间通信
linux·网络·智能路由器
学习至死qaq5 小时前
windows字体在linux访问异常
linux·运维·服务器