当前位置: 首页 > news >正文

OS进程调度

tss

在这里插入图片描述
在这里插入图片描述

Q1:你是如何保证两个进程不能同时访问共享资源的?

✅ 推荐回答:

我实现了基于结构体的互斥锁,使用 mutex_lock() 来加锁资源。如果已有任务持有锁,则当前任务会被阻塞并加入等待队列,直到被唤醒。解锁时通过 mutex_unlock() 唤醒下一个等待任务。整个过程通过关闭中断临界区 + 自定义调度器配合实现互斥。

❓Q2:你的信号量是怎么实现的?和互斥锁有何区别?

✅ 推荐回答:

信号量管理的是“资源数量”,可以大于1,适用于限制并发资源使用;而互斥锁只能是“0或1”,用于严格控制独占访问。我的 sem_wait() 会在资源为0时阻塞任务,sem_notify() 唤醒等待的任务或累加资源数。适合多消费者-多生产者场景。

❓Q3:你怎么阻塞/唤醒一个进程的?调度器是怎么配合的?

✅ 推荐回答:

我通过 task_set_block() 将当前任务从就绪队列移除,并放入互斥锁或信号量的等待队列。下一次调度器触发时,选择其他可运行任务。等资源可用时,mutex_unlock() 或 sem_notify() 调用 task_set_ready() 把任务放回就绪队列。

❓Q4:是否考虑了中断上下文并发访问问题?

✅ 推荐回答:

是的,我在 mutex_lock() 和 sem_wait() 等关键操作中使用 irq_enter_protection() 关闭中断,确保临界区原子性。这样即使中断在任何时刻触发,也不会破坏队列结构或状态变量。

✅ 四、亮点总结(面试总结这样说)

在进程同步方面,我实现了可重入互斥锁和标准的计数信号量,所有操作都支持阻塞/唤醒机制,并结合调度器完成进程切换。在具体实现中,我使用了链表管理等待队列,利用关闭中断保护临界区,确保在多任务切换下保持一致性。在 TTY 缓冲区、磁盘读写等模块中广泛应用,保证了多进程访问资源的正确性。

🎙️ 进程同步与互斥 实现答辩稿

在我的操作系统中,我实现了两种进程间同步与互斥机制:互斥锁(mutex) 和 信号量(semaphore)。

互斥锁用于保护共享资源,例如控制台输出、文件结构等,防止多个进程同时访问。我的 mutex_lock() 支持可重入,如果当前任务已持有锁则计数加一,否则任务会阻塞并加入等待队列。mutex_unlock() 在释放锁后会唤醒下一个等待任务,并立即赋予锁。

信号量用于控制资源数量,比如生产者-消费者模型。我实现了 sem_wait() 和 sem_notify(),前者在资源不足时阻塞当前进程,后者在资源可用时唤醒等待任务或增加计数。

这两者都通过链表维护等待队列,并在操作时使用 irq_enter_protection() 关闭中断,确保原子性。调度器会在任务阻塞或唤醒时切换到其他可运行任务。

目前我在 TTY 输入输出、磁盘驱动、文件系统等模块广泛应用了这两套机制,实现了安全可靠的多进程资源管理。

http://www.xdnf.cn/news/567847.html

相关文章:

  • 第23天-Python Flet 开发指南
  • 多模态大语言模型arxiv论文略读(八十六)
  • LAN(局域网)和WAN(广域网)
  • 深入理解万维网:URL、HTTP与HTML
  • 电路设计基础
  • 前端JavaScript-嵌套事件
  • matlab加权核范数最小化图像去噪
  • Linux——PostgreSQL数据库日常维护
  • 25_05_19Linux实战篇、第一章_02若依前后端部署之路(前端)
  • 在 Excel xll 自动注册操作 中使用东方仙盟软件————仙盟创梦IDE
  • 代码随想录 算法训练 Day8:字符串part01
  • 关于TCP三次握手
  • 【ULR #1】打击复读 (SAM, DAG链剖分)
  • PHP学习笔记(八)
  • Linux操作系统之进程(二):进程状态
  • cocos creator使用jenkins打包微信小游戏,自动上传资源到cdn,windows版运行jenkins
  • 攻防世界-stegano
  • 物流项目第五期(运费计算实现、责任链设计模式运用)
  • TDengine 运维—容量规划
  • 学习 Android(十一)Service
  • 安卓蓝牙frameworks/base/core/java/android/bluetooth这个路径下文件的作用
  • Android 自定义SnackBar和下滑取消
  • 命令行参数和环境变量
  • 力扣热题100,力扣148.排序链表力扣.26找出字符串中第一个匹配项的下标力扣146.LRU缓存序列管理器
  • MySQL 8.0 OCP 1Z0-908 171-180题
  • Keepalived 配置深度解析及最佳实践
  • 回表是数据库概念,还是mysql的概念?
  • MyBatis 关联映射深度解析:_association_ 与 _collection_ 实战教程
  • k8s-ServiceAccount 配置
  • spring5-配外部文件-spEL-工厂bean-FactoryBean