机位、CPU 和磁盘已经接好,预约还不能自行完成。学生的请求要由程序读懂,空闲时段要由程序校验,记录也要按规则保存。这一节沿着一次校园预约,拆开“业务由谁决定、资源由谁管理、数据由谁维护、跨系统由谁协调”。它们有依赖,也有不同的分类依据。
教材 2.3 正式分八组。操作系统和文件系统的计算较多,下面把真实已学题型补在相应组中,例题均明确标自编或改编。网络报文与链路计算在 2.5,语言工具链在 2.6 继续;本节先把它们在软件体系中的职责放准。
2.3.1 一个软件产品交付了什么,解决什么问题
软件包括程序、数据及相关文档。预约服务的程序执行时段检查,配置和预约记录是它处理的数据,接口说明与维护手册帮助人正确使用、修改它。只有一份可执行文件并不能代表所有软件交付物;文档也不要求全部被 CPU 执行。
按所起作用,教材分系统软件与应用软件。操作系统、语言处理程序、DBMS 和网络支撑软件提供基础能力;预约应用利用这些能力完成师生的业务。浏览器服务于多种网站,是通用应用;校园预约服务有特定时段、资格与机位规则,是专用应用。

DB(Database,数据库)是有组织的数据集合;DBMS(Database Management System,数据库管理系统)是管理它的软件。它可以按教材归入系统软件,同时作为用户态服务进程运行。系统/应用按作用区分,用户态/内核态按执行权限区分,不能由“系统软件”三个字推断它一定运行在内核里。
2.3.2 同一台机器上的工作怎样得到资源
同时有许多学生预约,服务器只有有限的处理器与内存。操作系统(OS)管理处理机、存储、设备和文件,提供用户/程序接口及运行支撑。内核承担核心资源管理,外围系统程序提供 Shell、工具与服务等;具体边界依系统设计。内核特权级允许执行受保护操作,调度优先级决定谁较早获得 CPU,它们不是一个数。
教材的四个基本特征可以直接落在场景里:并发是多个活动在同一时间间隔推进,单逻辑 CPU 模型可以交替执行;共享是这些活动共同使用资源,有的资源需互斥,有的支持并发共享;虚拟把物理资源抽象成逻辑对象;不确定性(常称异步性)表示推进速度受调度和资源影响,不能随意假定两个请求每一步同时完成。正确同步有助于保持所需结果,但“异步”自身不保证结果确定。
| 教材类别 | 主要问题 | 边界 |
|---|---|---|
| 批处理 | 成批提交作业,提高资源使用效率;单道与多道区分在内存及并发组织。 | 通常减少交互,不能保证所有任务最快响应。 |
| 分时 | 以时间片支持多用户交互。 | 20 个终端各用满 50 ms、忽略开销,轮转一遍为 20×50=1000 ms;不是任意请求 1 s 内完成的承诺。 |
| 实时 | 在规定时限内响应或完成任务。 | 时限与失效后果在 2.4 分轴,不能只看平均快慢。 |
| 网络 | 连接多机,提供通信与网络资源服务。 | 各机仍可以保留独立 OS 与管理边界。 |
| 分布式 | 协调多节点,使一定范围的资源或任务具有统一管理/使用视图。 | 网络连接不自动等于分布式 OS;透明性依设计。 |
| 微机 | 面向微型计算机使用环境。 | 设备规模轴可以与分时、网络能力同时成立。 |
| 嵌入式 | 服务专用装置,适配资源与任务要求。 | 专用用途不自动等于硬实时。 |
先分清资源拥有者与执行流
程序是一份描述;进程是程序的一次执行及其资源、状态。引入线程后,进程主要承担地址空间与资源拥有,线程是相应模型中的 CPU 调度执行单位。线程各有程序计数器、寄存器状态和栈,但同进程通常共享代码、数据与打开文件等。栈各自使用,不表示硬件必定阻止一个线程访问另一个线程的栈。用户级线程是否被内核直接调度,要看它映射到内核线程的方式。

