自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(173)
  • 收藏
  • 关注

翻译 【MIT 6.S081】LEC 19 Virtual Machines

Dune系统利用现代处理器的虚拟化硬件,为应用程序提供直接访问特权CPU功能的安全方式,同时保持与现有操作系统接口的兼容性。该系统通过小型内核模块初始化硬件并协调内核交互,配合用户级库管理特权功能。在64位x86 Linux上的实现表明,Dune简化了需要访问特权硬件的应用程序开发(如沙箱、特权分离和垃圾收集器),并带来显著性能优势。相比虚拟机方案,Dune进程保持完整的系统集成性,开发难度更低,且无需构建完整的内核抽象。

2026-03-25 14:49:02 17

翻译 【MIT 6.S081】LEC 18 OS Organization

本文探讨了基于L4微内核的系统性能。L4微内核基于线程和地址空间两大核心概念,通过进程间通信(IPC)机制支持远程过程调用(RPC)和线程迁移。其创新性在于允许用户级服务器递归构建地址空间,仅在内核实现grant、map和unmap三种基本操作。当发生页错误时,微内核通过IPC将错误传递给关联的页处理器,实现了灵活的内存管理策略。硬件中断被转化为IPC消息,使设备驱动程序可作为用户级服务器运行。文章还介绍了L4在Pentium处理器上的小地址空间优化技术,以及如何在L4微内核上构建Linux系统的实践。这些

2026-03-25 14:48:47 11

转载 【MIT 6.S081番外】扩展 Linux虚拟内存管理(小林Coding截取)

本文摘要主要介绍了Linux虚拟内存管理的核心概念和机制。重点内容包括: 虚拟内存地址格式:详细说明了64位和32位系统中虚拟地址的组成结构,包括页目录项、页表项和页内偏移。 进程虚拟内存空间布局:阐述了代码段、数据段、BSS段、堆、文件映射区、栈等关键区域的分布和特性。特别指出文件映射区和栈区的地址增长方向是从高地址向低地址。 32位与64位系统差异:对比了两种架构下的虚拟内存空间分布特点,并介绍了通过/proc/pid/maps查看实际内存布局的方法。 内存管理机制:简要说明了堆空间通过brk指针扩展、

2026-03-25 14:48:30 12

翻译 【MIT 6.S081】LEC 17 Virtual memory for applications

本文探讨了操作系统应提供的虚拟内存原语及其在现代系统中的实现情况。研究分析了多种利用页面保护技术的用户级算法,包括并发垃圾回收等应用场景。作者提出了6个关键虚拟内存原语:用户态缺页处理(trap)、单页/多页保护(prot1/protN)、解除保护(unprot)、脏页查询(dirty)和双重映射(map2)。这些原语在共享内存多处理器中能实现高效的中粒度同步,避免高开销的同步指令。论文特别指出批量页面保护操作与单页保护的成本差异不大,并强调了同一页表中双重映射对多线程算法的重要性。通过案例分析,研究还总结

2026-03-25 14:48:08 8

翻译 【MIT 6.S081】LEC 16 File system performance and fast crash recovery

摘要 本文探讨了为Linux ext2fs文件系统设计事务性元数据日志的工作,旨在解决崩溃恢复时间过长的问题。随着磁盘容量增长,传统检查技术的恢复时间呈线性增加。研究提出在保持性能、兼容性和可靠性的前提下,通过添加事务日志实现原子性恢复。相比ext2fs现有的非原子性恢复机制,新设计采用"延迟有序写入"技术,在内存中维护磁盘缓冲区顺序,确保数据写入的正确时序。论文特别强调在同步缓冲区完成前保留日志数据副本的重要性,否则可能导致灾难性数据损坏。该方案最终发展为现今的ext3文件系统。

2026-03-25 14:47:53 7

翻译 【MIT 6.S081】LEC 15 Crash recovery

本文摘要讨论了文件系统在崩溃或电力故障时的安全性问题。当文件系统操作涉及多个步骤时,若在中间步骤发生故障,可能导致磁盘数据处于不一致状态。文章以XV6文件系统为例,分析了创建文件和写入数据过程中可能出现的故障场景,如丢失inode或数据块分配错误。为了解决这些问题,文件系统通常采用logging机制来确保操作的事务性。尽管XV6的logging实现较为简单且性能有限,但它展示了关键的设计思想。文章最后指出,更高效的logging实现(如Linux ext3)将在后续课程中探讨。

