【操作系统】 Operation System 第四章:非连续式内存分配

本文深入探讨了非连续内存分配的原理,包括分段和分页机制,详细解析了页表、TLB以及多级页表的工作方式,对比了传统页表与反向页表的优缺点。

4.1 非连续内存分配:分段

(1)非连续内存分配的原因
-连续内存分配(上一节内容)的缺点

->分配给一个程序的物理内存是连续的
->内存利用率低
->有外碎片/内碎片问题

-非连续内存分配的优点

->分配给一个程序的物理内存是非连续的
->更好的内存利用和管理
->允许共享代码和数据(共享库等)
->支持动态加载和动态链接

-非连续内存分配的缺点

->如何建立虚拟地址和物理地址之间的转换
—>软件方案(开销大)
—>硬件方案

-两种硬件方案

->分段Segmentation
->分页Paging

4.1.1 分段Segmentation:更好的分离和共享

在这里插入图片描述

-程序的分段地址空间
逻辑地址空间是连续的,物理地址是离散的。
在这里插入图片描述

-分段寻址的方案
->以上开销大,如何用硬件实现

(1)段访问机制:一个段指一个“内存块”,是一个逻辑地址空间。
程序根据段访问机制访问内存地址需要一个二维的二元组(s段号,addr端内偏移)
在这里插入图片描述

(2)段访问机制的硬件实现方案:
在这里插入图片描述

4.2 非连续内存分配:分页

4.2.1 分页地址空间

划分物理内存至固定大小的帧

->大小是2的幂,e.g.512,4096,8192

-划分逻辑地址空间至相同

@log_time @log_step("处理语音指令") def process_voice_command(self, voice_text): log_var("原始输入", voice_text) if not voice_text.strip(): raise InvalidInputError("输入为空") self.conversation_history.append({"role": "user", "content": voice_text}) messages = [{"role": "system", "content": self.system_prompt}] messages.extend(self.conversation_history[-10:]) max_retries = 3 last_exception = None for attempt in range(max_retries): try: response = Generation.call( model=self.model_name, messages=messages, temperature=0.5, top_p=0.8, max_tokens=1024 ) if response.status_code != 200: raise APIResponseError(f"Qwen API error {response.status_code}: {response.message}") ai_output = response.output['text'].strip() log_var("模型输出", ai_output) parsed = self._extract_and_validate_json(ai_output) if parsed is None: raise ParseValidationError("AI returned invalid or incomplete JSON structure") # ✅ 成功解析并验证通过 self.conversation_history.append({"role": "assistant", "content": json.dumps(parsed, ensure_ascii=False)}) return parsed except (ParseValidationError, APIResponseError) as e: logger.warning(f"第 {attempt + 1} 次尝试失败: {str(e)}") last_exception = e continue # 重试 except Exception as e: logger.exception("非重试型异常") raise # 不属于可恢复错误,直接向上抛 # ❗所有重试失败后才抛出最终异常 raise MaxRetriesExceededError("连续多次调用 AI 失败", last_exception) # === 强化版 system prompt:明确要求 AI 承担全部责任 === self.system_prompt = f""" 你是一个智能语音控制助手,能够理解用户的自然语言指令,并将其转化为可执行的任务计划。 🎯 输出格要求(必须严格遵守): {{ "intent": "system_control", "task_type": "start_background_tasks", "execution_plan": [ {{ "operation": "函数名", "parameters": {{}}, "description": "步骤说明" }} ], "response_to_user": "你要对用户说的话(中文)", "requires_confirmation": false, "mode": "parallel", "expect_follow_up": true }} 📌 已知 operation 列表: {operation_list_text} 📌 规则说明: 1. intent="chat" 仅用于闲聊。 2. execution_plan 必须与需求相关。 3. mode: parallel/serial。 4. requires_confirmation: 高风险操作设为 true。 5. expect_follow_up: 必须根据语义判断是否期待后续交互 —— 禁止使用关键词匹配! 🔥 关于 expect_follow_up 的判断标准(由你自主决定): - 对话明显结束(如道谢、告别、确认完成)→ false - 多步任务未完成、需确认、提问开放问题 → true - 不确定时 → true(保守策略) ⚠️ 重要警告: - 不得输出额外文本; - 不允许使用未知 operation; - 所有字段都必须存在且类型正确; - 特别是:expect_follow_up 字段必须显写出,不得省略! 现在,请根据用户的最新指令生成对应的 JSON 响应。 """ 看一下提示词函数的问题
最新发布
10-29
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值