就绪已经有执行条件,只等 CPU;运行正在 CPU 上执行;阻塞还缺资源或事件。调度分派使就绪→运行,抢占/时间片到使运行→就绪,请求等待使运行→阻塞,事件完成使阻塞→就绪。P 操作能取得所需令牌时继续执行,只有条件不满足且采用阻塞等待时才转为阻塞。
五态增加新建、终止;七态再区分就绪挂起与阻塞挂起。唤醒一个仍在外存的阻塞挂起进程,先变为就绪挂起;“等待条件已满足”与“已调回内存”是不同条件。已学的经典三级调度模型分别处理作业准入、内外存对换、CPU 分派,现代系统未必显式保留相同三层。FCFS 按到达次序,短作业优先需要执行长度依据,优先级调度需给优先级方向,轮转需给时间片;抢占规则也须单独说明。
CPU 空闲多久,要从资源时间线找
【改编教学例】求两作业都完成的时刻。单 CPU、单共享 I/O 设备;每个作业内计算→I/O→计算严格先后;CPU 与 I/O 均非抢占 FCFS,切换耗时 0,t=0 起算。A 在 0 ms 到达,三段为 40/60/20 ms;B 在 20 ms 到达,三段为 100/40/40 ms。到达表示进入系统,不表示当时立即获得 CPU。
CPU 先做 A 的 0–40,再做 B 的 40–140。与此同时 A 的 I/O 在 40–100,结束后就绪等待。140–160 执行 A 的末段;B 的 I/O 在 140–180,所以 CPU 160–180 暂无可运行作业,180–220 执行 B 的末段。I/O 同一设备的两段没有重叠。

完工 220 ms,CPU 忙 40+100+20+40=200 ms,利用率 200/220≈90.91%。单位相除后为比例。直接合计 CPU 得 200 ms 会漏掉强制等待;把所有 CPU 与 I/O 串加得 300 ms 又漏了不同资源的并行。
变式只把 A 最后一段改成 40 ms:它在 140–180 正好填满等待,仍在 220 ms 全部完成,CPU 忙 220 ms,利用率 100%。同样的完工时间可以有不同利用率。再看设备数量:A/B 均在 0 到达,A 三段 2/8/2 ms,B 为 4/2/2 ms,CPU 先 A 后 B。共享 I/O 时 A 占 2–10,B 等到 10–12,最后 B 的 CPU 在 12–14,完工 14 ms;若各有独立 I/O,B 可在 6–8 做 I/O、8–10 做末段,A 10–12 做末段,完工 12 ms。改变设备共享条件要重排时间线。
两个缓冲能省时间,瓶颈决定省多少
【自编教学例】独立 I/O 输入路径每块耗 T,CPU 从 OS 缓冲复制到唯一用户工作区耗 M,随后处理耗 C;M/C 共用 CPU,不能重叠,用户区处理完才接下一块。单缓冲在写入 T 与读出 M 之间互斥,复制完成后可再次输入;双缓冲交替,仍不能覆盖未复制数据。忽略启动、切换和总线竞争。求 n=4 块的完成时间,给 T=10 μs,M=6 μs,C=2 μs。
首块要完整经过 T+M+C=18 μs。单缓冲在上一块复制之后,下一次输入与上一块处理可以交叠,所以后续间隔 Δ₁=max(T,C)+M=16 μs;双缓冲的稳定间隔由输入与 CPU 复制处理的较慢者决定,Δ₂=max(T,M+C)=10 μs。总时间分别为 18+(4−1)×16=66 μs 与 18+3×10=48 μs,省 18 μs。

变式保持 T=10,改 M=5、C=8 μs:首块 23,单间隔 15,双间隔 13,总时长 68 与 62 μs,省 6 μs。简化节约式 (n−1)M只在本模型 T≥M+C 时成立;变式若套它会错得 15 μs。n=1 时两者都只有一块首项,均为 T+M+C。DMA 独立复制、多用户区或独立处理流水的模型另算。
先问信号量管什么,再写初值和位置
互斥保护共享对象的临界区,同步规定操作先后。预约余票“读—判断—减一”要作为受保护的读改写;打印完成后才通知,管的是事件,不应直接照搬余票锁。一个信号量的数字只有与它对应的资源/事件一起读才有意义。
【自编教学例】缓冲 B1 容量 3、已有 1 件,B2 容量 2、初始空。每箱用 mutex、empty、full 三个信号量分别管独占操作、空位、已有产品;最初无人持锁。初值 B1=(1,2,1),B2=(1,2,0)。改 B2 已有 1 件,则变为 (1,1,1)。“同步初值永远是 0”忽略了对象的初始状态。

