计算机

发布于 2025年10月22日 03:11:40 (武汉时间)

计算机

1.计算机网络

1.1 IP地址与子网掩码

IP 地址(以 IPv4 为例)由 32 位组成。
通过 子网掩码(Subnet Mask) 来划分这 32 位:

  • 子网掩码中为 1 的位 → 网络位
  • 子网掩码中为 0 的位 → 主机位

✅ 网络位:标识所属网络
✅ 主机位:标识该网络中的具体设备

下面给出 从头到尾 的完整计算步骤,帮助你理解为什么

  • 最小可分配地址是 168.16.80.1
  • 最大可分配地址是 168.16.95.254

1️⃣ 把 IP 地址和子网前缀写成二进制

项目 十进制 二进制(8 位)
主机 IP 第1段 168 10101000
主机 IP 第2段 16 00010000
主机 IP 第3段 84 01010100
主机 IP 第4段 24 00011000

所以完整的 32 位二进制表示为

10101000 . 00010000 . 01010100 . 00011000

2️⃣ 依据前缀 /20 求子网掩码

/20 表示 前 20 位是网络位,其余 12 位是主机位。

  • 前 20 位全 1 → 11111111.11111111.11110000.00000000
  • 换算成十进制:255.255.240.0
255   . 255   . 240   .   0
11111111 .11111111 .11110000 .00000000

3️⃣ 计算 网络地址(Network ID)

网络地址 = 主机 IP 与子网掩码的 按位与(AND)运算。

IP:   10101000 00010000 01010100 00011000
MASK: 11111111 11111111 11110000 00000000
------------------------------------------------
AND:  10101000 00010000 01010000 00000000

把二进制再转回十进制:

  • 第1段:10101000 → 168
  • 第2段:00010000 → 16
  • 第3段:01010000 → 80
  • 第4段:00000000 → 0

网络地址 = 168.16.80.0


4️⃣ 计算 广播地址(Broadcast)

广播地址 = 网络地址的 主机位全部置 1(即把子网掩码的主机位取反后 OR 网络地址)。

子网掩码的主机位(12 位)全为 0 → 取反后全为 1:

子网掩码: 11111111 11111111 11110000 00000000
主机位取反: 00000000 00000000 00001111 11111111

把它 OR 到网络地址:

网络地址: 10101000 00010000 01010000 00000000
取反后:   00000000 00000000 00001111 11111111
------------------------------------------------
广播地址:10101000 00010000 01011111 11111111

转回十进制:

  • 第1段:10101000 → 168
  • 第2段:00010000 → 16
  • 第3段:01011111 → 95
  • 第4段:11111111 → 255

广播地址 = 168.16.95.255


5️⃣ 确定可分配的主机范围

  • 网络地址本身不可分配给主机(它标识子网本身)。
  • 广播地址也不可分配(用于子网的广播)。

因此:

项目 地址
最小可分配地址 网络地址 + 1 → 168.16.80.1
最大可分配地址 广播地址 - 1 → 168.16.95.254

6️⃣ 还有哪些有用的衍生信息?

项目 计算方法 结果
子网掩码 /20 → 2^(32‑20)‑1 = 0xFFF0 0000 255.255.240.0
主机位数 32‑20 = 12 12 位
单个子网可用主机数 2^12‑2 = 4094 4094 台主机
子网的地址块大小 2^12 = 4096 个 IP 从 168.16.80.0 到 168.16.95.255

7️⃣ 小结(一步步复盘)

  1. 把 IP 与掩码写成二进制
  2. 网络地址 = IP AND 掩码。
  3. 广播地址 = 网络地址 OR (掩码取反)。
  4. 可用主机范围 = (网络地址+1) ~ (广播地址‑1)。

按照以上步骤,你可以对任何 IP/prefix(例如 10.0.5.12/22172.16.3.4/26)快速算出它所在子网的最小/最大可分配地址。

如果还有其他子网划分、VLSM、CIDR 之类的问题,随时提问!祝你玩转 IP 地址!

2. 集群/冗余模式

1️⃣ 基本的 双机 冗余模型

