新闻详情

新闻详情

首页 / 资讯中心 / 详情

OSTEP三件套+CS537:一套从理论到Shell实战的操作系统学习路径

发布时间:2026/9/1 11:10:17来源:尧图网络
OSTEP三件套+CS537:一套从理论到Shell实战的操作系统学习路径
学习操作系统时很多人最容易踩进一个误区看了一遍进程调度、内存分页、锁和信号量的概念觉得都懂了但拿到实验项目并不知道从哪开始写代码。威斯康星大学麦迪逊分校的 CS537 操作系统课程之所以在国内外都很受关注很大程度上是因为它不只是用一本教材而是用了一套“教材 作业模拟器 系统项目”的完整组合也就是大家常说的 OSTEP 三件套。这篇文章会围绕 CS537 Fall 2019 的公开课程资料和 OSTEP整理一套可以照着用的操作系统学习路径。内容包括课程体系拆解、OSTEP 三大主题知识地图、一个迷你 Shell 的 C 语言实战、编译调试方法、中英双语学习建议以及常见踩坑排查。无论你是正在上操作系统课的学生还是在为面试补底层知识的开发者这篇文章都值得收藏备用。1. CS537 与 OSTEP为什么它们总被一起提及1.1 威斯康星 CS537 是一门什么课CS537 是 University of Wisconsin-Madison 面向本科生开设的操作系统导论课程课程主页由 Remzi Arpaci-Dusseau 等老师长期维护。这门课的核心设计思路非常明确先借助 OSTEP 讲透操作系统三大问题再用若干个 C 语言系统项目让大家亲手实践。以 Fall 2019 这一轮的公开资料为参考CS537 的课程结构基本保持了一个稳定的模式课程主体围绕 OSTEP 教材展开每周有对应阅读章节。第一类作业与 OSTEP 每一章的 Homework 配套很多是运行模拟器观察算法行为。第二类作业是大项目通常包括实现 Unix Shell、并发服务器、或对 xv6 教学操作系统进行扩展。期中期末考试重点考察原理、计算题和简短设计题。这类课程的显著特点是阅读量大项目切得深评分依赖自动化测试。它不会像一些入门课那样只要求“写一个能通过的小 demo”而是会检查错误处理、资源释放、边界条件和并发正确性。也正因如此有过 CS537 风格项目经验的人通常对 Linux 系统调用、多线程编程和调试工具会更熟练这些能力在面试和实际工程中都很值钱。从自学角度看CS537 的价值在于它提供了一条经过设计的“路线图”。你不需要自己从零摸索“操作系统该学什么、项目该练什么”按照课程节奏走就能把理论框架和实践能力同时建立起来。1.2 OSTEP 为什么被称为“三件套”OSTEP 全称是 Operating Systems: Three Easy Pieces中文通常翻译为《操作系统导论》。书名中的 “Three Easy Pieces” 指操作系统需要解决的三大类问题Virtualization虚拟化。核心是 CPU 虚拟化和内存虚拟化。Concurrency并发。核心是线程、锁、条件变量、信号量和并发问题。Persistence持久性。核心是文件系统、磁盘管理、崩溃一致性和日志恢复。“三件套”在中文学习社区里还有一种更细的理解它不只是 OSTEP 这一本书而是包含教材、配套作业、配套实验项目三个部分。第一件是教材正文。OSTEP 每章都从现实场景引入理论推导和图示丰富适合反复阅读。第二件是 Homework 模拟器。OSTEP 给每一章都准备了 Python 写的模拟器例如调度模拟器、地址翻译模拟器、页表模拟器、并发执行模拟器。这些模拟器让静态的概念变成可以交互观察的过程。第三件是实验项目尤其是与 xv6 相关的系统编程任务以及课程团队维护的 OSTEP Projects 示例项目。为什么这套组合学习效果好因为它照顾到了“懂概念”到“能写代码”之间的巨大鸿沟。很多人看懂了“分页”的定义但遇到一道多级页表计算题还是容易算错看懂了“锁”的概念但写并发程序时依然会出现数据竞争和死锁。OSTEP 的模拟器解决计算题项目解决编程题两者正好互补。1.3 这套体系适合哪些读者如果你属于以下情况CS537 OSTEP 的这套学习路径会比较适合你正在国内大学修操作系统课觉得教材偏理论、实验偏死板想找更系统的练习题和项目。准备秋招、考研复试需要短期内串起操作系统核心知识点。工作若干年主要在写业务代码想补底层系统能力为后续转基础架构或安全方向做铺垫。对 MIT 6.S081、xv6 等课程感兴趣想先掌握足够的操作系理论基础。当然这套内容不适合完全没有编程基础的人。在开始之前至少应该熟悉 C 语言的基本语法、指针和结构体能独立使用 Linux 命令行了解基本的文件操作和进程概念。2. OSTEP 三件套的使用方法2.1 教材正文不要试图一口气读完OSTEP 一共几十章从篇幅上看不短但它不同于传统教科书那种“定义—证明—习题”的写法。它更像是作者在和你对话先提出一个场景再一步一步拆解方案。以虚拟化部分的第 4 章为例它先问“如何让多个应用程序看起来共享 CPU”然后从进程、上下文切换、调度算法逐步深入。我建议第一遍阅读时不要强求记住每个算法细节先完成两件事能用自己的话说出每章解决什么问题。能画出关键机制的简单状态图例如进程状态机、地址转换流程、文件系统读写流程。第二遍再带着项目需求反查章节。比如写 Shell 项目时回到 fork、exec、wait 相关章节仔细读写并发项目时重点重读锁和条件变量几章。这种“按需精读”的方式比从头到尾反复刷效率更高。2.2 Homework 模拟器把算法“运行”起来OSTEP 的 Homework 是这本书的特色之一。几乎每章配套的题目都会使用一个 Python 模拟器。例如调度算法章节对应scheduler.py地址转换章节对应relocation.py分页与 TLB 章节对应paging-multilevel-translation.py并发执行章节对应x86.py内存分配章节对应malloc.py这些模拟器通常从 OSTEP 官网页面直接下载文件名就是脚本本身。大多数脚本用-h参数就能看到完整帮助。下面以调度模拟器为例展示一个典型用法python3 scheduler.py -h python3 scheduler.py -p RR -l 3,5,2 -s 0 -q 2第一条命令是查看帮助第二条命令指定调度策略为 RR时间片轮转-l后面给出进程列表-s可以固定随机种子-q设置时间片长度。运行后会打印出调度顺序、每个进程的完成时间、平均周转时间和平均响应时间。不同算法之间一对比就能直观看出它们优在哪里、劣在哪里。这里要提醒一句这些模拟器源码写于不同年份有的最初基于 Python 2。如果你电脑上直接运行报语法错误不要慌常见原因是print语法或标准库差异。解决办法有两个方向一是安装旧版 Python 2 环境单独运行脚本二是对脚本做少量兼容性调整。对学习来说我更推荐前者避免改动脚本逻辑影响结果。因此用 python 运行模拟器时建议先确认当前环境默认版本再决定运行方式。模拟器的价值不仅仅是“做题”它还能帮助你在写真实代码之前先建立直觉。当你理解了一个调度算法的时间线是如何画出来的再去实现调度器时思路会清晰很多。2.3 实验项目从 xv6 到系统编程OSTEP 的配套项目常见的是基于 xv6 进行功能扩展。xv6 是一个教学用途的类 Unix 操作系统由 MIT 维护使用 C 语言编写代码量很小适合学生通读和改造。CS537 风格的项目通常会引导学生做以下工作给 xv6 增加新的系统调用比如获取进程 PID、设置调度优先级。修改进程调度策略例如把默认轮转调度改为多级反馈队列或更复杂的调度策略。实现内存映射文件或改进内存分配逻辑。单独实现一个用户态 Shell或者一个并发网络服务器。这些项目有一个共同点代码量可能不大但对正确性要求极高。即使只是一个小小的系统调用也要考虑返回值、错误码、用户态与内核态参数传递、进程生命周期等问题。这种“小切口、深挖下去”的训练方式非常锻炼系统级思维。如果你短期内没有精力做 xv6 项目也可以先从用户态 Shell 开始。接下来我会用一小节带大家实现一个具备核心功能的迷你 Shell让大家感受一下 CS537 风格项目的味道。3. OSTEP 知识地图一条线串起操作系统3.1 CPU 虚拟化进程、线程与调度CPU 虚拟化解决的核心问题是如何让多个程序共享同一个 CPU但看起来像是各自独占一样。答案是时分共享而实现时分共享需要一套机制和策略。机制部分包括进程创建、上下文切换、进程状态管理等。进程在操作系统中通过fork()创建通过exec()加载新程序通过wait()等待子进程结束。这三个系统调用是写 Shell 项目的基础。策略部分则指调度算法。常见算法包括 FIFO、SJF、STCF、时间片轮转 RR、多级反馈队列 MLFQ 等。学习调度算法时不要死记复杂度而是关注两个指标周转时间和响应时间。很多时候一个好的调度策略是在这两个指标之间做权衡。3.2 内存虚拟化地址空间、分页与 TLB内存虚拟化解决的核心问题是如何让多个程序同时使用物理内存又互不影响。操作系统为每个进程维护一个独立的虚拟地址空间再通过地址转换机制映射到物理内存。从简单到复杂内存虚拟化的机制包括基址加界限最简单但碎片化严重。分段支持不同区域独立管理但粒度仍有限。分页把地址空间切成固定大小的页面配合页表完成映射。多级页表解决页表占用太高的内存问题。TLB利用高速缓存加速地址转换。页面置换算法如 FIFO、LRU决定缺页时替换哪个页面。学习这一部分时建议对照 OSTEP 里的“地址翻译例子”一步步手算一遍再用模拟器验证结果。只有亲手算过一遍才能真正理解虚拟地址为什么能、以及如何映射到物理地址。3.3 并发锁、条件变量与信号量并发部分解决的是多线程程序的安全性问题。当多个线程同时访问共享数据时如果没有同步机制就会出现数据竞争。OS 通过锁来保证互斥通过条件变量让线程在特定条件下等待或唤醒通过信号量完成更通用的同步。除了概念还要能识别常见的并发错误死锁多个线程互相等待对方持有的资源。竞态执行顺序影响最终结果。原子性缺失一段需要整体执行的代码被中途切换。OSTEP 这一部分有一个非常经典的模拟器x86.py它可以描述一段多线程汇编代码在多个 CPU 上的交错执行。运行它你可以亲眼看到同一段代码在不同交错顺序下可能产生不同结果这比只看“临界区”三个字更让人记忆深刻。3.4 持久性文件系统与崩溃一致性持久性部分从磁盘和文件系统讲起。文件系统的核心抽象是文件和目录底层则通过 inode 保存文件元数据和数据块索引。为了保证断电、崩溃时数据不损坏文件系统需要崩溃一致性机制常见方式包括fsck 一致性检查。日志化也就是提前写日志再应用实际操作。写时复制 COW避免原地修改导致的一致性风险。这一部分的实际体验很难通过普通编程实现所以模拟器和磁盘格式分析显得格外重要。你可以通过 OSTEP 中文件系统模拟器观察不同崩溃场景下文件系统状态的变化理解日志为什么能帮助系统恢复。三大主题关注问题关键概念虚拟化共享与隔离进程、调度、地址空间、页表、TLB并发同步与协作原子性、锁、条件变量、信号量、死锁持久性可靠存储inode、文件系统、日志、RAID、崩溃一致性4. 从理论到实践实现一个迷你 Shell4.1 项目背景与功能拆解CS537 这类课程中Shell 项目是一个非常经典的开胃菜。它要求你实现一个具备参数解析、内建命令、外部程序执行、管道、重定向等能力的命令行解释器。这里给出的示例不是 CS537 原题而是我在学习过程中整理的“最小可用版本”目的在于帮助理解 fork、exec、wait 的组合用法且代码可以直接复制运行。迷你 Shell 的核心功能显示提示符myshell。读取一行用户输入。把输入字符串切分成命令和参数。处理内建命令cd、exit。对外部命令创建子进程执行。父进程等待子进程结束。4.2 前置知识fork、exec、wait在写 Shell 之前先理解三个系统调用的组合逻辑。fork()会复制当前进程调用一次返回两次。在父进程中返回子进程 PID在子进程中返回 0。这是实现 Shell 的基础Shell 本身是一个进程它通过 fork 复制出子进程再在子进程中执行用户输入的命令。exec()系列函数会在当前进程中加载一个新的可执行程序替换当前进程映像。一旦 exec 成功后续代码不会继续执行除非 exec 失败。Shell 项目中常用execvp()因为它会自动在 PATH 环境变量中查找可执行文件。waitpid()让父进程阻塞等待某个子进程结束并回收子进程资源。Shell 项目中父进程等待子进程结束是为了模拟“前台程序运行时 Shell 不重新提示”的效果。4.3 核心代码实现下面是一个完整的myshell.c文件位于项目根目录。// myshell.c #include stdio.h #include stdlib.h #include string.h #include unistd.h #include sys/wait.h #define CMD_MAX 1024 #define ARG_MAX 64 void parse_command(char *line, char **argv) { int i 0; char *token strtok(line, \t\n); while (token ! NULL i ARG_MAX - 1) { argv[i] token; token strtok(NULL, \t\n); } argv[i] NULL; } int main() { char line[CMD_MAX]; char *argv[ARG_MAX]; while (1) { printf(myshell ); fflush(stdout); if (fgets(line, CMD_MAX, stdin) NULL) { printf(\n); break; } parse_command(line, argv); if (argv[0] NULL) { continue; } if (strcmp(argv[0], exit) 0) { printf(bye~\n); break; } if (strcmp(argv[0], cd) 0) { if (argv[1] NULL) { fprintf(stderr, usage: cd dir\n); } else if (chdir(argv[1]) ! 0) { perror(cd); } continue; } pid_t pid fork(); if (pid 0) { perror(fork); continue; } else if (pid 0) { execvp(argv[0], argv); perror(execvp); exit(127); } else { waitpid(pid, NULL, 0); } } return 0; }代码逻辑其实很直接parse_command使用strtok按空格、Tab、换行拆分命令结果保存在指针数组里。exit和cd是 Shell 内建命令必须由 Shell 进程自己执行不能 fork 子进程再执行因为cd作用的是进程自己的工作目录。其他命令先fork()子进程调用execvp()加载程序父进程调用waitpid()等待。子进程 exec 失败时要调用exit(127)返回错误码防止继续执行 Shell 循环。这里有几个关键细节值得注意printf(myshell )后必须加fflush(stdout)否则提示符可能不会及时显示。标准输出在终端上默认是行缓冲不带换行时不会自动刷新。子进程 exec 成功后不会继续执行后面的代码所以父进程的waitpid一定要放在else分支里。内建命令和外部命令要分开处理这是 Shell 实现的基本逻辑。4.4 编译运行与测试编译命令很简单gcc -o myshell myshell.c -Wall ./myshell运行效果如下myshell ls myshell echo hello hello myshell cd /tmp myshell pwd /tmp myshell exit bye~如果是在本地 Linux 环境或者虚拟机里测试这段代码通常能直接编译通过。需要注意的是strtok会修改原字符串所以不要把argv中的指针保存到后续迭代中复用每次输入新命令时应当重新解析。4.5 如何扩展成 CS537 级别的项目迷你 Shell 只是一个起点要真正达到课程项目的深度可以逐步加入以下功能输入输出重定向。在子进程中用open()打开文件再用dup2()把标准输入或标准输出重定向到文件描述符。例如实现ls out.txt时子进程先打开输出文件再把文件描述符复制到 STDOUT_FILENO然后才调用 exec。管道。用pipe()创建管道Shell 需要把前一个命令的标准输出接到管道写端把后一个命令的标准输入接到管道读端。这需要处理多个子进程之间的文件描述符关系。后台执行。识别命令末尾的父进程不立即waitpid而是在子进程退出时通过 SIGCHLD 信号统一回收实现sleep 10 这类后台命令。环境变量展开。解析$HOME、$PATH等变量在 exec 前展开成实际值。信号处理。除了处理子进程结束信号还要避免 CtrlC 直接杀掉 Shell 进程本身而是把信号转发给正在前台执行的子进程。这些扩展点每一个都值得单独写一篇项目笔记。对初学者来说我的建议是先完成重定向和管道两个功能因为它们最贴近“系统编程”的本质进程间通信和文件描述符操作。5. 中英双语学习策略如何把 OSTEP 用透5.1 为什么建议读英文原版OSTEP 原版的语言风格偏口语化句子短、例子多阅读难度比同类英文教材低不少。操作系统领域的术语例如 address space、page table、deadlock、inode如果用中文翻译去记后续阅读英文文档和源码注释时会需要多一步转换。所以我的建议是以英文原版为主中文翻译或中文笔记作为辅助理解。具体操作时不要求逐字读完。可以先读每章开头的 “The Crux” 部分快速理解本章核心问题然后浏览图和示例再精读关键小节。读完一章后用英文关键词记几条笔记比如 “process states: running, ready, blocked”这样既学操作又练系统词汇。5.2 关键术语中英对照英文术语中文翻译说明Process进程运行中的程序实例包含代码、数据、堆栈等Thread线程进程内的独立执行流共享进程资源Address Space地址空间进程可访问的内存范围Context Switch上下文切换保存旧进程状态并恢复新进程状态的过程Page Table页表虚拟地址到物理地址的映射结构TLB快表页表缓存的硬件组件Mutex Lock互斥锁保证同一时刻只有一个线程进入临界区Condition Variable条件变量允许线程等待某个条件成立再继续执行Semaphore信号量用于控制多线程访问有限资源inode索引节点存放文件元数据和数据块指针的结构Journaling日志化先记录日志再执行改动用于崩溃恢复5.3 推荐的笔记方式读 OSTEP 和做 CS537 风格项目时我习惯使用“三版本笔记法”第一版是章节提纲读完一章后列出核心问题、机制、算法。第二版是模拟器结果图把运行完的模拟器输出截图保存标注关键现象。比如调度时间线、页表填充结果、并发交错结果。第三版是项目踩坑记录记录 bug 现象、原因、修复命令。这一版内容最珍贵面试前翻一翻能快速唤醒记忆。这套方法的好处是笔记不是抄书而是“用自己的话 自己的运行结果”来呈现知识复习时效率会高很多。6. 常见问题与排查思路6.1 看完了书还是不会做项目怎么办这是最常遇到的问题。原因通常是两个一是概念停留在“阅读层面”没有形成“操作层面”的记忆二是项目拆解能力不足不知道第一步该写什么。我的建议是先不追求完整实现而是从“最小闭环”开始。比如写 Shell 时先只实现echo和ls两个命令只要能解析并执行后面再逐步加上 cd、重定向、管道。项目开发不是一次到位重点是能持续运行并验证。OSTEP 的 Homework 也可以作为过渡练习先跑通模拟器再写真实代码难度曲线会平滑很多。6.2 C 语言项目编译报错问题现象常见原因解决思路error: unknown type name pid_t缺少sys/types.h头文件在代码头部添加包含sys/types.herror: variable declared void函数签名写错或宏定义冲突检查函数返回类型声明undefined reference to waitpid链接参数问题或头文件缺失确认包含sys/wait.h必要时检查链接库warning: implicit declaration没有在调用前声明函数添加函数原型或把辅助函数定义移到 main 之前避免这类问题最有效的方法是早期就开启严格编译选项比如gcc -Wall -Werror。虽然 Windows 环境也可以用其他编译器但这类操作系统课程项目一般面向 Linux 环境建议直接在 Linux 或虚拟机中开发最贴近课程评测环境。6.3 fork 后出现奇怪行为常见的 Bug 有子进程和父进程执行了同样的逻辑导致命令被执行两次。这通常是因为没有判断pid 0的分支或者子进程 exec 失败后没有exit()。父进程提前输出提示符导致输出顺序混乱。需要父进程等待子进程结束或在printf后主动刷新缓冲区。子进程修改了当前工作目录但 Shell 的工作目录没有变化。这是因为chdir()在子进程中执行只影响子进程所以cd必须由 Shell 自身执行。调试这类问题最有效的工具是stracestrace -f -o trace.log ./myshell-f表示跟踪 fork 出的子进程-o指定输出日志文件。通过查看系统调用序列你能清楚看到 fork、exec、chdir 等调用发生在哪个进程、哪个时刻问题很快就能定位。6.4 模拟器运行提示 Python 版本不兼容如果模拟器报语法错误比如SyntaxError: invalid syntax多半是脚本基于 Python 2 编写。最简单的办法是单独安装 Python 2.7 运行python2 scheduler.py -p RR -l 3,5,2 -s 0 -q 2如果不想安装多个 Python 版本也可以只用虚拟环境或者容器运行一个旧版 Python 环境。总之不建议花太多时间修改模拟器源码保持脚本原始行为能更好地保证习题答案一致性。7. 最佳实践与系统编程建议7.1 操作系统项目的代码组织CS537 风格的项目虽然以功能实现为主但工程规范同样重要。我建议项目代码按模块拆文件不要把所有逻辑塞进一个 main.c。以 Shell 为例可以拆成main.c负责循环和整体调度。parse.c、parse.h负责命令行解析。exec.c、exec.h负责外部命令执行和管道重定向。builtin.c、builtin.h负责内建命令实现。头文件里放函数声明和公共数据结构源文件里放具体实现。每个系统调用都要检查返回值错误信息用perror()输出确保错误发生时调用者能看到具体原因。7.2 内存与资源管理C 语言项目最容易踩的坑是内存泄漏和资源未释放。在操作系统项目中除了 malloc/free还要注意文件描述符、管道、信号处理器等资源的管理。每打开一个文件都要确保在合适路径上 close。fork 之后父子进程中不需要的文件描述符要及时关闭。使用 valgrind 检测内存泄漏valgrind --leak-checkfull ./myshell多线程项目可以使用 ThreadSanitizer 检测数据竞争gcc -fsanitizethread -g -o server server.c -lpthread这类工具是系统编程的常备工具箱早点学会使用能节省大量调试时间。7.3 安全边界意识操作系统项目经常要处理用户输入和临时文件安全边界需要格外注意对输入长度做校验防止缓冲区溢出。解析命令时考虑包含空格的路径和参数必要时使用引号规则解析。涉及openstat组合时注意避免 TOCTOU 问题。生产环境中不要随意以 root 权限运行测试程序。在学习阶段这些细节未必会被评测系统直接扣分但养成好习惯后对后续深入做内核或网络编程非常有帮助。8. 总结与下一步学习路线通过这篇文章你应该已经理解了一套完整的操作系统学习路径CS537 课程的定位、OSTEP 三件套的具体内容、操作系统三大主题的知识结构、一个迷你 Shell 从零到可运行的过程以及常见调试方向。如果要从零开始系统学习操作系统我建议按这个顺序推进用两周时间读 OSTEP 前 15 章覆盖进程、调度、地址空间、分页同时完成对应的模拟器 Homework。实现一个支持内建命令、重定向、管道的最小 Shell所有代码用 C 语言完成。继续读 OSTEP 并发章节理解锁、条件变量、信号量用 x86.py 观察并发交错。实现一个并发服务器或聊天程序练习 pthread 和 socket 编程。阅读 OSTEP 文件系统章节理解 inode、日志和崩溃一致性。最后尝试修改 xv6从系统调用开始逐步深入调度和内存管理。这个过程对应了三条能力线操作系统理论、C 语言系统编程、调试工具使用。三条线并进比只看书或只刷 leetcode 要扎实得多。操作系统是一门“越早学、越占便宜”的课程。它不会立刻改变你写业务代码的方式但它会决定你将来面对诡异并发 bug、线上性能问题、内核报错时是毫无头绪还是能快速建立假设。希望这份 OSTEP 三件套和 CS537 的学习笔记能帮你顺利迈过这道门槛。如果觉得文章有用欢迎收藏也欢迎在评论区聊聊你在 Shell 项目或 xv6 实验中遇到的有趣问题。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