生产者先 P(empty)→P(mutex)→放入→V(mutex)→V(full);消费者先 P(full)→P(mutex)→取出→V(mutex)→V(empty)。若生产者先拿 mutex,再在满箱上等 empty,就可能抱锁等待;消费者拿不到 mutex,也无法取出产品释放空位。串联两箱时也应先完成并释放 B1 操作,再等待 B2,避免把一个箱子的锁带进另一个箱子的等待。
教材经典有符号模型定义 P 先令 S−1,负值时排队;V 先令 S+1,结果≤0 时唤醒一名。5 进程共享 2 件可互换资源,每进程最多一次未释放申请且最多占 1 件,S 初始 2,范围 [2−5,2]=[−3,2];S=−2 表示两名等待者。变式 7 进程、3 件为 [−4,3]。这是特定计数定义,实际非负 semaphore API 的读数不能直接当负等待人数。
【自编前驱例】A→B、A→C、B→D、C→D,四条边各设初值 0 的同步信号量。A 后执行 V(s1)、V(s2),B 前 P(s1) 后 V(s3),C 前 P(s2) 后 V(s4),D 前 P(s3)、P(s4)。D 的两个条件各有来源,不能让一个前驱 V 两次就冒充两个前驱均完成。若 B/C 各向同一初值0的计数信号量释放一次,D 是唯一消费者并等待两次,也能实现这个汇合。变式加 B→C,新增 s5:B 后 V(s5),C 前 P(s5)。一边一个是清楚的编码方案,不是最少信号量数量定理。

申请合法、资源够用、系统安全是三道检查
资源死锁的四个必要条件是互斥、占有并等待、不可剥夺、循环等待。预防通过限制条件,避免根据状态决定是否分配,检测/恢复则发现已经出现的问题再处理。不安全表示在最大需求假设下找不到保证完成的序列,不能据此直接说目前已发生死锁。
【自编银行家例】只有一种可互换资源,总量 10;进程最大需求已知且固定,完成后释放所占资源。当前表:P1 已分 2/最大 6/尚需 4;P2 为 2/3/1;P3 为 3/5/2。Available=10−(2+2+3)=3。求是否接受 P1 再要 2 件。先检查 2≤Need₁=4、2≤Available=3,再试分配为 Available=1、P1 已分 4/尚需 2。

Work 从 1 开始,P2 尚需 1 可以完成,收回已分 2 得 Work=3;P1 尚需 2 可完成,收回试后的 4 得 7;P3 收回 3 得 10。安全序列 P2→P1→P3,接受。改变申请为 3:试后 Available=0,尚需分别 1/1/2,没有可完成进程,拒绝。申请 5 则先超过 Need=4,属于非法申请,不必进入安全检查。若从原状态让 P3 请求 2,试后 Work=1,P3 尚需0先完成并释放5得6,P1释放2得8,P2释放2得10,也安全。
另一个【自编资源上界例】是四进程各最多要三件同类资源,不可抢占、完成才释放。八件可能让每人持二件、都等最后一件;九件能保证至少一人获得所需并完成。阈值 Σ(kᵢ−1)+1=4×2+1=9 件,来自最坏“各差一件”的占用再加一件。它判断一种资源的保证界,不能替代银行家当前状态检查,也不能直接套多资源向量。
页面是逻辑块,页框才是物理位置
连续分区让一个作业占连续区域,固定分区可能有内部未用空间,动态分区会因分配释放形成外部碎片;分页把逻辑空间按固定页大小拆开,分段按逻辑用途形成长度可不同的段,段页式再对各段分页。虚拟存储让合法地址空间的部分内容按需驻留,并提供保护与共享,容量仍受地址宽度、系统限制和后备资源制约。
【自编分页例】按字节寻址,页 4 KiB=4096 B=2¹² B,合法页号0–5。表为 0→帧4、1→7、2→3、3未驻留、4→5、5→9,其他页均驻留且权限允许。求逻辑地址 21C4H=8644 B 的物理地址:除 4096 得页号2、余数452=1C4H;查得帧3,PA=3×4096+452=12740 B=31C4H。页号被替换,偏移保持。

