持续更新中
从基础到架构,从中间件到框架,从使用到底层原理,覆盖了Java服务端开发中经常用到的技术体系,根据重要知识点,常见面试题,以及技术背后的难点疑惑点,逐步优化问题描述,使ChatGpt总结出简洁易懂的答案,以便更好的理解记忆。
1、什么是Linux
Linux是一种开源的操作系统,基于Unix的理念。
2、什么是Linux内核
内核是Linux操作系统的核心,负责与硬件交互,管理系统资源。包括CPU、内存、磁盘、网络等
3、Linux 和 Windows的主要区别是什么
开源 vs 关闭源代码、文件系统结构、命令行工具的使用。
4、Linux基本组件
内核
- 内核是Linux 操作系统的核心,负责管理系统的资源,包括CPU、内存、磁盘网络等。主要覆盖功能如,进程管理、内存管理、网络管理、文件系统管理、以及设备驱动程序等。
shell
- shell是用户与Linux系统交互的界面,它接收用户输入的命令,并将其传递给内核执行
文件系统
- Linux的文件系统是一种层次结构,用于组织和存储文件和目录。
使用工具
- Linux系统提供了大量的实用工具,用于完成各种任务。如文件操作工具,cp\mv;文件处理工具 ,grep/awk;系统管理工具,ps\top,开发工具,gcc\make等
5、Linux的体系结构
Linux的体系结构可以分为用户空间、内核空间以及硬件层;
用户空间
- 用户应用程序:这是用户直接使用的程序,如果办公软件、开发工具等。它们通过系统调用与内核进行交互,以请求系统资源和执行特定的操作。
- 库函数:为应用程序提供了系列的函数库,这些库函数封装了系统调用,比如C标准库等。
内核空间
- 系统调用接口:这是用户空间与内核空间的桥梁,应用程序通过系统调用向内核请求服务。系统调用提供了一种安全、可靠的方式,让用户程序访问内核的功能。
- 内核:这是Linux操作系统的核心,包括进程管理、内存管理、网络管理、文件系统、设备驱动程序。
硬件层
- 硬件层包括计算机的物理硬件设备,如CPU、内存、硬盘、网卡等。内核通过设备驱动程序与硬件进行交互。
总结
Linux的体系结构采用分层的设计思想,将不同的功能模块划分到不同的层次中,使得系统具有良好的可扩展性和可维护性。
用户空间的应用程序通过系统调用与内核进行交互,内核负责管理系统资源,并为应用程序提供服务。硬件层则提供了物理基础,支持整个系统的运行。
Linux系统分为用户空间和内核空间原因
安全性考虑
- 保护内核:内核是操作系统的核心部分,如果所有程序都能直接访问和修改内核数据结构和代码,那么一个有漏洞的应用程序可能导致整个系统崩溃。通过将内核空间与用户空间分离,可以防止用户程序意外或恶意地破坏内核,提高系统的稳定性和安全性。
- 权限控制:内核空间具有更高的权限级别,可以执行特权操作,如访问硬件设备、管理内存等。而用户空间的程序通常只能在受限的权限下运行,不能直接进行这些特权操作,防止普通用户程序滥用系统资源或进行危险的操作。
稳定性考虑
- 隔离错误:如果一个用户程序出现错误或崩溃,通常只会影响到自身所在的用户空间,而不会直接影响到内核空间和其他正在运行的程序
- 模块化开发:将系统分为用户分为用户空间和内核空间有助于实现模块化的开发。内核开发者可以专注于内核的功能实现和稳定性,而应用程序开发者可以在用户空间进行开发,无需深入了解内核的内部实现细节。
资源管理效率
- 按需加载:用户空间的程序只有在需要时才会通过系统调用请求内核的服务。这样可以避免不必要的内核资源占用,提高系统的资源利用率。
- 多任务调度:内核负责对系统中的多个进程进行调度,合理分配CPU时间和其他资源。通过将用户空间和内核空间分离,内核可以更好地管理不同进程的执行,确保各个进程在有限的资源下公平地运行。同时,内核可以根据系统负载情况动态地调整资源分配策略,提高系统的整体性能。
6、用户态和内核态
在Linux操作系统中,用户态和内核态是两种不同的执行环境,这两种态的设计主要是为了提高系统的安全性和稳定性。
用户态
- 定义:用户态是用户应用程序运行的环境。在用户态下,程序不能直接访问硬件资源和内存管理功能。任何对这些操作的请求都必须通过内核来进行。
- 权限:用户态的权限相对较低,应用程序如果需要执行更高权限的操作(如访问硬件设备、执行系统调用等)就需要向内核请求。
内核态
- 定义: 内核态是系统内核运行的环境。在内核态下,程序具有完全的权限,可以直接访问硬件和执行特权操作。
- 权限:内核态下的代码可以访问任何内存区域,执行所有CPU指令,因此对系统的安全性和稳定性至关重要。
切换时间
- 系统调用:用户态程序通过系统调用(如read、write等)请求内核执行特权操作,这个过程会导致从用户态切换到内核态。
- 中断:硬件中断(如定时器中断)或软中断(如信号)会使控制权从用户态转交给内核态,以响应事件。
- 异常:非法内存访问会触发异常,内核会介入处理,进行状态切换。
切换开销
- 上下文切换:切换需要保持和恢复CPU上下文的状态。
- 内存管理:有时可能涉及内存映射的切换。
- 缓存失效:每次切换都可能导致CPU缓存失效,影响性能。
总结
用户态和内核态分别对应着不同的权限和功能,系统调用和中断是它们之间切换的主要方式。虽然切换是必须的,但也带来一定的性能开销,因此高效的程序设计通常会尝试减少不必要的切换,以提高系统性能。
7、进程和线程的区别
定义
- 进程:进程是操作系统分配资源的基本单位,通常表示一个正在运行的程序。每个进程都有独立的地址空间和资源(如内存)。
- 线程:线程是进程中的一个执行单元,是操作系统调度的基本单位。一个进程可以包含多个线程,这些线程共享进程的资源(如内存)。
内存使用
- 进程:每个进程都有单独的内存空间,进程之间不共享内存。
- 线程:同一进程中的多个线程共享进程的内存空间,因此可以直接访问相同的数据和资源。
创建和销毁
- 进程:创建和销毁进程的开销较大,因为每个进程都有独立的资源和地址空间。
- 线程:创建和销毁线程的开销相对较小,因为同一进程中的线程共享资源。
调度和管理
- 进程:操作系统进行调度时,进程的上下文切换开销较大,因为需要保持和恢复进程的完整状态。
- 线程:线程调度和上下文切换开销较小,因为只有线程级别的状态需要保持和恢复
总结
进程 是操作系统资源分配的基本单位,具有独立的内存和资源。
线程 是进程中的执行单元,是系统调度的基本单位,线程间可以共享资源,通信更加灵活。
8、操作系统的内存管理
物理内存与虚拟内存
- 物理内存:即实际的硬件内存,是计算机中用于存储数据和程序的物理存储设备。Linux内核通过内存管理单元来管理物理内存的分配和释放。物理内存被划分为一个个内存页面,通常大小为4KB或更大。
- 虚拟内存:Linux为每个进程提供了独立的虚拟地址空间,这个空间远大于实际的物理内存。虚拟内存使得进程可以使用比实际物理内存更多的内存资源,通过将暂时不使用的内存交换到磁盘上,当需要时再重新加载到内存中。
内存分配策略
- 伙伴系统:用于分配物理内存页。当需要分配内存时,伙伴系统会尝试从合适的大小的空闲内存块中进行分配。如果没有合适的大小,它会合并相邻的空闲内存块,以满足分配请求。当内存被释放时,伙伴系统会检查是否可以与相邻的空闲内存块合并,以减少内存碎片。
- slab 分配器:主要用于分配内核中的小对象。它将内存划分为不同大小的 slab,每个 slab 可以存储特定大小的对象。当需要分配一个对象时,slab 分配器会从合适的 slab 中进行分配。这种方式可以减少内存碎片,并提高内存分配的效率。
内存回收
- 页回收:当系统内存不足时,内核会启动页回收机制,将不常使用的内存页交换到磁盘上,以释放物理内存。页回收算法会根据页面的使用频率、访问时间等因素来选择要回收的页面。
- 交换空间:Linux 可以使用交换空间来扩展物理内存。交换空间通常是磁盘上的一个特殊区域,当物理内存不足时,内核可以将部分内存页交换到交换空间中。
内存保护
- 地址空间隔离:每个进程都有独立的虚拟地址空间,这使得不同进程之间的内存相互隔离,一个进程不能直接访问另一个进程的内存。这种隔离可以防止进程之间的错误或恶意访问,提高系统的安全性。
- 内存访问权限:虚拟内存中的每个页面都有特定的访问权限,例如只读、读写、执行等。内核通过 MMU 来检查进程对内存页面的访问是否符合权限要求,防止进程进行非法的内存访问。
总结
Linux 的内存管理机制通过虚拟内存、内存分配策略、内存映射、内存回收和内存保护等手段,有效地管理系统的内存资源,提高内存的利用率和系统的性能,同时保证系统的稳定性和安全性。
9、挂载文件系统
在Linux系统中,挂载是将外部文件系统(如硬盘分区)与系统的目录结构连接起来的过程。
挂载的作用
- 访问外部存储:通过挂载,将外部存储设备链接到文件系统,以便用户和应用程序可以访问存储在这些设备上的文件和目录
- 文件系统整合:Linux使用一种统一的文件系统结构,所有的文件和目录都在同一个层次结构中。通过挂载,用户可以将不同类型的存储设备整合到这一结构中,而无需关心具体的设备。
挂载文件系统
- lsblk:查看可用的文件系统
- mount:将文件系统挂载到指定的挂载点
- umount:卸载已经挂载的文件系统
总结
挂载是Linux中一个核心的操作,允许系统将不同类型的存储设备和文件系统整合到统一的目录结构中。它提供了灵活性、可访问性和多种文件系统的支持,为用户和管理员管理数据提供了便利。
10、Linux常用命令
文件和目录管理
- ls:列出目录内容
- cd:切换目录
- pwd:显示当前工作目录的完整路径
- mkdir:创建新目录
- rmdir:删除空目录
- cp:复制文件或目录
- mv:移动或重命名文件或目录
- rm:删除文件或目录
- touch:创建新文件
- cat:查看文件内容
- more/less:分页查看文件内容
文件权限和所有权管理
- chmod:更改文件或目录的权限
- chown:更改文件或目录
磁盘和文件管理
- tar:归档和压缩文件
- zip/unzip:压缩和解压zip文件
其他实用工具
- grep:在文件中搜索特定模式或字符串
- find:查找文件或目录
- bash:用于执行bash脚本或命令