前言:
由于最近在准备linux面试,然后去找linux的八股文,找了很久才发现一篇整理的相对比较好的文章,因此进行转载推荐,并且我提取了一下面试率可能比较高的基础问题,如果侵权了请私聊,我会立刻删除。
原文链接https://cloud.tencent.com/developer/article/1975473
目录
1、为什么 Linux 体系结构要分为用户空间和内核空间的原因?
9、Linux 中进程有哪几种状态?在 ps 显示出来的信息中,分别用什么符号表示的?
Linux 的体系结构
- 用户空间(User Space) :用户空间又包括用户的应用程序(User Applications)、C 库(C Library) 。
- 内核空间(Kernel Space) :内核空间又包括系统调用接口(System Call Interface)、内核(Kernel)、平台架构相关的代码(Architecture-Dependent Kernel Code) 。
1、为什么 Linux 体系结构要分为用户空间和内核空间的原因?
- 现代 CPU 实现了不同的工作模式,不同模式下 CPU 可以执行的指令和访问的寄存器不同。
- Linux 从 CPU 的角度出发,为了保护内核的安全,把系统分成了两部分。
用户空间和内核空间是程序执行的两种不同的状态,我们可以通过两种方式完成用户空间到内核空间的转移:1)系统调用;2)硬件中断。
2、Linux 开机启动过程?
- 主机加电自检,加载 BIOS 硬件信息。
- 读取 MBR 的引导文件(GRUB、LILO)。
- 引导 Linux 内核。
- 运行第一个进程 init (进程号永远为 1 )。
- 进入相应的运行级别。
- 运行终端,输入用户名和密码。
3、Linux 使用的进程间通信方式有哪些?
- 管道(pipe)、流管道(s_pipe)、有名管道(FIFO)。
- 信号(signal) 。
- 消息队列。
- 共享内存。
- 信号量。
- 套接字(socket) 。
4、Linux 有哪些系统日志文件?
比较重要的是 /var/log/messages 日志文件。
该日志文件是许多进程日志文件的汇总,从该文件可以看出任何入侵企图或成功的入侵。另外,如果系统里有 ELK 日志集中收集,它也会被收集进去。
5、什么是交换空间?
交换空间是 Linux 使用的一定空间,用于临时保存一些并发运行的程序。当 RAM 没有足够的内存来容纳正在执行的所有程序时,就会发生这种情况。
6、什么是 LILO?
LILO 是 Linux 的引导加载程序。它主要用于将 Linux 操作系统加载到主内存中,以便它可以开始运行。
7、什么是 inode、block、sector ?
Sector(扇区)
:文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
block(块)
:操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector 组成一个 block。
inode(索引)
:文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做 inode,中文译名为"索引节点"。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
8、什么是硬链接和软链接?
- 硬链接
由于 Linux 下的文件是通过索引节点(inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配 inode 。每添加一个一个硬链接,文件的链接数就加 一 。
不足:
1)不可以在不同文件系统的文件间建立链接;
2)只有超级用户才可以为目录创建硬链接。
- 软链接
软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
不足:
因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
实际场景下,基本是使用软链接。总结区别如下:
- 硬链接不可以跨分区,软件链可以跨分区。
- 硬链接指向一个 inode 节点,而软链接则是创建一个新的 inode 节点。
- 删除硬链接文件,不会删除原文件,删除软链接文件,会把原文件删除。
9、Linux 中进程有哪几种状态?在 ps 显示出来的信息中,分别用什么符号表示的?
- 不可中断状态:进程处于睡眠状态,但是此刻进程是不可中断的。不可中断, 指进程不响应异步信号。
- 暂停状态/跟踪状态:向进程发送一个 SIGSTOP 信号,它就会因响应该信号 而进入 TASK_STOPPED 状态;当进程正在被跟踪时,它处于 TASK_TRACED 这个特殊的状态。
- “正在被跟踪”指的是进程暂停下来,等待跟踪它的进程对它进行操作。
- 就绪状态/运行状态:在 run_queue 队列里的状态
- 可中断睡眠状态:处于这个状态的进程因为等待某某事件的发生(比如等待 socket 连接、等待信号量),而被挂起
- zombie 状态(僵尸):父亲没有通过 wait 系列的系统调用会顺便将子进程的尸体(task_struct)也释放掉
- 退出/死亡状态
D 不可中断 Uninterruptible(usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核 2.6 开始无效)
X 死掉的进程
10、linux系统中,线程和进程之间的关系是什么?
线程和进程之间的主要区别是,进程是资源分配的基本单位,而线程是执行的基本单位。进程可以包含多个线程,但每个线程都有自己的执行上下文和调用栈,使得它们可以并行执行不同的任务。这使得线程更加轻量级和高效,因为它们不需要像进程那样在内存中维护独立的地址空间和系统资源。
11、CPU 负载和 CPU 利用率的区别是什么?
我们可以通过`uptime`,`w` 或者 `top` 命令看到 CPU 的平均负载
- CPU负载(Load Average):负载的3个数字,分别代表系统在过去的1分钟,5分钟,15分钟内的系统平均负载。他代表的是当前系统正在运行的和处于等待运行的进程数之和。也指的是处于可运行状态和不可中断状态的平均进程数。
- CPU 利用率:和负载不同,CPU利用率指的是当前正在运行的进程实时占用CPU的百分比,它是对一段时间内CPU使用状况的统计。
12、CPU 负载很高,利用率却很低该怎么办?
CPU 负载很高,利用率却很低,说明处于等待状态的任务很多,负载越高,代表可能很多僵死的进程。通常这种情况是IO密集型的任务,大量请求在请求相同的IO,导致任务队列堆积。
可以先通过top命令观察,假设发现现在确实是高负载低使用率。
然后,再通过命令ps -axjf
查看是否存在状态为D+
状态的进程,这个状态指的就是不可中断的睡眠状态的进程。处于这个状态的进程无法终止,也无法自行退出,只能通过恢复其依赖的资源或者重启系统来解决。
13、CPU 负载很低,利用率却很高该怎么办?
这表示 CPU 的任务并不多,但是任务执行的时间很长,通常是计算密集型任务,生成了大量耗时短的计算任务。
直接 top 命令找到使用率最高的任务,定位到去看看就行了。如果代码没有问题,那么过段时间CPU使用率就会下降的。