变式把页改成 2 KiB,并明确仍用同一给定映射表:8644÷2048 得页4、偏移452,查帧5,物理地址 5×2048+452=10692 B=29C4H。页号/帧号已变,不能仍剪后三位十六进制数。原4 KiB模型下 3004H 属合法页3但未驻留,需缺页处理;6000H 的页6超过表长6,不能查表合成。缺页不一定从磁盘读文件,首次分配匿名页、写时复制等情形要看实际映射;非法访问的处理也依系统。TLB 缓存地址映射,Cache 缓存内容,在 2.2已经分开。
【独立容量例】满32位字节虚空间,4 KiB页,平坦单级页表每项4 B、不省略未使用项。项数 2³²/2¹²=2²⁰,页表 2²⁰×4 B=4 MiB。这算的是映射元数据,不能把它当全部数据驻留量,也不能和上面仅6个合法页的24 KiB逻辑空间混为同一张表。
【自编分段例】表长3,段0基址1000 B/长度400 B,段1为4000/600,段2为9000/200。逻辑(1,599)先检查段号1合法,再检查 0≤599<600,物理地址4599 B。(1,600)恰等于段长,已经越界;(3,0)段号越界。变式仅把段1长度改成601,(1,600)才合法并映射4600 B。基址能相加不证明访问合法。
替换谁,要让算法的状态完整走一遍
【自编静态 NRU 例】访问位 A、修改位 M 的四类按00、01、10、11排列,候选限驻留页。页0/帧4为(1,0),页1/帧7为(0,1),页2/帧3为(0,0),页3不驻留且位(0,0)。选择逻辑页2,释放物理帧3。表中最低位类别也不能让未驻留页成为回收对象。若全清访问位,页0与页2同类,本例额外规定选最小页号才得页0;没有平局规则就不能唯一选择。Clock 的扫描指针和清位过程另定,不能当静态 NRU 排序的别名。
【自编替换例】三空帧,访问串 1,2,3,1,4,2,初装算缺页。FIFO 命中不改变装入次序;LRU 命中更新最近使用。两者前三次装填,第四次1命中。第五次4,FIFO淘汰最早装入1,LRU淘汰最近最久没用的2;第六次2,FIFO命中,LRU缺页并淘汰3。总缺页 4 与5,缺页率4/6与5/6;真正淘汰为1与2次,不能把装填也称淘汰。

变式补一个初始已驻留且最近使用页会改变第一次装填及后续选择,不能保持冷启动次数。OPT 使用未来访问信息作理论比较,实际在线系统无法一般地预知全部未来;工作集过大导致频繁缺页时应检查负载与驻留量,不能只换算法名称。
柱面距离、旋转等待和传输时间各有单位
【自编寻道例】机械盘柱面0–199,头在50,所有请求在t=0排队,列表10/45/90/55;等距按列表先到者。SSTF(最短寻道优先)路径 50→45→55→90→10,移动 5+10+35+80=130 柱面。LOOK 初向增大方向,只到最后请求后折返,路径50→55→90→45→10,移动120柱面。SCAN同向但规定先到物理端199再折返,路径50→55→90→199→45→10,移动338柱面。端点和折返规则改变了模型,不能按答案临时把SCAN改名LOOK。