2026-03-25 14:47:38 7

翻译 【MIT 6.S081】LEC 14 File system

本文概述了xv6文件系统的架构与关键机制。文件系统通过分层设计解决多个核心问题:磁盘数据结构管理、崩溃恢复、并发控制和性能优化。主要包含六层架构:磁盘层、缓冲缓存层(同步访问与缓存)、日志层(事务原子性)、inode层(文件表示)、目录层(路径解析)和文件描述符层(资源抽象)。磁盘空间划分为引导区、超级块(元数据)、日志区、inode区、位图区和数据区。缓冲缓存层使用睡眠锁确保线程安全,并采用LRU策略管理缓存块。日志层通过事务机制保证崩溃时的数据一致性,而inode和目录层共同构建了文件系统的树形结构。

2026-03-24 14:22:26 16

翻译 【MIT 6.S081】LEC 13 sleep&wakeup and code

本文讨论了线程切换中的锁限制以及Sleep&Wakeup机制。在XV6中,线程切换时必须持有进程锁(p->lock)但不能持有其他锁,以防止死锁。Sleep&Wakeup用于实现线程间的协调(Coordination),使线程能等待特定事件而非忙等待。文章以UART驱动为例,展示了如何通过Sleep&Wakeup处理I/O等待,并分析了潜在的"lost wake-up"问题。这些机制是XV6内核实现高效线程同步的基础。

2026-03-24 14:22:15 8

翻译 【MIT 6.S081】LEC 12 Q&A labs

本实验旨在帮助学生熟悉多线程编程,主要内容包括实现用户级线程包中的线程切换机制、使用多线程加速程序以及实现屏障。实验提供了uthread.c和uthread_switch.S两个文件,需要补充线程创建和切换的相关代码。学生需设计寄存器保存/恢复方案,在thread_create()和thread_schedule()中添加代码,并实现thread_switch函数来完成线程切换。实验成功后,运行uthread程序将看到三个测试线程交替执行的输出。提示建议仅需保存被调用者保存的寄存器,并推荐使用调试工具辅助开

2026-03-24 14:22:06 8

翻译 【MIT 6.S081】LEC 11 Thread switching

本文摘要:Xv6操作系统通过多路复用技术实现进程调度,主要包括两种切换场景:等待I/O或系统调用时被动切换,以及定时中断强制切换。调度面临六大挑战:上下文切换实现、透明切换机制、多核并发锁管理、进程资源释放、多核状态维护及休眠/唤醒机制。具体实现中,每个CPU有专用调度线程,通过swtch函数保存和恢复寄存器上下文完成切换。调度器以特殊线程形式存在,进程需获取自身锁并释放其他锁后才能放弃CPU控制权。

2026-03-24 14:21:55 11

翻译 【MIT 6.S081】LEC 10 Multiprocessors and locking

本文介绍了锁在多处理器系统中的重要性及其实现原理。首先通过竞态条件示例说明了锁的必要性,当多个CPU同时访问共享资源时,可能导致数据不一致。Xv6系统实现了两种锁:自旋锁和睡眠锁,重点分析了自旋锁的原子交换机制(amoswap指令)如何确保互斥访问。在使用锁时,需要考虑保护共享变量和不变量的基本原则。文章对比了粗粒度锁(如全局内核锁)和细粒度锁(如每个文件单独锁)的优缺点,前者实现简单但影响并行性,后者提高并发但增加复杂度。最后提到当需要同时持有多个锁时,必须遵循一致的锁获取顺序以避免死锁问题。

2026-03-24 14:21:44 11

翻译 【MIT 6.S081】LEC 9 Interrupts

摘要 本章介绍了操作系统中的中断与设备驱动机制。设备驱动负责管理特定硬件设备,包括配置硬件、执行操作、处理中断和与等待I/O的进程交互。驱动通常分为上半部分(内核线程)和下半部分(中断处理)。以控制台输入输出为例,UART硬件通过内存映射寄存器与CPU交互,在收发字符时产生中断。xv6通过缓冲和中断实现设备活动与进程活动的解耦,提高I/O并发性能。同时需要注意驱动中的并发安全问题,如多CPU访问冲突和中断处理时的进程状态问题。此外,时钟中断用于系统计时和进程调度切换。

2026-03-24 14:21:25 8

翻译 【MIT 6.S081】LEC 8 Page faults