JWT的签名算法有哪些? 2026/9/1 11:55:25

JWT的签名算法有哪些?

JWT(JSON Web Token)的签名算法主要有几种,其中最常见的是HMAC(Hash-based Message Authentication Code)算法族和RSA(Rivest–Shamir–Adleman)或ECDSA(Elliptic Curve Digital Sig…

阅读更多 →
如何验证JWT的签名?底层原理是什么? 2026/9/1 11:55:25

如何验证JWT的签名?底层原理是什么?

JWT(JSON Web Token)的签名验证是确保JWT的真实性和未被篡改的重要步骤。签名是JWT的一部分,通常位于JWT的最后一段。签名的目的是确保JWT的Payload(载荷)数据在传输过程中没有被修改过。底层原理:JWT通常由…

阅读更多 →
JWT的“jti”声明有什么作用? 2026/9/1 11:55:25

JWT的“jti”声明有什么作用?

JWT的“jti”声明代表“JWT ID”,它是一个唯一标识符,用于标识每一个JWT。这个声明不是强制性的,但如果使用了,它可以提供额外的安全性和可追踪性。作用:防止重放攻击:通过记录已经使用过的“jti”&#xf…

阅读更多 →
ReasonCode客户端实战:基于ReasonixGUI搭建DeepSeek Harness工作流 2026/9/1 11:55:25

ReasonCode客户端实战:基于ReasonixGUI搭建DeepSeek Harness工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
晶圆级架构如何破解大模型推理的“内存墙”瓶颈 2026/9/1 11:55:25

晶圆级架构如何破解大模型推理的“内存墙”瓶颈

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Agentic AI验证框架:从规则引擎到可观测性的Python实现 2026/9/1 11:52:25

Agentic AI验证框架:从规则引擎到可观测性的Python实现

当把带工具调用的 Agent 从 Demo 推向生产环境时,会遇到一类非常现实的问题:模型明明只有两个内部工具可用,某些 Prompt 下却会拼接出不存在的工具名;工具已经返回了结构化结果,模型却没有基于返回值作答,而…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