Bootstrap

20250118面试鸭特训营第26天

更多特训营笔记详见个人主页【面试鸭特训营】专栏

1.说下你常用的 Linux 命令?

文件与目录操作

命令描述
ls列出当前目录和文件和子目录
ls -l列出当前目录和文件和子目录,包括详细信息
ls -a列出当前目录和文件和子目录,包括隐藏文件
cd切换目录,用于在文件系统中导航
pwd显示当前工作目录路径
cp复制文件或目录
cp -r递归复制目录
mv移动或重命名文件 / 目录
rm -f删除文件
rm -r删除目录
touch创建空文件或更新文件的时间戳
mkdir创建新目录
rmdir删除空目录

文件查找与文本操作

命令描述
find查找文件或目录
grep查找文件中包含指定文本的行
cat显示文件内容,常用于查看小型文本文件
moreless分页查看文件内容,less 支持向上翻页,适合查看大文件。
head查看文件的前几行
tail查看文件的后几行
tail -f实时监控文件内容变化,如日志文件

系统管理

命令描述
ps显示当前运行的进程列表
ps aux查看所有用户的进程
tophtop实时查看系统中的进程状态和资源使用情况
kill终止进程,后跟进程 ID
killall终止进程,后跟进程名
df查看文件系统的磁盘空间使用情况
du查看文件或目录所占用的的磁盘空间
du -h以可读格式显示文件或目录所占用的磁盘空间
free查看内存使用情况
uname显示系统信息

网络操作

命令描述
ping测试与目标主机的连通性
ifconfigip查看和配置网络接口,ipconfig 已逐渐被 ip 命令替代
netstatss查看网络连接和端口使用情况,ssnetstat 的替代品,提供更详细的信息
curlwget发送 HTTP 请求或下载文件,curl 更适合进行 API 调试,wget 则用于下载文件
ssh远程登录到另一条机器
scp通过 SSH 复制文件

文件权限与用户管理

命令描述
chmod修改文件或目录的权限,常用模式如 chmod 755
chown修改文件或目录的所有者
useradd添加用户
userdel删除用户
passwd修改用户密码

包管理

命令描述
apt-get (Debian / Ubuntu)安装、更新、删除软件包
yum (CentOS / RHEL)安装、更新、删除软件包

2. 什么是分段、什么是分页?

  • 分段(Segmentation)和分页(Paging)是操作系统中用于内存管理的两种方式,目的是提高内存利用率并简化程序的管理。

分段(Segmentation)

特点
  • 是一种根据程序逻辑结构划分内存的方式,例如将程序分为若干个段(如代码段、数据段、堆栈段等),每个段在逻辑上是一个独立的部分,有独立的段号和段内偏移量。
  • 每个段可以有不同的大小,段的长度取决于程序的实际需求,段与段之间可能不连续。
  • 分段管理提供了一种更贴近程序结构的内存管理方式,有助于提高程序的可读性和维护性。
  • 操作系统维护一个段表,记录每个段的基地址和段的长度。
  • 逻辑地址由段号和段内偏移量组成,程序使用逻辑地址来访问内存。
段表
  • 分段使用段表来记录每个段的基址和长度,段表的每个条目对应一个段,存储段的起始地址(基址)和段的大小。
  • 在地址转换时,CPU 通过段号在段表中查询段基址,并加上段内偏移量,得到实际的物理地址。
优点
  • 与程序的逻辑结构一致,便于编译器和程序员理解。
  • 每个段可以独立增长,不会影响其他段的大小。
  • 支持动态分配内存,例如数据段可以在运行时增大。
  • 分段支持程序的模块化,能够更好地反应程序的结构,有利于保护和共享。
缺点
  • 由于段的大小不固定,段之间可能会出现未使用的小块内存空能见,导致外部碎片的产生。
  • 由于段不一定连续分配,内存管理复杂,尤其在段数量较多时。

分页(Paging)

特点
  • 是一种将物理内存和逻辑地址划分为固定大小的页(Page)和页框(Frame)的方式,每个页和页框的大小相同,通过为 4KB 或 2MB。
  • 逻辑地址空间被划分为若干个固定大小的页,物理内存则被划分为相同大小的页框,页通过页表映射到页框。
  • 操作系统维护一个页表,记录页和页框之间的映射关系。程序访问内存时,通过页表查找页对应的物理页框。
  • 由于页的大小固定,解决了内存碎片的问题,但程序的逻辑结构和内存的物理结构不再一致。
页表
  • 页表是分页机制中用于记录逻辑页到物理页框映射关系的数据结构。
  • 没每个页表条目存储一个逻辑页在物理内存中的位置。
  • 页表的结构可以是单级页表、二级页表或多级页表,较大的地址空间通常使用多级页表以节省内存。