本文介绍了page fault的基本原理及其在虚拟内存中的动态应用。课程重点讨论了lazy allocation、copy-on-write fork等通过page fault实现的虚拟内存功能,这些功能在Linux等操作系统中已实现,但XV6尚未支持。当用户进程触发page fault时,XV6会直接终止进程,而现代系统则利用page fault动态更新页表。文章详细分析了page fault时所需的三个关键信息:出错虚拟地址(STVAL寄存器)、错误类型(SCAUSE寄存器)和触发指令地址(SEPC寄存

2026-03-24 14:21:14 7

翻译 【MIT 6.S081】LEC 7 Q&A labs

因为参考的网站没整理LEC 7,所以只能自己整了。

2026-03-24 14:21:03 11

翻译 【MIT 6.S081】LEC 6 Isolation & system call entry_exit

本文摘要介绍了计算机系统中三种触发CPU中断的事件类型(系统调用、异常和设备中断)及其处理机制。重点阐述了xv6操作系统内核如何通过四个阶段(硬件操作、汇编向量准备、C陷阱处理程序和系统服务)处理这些陷阱事件,并详细说明了RISC-V架构中用于陷阱处理的关键寄存器(如stvec、sepc等)的功能。文章还分析了不同陷阱类型(用户空间、内核空间和定时器中断)需要分别处理的原因,以及CPU在触发陷阱时的硬件操作流程,包括保存现场、设置处理程序地址等关键步骤。

2026-03-24 14:20:50 9

翻译 【MIT 6.S081】LEC 5 栈 Calling conventions and stack frames RISC-V

本文介绍了RISC-V架构中C程序的调用约定标准,主要包括两种调用规范:RV32G/RV64G标准扩展调用约定和软浮点调用约定。标准调用约定优先使用寄存器传递参数,最多可使用8个整数寄存器(a0-a7)和8个浮点寄存器(fa0-fa7),参数传递规则根据数据类型和大小有所不同。小于指针字长的参数通过寄存器低位传递,大于两倍指针字长的参数通过引用传递,返回值则通过a0/a1或fa0/fa1寄存器返回。此外,堆栈指针保持16字节对齐,并详细说明了临时寄存器和保存寄存器的使用规则。软浮点调用约定则适用于没有浮点硬

2026-03-24 14:20:35 10

翻译 【MIT 6.S081】LEC 4 Page tables

本文介绍了xv6操作系统中页表机制的工作原理。在Sv39 RISC-V架构下,64位虚拟地址仅使用低39位,通过三层页表结构实现虚拟地址到物理地址的转换。每个CPU都有自己的页表寄存器satp,支持多进程隔离。内核通过预定义的内存布局(kernel/memlayout.h)访问物理内存和硬件资源,其中QEMU模拟器将RAM映射到0x80000000以上的地址空间,设备接口则位于该地址以下。页表机制为进程提供私有地址空间,并支持内存访问控制和特殊映射功能。

2026-03-23 12:27:23 9

翻译 【MIT 6.S081】LEC 3 OS organization and system calls (boards)

摘要 本文讨论了操作系统的组织结构,重点介绍了隔离性、内核/用户模式、系统调用等核心概念。操作系统通过硬件支持(如用户/内核模式、虚拟内存)实现资源隔离,防止应用程序直接访问硬件资源。内核模式允许执行特权指令,而用户模式只能运行普通指令,确保应用程序无法破坏系统稳定性。系统调用是用户程序访问内核服务的基本方法。XV6操作系统以简单方式实现了这些机制,为应用程序提供安全隔离的运行环境。

2026-03-23 12:27:01 13

翻译 【MIT 6.S081】LEC 2 C and gdb

本文摘要了xv6操作系统组织相关的核心概念。xv6运行于RISC-V多核处理器,采用LP64 C语言编写。操作系统需满足多路复用、隔离和交互三大需求。RISC-V提供机器模式、监督模式和用户模式三种执行级别,其中内核运行在监督模式,通过系统调用实现用户程序与内核的安全交互。xv6采用宏内核设计,整个操作系统运行在内核空间,通过抽象硬件资源为服务(如文件系统)来实现强隔离。CPU硬件支持(如模式切换指令ecall)是确保隔离性的关键。文章还介绍了xv6运行的模拟硬件环境及其与Unix相似的系统调用机制。

2026-03-23 12:26:49 14

翻译 【MIT 6.S081】LEC 1 Introduction and examples

本文介绍了操作系统xv6的系统调用接口,重点讲解了进程管理、I/O和文件描述符以及管道机制。在进程管理方面,fork创建子进程并返回不同PID,exit终止进程释放资源,exec替换进程内存但保留文件表。文件描述符部分解释了其作为索引的抽象特性,以及标准输入/输出/错误的约定用法。管道机制通过内核缓冲区实现进程间通信,以文件描述符对形式提供读写功能。文章还说明了shell如何利用fork和exec分离的特性实现I/O重定向,以及dup系统调用在错误输出重定向中的应用。这些机制共同构成了xv6强大的系统调用接

2026-03-23 12:26:36 12

原创 【2020版MIT 6.S081】 操作系统 vx6——总纲

【2020版MIT 6.S081】 操作系统 vx6——总纲

2026-03-23 12:24:08 332

翻译 【MIT 6.824】LEC 15 Spark

本文提出了弹性分布式数据集(RDD)这一新型分布式内存抽象,它能够以容错方式在大型集群上高效执行内存计算。RDD针对当前计算框架处理效率低下的两类应用场景进行了优化:迭代算法和交互式数据挖掘工具。与现有框架不同,RDD通过记录数据转换过程(血统)而非实际数据来实现容错,避免了数据复制和磁盘I/O的高开销。RDD具有只读、分区特性,支持持久化和自定义分区策略,通过粗粒度转换操作(如map、filter等)实现并行处理。实验表明,RDD在迭代计算和交互式查询等场景下性能显著优于现有框架。

2026-03-23 12:22:32 10

翻译 【MIT 6.824】LEC 12 Distributed Transactions

本文摘要探讨了计算机系统设计中原子性的概念,重点分析了并发线程间的协调问题。文章指出,并发线程在访问共享数据时可能引发冲突,需要通过前后原子性(All-or-nothing和Before-or-after)来确保操作的正确性。作者通过银行转账案例展示了缺乏协调会导致数据不一致,并提出了序列化(Serialization)作为验证并发操作正确性的标准——只有当结果与某种串行执行顺序的结果一致时,才认为并发协调是正确的。文中强调这种机制应独立于具体应用,以实现模块化设计目标。

2026-03-23 12:22:09 11

翻译 【MIT 6.824】LAB 3【TODO】KV Raft

本文介绍了在Raft之上构建应用程序服务时需要注意的关键问题和解决方案。主要内容包括:1) 应用客户端操作应通过状态机循环顺序执行;2) 需要实现重复检测机制,通过客户端ID和序列号避免重复操作;3) 指出了两个棘手的边界情况:索引重复问题(同一索引可能对应不同命令)和四向死锁问题(Raft与应用层间的交互可能导致死锁)。文章特别强调,即使是读请求也需要通过Raft日志,并且应用循环应是修改状态的唯一入口。