【自编访问时间例】7200 r/min,随机旋转相位均匀,平均等半圈,寻道5 ms、传输0.5 ms,不计排队/缓存。一圈 60/7200 s=8.333… ms,平均旋转4.166… ms,平均访问 5+4.166…+0.5≈9.67 ms。变式目标刚到磁头下,旋转为0,总5.5 ms;刚错过需近一圈,总接近13.833… ms。SSD不套机械寻道。持续新请求下的饥饿讨论需动态条件,本有限队列不能自行证明公平性。
2.3.3 数据库管理数据,数据模型描述组织规则
学生、机位和预约之间有联系。关系模型可以用学生表、机位表、预约表表达;键唯一性、引用关系和“同一机位同一时段仅一条生效预约”是不同约束,最后一条要用明确的唯一约束或事务控制实现。关系本身不依赖行的物理先后。数据模型的三要素是数据结构、数据操作、完整性约束:分别说明能表示什么、能怎样处理、什么状态合法。
教材早期模型含层次、网状、关系;其后列出关系、键值、列存储、文档和搜索引擎数据库。理解时再拆轴:关系/键值/文档描述组织或访问模型,行存/列存描述存放方式,集中/分布描述部署。关系数据库也可列存、分布;不能把“分布式”当与“关系型”互斥的第四种模型。文档可包含嵌套字段与结构,允许文档结构不同不表示没有验证规则。
设计从需求分析→概念结构→逻辑结构→物理结构→应用程序设计→运行维护推进。概念阶段抽象对象与联系,逻辑阶段转成目标数据模型并处理约束,物理阶段结合 DBMS、硬件和 OS 选存储组织、索引等。教材强调以数据模型为中心,静态结构与动态行为均要考虑,并会反复调整;直观、规范、计算机辅助、自动化是设计方法类别,不是接在六阶段之后的四个额外阶段。具体规范化与 SQL 在第六章深入。

分布式数据库在多节点保存数据,需要说明所用分片/复制策略、放置和节点模式的映射,并非所有设计都同时切分且多副本。分片透明隐藏如何拆分,复制透明隐藏多副本细节,位置透明隐藏所在节点,局部模型透明隐藏节点底层模型差异。它们不能和四层按编号一一配对。一个节点可在允许范围局部自治,跨节点处理仍需协调规则;自治不意味着任意忽略全局约束。
教材第五阶段正式称应用程序设计,包含应用方法、开发计划、系统架构与安全策略;一些已学题源的六阶段用“数据库实施”作第五项,指建库、装载及应用实现等任务,作答须看该题的阶段名称与产物。运行维护包含转储/恢复、安全与完整性控制、性能监测和必要的重组/重构,不是设计一次以后只保持表名。
完全分布式数据库的教材特征为分布性、逻辑相关性、场地透明性、自治性。多地点保存、同一逻辑任务相关、隐藏地点细节、各节点有一定自治可以同时成立。教材还强调集中控制、数据独立、冗余可控及有效存取;集中控制指相应的全局管理协调,不表示所有数据都物理集中在一个节点,冗余可控也不表示完全没有副本。
预约写入属于在线业务处理,历史预约汇总可移交数据仓库分析。数据仓库在已学扩展中强调面向主题、集成、随时间保留和相对稳定;OLTP/OLAP按工作负载区分,不能仅根据存储行列给绝对性能排名。教材正式产品小项为 Oracle、IBM DB2、Sybase、Microsoft SQL Server;MySQL、Access另作开场例。这里只保留关系数据库产品身份与教材定位,品牌历史、版本容量和性能描述不作今天的排名或承诺。
大型DBMS的七项教材能力可按职责记:网络环境、支持较大规模应用、并发锁控制、安全控制、备份恢复、完整性维护、分布式处理。锁帮助协调并发,安全与完整性仍要配置规则,备份/恢复仍需验证。教程具体并发量及GB级容量为历史示例,不是现代产品的统一上限。
2.3.4 文件系统把名字、内容和物理块联系起来
预约导出表保存为一个文件。文件系统负责按名存取、目录、元数据、空间管理与权限等;DBMS可以在它之上保存数据、日志,也存在直接使用块设备等实现。文件是数据组织对象,文件系统是管理它的软件。写入文件成功本身不保证所有数据库事务语义与掉电持久性,仍需相应协议和配置。

