内存管理

页表

说一下 IOMMU 的作用与意义

IOMMU

虚拟内存 物理内存的映射

Page Fault

缺页故障当中,如果物理内存不够,会发生什么

  • 替换页面:根据某个页面置换算法
  • 脏页写回
  • 从磁盘加载新页面到物理内存
  • 更新页表

进程管理

进程同步的方式 / IPC

IPC

  • Pipe 管道
  • 消息队列
  • 信号量
  • 信号
  • Shared Memory
  • Socket

消息队列怎么保证消息不丢失

  • 生产端
    • 消息持久化:写入磁盘/日志
    • 发送确认机制:未收到则重试
    • 重试机制
  • 队列
    • 持久化
    • 多副本/主从同步
    • 事务
  • 消费端
    • ACK 手动确认
    • 幂等消费
    • 死信队列

线程同步的方式

  • 条件变量
  • 信号量

死锁的条件

  • Mutual exclusion:只能一人拥有
  • Hold and Wait:拿着就不放
  • No preemption:不抢占
  • Circular wait:循环等待

避免死锁

最常见的是破坏循环等待:try_acquire

如何实现让一个线程只打印奇数,另一个线程只打印偶数

猜测,可能可以使用 fork,根据 fork == 0 判断是否为子进程。若需要逐个输出,可以考虑使用 pipe

了解用户态到内核态的流程嘛

系统调用:

  • 系统调用准备
  • 中断触发(Syscall Interrupt)
  • 保存上下文:PC/Reg
  • 切换内核态
  • 执行内核代码
  • 返回用户态,恢复上下文
  • 继续执行

Misc

中断和异常的区别

对比项中断(Interrupt)异常(Exception)
来源外部设备(键盘、鼠标、I/O)CPU 内部错误(除零、非法指令)
触发方式异步 发生同步 发生
与当前指令关系无直接关系与指令执行相关
可否屏蔽可以屏蔽(可暂时忽略)不可屏蔽(必须处理)
常见示例键盘输入、时钟中断、I/O 完成空指针访问、除零错误、页错误

中断怎么发生,中断处理大概流程

  • CPU 保存当前状态(如寄存器、PC 指针)。
  • 跳转到中断向量表,找到对应的 中断服务程序(ISR)
  • 执行 ISR,完成中断任务。
  • 恢复 CPU 状态,返回到原来的任务。

字符设备和块设备的区别,请分别列举一些实际的设备说出它们是属于哪一类设备

区别

数据传输方式

字符设备:以字符为单位进行数据传输,数据的读写是按顺序逐个字符进行的,通常不支持随机访问。

块设备:以数据块为单位进行数据传输,支持随机访问,可以直接访问设备上的任意数据块。

访问速度

字符设备:访问速度相对较慢,常用于低速的、对数据传输实时性要求不高的场景。

块设备:访问速度相对较快,适合大量数据的快速读写操作。

数据缓存

字符设备:一般不使用缓存或者只有很小的缓存,因为其数据传输通常是实时的、顺序的。

块设备:通常有较大的缓存,以提高数据的读写性能,减少对物理设备的访问次数。

常见设备举例

字符设备:键盘、鼠标、串口设备、打印机等。例如键盘,用户按下按键时,字符会逐个被系统接收,系统按字符流的方式处理输入信息。

块设备:硬盘、固态硬盘、U 盘、光盘等。以硬盘为例,操作系统可以直接读取或写入硬盘上的任意一个数据块,实现快速的数据存储和检索。

作者:爱打球的阿槐
链接:https://www.nowcoder.com/discuss/733803532716974080?sourceSSR=search
来源:牛客网