2026-03-23 12:21:52 26

翻译 【MIT 6.824】LEC 11 Frangipani

Frangipani是一种双层分布式文件系统,底层采用Petal分布式存储服务提供可扩展的虚拟磁盘,上层通过分布式锁服务确保多台机器对共享存储的一致性访问。该系统具有简单架构、高可用性、自动扩展和易于管理等特性,支持一致的文件视图、无缝扩容、在线备份和自动故障恢复,为用户提供近似本地Unix文件系统的使用体验。

2026-03-23 12:21:29 9

翻译 【MIT 6.824】LEC 9 CRAQ

CRAQ论文提出了一种改进的链式复制存储系统,在保持强一致性的同时显著提升读性能。通过让链上所有节点都能处理读请求,CRAQ实现了负载均衡和线性扩展能力。系统支持两种一致性模型:强一致性确保读取最新值,最终一致性允许读取稍旧版本以降低延迟。此外,CRAQ设计了跨数据中心部署方案,利用ZooKeeper进行集群管理,既能保证数据本地性,又能应对高并发写入场景。实验表明,在主要读负载下,CRAQ性能接近最终一致性系统,同时提供更强的一致性保证。

2026-03-23 02:28:37 9

翻译 【MIT 6.824】LEC 8 Zookeeper

ZooKeeper是一种无等待的分布式协调服务,结合了组消息传递、共享寄存器和分布式锁服务的特性。它通过事件驱动的watch机制实现客户端缓存管理,避免了传统锁机制带来的阻塞问题。ZooKeeper提供两种节点类型(常规节点和临时节点),并保证客户端请求的FIFO执行顺序和状态变更的线性化。相比Chubby等基于锁的系统,ZooKeeper采用一次性触发的watch机制,显著提升了系统可用性。该系统已成功应用于多种分布式场景,支持构建高级协调原语,同时保持高性能。