逻辑结构看内容组织:无结构字节流或有结构记录,记录还可定长、变长。物理分配看磁盘块:连续分配易顺序读和直接定位,但扩展及外部碎片要考虑;链接分配能接不连续块,隐式链逐块走,显式链如 FAT 把链表集中管理;索引分配保存块地址,支持按索引查找但消耗索引空间。访问方式看读法:顺序推进或按偏移直接访问。数据库记录文件也能按索引分配,今天顺序扫描、明天随机读某条,三项同时成立。
| 文件分类的依据 | 教材名称 | 怎样避免混轴 |
|---|---|---|
| 性质与用途 | 系统文件、库文件、用户文件 | 描述承担的作用。 |
| 保存期限 | 临时、档案、永久文件 | 描述管理期限,不等于物理分配方式。 |
| 保护方式 | 只读、读/写、可执行、不保护 | 权限集合可组合;“可执行”不自动排除可读。 |
| UNIX教学类型 | 普通文件、目录文件、设备/特殊文件 | 是教材概括,具体系统还可细分链接、管道、套接字等。 |
FAT、VFAT、NTFS、Ext2、HPFS是教材列的文件系统名称,用来认识实现家族,不作当前推荐或现代类型全集。目录把名字映射到文件控制信息;单级目录简单但有命名冲突,二级按用户分,树形提供路径层次。FCB(文件控制块)记录属性与位置等;inode 是典型具体结构,未必把完整文件名存入自身。它可直接指数据,也可经外置索引块,图中的链是间接索引例。空闲区表记录空闲区起址与长度,位图一位对应一块,空闲块链跟随指针,成组链接把若干空闲块地址集中组织。首适应/最佳适应是在给定空闲表上选区的策略,不能仅凭表确定唯一分配。
先数块,再决定每块用几位表示
【自编位图例】300 GiB磁盘,块4 MiB,全容量可分且整除,每块一位,不计保留块。块数 N=300×1024/4=76800,位图76800 bit,除8为9600 B;若按完整32 bit字存,76800/32=2400 字。字数不是数据块数,位图字节数也不是磁盘容量。变式块改1 MiB,块数307200,位图38400 B/9600字。

不整除变式 N=33块:紧密按字节存 ⌈33/8⌉=5 B;完整32 bit字存 ⌈33/32⌉=2 字=8 B。多出的位没有增加真实数据块。0基块/字/位下,块2053为 2053=64×32+5,字号64/位号5;全部1基时先减1,2052=64×32+4,再加1得字号65/位号5。块32在全0基为(1,0),全1基为(1,32),是容易漏掉的字边界。这里0空闲、1占用,分配后置1;相反约定就要反向操作。
索引深度决定容量与查找路径,缓存决定读盘次数
【自编混合索引例】inode已在内存,有5直接、2一级间接、1二级间接指针;块1 KiB=1024 B,块号4 B,索引块无首部、全放地址。一个索引块容纳 n=1024/4=256 项。0基逻辑块范围分别是直接0–4,第一一级5–260,第二一级261–516,二级517–66052。最大数据块 5+2×256+256²=66053,乘1024得 67,638,272 B≈64.505 MiB,底层空间足够且未计索引元数据。

求逻辑字节795655的位置:795655=777×1024+7,是逻辑块777内偏移7。减去二级起点517,得 260=1×256+4,对应二级根的第1号项、下一层的第4号项。题设相关索引块与目标数据块均未缓存,inode 指根块700,700[1]→702,702[4]→数据块900,结果为物理块900内偏移7。相关索引块与目标数据块都未缓存时,读两个索引块和一个数据块,共3次;inode已在内存不再加一次。
变式求逻辑块516:它是第二个一级范围最后一块,相对项号255,给721[255]→901;读一个索引和一个数据块,共2次。逻辑块517才进入二级,边界必须保留。索引缓存命中会减少实际读盘,inode不在内存又要加相应读取。另一个量纲反例:4 KiB块/4 B块号的纯二级索引可管 1024² 数据块,字节为 1024²×4096=4 GiB,旧笔记“4 TB”多乘了1024。
文件的逻辑字节不含块尾碎片
【改编教学例】7条定长2048 B记录,块4096 B,记录不跨块、无块头,按物理块58/89/96/101存放。成组因子 f=⌊4096/2048⌋=2,文件有效14336 B。0基逻辑偏移12288为第7条记录首字节,逻辑块3→物理块101内0。8191在块89内4095,8192转到96内0。末块只用12288–14335,14336恰在EOF,不属于现有有效内容。

