OS进程调度
tss
Q1:你是如何保证两个进程不能同时访问共享资源的?
✅ 推荐回答:
我实现了基于结构体的互斥锁,使用 mutex_lock() 来加锁资源。如果已有任务持有锁,则当前任务会被阻塞并加入等待队列,直到被唤醒。解锁时通过 mutex_unlock() 唤醒下一个等待任务。整个过程通过关闭中断临界区 + 自定义调度器配合实现互斥。
任务切换时,段寄存器都一样吗?
答案是:
大多数情况下,除了 CS 可能不同,其他段寄存器(DS、ES、FS、GS、SS)在任务之间是一样的。
✅ 1. CS(代码段):
在不同任务之间,如果特权级不同(Ring 0 vs Ring 3),CS 会不同:
内核任务:CS = 0x08(Ring0)
用户任务:CS = 0x1B(Ring3)
必须切换,否则任务运行时权限不对。
✅ 2. DS / ES / FS / GS / SS(数据/栈/辅助段):
在平坦模型下,它们都指向同一个数据段(如 GDT[2]):
base = 0, limit = 4GB
所以在任务切换时,你可以让这些段寄存器保持不变,或者每次切换任务时重新加载为相同的值。
✅ 3. 用户态任务(Ring3)时除外:
如果你支持 用户态任务,那么段寄存器的 selector 必须换成 DPL=3 的段描述符(如 0x1B);
否则用户程序就能访问内核地址,会破坏隔离性。
❓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() 关闭中断,确保临界区原子性。这样即使中断在任何时刻触发,也不会破坏队列结构或状态变量。
整个阻塞/唤醒过程
进程阻塞 /
唤醒机制的核心接口,它们和调度器一起决定了哪个任务能执行、哪个必须等待。理解和讲清它们,是面试中体现你调度系统掌控力的重要部分。
我的内核中通过 task_set_block() 和 task_set_ready() 实现了任务的阻塞与唤醒机制。当前任务如果无法继续执行(如锁不可用、IO等待),我调用 task_set_block() 将它从就绪队列中移除,并加入资源等待队列。等资源可用后,通过 task_set_ready() 将任务状态设为就绪,重新加入就绪队列。调度器在时钟中断或任务切换点检查就绪队列,从中选出可运行任务。这个机制确保了资源的安全访问和 CPU 时间的合理分配。
✅ 四、亮点总结(面试总结这样说)
在进程同步方面,我实现了可重入互斥锁和标准的计数信号量,所有操作都支持阻塞/唤醒机制,并结合调度器完成进程切换。在具体实现中,我使用了链表管理等待队列,利用关闭中断保护临界区,确保在多任务切换下保持一致性。在 TTY 缓冲区、磁盘读写等模块中广泛应用,保证了多进程访问资源的正确性。
🎙️ 进程同步与互斥 实现答辩稿
在我的操作系统中,我实现了两种进程间同步与互斥机制:互斥锁(mutex) 和 信号量(semaphore)。
互斥锁用于保护共享资源,例如控制台输出、文件结构等,防止多个进程同时访问。我的 mutex_lock() 支持可重入,如果当前任务已持有锁则计数加一,否则任务会阻塞并加入等待队列。mutex_unlock() 在释放锁后会唤醒下一个等待任务,并立即赋予锁。
信号量用于控制资源数量,比如生产者-消费者模型。我实现了 sem_wait() 和 sem_notify(),前者在资源不足时阻塞当前进程,后者在资源可用时唤醒等待任务或增加计数。
这两者都通过链表维护等待队列,并在操作时使用 irq_enter_protection() 关闭中断,确保原子性。调度器会在任务阻塞或唤醒时切换到其他可运行任务。
目前我在 TTY 输入输出、磁盘驱动、文件系统等模块广泛应用了这两套机制,实现了安全可靠的多进程资源管理。
相关文章:
OS进程调度
tss Q1:你是如何保证两个进程不能同时访问共享资源的? ✅ 推荐回答: 我实现了基于结构体的互斥锁,使用 mutex_lock() 来加锁资源。如果已有任务持有锁,则当前任务会被阻塞并加入等待队列,直到被唤醒。解锁…...
MCP和 AI agent 有什么区别和联系
MCP 是什么? MCP(Model Context Protocol,模型上下文协议)是一种开源通信协议,旨在为大型语言模型(LLM)与外部数据源、工具或服务之间建立标准化、安全且灵活的双向连接。它类似于“AI 的 USB-…...
用Recommenders,实现个性化推荐
文章目录 引言一、Recommenders简介二、选择Recommenders的原因三、智能推荐系统的设计与实现四、总结 引言 在这个信息如洪流般涌来的时代,你是否常常在茫茫的信息海洋中迷失方向,为找不到自己心仪的内容而苦恼?今天咱们就来聊聊基于Micros…...
MCP-1:MCP组件与工作流程
MCP-1:MCP组件与工作流程 1.什么是MCP2.MCP架构组件2.1.MCP Hosts2.2.MCP Client2.3.MCP Server3.交互流程3.1.用户提问3.2.LLM 推理选择MCP Server(大模型规划)3.3.调用 MCP Tool3.4.返回结果3.5.数据清洗3.6.反馈信息给用户1.什么是MCP MCP(Model Context Proto…...
NVIDIA GPU 性能调优与诊断完全指南
本文为多 GPU 用户(如 3*RTX A4000 系统)提供一份全面的调优与诊断手册,涵盖功率限制、风扇控制、频率锁定、缓存清理、GPU 重置与性能测试工具等操作命令,适合开发者与研究人员在部署前进行系统级优化与验证。 📌 目录…...
从运维告警到业务决策:可观测性正在重新定义企业数据基础设施
可观测性(Observability)与传统监控(Monitoring)的核心差异,本质上是一种数据维度的主动暴露与被动采集的范式转变。传统监控就像在黑暗森林中设置有限的探照灯,运维人员必须预先假设可能的故障路径&#x…...
配电网运行状态综合评估方法研究
1评估指标体系的构建 [1]冷华,童莹,李欣然,等.配电网运行状态综合评估方法研究[J].电力系统保护与控制,2017,45(01):53-59. 1.1评估范围 图1为配电系统组成示意图,其中A、B、C分别表示高、中、低压配电系统。高压配变(也称主变)将35kV或110kV的电压降到10kV&#…...
Linux中I/O复用机制epoll
1. 为什么会出现 epoll? 在早期的网络编程中,select 是一个非常常用的 I/O 复用机制,用于在多个文件描述符(如套接字)上进行 I/O 操作的检测。select 会将多个文件描述符传入,轮询检查它们的状态ÿ…...
数据库表关系详解
一、一对多关系 特征:表A的一条记录对应表B的多条记录,表B的一条记录仅对应表A的一条记录 示例: 学生表(子表) | id | name | class_id | |-----|------|----------| |1001| 张三 | 111 | |1002| 张四 | 222 | 班级表…...
Agentic Loop与MCP:大模型能力扩展技术解析
一、什么是MCP MCP(Model Context Protocol)是一种用于大语言模型与外部工具交互的协议框架。它允许大语言模型能够调用各种外部工具来扩展其能力边界,如访问文件系统、搜索引擎、数据库等。 MCP的核心价值 能力扩展:使大语言模…...
贪心算法 Part04
总结下重叠区间问题 LC 452. 用最少数量的箭引爆气球 和 LC 435. 无重叠区间 本质上是一样的。 LC 452. 用最少数量的箭引爆气球 是求n个区间当中 , 区间的种类数量 k。此处可以理解为,重叠在一起的区间属于同一品种,没有重叠的区间当然…...
Spring事务简单操作
什么是事务? 事务是一组操作的集合,是一个不可分割的操作 事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时 成功, 要么同时失败. 事务的操作 分为三步: 1. 开启事start transaction/ begin …...
04算法学习_209.长度最小的子数组
04算法学习_209.长度最小的子数组题目描述:个人代码:学习思路:第一种写法:题解关键点: 第二种写法:题解关键点: 个人学习时疑惑点解答: 04算法学习_209.长度最小的子数组 力扣题目链…...
./build/mkfs.jffs2: Command not found
参考文章:https://blog.csdn.net/FLM19990626/article/details/132070195 sudo apt-get install lib32stdc6 sudo apt-get install lib32z1 sudo apt-get install mtd-utils sudo apt-get install man-db sudo apt-get install liblzo2-dev:i386sudo ldconfig...
从零基础到最佳实践:Vue.js 系列(4/10):《Vue Router 路由管理:深入探索与实战应用》
引言 在现代前端开发中,单页应用(SPA)凭借其流畅的用户体验和高性能成为主流。Vue Router 作为 Vue.js 的官方路由管理工具,为开发者提供了强大的路由管理能力,帮助实现页面导航、权限控制和动态内容加载。本文将从基…...
深入解析C++静态成员变量与函数
当然可以!下面是对这段 C 代码的逐行详细注释说明和解释,帮助你理解静态成员变量和静态成员函数的使用。 🧱 类定义部分:MyClass cpp 深色版本 #include <iostream> 说明:包含标准输入输出流库,用于…...
基于JDBC的信息管理系统,那么什么是JDBC呢?什么又是DAO类?
1.JDBC JDBC 即 Java Database Connectivity,是 Java 语言中用于与数据库进行交互的一套 API。它提供了一种标准的方式,让 Java 程序能够连接到各种不同类型的数据库,并执行 SQL 语句来实现对数据库的查询、插入、更新和删除等操作。 主要功…...
Java虚拟机 -虚拟机栈
虚拟机栈详解 虚拟机栈概述案例常见的跟虚拟栈异常相关的异常StackOverflowError异常OutOfMemoryError异常 栈的基本存储单位局部变量表IDEA Jclasslib Bytecode Viewer插件slot 操作数栈方法调用(待后续补充) 虚拟机栈 上一篇文章,我们简单…...
【AI News | 20250521】每日AI进展
AI Repos 1、OpenHands OpenHands(前身为OpenDevin)是一个由AI驱动的软件开发代理平台,它能够像人类开发者一样修改代码、运行命令、浏览网页、调用API,甚至从StackOverflow复制代码片段。用户可以通过OpenHands Cloud轻松上手&a…...
RAG 挑战赛冠军方案解析:从数据解析到多路由器检索的工程实践,推荐阅读!
多路由器 动态知识库:RAG 冠军方案的核心技术揭秘 源码地址:https://github.com/IlyaRice/RAG-Challenge-2/tree/main 公司年报智能问答比赛任务简介 比赛的任务是基于公司年度报告构建一个问答系统。简单来说,比赛当天的流程如下ÿ…...
Java基础 Day17
一、递归 方法直接或者间接调用本身 将大问题, 层层转化为一个与原问题相似的、规模更小的问题来解决 二、异常 程序在编译或执行过程中,出现的非正常的情况 (错误) 语法错误不是异常 1、阅读异常信息 从下往上看:发生异常的位置、异常名称、发生异…...
系分论文《论软件系统安全分析和应用》
系统分析师论文范文系列 【摘要】 2023年3月,我司承接了某知名电商企业“智能化供应链管理系统”的开发任务,我作为系统分析师负责全面的安全分析与设计工作。该系统以提升电商供应链效率为核心,整合仓储、物流、支付等模块,并需应…...
蓝耘Ubantu服务器测试最新 PP-StructureV3 教程
一、服务器配置 二、安装Anaconda3 进入云服务器后删除minconda文件夹 官网: https://repo.anaconda.com/archive/ 在里面找到自己系统的安装包,然后右击复制链接安装。 一定要选择Anaconda,因为很多依赖问题用Minconda容易报错。 wget https://repo…...
File文件
路径: 相对路径:以 当前工作目录(或指定的基准目录)为起点,描述目标文件或目录的位置,不包含根目录信息,仅表示与基准目录的相对位置关系。绝对路径:从文件系统的 根目录 开始&…...
Wireshark抓包分析小程序接口请求教程
## 1. 准备工作 ### 1.1 安装Wireshark - 访问Wireshark官网 (https://www.wireshark.org/) 下载最新版本 - 按照安装向导完成安装 - 确保安装时选择安装WinPcap或Npcap(用于网络数据包捕获) ### 1.2 配置环境 - 确保电脑已连接网络 - 如果使用手机…...
C++之模板进阶(探索C++模板:非类型参数与特化技巧)
本节目标: 1.非类型模板参数 2.类模板的特化 3.类模板特化的应用之类型萃取 4.模板的分离编译 非类型模板参数 模板参数分 类型形参与非类型形参 类型形参:出现在模板参数列表中,跟在class或者typename之类的参数类型名称 非类型形…...
【项目记录】准备工作及查询部门
1 开发规范 1.1 前后端分离开发 现在的企业项目开发有2种开发模式:前后台混合开发和前后台分离开发。 前后台混合开发,顾名思义就是前台后台代码混在一起开发 这种开发模式有如下缺点: 1. 沟通成本高:后台人员发现前端有问题&a…...
chromedp -—— 基于 go 的自动化操作浏览器库
chromedp chromedp 是一个用于 Chrome 浏览器的自动化测试工具,基于 Go 语言开发,专门用于控制和操作 Chrome 浏览器实例。 chromedp 安装 go get -u github.com/chromedp/chromedp基于chromedp 实现的的简易学习通刷课系统 目前实现的功能ÿ…...
企业级调度器LVS
访问效果 涉及内容:浏览拆分、 DNS 解析、反向代理、负载均衡、数据库等 1 集群 1.1 集群类型简介 对于⼀个业务项⽬集群来说,根据业务中的特性和特点,它主要有三种分类: 高扩展 (LB) :单个主机负载不足的时候…...
MySQL中的重要常见知识点(入门到入土!)
基础篇 基础语法 添加数据 -- 完整语法 INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);-- 示例 insert into employee(id,workno,name,gender,age,idcard,entrydate) values(1,1,Itcast,男,10,123456789012345678,2000-01-01) 修改数据 -- 完整语法 UPDA…...
29.第二阶段x64游戏实战-技能冷却
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:28.第二阶段x64游戏实战-代码实现遍历技能 找技能冷却要通过一个技能cd长点的&…...
第19天-Python自动化生成PPT图文教程(基于python-pptx)
环境准备 pip install python-pptx Pillow 基础示例:批量插入图片 from pptx import Presentation from pptx.util import Inches import os from PIL import Image def create_image_slides(): # 初始化演示文稿 prs = Presentation() # 获取当前目录所…...
基于STM32的骑行语音播报系统
目录 一、前言 二、项目功能说明 三、主要元器件 四、原理图与PCB 五、手机APP 六、完整资料 一、前言 项目成品图片: 哔哩哔哩视频链接: 咸鱼商品链接: 基于STM32的骑行语音播报系统 二、项目功能说明 基础功能: 1&…...
springboot链接nacos测试
代码资料链接:https://download.csdn.net/download/ly1h1/90881498 场景说明:本次测试是springboot项目,可以链接上ncaos,将对应命名空间下的配置信息读取出俩,然后可以在接口进行返回显示。 0.环境配置 1.代码结构 …...
【初识】内网渗透——基础概念,基本工具使用
目录 一、域,工作组,域控制器,活动目录相关概念: 域环境: 工作组: 域控制器DC: 活动目录AD: 二、内网的基本场景: 三、内网渗透基本测试方案: #案例1一基本信…...
AI练习:混合圆
方法一:在圆内 1.画圆 选择椭圆工具,按住Shift键绘制正圆; CtrlC复制,CtrlF原地粘贴,按住Shift键缩小圆,移动位置; 再CtrlC,CtrlF,再按住Shift键缩小圆,移…...
心知天气 API 获取天气预报 2025/5/21
心知天气 API 获取天气预报 2025/5/21 URL格式: https://api.seniverse.com/v3/weather/now.json?key填你的秘钥&locationbeijing(这里填城市 可以用拼音)&languagezh-Hans&unitc 返回格式如下:...
PCB设计教程【入门篇】——电路分析基础-元件数据手册
前言 本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理 目录 前言 一、数据手册的重要…...
java上机测试错题回顾(1)
平时不能摸鱼太多,这样导致到最后不能摸鱼...... 看了看日历原来是6.12就结课了,啊哈哈,真没几天准备了,期末月你要来了吗? 1 参数传递,值传递~! 题目 以下代码的输出结果为( &a…...
HTTP相关内容
应用层 自定义应用层协议,协议:约定 1.约定好通信传输的信息 2.约定好数据的组织格式(xml, json(重点), protobuf) 也可以基于现成的应用层协议,来进行开发 协议的种类非常多(HTTP 协议属于翘楚,1.手机,2 网站) 跟正确的说,咱们现在使用的是 HTTPS 这个协议,HTTP和HTTPS …...
【笔记】排查并解决Error in LLM call after 3 attempts: (status code: 502)
#工作记录 一、问题描述 在部署运行部署对冲基金分析工具 ai-hedge-fund 时,不断出现以下报错,导致项目运行异常: Error in LLM call after 3 attempts: (status code: 502) Error in LLM call after 3 attempts: [WinError 10054] 远程主…...
基于python的机器学习(七)—— 数据特征选择
目录 一、特征选择概念 二、特征选择的方法 2.1 过滤式特征选择 2.1.1 方差分析 2.1.2 相关系数 2.1.3 卡方检验 2.2 包裹式特征选择 2.2.1 递归特征消除 2.3 嵌入式特征选择 2.3.1 决策树特征重要性 一、特征选择概念 特征选择是机器学习非常重要的一个步骤&#x…...
从电商角度设计大模型的 Prompt
从电商角度设计大模型的 Prompt,有一个关键核心思路:围绕具体业务场景明确任务目标输出格式,帮助模型为运营、客服、营销、数据分析等工作提效。以下是电商场景下 Prompt 设计的完整指南,包含通用思路、模块范例、实战案例等内容。…...
从零基础到最佳实践:Vue.js 系列(5/10):《状态管理》
引言 你是不是正在用 Vue.js 开发一个很酷的应用,然后发现组件之间的数据传递变得越来越混乱?比如,一个按钮的状态要传到好几层组件,或者多个页面需要共享同一个用户信息。这时候,状态管理就登场了!在 Vue…...
git checkout HEAD
git checkout HEAD 主要用于将工作目录和暂存区的内容重置为当前 HEAD 指向的提交状态,常用于撤销未提交的修改15。具体行为如下: 一、核心作用 恢复工作区文件 将指定文件或全部文件恢复到 HEAD 指向的提交状态,丢弃工作区中未暂存的修改…...
git工具使用
安装Git 在开始使用Git之前,需要在本地计算机上安装Git工具。Git支持Windows、macOS和Linux系统。可以从Git官方网站下载适合操作系统的安装包,并按照安装向导进行安装。 bash复制插入 # 在Linux上安装Git sudo apt-get install git# 在macOS上安装Git…...
极大似然估计与机器学习
复习概统的时候突然发现好像极大似然估计MLE与机器学习的数据驱动非常相似,都是采样样本然后估计模型参数。貌似,后知后觉的才意识到极大似然估计就是机器学习有效的数学保证 下面以拟合线性分布的最小二乘与分类问题为例推到以下如何从似然函数推导出M…...
基于 Guns v5.1 框架的分页教程
基于 Guns v5.1 框架的分页教程 第一步:Controller 层处理前端请求 在 Controller 中,需要接收 Bootstrap Table 传来的分页参数(limit, offset, sort, order)。Guns 提供了封装好的 PageFactory 类来简化 Page 对象的创建。 R…...
从零搭建SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库
系列文章 从零搭建SpringBoot Web单体项目【基础篇】1、IDEA搭建SpringBoot项目 从零搭建 SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库 目录 一、项目基础环境说明 二、数据库整合流程 1. 添加 MyBatis-Plus 相关依赖(pom.xml) 2…...
Supplemental Table 5FAM49B H-SCORE与其他临床特征的关系
以下是针对 Supplemental Table 5 中不同变量类型所需检验方法的 SPSS纯界面操作步骤(严格匹配原文统计方法): Supplemental Table 5 SPSS操作步骤 目标:分析FAM49B H-SCORE与其他临床特征的关系,按变量类型选择检验方法。 变量与检验方法对应表 变量变量类型检验方法SP…...