2026-03-22 22:23:58 8

翻译 【MIT 6.824】LEC 7 Raft2

Raft协议通过日志恢复机制确保集群数据一致性。当新Leader(如S3)当选后,会通过递减nextIndex的方式探测Followers的日志匹配点,然后发送后续所有日志条目。不匹配的日志会被安全删除,因为这些未提交的日志不存在于多数节点中,客户端会重发请求。选举约束规定不能仅选择最长日志的节点作为Leader,因为可能存在已提交和未提交日志混合的情况(如S1有任期5-7的日志但未提交,而S2/S3有已提交的任期5、8日志)。Raft要求Leader必须包含所有已提交的日志条目,确保数据安全性。

2026-03-22 22:22:58 11

翻译 【MIT 6.824】LEC 6 Raft1

本文摘要: Raft共识算法通过精心设计的选举和日志复制机制确保分布式系统的一致性。选举阶段采用随机超时和多数票原则实现"选举安全",保证每个任期最多一个领导者。日志复制阶段通过严格的一致性检查维护"日志匹配"属性,确保不同服务器上相同索引和Term的日志内容完全一致。算法还保证已提交的日志条目会出现在后续所有领导者的日志中("领导者完整性"),并确保状态机应用日志的顺序一致性("状态机安全")。Raft特别注重算法的可理解性,

2026-03-22 22:21:10 15

翻译 【MIT 6.824】LAB 2 Raft

MIT 6.824 Lab 2要求实现Raft共识算法,构建一个容错的状态复制系统。Raft通过维护一致性日志确保所有副本服务器执行相同的客户端请求序列。实验分为三部分,需实现选举、日志复制、持久化等核心功能(不包括成员变更和快照)。关键挑战包括并发控制、故障恢复和遵循论文中的状态机规范。建议参考Raft扩展论文图2、学生实现指南及相关分布式系统资料。实验为后续构建分片KV服务奠定基础。

2026-03-22 22:19:47 10

翻译 【MIT 6.824】LEC 5 Go, Threads, and Raft

TimeMutexesCondition variables 条件变量Channels。

2026-03-22 22:18:12 39

翻译 【MIT 6.824】LEC 4 VMware FT

摘要:本文讨论了VMware FT中的复制技术,主要分为状态转移和复制状态机两种方法。复制状态机通过同步外部事件而非完整状态来保持副本一致性,适用于单核CPU环境,但难以扩展到多核处理器。文章指出复制技术能处理单机fail-stop故障,但无法应对软件bug或硬件设计缺陷。此外,副本间故障需相互独立,否则复制将失效。VMware FT采用底层完整状态复制方案,而大多数系统(如GFS)采用应用级状态复制以提高效率。复制状态机在创建新副本时仍需完整状态转移,代价较高。

2026-03-22 22:17:11 9

翻译 【MIT 6.824】LEC 3 GFS

摘要 本课程讨论了大型存储系统GFS的设计原理与实现机制。GFS通过分片(Sharding)解决性能问题,采用副本(Replication)实现容错,但带来了数据一致性问题。系统采用Master节点管理元数据,Chunk服务器存储实际数据的两层架构。Master节点维护文件到Chunk的映射表、Chunk版本号等关键信息,部分数据持久化到磁盘日志。读操作时客户端从Master获取Chunk位置信息后直接访问对应服务器;写操作必须通过主副本(Primary Chunk)执行,Master负责协调副本一致性并处

2026-03-22 22:15:17 33

翻译 【MIT 6.284】LAB 1 MapReduce

本文介绍了一个分布式MapReduce实验的实现要求。实验需要构建一个由master和worker进程组成的系统,其中master负责分配任务,多个worker通过RPC与master通信并并行执行任务。具体实现包括:worker向master请求任务、读取输入文件、执行任务并写入输出文件;master需监控任务执行状态,对10秒内未完成的任务重新分配。实验提供了基础代码框架,要求在mr目录下完成核心实现。测试时需先编译插件,然后分别启动master和worker进程,最终验证输出结果是否符合预期。实验还提

2026-03-22 22:13:46 9

翻译 【MIT 6.824】LEC 1,2 MapReduce、Go语言