变式7条300 B记录、块1024 B、仍不跨块:每块最多3条,每个满块有效900 B、尾124 B为内部碎片,第三块只有一条300 B记录、未用724 B,物理块58/89/96足够。逻辑字节1800先算记录号6,是物理块96内0;1900是96内100。直接拿1800除1024会错落在89。只有规则改成允许跨块且连续字节流布局时,1800才位于89内776。这是题设改变后的另一个布局。
按内容做结构化扫描与文件名的链接也要分开。典型 Linux 硬链接是同一文件的多个等价目录名,不能跨挂载文件系统;删除一个名字不让另一个名字消失。最后链接删除后,若仍有进程打开文件,空间回收还要等这些打开引用结束。符号链接是保存目标路径的独立对象,可指向跨文件系统路径;目标改名/删除可能使它悬空,删除链接不删除目标。它不自带网络访问协议。link 手册、unlink 手册给出了这些实现边界。
典型UNIX权限用 R/W/X 表示读、写、执行,按文件主 owner、同组 group、其他 others 三类设置,权限可以组合。目录的 x 表示路径搜索/通过,不能照搬为“执行目录中的所有程序”;具体访问还要核每级路径与目标权限。访问矩阵按用户/域与对象列权限;ACL 从对象角度列谁能做什么,能力表从主体角度列它能访问哪些对象。口令、加密与权限检查可以协作,不能互相替代。使用文件前检查访问权限与合法位置,回到上面的地址或索引公式时也同样先查条件。
2.3.5 协议约定通信,软件实现约定
浏览器和服务器能交换数据,是因为双方遵循约定的格式、动作与顺序。语法约定数据/控制信息格式,语义约定动作与响应含义,时序约定事件顺序与速率协调。协议规范、协议栈实现、应用调用接口分别是规则、实现和使用入口。HTTP是规则体系,具体服务器与浏览器实现它;LAN/WAN/无线/移动是使用环境或协议家族的讨论范围,不能都当成单个同层协议名。
本例经 TCP 传预约请求,可靠有序字节交付不等于预约已经提交数据库。连接中断时,服务端可能尚未处理,也可能已提交但回复没到;应用应按业务标识查询结果、设计幂等重试,不能仅凭网络错误推回滚。TCP/IP协议族与地址/端口、设备、封装、DNS/DHCP等在2.5继续,不在此另算CIDR或链路时延。
2.3.6 中间件协调已有系统之间的共同问题
业务程序要接多种数据库和通知服务,若每套应用都独自处理跨平台通信、会话、事务与认证,重复工作会增多。中间件提供可复用接口与服务,屏蔽一部分底层差异。教材把它放在操作系统、网络、数据库之上,应用之下;这是职责层示意,真实部署可能是库、同机服务或独立服务器,也不要求所有中间件都同时依赖数据库。
| 按职责列的教材八类 | 它主要处理什么 |
|---|---|
| 通信处理/消息 | 应用之间传递消息,常用于异步协作。 |
| 事务处理/交易 | 协调参与者、事务执行与恢复,可结合调度和负载管理。 |
| 数据存取管理 | 跨数据格式或数据源提供访问、转换等服务。 |
| Web服务器 | 承载Web交互及相关运行服务。 |
| 安全 | 认证、授权、加密等服务;安全风险来源不只有OS。 |
| 跨平台和架构 | 支持不同平台、语言或构件的协作。 |
| 专用平台 | 把领域参考模式、构件库及运行支撑组合起来。 |
| 网络 | 网络管理、接入、测试等支撑。 |