优点
  • 由于页和页框大小固定,可以有效避免分段方式中段间未使用内存造成的外部碎片的问题。
  • 页表支持页的按需加载和交换(如虚拟内存机制),可以将不常用的页交换到磁盘上,从而扩大进程的可用内存空间。
缺点
  • 如果程序使用的内存量不足一个页的大小,会造成业内未使用部分的浪费,即内部碎片问题。
  • 每个进程都需要维护自己的页表,页表的大小与逻辑地址空间成正比。多级页表虽然节省了内存,但增加了地址转换的复杂性。

表格对比

特性分段分页
管理单位段,段大小不固定,且与程序的逻辑结构相关页,页大小固定,与程序的逻辑结构无关
地址空间逻辑地址由短号和段内偏移量组成逻辑地址由页号和页内偏移量组成
映射方式使用段表来映射段的基址和长度使用页表来映射虚拟页和物理页的关系
碎片问题存在外部碎片(段间空隙造成)存在内部碎片(页内空隙造成)
优点更适合程序的逻辑结构
有助于程序模块化
无外部碎片
内存管理简单,易于实现虚拟内存
缺点可能产生外部碎片
管理较为复杂
可能产生内部碎片
需要额外的页表来管理地址映射
适用情况适合按模块组织的程序适合简单的内存分配和管理

3. 什么是硬中断、什么是软中断?

硬中断

特点
  • 是由硬件设备(如键盘、网络卡、定时器等)触发的中断信号。
  • 当硬件设备需要与 CPU 交互(如数据传输完成、定时中断等),会通过硬中断通知 CPU。
  • 每个硬中断否有一个对应的中断向量,【中断向量表】存储了各个中断处理程序的入口地址。CPU 接收到硬中断信号后,通过中断向量表找到对应的中断处理程序。
  • 处理过程
    • 当硬中断发生时,CPU 会保存当前执行的上下文,并跳转到中断处理程序 。
    • 中断处理程序处理完成后,会恢复被中断的程序的上下文,并继续执行。
  • 优先级 / 实时性
    • 相较于软中断,硬中断具有【高优先级】,通常会立即打断当前执行的程序,进行中断处理,具有【高实时性】。
    • 不同的硬中断有不同的优先级,中断控制器负责管理和调度这些中断,优先处理高优先级的中断信号。
      • 例如:定时器中断通常优先级较高,用于维持徐彤的时间片调度。
优点
  • 能够实时响应外部硬件事件,提高系统的响应速度。
  • 操作系统能够处理硬件异常、错误和设备状态变化。、
缺点
  • 如果硬中断处理程序很长,可能会导致系统的响应延迟,影响其他任务的执行。
  • 硬件中断处理需要考虑中断嵌套和优先级,增加了系统设计的复杂性。

软中断

特点
  • 是由软件程序触发的中断,通常是由程序员在代码中显式调用通过特定指令(如 int 指令)或通过系统调用产生的。
  • 软中断的和优先级一般低于硬中断。
  • 程序运行中请求操作系统执行特定服务(如文件读写、进程调度等)时,会触发软中断进入内核态,执行对应的系统调用。
  • 或者当程序运行中出现除零错误、非法内存访问等情况时,也会触发软中断进入异常处理程序。
  • 操作系统也可以通过软中断来进行任务切换和进程调度。
    • 如:在时间片轮转调度中,操作系统可能会使用定时器产生硬中断,然后通过软中断来触发进程的切换。
优点
  • 灵活,程序可以在合适的时机显式触发软中断,通常用于实现操作系统的内核功能。
  • 可以处理操作系统层面的异常和错误。
缺点
  • 性能开销较大,因为软中断通过需要在程序的上下文种切换到内核模式进行处理。

表格对比

特性软中断(Software Interrupt)硬中断(Hardware Interrupt)
触发方式由程序或操作系统显式触发(例如系统调用)由硬件设备触发(如外部设备、定时器等)
用途实现操作系统功能、系统调用、异常处理等响应外部事件(如设备输入、定时器中断、硬件故障等)
中断源由软件(程序)发出由硬件设备(外部设备或内部硬件)发出
中断控制操作系统通过中断向量表管理软中断中断控制器(如 PIC 或 APIC)负责管理硬中断
优先级优先级较低,通常用于内核模式的处理优先级较高,必须及时响应硬件事件
应用场景用于程序与操作系统之间的交互,如系统调用用于处理硬件事件和外部设备交互,如输入输出操作、定时器等
例子int 0x80(Linux 系统调用)键盘中断、定时器中断、硬盘驱动器中断等
;