本文摘要介绍了分布式系统课程的核心内容,重点分析了MapReduce框架的工作原理和特性。课程涵盖分布式系统的三大基础(存储、通信、计算)和关键工具(RPC、多线程),并深入探讨了可扩展性、可用性和一致性等核心问题。MapReduce部分详细解析了其工作流程:主节点分配任务、Map阶段本地存储中间结果、Reduce阶段获取并处理数据。特别强调了MapReduce如何通过任务分割实现负载均衡,以及通过确定性函数和任务重试机制确保容错性。文章还讨论了网络性能、慢节点处理、故障恢复等实际问题,并指出虽然MapRe

2026-03-22 22:03:04 20

原创 【MIT 6.824】2020版 MIT 6.824 分布式系统——总纲

本文分享了MIT 6.824分布式系统课程的自学经验与资源。作者在研究生秋招后利用毕业前一年时间完成了课程前两个实验,重点实现了Raft算法。文章汇总了2020版课程视频、笔记、主页等核心资源,并推荐结合英文字幕和讲义学习。详细介绍了WSL环境配置过程,包括Ubuntu安装、内存限制设置、Go语言1.13版本安装等注意事项,以及Git环境配置方法。作者强调课程虽然不建议公开分享代码,但仍将个人实现的实验代码发布在GitHub上供参考。

2026-03-22 21:58:37 215

原创 【读书笔记】架构整洁之道 P6 实现细节

文章摘要 本文探讨了系统架构中的几个关键实现细节,包括数据库、Web技术和应用程序框架。作者强调这些技术本质上只是实现手段,不应主导系统架构设计。数据库被视为存储数据的"大桶",Web技术并未改变软件本质,而框架应被谨慎使用,避免侵入业务逻辑。通过一个视频销售网站的案例分析,展示了如何基于角色和用例设计组件架构,并合理管理依赖关系。文章最后指出,传统分层架构虽然常见,但可能不是最佳实践,提示读者思考更合理的架构方式。

2025-09-26 17:50:07 1080

原创 【读书笔记】架构整洁之道 P5-2 软件架构

文章摘要: 本文探讨了软件架构设计的核心原则和实践方法。首先强调架构设计应围绕业务用例展开,而非基于技术框架(第21章)。良好的架构应独立于框架、数据库等外部因素,支持延迟技术决策。随后介绍了"整洁架构"概念(第22章),提出以业务实体、用例、接口适配器和框架驱动四个层次构建系统,遵循依赖关系规则(源码依赖向内层)。文章还详细阐述了"展示器和谦卑对象"模式(第23章),建议将难以测试的视图逻辑与可测试的展示器逻辑分离,通过视图模型来传递格式化数据。这种分层设计能有效提

2025-09-26 17:49:13 937

原创 【读书笔记】架构整洁之道 P5-1 软件架构

文章摘要:软件架构的核心原则 软件架构的本质在于规划系统组件的划分、排列和通信方式,其核心目标是支持系统的全生命周期。良好的架构设计应具备以下特点: 保留灵活性:尽可能长时间地保留最多可选项,推迟无关紧要的细节决策(如数据库选择、框架引入),将策略(业务逻辑)与实现细节分离。 支持关键维度: 开发:清晰的组件划分支持团队协作 部署:实现一键部署,降低运营成本 运行:架构应直观反映系统运行时需求 维护:通过组件隔离降低修改风险 独立性设计:采用分层解耦(如UI与业务逻辑分离)、单一职责原则,使变更原因不同的部

2025-09-26 17:47:50 826

原创 【读书笔记】架构整洁之道 P4 组件构建原则

稳定抽象原则(SAP)为组件的稳定性与它的抽象化程度建立了一种关联。一方面,该原则要求稳定的组件同时应该是抽象的,这样它的稳定性就不会影响到扩展性。另一方面,该原则也要求一个不稳定的组件应该包含具体的实现代码,这样它的不稳定性就可以通过具体的代码被轻易修改。因此,如果一个组件想要成为稳定组件,那么它就应该由接口和抽象类组成,以便将来做扩展。如此,这些既稳定又便于扩展的组件可以被组合成既灵活又不会受到过度限制的架构。将SAP与SDP这两个原则结合起来,就等于组件层次上的DIP。

2025-09-26 17:45:51 1090

代码整洁之道笔记-博客有

代码整洁之道笔记-博客有

2024-10-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除