预约成功后发短信,消息队列让业务与通知时间解耦,接收方不必在投递瞬间在线。但可靠性仍依赖持久化、生产确认、消费者确认/重试、监控以及幂等策略;队列满也可能背压或拒绝。数据库已提交而投递失败仍是需要处理的一段,不能只画“事务提交→消息”就宣布两者原子。教材 IBM MQSeries 是消息例,BEA Tuxedo 是交易例,历史名称保留为考试定位;“永不停机”“绝不丢失”要改读为目标,并核实际配置与故障条件。
MQSeries的教材资源是消息与队列;Tuxedo例还涉及监视恢复、交易协调与负载调度,职责可以交叠。已学 J2EE 历史题中,Web容器管理 Servlet/JSP,EJB容器管理企业Bean并提供相应服务。原生 Tomcat 的角色是 Servlet 容器;能通过库访问远端EJB不等于自身成为EJB容器。加入其它实现后组合的能力另论。Apache Tomcat 官方FAQ明确区分了这个职责。中间件有助于移植和复用,但接口、配置、数据模型与版本仍需适配。
2.3.7 构件靠契约协作,容器提供运行服务
把机位资格检查做成可复用构件,其外部调用明确接口,不直接改它的内部实现。构件自包容、可复用,可交付为源代码或二进制等形式;自包容不表示没有外部依赖。提供接口告诉别人能调用什么,需要接口告诉组装者必须提供什么,约束、版本及部署条件也要核对。不要把“构件”一词推成必然无状态,接口可约定状态和生命周期。
教材组装模型为设计构件组装→建立构件库→构建应用软件→测试与发布。需求确定后先设计构件关系,再开发、复用或采购;能并行开发不代表任意拼装就正确。复用和扩展方便,但设计、学习和适配有成本,性能可能有取舍,第三方质量还需验证。测试需覆盖组合后的契约,不只看每个构件独自成功。

CORBA(公共对象请求代理体系结构)教材分 ORB、公共对象服务、公共设施三层:通信基础、命名/事务/安全等通用服务、更接近业务协作的设施。调用链内再区分角色:ORB传递/分派请求;POA(便携式对象适配器)按策略定位和激活实现;Servant真正执行对象操作;接口仓库保存接口描述。一个对象与Servant的对应并非永远一对一。OMG ORB Basics说明了这些职责与策略,问实现适配时不能只用“ORB软总线”替换答案。
CCM(CORBA构件模型)的三项是抽象构件模型、构件容器结构、配置与打包规范,分别描述结构/互操作、运行管理及交付配置。它们是规范的不同内容,不是每次请求先后经过的三步。
J2EE是历史企业Java平台规范。JavaBean是遵循约定的可复用Java组件,不只用于浏览器;EJB是企业Bean的构件与容器规范。历史J2EE 1.4/EJB 2.x含会话Bean、实体Bean与消息驱动Bean;会话Bean可分有状态/无状态,实体Bean表达持久数据,与会话Bean都可涉及事务,不能写成“只有实体处理事务”。容器可提供安全、事务、命名、生命周期等服务。今天的平台与持久化规范演化不能反过来改旧题版本口径。J2EE 1.4 Containers、Session Bean、Entity Bean供核历史边界。
DNA 2000是教材的微软历史分布计算架构,ASP、COM/DCOM/COM+、事务及集群等在其中提供协作支撑。COM是构件对象模型,DCOM扩展分布式调用,COM+整合相应运行服务。CORBA、J2EE、DNA是标准/架构族;容器、协议、产品和Bean类别需各自回答题目的问题,不能把名称排成一个互斥列表。
2.3.8 应用软件把这些能力组织成用户任务
应用直接服务任务。教材通用软件包括文字处理、电子表格、图形图像、媒体播放、网络通信、演示、信息检索、个人信息管理和游戏;浏览器也是本节常见应用例。通用/专用按适用范围分,个人/企业按用户分,文字/图像/音视频按功能分,一款软件可以同时满足多个描述。定制常有开发成本,但不能据类别断言所有专用软件售价都更高。
教材部分行文把通用/定制并列,后面又用“专用”标题;映射教材术语时应分清:定制是开发取得方式,专用是用途范围。机构也能买专用商品包,通用软件也可被定制扩展,两轴并非一一对应。
学生看到“预约成功”,下一步应明确这个提示承诺的结果:数据已提交,还是仅请求已受理?若门禁未开,沿请求标识核对接入、业务提交、消息处理、设备终态的实际证据。一个TCP确认不能证明数据库提交,一个消费确认也不能证明物理门已开;单条日志与“查无某行”不足以排他判定根因。协议、中间件与数据库各提供一段能力,应用设计和验证把它们组成完整任务。
再回看软件体系:分类先找依据,调用先找接口,等待先找资源,计算先冻结条件。预约的业务规则由应用决定,OS调度资源,DBMS管理数据,文件系统映射名字和块,中间件组织跨系统协作,构件按契约被复用。接下来讨论嵌入式装置时,还要增加资源受限、时限和失效后果这些条件。