内存管理
页表
说一下 IOMMU 的作用与意义
虚拟内存 → 物理内存的映射
Ai
IOMMU(输入输出内存管理单元)是一种硬件功能,主要用于管理和保护计算机系统中的输入输出(I/O)设备对内存的访问。它的作用与意义主要体现在以下几个方面:
1. 地址空间隔离
IOMMU能够为每个I/O设备提供独立的地址空间,防止设备之间的内存访问冲突,提高系统的稳定性和安全性。
2. 内存保护
通过IOMMU,可以限制设备对内存的访问权限,防止恶意或错误的设备访问不该访问的内存区域,从而提升系统的安全性。
3. 虚拟化支持
在虚拟化环境中,IOMMU可以帮助虚拟机(VM)对物理设备进行直接访问(如DMA),使得虚拟机能够更高效地使用硬件资源。这对于性能优化和资源管理至关重要。
4. 提高性能
IOMMU允许设备直接访问所需的内存区域,减少了CPU的干预,从而提高了数据传输的效率,尤其是在处理大量数据时。
5. 支持设备热插拔
IOMMU的设计使得在不影响系统整体运行的情况下,可以动态添加或移除I/O设备,增强了系统的灵活性。
总结
总之,IOMMU在现代计算机系统中扮演着关键角色,尤其是在虚拟化和安全性日益重要的环境中。它不仅提升了系统的安全性和稳定性,还极大地优化了资源的使用效率。
Page Fault
缺页故障当中,如果物理内存不够,会发生什么
- 替换页面:根据某个页面置换算法
- 脏页写回
- 从磁盘加载新页面到物理内存
- 更新页表
进程管理
进程同步的方式 / 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
来源:牛客网