模型 结构图 工作方式(核心) 优点 缺点 / 限制 典型场景
双机热备(Active‑Standby / 主备) (也叫 双机互备双机互为备份 Active‑Standby - 主机 A 正常提供业务。
- 备机 B 实时同步状态(心跳、磁盘镜像、心跳链路)。
- A 故障 → B 自动“接管”,切换时间通常在 秒级(软切)或 毫秒级(硬切,使用共享磁盘)。
- 实现相对简单。
- 故障切换快速。
- 同步数据保证业务一致性。
- 只有 一台主机在工作,资源利用率 ≤ 50%。 - 备机需保持 实时同步,网络/磁盘同步带宽要求高。 - 数据库主备(MySQL 主从、Oracle Data Guard)。
- 防火墙/负载均衡器的 HA(F5、Keepalived)。
双机双工(Active‑Active / 双活) Active‑Active - 两台机器 同时 对外提供业务。
- 业务请求根据 负载均衡(IP Hash、Round‑Robin、权重)分配。
- 需要 共享存储(SAN、GPFS)或 数据复制(同步/异步)确保数据一致。
- 资源利用率 接近 100%。 - 可实现 负载均衡 + 高可用 - 数据冲突/一致性控制复杂(需要分布式锁、双写冲突解决)。 - 对共享存储或分布式文件系统依赖大。 - 大型 Web / 应用服务器集群(Tomcat、WebLogic 双活)。
- 数据库双活(Oracle RAC、MySQL Group Replication、Galera Cluster)。
双机互备(Active‑Standby + 互为主备) 同 “双机热备”。 与双机热备相同,只是把 “热备机” 也称为 “互备”。 同双机热备。 同双机热备。 同双机热备。
双机集群(Cluster) 常指 2‑NN+M架构,下面会细化。 - 根据实际需求可以是 Active‑StandbyActive‑Active共享磁盘/共享存储、**共享无磁盘(shared‑nothing)**等多种组合。 - 统一的管理平台(如 Pacemaker、Corosync、Kubernetes、Hadoop YARN 等)。 - 需要统一的 集群调度心跳机制。

1. 双机热备(Active-Standby)

“一个柜员上班,一个柜员在旁边坐着等”

  • 主机(Active):柜员 A 正在为客户办理业务。
  • 备机(Standby):柜员 B 坐在旁边,眼睛盯着 A 的操作,实时记下每一步(数据同步),但不接待客户
  • 故障时:A 突然晕倒 → B 立刻接手,继续服务,客户几乎无感。

✅ 优点:切换快,数据一致
❌ 缺点:B 平时“吃空饷”,资源浪费

💡 典型应用:数据库主备(如 MySQL 主从热备)、核心交易系统

2. 双机互备(Mutual Standby)

“两个柜员,各自负责不同窗口,但能互相顶班”

  • 柜员 A 负责 对公业务,柜员 B 负责 对私业务
  • 同时,A 也备份 B 的业务数据,B 也备份 A 的
  • 如果 A 挂了 → B 临时接管对公业务(虽然忙一点,但能顶上)。

✅ 优点:资源利用率高(两人都干活)
⚠️ 注意:切换后单机压力变大

💡 典型应用:两台服务器分别跑不同服务(如 Web + DB),彼此互为备份

3. 双机双工(Active-Active)

“两个柜员同时接待同一批客户,分工协作”

  • 客户来办业务,系统自动分配给 A 或 B。
  • A 和 B 同时处理业务,比如 A 处理奇数号客户,B 处理偶数号。
  • 数据实时同步,确保两边状态一致。
  • 如果 A 挂了 → 所有客户自动转给 B,服务不中断。

✅ 优点:性能翻倍 + 高可用
❌ 挑战:需解决数据冲突(比如两人同时改同一账户)

💡 典型应用:负载均衡 Web 服务器、分布式数据库(如 Oracle RAC)

1. 什么是信号量(Semaphore)

信号量是一种用于 同步互斥 的计数器,它只能通过两条原子操作来改变其值:

操作 名称(常见) 含义 伪代码
P waitdownacquire 计数器‑‑;若计数器<0,则将当前进程阻塞 while (S == 0) block; S--
V signaluprelease 计数器++;若有进程在阻塞队列中,则唤醒其中一个 S++; if (blocked_queue not empty) wake_one();
  • 原子性:在一个CPU时钟周期内完成,保证多个进程并发时不会出现竞争条件。
  • 不可让进程自行修改计数器,只能通过 PV 两个系统调用。

2. 信号量的种类

类型 说明 适用场景
二值信号量(Binary Semaphore) 计数器只能取 0 或 1,等价于 互斥锁(mutex) 保护临界区、单一资源的互斥访问。
计数信号量(Counting Semaphore) 计数器可以是任意非负整数,用来表示 资源的数量 控制多实例资源(如池化的连接、打印机等)。
系统信号量 由操作系统内核管理,常用于进程间同步。 多进程共享硬件、文件等。
用户信号量 由用户空间库实现,功能同系统信号量,但不必进入内核。 轻量级线程(如 POSIX threads)之间的同步。

3. 计数信号量的计算方法(常见题型)

3.1 基本公式

变量 含义
N0 初始值(资源总数)
S 当前值(信号量计数)
Avail 当前可用资源数 = S(若 S ≥ 0
Wait 等待该资源的进程数 = max(0, N0 - (S + 已分配资源数)),在简化模型中常写作 Wait = max(0, N0 - (S + 已占用资源数)) 或直接 Wait = max(0, -S)(负值模型)。

4.2 常见题目求解步骤

  1. 阅读题目,找出初始值 N0当前信号量值 S
  2. 若题目只给出S(且S ≥ 0),则
    • 可用资源数 = S
    • 等待进程数 = 0(因为 S 为正,没有进程被阻塞)。
  3. 若题目给出S为负(或说明有阻塞进程),则
    • 可用资源数 = 0(资源已全部被占用)。
    • 等待进程数 = |S|(即 -S)。
  4. 若要求已分配/已占用资源数,可以利用 已占用 = N0 - Avail - Wait(或 N0 - SS ≥ 0Wait = 0)。

4.3 示例

题目:某资源的计数信号量 S 初始值为 8,当前值为 3。求可用资源数和等待该资源的进程数。

  • Avail = S = 3(还有 3 个资源可用)。
  • S 为正,说明没有进程在阻塞队列中 ⇒ Wait = 0

题目:某资源的计数信号量采用负值模型,初始值为 5,当前值为 -2。求可用资源数和等待该资源的进程数。

  • Avail = max(0, S) = 0(已无可用资源)。
  • Wait = -S = 2(有 2 个进程在等待)。
← 返回首页