{
  "version": 1,
  "generated_at": "2026-07-04T05:22:33.089143+00:00",
  "total": 2386,
  "stats": {
    "操作系统": 650,
    "数据结构": 630,
    "计算机组成原理": 577,
    "计算机网络": 529
  },
  "questions": [
    {
      "id": "操作系统_1-1-4_11",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.1.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2010 统考真题】下列选项中，操作系统提供给应用程序的接口是（）。",
      "options": {
        "A": "系统调用",
        "B": "中断",
        "C": "库函数",
        "D": "原语"
      },
      "answer": [
        "A"
      ],
      "explanation": "操作系统接口主要有命令接口和程序接口（也称系统调用）。库函数是高级语言中提供的与系统调用对应的函数（也有些库函数与系统调用无关），目的是隐藏“访管”指令的细节，使系统调用更为方便、抽象。但是，库函数属于用户程序而非系统调用，是系统调用的上层。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_04",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "操作系统的基本类型主要有（）。",
      "options": {
        "A": "批处理操作系统、分时操作系统和多任务系统",
        "B": "批处理操作系统、分时操作系统和实时操作系统",
        "C": "单用户系统、多用户系统和批处理操作系统",
        "D": "实时操作系统、分时操作系统和多用户系统"
      },
      "answer": [
        "B"
      ],
      "explanation": "操作系统的基本类型主要有批处理操作系统、分时操作系统和实时操作系统。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_05",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "实时操作系统必须在（）内处理来自外部的事件。",
      "options": {
        "A": "一个机器周期",
        "B": "被控制对象规定时间",
        "C": "周转时间",
        "D": "时间片"
      },
      "answer": [
        "B"
      ],
      "explanation": "实时操作系统要求能实时处理外部事件，即在规定的时间内完成对外部事件的处理。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_06",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "（）不是设计实时操作系统的主要追求目标。",
      "options": {
        "A": "安全可靠",
        "B": "资源利用率",
        "C": "及时响应",
        "D": "快速处理"
      },
      "answer": [
        "B"
      ],
      "explanation": "实时性和可靠性是实时操作系统最重要的两个目标，而安全可靠体现了可靠性，快速处理和及时响应体现了实时性。资源利用率不是实时操作系统的主要目标，即为了保证快速处理高优先级任务，允许“浪费”一些系统资源。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_07",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列（）应用工作最好采用实时操作系统平台。 I. 航空订票 II. 办公自动化 III. 机床控制 IV. AutoCAD V. 工资管理系统 VI. 股票交易系统",
      "options": {
        "A": "I、II 和 III",
        "B": "I、III 和 IV",
        "C": "I、IV 和 V",
        "D": "I、III 和 VI"
      },
      "answer": [
        "D"
      ],
      "explanation": "实时操作系统主要应用在需要对外界输入立即做出反应的场合，不能有拖延，否则会产生严重后果。本题的选项中，航空订票系统需要实时处理票务，因为票额数据库的数量直接反映了航班的可订机位。机床控制也要实时，不然会出差错。股票交易行情随时在变，若不能实时交易会出现时间差，使交易出现偏差。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_08",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列关于分时操作系统的叙述中，错误的是（）。",
      "options": {
        "A": "分时操作系统主要用于批处理作业",
        "B": "分时操作系统中每个任务依次轮流使用时间片",
        "C": "分时操作系统的响应时间好",
        "D": "分时操作系统是一种多用户操作系统"
      },
      "answer": [
        "A"
      ],
      "explanation": "分时操作系统主要用于交互式作业而非批处理作业。分时操作系统中每个任务依次轮流使用时间片，这是一种公平的 CPU 分配策略。分时操作系统的响应时间好，因为分时操作系统采用了时间片轮转法来调度进程，可以使得每个任务在较短的时间内得到响应，提高用户的满意度。分时操作系统是一种多用户操作系统，因为分时操作系统可以支持多个终端同时连接到同一台计算机上。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_09",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "分时操作系统的一个重要性能是系统的响应时间，对操作系统的（）因素进行改进有利于改善系统的响应时间。",
      "options": {
        "A": "加大时间片",
        "B": "采用静态页式管理",
        "C": "优先级 + 非抢占式调度算法",
        "D": "代码可重入"
      },
      "answer": [
        "C"
      ],
      "explanation": "采用优先级+非抢占式调度算法，既可使重要的作业/进程通过高优先级尽快获得系统响应，又可保证次要的作业/进程在非抢占式调度下不会迟迟得不到系统响应，这样有利于改善系统的响应时间。加大时间片会延迟系统响应时间；静态页式管理和代码可重入与系统响应时间无关。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_10",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "分时操作系统追求的目标是（）。",
      "options": {
        "A": "充分利用 I/O 设备",
        "B": "比较快速响应用户",
        "C": "提高系统吞吐率",
        "D": "充分利用内存"
      },
      "answer": [
        "B"
      ],
      "explanation": "要求快速响应用户是导致分时操作系统出现的重要原因。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_11",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "在分时操作系统中，时间片一定时，（），响应时间越长。",
      "options": {
        "A": "内存越多",
        "B": "内存越少",
        "C": "用户数越多",
        "D": "用户数越少"
      },
      "answer": [
        "C"
      ],
      "explanation": "在分时操作系统中，当时间片固定时，用户数越多，每个用户分到的时间片就越少，响应时间就相应变长。注意，分时操作系统的响应时间 T 可表示为 $T \\approx QN$ ，其中 Q 是时间片，而 N 是用户数。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_12",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "在分时操作系统中，为使多个进程能够及时与系统交互，关键的问题是能在短时间内，使所有就绪进程都能运行。当就绪进程数为 100 时，为保证响应时间不超过 2s，此时的时间片最大应为（）。",
      "options": {
        "A": "10ms",
        "B": "20ms",
        "C": "50ms",
        "D": "100ms"
      },
      "answer": [
        "B"
      ],
      "explanation": "响应时间不超过 2s，即在 2s 内必须响应所有进程。所以时间片最大为 2s/100 = 20ms。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_13",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "multiple_choice",
      "question": "操作系统有多种类型。允许多个用户以交互的方式使用计算机的操作系统，称为（）；允许多个用户将若干作业提交给计算机系统集中处理的操作系统，称为（）；在（）的控制下，计算机系统能及时处理由过程控制反馈的数据，并及时做出响应；在 IBM-PC 中，操作系统称为（）。",
      "options": {
        "A": "批处理系统",
        "B": "分时操作系统",
        "C": "实时操作系统",
        "D": "微型计算机操作系统"
      },
      "answer": [
        "B",
        "A",
        "C",
        "D"
      ],
      "explanation": "这是操作系统发展过程中的几种主要类型。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_14",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下列各种系统中，（）可以使多个进程并行执行。",
      "options": {
        "A": "分时操作系统",
        "B": "多处理器系统",
        "C": "批处理系统",
        "D": "实时操作系统"
      },
      "answer": [
        "B"
      ],
      "explanation": "多个进程并发执行的系统是指在一段时间内宏观上有多个进程同时运行，但在单处理器系统中，每个时刻只能有一道程序执行，所以微观上这些程序只能分时地交替执行。只有多处理器系统才能使多个进程并行执行，每个处理器上分别运行不同的进程。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_15",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "下列关于操作系统的叙述中，正确的是（）。",
      "options": {
        "A": "批处理操作系统必须在响应时间内处理完一个任务",
        "B": "实时操作系统须在规定时间内处理完来自外部的事件",
        "C": "分时操作系统必须在周转时间内处理完来自外部的事件",
        "D": "分时操作系统必须在调度时间内处理完来自外部的事件"
      },
      "answer": [
        "B"
      ],
      "explanation": "实时操作系统要求能在规定时间内完成特定的功能。批处理操作系统不需要在响应时间内处理完一个任务。分时操作系统不要求在周转时间或调度时间内处理完外部事件。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_16",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "引入多道程序设计技术的前提条件之一是系统具有（）。",
      "options": {
        "A": "多个 CPU",
        "B": "多个终端",
        "C": "中断功能",
        "D": "分时功能"
      },
      "answer": [
        "C"
      ],
      "explanation": "多道程序设计技术要求进程间能实现并发，需要实现进程调度以保证 CPU 的工作效率，而并发性的实现需要中断功能的支持。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_17",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2016 统考真题】下列关于批处理系统的叙述中，正确的是（）。 I. 批处理系统允许多个用户与计算机直接交互 II. 批处理系统分为单道批处理系统和多道批处理系统 III. 中断技术使得多道批处理系统的 I/O 设备可与 CPU 并行工作",
      "options": {
        "A": "仅 II、III",
        "B": "仅 II",
        "C": "仅 I、II",
        "D": "仅 I、III"
      },
      "answer": [
        "A"
      ],
      "explanation": "批处理系统中，作业执行时用户无法干预其运行，只能通过事先编制作业控制说明书来间接干预，缺少交互能力，说法 I 错误。批处理系统按发展历程又分为单道批处理系统、多道批处理系统，说法 II 正确。多道程序设计技术允许把多个程序同时装入内存，并允许它们在 CPU 中交替运行，共享系统中的各种硬/软件资源，当一道程序因 I/O 请求而暂停运行时，CPU 便立即转去运行另一道程序，即多道批处理系统的 I/O 设备可与 CPU 并行工作，这是借助中断技术实现的，说法 III 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_18",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2017统考真题】与单道程序系统相比，多道程序系统的优点是（）。 I. CPU 的利用率高 II. 系统开销小 III. 系统吞吐量大 IV. I/O 设备利用率高",
      "options": {
        "A": "仅 I、III",
        "B": "仅 I、IV",
        "C": "仅 II、III",
        "D": "仅 I、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "多道程序系统中总有一个作业在CPU上执行，因此提高了CPU的利用率、系统吞吐量和I/O设备利用率，说法I、III、IV正确。但是，系统要付出额外的开销来组织作业和切换作业，说法II错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_19",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2018 统考真题】下列关于多任务操作系统的叙述中，正确的是（）。 I. 具有并发和并行的特点 II. 需要实现对共享资源的保护 III. 需要运行在多 CPU 的硬件平台上",
      "options": {
        "A": "仅 I",
        "B": "仅 II",
        "C": "仅 I、II",
        "D": "I、II、III"
      },
      "answer": [
        "C"
      ],
      "explanation": "现代操作系统都是多任务的，允许用户把程序分为若干个任务，使它们并发执行。在单 CPU 中，这些任务并发执行，即宏观上并行执行，微观上分时地交替执行；在多 CPU 中，这些任务是真正的并行执行。此外，引入中断之后才出现了多任务操作系统，而中断方式的特点是 CPU 与外设并行工作，因此说法 I 正确。多个任务必须互斥地访问共享资源，为达到这一目标必须对共享资源进行必要的保护，说法 II 正确。多任务操作系统并不一定需要运行在多 CPU 的硬件上，单个 CPU 通过分时使用也能满足要求，说法 III 错误。综上所述，说法 I、II 正确，说法 III 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-2-7_20",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2022统考真题】下列关于多道程序系统的叙述中，不正确的是（）。",
      "options": {
        "A": "支持进程的并发执行",
        "B": "不必支持虚拟存储管理",
        "C": "需要实现对共享资源的管理",
        "D": "进程数越多，CPU 的利用率越高"
      },
      "answer": [
        "D"
      ],
      "explanation": "操作系统的基本特点：并发、共享、虚拟、异步，其中最基本、一定要实现的是并发和共享。早期的多道批处理系统会将所有进程的数据全部调入主存，再让多道程序并发执行，即使不支持虚拟存储管理，也能实现多道程序并发。进程多并不意味着 CPU 的利用率高，进程数量越多，进程之间的资源竞争越激烈，甚至可能因为资源竞争而出现死锁现象，导致 CPU 的利用率低。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_06",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在中断发生后，中断处理的程序属于（）。",
      "options": {
        "A": "用户程序",
        "B": "可能是用户程序，也可能是 OS 程序",
        "C": "操作系统程序",
        "D": "单独的程序，既不是用户程序也不是 OS 程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "中断处理程序是 OS 专门为处理中断事件而设计的程序。中断发生时，若被中断的是用户程序，则 CPU 将从用户态转入内核态，在内核态下进行中断的处理；若被中断的是低级中断，则 CPU 仍保持在内核态。被中断的程序可能是用户程序，但中断的处理程序一定是 OS 程序。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_07",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "CPU的状态分为用户态和内核态，从用户态转换到内核态的唯一途径是（）。",
      "options": {
        "A": "修改程序状态字指令",
        "B": "中断屏蔽",
        "C": "中断",
        "D": "中断处理程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "CPU 通过程序状态字寄存器中的某个位来标志当前的状态，但是修改程序状态字的指令本身就属于特权指令，不能在用户态下执行。当 CPU 执行到一条访管指令或陷阱指令时，会引起访管中断或陷阱中断，CPU 会保存断点和其他上下文环境，然后切换到内核态。也就是说，从用户态转换到内核态，不是通过指令来修改 CPU 的状态标志位的，而是由 CPU 在中断时自动完成的。中断处理程序一般在内核态执行，因此无法完成 “转换成内核态” 这一任务。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_08",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列指令中，可以在用户态执行的是（）。 I. 置时钟指令 II. 停机指令 III. 存数指令 IV. 寄存器清零指令",
      "options": {
        "A": "I、IV",
        "B": "III、IV",
        "C": "II、III、IV",
        "D": "II、III"
      },
      "answer": [
        "B"
      ],
      "explanation": "直接管理系统资源的指令（如设置时钟、启动/关闭硬件设备、切换进程、设置中断等）、系统状态修改指令（如修改中断向量表、切换 CPU 的运行模式等）、系统控制指令（如停机指令、重启指令等），都属于特权指令，必须在内核态执行。普通的数据处理指令、流程控制指令、读操作指令都不会影响系统的安全和整体状态，可以在用户态执行。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_09",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列指令中，必须在内核态执行的是（）。 I. 陷入指令 II. 系统调用指令 III. 开中断指令 IV. 转移指令 V. 中断屏蔽字设置指令",
      "options": {
        "A": "I、",
        "B": "II、III",
        "C": "II、III、V",
        "D": "I、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "用户程序通过陷入指令让 CPU 模式从用户态转入内核态，因此在用户态执行。虽然调用的发生可能在用户态（注意区分调用和执行），但是系统调用指令必然在内核态执行。开中断指令和关中断指令都属于特权指令，能够影响到系统的运行，必须在内核态执行。无论是分支跳转指令还是无条件转移指令，都属于普通的程序流程控制指令，在用户态执行。中断屏蔽字寄存器属于中断控制器的一部分，而中断控制器是属于 I/O 接口的，因此设置中断屏蔽字寄存器的操作就相当于对 I/O 接口中的 I/O 端口进行设置，属于 I/O 指令，必须在内核态执行。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_10",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列程序中，必须在内核态执行的是（）。 I. 磁盘调度程序 II. 中断处理程序 III. 设备驱动程序 IV. 操作系统初始化程序",
      "options": {
        "A": "I、",
        "B": "I、II、III",
        "C": "I、II、IV",
        "D": "II、III"
      },
      "answer": [
        "A"
      ],
      "explanation": "磁盘调度程序控制磁头的运行，和硬件密切相关，运行在内核态。中断处理程序在中断发生后由操作系统内核调用，运行在内核态。设备驱动程序用于和硬件设备进行通信，运行在内核态。操作系统初始化程序负责初始化系统资源、设置环境、加载驱动程序等，运行在内核态。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_11",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "当 CPU 处于内核态时，它可以执行的指令是（）。",
      "options": {
        "A": "只有特权指令",
        "B": "只有非特权指令",
        "C": "只有访管指令",
        "D": "除访管指令之外的全部指令"
      },
      "answer": [
        "D"
      ],
      "explanation": "访管指令（Trap 指令）是一条在用户态下执行的指令。用户程序在用户态下要请求操作系统内核提供服务，就有意识地使用访管指令来引起访管中断，从而将控制权交给内核。在内核态，CPU 可以执行除访管指令之外的任何指令。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_12",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "下列中断事件中，能引起外中断的事件是（）。 I. 时钟中断 II. 访管中断 III. 缺页中断",
      "options": {
        "A": "I",
        "B": "III",
        "C": "I 和 II",
        "D": "II 和 III"
      },
      "answer": [
        "A"
      ],
      "explanation": "外中断是由 CPU 外部的事件引起的，如 I/O 设备的请求、时钟信号等。内部中断（也称异常）是由 CPU 内部的事件引起的，如访管指令（Trap 指令）、缺页异常等。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_13",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "下列关于库函数和系统调用的说法中，不正确的是（）。",
      "options": {
        "A": "库函数运行在用户态，系统调用运行在内核态",
        "B": "使用库函数时开销较小，使用系统调用时开销较大",
        "C": "库函数不方便被替换，系统调用通常很方便被替换",
        "D": "库函数可以很方便地调试，而系统调用很麻烦"
      },
      "answer": [
        "C"
      ],
      "explanation": "库函数是指被封装在库文件中的可复用的代码块，运行在用户态；而系统调用是面向硬件的，运行在内核态，是操作系统为用户提供的接口。库函数可以很方便地调试，而系统调用很麻烦，因为它运行在内核态。库函数可以很方便地替换，而系统调用通常不可替换。库函数属于过程调用，开销较小；系统调用需要在用户空间和内核空间中进行上下文切换，开销较大。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_14",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下列关于系统调用和一般过程调用的说法中，正确的是（）。",
      "options": {
        "A": "两者都需要将当前 CPU 中的 PSW 和 PC 的值压栈，以保存现场信息",
        "B": "系统调用的被调用过程一定运行在内核态",
        "C": "一般过程调用的被调用过程一定运行在用户态",
        "D": "两者的调用过程与被调用过程一定都运行在用户态"
      },
      "answer": [
        "B"
      ],
      "explanation": "系统调用需要保存 PSW 和 PC 的值，一般过程调用只需保存 PC 的值，选项 A 错误。系统调用的被调用过程是操作系统中的程序，是系统级程序，必须运行在内核态，选项 B 正确。一般过程调用的被调用程序与调用程序运行在同一个状态，可能是系统态，也可能是用户态，选项 C 和 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_15",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "用户在程序中试图读某文件的第 100 个逻辑块，使用操作系统提供的（）接口。",
      "options": {
        "A": "系统调用",
        "B": "键盘命令",
        "C": "原语",
        "D": "图形用户接口"
      },
      "answer": [
        "A"
      ],
      "explanation": "操作系统通过系统调用向用户程序提供服务，文件 I/O 需要在内核态运行。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_16",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2011 统考真题】下列选项中，在用户态执行的是（）。",
      "options": {
        "A": "命令解释程序",
        "B": "缺页处理程序",
        "C": "进程调度程序",
        "D": "时钟中断处理程序"
      },
      "answer": [
        "A"
      ],
      "explanation": "缺页处理和时钟中断都属于中断，在内核态执行；进程调度是操作系统内核进程，无须用户干预，在内核态执行；命令解释程序属于命令接口，是面对用户的，在用户态执行。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_17",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2012 统考真题】下列选项中，不可能在用户态发生的事件是（）。",
      "options": {
        "A": "系统调用",
        "B": "外中断",
        "C": "进程切换",
        "D": "缺页"
      },
      "answer": [
        "C"
      ],
      "explanation": "本题的关键是对 “在用户态发生”（注意与 “在用户态执行” 区分）的理解。对于选项 A，系统调用是操作系统提供给用户程序的接口，系统调用发生在用户态，被调用程序在内核态下执行。对于选项 B，外中断是用户态到内核态的 “门”，也发生在用户态，在内核态完成中断处理过程。对于选项 C，进程切换属于系统调用执行过程中的事件，只能发生在内核态；对于选项 D，缺页产生后，在用户态发生缺页中断，然后进入内核态执行缺页中断服务程序。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_18",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2012统考真题】中断处理和子程序调用都需要压栈，以便保护现场，中断处理一定会保存而子程序调用不需要保存其内容的是（）。",
      "options": {
        "A": "程序计数器",
        "B": "程序状态字寄存器",
        "C": "通用数据寄存器",
        "D": "通用地址寄存器"
      },
      "answer": [
        "B"
      ],
      "explanation": "子程序调用不改变程序的状态，因为子程序调用是编译器可控的流程，而中断不是。下面以程序 if(a==b)为例加以说明。该程序通常包含一条测试指令，以及一条根据标志位决定是否需要跳转来调用子程序的指令。编译器不在这两条指令中间插入任何子程序调用代码，因此标志位不变，但中断随时可能发生，导致标志位改变。具体地说，执行 if(a==b)时，会进行 a-b 操作，并生成相应的标志位，进而根据标志位来判断是否发生跳转。假设刚好在生成相应的标志位后发生了中断，若不保存 PSW 的内容，则后续根据标志位来进行跳转的流程就可能发生错误。但是，若进行了子程序调用，则说明已经根据 a-b 的标志位进行了跳转，此时 PSW 的内容已无意义而无须保存。综上所述，中断处理和子程序调用都有可能使 PSW 的内容发生变化，但中断处理程序执行完返回后，可能需要用到 PSW 原来的内容，子程序执行完返回后，一定不需要用到 PSW 原来的内容，因此选择选项 B。选项 A 都会保存，选项 C 和 D 不一定会保存。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_19",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2013统考真题】下列选项中，会导致用户进程从用户态切换到内核态的操作是（）。 I. 整数除以零 II. sin()函数调用 III. read 系统调用",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III",
        "C": "仅 II、III",
        "D": "I、II 和 III"
      },
      "answer": [
        "B"
      ],
      "explanation": "整数除以零是非法操作，因此 CPU 会检测到异常，并切换到内核态进行异常处理。 $\\sin()$ 函数是 C 语言中的普通运算类库函数，且不会引发系统调用，在用户态执行。在用户态触发 read 系统调用时，会通过 Trap 指令陷入内核态，由 CPU 执行相应的系统调用服务例程。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_20",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2014 统考真题】下列指令中，不能在用户态执行的是（）。",
      "options": {
        "A": "Trap 指令",
        "B": "跳转指令",
        "C": "压栈指令",
        "D": "关中断指令"
      },
      "answer": [
        "D"
      ],
      "explanation": "Trap 指令、跳转指令和压栈指令均可以在用户态执行，其中 Trap 指令负责由用户态转换为内核态。关中断指令为特权指令，必须在内核态才能执行。注意，在操作系统中，关中断指令是权限非常大的指令，因为中断是现代操作系统正常运行的核心保障之一，能把它关掉，说明执行这条指令的一定是权限非常大的机构（内核态）。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_21",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2015 统考真题】处理外中断时，应该由操作系统保存的是（）。",
      "options": {
        "A": "程序计数器（PC）的内容",
        "B": "通用寄存器的内容",
        "C": "快表（TLB）中的内容",
        "D": "Cache 中的内容"
      },
      "answer": [
        "B"
      ],
      "explanation": "外中断处理过程，PC 值由中断隐指令自动保存，而通用寄存器内容由操作系统保存。快表（TLB）和 Cache 中的内容在外中断处理过程中通常无须保存，直接置有效位为 0 即可。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_22",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2015统考真题】假定下列指令已装入指令寄存器，则执行时不可能导致CPU从用户态变为内核态（系统态）的是（）。",
      "options": {
        "A": "DIV R0, R1 ; (R0)/(R1)→R0",
        "B": "INT n ; 产生软中断",
        "C": "NOT R0 ; 寄存器 R0 的内容取非",
        "D": "MOV R0, addr ; 把地址 addr 处的内存数据放入寄存器 R0"
      },
      "answer": [
        "C"
      ],
      "explanation": "部分指令可能出现异常，从而转到内核态。指令 A 有除零异常的可能。指令 B 为软中断指令，用于触发一个中断并跳转到相应的中断处理程序，n 表示中断向量号，使用软中断可以在用户态和内核态之间切换，以实现系统调用。指令 D 有缺页异常的可能。指令 C 不会发生异常。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_23",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2016 统考真题】异常是指令执行过程中在处理器内部发生的特殊事件，中断是来自处理器外部的请求事件。下列关于中断或异常情况的叙述中，错误的是（）。",
      "options": {
        "A": "“访存时缺页”属于中断",
        "B": "“整数除以零”属于异常",
        "C": "“DMA 传送结束” 属于中断",
        "D": "“存储保护错”属于异常"
      },
      "answer": [
        "A"
      ],
      "explanation": "中断是指来自 CPU 执行指令以外事件，如设备发出的 I/O 结束中断，表示设备输入/输出已完成，希望处理机能够向设备发出下一个输入/输出请求，同时让完成输入/输出后的程序继续运行。异常也称内中断，指源自 CPU 执行指令内部的事件。选项 A 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_24",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2017 统考真题】执行系统调用的过程包括如下主要操作: ① 返回用户态 ② 执行陷入（Trap）指令 ③ 传递系统调用参数 ④ 执行相应的服务程序 正确的执行顺序是（）。",
      "options": {
        "A": "②→③→①→④",
        "B": "②→④→③→①",
        "C": "③→②→④→①",
        "D": "③→④→②→①"
      },
      "answer": [
        "C"
      ],
      "explanation": "执行系统调用的过程：正在运行的进程先传递系统调用参数，然后由陷入（Trap）指令负责将 CPU 模式从用户态转换为内核态，并将返回地址压入堆栈以备后用，接下来 CPU 执行相应的内核态服务程序，最后返回用户态。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_25",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2018 统考真题】定时器产生时钟中断后，由时钟中断服务程序更新的部分内容是（）。 I. 内核中时钟变量的值 II. 当前进程占用 CPU 的时间 III. 当前进程在时间片内的剩余执行时间",
      "options": {
        "A": "仅 I、II",
        "B": "仅 II、III",
        "C": "仅 I、III",
        "D": "I、II、III"
      },
      "answer": [
        "D"
      ],
      "explanation": "时钟中断的主要工作是处理和时间有关的信息及决定是否执行调度程序。和时间有关的所有信息包括系统时间、进程的时间片、延时、使用 CPU 的时间、各种定时器。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_26",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2019 统考真题】下列关于系统调用的叙述中，正确的是（）。 I. 在执行系统调用服务程序的过程中，CPU 处于内核态 II. 操作系统通过提供系统调用避免用户程序直接访问外设 III. 不同的操作系统为应用程序提供了统一的系统调用接口 IV. 系统调用是操作系统内核为应用程序提供服务的接口",
      "options": {
        "A": "仅 I、IV",
        "B": "仅 II、III",
        "C": "仅 I、II、IV",
        "D": "仅 I、III、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "用户可以在用户态调用操作系统的服务，但执行具体的系统调用服务程序是处于内核态的，说法I正确；设备管理属于操作系统的职能之一，包括对输入/输出设备的分配、初始化、维护等，用户程序需要通过系统调用使用操作系统的设备管理服务，说法II正确；操作系统不同，底层逻辑、实现方式均不相同，为应用程序提供的系统调用接口也不同，说法III错误；系统调用是用户在程序中调用操作系统提供的子功能，说法IV正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_27",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2020 统考真题】下列与中断相关的操作中，由操作系统完成的是（）。 I. 保存被中断程序的中断点 II. 提供中断服务 III. 初始化中断向量表 IV. 保存中断屏蔽字",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、II、IV",
        "C": "仅 III、IV",
        "D": "仅 II、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "当CPU检测到中断信号后，由硬件自动保存被中断程序的断点[程序计数器（PC）和程序状态字寄存器（PSW）]，说法I错误。之后，硬件找到该中断信号对应的中断向量，中断向量指明中断服务程序入口地址（各个中断向量统一存放在中断向量表中，该表由操作系统初始化，说法III正确）。接下来开始执行中断服务程序，保存中断屏蔽字、保存各个通用寄存器的值，并提供与中断信号对应的中断服务，中断服务程序属于操作系统内核，说法II和IV正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_28",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2021 统考真题】下列指令中，只能在内核态执行的是（）。",
      "options": {
        "A": "Trap 指令",
        "B": "I/O 指令",
        "C": "数据传送指令",
        "D": "设置断点指令"
      },
      "answer": [
        "B"
      ],
      "explanation": "在内核态下，CPU 可执行任何指令，在用户态下 CPU 只能执行非特权指令，而特权指令只能在内核态下执行。常见的特权指令有：① 有关对 I/O 设备操作的指令；② 有关访问程序状态的指令；③ 存取特殊寄存器的指令；④ 其他指令。选项 A、C 和 D 都是提供给用户使用的指令，可以在用户态执行，只是可能使 CPU 从用户态切换到内核态。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_29",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2021统考真题】下列选项中，通过系统调用完成的操作是（）。",
      "options": {
        "A": "页置换",
        "B": "进程调度",
        "C": "创建新进程",
        "D": "生成随机整数"
      },
      "answer": [
        "C"
      ],
      "explanation": "系统调用是由用户进程发起的，请求操作系统的服务。对于选项 A，当内存中的空闲页框不够时，操作系统会将某些页面调出，并将要访问的页面调入，这个过程完全由操作系统完成，不涉及系统调用。对于选项 B，进程调度完全由操作系统完成，无法通过系统调用完成。对于选项 C，创建新进程可以通过系统调用来完成，如 Linux 中通过 fork 系统调用来创建子进程。对于选项 D，生成随机数是普通的函数调用，不涉及请求操作系统的服务，如 C 语言的 random() 函数。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_30",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2022 统考真题】下列关于 CPU 模式的叙述中，正确的是（）。",
      "options": {
        "A": "CPU 处于用户态时只能执行特权指令",
        "B": "CPU 处于内核态时只能执行特权指令",
        "C": "CPU 处于用户态时只能执行非特权指令",
        "D": "CPU 处于内核态时只能执行非特权指令"
      },
      "answer": [
        "C"
      ],
      "explanation": "CPU 在用户态时只能执行非特权指令，在内核态时可以执行特权指令和非特权指令。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_31",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2022统考真题】执行系统调用的过程涉及下列操作，其中由操作系统完成的是（）。 I. 保存断点和程序状态字 II. 保存通用寄存器的内容 III. 执行系统调用服务例程 IV. 将 CPU 模式改为内核态",
      "options": {
        "A": "仅 I、III",
        "B": "仅 II、III",
        "C": "仅 II、IV",
        "D": "仅 II、III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "发生系统调用时，CPU 通过执行软中断指令将 CPU 的运行状态从用户态切换到内核态，这个过程与中断和异常的响应过程相同，由硬件负责保存断点和程序状态字，并将 CPU 模式改为内核态。然后，执行操作系统内核的系统调用入口程序，该内核程序负责保存通用寄存器的内容，再调用执行特定的系统调用服务例程。综上，说法 I、IV 由硬件完成，说法 II、III 由操作系统完成。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_32",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2023统考真题】在操作系统内核中，中断向量表适合采用的数据结构是（）。",
      "options": {
        "A": "数组",
        "B": "队列",
        "C": "单向链表",
        "D": "双向链表"
      },
      "answer": [
        "A"
      ],
      "explanation": "本题考查了“计算机组成原理”的考点，且综合了“数据结构”的内容。中断向量表用于存放中断处理程序的入口地址，CPU通过查询得到中断类型号，然后据此计算可以得到对应中断服务程序的入口地址在中断向量表的位置，采用数组作为中断向量表的存储结构，可实现时间复杂度为 $O(1)$ 的快速访问，从而提高中断处理的效率。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-3-5_33",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.5",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2024统考真题】下列关于中断、异常和系统调用的叙述中，错误的是（）。",
      "options": {
        "A": "中断或异常发生时，CPU 处于内核态",
        "B": "每个系统调用都有对应的内核服务例程",
        "C": "中断处理程序开始执行时，CPU 处于内核态",
        "D": "系统添加新类型设备时，需要注册相应的中断服务例程"
      },
      "answer": [
        "A"
      ],
      "explanation": "当中断或异常发生时，CPU既可能处于内核态，又可能处于用户态，具体取决于当时CPU正在处理的任务，选项A错误。不同的系统调用对应不同的内核服务例程，选项B正确。在中断响应阶段，若CPU处于用户态，则需要切换到内核态，因此在中断处理阶段，CPU一定处于内核态，选项C正确。设备种类繁多，计算机不可能事先准备好所有设备对应的中断服务例程（实际上属于设备驱动程序），因此当系统添加新类型的设备时，需要注册相应的中断服务例程。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_05",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列说法中，（）不适合描述微内核操作系统。",
      "options": {
        "A": "内核足够小",
        "B": "功能分层设计",
        "C": "基于 C/S 模式",
        "D": "策略与机制分离"
      },
      "answer": [
        "B"
      ],
      "explanation": "功能分层设计是分层式 OS 的特点。通常可以从四个方面来描述微内核 OS: ① 内核足够小；② 基于客户/服务器模式；③ 应用 “机制与策略分离” 原理；④ 采用面向对象技术。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_06",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "对于以下五种服务，在采用微内核结构的操作系统中，（）不宜放在微内核中。 I. 进程间通信机制 II. 低级 I/O III. 低级进程管理和调度 IV. 中断和陷入处理 V. 文件系统服务",
      "options": {
        "A": "I、II 和 III",
        "B": "II 和 V",
        "C": "仅 V",
        "D": "IV 和 V"
      },
      "answer": [
        "C"
      ],
      "explanation": "进程（线程）之间的通信功能是微内核最频繁使用的功能，因此几乎所有微内核 OS 都将其放入微内核。低级 I/O 和硬件紧密相关，因此应放入微内核。低级进程管理和调度属于调度功能的机制部分，应将它放入微内核。微内核 OS 将与硬件紧密相关的一小部分放入微内核处理，此时微内核的主要功能是捕获所发生的中断和陷入事件，并进行中断响应处理，识别中断或陷入的事件后，再发送给相关的服务器处理，所以中断和陷入处理也应放入微内核。而文件系统服务是放在微内核外的文件服务器中实现的，所以仅选项 V 不宜放在微内核中。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_07",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "相对于传统操作系统结构，采用微内核结构设计和实现操作系统有诸多好处，下列（）是微内核结构的特点。 I. 使系统更高效 II. 添加系统服务时不必修改内核 III. 微内核结构没有单一内核稳定 IV. 使系统更可靠",
      "options": {
        "A": "I、III、IV",
        "B": "I、II、IV",
        "C": "II、IV",
        "D": "I、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "微内核结构需要频繁地在内核态和用户态之间进行切换，操作系统的执行开销相对偏大，那些移出内核的操作系统代码根据分层的原则被划分成若干服务程序，它们的执行相互独立，交互则都借助微内核进行通信，影响了系统的效率，因此说法I不是优势。因为内核的服务变少，且一般来说内核的服务越少内核越稳定，所以说法 III 错误。而说法 II、IV 正是微内核结构的优点。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_08",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列关于操作系统结构的说法中，正确的是（）。 I. 当前广泛使用的 Windows 操作系统，采用的是分层式 OS 结构 II. 模块化的 OS 结构设计的基本原则是，每一层都仅使用其底层所提供的功能和服务，这样就使系统的调试和验证都变得容易 III. 因为微内核结构能有效支持多处理机运行，所以非常适合于分布式系统环境 IV. 采用微内核结构设计和实现操作系统具有诸多好处，如添加系统服务时不必修改内核，使系统更高效。",
      "options": {
        "A": "I 和 II",
        "B": "I 和 III",
        "C": "III",
        "D": "III 和 IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "Windows 是融合了宏内核和微内核的操作系统，说法 I 错误。说法 II 描述的是层次化架构的原则。微内核架构将操作系统的核心功能和其他服务分离，使不同的服务可在不同的处理器上并行执行，提高了系统的并发性和可扩展性；微内核架构可以方便地实现进程间的通信和同步，支持服务器之间的消息传递和远程过程调用，使得分布式系统的开发和管理更简单和高效，说法 III 正确。添加系统服务时不必修改内核，这就使得微内核架构的可扩展性和灵活性更强；微内核架构的主要问题是性能问题，“使系统更高效”显然错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_09",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于微内核操作系统的描述中，不正确的是（）。",
      "options": {
        "A": "可提高操作系统的可靠性",
        "B": "可提高操作系统的执行效率",
        "C": "可提高操作系统的可移植性",
        "D": "可提高操作系统的可拓展性"
      },
      "answer": [
        "B"
      ],
      "explanation": "微内核会增加一些开销，如上下文切换、消息传递、数据拷贝等。这些开销会降低操作系统的执行效率，尤其是对一些频繁调用的服务。选项 A、C、D 均正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_10",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于操作系统外核（exokernel）的说法中，错误的是（）。",
      "options": {
        "A": "外核可以给用户进程分配未经抽象的硬件资源",
        "B": "用户进程通过调用 “库” 请求操作系统外核的服务",
        "C": "外核负责完成进程调度",
        "D": "外核可以减少虚拟硬件资源的“映射”开销，提升系统效率"
      },
      "answer": [
        "C"
      ],
      "explanation": "在拥有外核的操作系统中，外核只负责硬件资源的分配、回收、保护等，进程管理相关的工作仍然由内核负责。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_11",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "对于计算机操作系统引导，描述不正确的是（）。",
      "options": {
        "A": "计算机的引导程序驻留在 ROM 中，开机后自动执行",
        "B": "引导程序先做关键部位的自检，并识别已连接的外设",
        "C": "引导程序会将硬盘中存储的操作系统全部加载到内存中",
        "D": "若计算机中安装了双系统，引导程序会与用户交互加载有关系统"
      },
      "answer": [
        "C"
      ],
      "explanation": "常驻内存的只是操作系统内核，其他部分仅在需要时才调入。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_12",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "存放操作系统自举程序的芯片是（）。",
      "options": {
        "A": "SRAM",
        "B": "DRAM",
        "C": "ROM",
        "D": "CMOS"
      },
      "answer": [
        "C"
      ],
      "explanation": "BIOS（基本输入/输出系统）是一组固化在主板的 ROM 芯片上的程序，它包含系统设置程序、基本输入/输出程序、开机自检程序和系统启动自举程序等。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_13",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "计算机操作系统的引导程序位于（）中。",
      "options": {
        "A": "主板 BIOS",
        "B": "片外 Cache",
        "C": "主存 ROM 区",
        "D": "硬盘"
      },
      "answer": [
        "D"
      ],
      "explanation": "操作系统的引导程序位于磁盘活动分区的引导扇区中。引导程序分为两种：一种是位于 ROM 中的自举程序（BIOS 的组成部分），用于启动具体的设备；另一种是位于装有操作系统硬盘的活动分区的引导扇区中的引导程序（称为启动管理器），用于引导操作系统。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_14",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "在操作系统引导过程中，下列关于各阶段核心功能的描述，正确的是（）。",
      "options": {
        "A": "BIOS 直接加载并执行操作系统内核",
        "B": "MBR 解析硬盘分区表，并加载活动分区的引导扇区",
        "C": "启动管理器由 BIOS 直接从磁盘读取并执行",
        "D": "内核初始化阶段仅加载设备驱动，不初始化进程调度相关数据结构"
      },
      "answer": [
        "B"
      ],
      "explanation": "在操作系统引导过程中，BIOS 执行硬件自检后，仅加载主引导记录（MBR）到内存中并执行；MBR 位于硬盘首扇区，通过解析分区表定位活动分区，并加载其分区引导记录（PBR）；PBR 负责加载启动管理器，而不由 BIOS 直接加载；内核初始化阶段除加载设备驱动外，还需要初始化进程控制块、调度队列和空闲进程等调度相关数据结构。综上，仅选项 B 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_15",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "检查分区表是否正确，确定哪个分区为活动分区，并在程序结束时将该分区的启动程序（操作系统引导扇区）调入内存加以执行，这是（）的任务。",
      "options": {
        "A": "MBR",
        "B": "引导程序",
        "C": "操作系统",
        "D": "BIOS"
      },
      "answer": [
        "A"
      ],
      "explanation": "BIOS 将控制权交给排在首位的启动设备后，CPU 将该设备主引导扇区的内容 [主引导记录（MBR）] 加载到内存中，然后由 MBR 检查分区表，查找活动分区，并将该分区的引导扇区的内容 [分区引导记录（PBR）] 加载到内存加以执行。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_16",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "下列关于虚拟机的说法中，正确的是（）。 I. 虚拟机可以用软件实现 II. 虚拟机可以用硬件实现 III. 多台虚拟机可同时运行在同一物理机器上，它实现了真正的并行",
      "options": {
        "A": "I 和 II",
        "B": "I 和 III",
        "C": "仅 I",
        "D": "I、II 和 III"
      },
      "answer": [
        "A"
      ],
      "explanation": "软件能实现的功能也能由硬件实现，因为虚拟机软件能实现的功能也能由硬件实现，软件和硬件的分界面是系统结构设计者的任务，说法 I 和 II 正确。实现真正并行的是多核处理机，多台虚拟机同时运行在同一物理机器上，类似于多个程序运行在同一个系统中。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_17",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "下列关于 VMware Workstation 虚拟机的说法中，错误的是（）。",
      "options": {
        "A": "真实硬件不会直接执行虚拟机中的敏感指令",
        "B": "虚拟机中只能安装一种操作系统",
        "C": "虚拟机是运行在计算机中的一个应用程序",
        "D": "虚拟机文件封装在一个文件夹中，并存储在数据存储器中"
      },
      "answer": [
        "B"
      ],
      "explanation": "VMware Workstation 虚拟机属于第二类虚拟机管理程序，若真实硬件直接执行虚拟机中的敏感指令，则该指令非法时可能导致宿主操作系统崩溃，而这是不可能的，实际上是由第二类虚拟机管理程序模拟真实硬件环境。虚拟机看起来和真实物理计算机没什么两样，因此当然可以安装多个操作系统。VMware Workstation 就是一个安装在计算机上的程序，在创建虚拟机时，会为该虚拟机创建一组文件，这些虚拟机文件都存储在主机的磁盘上。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_18",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "虚拟机的实现离不开虚拟机管理程序（VMM），下列关于 VMM 的说法中正确的是（）。 I. 第一类 VMM 直接运行在硬件上，其效率通常高于第二类 VMM II. VMM的上层需要支持操作系统的运行、应用程序的运行，因此实现VMM的代码量通常大于实现一个完整操作系统的代码量 III. VMM 可将一台物理机器虚拟化为多台虚拟机器 IV. 为了支持客户操作系统的运行，第二类 VMM 需要完全运行在最高特权级",
      "options": {
        "A": "I、II 和 III",
        "B": "I 和 III",
        "C": "I、III 和 IV",
        "D": "I、II、III 和 IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "第一类 VMM 直接运行在硬件上；第二类 VMM 运行在宿主操作系统上，不能直接和硬件打交道，因此第一类 VMM 的效率通常更高。VMM 的功能没有操作系统的功能复杂，其代码量少于一个完整的操作系统。说法 III 是基本概念。第一类 VMM 运行在最高特权级（内核态），而第二类 VMM 和普通应用程序的地位相同，通常运行在较低特权级（用户态）。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_19",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2013 统考真题】计算机开机后，操作系统最终被加载到（）。",
      "options": {
        "A": "BIOS",
        "B": "ROM",
        "C": "EPROM",
        "D": "RAM"
      },
      "answer": [
        "D"
      ],
      "explanation": "系统开机后，操作系统的程序会被自动加载到内存中的系统区，这段区域是 RAM。部分未复习计组的读者对该内容可能不太熟悉，但熟悉了各类存储介质后，解答本题并不难。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_20",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2022 统考真题】下列选项中，需要在操作系统进行初始化过程中创建的是（）。",
      "options": {
        "A": "中断向量表",
        "B": "文件系统的根目录",
        "C": "硬盘分区表",
        "D": "文件系统的索引节点表"
      },
      "answer": [
        "A"
      ],
      "explanation": "在操作系统初始化的过程中需要创建中断向量表，以实现通电自检（POST），CPU 检测到中断信号后，根据中断号查询中断向量表，跳转到相应的中断处理程序，选项 A 正确。在硬盘逻辑格式化之前，需要先对硬盘进行分区，即创建硬盘分区表。分区完成后，对物理分区进行逻辑格式化（创建文件系统），为每个分区初始化一个特定的文件系统，并创建文件系统的根目录。若某个分区采用 UNIX 文件系统，则还要在该分区中建立文件系统的索引节点表。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_21",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2023统考真题】与宏内核操作系统相比，下列特征中，微内核操作系统具有的是（）。 I. 较好的性能 II. 较高的可靠性 III. 较高的安全性 IV. 较强的可扩展性",
      "options": {
        "A": "仅 II、IV",
        "B": "仅 I、II、III",
        "C": "仅 I、III、IV",
        "D": "仅 II、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "微内核架构将内核中最基本的功能保留在内核，只有微内核运行在内核态，其余模块都运行在用户态，一个模块中的错误只会使这个模块崩溃，而不会使整个系统崩溃，因此具有较高的可靠性和安全性。微内核的非核心功能运行在用户空间，可通过插件或模块的方式进行扩展，无须改动内核代码，因此具有较强的可扩展性。微内核需要频繁地在用户态和内核态之间进行切换，操作系统的执行开销偏大，从而影响系统性能。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_1-6-2_22",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.6.2",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2025 统考真题】下列关于虚拟化技术的叙述中，错误的是（）。",
      "options": {
        "A": "操作系统可以运行在虚拟机上",
        "B": "虚拟化技术支持在一台计算机上构建多个虚拟机",
        "C": "虚拟机监控程序（VMM）与操作系统的特权级相同",
        "D": "虚拟化技术支持在一台计算机上模拟不同的指令集体系结构"
      },
      "answer": [
        "C"
      ],
      "explanation": "虚拟化技术通过软件抽象底层硬件资源，使多个相互隔离的虚拟机能够在同一台物理计算机上运行。操作系统可作为客户系统运行在虚拟机中，依托虚拟硬件正常运行；同时，在单台物理主机上构建多个虚拟机正是虚拟化的核心能力。虚拟机监控程序（VMM）作为虚拟化的核心组件，必须运行在高于操作系统的特权级上，才能有效拦截和模拟敏感指令、管理物理资源并维持虚拟机间的隔离，因此其特权级不可能与操作系统的相同。此外，结合仿真或动态二进制翻译等机制，虚拟化方案也能在一种指令集架构的平台上模拟运行另一种架构的虚拟机，进而支持跨架构场景。综上，选项 C 的表述不符合虚拟化的基本原理。",
      "source_file": "wiki/sources/操作系统/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "操作系统_2-1-9_09",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于进程和程序的叙述中，错误的是（）。",
      "options": {
        "A": "一个进程在其生命周期中可执行多个程序",
        "B": "一个进程在同一时刻可执行多个程序",
        "C": "一个程序的多次运行可形成多个不同的进程",
        "D": "一个程序的一次执行可产生多个进程"
      },
      "answer": [
        "B"
      ],
      "explanation": "一个进程可以顺序地执行一个或多个程序，只要在执行过程中改变其 CPU 状态和内存空间即可，但不能同时执行多个程序，选项 B 错误，选项 A 正确。一个程序可以对应多个进程，即多个进程可以执行同一个程序。例如，同一个文本编辑器可以被多个用户或多个窗口同时运行，每次运行都形成一个新进程。一个程序在执行过程中也可产生多个进程。例如，一个程序可以通过系统调用 fork() 或 create() 来创建子进程，从而实现并发处理或分布式计算。选项 C 和 D 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_10",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列选项中，导致创建新进程的操作是（）。 I. 用户登录 II. 高级调度发生时 III. 操作系统响应用户提出的请求 IV. 用户打开了一个浏览器程序",
      "options": {
        "A": "仅I和IV",
        "B": "仅 II 和 IV",
        "C": "I、II 和 IV",
        "D": "全部"
      },
      "answer": [
        "D"
      ],
      "explanation": "用户登录时，操作系统会为用户创建一个登录进程，用于验证用户身份和提供用户界面。高级调度即作业调度，会从后备队列上选择一个作业调入内存，并为之创建相应的进程。操作系统响应用户提出的请求时，通常会为用户创建一个子进程，用于执行用户指定的任务或程序。用户打开一个浏览器程序时，也是一种操作系统响应用户请求的情况，同样会创建一个新进程。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_11",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "操作系统是根据（）来对并发执行的进程进行控制和管理的。",
      "options": {
        "A": "进程的基本状态",
        "B": "进程控制块",
        "C": "多道程序设计",
        "D": "进程的优先权"
      },
      "answer": [
        "B"
      ],
      "explanation": "在进程的整个生命周期中，系统总是通过其 PCB 对进程进行控制。也就是说，系统是根据进程的 PCB 而非任何其他因素来感知到进程存在的，PCB 是进程存在的唯一标志。同时 PCB 常驻内存。A 和 D 选项的内容都包含在进程 PCB 中。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_12",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "在任何时刻，一个进程的状态变化（）引起另一个进程的状态变化。",
      "options": {
        "A": "必定",
        "B": "一定不",
        "C": "不一定",
        "D": "不可能"
      },
      "answer": [
        "C"
      ],
      "explanation": "一个进程的状态变化可能引起另一个进程的状态变化。例如，一个进程时间片用完，可能引起另一个就绪进程的运行。同时，一个进程的状态变化也可能不会引起另一个进程的状态变化。例如，一个进程由阻塞态转换为就绪态就不会引起其他进程的状态变化。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_13",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "在单处理器系统中，若同时存在 10 个进程，则处于就绪队列中的进程最多有（）个。",
      "options": {
        "A": "1",
        "B": "8",
        "C": "9",
        "D": "10"
      },
      "answer": [
        "C"
      ],
      "explanation": "在单处理器系统中，不可能出现 10 个进程都处于就绪态的情况。但 9 个进程处于就绪态、1 个进程处于运行态是可能的。此外还要想到，可能 10 个进程都处于阻塞态。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_14",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "一个进程释放了一台打印机，它可能改变（）的状态。",
      "options": {
        "A": "自身进程",
        "B": "输入/输出进程",
        "C": "另一个等待打印机的进程",
        "D": "所有等待打印机的进程"
      },
      "answer": [
        "C"
      ],
      "explanation": "由于打印机是独占资源，当一个进程释放打印机后，另一个等待打印机的进程就可能从阻塞态转到就绪态。当然，也存在一个进程执行完毕后由运行态转换为终止态时释放打印机的情况，但这并不是由于释放打印机引起的，相反是因为运行完成才释放了打印机。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_15",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "系统进程所请求的一次 I/O 操作完成后，将使进程状态从（）。",
      "options": {
        "A": "运行态变为就绪态",
        "B": "运行态变为阻塞态",
        "C": "就绪态变为运行态",
        "D": "阻塞态变为就绪态"
      },
      "answer": [
        "D"
      ],
      "explanation": "I/O 操作完成之前进程在等待结果，状态为阻塞态；完成后进程等待事件就绪，变为就绪态。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_16",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "一个进程的基本状态可以从其他两种基本状态转变过去，这个基本的状态一定是（）。",
      "options": {
        "A": "运行态",
        "B": "阻塞态",
        "C": "就绪态",
        "D": "终止态"
      },
      "answer": [
        "C"
      ],
      "explanation": "只有就绪态可以既由运行态转变过去又能由阻塞态转变过去。时间片到时，运行态变为就绪态；当所需要资源到达时，进程由阻塞态转换为就绪态。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_17",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "在分时系统中，通常处于（）的进程最多。",
      "options": {
        "A": "运行态",
        "B": "就绪态",
        "C": "阻塞态",
        "D": "终止态"
      },
      "answer": [
        "B"
      ],
      "explanation": "分时系统中处于就绪态的进程最多，这些进程都在争夺 CPU 的使用权，而 CPU 的数量是有限的。处于运行态的进程只能有一个或少数几个。处于阻塞态的进程也不会太多，阻塞事件的发生频率不会太高。处于终止态的进程也不多，这些进程已释放资源，不再占用内存空间。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_18",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "并发进程失去封闭性，是指（）。",
      "options": {
        "A": "多个相对独立的进程以各自的速度向前推进",
        "B": "并发进程的执行结果与速度无关",
        "C": "并发进程执行时，在不同时刻发生的错误",
        "D": "并发进程共享变量，其执行结果与速度有关"
      },
      "answer": [
        "D"
      ],
      "explanation": "程序封闭性是指进程执行的结果只取决于进程本身，不受外界影响。也就是说，进程在执行过程中不管是不停顿地执行，还是走走停停，进程的执行速度都不会改变它的执行结果。失去封闭性后，不同速度下的执行结果不同。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_19",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "通常用户进程被建立后，（）。",
      "options": {
        "A": "便一直存在于系统中，直到被操作人员撤销",
        "B": "随着进程运行的正常或不正常结束而撤销",
        "C": "随着时间片轮转而撤销与建立",
        "D": "随着进程的阻塞或者唤醒而撤销与建立"
      },
      "answer": [
        "B"
      ],
      "explanation": "进程有它的生命周期，不会一直存在于系统中，也不一定需要用户显式地撤销。进程在时间片结束时只是就绪，而不是撤销。阻塞和唤醒是进程生存期的中间状态。进程可在完成时撤销，或在出现内存错误等时撤销。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_20",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "进程在处理器上执行时，（）。",
      "options": {
        "A": "进程之间是无关的，具有封闭特性",
        "B": "进程之间都有交互性，相互依赖、相互制约，具有并发性",
        "C": "具有并发性，即同时执行的特性",
        "D": "进程之间可能是无关的，但也可能是有交互性的"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项 A 和 B 都说得太绝对，进程之间可能具有相关性，也可能是相互独立的。选项 C 错在 “同时”。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_21",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "下列关于父进程和子进程的叙述中，正确的是（）。",
      "options": {
        "A": "为了标志父子关系，可让子进程和父进程拥有相同的 PID",
        "B": "父进程和子进程是相互独立的，可以并发执行",
        "C": "撤销子进程时，一定会同时撤销父进程",
        "D": "父进程创建了子进程，要等父进程执行完后，子进程才能执行"
      },
      "answer": [
        "B"
      ],
      "explanation": "虽然父进程创建了子进程，它们有一定的关系，但仍然是两个不同的进程，拥有各自的 PID，选项 A 错误。父进程和子进程是相互独立的，两个进程能并发执行，且互不影响，选项 B 正确，选项 D 错误。撤销一个进程并不一定会导致另一个进程也被撤销，父进程撤销后，子进程可能有两种状态：① 子进程一并被终止；② 子进程成为孤儿进程，被 init 进程领养。子进程撤销不会导致父进程撤销，选项 C 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_22",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "multiple_choice",
      "question": "若一个进程实体由 PCB、共享正文段、数据堆段和数据栈段组成，请指出下列 C 语言程序中的内容及相关数据结构各位于哪一段中。 I. 全局赋值变量（） II. 未赋值的局部变量（） III. 函数调用实参传递值（） IV. 用 malloc()要求动态分配的存储区（） V. 常量值（如 1995、“string”）（） VI. 进程的优先级（）",
      "options": {
        "A": "PCB",
        "B": "正文段",
        "C": "堆段",
        "D": "栈段"
      },
      "answer": [
        "B",
        "D",
        "D",
        "C",
        "B",
        "A"
      ],
      "explanation": "C 语言编写的程序在使用内存时一般分为三个段：正文段（代码和赋值数据段）、数据堆段和数据栈段。二进制代码和常量存放在正文段，动态分配的存储区存放在数据堆段，临时使用的变量存放在数据栈段。由此，我们可以确定全局赋值变量在正文段赋值数据段，未赋值的局部变量和实参传递在栈段，动态内存分配在堆段，常量在正文段，进程的优先级只能在 PCB 内。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md",
      "hidden": true,
      "hidden_reason": "answer_sequence_not_standard_multiple_choice"
    },
    {
      "id": "操作系统_2-1-9_23",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "同一程序经过多次创建，运行在不同的数据集上，形成了（）的进程。",
      "options": {
        "A": "不同",
        "B": "相同",
        "C": "同步",
        "D": "互斥"
      },
      "answer": [
        "A"
      ],
      "explanation": "进程是程序的一次执行过程，它不仅包括程序的代码，还包括程序的数据和状态。同一个程序经过多次创建，运行在不同的数据集上，会形成不同的进程，它们之间没有必然的联系。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_24",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "PCB 是进程存在的唯一标志，下列（）不属于 PCB。",
      "options": {
        "A": "进程 ID",
        "B": "CPU 状态",
        "C": "堆栈指针",
        "D": "全局变量"
      },
      "answer": [
        "D"
      ],
      "explanation": "进程实体主要是代码、数据和 PCB。因此，要清楚了解 PCB 内所含的数据结构内容，主要有四大类：进程标志信息、进程控制信息、进程资源信息、CPU 现场信息。由此可知，全局变量与 PCB 无关，而只与用户代码有关。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_25",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "一个计算机系统中，进程的最大数量主要受到（）限制。",
      "options": {
        "A": "内存大小",
        "B": "用户数目",
        "C": "打开的文件数",
        "D": "外部设备数量"
      },
      "answer": [
        "A"
      ],
      "explanation": "进程的创建和运行需要占用内存空间，包括 PCB、代码段、数据段、堆栈等；系统可用内存总量直接决定了可同时存在的最大进程数量，若内存不足，则无法为新进程分配所需空间，选项 A 正确。用户数目仅影响登录会话数，打开的文件数和外部设备数量分别约束 I/O 资源的使用。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_26",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "进程创建完成后会进入一个序列，这个序列称为（）。",
      "options": {
        "A": "阻塞队列",
        "B": "挂起序列",
        "C": "就绪队列",
        "D": "运行队列"
      },
      "answer": [
        "C"
      ],
      "explanation": "我们先要考虑创建进程的过程，当该进程所需的资源分配完成而只等 CPU 时，进程的状态为就绪态，因此所有的就绪 PCB 一般以链表方式链成一个序列，称为就绪队列。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_27",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "进程自身决定（）。",
      "options": {
        "A": "从运行态到阻塞态",
        "B": "从运行态到就绪态",
        "C": "从就绪态到运行态",
        "D": "从阻塞态到就绪态"
      },
      "answer": [
        "A"
      ],
      "explanation": "进程在运行过程中，若主动执行如 read()、wait() 等系统调用，以请求 I/O 操作或等待资源，会自行触发从运行态到阻塞态的转换，选项 A 正确。而其他状态的转换均由内核控制：运行态转换为就绪态通常由时间片耗尽或高优先级进程抢占引起，就绪态转换为运行态由调度程序决定，阻塞态转换为就绪态则依赖外部事件（如 I/O 完成）触发。这些转换均非进程自身所能决定。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_28",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "下列关于原语操作的叙述中，错误的是（）。",
      "options": {
        "A": "操作系统使用原语对进程进行管理和控制",
        "B": "原语在执行过程中不允许被中断",
        "C": "原语在内核态下执行，常驻内存",
        "D": "原语被定义为 “原子操作”，意思是其执行速度非常快"
      },
      "answer": [
        "D"
      ],
      "explanation": "原语是由若干条指令组成的、用于实现某个特定功能的程序段。它与一般的程序的区别如下：它是“原子操作”，即一个操作中的所有动作要么全做，要么全不做，在执行过程中不允许被中断，因此“原子操作”并不是指执行速度快，选项D错误。对进程的管理和控制功能是通过各种原语实现的，如创建原语等。原语是操作系统内核的组成部分，它常驻内存，且在内核态下执行。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_29",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "下列进程间通信方式中，数据传输速度最快的是（）。",
      "options": {
        "A": "消息传递",
        "B": "信号量",
        "C": "共享内存",
        "D": "管道"
      },
      "answer": [
        "C"
      ],
      "explanation": "共享内存是最快的进程间数据传输方式，它允许多个进程直接访问同一块物理内存区域，无须内核参与数据拷贝，也避免了用户态与内核态之间的模式切换；而消息传递和管道均需通过内核中转，数据传输过程涉及两次数据拷贝（用户→内核→用户）和两次模式切换，开销显著；信号量并非数据传输机制，仅用于同步与互斥，不能传递数据，故选项 C 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_30",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "信箱通信是一种（）通信方式。",
      "options": {
        "A": "直接通信",
        "B": "间接通信",
        "C": "低级通信",
        "D": "信号量"
      },
      "answer": [
        "B"
      ],
      "explanation": "信箱通信属于消息传递中的间接通信方式，因为信箱通信借助于收发双方进程之外的共享数据结构作为通信中转，发送方和接收方不直接建立联系，没有处理时间上的限制，发送方可以在任何时间发送信息，接收方也可以在任何时间接收信息。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_31",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "下列关于信号发送和处理的描述中，错误的是（）。",
      "options": {
        "A": "一个进程可以给自己发送信号",
        "B": "操作系统的内核可以给进程发送信号",
        "C": "操作系统的内核对每种信号都有默认处理程序",
        "D": "用户可以对每种信号自定义处理函数"
      },
      "answer": [
        "D"
      ],
      "explanation": "有些信号是不能被用户自定义处理函数的，只能执行操作系统默认的处理程序，选项D错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_32",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "下列关于信号的处理的描述中，错误的是（）。",
      "options": {
        "A": "当进程从内核态转换为用户态时，会检查是否有待处理的信号",
        "B": "当进程从用户态转换为内核态时，也会检查是否有待处理的信号",
        "C": "操作系统对某些信号的处理是可以忽略的",
        "D": "操作系统允许进程通过系统调用，自定义某些信号的处理程序"
      },
      "answer": [
        "B"
      ],
      "explanation": "信号的处理时机只会在进程从内核态转换为用户态时。当进程从用户态转换为内核态时，不会检查是否有待处理的信号，选项 B 错误。操作系统对某些信号的默认处理可能就是忽略。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_33",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "下面的叙述中，正确的是（）。",
      "options": {
        "A": "引入线程后，处理器只能在线程间切换",
        "B": "引入线程后，处理器仍在进程间切换",
        "C": "线程的切换，不会引起进程的切换",
        "D": "线程的切换，可能引起进程的切换"
      },
      "answer": [
        "D"
      ],
      "explanation": "在同一进程中，线程的切换不会引起进程的切换。当从一个进程中的线程切换到另一个进程中的线程时，才会引起进程的切换，因此选项 A、B、C 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_34",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "下列关于线程的叙述中，正确的是（）。",
      "options": {
        "A": "线程包含 CPU 现场，可以独立执行程序",
        "B": "每个线程都有自己独立的地址空间",
        "C": "每个进程只能包含一个线程",
        "D": "同一进程中的线程间通信也必须使用系统调用函数"
      },
      "answer": [
        "A"
      ],
      "explanation": "线程的 CPU 现场是指线程运行时所需的一组寄存器的值，包括程序计数器、状态寄存器、通用寄存器和栈指针等。当线程切换时，操作系统会保存当前线程的 CPU 现场，并恢复下一个线程的 CPU 现场。线程是 CPU 调度的基本单位，当然可以独立执行程序，选项 A 正确。线程没有自己独立的地址空间，它共享其所属进程的空间，选项 B 错误。进程可以创建多个线程，选项 C 错误。同一个进程中的线程间通信可以直接通过它们共享的存储空间，选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_35",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "下面的叙述中，正确的是（）。",
      "options": {
        "A": "线程是比进程更小的能独立运行的基本单位，可以脱离进程独立运行",
        "B": "引入线程可提高程序并发执行的程度，可进一步提高系统效率",
        "C": "线程的引入增加了程序执行时的时空开销",
        "D": "一个进程一定包含多个线程"
      },
      "answer": [
        "B"
      ],
      "explanation": "线程是进程内一个相对独立的执行单元，但不能脱离进程单独运行，只能在进程中运行。引入线程是为了减少程序执行时的时空开销。一个进程可包含一个或多个线程。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_36",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "下面的叙述中，正确的是（）。",
      "options": {
        "A": "同一进程内的线程可并发执行，不同进程的线程只能串行执行",
        "B": "同一进程内的线程只能串行执行，不同进程的线程可并发执行",
        "C": "同一进程或不同进程内的线程都只能串行执行",
        "D": "同一进程或不同进程内的线程都可以并发执行"
      },
      "answer": [
        "D"
      ],
      "explanation": "同一个进程或不同进程内的线程可以并发执行，并发是指多个线程在一段时间内交替执行，而不一定是同时执行的。在多核 CPU 中，同一个进程或不同进程内的线程可以并行执行，并行是指多个线程在同一时刻同时执行。若实现了并行，则一定也实现了并发。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_37",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "下列选项中，（）不是线程的优点。",
      "options": {
        "A": "提高系统并发性",
        "C": "切换开销小",
        "B": "节约系统资源",
        "D": "增强进程安全性"
      },
      "answer": [
        "D"
      ],
      "explanation": "线程相比进程的核心优势体现在粒度更细与开销更小上：一个进程可包含多个线程并发执行，显著提升系统并发性；线程不拥有独立的内存空间，仅需少量私有数据结构，资源占用远低于进程；线程切换无须切换地址空间，仅保存和恢复少量上下文，开销更低；但因为线程共享进程资源，一个线程出错可能影响整个进程，无法增强进程安全性，选项D错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_38",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "下列关于进程和线程的说法中，正确的是（）。",
      "options": {
        "A": "一个进程可以包含一个或多个线程，一个线程可以属于一个或多个进程",
        "B": "多线程技术具有明显的优越性，如速度快、通信简便、设备并行性高等",
        "C": "由于线程不作为资源分配单位，线程之间可以无约束地并行执行",
        "D": "线程也称轻量级进程，因为线程都比进程小"
      },
      "answer": [
        "B"
      ],
      "explanation": "一个进程可以包含一个或多个线程，但一个线程只能属于一个进程，选项 A 错误。线程共享进程的资源，但线程之间不能无约束地并行执行，因为线程之间还需要进行同步和互斥，以免造成数据的不一致和冲突，选项 C 错误。线程也称轻量级进程，但并不能说所有线程都比进程小，选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_39",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "在下列描述中，（）并不是多线程系统的特长。",
      "options": {
        "A": "利用线程并行地执行矩阵乘法运算",
        "B": "Web 服务器利用线程响应 HTTP 请求",
        "C": "键盘驱动程序为每个正在运行的应用配备一个线程，用以响应该应用的键盘输入",
        "D": "基于 GUI 的调试程序用不同的线程分别处理用户输入、计算和跟踪等操作"
      },
      "answer": [
        "C"
      ],
      "explanation": "整个系统只有一个键盘，而且键盘输入是人的操作，速度比较慢，完全可以使用一个线程来处理整个系统的键盘输入。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_40",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "在进程转换时，下列（）转换是不可能发生的。",
      "options": {
        "A": "就绪态 $\\rightarrow$ 运行态",
        "C": "运行态→阻塞态",
        "B": "运行态 $\\rightarrow$ 就绪态",
        "D": "阻塞态→运行态"
      },
      "answer": [
        "D"
      ],
      "explanation": "阻塞的进程在获得所需资源时只能由阻塞态转换为就绪态，并插入就绪队列，而不能直接转换为运行态。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_41",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "当（）时，进程从执行状态转换为就绪态。",
      "options": {
        "A": "进程被调度程序选中",
        "C": "等待某一事件",
        "B": "时间片到时",
        "D": "等待的事件发生"
      },
      "answer": [
        "B"
      ],
      "explanation": "进程的时间片到时间后，系统会暂停其执行，并将其从运行态转换为就绪态，等待下一次被调度，选项 B 正确。进程被调度程序选中时，从就绪态转换为执行状态；等待某一事件时，进程由执行状态转换为阻塞态；等待的事件发生时，进程由阻塞态转换为就绪态。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_42",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "两个合作进程（Cooperating Processes）无法利用（）交换数据。",
      "options": {
        "A": "文件系统",
        "B": "共享内存",
        "C": "高级语言程序设计中的全局变量",
        "D": "消息传递系统"
      },
      "answer": [
        "C"
      ],
      "explanation": "不同的进程拥有不同的代码段和数据段，全局变量是对同一进程而言的，在不同的进程中是不同的变量，没有任何联系，所以不能用于交换数据。此题也可用排除法做，选项 A、B、D 均是课本上所讲的。管道是一种文件。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_43",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "以下可能导致一个进程从运行态变为就绪态的事件是（）。",
      "options": {
        "A": "一次 I/O 操作结束",
        "B": "运行进程需做 I/O 操作",
        "C": "运行进程结束",
        "D": "出现了比现在进程优先级更高的进程"
      },
      "answer": [
        "D"
      ],
      "explanation": "进程处于运行态时，它必须已获得所需的资源，在运行结束后就撤销。只有在时间片到时或出现了比现在进程优先级更高的进程时才转变成就绪态。选项 A 使进程从阻塞态到就绪态，选项 B 使进程从运行态到阻塞态，选项 C 使进程撤销。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_44",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "（）必会引起进程切换。",
      "options": {
        "A": "一个进程创建后，进入就绪态",
        "B": "一个进程从运行态变为就绪态",
        "C": "一个进程从阻塞态变为就绪态",
        "D": "以上答案都不对"
      },
      "answer": [
        "B"
      ],
      "explanation": "进程切换是指 CPU 调度不同的进程执行，当一个进程从运行态变为就绪态时，CPU 调度另一个进程执行，引起进程切换。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_45",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "进程处于（）时，它处于非阻塞态。",
      "options": {
        "A": "等待从键盘输入数据",
        "B": "等待协作进程的一个信号",
        "C": "等待操作系统分配 CPU 时间",
        "D": "等待网络数据进入内存"
      },
      "answer": [
        "C"
      ],
      "explanation": "进程有三种基本状态，处于阻塞态的进程由于某个事件不满足而等待。这样的事件一般是 I/O 操作，如键盘等，或是因互斥或同步数据引起的等待，如等待信号或等待进入互斥临界区代码段等，等待网络数据进入内存是为了进程同步。而等待 CPU 调度的进程处于就绪态，只有它是非阻塞态。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_46",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 46,
      "type": "single_choice",
      "question": "一个进程被唤醒，意味着（）。",
      "options": {
        "A": "该进程可以重新竞争 CPU",
        "B": "优先级变大",
        "C": "PCB 移动到就绪队列之首",
        "D": "进程变为运行态"
      },
      "answer": [
        "A"
      ],
      "explanation": "当一个进程被唤醒时，这个进程就进入了就绪态，等待进程调度而占有 CPU 运行。进程被唤醒在某种情形下优先级可以增大，但一般不会变为最大，而由固定的算法来计算。也不会在唤醒后位于就绪队列的队首，就绪队列是按照一定的规则赋予其位置的，如先来先服务，或者高优先级优先，或者短进程优先等，更不能直接占有处理器运行。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_47",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 47,
      "type": "single_choice",
      "question": "进程创建时，不需要做的是（）。",
      "options": {
        "A": "填写一个该进程的进程表项",
        "B": "分配该进程适当的内存",
        "C": "将该进程插入就绪队列",
        "D": "为该进程分配 CPU"
      },
      "answer": [
        "D"
      ],
      "explanation": "进程创建原语完成的工作是：向系统申请一个空闲 PCB，为被创建进程分配必要的资源，然后将其 PCB 初始化，并将此 PCB 插入就绪队列，最后返回一个进程标志号。当调度程序为进程分配 CPU 后，进程开始运行。所以进程创建的过程中不会包含分配 CPU 的过程，这不是进程创建者的工作，而是调度程序的工作。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_48",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 48,
      "type": "single_choice",
      "question": "下面关于用户级线程和内核级线程的描述中，错误的是（）。",
      "options": {
        "A": "采用轮转调度算法，进程中设置内核级线程和用户级线程的效果完全不同",
        "B": "跨进程的用户级线程调度也不需要内核参与，控制简单",
        "C": "用户级线程可以在任何操作系统中运行",
        "D": "若系统中只有用户级线程，则 CPU 的调度对象是进程"
      },
      "answer": [
        "B"
      ],
      "explanation": "用户级线程的调度仍以进程为单位，各个进程轮流执行一个时间片，假设进程 A 包含 1 个用户级线程，而进程 B 包含 100 个用户级线程，此时进程 A 中单个线程的运行时间将是进程 B 中各个线程平均运行时间的 100 倍；内核级线程的调度是以线程为单位的，各个线程轮流执行一个时间段，同样假设进程 A 包含 1 个内核级线程，而进程 B 包含 100 个内核级线程，此时进程 B 的运行时间将是进程 A 的 100 倍，选项 A 正确。用户级线程的调度单位是进程，跨进程的线程调度需要内核支持，选项 B 错误。用户级线程是由用户程序或函数库实现的，不依赖于操作系统的支持，选项 C 正确。用户级线程对操作系统是透明的，CPU 调度的对象仍然是进程，选项 D 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_49",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 49,
      "type": "single_choice",
      "question": "在内核级线程相对于用户级线程的优点的如下描述中，错误的是（）",
      "options": {
        "A": "同一进程内的线程切换，系统开销小",
        "B": "当内核线程阻塞时，同一进程中的其他内核级线程仍可被调度",
        "C": "内核级线程的程序实体可以在内核态运行",
        "D": "对多处理器系统，核心可以同时调度同一进程的多个线程并行运行"
      },
      "answer": [
        "A"
      ],
      "explanation": "在内核级线程中，同一进程中的线程切换，需要从用户态转到内核态进行，系统开销较大，选项 A 错误。CPU 调度是在内核中进行的，在内核级线程中，调度是在线程一级进行的，因此内核可以同时调度同一进程的多个线程在多 CPU 上并行运行（用户级线程则不行），选项 B 正确、选项 D 正确。内核级线程可以在内核态执行系统调用子程序，直接利用系统调用为它服务，因此选项 C 正确。注意，用户级线程是在用户空间中实现的，不能直接利用系统调用获得内核的服务，当用户级线程要获得内核服务时，必须借助于操作系统的帮助，因此用户级线程只能在用户态运行。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_50",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 50,
      "type": "single_choice",
      "question": "下列关于用户级线程相对于内核级线程的优点的描述中，错误的是（）",
      "options": {
        "A": "一个线程阻塞不影响另一个线程的运行",
        "B": "线程的调度不需要内核直接参与，控制简单",
        "C": "线程切换代价小",
        "D": "允许每个进程定制自己的调度算法，线程管理比较灵活"
      },
      "answer": [
        "A"
      ],
      "explanation": "进程中的某个用户级线程被阻塞，则整个进程也被阻塞，即进程中的其他用户级线程也被阻塞，选项 A 错误。用户级线程的调度是在用户空间进行的，节省了模式切换的开销，不同进程可以根据自身的需要，对自己的线程选择不同的调度算法，因此选项 B、C 和 D 都正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_51",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 51,
      "type": "single_choice",
      "question": "下列关于用户级线程的优点的描述中，不正确的是（）。",
      "options": {
        "A": "线程切换不需要切换到内核态",
        "B": "支持不同的应用程序采用不同的调度算法",
        "C": "在不同操作系统上不经修改就可直接运行",
        "D": "同一个进程内的多个线程可以同时调度到多个处理器上执行"
      },
      "answer": [
        "D"
      ],
      "explanation": "用户级线程是不需要内核支持而在用户程序中实现的线程，不能利用多处理器的并行性，因为操作系统只能看到进程。其余说法均正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_52",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 52,
      "type": "single_choice",
      "question": "下列选项中，可能导致用户级线程切换的事件是（）。",
      "options": {
        "A": "系统调用",
        "B": "I/O 请求",
        "C": "异常处理",
        "D": "线程同步"
      },
      "answer": [
        "D"
      ],
      "explanation": "本题可用排除法。用户级线程的切换是由应用程序自己控制的，不需要操作系统的干预，操作系统感受不到用户级线程的存在。因此，系统调用、I/O请求和异常处理这些涉及内核态的事件都不会导致用户级线程切换，但会导致内核级线程切换。线程同步是指多个线程之间协调执行顺序的机制，如互斥锁、信号量、条件变量等。当一个线程在等待同步条件时，应用程序可以选择切换到另一个就绪的用户级线程，以提高CPU的利用率。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_53",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 53,
      "type": "single_choice",
      "question": "下列关于用户级线程的描述中，错误的是（）。",
      "options": {
        "A": "用户级线程由线程库进行管理",
        "B": "用户级线程只有在创建和调度时需要内核的干预",
        "C": "操作系统无法直接调度用户级线程",
        "D": "线程库中线程的切换不会导致进程切换"
      },
      "answer": [
        "B"
      ],
      "explanation": "用户级线程不依赖于操作系统内核，而是由用户程序自己实现的，选项 A 正确。用户级线程的创建和调度都是在用户态下实现的，不需要切换到内核态，选项 B 错误。操作系统只能看到一个单线程进程，而不知道进程内部有多个用户级线程，选项 C 正确。线程库中线程的切换只涉及用户栈和寄存器等上下文的保存和恢复，不涉及内核栈和页表等内核上下文的切换，选项 D 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_54",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 54,
      "type": "single_choice",
      "question": "下面的说法中，正确的是（）。",
      "options": {
        "A": "不论是系统支持的线程还是用户级线程，其切换都需要内核的支持",
        "B": "线程是资源分配的单位，进程是调度和分派的单位",
        "C": "不管系统中是否有线程，进程都是拥有资源的独立单位",
        "D": "在引入线程的系统中，进程仍是资源调度和分派的基本单位"
      },
      "answer": [
        "C"
      ],
      "explanation": "引入线程后，进程仍然是资源分配的单位。内核级线程是处理器调度和分派的单位，线程本身不具有资源，它可以共享所属进程的全部资源，选项C正确，选项B、D明显错误。至于选项A，可以这样来理解：假如有一个内核进程，它映射到用户级后有多个线程，那么这些线程之间的切换不需要在内核级切换进程，也就不需要内核的支持。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_55",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 55,
      "type": "single_choice",
      "question": "在多对一的线程模型中，当一个多线程进程中的某个线程被阻塞后，（）。",
      "options": {
        "A": "该进程的其他线程仍可继续运行",
        "B": "整个进程都将阻塞",
        "C": "该阻塞线程将被撤销",
        "D": "该阻塞线程将永远不可能再执行"
      },
      "answer": [
        "B"
      ],
      "explanation": "在多对一的线程模型中，只有一个内核级线程，用户级线程的“多”对操作系统透明，因此操作系统内核只能感知到一个调度单位的存在。因此，该进程的一个线程被阻塞后，该进程就被阻塞，进程的其他线程当然也被阻塞。注意，作为对比，在一对一模型中将每个用户级线程都映射到一个内核级线程，因此当某个线程被阻塞时，不会导致整个进程被阻塞。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_56",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 56,
      "type": "single_choice",
      "question": "并发性较好的多线程模型有（）。 I. 一对一模型 II. 多对一模型 III. 多对多模型",
      "options": {
        "A": "仅 I",
        "B": "I 和 II",
        "C": "I 和 III",
        "D": "I、II 和 III"
      },
      "answer": [
        "C"
      ],
      "explanation": "一对一模型和多对多模型能充分利用内核级线程，发挥多处理机的优势，能同时调度同一个进程中的多个线程并发执行，具有较好的并发性。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_57",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 57,
      "type": "single_choice",
      "question": "下列关于多对一模型的叙述中，错误的是（）。",
      "options": {
        "A": "一个进程的多个线程不能并行运行在多个处理器上",
        "B": "进程中的用户级线程由进程自己管理",
        "C": "线程切换会导致进程切换",
        "D": "一个线程的系统调用会导致整个进程阻塞"
      },
      "answer": [
        "C"
      ],
      "explanation": "多对一模型中的线程切换不会导致进程切换，而是在用户空间进行的。其余说法均正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_58",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 58,
      "type": "single_choice",
      "question": "【2010 统考真题】下列选项中，导致创建新进程的操作是（）。 I. 用户登录成功 II. 设备分配 III. 启动程序执行",
      "options": {
        "A": "仅 I 和 II",
        "B": "仅 II 和 III",
        "C": "仅 I 和 III",
        "D": "I、II、III"
      },
      "answer": [
        "C"
      ],
      "explanation": "创建进程的原因主要有：① 用户登录；② 高级调度；③ 系统处理用户程序的请求；④ 用户程序的应用请求。对于说法 I，用户登录成功后，系统要为此创建一个用户管理的进程，包括用户桌面、环境等，所有用户进程都会在该进程下创建和管理。对于说法 II，设备分配是通过在系统中设置相应的数据结构实现的，不需要创建进程，这是操作系统中 I/O 核心子系统的内容。对于说法 III，启动程序执行是引起创建进程的典型事件，启动程序执行属于③或④。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_59",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 59,
      "type": "single_choice",
      "question": "【2011 统考真题】在支持多线程的系统中，进程 P 创建的若干线程不能共享的是（）。",
      "options": {
        "A": "进程 P 的代码段",
        "B": "进程 P 中打开的文件",
        "C": "进程 P 的全局变量",
        "D": "进程 P 中某线程的栈指针"
      },
      "answer": [
        "D"
      ],
      "explanation": "进程是资源分配的基本单位，线程是 CPU 调度的基本单位。进程的代码段、进程打开的文件、进程的全局变量等都是进程的资源，唯有进程中某线程的栈指针（包含在线程 TCB 中）是属于线程的，属于进程的资源可以共享，属于线程的栈指针是独享的，对其他线程透明。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_60",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 60,
      "type": "single_choice",
      "question": "【2012 统考真题】下列关于进程和线程的叙述中，正确的是（）。",
      "options": {
        "A": "不管系统是否支持线程，进程都是资源分配的基本单位",
        "B": "线程是资源分配的基本单位，进程是调度的基本单位",
        "C": "系统级线程和用户级线程的切换都需要内核的支持",
        "D": "同一进程中的各个线程拥有各自不同的地址空间"
      },
      "answer": [
        "A"
      ],
      "explanation": "在引入线程后，进程依然是资源分配的基本单位，线程是调度的基本单位，同一进程中的各个线程共享进程的地址空间。在用户级线程中，有关线程管理的所有工作都由应用程序完成，无须内核的干预，内核意识不到线程的存在。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_61",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 61,
      "type": "single_choice",
      "question": "【2014 统考真题】一个进程的读磁盘操作完成后，操作系统针对该进程必做的是（）。",
      "options": {
        "A": "修改进程状态为就绪态",
        "B": "降低进程优先级",
        "C": "给进程分配用户内存空间",
        "D": "增加进程时间片大小"
      },
      "answer": [
        "A"
      ],
      "explanation": "进程申请读磁盘操作时，因为要等待 I/O 操作完成，会把自身阻塞，此时进程变为阻塞态；I/O 操作完成后，进程得到了想要的资源，会从阻塞态转换到就绪态（这是操作系统的行为）。而降低进程优先级、分配用户内存空间和增加进程的时间片大小都不一定会发生，选择选项 A。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_62",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 62,
      "type": "single_choice",
      "question": "【2014 统考真题】下列关于管道（Pipe）通信的叙述中，正确的是（）。",
      "options": {
        "A": "一个管道可实现双向数据传输",
        "B": "管道的容量仅受磁盘容量大小限制",
        "C": "进程对管道进行读操作和写操作都可能被阻塞",
        "D": "一个管道只能有一个读进程或一个写进程对其操作"
      },
      "answer": [
        "C"
      ],
      "explanation": "普通管道只允许单向通信，数据只能往一个方向流动，要实现双向数据传输，就需要定义两个方向相反的管道，选项 A 错误。管道是一种存储在内存中的、固定大小的缓冲区，管道的大小通常为内存的一页，其大小并不是受磁盘容量大小的限制，选项 B 错误。由于管道的读/写操作都可能遇到缓冲区满或空的情况，当管道满时，写操作会被阻塞，直到有数据读出；而当管道空时，读操作会被阻塞，直到有数据写入，因此选项 C 正确。一个管道可以有多个读进程或多个写进程对其进行操作，但是这会增加数据竞争和混乱的风险，为了避免这种情况，应使用互斥锁或信号量等同步机制来保证每次只有一个进程对管道进行读或写操作，选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_63",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 63,
      "type": "single_choice",
      "question": "【2015 统考真题】下列选项中，会导致进程从运行态变为就绪态的事件是（）。",
      "options": {
        "A": "执行 P(wait) 操作",
        "B": "申请内存失败",
        "C": "启动 I/O 设备",
        "D": "被高优先级进程抢占"
      },
      "answer": [
        "D"
      ],
      "explanation": "P(wait)操作表示进程请求某一资源，选项 A、B 和 C 都因为请求某一资源会进入阻塞态，而选项 D 只是被剥夺了 CPU 资源，进入就绪态，一旦得到 CPU 即可运行。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_64",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 64,
      "type": "single_choice",
      "question": "【2018统考真题】下列选项中，可能导致当前进程P阻塞的事件是（）。 I. 进程 P 申请临界资源 II. 进程 P 从磁盘读数据 III. 系统将 CPU 分配给高优先权的进程",
      "options": {
        "A": "仅 I",
        "B": "仅 II",
        "C": "仅 I、II",
        "D": "I、II、III"
      },
      "answer": [
        "C"
      ],
      "explanation": "进程等待某资源为可用（不包括 CPU）或等待输入/输出完成均会进入阻塞态，因此说法 I、II 正确；说法 III 中的情况发生时，进程进入就绪态，故说法 III 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_65",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 65,
      "type": "single_choice",
      "question": "【2019 统考真题】下列选项中，可能将进程唤醒的事件是（）。 I. I/O 结束 II. 某进程退出临界区 III. 当前进程的时间片用完",
      "options": {
        "A": "仅 I",
        "B": "仅 III",
        "C": "仅 I、II",
        "D": "I、II、III"
      },
      "answer": [
        "C"
      ],
      "explanation": "当被阻塞进程等待的某资源（不包括 CPU）可用时，进程将被唤醒。I/O 结束后，等待该 I/O 结束而被阻塞的有关进程会被唤醒，说法 I 正确；某进程退出临界区后，之前因需要进入该临界区而被阻塞的有关进程会被唤醒，说法 II 正确；当前进程的时间片用完后进入就绪队列等待重新调度，优先级最高的进程获得 CPU 资源从就绪态变成运行态，说法 III 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_66",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 66,
      "type": "single_choice",
      "question": "【2019 统考真题】下列关于线程的描述中，错误的是（）。",
      "options": {
        "A": "内核级线程的调度由操作系统完成",
        "B": "操作系统为每个用户级线程建立一个线程控制块",
        "C": "用户级线程间的切换比内核级线程间的切换效率高",
        "D": "用户级线程可以在不支持内核级线程的操作系统上实现"
      },
      "answer": [
        "B"
      ],
      "explanation": "应用程序没有进行内核级线程管理的代码，只有一个到内核级线程的编程接口，内核为进程及其内部的每个线程维护上下文信息，调度也是在内核中由操作系统完成的，选项A正确。用户级线程的控制块是由用户空间的库函数维护的，操作系统并不知道用户级线程的存在，用户级线程的控制块一般存放在用户空间的数据结构中，如链表或数组，由用户空间的线程库来管理。操作系统只负责为每个进程建立一个进程控制块，操作系统只能看到进程，而看不到用户级线程，所以不会为每个用户级线程建立一个线程控制块。但是，内核级线程的线程控制块是由操作系统创建的，当一个进程创建一个内核级线程时，操作系统会为该线程分配一个线程控制块，并将其加入内核的线程管理数据结构，选项B错误。用户级线程的切换可以在用户空间完成，内核级线程的切换需要操作系统帮助进行调度，因此用户级线程的切换效率更高，选项C正确。用户级线程的管理工作可以只在用户空间中进行，因此可以在不支持内核级线程的操作系统上实现，选项D正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_67",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 67,
      "type": "single_choice",
      "question": "【2020 统考真题】下列关于父进程与子进程的叙述中，错误的是（）。",
      "options": {
        "A": "父进程与子进程可以并发执行",
        "B": "父进程与子进程共享虚拟地址空间",
        "C": "父进程与子进程有不同的进程控制块",
        "D": "父进程与子进程不能同时使用同一临界资源"
      },
      "answer": [
        "B"
      ],
      "explanation": "父进程与子进程当然可以并发执行，选项 A 正确。父进程可与子进程共享一部分资源，但不能共享虚拟地址空间，在创建子进程时，会为子进程分配资源，如虚拟地址空间等，选项 B 错误。临界资源一次只能为一个进程所用，选项 D 正确。进程控制块（PCB）是进程存在的唯一标志，每个进程都有自己的 PCB，选项 C 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_68",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 68,
      "type": "single_choice",
      "question": "【2021统考真题】下列操作中，操作系统在创建新进程时，必须完成的是（）。 I. 申请空白的进程控制块 II. 初始化进程控制块 III. 设置进程状态为运行态",
      "options": {
        "A": "仅 I",
        "B": "仅 I、II",
        "C": "仅 I、III",
        "D": "仅 II、III"
      },
      "answer": [
        "B"
      ],
      "explanation": "操作系统感知进程的唯一方式是通过进程控制块（PCB），所以创建一个新进程就是为其申请一个空白的进程控制块，并且初始化一些必要的进程信息，如初始化进程标志信息、初始化CPU状态信息、设置进程优先级等。说法I、II正确。创建一个进程时，一般会为其分配除CPU外的大多数资源，所以一般将其设置为就绪态，让它等待调度程序的调度。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_69",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 69,
      "type": "single_choice",
      "question": "【2022统考真题】下列事件或操作中，可能导致进程P由运行态变为阻塞态的是（）。 I. 进程 P 读文件 II. 进程P的时间片用完 III. 进程 P 申请外设 IV. 进程 P 执行信号量的 wait() 操作",
      "options": {
        "A": "仅 I、IV",
        "B": "仅 II、III",
        "C": "仅 III、IV",
        "D": "仅 I、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "进程 P 读文件时，进程从运行态进入阻塞态，等待磁盘 I/O 完成，说法 I 正确。进程 P 的时间片用完，导致进程从运行态进入就绪态，转入就绪队列等待下次被调度，说法 II 错误。进程 P 申请外设，若外设是独占设备且正在被其他进程使用，则进程 P 从运行态进入阻塞态，等待系统分配外设，说法 III 正确。进程 P 执行信号量的 wait() 操作，若信号量的值小于或等于 0，则进程进入阻塞态，等待其他进程用 signal() 操作唤醒，说法 IV 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_70",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 70,
      "type": "single_choice",
      "question": "【2023 统考真题】下列操作完成时，导致 CPU 从内核态转换为用户态的是（）。",
      "options": {
        "A": "阻塞进程",
        "B": "执行 CPU 调度",
        "C": "唤醒进程",
        "D": "执行系统调用"
      },
      "answer": [
        "D"
      ],
      "explanation": "操作系统通过执行软中断指令陷入内核态执行系统调用，系统调用执行完成后，恢复被中断的进程或设置新进程的 CPU 现场，然后返回被中断进程或新进程。只有系统调用是用户进程调用内核功能，CPU 从用户态切换到内核态，执行完后再返回到用户态。选项 A、B、C 的操作都是在内核态进行的，执行前后都可能处在内核态，只有中断返回时才切换为用户态。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_71",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 71,
      "type": "single_choice",
      "question": "【2023 统考真题】下列由当前线程引起的事件或执行的操作中，可能导致该线程由运行态变为就绪态的是（）。",
      "options": {
        "A": "键盘输入",
        "B": "缺页异常",
        "C": "主动出让 CPU",
        "D": "执行信号量的 wait()操作"
      },
      "answer": [
        "C"
      ],
      "explanation": "在等待键盘输入的操作中，当前线程处于阻塞态，键盘输入完成后，再调出相应的中断服务程序进行处理，由中断服务程序负责唤醒当前线程，选项A错误。当线程检测到缺页异常时，会调用缺页异常处理程序从外存调入缺失的页面，线程状态从运行态转换为阻塞态，选项B错误。当线程的时间片用完后，主动放弃CPU，此时若线程还未执行完，就进入就绪队列等待下次调度，此时线程状态从运行态转换为就绪态，选项C正确。线程执行wait()后，若成功获取资源，则线程状态不变，若未能获取资源，则线程进入阻塞态，选项D错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_72",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 72,
      "type": "single_choice",
      "question": "【2024统考真题】下列选项中，操作系统在终止进程时不一定执行的是（）。",
      "options": {
        "A": "终止子进程",
        "B": "回收进程占用的设备",
        "C": "释放进程控制块",
        "D": "回收为进程分配的内存"
      },
      "answer": [
        "A"
      ],
      "explanation": "当操作系统终止进程时，所有的进程资源（如内存空间、进程控制块、设备、打开文件、I/O缓冲区等）都会被释放。有些系统不允许子进程在父进程已终止的情况下存在，对于这类系统，若一个进程终止，则它的所有子进程也终止，这种现象称为级联终止。但是，不是所有操作系统都是这么设计的，因此终止子进程不一定在终止进程时执行。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-1-9_73",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.1.9",
      "section_title": "本节试题精选",
      "num": 73,
      "type": "single_choice",
      "question": "【2024 统考真题】若进程 P 中的线程 T 先打开文件，得到文件描述符 fd，再创建两个线程 Ta 和 Tb，则在下列资源中，Ta 与 Tb 可共享的是（）。 I. 进程 P 的地址空间 II. 线程 T 的栈 III. 文件描述符 fd",
      "options": {
        "A": "仅 I",
        "B": "仅 I、III",
        "C": "仅 II、III",
        "D": "I、II、III"
      },
      "answer": [
        "B"
      ],
      "explanation": "线程可理解为轻量级进程，仅拥有一点必不可少、能保证独立运行的资源。例如，在每个线程中都有一个用于控制线程运行的线程控制块（TCB）、用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。因此，线程T的栈空间是线程T所独有的，不会被线程Ta和Tb共享。多个线程共享所属进程所拥有的资源，进程P的线程可以访问进程P的全部地址空间和资源（如已打开的文件、定时器、信号量机构等）以及它申请到的I/O设备等。综上所述，Ta和Tb可共享的是进程P的地址空间和文件描述符fd。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_11",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下面有关选择进程调度算法的准则中，不正确的是（）。",
      "options": {
        "A": "尽快响应交互式用户的请求",
        "B": "尽量提高处理器利用率",
        "C": "尽可能提高系统吞吐量",
        "D": "适当增长进程就绪队列的等待时间"
      },
      "answer": [
        "D"
      ],
      "explanation": "在选择进程调度算法时应考虑以下几个准则：① 公平：确保每个进程获得合理的 CPU 份额；② 有效：使 CPU 尽可能地忙碌；③ 响应时间：使交互用户的响应时间尽可能短；④ 周转时间：使批处理用户等待输出的时间尽可能短；⑤ 吞吐量：使单位时间处理的进程数尽可能最多。由此可见选项 D 不正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_12",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "实时系统的进程调度，通常采用（）调度算法。",
      "options": {
        "A": "先来先服务",
        "B": "时间片轮转",
        "C": "抢占式的优先级高者优先",
        "D": "高响应比优先"
      },
      "answer": [
        "C"
      ],
      "explanation": "实时系统必须能足够及时地处理某些紧急的外部事件，因此普遍用高优先级，并用“可抢占”来确保实时处理。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_13",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "支持多道程序设计的操作系统在运行过程中，不断地选择新进程运行来实现 CPU 的共享，但其中（）不是引起操作系统选择新进程的直接原因。",
      "options": {
        "A": "运行进程的时间片用完",
        "B": "运行进程出错",
        "C": "运行进程要等待某一事件发生",
        "D": "有新进程被创建进入就绪态"
      },
      "answer": [
        "D"
      ],
      "explanation": "操作系统选择新进程的直接原因是当前运行的进程不能继续运行。当运行的进程由于时间片用完、运行结束、出错、需要等待事件的发生、自我阻塞等，均可以激活调度程序进行重新调度，选择就绪队列的队首进程投入运行。新进程加入就绪队列不是引起调度的直接原因，当 CPU 正在运行其他进程时，该进程仍需等待。即使是在采用高优先级调度算法的系统中，一个最高优先级的进程进入就绪队列，也需要考虑是否允许抢占，当不允许抢占时，仍需等待。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_14",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "进程（线程）调度的时机有（）。 I. 运行的进程（线程）运行完毕 II. 运行的进程（线程）所需资源未准备好 III. 运行的进程（线程）的时间片用完 IV. 运行的进程（线程）自我阻塞 V. 运行的进程（线程）出现错误",
      "options": {
        "A": "II、III、IV 和 V",
        "B": "I 和 III",
        "C": "II、IV 和 V",
        "D": "全部都是"
      },
      "answer": [
        "D"
      ],
      "explanation": "进程（线程）调度的时机包括：运行的进程（线程）运行完毕、运行的进程（线程）自我阻塞、运行的进程（线程）的时间片用完、运行的进程（线程）所需的资源没有准备好（会阻塞进程）、运行的进程（线程）出现错误（会终止进程）。因此，说法 I、II、III、IV 和 V 都正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_15",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "设有 4 个作业同时到达，每个作业的执行时间均为 2h，它们在一台处理器上按单道式运行，则平均周转时间为（）。",
      "options": {
        "A": "1h",
        "B": "5h",
        "C": "2.5h",
        "D": "8h"
      },
      "answer": [
        "B"
      ],
      "explanation": "4 个作业的周转时间分别是 2h, 4h, 6h, 8h，所以 4 个作业的总周转时间为 $2 + 4 + 6 + 8 = 20h$ 。此时，平均周转时间 = 各个作业周转时间之和/作业数 = 20/4 = 5 小时。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_16",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "multiple_choice",
      "question": "若每个作业只能建立一个进程，为了照顾短作业用户，应采用（）；为了照顾紧急作业用户，应采用（）；为了能实现人机交互，应采用（）；而能使短作业、长作业和 交互作业用户都满意，应采用（）。",
      "options": {
        "A": "FCFS 调度算法",
        "B": "短作业优先调度算法",
        "C": "时间片轮转调度算法",
        "D": "多级反馈队列调度算法"
      },
      "answer": [
        "B",
        "C",
        "D"
      ],
      "explanation": "照顾短作业用户，选择短作业优先调度算法；照顾紧急作业用户，即选择优先级高的作业优先调度，采用基于优先级的剥夺调度算法；实现人机交互，要保证每个作业都能在一定时间内轮到，采用时间片轮转调度算法法；使各种作业用户满意，要处理多级反馈，所以选择多级反馈队列调度算法。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_17",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "（）优先级是在创建进程时确定的，确定之后在整个运行期间不再改变。",
      "options": {
        "A": "先来先服务",
        "B": "动态",
        "C": "短作业",
        "D": "静态"
      },
      "answer": [
        "D"
      ],
      "explanation": "优先级调度算法分静态和动态两种。静态优先级在进程创建时确定，之后不再改变。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_18",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "现在有三个同时到达的作业 $\\mathrm{J}_1, \\mathrm{J}_2$ 和 $\\mathrm{J}_3$ ，它们的执行时间分别是 $T_1, T_2, T_3$ ，且 $T_1 < T_2 < T_3$ 。系统按单道方式运行且采用短作业优先调度算法，则平均周转时间是（）。",
      "options": {
        "A": "$T_{1} + T_{2} + T_{3}$",
        "B": "$(3T_{1} + 2T_{2} + T_{3}) / 3$",
        "C": "$(T_{1} + T_{2} + T_{3}) / 3$",
        "D": "$(T_{1} + 2T_{2} + 3T_{3}) / 3$"
      },
      "answer": [
        "B"
      ],
      "explanation": "系统采用短作业优先调度算法，作业的执行顺序为 $\\mathrm{J}_1, \\mathrm{J}_2, \\mathrm{J}_3$ ， $\\mathrm{J}_1$ 的周转时间为 $T_1$ ， $\\mathrm{J}_2$ 的周转时间为 $T_1 + T_2$ ， $\\mathrm{J}_3$ 的周转时间为 $T_1 + T_2 + T_3$ ，则平均周转时间为 $(T_1 + T_1 + T_2 + T_1 + T_2 + T_3) / 3 = (3T_1 + 2T_2 + T_3) / 3$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_19",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "设有三个作业，其运行时间分别是 2h, 5h, 3h，假定它们同时到达，并在同一台处理器上以单道方式运行，则平均周转时间最小的执行顺序是（）。",
      "options": {
        "A": "$J_{1}$ , $J_{2}$ , $J_{3}$",
        "B": "$J_{3}$ , $J_{2}$ , $J_{1}$",
        "C": "$J_{2}$ , $J_{1}$ , $J_{3}$",
        "D": "$J_{1}$ , $J_{3}$ , $J_{2}$"
      },
      "answer": [
        "D"
      ],
      "explanation": "在同一台处理器上以单道方式运行时，要想获得最短的平均周转时间，用短作业优先调度算法会有较好的效果。就本题目而言：选项 A 的平均周转时间 $=(2+7+10)/3h=19/3h$ ；选项 B 的平均周转时间 $=(3+8+10)/3h=7h$ 。选项 C 的平均周转时间 $=(5+7+10)/3h=22/3h$ ；选项 D 的平均周转时间 $=(2+5+10)/3h=17/3h$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_20",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "采用时间片轮转调度算法分配 CPU 时，当处于运行态的进程用完一个时间片后，它的状态是（）状态。",
      "options": {
        "A": "阻塞",
        "B": "运行",
        "C": "就绪",
        "D": "消亡"
      },
      "answer": [
        "C"
      ],
      "explanation": "处于运行态的进程用完一个时间片后，其状态会变为就绪态，等待下一次处理器调度。进程执行完最后的语句并使用系统调用 exit 请求操作系统删除它或出现一些异常情况时，进程才会终止。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_21",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "一个作业 8:00 到达系统，估计运行时间为 1h。若 10:00 开始执行该作业，其响应比是（）。",
      "options": {
        "A": "2",
        "B": "1",
        "C": "3",
        "D": "0.5"
      },
      "answer": [
        "C"
      ],
      "explanation": "$$\n\\text { 响应比 } = \\frac {\\text { 等待时间 } + \\text { 要求服务时间 }}{\\text { 要求服务时间 }} = \\frac {2 + 1}{1} = 3\n$$",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_22",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "关于优先权大小的论述中，正确的是（）。",
      "options": {
        "A": "计算型作业的优先权，应高于 I/O 型作业的优先权",
        "B": "用户进程的优先权，应高于系统进程的优先权",
        "C": "在动态优先权中，随着作业等待时间的增加，其优先权将随之下降",
        "D": "在动态优先权中，随着进程执行时间的增加，其优先权降低"
      },
      "answer": [
        "D"
      ],
      "explanation": "优先级算法中，I/O 繁忙型作业要优于计算繁忙型作业，系统进程的优先权应高于用户进程的优先权。作业的优先权与长作业、短作业或系统资源要求的多少没有必然的关系。在动态优先权中，随着进程执行时间的增加其优先权随之降低，随着作业等待时间的增加其优先权相应上升。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_23",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "下列调度算法中，（）调度算法是绝对可抢占的。",
      "options": {
        "A": "先来先服务",
        "B": "时间片轮转",
        "C": "优先级",
        "D": "短进程优先"
      },
      "answer": [
        "B"
      ],
      "explanation": "时间片轮转调度算法是按固定的时间配额来运行的，时间一到，不管是否完成，当前的进程必须撤下，调度新的进程，因此它是由时间配额决定的、是绝对可抢占的。而优先级算法和短进程优先调度算法都可分为抢占式和不可抢占式。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_24",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "作业是用户提交的，进程是由系统自动生成的，除此之外，两者的区别是（）。",
      "options": {
        "A": "两者执行不同的程序段",
        "B": "前者以用户任务为单位，后者以操作系统控制为单位",
        "C": "前者是批处理的，后者是分时的",
        "D": "后者是可并发执行，前者则不同"
      },
      "answer": [
        "B"
      ],
      "explanation": "作业是从用户角度出发的，它由用户提交，以用户任务为单位；进程是从操作系统出发的，由系统生成，是操作系统的资源分配和独立运行的基本单位。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_25",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "进程调度算法采用固定时间片轮转调度算法，当时间片过大时，就会使时间片轮转调度算法转化为（）调度算法。",
      "options": {
        "A": "高响应比优先",
        "B": "先来先服务",
        "C": "短进程优先",
        "D": "以上选项都不对"
      },
      "answer": [
        "B"
      ],
      "explanation": "时间片轮转调度算法在实际运行中也按先后顺序使用时间片，时间片过大时，我们可以认为其大于进程需要的运行时间，即转换为先来先服务调度算法。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_26",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "有以下的进程需要调度执行（见下表）： <table><tr><td>进程名</td><td>到达时间/h</td><td>运行时间/h</td></tr><tr><td> $P_{1}$ </td><td>0.0</td><td>9</td></tr><tr><td> $P_{2}$ </td><td>0.4</td><td>4</td></tr><tr><td> $P_{3}$ </td><td>1.0</td><td>1</td></tr><tr><td> $P_{4}$ </td><td>5.5</td><td>4</td></tr><tr><td> $P_{5}$ </td><td>7</td><td>2</td></tr></table> 1）若用非抢占式短进程优先调度算法，问这5个进程的平均周转时间是多少？ 2）若采用抢占式短进程优先调度算法，问这5个进程的平均周转时间是多少？",
      "options": {
        "A": "8.62h; 6.34h",
        "B": "8.62h; 6.8h",
        "C": "10.62h; 6.34h",
        "D": "10.62h; 6.8h"
      },
      "answer": [
        "D"
      ],
      "explanation": "对这类题目，我们可以采用广义甘特图来求解，甘特图的画法在1.2节的习题中已经有所介绍。我们直接给出甘特图（见右图），以非抢占为例。\n\n在 0 时刻，进程 $P_{1}$ 到达，于是处理器分配给 $P_{1}$ ，因为是不可抢占的，所以 $P_{1}$ 一旦获得处理器，就会运行直到结束；在时刻 9，所有进程已经到达，根据短进程优先调度，会把处理器分配给 $P_{3}$ ，接下来就是 $P_{5}$ ; 然后, 因为 $P_{2}$ , $P_{4}$ 的预计运行时间一样, 所以在 $P_{2}$ 和 $P_{4}$ 之间用先来先服务调度, 优先把处理器分配给 $P_{2}$ , 最后再分配给 $P_{4}$ , 完成任务。\n\n周转时间 = 完成时间 - 作业到达时间，从图中显然可以得到各进程的完成时间，于是 $P_{1}$ 的周转时间是 9 - 0 = 9h； $P_{2}$ 的周转时间是 16 - 0.4 = 15.6h； $P_{3}$ 的周转时间是 10 - 1 = 9h； $P_{4}$ 的周转时间是 20 - 5.5 = 14.5h； $P_{5}$ 的周转时间是 12 - 7 = 5h；平均周转时间为 $(9 + 15.6 + 9 + 14.5 + 5)/5 = 10.62h$ 。\n\n\n<details>\n<summary>line</summary>\n\n| t  | P1  | P2  | P3  | P4  | P5  |\n|----|-----|-----|-----|-----|-----|\n| 0  |     |     |     |     |     |\n| 9  |     |     |     |     |     |\n| 10 |     |     |     |     |     |\n| 12 |     |     |     |     |     |\n| 16 |     |     |     |     |     |\n| 20 |     |     |     |     |     |\n</details>\n\n同理，抢占式的周转时间也可通过画甘特图求得，而且直观、不易出错。\n\n抢占式的平均周转时间为 6.8h。\n\n甘特图在操作系统中有着广泛的应用，本节习题中会有不少这种类型的题目，若读者按照上面的方法求解，则解题时就可以做到胸有成竹。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_27",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "有 5 个批处理作业 A, B, C, D, E 几乎同时到达，其预计运行时间分别为 10, 6, 2, 4, 8，其优先级（由外部设定）分别为 3, 5, 2, 1, 4，这里 5 为最高优先级。以下各种调度算法中，平均周转时间为 14 的是（）调度算法。",
      "options": {
        "A": "时间片轮转（时间片为 1）",
        "B": "优先级",
        "C": "先来先服务（按照顺序 10, 6, 2, 4, 8）",
        "D": "短作业优先"
      },
      "answer": [
        "D"
      ],
      "explanation": "当这五个批处理作业采用短作业优先调度算法时，平均周转时间 $= [2 + (2 + 4) + (2 + 4 + 6) + (2 + 4 + 6 + 8) + (2 + 4 + 6 + 8 + 10)] / 5 = 14$ 。\n\n这道题主要考查读者对各种优先调度算法的认识。若按照 18 题中的方法求解，则可能要花费一定的时间，但这是值得的，因为可以起到熟练基本方法的效果。在考试中很少会遇到操作量和计算量如此大的题目，所以读者不用担心。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_28",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "使用抢占式最短剩余时间优先调度算法对下列进程进行调度，总周转时间是（）。 <table><tr><td>进程名</td><td>到达时间/h</td><td>运行时间/h</td></tr><tr><td> $P_{1}$ </td><td>0</td><td>3</td></tr><tr><td> $P_{2}$ </td><td>1</td><td>1</td></tr><tr><td> $P_{3}$ </td><td>2</td><td>4</td></tr><tr><td> $P_{4}$ </td><td>3</td><td>5</td></tr><tr><td> $P_{5}$ </td><td>4</td><td>2</td></tr></table>",
      "options": {
        "A": "25h",
        "B": "26h",
        "C": "27h",
        "D": "28h"
      },
      "answer": [
        "C"
      ],
      "explanation": "根据各个进程的到达时间和预计运行时间，画出甘特图如下。由此可知，各个进程的周转时间分别为 4h、1h、8h、12h、2h，所以总周转时间为 $4 + 1 + 8 + 12 + 2 = 27h$ 。\n\n![](images/b78ed8d6d53ad7613f06c2489bf3a34a267ae460ec32dc237c4eef2b42b08926.jpg)\n\n<details>\n<summary>line</summary>\n\n| t/h | P1 | P2 | P3 | P4 | P5 |\n| --- | --- | --- | --- | --- | --- |\n| 0   | 1   |     |     |     |     |\n| 1   |     | 1   |     |     |     |\n| 2   |     |     |     |     |     |\n| 3   |     |     |     |     |     |\n| 4   |     |     |     | 2   |     |\n| 6   |     |     |     |     |     |\n| 7   |     |     |     |     | 4   |\n| 10  |     |     |     |     |     |\n| 15  |     |     |     |     | 5   |\n</details>",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_29",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "假设系统采用多级反馈队列调度算法，系统中设置了三个不同优先级的队列 A、B 和 C，优先级 A > B > C，A 的时间片为 10ms，B 的时间片为 20ms，C 的时间片为 30ms。当 t = 0 时，进程 $P_{1}$ 到达， $P_{1}$ 所需的运行时间为 90ms；当 t = 30ms 时，进程 $P_{2}$ 到达， $P_{2}$ 所需的运行时间为 30ms，不考虑任何其他系统开销，进程 $P_{1}$ 的周转时间为（）。",
      "options": {
        "A": "90ms",
        "B": "100ms",
        "C": "110ms",
        "D": "120ms"
      },
      "answer": [
        "D"
      ],
      "explanation": "新进程总是先进入第一级队列的队尾。在 0～10ms 时段， $P_{1}$ 在队列 A 上运行；在 10～30ms 时段， $P_{1}$ 在队列 B 上运行；当 t=30ms 时， $P_{2}$ 进入队列 A，因此在 30～40ms 时段， $P_{2}$ 在队列 A 上运行；在 40～60ms 时段， $P_{2}$ 在队列 B 上运行，此时 $P_{2}$ 运行结束；最后 $P_{1}$ 在 60～90ms 和 90～120ms 时段内，于队列 C 上运行 2 个时间片，因此 $P_{1}$ 的总周转时间为 120ms。\n\n\n<details>\n<summary>text_image</summary>\n\nP₁ | P₁ | P₂ | P₂ | P₁ | P₁ |\n10 20 10 20 30 30 → t/ms\n</details>",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_30",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "分时操作系统通常采用（）调度算法来为用户服务。",
      "options": {
        "A": "时间片轮转",
        "B": "先来先服务",
        "C": "短作业优先",
        "D": "优先级"
      },
      "answer": [
        "A"
      ],
      "explanation": "分时系统需要同时满足多个用户的需要，因此把处理器时间轮流分配给多个用户作业使用，即采用时间片轮转调度算法。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_31",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "在进程调度算法中，对短进程不利的是（）。",
      "options": {
        "A": "短进程优先调度算法",
        "B": "先来先服务调度算法",
        "C": "高响应比优先调度算法",
        "D": "多级反馈队列调度算法"
      },
      "answer": [
        "B"
      ],
      "explanation": "先来先服务调度算法中，若一个长进程（作业）先到达系统，则会使后面的许多短进程（作业）等待很长的时间，因此对短进程（作业）不利。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_32",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "假设系统中所有进程同时到达，则使进程平均周转时间最短的是（）调度算法。",
      "options": {
        "A": "先来先服务",
        "B": "短进程优先",
        "C": "时间片轮转",
        "D": "优先级"
      },
      "answer": [
        "B"
      ],
      "explanation": "短进程优先调度算法具有最短的平均周转时间。平均周转时间 = 各进程周转时间之和/进程数。因为每个进程的执行时间都是固定的，所以变化的是等待时间，只有短进程优先调度算法能最小化等待时间。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_33",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "多级反馈队列调度算法不具备的特性是（）。",
      "options": {
        "A": "资源利用率高",
        "B": "响应速度快",
        "C": "系统开销小",
        "D": "并发度高"
      },
      "answer": [
        "C"
      ],
      "explanation": "系统开销小不是多级反馈队列调度算法的特性，而正好相反，该算法需要设置多个就绪队列，并且要在不同的队列之间进行进程的转移和抢占，因此增加了系统开销。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_34",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "下列调度算法中，系统开销最小的调度算法是（）。",
      "options": {
        "A": "高响应比优先调度算法",
        "B": "多级反馈队列调度算法",
        "C": "先来先服务调度算法",
        "D": "时间片轮转调度算法"
      },
      "answer": [
        "C"
      ],
      "explanation": "高响应比优先调度算法需根据进程的等待时间和服务时间来计算响应比；多级反馈队列调度算法涉及多个队列的管理，以及进程在队列之间的转移，它们的系统开销都较大。时间片轮转调度算法虽然简单，但它需要为每个进程分配一个固定的时间片，并且在时间片用完时进行上下文切换，因此它的系统开销也不小。先来先服务调度算法是一种最简单的调度算法，它只需按照进程到达的先后顺序进行调度，无须进行任何优先级调度或时间片的判断和分配，故系统开销最小。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_35",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "下列进程调度算法中，可能导致饥饿现象的有（）。 I. 先来先服务调度算法 II. 短作业优先调度算法 III. 优先级调度算法 IV. 时间片轮转调度算法",
      "options": {
        "A": "I 和 II",
        "B": "II 和 III",
        "C": "II、III 和 IV",
        "D": "III"
      },
      "answer": [
        "B"
      ],
      "explanation": "先来先服务调度算法和时间片轮转调度算法都不会出现饥饿现象，因为它们都是按照进程到达的顺序或固定的时间片来调度的，不会因为进程的特征而忽略某些进程。短作业优先调度算法（也可视为一种特殊的优先级算法）和优先级算法都可能出现饥饿现象，因为它们都是根据进程的服务时间或优先级来调度的，这样就可能导致一些长作业或低优先级的进程长期得不到调度。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_36",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "与单处理机调度相比，多处理机调度需要额外考虑的调度目标是（）。 I. 负载平衡 II. 处理器亲和性 III. 进程周转时间",
      "options": {
        "A": "I 和 II",
        "B": "II 和 III",
        "C": "I 和 III",
        "D": "I、II 和 III"
      },
      "answer": [
        "A"
      ],
      "explanation": "多处理机调度需要额外考虑负载平衡和处理器亲和性两个调度目标。负载平衡是指应尽量让每个 CPU 都同等地忙碌，处理器亲和性是指应尽量让一个进程运行在同一个 CPU 上。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_37",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "【2009统考真题】下列进程调度算法中，综合考虑进程等待时间和执行时间的是（）。",
      "options": {
        "A": "时间片轮转调度算法",
        "B": "短进程优先调度算法",
        "C": "先来先服务调度算法",
        "D": "高响应比优先调度算法"
      },
      "answer": [
        "D"
      ],
      "explanation": "响应比 = (等待时间 + 执行时间) / 执行时间。它综合考虑了每个进程的等待时间和执行时间，对于同时到达的长进程和短进程，短进程会优先执行，以提高系统吞吐量；而长进程的响应比可以随等待时间的增加而提高，不会产生进程无法调度的情况。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_38",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "【2010 统考真题】下列选项中，降低进程优先级的合理时机是（）。",
      "options": {
        "A": "进程时间片用完",
        "B": "进程刚完成 I/O 操作，进入就绪队列",
        "C": "进程长期处于就绪队列",
        "D": "进程从就绪态转换为运行态"
      },
      "answer": [
        "A"
      ],
      "explanation": "选项 A 中进程时间片用完，可降低其优先级以让其他进程被调度进入执行状态。选项 B 中进程刚完成 I/O，进入就绪队列等待被 CPU 调度，为了让其尽快处理 I/O 结果，因此应提高优先级。选项 C 中进程长期处于就绪队列，为不至于产生饥饿现象，也应适当提高优先级。选项 D 中进程的优先级不应该在此时降低，而应在时间片用完后再降低。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_39",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "【2011统考真题】下列选项中，满足短作业优先且不会发生饥饿现象的是（）调度算法。",
      "options": {
        "A": "先来先服务",
        "B": "高响应比优先",
        "C": "时间片轮转",
        "D": "非抢占式短作业优先"
      },
      "answer": [
        "B"
      ],
      "explanation": "响应比 = (等待时间 + 执行时间) / 执行时间。高响应比优先调度算法在等待时间相同的情况下，作业执行时间越短，响应比越高，满足短任务优先。随着长作业等待时间的增加，响应比会变大，执行机会也会增大，因此不会发生饥饿现象。先来先服务和时间片轮转不符合短任务优先，非抢占式短任务优先会产生饥饿现象。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_40",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "【2012 统考真题】一个多道批处理系统中仅有 $P_{1}$ 和 $P_{2}$ 两个作业， $P_{2}$ 比 $P_{1}$ 晚 5ms 到达，它的计算和 I/O 操作顺序如下。 $P_{1}$ ：计算 60ms，I/O 80ms，计算 20ms $P_{2}$ : 计算 120ms, I/O 40ms, 计算 40ms 若不考虑调度和切换时间，则完成两个作业需要的时间最少是（）。",
      "options": {
        "A": "240ms",
        "B": "260ms",
        "C": "340ms",
        "D": "360ms"
      },
      "answer": [
        "B"
      ],
      "explanation": "由于 $P_{2}$ 比 $P_{1}$ 晚 5ms 到达， $P_{1}$ 先占用 CPU，作业运行的甘特图如下。\n\n\nCPU 和 I/O 的一种最短完成时间安排如下：\n\n| 时间段/ms | CPU | I/O |\n|---|---|---|\n| 0～60 | P1 第一次计算 | - |\n| 60～140 | P2 第一次计算的一部分 | P1 I/O |\n| 140～180 | P2 第一次计算的剩余部分 | - |\n| 180～200 | P1 第二次计算并完成 | P2 I/O 的一部分 |\n| 200～220 | CPU 空闲 | P2 I/O 的剩余部分 |\n| 220～260 | P2 第二次计算并完成 | - |\n\n因此两个作业全部完成的最短时间是 260ms。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_41",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "【2012 统考真题】若某单处理器多进程系统中有多个就绪态进程，则下列关于处理机调度的叙述中，错误的是（）。",
      "options": {
        "A": "在进程结束时能进行处理机调度",
        "B": "创建新进程后能进行处理机调度",
        "C": "在进程处于临界区时不能进行处理机调度",
        "D": "在系统调用完成并返回用户态时能进行处理机调度"
      },
      "answer": [
        "C"
      ],
      "explanation": "选项 A、B、D 显然属于可以进行 CPU 调度的情况。对于选项 C，处于临界区的进程也可能因中断或抢占而导致调度，此外，若进程在临界区内请求的是一个需要等待的资源，比如打印机，则它主动放弃 CPU，让其他进程运行。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_42",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "【2013 统考真题】某系统正在执行三个进程 $\\mathrm{P}_1, \\mathrm{P}_2$ 和 $\\mathrm{P}_3$ ，各进程的计算（CPU）时间和 I/O 时间比例如下表所示。 <table><tr><td>进程名</td><td>计算时间</td><td>I/O 时间</td></tr><tr><td> $P_{1}$ </td><td>90%</td><td>10%</td></tr><tr><td> $P_{2}$ </td><td>50%</td><td>50%</td></tr><tr><td> $P_{3}$ </td><td>15%</td><td>85%</td></tr></table> 为提高系统资源利用率，合理的进程优先级设置应为（）。",
      "options": {
        "A": "$P_{1} > P_{2} > P_{3}$",
        "B": "$P_{3} > P_{2} > P_{1}$",
        "C": "$P_{2} > P_{1} = P_{3}$",
        "D": "$P_{1} > P_{2} = P_{3}$"
      },
      "answer": [
        "B"
      ],
      "explanation": "为了合理地设置进程优先级，应综合考虑进程的 CPU 时间和 I/O 时间。对于优先级调度算法，一般来说，I/O 型作业的优先权高于计算型作业的优先权，这是由于 I/O 操作需要及时完成，它没有办法长时间地保存所要输入/输出的数据，所以考虑到系统资源利用率，要选择 I/O 繁忙型作业\n\n有更高的优先级。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_43",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "【2014 统考真题】下列调度算法中，不可能导致饥饿现象的是（）。",
      "options": {
        "A": "时间片轮转",
        "B": "静态优先数调度",
        "C": "非抢占式短任务优先",
        "D": "抢占式短任务优先"
      },
      "answer": [
        "A"
      ],
      "explanation": "采用静态优先级调度且系统总是出现优先级高的任务时，优先级低的任务总是得不到 CPU 而产生饥饿现象；而短任务优先调度不管是抢占式的还是非抢占的，当系统总是出现新来的短任务时，长任务会总是得不到 CPU，产生饥饿现象，因此选项 B、C、D 都错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_44",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "【2016 统考真题】某单 CPU 系统中有输入和输出设备各 1 台，现有 3 个并发执行的作业，每个作业的输入、计算和输出时间均分别为 2ms, 3ms 和 4ms，且都按输入、计算和输出的顺序执行，则执行完 3 个作业需要的时间最少是（）。",
      "options": {
        "A": "15ms",
        "B": "17ms",
        "C": "22ms",
        "D": "27ms"
      },
      "answer": [
        "B"
      ],
      "explanation": "这类调度题目最好画图。因 CPU、输入设备、输出设备都只有一个，因此各操作步骤不能重叠，画出运行时的甘特图后，就能清楚地看到不同作业间的时序关系，如下图所示。\n\n<table><tr><td>作业\\时间</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td></tr><tr><td>1</td><td colspan=\"2\">输入</td><td colspan=\"3\">计算</td><td colspan=\"4\">输出</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>2</td><td></td><td></td><td colspan=\"2\">输入</td><td></td><td colspan=\"3\">计算</td><td></td><td colspan=\"4\">输出</td><td></td><td></td><td></td><td></td></tr><tr><td>3</td><td></td><td></td><td></td><td></td><td colspan=\"2\">输入</td><td></td><td></td><td colspan=\"3\">计算</td><td></td><td></td><td colspan=\"4\">输出</td></tr></table>",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_45",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "【2017 统考真题】假设 4 个作业到达系统的时刻和运行时间如下表所示。 <table><tr><td>作业号</td><td>到达时刻t</td><td>运行时间</td></tr><tr><td> $J_{1}$ </td><td>0</td><td>3</td></tr><tr><td> $J_{2}$ </td><td>1</td><td>3</td></tr><tr><td> $J_{3}$ </td><td>1</td><td>2</td></tr><tr><td> $J_{4}$ </td><td>3</td><td>1</td></tr></table> 系统在 t = 2 时开始作业调度。若分别采用先来先服务和短作业优先调度算法，则选中 的作业分别是（）。",
      "options": {
        "A": "$J_{2}, J_{3}$",
        "B": "$J_{1}, J_{4}$",
        "C": "$J_{2}, J_{4}$",
        "D": "$J_{1}, J_{3}$"
      },
      "answer": [
        "D"
      ],
      "explanation": "注意，系统是在 t=2 时开始作业调度的，此时 $J_{4}$ 还没有到达。FCFS 调度算法的特点是作业来得越早，优先级就越高，因此选择 $J_{1}$ 。SJF 调度算法的特点是作业运行时间越短，优先级就越高，因此选择 $J_{3}$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_46",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 46,
      "type": "single_choice",
      "question": "【2017统考真题】下列有关基于时间片的进程调度的叙述中，错误的是（）。",
      "options": {
        "A": "时间片越短，进程切换的次数越多，系统开销越大",
        "B": "当前进程的时间片用完后，该进程状态由运行态变为阻塞态",
        "C": "时钟中断发生后，系统会修改当前进程在时间片内的剩余时间",
        "D": "影响时间片大小的主要因素包括响应时间、系统开销和进程数量等"
      },
      "answer": [
        "B"
      ],
      "explanation": "进程切换带来系统开销，切换次数越多，开销就越大，选项 A 正确。当前进程的时间片用完后，其状态由运行态变为就绪态，选项 B 错误。时钟中断是系统中特定的周期性时钟节拍，操作系统通过它来确定时间间隔，实现时间的延时和任务的超时，选项 C 正确。现代操作系统为了保证性能最优，通常根据响应时间、系统开销、进程数量、进程运行时间等因素确定时间片大小，选项 D 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_47",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 47,
      "type": "single_choice",
      "question": "【2018统考真题】某系统采用基于优先权的非抢占式进程调度策略，完成一次进程调度和进程切换的系统时间开销为 $1\\mu \\mathrm{s}$ 。在 $T$ 时刻就绪队列中有3个进程 $\\mathrm{P_1}$ 、 $\\mathrm{P_2}$ 和 $\\mathrm{P_3}$ ，其在就绪队列中的等待时间、需要的CPU时间和优先权如下表所示。 <table><tr><td>进程名</td><td>等待时间</td><td>需要的CPU时间</td><td>优先权</td></tr><tr><td> $P_1$ </td><td>30μs</td><td>12μs</td><td>10</td></tr><tr><td> $P_2$ </td><td>15μs</td><td>24μs</td><td>30</td></tr><tr><td> $P_3$ </td><td>18μs</td><td>36μs</td><td>20</td></tr></table> 若优先权值大的进程优先获得 CPU，从 T 时刻起系统开始进程调度，则系统的平均周转时间为（）。",
      "options": {
        "A": "$54\\mu s$",
        "B": "$73\\mu s$",
        "C": "$74\\mu s$",
        "D": "$75\\mu s$"
      },
      "answer": [
        "D"
      ],
      "explanation": "由优先权可知，进程的执行顺序为 $P_{2} \\rightarrow P_{3} \\rightarrow P_{1}$ 。 $P_{2}$ 的周转时间为 $1 + 15 + 24 = 40\\mu s$ ； $P_{3}$ 的周转时间为 $18 + 1 + 24 + 1 + 36 = 80\\mu s$ ； $P_{1}$ 的周转时间为 $30 + 1 + 24 + 1 + 36 + 1 + 12 = 105\\mu s$ ；平均周转时间为 $(40 + 80 + 105)/3 = 225/3 = 75\\mu s$ ，因此选择选项 D。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_48",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 48,
      "type": "single_choice",
      "question": "【2019 统考真题】系统采用二级反馈队列调度算法进行进程调度。就绪队列 $Q_{1}$ 采用时间片轮转调度算法，时间片为 10ms；就绪队列 $Q_{2}$ 采用短进程优先调度算法；系统优先调度 $Q_{1}$ 队列中的进程，当 $Q_{1}$ 为空时系统才会调度 $Q_{2}$ 中的进程；新创建的进程首先进入 $Q_{1}$ ； $Q_{1}$ 中的进程执行一个时间片后，若未结束，则转入 $Q_{2}$ 。若当前 $Q_{1}$ ， $Q_{2}$ 为空，系统依次创建进程 $P_{1}$ ， $P_{2}$ 后即开始进程调度， $P_{1}$ ， $P_{2}$ 需要的 CPU 时间分别为 30ms 和 20ms，则进程 $P_{1}$ ， $P_{2}$ 在系统中的平均等待时间为（）。",
      "options": {
        "A": "25ms",
        "B": "20ms",
        "C": "15ms",
        "D": "10ms"
      },
      "answer": [
        "C"
      ],
      "explanation": "进程 $P_{1}$ 和 $P_{2}$ 依次创建后进入队列 $Q_{1}$ ，根据时间片调度算法的规则，进程 $P_{1}$ 和 $P_{2}$ 将依次被分配 10ms 的 CPU 时间，两个进程分别执行完一个时间片后都会被转入队列 $Q_{2}$ ，就绪队列 $Q_{2}$ 采用短进程优先调度算法，此时 $P_{1}$ 还需要 20ms 的 CPU 时间， $P_{2}$ 还需要 10ms 的 CPU 时间，所以$P_{2}$ 会被优先调度执行，10ms后进程 $P_{2}$ 执行完成，之后 $P_{1}$ 再调度执行，再过20ms后 $P_{1}$ 也执行完成。运行图表述如右。\n\n进程 $P_{1}$ 、 $P_{2}$ 的等待时间分别为图中的虚横线部分，平均等待时间= $(P_{1}$ 的等待时间 + $P_{2}$ 的等待时间)/2 = (20 + 10)/2 = 15，因此答案选 C。\n\n\n<details>\n<summary>line</summary>\n\n| CPU时间/ms | P1  | P2  |\n| ---------- | --- | --- |\n| 10         | P1  |     |\n| 30         |     | P2  |\n| 50         |     |     |\n</details>",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_49",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 49,
      "type": "single_choice",
      "question": "【2020 统考真题】下列与进程调度有关的因素中，在设计多级反馈队列调度算法时需要考虑的是（）。 I. 就绪队列的数量 II. 就绪队列的优先级 III. 各就绪队列的调度算法 IV. 进程在就绪队列间的迁移条件",
      "options": {
        "A": "仅 I、II",
        "B": "仅 III、IV",
        "C": "仅 II、III、IV",
        "D": "I、II、III 和 IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "多级反馈队列调度算法需要综合考虑优先级数量、优先级之间的转换规则等，就绪队列的数量会影响长进程的最终完成时间，说法 I 正确；就绪队列的优先级会影响进程执行的顺序，说法 II 正确；各就绪队列的调度算法会影响各队列中进程的调度顺序，说法 III 正确；进程在就绪队列中的迁移条件会影响各进程在各队列中的执行时间，说法 IV 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_50",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 50,
      "type": "single_choice",
      "question": "【2021统考真题】在下列内核的数据结构或程序中，分时系统实现时间片轮转调度需要使用的是（）。 I. 进程控制块 II. 时钟中断处理程序 III. 进程就绪队列 IV. 进程阻塞队列",
      "options": {
        "A": "仅 II、III",
        "B": "仅 I、IV",
        "C": "仅 I、II、III",
        "D": "仅 I、II、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "时钟中断处理程序是一种特殊的中断处理程序，它负责在每个时钟周期结束时执行一些操作，如内核中时钟变量的值、当前进程占用 CPU 的时间、当前进程在时间片内的剩余执行时间。时钟中断处理程序的触发条件是系统定时器（一种可编程的硬件芯片）以固定的频率（称为节拍率）产生一个中断信号，通知 CPU 进行中断处理。在分时系统的时间片轮转调度中，当时钟中断处理程序检查到当前进程的时间片用完时，就触发进程调度，调度程序从就绪队列中选择一个进程为其分配时间片，并且修改该进程的进程控制块中的进程状态等信息，同时将时间片用完的进程放入就绪队列或让其结束运行，说法 I、II、III 正确。阻塞队列中的进程只有被唤醒并进入就绪队列后，才能参与调度，所以该调度过程不使用阻塞队列。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_51",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 51,
      "type": "single_choice",
      "question": "【2021统考真题】下列事件中，可能引起进程调度程序执行的是（）。 I. 中断处理结束 II. 进程阻塞 III. 进程执行结束 IV. 进程的时间片用完",
      "options": {
        "A": "仅 I、III",
        "B": "仅 II、IV",
        "C": "仅 III、IV",
        "D": "I、II、III 和 IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "中断处理阶段运行的是中断处理程序，中断处理结束后，需要返回原程序或重新选择程序运行，而后者需要进行进程调度，例如在时间片轮转调度中，时钟中断处理结束后，若当前进程的时间片用完，则会发生进程调度。当前进程阻塞时，将其放入阻塞队列，若就绪队列不空，则调度新进程执行。进程执行结束会导致当前进程释放 CPU，并从就绪队列中选择一个进程获得 CPU。进程时间片用完，会导致当前进程让出 CPU，同时选择就绪队列的队首进程获得 CPU。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_52",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 52,
      "type": "single_choice",
      "question": "【2022 统考真题】进程 $P_{0}$ 、 $P_{1}$ 、 $P_{2}$ 和 $P_{3}$ 进入就绪队列的时刻、优先级（值越小优先权越高）及 CPU 执行时间如下表所示。 <table><tr><td>进程名</td><td>进入就绪队列的时刻</td><td>优先级</td><td>CPU执行时间</td></tr><tr><td> $P_{0}$ </td><td>0ms</td><td>15</td><td>100ms</td></tr><tr><td> $P_{1}$ </td><td>10ms</td><td>20</td><td>60ms</td></tr><tr><td> $P_{2}$ </td><td>10ms</td><td>10</td><td>20ms</td></tr><tr><td> $P_{3}$ </td><td>15ms</td><td>6</td><td>10ms</td></tr></table> 若系统采用基于优先权的抢占式进程调度算法，则从 0ms 时刻开始调度，到 4 个进程都运行结束为止，发生进程调度的总次数为（）。",
      "options": {
        "A": "4",
        "B": "5",
        "C": "6",
        "D": "7"
      },
      "answer": [
        "C"
      ],
      "explanation": "需要注意的是，在0时刻， $P_{0}$ 获得CPU也是一次进程调度，所以0时刻调度进程 $P_{0}$ 获得CPU；10ms时 $P_{2}$ 进入就绪队列，调度 $P_{2}$ 抢占获得CPU；15ms时 $P_{3}$ 进入就绪队列，调度 $P_{3}$ 抢占获得CPU；25ms时 $P_{3}$ 执行完毕，调度 $P_{2}$ 获得CPU；40ms时 $P_{2}$ 执行完毕，调度 $P_{0}$ 获得CPU；130ms时 $P_{0}$ 执行完毕，调度 $P_{1}$ 获得CPU；190ms时 $P_{1}$ 执行完毕，结束；总共调度6次。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_53",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 53,
      "type": "single_choice",
      "question": "【2023统考真题】进程 $\\mathrm{P_1}$ 、 $\\mathrm{P_2}$ 和 $\\mathrm{P_3}$ 进入就绪队列的时刻、优先级（值越大优先权越高）和CPU执行时间如下表所示。 <table><tr><td>进程名</td><td>进入就绪队列的时刻</td><td>优先级</td><td>CPU执行时间</td></tr><tr><td> $P_{1}$ </td><td>0ms</td><td>1</td><td>60ms</td></tr><tr><td> $P_{2}$ </td><td>20ms</td><td>10</td><td>42ms</td></tr><tr><td> $P_{3}$ </td><td>30ms</td><td>100</td><td>13ms</td></tr></table> 若系统采用基于优先权的抢占式CPU调度算法，从0ms时刻开始进行调度，则 $\\mathrm{P_1}$ 、 $\\mathrm{P_2}$ 和 $\\mathrm{P_3}$ 的平均周转时间为（）。",
      "options": {
        "A": "60ms",
        "B": "61ms",
        "C": "70ms",
        "D": "71ms"
      },
      "answer": [
        "B"
      ],
      "explanation": "采用抢占式优先级调度算法，三个作业的执行顺序如右图所示。\n\n周转时间 = 完成时间 - 到达时间。 $P_{1}$ 的周转时间 = 115 - 0 = 115ms； $P_{2}$ 的周转时间 = 75 - 20 = 55ms； $P_{3}$ 的周转时间 = 43 - 30 = 13ms，所以平均周转时间 = $(115 + 55 + 13)/3 = 61ms$ 。\n\n\n<details>\n<summary>line</summary>\n\n| t   | P1  | P2  | P3  |\n| --- | --- | --- | --- |\n| 0   | 1   | -   | -   |\n| 20  | 1   | 2   | -   |\n| 30  | -   | -   | 3   |\n| 43  | -   | -   | -   |\n| 75  | -   | -   | -   |\n| 115 | -   | -   | -   |\n</details>",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_54",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 54,
      "type": "single_choice",
      "question": "【2024 统考真题】假设某系统使用时间片轮转调度算法进行 CPU 调度，时间片大小为 5ms，系统共有 10 个进程，初始时均处于就绪队列，执行结束前仅处于运行态或就绪态。若队尾的进程 P 所需的 CPU 时间最短，时间为 25ms，不考虑系统开销，则进程 P 的周转时间为（）。",
      "options": {
        "A": "200ms",
        "B": "205ms",
        "C": "250ms",
        "D": "295ms"
      },
      "answer": [
        "C"
      ],
      "explanation": "系统使用时间片轮转调度算法，最初共有10个进程处于就绪队列，进程P处于队尾，时间片大小为5ms。假设当 $t = 0$ 时开始进程调度，就绪队列的前9个进程依次运行一个时间片，则当 $t = 45\\mathrm{ms}$ 时调度进程P运行，运行5ms后，当 $t = 50\\mathrm{ms}$ 时又开始新一轮循环。进程P所需的CPU时间为25ms，共需5轮循环，其他进程所需的CPU时间都比进程P的长，这5轮循环中其余9个进程都不会运行结束，因此进程P的周转时间为 $50\\times 5 = 250\\mathrm{ms}$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_55",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 55,
      "type": "single_choice",
      "question": "【2024 统考真题】在支持页式存储管理的系统中，进程切换时操作系统需要执行的操作是（）。 I. 更新程序计数器的值 II. 更新栈基址寄存器的值 III. 更新页表基地址寄存器的值",
      "options": {
        "A": "仅 III",
        "B": "仅 I、II",
        "C": "仅 I、III",
        "D": "I、II、III"
      },
      "answer": [
        "D"
      ],
      "explanation": "进程切换时，需要进行上下文切换，主要完成：① 将当前 CPU 中各寄存器的内容保存到当前进程的 PCB 中；② 将新进程的现场信息装入 CPU 的各个寄存器。③ 将控制转至新进程执行，即更新程序计数器（PC）的值。栈基址寄存器用来指明系统内核栈位置的寄存器，页表基址寄存器用来指明当前进程顶级页表基地址的寄存器，属于进程控制信息。因此，说法 I、II、III 均需要更新。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_56",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 56,
      "type": "single_choice",
      "question": "【2025 统考真题】在某基于优先权的进程调度程序中，进程就绪队列采用优先权从高到低的有序单链表实现。若就绪队列长度为 n，则就绪队列的插入操作和从就绪队列中选出将要执行进程的操作的时间复杂度分别是（）。",
      "options": {
        "A": "$O(1)$ , $O(1)$",
        "B": "$O(1), O(n)$",
        "C": "$O(n)$ , $O(1)$",
        "D": "$O(n)$ , $O(n)$"
      },
      "answer": [
        "C"
      ],
      "explanation": "在该调度系统中，就绪队列采用按优先权从高到低排序的有序单链表实现。插入新进程时，为维持链表的有序性，需要从表头开始顺序查找，直至找到首个优先权不高于待插入进程的结点，并在其前插入；最坏情况下需要遍历整个链表，时间复杂度为 $O(n)$ 。由于最高优先权的进程始终位于链表头部，调度程序只需访问头结点即可获得下一个待执行的进程，无须额外搜索，因此选择进程的操作时间复杂度为 $O(1)$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-2-8_57",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.2.8",
      "section_title": "本节试题精选",
      "num": 57,
      "type": "single_choice",
      "question": "【2025 统考真题】在采用页式虚拟存储管理方式的系统中，当发生进程上下文切换时，在下列寄存器中，操作系统不需要更新的是（）。",
      "options": {
        "A": "通用寄存器",
        "B": "页表基址寄存器",
        "C": "程序计数器",
        "D": "内核中断向量表基址寄存器"
      },
      "answer": [
        "D"
      ],
      "explanation": "进程上下文切换需要隔离各进程的执行环境，并确保新进程正确恢复运行，因此必须更新当前进程的上下文。通用寄存器和程序计数器属于典型的进程私有状态：前者保存临时数据，后者指向下一条指令地址，两者都必须在切换时保存和恢复。页表基址寄存器存放当前进程页表的物理起始地址。在页式系统中，每个进程都拥有独立的虚拟地址空间和页表，切换时必须更新该寄存器，以激活新进程的地址映射。内核中断向量表基址寄存器指向操作系统内核维护的中断处理入口表，该表是全局共享的系统资源，用于响应中断和异常，其内容由内核统一管理，不随用户进程变化，因此在进程上下文切换时无须更新。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_30",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "对信号量 S 执行 P 操作后，使该进程进入资源等待队列的条件是（）。",
      "options": {
        "A": "S.value < 0",
        "B": "S.value <= 0",
        "C": "S.value > 0",
        "D": "S.value $>= 0$"
      },
      "answer": [
        "A"
      ],
      "explanation": "参见记录型信号量的介绍。此处极易出关于 S.value 的概念题，总结如下：① S.value > 0，表示某类可用资源的数量。每次 P 操作，意味着请求分配一个单位的资源。② S.value ≤ 0，表示某类资源已无可用，且存在因请求该资源而被阻塞的进程，S.value 的绝对值表示等待进程数量。\n\n一定要看清题目中的陈述是执行 P 操作前还是执行 P 操作后。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_32",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "有一个计数信号量 S: 1）假如若干进程对 S 进行 28 次 P 操作和 18 次 V 操作后，信号量 S 的值为 0。 2）假如若干进程对信号量 $S$ 进行了15次P操作和2次V操作。请问此时有多少个进程等待在信号量 $S$ 的队列中？（）",
      "options": {
        "A": "2",
        "B": "3",
        "C": "5",
        "D": "7"
      },
      "answer": [
        "B"
      ],
      "explanation": "对 S 进行了 28 次 P 操作和 18 次 V 操作，即 $S-28+18=0$ ，得信号量的初值为 10；然后，对信号量 S 进行了 15 次 P 操作和 2 次 V 操作，即 $S-15+2=10-15+2=-3$ ，S 信号量的负值的绝对值表示等待队列中的进程数。所以有 3 个进程等待在信号量 S 的队列中。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_33",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "有两个并发进程 $\\mathrm{P}_{1}$ 和 $\\mathrm{P}_{2}$ , 其程序代码如下: ```awk P1 () { x=1;    //A1 y=2; z=x+y; print z;    //A2 } P2 () { x=-3;    //B1 c=x*x; print c;    //B2 } ``` 可能打印出的 z 值有（），可能打印出的 c 值有（）（其中 x 为 $P_{1}, P_{2}$ 的共享变量）。",
      "options": {
        "A": "z = 1, -3; c = -1, 9",
        "B": "z = -1, 3; c = 1, 9",
        "C": "z = -1, 3, 1; c = 9",
        "D": "z = 3; c = 1, 9"
      },
      "answer": [
        "B"
      ],
      "explanation": "本题的关键是，输出语句 A2, B2 中读取的 x 的值不同，由于 A1, B1 执行有先后问题，使得在执行 A2, B2 前，x 的可能取值有两个，即 1, -3；这样，输出 z 的值可能是 $1 + 2 = 3$ 或 $(-3) + 2 = -1$ ；输出 c 的值可能是 $1 \\times 1 = 1$ 或 $(-3)(-3) = 9$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_34",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "并发进程之间的关系是（）。",
      "options": {
        "A": "无关的",
        "B": "相关的",
        "C": "可能相关的",
        "D": "可能是无关的，也可能是有交往的"
      },
      "answer": [
        "D"
      ],
      "explanation": "并发进程之间的关系没有必然的要求，只有执行时间上的偶然重合，可能无关也可能有交往。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_35",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "若系统中有 4 个进程共享 3 台打印机，采用信号量机制控制打印机的共享使用，则信号量的取值范围是（）。",
      "options": {
        "A": "$[-1,4]$",
        "B": "$[-2, 2]$",
        "C": "$[-1,3]$",
        "D": "$[-3,2]$"
      },
      "answer": [
        "C"
      ],
      "explanation": "信号量的初值表示该类资源的总数，因此信号量的初值取3。每分配一个该类资源，信号量减1，当信号量等于0时，表示该类资源刚好被分完；当信号量小于0时，表示还有进程正在等待该类资源，信号量的绝对值就是等待进程的数量。因此，当没有进程使用时，信号量最大为3；当有三个进程正在使用并有一个进程在等待时，信号量最小为-1。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_36",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "两个进程 $P_{0}$ 、 $P_{1}$ 互斥的 Peterson 算法描述如下: ```txt 进程 P0 flag[0]=1; (1); while (flag[1] && turn==1); 临界区； flag[0]=0; 其余代码； 进程 P1 flag[1]=1; (2); while (flag[0] && turn==0); 临界区； flag[1]=0; 其余代码； ``` 其中，(1)和(2)处的代码分别为（）。",
      "options": {
        "A": "turn = 0, turn = 0",
        "B": "turn = 0, turn = 1",
        "C": "turn = 1, turn = 0",
        "D": "turn = 1, turn = 1"
      },
      "answer": [
        "C"
      ],
      "explanation": "根据 Peterson 算法的原理，可知(1)和(2)处分别为 turn = 1 和 turn = 0。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_37",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "在 Peterson 算法中，flag 数组的作用是（）。",
      "options": {
        "A": "表示每个线程是否想进入临界区",
        "B": "表示每个线程是否已进入临界区",
        "C": "表示每个线程是否已退出临界区",
        "D": "表示每个线程是否已完成任务"
      },
      "answer": [
        "A"
      ],
      "explanation": "flag 数组用于标记各个线程想进入临界区的意愿。当一个线程想要进入临界区时，它将自己对应的 flag 值置为 true；当一个线程退出临界区时，它将自己对应的 flag 值置为 false。这样，若两个进程都争着想进入临界区，则可以让进程将进入临界区的机会谦让给对方。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_38",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "在 Peterson 算法中，turn 变量的作用是（）。",
      "options": {
        "A": "表示轮到哪个线程进入临界区",
        "B": "表示哪个线程先发出访问请求",
        "C": "表示哪个线程后发出访问请求",
        "D": "表示哪个线程已进入临界区"
      },
      "answer": [
        "A"
      ],
      "explanation": "turn 变量用于指示允许进入临界区的线程编号。当一个线程想要进入临界区时，它将 turn 置为对方的编号，表示优先让对方先进入。当一个线程检查到对方的 flag 为 true 时，表示对方也想进入，这时就需要根据 turn 来决定谁先进入。若 turn 等于自己的编号，表示轮到自己进入，则可以直接进入。若 turn 等于对方的编号，表示轮到对方进入，则需等待对方退出。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_39",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "生产者-消费者问题用于解决（）。",
      "options": {
        "A": "多个进程共享一个数据对象的问题",
        "B": "多个进程之间的同步和互斥问题",
        "C": "多个进程共享资源的死锁与饥饿问题",
        "D": "利用信号量实现多个进程并发的问题"
      },
      "answer": [
        "B"
      ],
      "explanation": "进程并发带来问题不仅包括同步互斥问题，还包括死锁等其他问题。生产者-消费者问题用于解决进程的同步和互斥问题。共享一个数据对象仅涉及互斥访问的问题。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_40",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "所有的消费者必须等待生产者先运行的前提条件是（）。",
      "options": {
        "A": "缓冲区空",
        "B": "缓冲区满",
        "C": "缓冲区不可用",
        "D": "缓冲区半空"
      },
      "answer": [
        "A"
      ],
      "explanation": "当缓冲区为空时，消费者进程取产品会被阻塞，此时需等待生产者进程生产新产品。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_41",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "下列关于生产者-消费者问题的唤醒操作的说法中，正确的是（）。 I. 生产者唤醒其他生产者 II. 生产者唤醒消费者 III. 消费者唤醒其他消费者 IV. 消费者唤醒生产者",
      "options": {
        "A": "I 和 II",
        "B": "III 和 IV",
        "C": "II 和 III",
        "D": "I、II、III 和 IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "生产者和消费者共享缓冲区，每次只允许一个生产者或消费者进入缓冲区，当有一个生产者或消费者进入缓冲区时，其他生产者或消费者就必须阻塞等待。因此，生产者有可能唤醒其他生产者或消费者，消费者也有可能唤醒其他生产者或消费者，四个选项均正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_42",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "在 9 个生产者、6 个消费者共享容量为 8 的缓冲区的生产者-消费者问题中，互斥使用缓冲区的信号量初始值为（）。",
      "options": {
        "A": "1",
        "B": "6",
        "C": "8",
        "D": "9"
      },
      "answer": [
        "A"
      ],
      "explanation": "所谓互斥使用某临界资源，是指在同一时间段只允许一个进程使用此资源，所以互斥信号量的初值都为1。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_43",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "消费者进程阻塞在 wait(m)（m 是互斥信号量）的条件是（）。 I. 没有空缓冲区 II. 没有满缓冲区 III. 有其他生产者已进入临界区 IV. 有其他消费者已进入临界区",
      "options": {
        "A": "I 和 II",
        "B": "III 和 IV",
        "C": "I 和 III",
        "D": "II 和 IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "在生产者-消费者问题中，每次只能有一个生产者或消费者进入缓冲区，需要用一个互斥信号量来控制，当有一个生产者或消费者进入缓冲区时，其他申请进入缓冲区的消费者会被阻塞。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_44",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "在读者-写者问题中，能同时执行的是（）。",
      "options": {
        "A": "读者和写者",
        "B": "不同的写者",
        "C": "不同的读者",
        "D": "都不能"
      },
      "answer": [
        "C"
      ],
      "explanation": "在读者-写者问题中，写者和写者之间、写者和读者之间必须互斥访问共享对象，读者和读者之间则可以同时访问。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_45",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "哲学家就餐问题的解决方案如下: ```txt semaphore *chopstick[5]; semaphore *seat; 哲学家 i: ... P (seat); P (chopStick[i]); P (chopStick[(i+1)%5]); 吃饭 V (chopStick[i]); V (chopStick[(i+1)%5]); V (seat) ``` 其中，信号量 seat 的初值最大为（）。",
      "options": {
        "A": "0",
        "B": "1",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "C"
      ],
      "explanation": "信号量 seat 表示桌子上可以坐下的位置数，因为只有五个位置，所以每次只能有四位哲学家同时拿起左边的餐叉，才能保证不会发生死锁，所以 seat 的初值应该为 4。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_46",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 46,
      "type": "single_choice",
      "question": "有两个优先级相同的并发程序 $\\mathrm{P}_1$ 和 $\\mathrm{P}_2$ ，它们的执行过程如下所示。假设当前信号量 $s1 = 0$ ， $s2 = 0$ 。当前的 $z = 2$ ，进程运行结束后， $x, y$ 和 $z$ 的值分别是（）。 进程 $\\mathbb{P}_1$ ```matlab ... y:=1; y:=y+2; z:=y+1; V(s1); P(s2); ``` 进程 $\\mathbb{P}_2$ ```matlab ... x:=1 x:=x+1; P(s1); x:=x+y; z:=x+z; ``` $$ \\begin{array}{l} \\mathrm {y: = z + y;} \\\\ \\dots \\end{array} $$ $$ \\begin{array}{l} \\text {V(s2) ;} \\\\ \\dots \\end{array} $$",
      "options": {
        "A": "5,9,9",
        "B": "5, 9, 4",
        "C": "5, 12, 9",
        "D": "5, 12, 4"
      },
      "answer": [
        "C"
      ],
      "explanation": "因为进程并发，所以进程的执行具有不确定性，在 $P_{1}, P_{2}$ 执行到第一个 P, V 操作前，应该是相互无关的。现在考虑第一个对 $s_{1}$ 的 P, V 操作，因为进程 $P_{2}$ 是 $\\mathrm{P}(s_{1})$ 操作，所以它必须等待 $P_{1}$ 执行完 $\\mathrm{V}(s_{1})$ 操作后才可继续运行，此时的 x, y, z 值分别是 2, 3, 4，当进程 $P_{1}$ 执行完 $\\mathrm{V}(s_{1})$ 后便在 $\\mathrm{P}(s_{2})$ 上阻塞，此时 $P_{2}$ 可以运行直到 $\\mathrm{V}(s_{2})$ ，此时的 x, y, z 值分别是 5, 3, 9，进程 $P_{1}$ 继续运行到结束，最终的 x, y, z 值分别为 5, 12, 9。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_47",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 47,
      "type": "single_choice",
      "question": "【2010 统考真题】设与某资源关联的信号量初值为 3，当前值为 1。若 M 表示该资源的可用个数，N 表示等待该资源的进程数，则 M, N 分别是（）。",
      "options": {
        "A": "0,1",
        "B": "1,0",
        "C": "1,2",
        "D": "2,0"
      },
      "answer": [
        "B"
      ],
      "explanation": "信号量表示相关资源的当前可用数量。当信号量 K > 0 时，表示还有 K 个相关资源可用，所以该资源的可用个数是 1。而当信号量 K < 0 时，表示有 |K| 个进程在等待该资源。因为资源有剩余，可见没有其他进程等待使用该资源，所以进程数为 0。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_48",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 48,
      "type": "single_choice",
      "question": "【2010 统考真题】进程 $P_{0}$ 和进程 $P_{1}$ 的共享变量定义及其初值为: ```javascript boolean flag[2]; int turn=0; flag[0]=false; flag[1]=false; ``` 若进程 $P_{0}$ 和进程 $P_{1}$ 访问临界资源的类 C 代码实现如下: void P0() //进程 $P_0$ void P1() //进程 $P_1$ { while(true) { { flag[0] = true;turn=1; while(flag[1] && (turn==1)); while(flag[0] && (turn==0)); 临界区； flag[0] = false; } } } 则并发执行进程 $P_{0}$ 和进程 $P_{1}$ 时产生的情况是（）。",
      "options": {
        "A": "不能保证进程互斥进入临界区，会出现“饥饿”现象",
        "B": "不能保证进程互斥进入临界区，不会出现“饥饿”现象",
        "C": "能保证进程互斥进入临界区，会出现“饥饿”现象",
        "D": "能保证进程互斥进入临界区，不会出现“饥饿”现象"
      },
      "answer": [
        "D"
      ],
      "explanation": "这是 Peterson 算法的实际实现，保证进入临界区的进程合理安全。该算法为了防止两个进程为进入临界区而无限期等待，设置了变量 turn，表示允许进入临界区的编号，每个进程在先设置自己的标志后再设置 turn 标志，允许另一个进程进入。这时，再同时检测另一个进程状态标志和允许进入标志，就可保证当两个进程同时要求进入临界区时只允许一个进程进入临界区。保存的是较晚的一次赋值，因此较晚的进程等待，较早的进程进入。先到先入，后到等待，从而完成临界区访问的要求。\n\n其实这里可想象为两个人进门，每个人进门前都会和对方客套一句“你走先”。若进门时没别人，则当和空气说句废话，然后大步登门入室；若两人同时进门，则互相先请，但各自只客套一次，所以先客套的人请完对方，就等着对方请自己，然后光明正大地进门。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_49",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 49,
      "type": "single_choice",
      "question": "【2011 统考真题】有两个并发执行的进程 $\\mathrm{P}_{1}$ 和进程 $\\mathrm{P}_{2}$ ，共享初值为 1 的变量 x。 $\\mathrm{P}_{1}$ 对 x 加 1， $\\mathrm{P}_{2}$ 对 x 减 1。加 1 和减 1 操作的指令序列分别如下： ```csv //加1操作 load R1,x //取x到寄存器R1 inc R1 store x,R1//将R1的内容存入x //减1操作 load R2,x //取x到寄存器R2 dec R2 store x,R2//将R2的内容存入x ``` 两个操作完成后，x 的值（）。",
      "options": {
        "A": "可能为-1或3",
        "B": "只能为 1",
        "C": "可能为 0, 1 或 2",
        "D": "可能为-1,0,1或2"
      },
      "answer": [
        "C"
      ],
      "explanation": "x 的值最终是多少，取决于最后是哪个进程对 x 进行了写操作。一个进程一旦拿到了 x 值，它最后对 x 写操作的值也就确定了。因此本题只需考虑两个进程拿到 x 值的所有可能情况。对于进程 $P_{1}$ ，最初取到的 x 值可能是 1，也可能是进程 $P_{2}$ 完成后更新得到的 x 值 0，因此对于 $P_{1}$ ，最终写入 x 的值可能是 2（当它最初取到 1 时）和 1（当它最初取到 0 时）。同理，对于 $P_{2}$ ，最初取到的 x 值可能是 1，也可能是 $P_{1}$ 完成后更新得到的 x 值 2，因此对于 $P_{2}$ ，最终写入 x 的值可能是 0（当它最初取到 1 时）和 1（当它最初取到 2 时）。因此，最终的 x 值可能是 0、1 或 2。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_50",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 50,
      "type": "single_choice",
      "question": "【2016统考真题】进程 $\\mathrm{P_1}$ 和 $\\mathrm{P_2}$ 均包含并发执行的线程，部分伪代码描述如下所示。 ```txt // 进程P1 int x=0; Thread1( ) { int a; a=1; x+=1; } Thread2( ) { int a; a=2; x+=2; } // 进程P2 int x=0; Thread3( ) { int a; a=x; x+=3; } Thread4( ) { int b; b=x; x+=4; } ``` 下列选项中，需要互斥执行的操作是（）。",
      "options": {
        "A": "$a = 1$ 与 $a = 2$",
        "B": "a = x 与 b = x",
        "C": "$x + = 1$ 与 $x + = 2$",
        "D": "$x + = 1$ 与 $x + = 3$"
      },
      "answer": [
        "C"
      ],
      "explanation": "需要进行互斥的操作是对临界资源的访问，也就是说，不同线程对同一个进程内部的共享变量的访问才有可能需要进行互斥，不同进程的线程、代码段或变量不存在互斥访问的问题，同一个线程内部的局部变量也不存在互斥访问的问题。选项 A 中的 a 是线程内部的局部变量，不需要互斥访问。选项 D 是不同进程的线程代码段，不存在互斥访问的问题。选项 B 是对进程内部的共享变量 x 的读操作，不互斥也不影响执行结果，所以不需要互斥访问。选项 C 是不同线程对同一个进程内部的共享变量的写操作，需要互斥访问（类似于读者-写者问题）。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_51",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 51,
      "type": "single_choice",
      "question": "【2016 统考真题】使用 TSL（Test and Set Lock）指令实现进程互斥的伪代码如下所示。 ```txt do{ ... while (TSL(&lock)); critical section; lock = FALSE; ... } while (TRUE); ``` 下列与该实现机制相关的叙述中，正确的是（）。",
      "options": {
        "A": "退出临界区的进程负责唤醒阻塞态进程",
        "B": "等待进入临界区的进程不会主动放弃 CPU",
        "C": "上述伪代码满足 “让权等待” 的同步准则",
        "D": "while(TSL(&lock))语句应在关中断状态下执行"
      },
      "answer": [
        "B"
      ],
      "explanation": "使用 TSL 指令实现进程互斥时，并没有阻塞态进程，等待进入临界区的进程一直停留在执行 while(TSL(&lock)) 的循环中，不会主动放弃 CPU，一直处于运行态，直到该进程的时间片用完放弃处理机，转为就绪态，此时切换另一个就绪态进程占用处理机。这不同于信号量机制实现的互斥。由此可知选项 A 和 C 错误，选项 B 正确。TSL 指令本身就是原子操作，不需要关中断来保证其不被打断。TSL 指令实现原子性的原理是，执行 TSL 指令的 CPU 锁住内存总线，以禁止其他 CPU 在本指令结束之前访问内存。此外，假如 while(TSL(&lock)) 在关中断状态下执行，若\n\nTSL(&lock)一直为 true，不再开中断，则系统可能因此终止。因此选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_52",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 52,
      "type": "single_choice",
      "question": "【2016 统考真题】下列关于管程的叙述中，错误的是（）。",
      "options": {
        "A": "管程只能用于实现进程的互斥",
        "B": "管程是由编程语言支持的进程同步机制",
        "C": "任何时候只能有一个进程在管程中执行",
        "D": "管程中定义的变量只能被管程内的过程访问"
      },
      "answer": [
        "A"
      ],
      "explanation": "管程是由一组数据及定义在这组数据之上的对这组数据的操作组成的软件模块，这组操作能初始化并改变管程中的数据和同步进程。管程不仅能实现进程间的互斥，还能实现进程间的同步，因此选项 A 错误、B 正确；管程具有如下特性：① 局部于管程的数据只能被局部于管程内的过程所访问；② 一个进程只有通过调用管程内的过程才能进入管程访问共享数据；③ 每次仅允许一个进程在管程内执行某个内部过程，因此选项 C 和 D 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_53",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 53,
      "type": "single_choice",
      "question": "【2018 统考真题】属于同一进程的两个线程 thread1 和 thread2 并发执行，共享初值为 0 的全局变量 x。thread1 和 thread2 实现对全局变量 x 加 1 的机器级代码描述如下。 <table><tr><td colspan=\"3\">thread1</td><td colspan=\"3\">thread2</td></tr><tr><td>mov</td><td>R1,x</td><td> $// (x) \\rightarrow R1$ </td><td>mov</td><td>R2,x</td><td> $// (x) \\rightarrow R2$ </td></tr><tr><td>inc</td><td>R1</td><td> $// (R1) + 1 \\rightarrow R1$ </td><td>inc</td><td>R2</td><td> $// (R2) + 1 \\rightarrow R2$ </td></tr><tr><td>mov</td><td>x,R1</td><td> $// (R1) \\rightarrow x$ </td><td>mov</td><td>x,R2</td><td> $// (R2) \\rightarrow x$ </td></tr></table> 在所有可能的指令执行序列中，使 x 的值为 2 的序列个数是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "B"
      ],
      "explanation": "仔细阅读两个线程代码可知，thread1 和 thread2 均是对 x 进行加 1 操作，x 的初始值为 0，若要使得最终 x = 2，只能先执行完 thread1 再执行 thread2，或先执行完 thread2 再执行 thread1，因此仅有 2 种可能。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_54",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 54,
      "type": "single_choice",
      "question": "【2018 统考真题】若 x 是管程内的条件变量，则当进程执行 x.wait() 时所做的工作是（）。",
      "options": {
        "A": "实现对变量 x 的互斥访问",
        "B": "唤醒一个在 x 上阻塞的进程",
        "C": "根据 x 的值判断该进程是否进入阻塞态",
        "D": "阻塞该进程，并将之插入 x 的阻塞队列中"
      },
      "answer": [
        "D"
      ],
      "explanation": "“条件变量”是管程内部说明和使用的一种特殊变量，其作用类似于信号量机制中的“信号量”，都用于实现进程同步。需要注意的是，在同一时刻，管程中只能有一个进程在执行。若进程A执行了x.wait()操作，则该进程会阻塞，并挂到条件变量x对应的阻塞队列上。这样，管程的使用权被释放，就可以有另一个进程进入管程。若进程B执行了x.signal()操作，则会唤醒x对应的阻塞队列的队首进程。只有一个进程要离开管程时才能调用signal()操作。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_55",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 55,
      "type": "single_choice",
      "question": "【2018 统考真题】在下列同步机制中，可以实现让权等待的是（）。",
      "options": {
        "A": "Peterson 方法",
        "B": "swap 指令",
        "C": "信号量方法",
        "D": "TestAndSet 指令"
      },
      "answer": [
        "C"
      ],
      "explanation": "硬件方法实现进程同步时不能实现让权等待；Peterson算法满足有限等待但不满足让权等待；记录型信号量由于引入阻塞机制，消除了不让权等待的情况，选项C正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-3-8_56",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.3.8",
      "section_title": "本节试题精选",
      "num": 56,
      "type": "single_choice",
      "question": "【2020 统考真题】下列准则中，实现临界区互斥机制必须遵循的是（）。 I. 两个进程不能同时进入临界区 II. 允许进程访问空闲的临界资源 III. 进程等待进入临界区的时间是有限的 IV. 不能进入临界区的执行态进程立即放弃 CPU",
      "options": {
        "A": "仅 I、IV",
        "B": "仅 II、III",
        "C": "仅 I、II、III",
        "D": "仅 I、III、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "实现临界区互斥需满足多个准则。“忙则等待”准则，即两个进程不能同时访问临界区，说法I正确。“空闲让进”准则，若临界区空闲，则允许其他进程访问，说法II正确。“有限等待”准则，即进程应该在有限时间内访问临界区，说法III正确。说法I、II和III是互斥机制必须遵循的原则。说法IV是“让权等待”准则，不一定非得实现，如皮特森算法。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_06",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "死锁的避免是根据（）采取措施实现的。",
      "options": {
        "A": "配置足够的系统资源",
        "B": "使进程的推进顺序合理",
        "C": "破坏死锁的四个必要条件之一",
        "D": "防止系统进入不安全状态"
      },
      "answer": [
        "D"
      ],
      "explanation": "死锁避免是指在资源动态分配过程中用某些算法加以限制，防止系统进入不安全状态从而避免死锁的发生。选项 B 是避免死锁后的结果，而不是措施的原理。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_07",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "死锁预防是保证系统不进入死锁状态的静态策略，其解决办法是破坏产生死锁的四个必要条件之一。下列方法中直接破坏了“循环等待”条件的是（）。",
      "options": {
        "A": "银行家算法",
        "B": "一次性分配策略",
        "C": "剥夺资源法",
        "D": "资源有序分配策略"
      },
      "answer": [
        "D"
      ],
      "explanation": "资源有序分配策略可以限制循环等待条件的发生。选项 A 判断是否为不安全状态；选项 B 破坏了占有请求条件；选项 C 破坏了非剥夺条件。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_08",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "可以防止系统出现死锁的手段是（）。",
      "options": {
        "A": "用 PV 操作管理共享资源",
        "B": "使进程互斥地使用共享资源",
        "C": "采用资源静态分配策略",
        "D": "定时运行死锁检测程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "PV 操作不能破坏死锁条件，反而可能加强互斥和占有并等待条件。选项 B 同理。选项 C 可以破坏请求并保持条件。选项 D 只能在系统出现死锁时检测，却不能防止系统出现死锁。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_09",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "某系统中有三个并发进程都需要四个同类资源，则该系统必然不会发生死锁的最少资源是（）。",
      "options": {
        "A": "9",
        "B": "10",
        "C": "11",
        "D": "12"
      },
      "answer": [
        "B"
      ],
      "explanation": "资源数为 9 时，存在三个进程都占有三个资源，为死锁；资源数为 10 时，必然存在一个进程能拿到 4 个资源，然后可以顺利执行完其他进程。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_10",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "某系统中共有 11 台磁带机，X 个进程共享此磁带机设备，每个进程最多请求使用 3 台，则系统必然不会死锁的最大 X 值是（）。",
      "options": {
        "A": "4",
        "B": "5",
        "C": "6",
        "D": "7"
      },
      "answer": [
        "B"
      ],
      "explanation": "考虑极端情况：每个进程已经分配了两台磁带机，那么其中任何一个进程只要再分配一台磁带机即可满足它的最大需求，该进程总能运行下去直到结束，然后将磁带机归还给系统再次分配给其他进程使用。因此，系统中只要满足 $2X+1=11$ 这个条件即可认为系统不会死锁，解得X=5，也就是说，系统中最多可以并发5个这样的进程是不会死锁的。或者，根据死锁公式，资源数大于进程个数乘以“每个进程需要的最大资源数减1”就不会发生死锁，即 $m>n(w-1)$ ，其中m是磁带机的数量，n是进程的数量，w是每个进程最多请求的磁带机数量。代入可得 $11>n(3-1)$ ，即n<5.5，n是正整数，因此系统必然不会死锁的最大n值是5。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_11",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "若系统中有 5 个某类资源供若干进程共享，则不会引起死锁的情况是（）。",
      "options": {
        "A": "有 6 个进程，每个进程需 1 个资源",
        "B": "有 5 个进程，每个进程需 2 个资源",
        "C": "有 4 个进程，每个进程需 3 个资源",
        "D": "有 3 个进程，每个进程需 4 个资源"
      },
      "answer": [
        "A"
      ],
      "explanation": "A 项的每个进程只申请一个资源，破坏了请求并保持条件，必然不会发生死锁。或者，根据死锁公式，假设系统共有 m 个资源，n 个进程，每个进程需要 k 个资源，若满足 $m > n(k-1)$ ，则系统一定不会发生死锁，代入公式可知选项 B、C、D 均可能发生死锁。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_12",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "解除死锁通常不采用的方法是（）。",
      "options": {
        "A": "终止一个死锁进程",
        "B": "终止所有死锁进程",
        "C": "从死锁进程处抢夺资源",
        "D": "从非死锁进程处抢夺资源"
      },
      "answer": [
        "D"
      ],
      "explanation": "解除死锁的方法有，① 剥夺资源法：挂起某些死锁进程，并抢占它的资源，将这些资源分配给其他的死锁进程；② 撤销进程法：强制撤销部分甚至全部死锁进程并剥夺这些进程的资源。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_13",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "采用资源剥夺法可以解除死锁，还可以采用（）方法解除死锁。",
      "options": {
        "A": "执行并行操作",
        "B": "撤销进程",
        "C": "拒绝分配新资源",
        "D": "修改信号量"
      },
      "answer": [
        "B"
      ],
      "explanation": "资源剥夺法允许一个进程强行剥夺其他进程所占有的系统资源。而撤销进程强行释放一个进程已占有的系统资源，与资源剥夺法同理，都通过破坏死锁的“请求和保持”条件来解除死锁。拒绝分配新资源只能维持死锁的现状，无法解除死锁。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_14",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "在下列死锁的解决方法中，属于死锁预防策略的是（）。",
      "options": {
        "A": "银行家算法",
        "B": "资源有序分配算法",
        "C": "死锁检测算法",
        "D": "资源分配图化简法"
      },
      "answer": [
        "B"
      ],
      "explanation": "其中，银行家算法为死锁避免算法，死锁检测算法和资源分配图化简法为死锁检测，根据排除法可以得出资源有序分配算法为死锁预防策略。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_15",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "三个进程共享四个同类资源，这些资源的分配与释放只能一次一个。已知每个进程最多需要两个该类资源，则该系统（）。",
      "options": {
        "A": "有些进程可能永远得不到该类资源",
        "B": "必然有死锁",
        "C": "进程请求该类资源必然能得到",
        "D": "必然是死锁"
      },
      "answer": [
        "C"
      ],
      "explanation": "不会发生死锁。因为每个进程都分得一个资源时，还有一个资源可以让任意一个进程满足，这样这个进程可以顺利运行完成进而释放它的资源。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_16",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "以下有关资源分配图的描述中，正确的是（）。",
      "options": {
        "A": "有向边包括进程指向资源类的分配边和资源类指向进程申请边两类",
        "B": "矩形框表示进程，其中圆点表示申请同一类资源的各个进程",
        "C": "圆圈节点表示资源类",
        "D": "资源分配图是一个有向图，用于表示某时刻系统资源与进程之间的状态"
      },
      "answer": [
        "D"
      ],
      "explanation": "进程指向资源的有向边称为申请边，资源指向进程的有向边称为分配边，选项 A 张冠李戴；矩形框表示资源，其中的圆点表示资源的数量，选项 B 错；圆圈节点表示进程，选项 C 错；选项 D 的说法是正确的。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_17",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "死锁的四个必要条件中，无法破坏的是（）。",
      "options": {
        "A": "环路等待资源",
        "B": "互斥使用资源",
        "C": "占有且等待资源",
        "D": "非抢夺式分配"
      },
      "answer": [
        "B"
      ],
      "explanation": "所谓破坏互斥使用资源，是指允许多个进程同时访问资源，但有些资源根本不能同时访问，如打印机只能互斥使用。因此，破坏互斥条件而预防死锁的方法不太可行，而且在有的场合应该保护这种互斥性。其他三个条件都可以实现。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_18",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "死锁与安全状态的关系是（）。",
      "options": {
        "A": "死锁状态有可能是安全状态",
        "B": "安全状态有可能成为死锁状态",
        "C": "不安全状态就是死锁状态",
        "D": "死锁状态一定是不安全状态"
      },
      "answer": [
        "D"
      ],
      "explanation": "如右图所示，并非所有不安全状态都是死锁状态，但当系统进入不安全状态后，便可能进入死锁状态；反之，只要系统处于安全状态，系统便可避免进入死锁状态；死锁状态必定是不安全状态。\n\n![](images/b47a7fe11d0c3278cf5137a17cede61e1c927a545afafb6ebec806403b5c5c2a.jpg)\n\n<details>\n<summary>text_image</summary>\n\n不安全状态\n死锁状态\n</details>",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_19",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "死锁检测时检查的是（）。",
      "options": {
        "A": "资源有向图",
        "B": "前驱图",
        "C": "搜索树",
        "D": "安全图"
      },
      "answer": [
        "A"
      ],
      "explanation": "死锁检测一般采用两种方法：资源有向图法和资源矩阵法。前驱图只是说明进程之间的同步关系，搜索树用于数据结构的分析，安全图并不存在。注意死锁避免和死锁检测的区别：死锁避免是指避免死锁发生，即死锁没有发生；死锁检测是指死锁已出现，要把它检测出来。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_20",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "某系统采用如下资源分配策略：当一个进程提出资源请求而暂时无法满足时，若当前没有其他进程因等待资源而被阻塞，则该进程自行阻塞；若已有因等待资源而被阻塞的进程，则系统检查所有被阻塞的进程，若其中某些进程所占有的资源恰好是当前申请进程所需的，则立即剥夺这些资源并分配给申请进程。该策略可能导致（）。",
      "options": {
        "A": "系统死锁",
        "B": "系统陷入死循环",
        "C": "进程回退",
        "D": "进程饥饿"
      },
      "answer": [
        "D"
      ],
      "explanation": "该策略在新进程的资源请求无法满足时，从已阻塞的进程中剥夺其所占的资源，并分配给新进程。由于资源可被剥夺，死锁的“不剥夺条件”被破坏，因此不可能发生死锁；被剥夺资源的进程直接进入阻塞态，并无反复执行或循环调度行为，不会导致系统陷入死循环；策略仅涉及资源的即时重分配，未要求进程撤销操作或回退至先前状态，不构成回退；然而，被剥夺的进程可能因持续被新请求者抢占资源，长期无法获得足够资源以完成执行，从而引发饥饿。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_21",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "系统的资源分配图在下列情况下，无法判断是否处于死锁状态的有（）。 I. 出现了环路 II. 没有环路 III. 每种资源只有一个，并出现环路 IV. 每个进程节点至少有一条请求边",
      "options": {
        "A": "I、II、III、IV",
        "B": "I、III、IV",
        "C": "I、IV",
        "D": "以上答案都不正确"
      },
      "answer": [
        "C"
      ],
      "explanation": "出现了环路，只是满足了循环等待的必要条件，而满足必要条件不一定会导致死锁，说法 I 对；没有环路，破坏了循环等待条件，一定不会发生死锁，说法 II 错；每种资源只有一个，又出现了环路，这是死锁的充分条件，可以确定是否有死锁，说法 III 错；即使每个进程至少有一条请求边，若资源足够，则不会发生死锁，但若资源不充足，则有发生死锁的可能，说法 IV 对。综上所述，选择选项 C。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_22",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "下列关于死锁的说法中，正确的有（）。 I. 死锁状态一定是不安全状态 II. 产生死锁的根本原因是系统资源分配不足和进程推进顺序非法 III. 资源的有序分配策略可以破坏死锁的循环等待条件 IV. 采用资源剥夺法可以解除死锁，还可以采用撤销进程方法解除死锁",
      "options": {
        "A": "I、III",
        "B": "II",
        "C": "IV",
        "D": "四个说法都对"
      },
      "answer": [
        "D"
      ],
      "explanation": "说法 I 正确。说法 II 正确：这是产生死锁的两大原因。说法 III 正确：在对资源进行有序分配时，进程间不可能出现环形链，即不会出现循环等待。说法 IV 正确：资源剥夺法允许一个进程强行剥夺其他进程占有的系统资源。而撤销进程强行释放一个进程已占有的系统资源，与资源剥夺法同理，都通过破坏死锁的“请求和保持”条件来解除死锁，因此选择选项 D。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_23",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "下面是并发进程的程序代码，正确的是（）。 ```javascript Semaphore x1=x2=y=1; int c1=c2=0; ``` ```txt P1 () { while (1) { P(x1); if (++c1==1) P(y); V(x1); computer(A); P(x1); if (--c1==0) V(y); V(x1); } } P2 () { while (1) { P(x2); if (++c2==1) P(y); V(x2); computer(B); P(x2); if (--c2==0) V(y); V(x2); } } ```",
      "options": {
        "A": "进程不会死锁，也不会“饥饿”",
        "B": "进程不会死锁，但是会“饥饿”",
        "C": "进程会死锁，但是不会“饥饿”",
        "D": "进程会死锁，也会“饥饿”"
      },
      "answer": [
        "B"
      ],
      "explanation": "遇到这种问题时千万不要慌张，下面我们来慢慢分析，给读者一个清晰的解题过程。\n\n仔细考察程序代码，可以看出这是一个扩展的单行线问题。也就是说，某单行线只允许单方向的车辆通过，在单行线的入口设置信号量 y，在告示牌上显示某一时刻各方向来车的数量 c1 和 c2，要修改告示牌上的车辆数量必须互斥进行，为此设置信号量 x1 和 x2。若某方向的车辆需要通过时，则首先要将该方向来车数量 c1 或 c2 增加 1，并查看自己是否是第一个进入单行线的车辆，若是，则获取单行线的信号量 y，并进入单行线。通过此路段以后出单行线时，将该方向的车辆数 c1 或 c2 减 1（当然是利用 x1 或 x2 来互斥修改），并查看自己是否是最后一辆车，若是，则释放单行线的互斥量 y，否则保留信号量 y，让后继车辆继续通过。双方的操作如出一辙。考虑出现一个极端情况，即当某方向的车辆首先占据单行线并后来者络绎不绝时，另一个方向的车辆就再没有机会通过该单行线了。而这种现象是由于算法本身的缺陷造成的，不属于因为特殊序列造成的饥饿，所以它是真正的饥饿现象。因为有信号量的控制，所以死锁的可能性没有了（双方同时进入单行线，在中间相遇，造成双方均无法通过的情景）。\n\n① 假设 $P_{1}$ 进程稍快， $P_{2}$ 进程稍慢，同时运行；② $P_{1}$ 进程首先进入 if 条件语句，因此获得了 y 的互斥访问权， $P_{2}$ 被阻塞；③ 在第一个 $P_{1}$ 进程未释放 y 之前，又有另一个 $P_{1}$ 进入，c1 的值变成 2，当第一个 $P_{1}$ 离开时， $P_{2}$ 仍然被阻塞，这种情形不断发生；④ 在这种情况下会发生什么事？ $P_{1}$ 顺利执行， $P_{2}$ 很郁闷，长期被阻塞。\n\n综上所述，不会发生死锁，但会出现饥饿现象。因此选 B。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_24",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "有两个并发进程，对于如下这段程序的运行，正确的说法是（）。 ```txt int x,y,z,t,u; P1() { while(1){ x=1; y=0; if x>=1 then y=y+1; z=y; } } P2() { while(1){ x=0; t=0; if x<=1 then t=t+2; u=t; } } ```",
      "options": {
        "A": "程序能正确运行，结果唯一",
        "B": "程序不能正确运行，可能有两种结果",
        "C": "程序不能正确运行，结果不确定",
        "D": "程序不能正确运行，可能死锁"
      },
      "answer": [
        "C"
      ],
      "explanation": "本题中两个进程不能正确地工作，运行结果的可能性详见下面的说明。\n\n$$\n\\begin{array}{l} 1. \\mathrm{x} = 1; \\\\ 5. \\quad x = 0; \\\\ 2. \\mathrm{y} = 0; \\\\ 6. \\quad t = 0; \\\\ 3. \\text {   If   } x > = 1 \\text {   then   } y = y + 1; \\\\ 7. \\text {   if   } x <   = 1 \\text {   then   } t = t + 2; \\\\ 4. \\mathrm{z} = \\mathrm{y}; \\\\ 8. \\mathrm{u} = \\mathrm{t}; \\\\ \\end{array}\n$$\n\n不确定的原因是由于使用了公共变量 x，考查程序中与变量 x 有关的语句共四处，执行的顺序是 $1 \\rightarrow 2 \\rightarrow 3 \\rightarrow 4 \\rightarrow 5 \\rightarrow 6 \\rightarrow 7 \\rightarrow 8$ 时，结果是 y = 1, z = 1, t = 2, u = 2, x = 0；并发执行过程是 $1 \\rightarrow 2 \\rightarrow 5 \\rightarrow 6 \\rightarrow 3 \\rightarrow 4 \\rightarrow 7 \\rightarrow 8$ 时，结果是 y = 0, z = 0, t = 2, u = 2, x = 0；执行的顺序是 $5 \\rightarrow 6 \\rightarrow 7 \\rightarrow 8 \\rightarrow 1 \\rightarrow 2 \\rightarrow 3 \\rightarrow 4$ 时，结果是 y = 1, z = 1, t = 2, u = 2, x = 1；执行的顺序是 $5 \\rightarrow 6 \\rightarrow 1 \\rightarrow 2 \\rightarrow 7 \\rightarrow 8 \\rightarrow 3 \\rightarrow 4$ 时，结果是 y = 1, z = 1, t = 2, u = 2, x = 1。可见结果有多种可能性。\n\n显然，无论执行顺序如何，x 的结果只能是 0 或 1，因此语句 7 的条件一定成立，即 t = u = 2 的结果是一定的；而 y = z 必定成立，只可能有 0, 1 两种情况，又不可能出现 x = 1, y = z = 0 的情况，所以总共只有 3 种结果（答案中的 3 种）。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_25",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "一个进程在获得资源后，只能在使用完资源后由自己释放，这属于死锁必要条件的（）。",
      "options": {
        "A": "互斥条件",
        "B": "请求和释放条件",
        "C": "不剥夺条件",
        "D": "防止系统进入不安全状态"
      },
      "answer": [
        "C"
      ],
      "explanation": "一个进程在获得资源后，只能在使用完资源后由自己释放，即它的资源不能被系统剥夺。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_26",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "假设具有 5 个进程的进程集合 $\\mathrm{P} = \\{\\mathrm{P}_0, \\mathrm{P}_1, \\mathrm{P}_2, \\mathrm{P}_3, \\mathrm{P}_4\\}$ ，系统中有三类资源 A, B, C，假设在某时刻有如下状态，见下表。 <table><tr><td rowspan=\"2\">进程名</td><td colspan=\"3\">Allocation</td><td colspan=\"3\">Max</td><td colspan=\"3\">Available</td></tr><tr><td>A</td><td>B</td><td>C</td><td>A</td><td>B</td><td>C</td><td rowspan=\"6\">A</td><td rowspan=\"6\">B</td><td rowspan=\"6\">C</td></tr><tr><td> $P_0$ </td><td>0</td><td>0</td><td>3</td><td>0</td><td>0</td><td>4</td></tr><tr><td> $P_1$ </td><td>1</td><td>0</td><td>0</td><td>1</td><td>7</td><td>5</td></tr><tr><td> $P_2$ </td><td>1</td><td>3</td><td>5</td><td>2</td><td>3</td><td>5</td></tr><tr><td> $P_3$ </td><td>0</td><td>0</td><td>2</td><td>0</td><td>6</td><td>4</td></tr><tr><td> $P_4$ </td><td>0</td><td>0</td><td>1</td><td>0</td><td>6</td><td>5</td></tr></table> 系统是处于安全状态的，则 x, y, z 的取值可能是（）。 I. 1,4,0 II. 0, 6, 2 III. 1, 1, 1 IV. 0,4,7",
      "options": {
        "A": "I、II、IV",
        "B": "I、II",
        "C": "仅 I",
        "D": "I、III"
      },
      "answer": [
        "C"
      ],
      "explanation": "$$\n\\text { Need } = \\text { Max } - \\text { Allocation } = \\left[ \\begin{array}{l l l} 0 & 0 & 4 \\\\ 1 & 7 & 5 \\\\ 2 & 3 & 5 \\\\ 0 & 6 & 4 \\\\ 0 & 6 & 5 \\end{array} \\right] - \\left[ \\begin{array}{l l l} 0 & 0 & 3 \\\\ 1 & 0 & 0 \\\\ 1 & 3 & 5 \\\\ 0 & 0 & 2 \\\\ 0 & 0 & 1 \\end{array} \\right] = \\left[ \\begin{array}{l l l} 0 & 0 & 1 \\\\ 0 & 7 & 5 \\\\ 1 & 0 & 0 \\\\ 0 & 6 & 2 \\\\ 0 & 6 & 4 \\end{array} \\right]\n$$\n\n说法 I: 根据 need 矩阵可知, 当 Available 为 $(1,4,0)$ 时, 可满足 $\\mathrm{P}_2$ 的需求; $\\mathrm{P}_2$ 结束后释放资源,\n\nAvailable 为(2,7,5)可以满足 $\\mathrm{P_0}$ , $\\mathrm{P_1}$ , $\\mathrm{P_3}$ , $\\mathrm{P_4}$ 中任意一个进程的需求，所以系统不会出现死锁，处于安全状态。说法 II：当 Available 为(0,6,2)时，可以满足进程 $\\mathrm{P_0}$ , $\\mathrm{P_3}$ 的需求；这两个进程结束后释放资源，Available 为(0,6,7)，仅可以满足进程 4 的需求； $\\mathrm{P_4}$ 结束并释放后，Available 为(0,6,8)，此时不能满足余下任意一个进程的需求，因此当前处在非安全状态。说法 III：当 Available 为(1,1,1)时，可以满足进程 $\\mathrm{P_0}$ , $\\mathrm{P_2}$ 的需求；这两个进程结束后释放资源，Available 为(2,4,9)，此时不能满足余下任意一个进程的需求，处于非安全状态。说法 IV：当 Available 为(0,4,7)时，可以满足 $\\mathrm{P_0}$ 的需求，进程结束后释放资源，Available 为(0,4,10)，此时不能满足余下任意一个进程的需求，处于非安全状态。综上分析：只有说法 I 处于安全状态。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_27",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "死锁定理是用于处理死锁的（）方法。",
      "options": {
        "A": "预防死锁",
        "B": "避免死锁",
        "C": "检测死锁",
        "D": "解除死锁"
      },
      "answer": [
        "C"
      ],
      "explanation": "死锁定理是用于检测死锁的方法。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_28",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "某系统有 $m$ 个同类资源供 $n$ 个进程共享，若每个进程最多申请 $k$ 个资源 $(k \\geqslant 1)$ ，采用银行家算法分配资源，为保证系统不发生死锁，则各进程的最大需求量之和应（）。",
      "options": {
        "A": "等于 $m$",
        "B": "等于 $m + n$",
        "C": "小于 $m + n$",
        "D": "大于 $m + n$"
      },
      "answer": [
        "C"
      ],
      "explanation": "按照银行家算法，只要保证系统中进程申请的最大资源数小于或等于 m，就一定存在一个安全序列。考虑最极端的情况，假如有 n-1 个进程都申请了 1 个资源，剩下一个进程申请了 m 个资源，则各进程的最大需求量之和为 $m+n-1$ ，此时能保证一定不会发生死锁。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_29",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "采用银行家算法可以避免死锁的发生，这是因为该算法（）。",
      "options": {
        "A": "可以抢夺已分配的资源",
        "B": "能及时为各进程分配资源",
        "C": "任何时刻都能保证每个进程能得到所需的资源",
        "D": "任何时刻都能保证至少有一个进程可以得到所需的全部资源"
      },
      "answer": [
        "D"
      ],
      "explanation": "任何时刻都能保证至少有一个进程可以得到所需的全部资源，这意味着银行家算法可以保证系统中至少存在一个安全序列，使每个进程都能按该顺序得到所需的全部资源并正常结束，不会出现死锁的情况。这也是银行家算法避免死锁的核心思想。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_30",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "用银行家算法避免死锁时，检测到（）时才分配资源。",
      "options": {
        "A": "进程首次申请资源时对资源的最大需求量超过系统现存的资源量",
        "B": "进程已占有的资源数与本次申请的资源数之和超过对资源的最大需求量",
        "C": "进程已占有的资源数与本次申请的资源数之和不超过对资源的最大需求量，且现存资源量能满足尚需的最大资源量",
        "D": "进程已占有的资源数与本次申请的资源数之和不超过对资源的最大需求量，且现存资源量能满足本次申请量，但不能满足尚需的最大资源量"
      },
      "answer": [
        "C"
      ],
      "explanation": "银行家算法要求，进程运行之前先声明它对各类资源的最大需求量，并保证它在任何时刻对每类资源的请求量不超过它所声明的最大需求量。当进程已占有的资源数与本次申请的资源数之和不超过对资源的最大需求量，并且现存资源量能满足尚需的最大资源量时，才分配资源。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_31",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "下列各种方法中，可用于解除已发生死锁的是（）。",
      "options": {
        "A": "撤销部分或全部死锁进程",
        "B": "剥夺部分或全部死锁进程的资源",
        "C": "降低部分或全部死锁进程的优先级",
        "D": "A 和 B 都可以"
      },
      "answer": [
        "D"
      ],
      "explanation": "解除死锁的方法有两种：撤销死锁进程和剥夺死锁进程的资源。降低死锁进程的优先级是无效的方法，因为它不能改变死锁进程对资源的需求和占有，也不能打破循环等待条件。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_32",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "假定某计算机系统有两类可使用资源： $R_{1}$ （ $R_{1}$ 共2个单位）和 $R_{2}$ （ $R_{2}$ 共1个单位），由进程 $P_{1}$ 和 $P_{2}$ 共享。两个进程均按如下顺序使用资源：申请 $R_{1}\\rightarrow$ 申请 $R_{2}\\rightarrow$ 申请 $R_{1}\\rightarrow$ 释放 $R_{1}\\rightarrow$ 释放 $R_{2}\\rightarrow$ 释放 $R_{1}$ ，则在系统运行过程中（）。",
      "options": {
        "A": "不可能产生死锁",
        "B": "有可能产生死锁，因为 $R_{1}$ 资源不足",
        "C": "有可能产生死锁，因为 $R_{2}$ 资源不足",
        "D": "只有一种进程执行序列可能导致死锁"
      },
      "answer": [
        "B"
      ],
      "explanation": "当 $P_{1}$ 和 $P_{2}$ 各自完成第一步后，均已持有 1 个 $R_{1}$ （共 2 个）， $R_{1}$ 资源耗尽。无论哪个进程先申请到唯一的 $R_{2}$ ，其在下一步申请第二个 $R_{1}$ 时都将因资源不足而阻塞；另一个进程则因无法获取 $R_{2}$ 而阻塞。例如，此时 $P_{1}$ 持有 $R_{1}$ 和 $R_{2}$ 并等待 $R_{1}$ ， $P_{2}$ 持有 $R_{1}$ 并等待 $R_{2}$ ，形成循环等待链，且资源不可剥夺，系统陷入死锁。根本原因在于：每个进程需两次使用 $R_{1}$ ，而系统仅有 2 个 $R_{1}$ 单位，无法满足两个进程在交错执行时各自的第二次 $R_{1}$ 请求，故死锁源于 $R_{1}$ 资源不足。\n\n![](images/b8c7701ed4939f1b9e2a3939c248a56b26d5f5290a49d290e4a6a1bedd6a8cd9.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    R1[\"○ ○\"] --> P1[\"P₁\"]\n    R1[\"○ ○\"] --> P2[\"P₂\"]\n    P1 --> R2[\"○\"]\n    P2 --> R2[\"○\"]\n    R1[\"○ ○\"] --> R2[\"○\"]\n    R2[\"○\"] --> P1[\"○\"]\n    R2[\"○\"] --> P2[\"○\"]\n```\n</details>\n\n补充分析：若 $R_{1}$ 无限、 $R_{2}$ 为 1 个，则总有一个进程能完成并\n\n释放 $R_{2}$ ，不会死锁；但若 $R_{1}$ 为 2 个、 $R_{2}$ 无限，则仍可能死锁。例如： $P_{1}$ 申请到 $R_{1}$ 、 $R_{2}$ 后被切换， $P_{2}$ 申请 $R_{1}$ 、 $R_{2}$ ，再申请 $R_{1}$ 时阻塞； $P_{1}$ 恢复执行后也因无法获得第二个 $R_{1}$ 而阻塞。此时，双方互相等待，死锁发生。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_36",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "【2012 统考真题】假设 5 个进程 $P_{0}, P_{1}, P_{2}, P_{3}, P_{4}$ 共享三类资源 $R_{1}, R_{2}, R_{3}$ ，这些资源总数分别为 18, 6, 22。 $T_{0}$ 时刻的资源分配情况如下表所示，此时存在的一个安全序列是（）。 <table><tr><td rowspan=\"2\">进程名</td><td colspan=\"3\">已分配资源</td><td colspan=\"3\">资源最大需求</td></tr><tr><td> $R_1$ </td><td> $R_2$ </td><td> $R_3$ </td><td> $R_1$ </td><td> $R_2$ </td><td> $R_3$ </td></tr><tr><td> $P_0$ </td><td>3</td><td>2</td><td>3</td><td>5</td><td>5</td><td>10</td></tr><tr><td> $P_1$ </td><td>4</td><td>0</td><td>3</td><td>5</td><td>3</td><td>6</td></tr><tr><td> $P_2$ </td><td>4</td><td>0</td><td>5</td><td>4</td><td>0</td><td>11</td></tr><tr><td> $P_3$ </td><td>2</td><td>0</td><td>4</td><td>4</td><td>2</td><td>5</td></tr><tr><td> $P_4$ </td><td>3</td><td>1</td><td>4</td><td>4</td><td>2</td><td>4</td></tr></table>",
      "options": {
        "A": "$P_{0}, P_{2}, P_{4}, P_{1}, P_{3}$",
        "B": "$P_{1}, P_{0}, P_{3}, P_{4}, P_{2}$",
        "C": "$P_{2}, P_{1}, P_{0}, P_{3}, P_{4}$",
        "D": "$P_{3}, P_{4}, P_{2}, P_{1}, P_{0}$"
      },
      "answer": [
        "D"
      ],
      "explanation": "首先求得各进程的需求矩阵 Need 与可利用资源向量 Available:\n\n<table><tr><td rowspan=\"2\">进程名</td><td colspan=\"3\">Need</td></tr><tr><td> $R_1$ </td><td> $R_2$ </td><td> $R_3$ </td></tr><tr><td> $P_0$ </td><td>2</td><td>3</td><td>7</td></tr><tr><td> $P_1$ </td><td>1</td><td>3</td><td>3</td></tr><tr><td> $P_2$ </td><td>0</td><td>0</td><td>6</td></tr><tr><td> $P_3$ </td><td>2</td><td>2</td><td>1</td></tr><tr><td> $P_4$ </td><td>1</td><td>1</td><td>0</td></tr></table>\n\n<table><tr><td rowspan=\"2\">Available</td><td> $R_1$ </td><td> $R_2$ </td><td> $R_3$ </td></tr><tr><td>2</td><td>3</td><td>3</td></tr></table>\n\n比较 Need 和 Available 发现，初始时进程 $P_{1}$ 与 $P_{3}$ 可满足需求，排除选项 A、C。尝试给 $P_{1}$ 分配资源时， $P_{1}$ 完成后 Available 将变为 $(6, 3, 6)$ ，无法满足 $P_{0}$ 的需求，排除选项 B。尝试给 $P_{3}$ 分配资源时， $P_{3}$ 完成后 Available 将变为 $(4, 3, 7)$ ，该向量能满足其他所有进程的需求。因此，以 $P_{3}$ 开头的所有序列都是安全序列。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_37",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "【2013 统考真题】下列关于银行家算法的叙述中，正确的是（）。",
      "options": {
        "A": "银行家算法可以预防死锁",
        "B": "当系统处于安全状态时，系统中一定无死锁进程",
        "C": "当系统处于不安全状态时，系统中一定会出现死锁进程",
        "D": "银行家算法破坏了死锁必要条件中的“请求和保持”条件"
      },
      "answer": [
        "B"
      ],
      "explanation": "银行家算法是避免死锁的方法，选项 A、D 错。根据下图，选项 B 对，选项 C 错。\n\n![](images/f3a08589a1c507a9a5c163a04f08a56bed4962a00a5e6c3e2d8927937d4a49c9.jpg)\n\n<details>\n<summary>text_image</summary>\n\n不安全状态\n死锁状态\n</details>",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_38",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "【2014 统考真题】某系统有 $n$ 台互斥使用的同类设备，三个并发进程分别需要 3, 4, 5 台设备，可确保系统不发生死锁的设备数 $n$ 最小为（）。",
      "options": {
        "A": "9",
        "B": "10",
        "C": "11",
        "D": "12"
      },
      "answer": [
        "B"
      ],
      "explanation": "根据死锁公式，当资源数量大于各个进程所需资源数-1的总和时，不发生死锁，三个进程分别需要3,4,5台设备，即当资源数量大于 $(3-1)+(4-1)+(5-1)=9$ 时，不发生死锁。而当系统中只有9台设备时，第一个进程分配2台，第二个进程分配3台，第三个进程分配4台，这种情况下，三个进程均无法继续执行下去，发生死锁。当系统再增加1台设备，最后1台设备分配给任意一个进程都可以顺利执行完成，因此保证系统不发生死锁的最小设备数为10。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_39",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "【2015 统考真题】若系统 $S_{1}$ 采用死锁避免方法， $S_{2}$ 采用死锁检测方法。下列叙述中，正确的是（）。 I. $S_{1}$ 会限制用户申请资源的顺序，而 $S_{2}$ 不会 II. $S_{1}$ 需要进程运行所需的资源总量信息，而 $S_{2}$ 不需要 III. $S_{1}$ 不会给可能导致死锁的进程分配资源，而 $S_{2}$ 会",
      "options": {
        "A": "仅 I、II",
        "B": "仅 II、III",
        "C": "仅 I、III",
        "D": "I、II、III"
      },
      "answer": [
        "B"
      ],
      "explanation": "死锁的处理采用三种策略：死锁预防、死锁避免、死锁检测和解除。\n\n死锁预防采用破坏产生死锁的4个必要条件中的一个或几个来防止发生死锁。其中之一的“破坏循环等待条件”，一般采用顺序资源分配法，即限制了用户申请资源的顺序，因此说法I的前半句属于死锁预防的范畴。此外，银行家算法虽然会通过检测是否存在安全序列来判断申请资源的请求是否合法，但安全序列并不是唯一的，也不是固定的，它只是一种可能的分配方案，而不是一种必须遵循的规则，银行家算法更没有给出固定的申请资源的顺序，因此说法 I 错误。\n\n银行家算法是最著名的死锁避免算法，其中的最大需求矩阵 Max 定义了每个进程对 m 类资源的最大需求量，系统在执行安全性算法中都会检查此次资源试分配后，系统是否处于安全状态，若不安全则将本次的试探分配作废。在死锁的检测和解除中，系统为进程分配资源时不采取任何措施，但提供死锁检测和解除的手段，一旦检测到系统发生死锁，就立即采取相应的措施来解除死锁，因此不用关心进程所需的总资源量。说法 II、III 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_40",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "【2016 统考真题】系统中有 3 个不同的临界资源 $R_{1}$ , $R_{2}$ 和 $R_{3}$ ，被 4 个进程 $P_{1}$ , $P_{2}$ , $P_{3}$ , $P_{4}$ 共享。各进程对资源的需求为： $P_{1}$ 申请 $R_{1}$ 和 $R_{2}$ , $P_{2}$ 申请 $R_{2}$ 和 $R_{3}$ , $P_{3}$ 申请 $R_{1}$ 和 $R_{3}$ , $P_{4}$ 申请 $R_{2}$ 。若系统出现死锁，则处于死锁状态的进程数至少是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于本题，需先画出如右所示的资源分配图。若系统出现死锁，则必然出现循环等待的情况。\n\n![](images/e538bcfbb35035f36f92c8b567652d6d54810de28558282172fd4475ec5ecfa9.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    P1 --> R1\n    R1 --> P3\n    P3 --> R3\n    R3 --> P2\n    P2 --> R2\n    R2 --> P4\n    P4 --> R2\n```\n</details>\n\n从图中可以看出，若出现循环等待的情况，则至少有 $P_{1}$ 、 $P_{2}$ 、 $P_{3}$ 三个进程在循环等待环中，在该图中不可能出现两个进程发生循环等待的情况。现在考察 $P_{1}$ 、 $P_{2}$ 、 $P_{3}$ 三个进程形成环路的情况，若此时 $P_{1}$ 、 $P_{2}$ 、 $P_{3}$ 三个进程分别拥有 $R_{1}$ 、 $R_{2}$ 和 $R_{3}$ ，则会形成 $P_{1}$ 等待 $P_{2}$ 释放 $R_{2}$ ， $P_{2}$ 等待 $P_{3}$ 释放 $R_{3}$ ， $P_{3}$ 等待 $P_{1}$ 释放 $R_{1}$ 的循环等待情况。 $P_{1}$ 、 $P_{2}$ 、 $P_{3}$ 三个进程分别拥有 $R_{2}$ 、 $R_{3}$ 和 $R_{1}$ 的情况的分析类似。以上两种情况都会形成循环等待情况，至少有三个进程陷入死锁状态。若 $P_{4}$ 事先已获取 $R_{2}$ ，成功运行，则死锁进程数为 3；若 $P_{4}$ 尚未获取 $R_{2}$ ，未运行，则死锁进程数为 4。因此，若系统出现死锁，则处于死锁状态的进程至少是 3 个。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_41",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "【2018 统考真题】假设系统中有 4 个同类资源，进程 $P_{1}, P_{2}$ 和 $P_{3}$ 需要的资源数分别为 4, 3 和 1, $P_{1}, P_{2}$ 和 $P_{3}$ 已申请到的资源数分别为 2, 1 和 0，则执行安全性检测算法的结果是（）。",
      "options": {
        "A": "不存在安全序列，系统处于不安全状态",
        "B": "存在多个安全序列，系统处于安全状态",
        "C": "存在唯一安全序列 $P_{3}, P_{1}, P_{2}$ ，系统处于安全状态",
        "D": "存在唯一安全序列 $P_{3}, P_{2}, P_{1}$ ，系统处于安全状态"
      },
      "answer": [
        "A"
      ],
      "explanation": "由题意可知，仅剩最后一个同类资源，若将其分给 $P_{1}$ 或 $P_{2}$ ，则均无法正常执行；若分给 $P_{3}$ ，则 $P_{3}$ 正常执行完成后，释放的这一个资源仍无法使 $P_{1}, P_{2}$ 正常执行，因此不存在安全序列。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_42",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "【2019 统考真题】下列关于死锁的叙述中，正确的是（）。 I. 可以通过剥夺进程资源解除死锁 II. 死锁的预防方法能确保系统不发生死锁 III. 银行家算法可以判断系统是否处于死锁状态 IV. 当系统出现死锁时，必然有两个或两个以上的进程处于阻塞态",
      "options": {
        "A": "仅 II、III",
        "B": "仅 I、II、IV",
        "C": "仅 I、II、III",
        "D": "仅 I、III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "剥夺进程资源，将其分配给其他死锁进程，可以解除死锁，说法I正确。死锁预防是死锁处理策略（死锁预防、死锁避免、死锁检测）中最为严苛的一种策略，破坏死锁产生的4个必要条件之一，可以确保系统不发生死锁，说法II正确。银行家算法是一种死锁避免算法，用于计算动态资源分配的安全性以避免系统进入死锁状态，不能用于判断系统是否处于死锁，说法III错误。通过简化资源分配图可以检测系统是否为死锁状态，当系统出现死锁时，资源分配图不可完全简化，只有两个或两个以上的进程才会出现“环”而不能被简化，说法IV正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_43",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "【2020 统考真题】某系统中有 A、B 两类资源各 6 个，t 时刻的资源分配及需求情况如下表所示。 <table><tr><td>进程名</td><td>A已分配数量</td><td>B已分配数量</td><td>A需求总量</td><td>B需求总量</td></tr><tr><td> $P_1$ </td><td>2</td><td>3</td><td>4</td><td>4</td></tr><tr><td> $P_2$ </td><td>2</td><td>1</td><td>3</td><td>1</td></tr><tr><td> $P_3$ </td><td>1</td><td>2</td><td>3</td><td>4</td></tr></table> t 时刻安全性检测结果是（）。",
      "options": {
        "A": "存在安全序列 $P_{1}$ 、 $P_{2}$ 、 $P_{3}$",
        "B": "存在安全序列 $P_{2}$ 、 $P_{1}$ 、 $P_{3}$",
        "C": "存在安全序列 $P_{2}$ 、 $P_{3}$ 、 $P_{1}$",
        "D": "不存在安全序列"
      },
      "answer": [
        "B"
      ],
      "explanation": "首先求出需求矩阵:\n\n$$\n\\text { Need } = \\text { Max } - \\text { Allocation } = \\left[ \\begin{array}{l l} 4 & 4 \\\\ 3 & 1 \\\\ 3 & 4 \\end{array} \\right] - \\left[ \\begin{array}{l l} 2 & 3 \\\\ 2 & 1 \\\\ 1 & 2 \\end{array} \\right] = \\left[ \\begin{array}{l l} 2 & 1 \\\\ 1 & 0 \\\\ 2 & 2 \\end{array} \\right]\n$$\n\n由 Allocation 得知当前 Available 为(1, 0)。由需求矩阵可知，初始只能满足 $P_{2}$ 的需求，选项 A 错误。 $P_{2}$ 释放资源后 Available 变为(3, 1)，此时仅能满足 $P_{1}$ 的需求，选项 C 错误。 $P_{1}$ 释放资源后 Available 变为(5, 4)，可以满足 $P_{3}$ 的需求，得到的安全序列为 $P_{2}, P_{1}, P_{3}$ ，选项 B 正确，选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_44",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "【2021 统考真题】若系统中有 $n (n \\geqslant 2)$ 个进程，每个进程均需要使用某类临界资源 2 个，则系统不会发生死锁所需的该类资源总数至少是（）。",
      "options": {
        "A": "2",
        "B": "n",
        "C": "$n + 1$",
        "D": "2n"
      },
      "answer": [
        "C"
      ],
      "explanation": "考虑极端情况，当临界资源数为 $n$ 时，每个进程都拥有1个临界资源并等待另一个资源，会发生死锁。当临界资源数为 $n+1$ 时，则 n 个进程中至少有一个进程可以获得 2 个临界资源，顺利运行完后释放自己的临界资源，使得其他进程也能顺利运行，不会产生死锁。或者，根据死锁公式 $m > n(r-1)$ ，其中 m 是系统中临界资源的总数，n 是并发进程的个数，r 是每个进程所需临界资源的个数。若这个不等式成立，则系统不发生死锁。将本题的数据代入，得到 $m > n(2-1)$ ，即只要系统中临界资源的总数至少是 $n+1$ ，就可避免死锁。",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_2-4-6_45",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "进程与线程",
      "section": "2.4.6",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "【2022 统考真题】系统中有三个进程 $P_{0}$ 、 $P_{1}$ 、 $P_{2}$ 及三类资源 A、B、C。若某时刻系统分配资源的情况如下表所示，则此时系统中存在的安全序列的个数为（）。 <table><tr><td rowspan=\"2\">进程名</td><td colspan=\"3\">已分配资源数</td><td colspan=\"3\">尚需资源数</td><td colspan=\"3\">可用资源数</td></tr><tr><td>A</td><td>B</td><td>C</td><td>A</td><td>B</td><td>C</td><td>A</td><td>B</td><td>C</td></tr><tr><td> $P_0$ </td><td>2</td><td>0</td><td>1</td><td>0</td><td>2</td><td>1</td><td rowspan=\"3\">1</td><td rowspan=\"3\">3</td><td rowspan=\"3\">2</td></tr><tr><td> $P_1$ </td><td>0</td><td>2</td><td>0</td><td>1</td><td>2</td><td>3</td></tr><tr><td> $P_2$ </td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td><td>3</td></tr></table>",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "B"
      ],
      "explanation": "初始时系统中的可用资源数为 $< 1,3,2>$ ，只能满足 $\\mathrm{P_0}$ 的需求 $< 0,2,1>$ ，所以安全序列第一个只能是 $\\mathrm{P_0}$ ，将资源分配给 $\\mathrm{P_0}$ 后， $\\mathrm{P_0}$ 执行完释放所占资源，可用资源数变为 $< 1,3,2> + < 2,0,1> = < 3,3,3>$ ，此时可用资源数既能满足 $\\mathrm{P_1}$ ，又能满足 $\\mathrm{P_2}$ ，可以先分配给 $\\mathrm{P_1}$ ， $\\mathrm{P_1}$ 执行完释放资源再分配给 $\\mathrm{P_2}$ ；也可以先分配给 $\\mathrm{P_2}$ ， $\\mathrm{P_2}$ 执行完释放资源再分配给 $\\mathrm{P_1}$ 。所以安全序列可以是① $\\mathrm{P_0}$ 、 $\\mathrm{P_1}$ 、 $\\mathrm{P_2}$ 或② $\\mathrm{P_0}$ 、 $\\mathrm{P_2}$ 、 $\\mathrm{P_1}$ 。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/操作系统/chapters/ch02-第2章-进程与线程.md"
    },
    {
      "id": "操作系统_3-1-7_04",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "multiple_choice",
      "question": "下列各种存储管理方式中，需要硬件地址变换机构的是（）。 I. 单一连续分配 II. 固定分区分配 III. 页式存储管理 IV. 动态分区分配 V. 页式虚拟存储管理",
      "options": {
        "A": "I、III、V",
        "B": "II、III、IV",
        "C": "III、IV、V",
        "D": "II、III、IV、V"
      },
      "answer": [
        "C",
        "C"
      ],
      "explanation": "LRU 算法的性能接近 OPT 算法，但其实现开销较大。因此，操作系统的设计者尝试了许多算法，试图以较小的开销接近 LRU 算法的性能，这类算法统称为 CLOCK 算法的变体。\n\n# （1）简单的 CLOCK 算法\n\n考点追踪 类CLOCK算法的过程分析（2012）\n\n简单的 CLOCK 算法为每个页面设置一个访问位，当某页首次被装入内存或被访问时，其访问位被置为 1。系统将所有页框组织成一个循环队列，并维护一个替换指针，指向当前检查位置。发生缺页且需置换时，算法按以下规则操作：若指针所指页面的访问位为 0，则直接淘汰该页；若为 1，则将其置为 0，指针顺移至下一页面，给予该页一次“宽恕”机会——即暂不淘汰，待后续轮询时再行判断。由于指针在队列中循环移动，形如时钟指针，故称 CLOCK 算法。又因其仅依据“最近是否被使用”这一粗略信息进行决策，也被称为最近未用（NRU）算法。\n\n考点追踪 ▶ CLOCK 算法的应用分析（2010）\n\n假设页面访问需列为 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 3, 2，采用简单 CLOCK 算法，分配 4 个页框，每个页框记录（页面号，访问位），具体过程如图 3.25 所示。\n\n<table><tr><td>访问顺序</td><td colspan=\"2\">7</td><td colspan=\"2\">0</td><td colspan=\"2\">1</td><td colspan=\"2\">2</td><td colspan=\"2\">0</td><td colspan=\"2\">3</td><td colspan=\"2\">0</td><td colspan=\"2\">4</td><td colspan=\"2\">2</td><td colspan=\"2\">3</td><td colspan=\"2\">0</td><td colspan=\"2\">3</td><td colspan=\"2\">2</td><td colspan=\"2\">1</td><td colspan=\"2\">3</td><td colspan=\"2\">2</td></tr><tr><td>帧1</td><td>7</td><td>1</td><td>7</td><td>1</td><td>7</td><td>1</td><td>7</td><td>1</td><td>7</td><td>1</td><td>3</td><td>1</td><td>3</td><td>1</td><td>3</td><td>1</td><td>3</td><td>1</td><td>3</td><td>1</td><td>3</td><td>1</td><td>3</td><td>1</td><td>3</td><td>1</td><td>3</td><td>0</td><td>3</td><td>1</td><td>3</td><td>0</td></tr><tr><td>帧2</td><td></td><td></td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>2</td><td>1</td></tr><tr><td>帧3</td><td></td><td></td><td></td><td></td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>0</td><td>1</td><td>0</td><td>4</td><td>1</td><td>4</td><td>1</td><td>4</td><td>1</td><td>4</td><td>1</td><td>4</td><td>1</td><td>4</td><td>1</td><td>4</td><td>0</td><td>4</td><td>0</td><td>4</td><td>0</td></tr><tr><td>帧4</td><td></td><td></td><td></td><td></td><td></td><td></td><td>2</td><td>1</td><td>2</td><td>1</td><td>2</td><td>0</td><td>2</td><td>0</td><td>2</td><td>0</td><td>2</td><td>1</td><td>2</td><td>1</td><td>2</td><td>1</td><td>2</td><td>1</td><td>2</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td></tr><tr><td>缺页否</td><td colspan=\"2\">√</td><td colspan=\"2\">√</td><td colspan=\"2\">√</td><td colspan=\"2\">√</td><td colspan=\"2\"></td><td colspan=\"2\">√</td><td colspan=\"2\"></td><td colspan=\"2\">√</td><td colspan=\"2\"></td><td colspan=\"2\"></td><td colspan=\"2\"></td><td colspan=\"2\"></td><td colspan=\"2\"></td><td colspan=\"2\">√</td><td colspan=\"2\"></td><td colspan=\"2\">√</td></tr></table>\n\n图 3.25 CLOCK 算法时的置换图\n\n初始阶段，页面 7,0,1,2 依次调入，访问位均置为 1。随后访问 0，已存在，访问位保持为 1。访问 3 时发生第 5 次缺页，此时替换指针位于帧 1，而所有页框的访问位均为 1。算法遂完整扫描一圈，将各帧访问位清零，指针回到最初的位置（帧 1），故淘汰帧 1 中的页面 7，装入页面 3，访问位置为 1，如图 3.26(a) 所示。接着访问 0，已存在，访问位置为 1。访问 4 时发生第 6 次缺页，替换指针指向帧 2（上次替换位置的下一帧），帧 2 的访问位为 1，将其置 0 后继续扫描；帧 3 的访问位为 0，故淘汰帧 3 中的页面 2，装入页面 4，如图 3.26(b) 所示。此后访问 2,3,0,3,2，均已存在，每次访问均将对应帧的访问位置为1。当访问1时发生第7次缺页，此时替换指针指向帧4，且所有帧的访问位均为1，算法再次完成一轮扫描并将访问位清零，故淘汰帧4中的页面2。后续访问3，已存在，访问位置为1。最后访问2时发生第8次缺页，替换指针指向帧1，帧1的访问位为1，将其置0后继续扫描，帧2的访问位为0，故淘汰帧2中的页面0，装入页面2。\n\n![](images/7beb008c34751a641ce658ebb217739d004871f6a810968be89b7cf9683427de.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"页2(1)\"] -->|帧4| B[\"页7(1)\"]\n    B -->|帧1| C[\"页0(1)\"]\n    C -->|帧2| D[\"页2(0)\"]\n    D -->|帧3| E[\"页1(1)\"]\n    E --> F[\"页1(0)\"]\n    F --> G[\"页0(0)\"]\n    G -->|帧3(1)| H[\"页0(0)\"]\n    H --> I[\"页2(0)\"]\n    I --> J[\"页7(0)\"]\n    J --> K[\"页0(0)\"]\n    K --> L[\"页2(0)\"]\n    L --> M[\"页1(0)\"]\n    M --> N[\"页0(0)\"]\n    N --> O[\"页2(0)\"]\n    O --> P[\"页1(0)\"]\n    P --> Q[\"页0(0)\"]\n    Q --> R[\"页2(0)\"]\n    R --> S[\"页7(0)\"]\n    S --> T[\"页0(0)\"]\n```\n</details>\n\n(a)第5次缺页中断\n\n![](images/10bc92999c8f43097f1214d61c60fde59ee518bfac30848f2f83b51c9c8677bd.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"页2(0)\"] --> B[\"页0(1)\"]\n    B --> C[\"页2(0)\"]\n    C --> D[\"页0(0)\"]\n    D --> E[\"页3(1)\"]\n    E --> F[\"页3(1)\"]\n    F --> G[\"页1(0)\"]\n    G --> A\n    C <--> D\n    D <--> E\n```\n</details>\n\n(b)第6次缺页中断   \n图 3.26 缺页中断时替换指针扫描示意图\n\n# (2) 改进型 CLOCK 算法\n\n考点追踪 改进 CLOCK 算法的思想（2018）\n\n考点追踪 改进 CLOCK 算法的应用分析（2016、2021）\n\n将一个页面换出时，若该页已被修改，则需将其写回磁盘；若未被修改，则无须写回。可见，修改过的页面置换代价更高。为降低 I/O 开销，改进型 CLOCK 算法在访问位（A）的基础上，引入修改位（M），综合考虑页面的使用情况与置换代价。在选择淘汰页时，优先考虑既未被访问过又未被修改的页面。根据（A, M）的组合，页面可分为以下四类：\n\n- 1 类（ $A=0, M=0$ ）：最近未被访问，且未被修改，是最佳的淘汰页。  \n- 2 类（ $A = 0, M = 1$ ）：最近未被访问，但已被修改，是次佳的淘汰页。  \n- 3 类（ $A = 1, M = 0$ ）：最近已被访问，但未被修改，可能再次被访问。  \n- 4 类（ $A = 1, M = 1$ ）：最近已被访问，且已被修改，可能再次被访问。\n\n内存中的每一页必属于这四类页面之一。进行页面置换时，算法采用与简单 CLOCK 类似的循环扫描机制，区别在于该算法需同时检查访问位与修改位，具体步骤如下。\n\n① 从当前指针位置开始，进行第一轮扫描，寻找 A=0 且 M=0 的 1 类页面，将第一个找到的 1 类页面作为淘汰页。此轮扫描不修改任何访问位 A。  \n② 若第①步失败，则进行第二轮扫描，寻找 A=0 且 M=1 的 2 类页面，将第一个找到的 2 类页面作为淘汰页。此轮扫描中，将所有经过的页面的访问位 A 置为 0。  \n③ 若前两步均失败（所有页面 A = 1），则将指针复位至起始位置，并将所有帧的访问位清零，随后重复第①步；若仍无 1 类页面，则执行第②步。此时必能找到可淘汰页面。\n\n改进型 CLOCK 算法优于简单 CLOCK 算法之处在于：优先淘汰未修改的页面，从而降低磁盘 I/O 开销。但为定位合适的淘汰页，可能需多轮扫描，算法本身的运行开销相应增加。\n\n操作系统中的页面置换算法普遍遵循一个原则：尽可能保留近期访问过的页面，优先淘汰未访问过的页面。简单 CLOCK 算法仅依据访问位判断页面是否 “被访问过”；而改进型 CLOCK 算法则在此基础上进一步细化：对 “未访问过” 的页面，优先换出其中未修改者；即使所有页面均 “被访问过”，仍优先选择未修改者换出，以最小化磁盘写回成本。\n\n# \\*3.2.5 抖动和工作集",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md",
      "hidden": true,
      "hidden_reason": "duplicated_answer_and_mismatched_explanation"
    },
    {
      "id": "操作系统_3-1-7_12",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "为保证一个程序在主存中被改变存放位置后仍能正确执行，应采用（）。",
      "options": {
        "A": "静态重定位",
        "B": "动态重定位",
        "C": "动态分配",
        "D": "静态分配"
      },
      "answer": [
        "B"
      ],
      "explanation": "动态重定位可以在程序加载或运行时，根据程序的实际存放位置，对程序中的地址进行修改，使其与物理地址相符。静态重定位只能在程序加载时进行一次地址修改，若程序在运行过程中改变了存放位置，则会出错。动态分配和静态分配是指内存的分配方式，与重定位无关。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_13",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "下面的存储管理方案中，（）方式可以采用静态重定位。",
      "options": {
        "A": "固定分区",
        "B": "可变分区",
        "C": "页式",
        "D": "段式"
      },
      "answer": [
        "A"
      ],
      "explanation": "静态重定位只能对程序中的地址进行一次修改，而不能动态调整。在固定分区方式中，作业装入内存后位置不会改变，且作业在内存中占用连续的存储空间，因此可以采用静态重定位。其余三种方案均可能在运行过程中改变程序在内存中的位置，不能采用静态重定位。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_14",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "对重定位存储管理方式，应（）。",
      "options": {
        "A": "在整个系统中设置一个重定位寄存器",
        "B": "为每道程序设置一个重定位寄存器",
        "C": "为每道程序设置两个重定位寄存器",
        "D": "为每道程序和数据都设置一个重定位寄存器"
      },
      "answer": [
        "A"
      ],
      "explanation": "为使地址转换不影响到指令的执行速度，必须有硬件地址变换结构的支持，即需在系统中增设一个重定位寄存器，用它来存放程序（数据）在内存中的始址。在执行程序或访问数据时，真正访问的内存地址由相对地址与重定位寄存器中的地址相加而成，这时将始址存入重定位寄存器，之后的地址访问即可通过硬件变换实现。因为系统处理器在同一时刻只能执行一条指令或访问数据，所以为每道程序（数据）设置一个寄存器没有必要（同时也不现实，因为寄存器是很昂贵的硬件，而且程序的道数是无法预估的），而只需在切换程序执行时重置寄存器内容。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_15",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "在可变分区管理中，采用拼接技术的目的是（）。",
      "options": {
        "A": "合并空闲区",
        "B": "合并分配区",
        "C": "增加主存容量",
        "D": "便于地址转换"
      },
      "answer": [
        "A"
      ],
      "explanation": "在可变分区管理中，回收空闲区时采用拼接技术对空闲区进行合并。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_16",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "某页式存储管理系统中，按字节编址，页表内容如下表所示。若页的大小为4KB，则地址转换机构将逻辑地址4097转换成的物理地址为（）。 （地址均用十进制表示。） <table><tr><td>页号</td><td>页框号</td></tr><tr><td>0</td><td>2</td></tr><tr><td>1</td><td>1</td></tr><tr><td>3</td><td>0</td></tr><tr><td>4</td><td>5</td></tr></table>",
      "options": {
        "A": "8193",
        "B": "4097",
        "C": "2049",
        "D": "1025"
      },
      "answer": [
        "B"
      ],
      "explanation": "逻辑地址 4097 对应的页号为 4097/4096 = 1，页内偏移量为 4097%4096 = 1。由页表可知，页号 1 对应的页框号也是 1，页大小为 4KB，因此转换成的物理地址为 $1 \\times 4K + 1 = 4097$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_17",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "不会产生内部碎片的存储管理是（）。",
      "options": {
        "A": "分页式存储管理",
        "B": "分段式存储管理",
        "C": "固定分区式存储管理",
        "D": "段页式存储管理"
      },
      "answer": [
        "B"
      ],
      "explanation": "分页式和段页式存储管理均以固定大小的页框为单位分配内存，进程末页通常无法填满页框，从而产生内部碎片；固定分区式因分区大小固定，当进程小于分区时，剩余空间同样形成内部碎片。而分段式按逻辑段动态分配内存，为每个段分配恰好满足其长度的连续空间，不会因分配粒度固定而导致空间浪费，因此不产生内部碎片（但可能因段间空隙产生外部碎片）。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_18",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "多进程在主存中彼此互不干扰的环境下运行，操作系统是通过（）来实现的。",
      "options": {
        "A": "内存分配",
        "B": "内存保护",
        "C": "内存扩充",
        "D": "地址映射"
      },
      "answer": [
        "B"
      ],
      "explanation": "多进程的执行通过内存保护实现互不干扰，如页式管理中有页地址越界保护，段式管理中有段地址越界保护。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_19",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "在动态分区分配存储管理中，随着时间的推移，会产生越来越多的小碎片，可通过紧凑技术解决，即操作系统不时地对进程进行移动和整理，则适合采用（）装入技术。",
      "options": {
        "A": "绝对装入",
        "B": "静态重定位",
        "C": "动态重定位",
        "D": "静态重定位和动态重定位"
      },
      "answer": [
        "C"
      ],
      "explanation": "绝对装入在编译时直接将程序的逻辑地址转换成物理地址；静态重定位虽然允许将装入模块装入内存的任何位置，但不允许进程在内存中移动；动态重定位在程序执行时才产生真正的物理地址，它允许进程在内存中移动，但需要一个重定位寄存器的支持。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_20",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "在动态分区分配存储管理中，不需要对空闲区链进行排序的分配算法是（）。",
      "options": {
        "A": "首次适应法",
        "B": "最佳适应法",
        "C": "最差适应法",
        "D": "都不需要"
      },
      "answer": [
        "A"
      ],
      "explanation": "首次适应法从空闲区链的链首开始顺序查找，找到一个大小满足要求的空闲分区，根据作业的大小，从该分区中划出一块内存空间分配给请求者，余下的空闲分区仍然留在空闲链中。这种算法不需要对空闲区链进行排序，只需按地址递增的顺序链接即可。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_21",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "分区管理中采用最佳适应分配算法时，把空闲区按（）次序登记在空闲区表中。",
      "options": {
        "A": "长度递增",
        "B": "长度递减",
        "C": "地址递增",
        "D": "地址递减"
      },
      "answer": [
        "A"
      ],
      "explanation": "最佳适应算法要求从剩余的空闲分区中选出最小且满足存储要求的分区，空闲区应按长度递增登记在空闲区表中。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_22",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "首次适应算法的空闲分区（）。",
      "options": {
        "A": "按大小递减顺序连在一起",
        "B": "按大小递增顺序连在一起",
        "C": "按地址由小到大排列",
        "D": "按地址由大到小排列"
      },
      "answer": [
        "C"
      ],
      "explanation": "首次适应算法的空闲分区按地址递增的次序排列。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_23",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "为了提高搜索空闲分区的速度，在大、中型系统中往往采用基于索引搜索的动态分区分配算法，以下不属于基于索引搜索的动态分区分配算法的是（）。",
      "options": {
        "A": "快速适应算法",
        "B": "伙伴系统",
        "C": "哈希算法",
        "D": "最佳适应算法"
      },
      "answer": [
        "D"
      ],
      "explanation": "基于顺序搜索的分配算法有首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法；基于索引搜索的分配算法有快速适应算法、伙伴系统和哈希算法。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_24",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "内存存储管理由连续分配方式发展为页式管理方式的主要动力是（）。",
      "options": {
        "A": "提高内存利用率",
        "B": "提高系统吞吐量",
        "C": "满足用户的需要",
        "D": "更好地满足多道程序的需要"
      },
      "answer": [
        "A"
      ],
      "explanation": "连续分配要求为进程分配连续内存，易产生内部碎片和外部碎片，导致空闲内存无法有效利用，内存利用率较低。页式管理采用离散分配方式，将内存和进程地址空间划分为相等大小的页框与页面，分配时无须物理连续，可充分利用零散空闲块，显著提升内存利用率。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_25",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "页式存储管理中的页表是由（）建立的。",
      "options": {
        "A": "编译程序",
        "B": "用户程序",
        "C": "链接程序",
        "D": "操作系统"
      },
      "answer": [
        "D"
      ],
      "explanation": "页表是由操作系统在程序装入内存时建立的，根据进程的逻辑地址空间和物理地址空间的对应关系，为每个页设置一个页表项，记录其对应的物理页框号、有效位等信息。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_26",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "在段式存储管理中，共享段表是用来实现（）的。",
      "options": {
        "A": "多个进程共享同一段代码或数据",
        "B": "多个进程共享同一段物理内存空间",
        "C": "多个进程共享同一段逻辑地址空间",
        "D": "多个进程共享同一段号"
      },
      "answer": [
        "A"
      ],
      "explanation": "在段式存储管理中，若有些段可被多个进程共享，则可用一个单独的共享段表来描述这些段，而不需要在每个进程的段表中都保存一份。共享段表的作用是实现多个进程共享同一段代码或数据，这样既能节省内存空间，又能便于实现对共享段的更新和维护。多个进程共享同一段物理内存空间并不需要用到共享段表，只需在各自的段表中指向相同的物理地址即可。多个进程共享同一段逻辑地址空间是不可能的，因为每个进程的逻辑地址空间都是相互独立的。在段式存储管理中，并不要求各个进程中相同功能的段必须有相同的段号。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_27",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "在段式存储管理中，若一个进程有 n 个段，则该进程需要（）个段表。",
      "options": {
        "A": "n",
        "B": "$n + 1$",
        "C": "1",
        "D": "2"
      },
      "answer": [
        "C"
      ],
      "explanation": "不管进程有多少个段，系统都为每个进程建立一张段表，每个段表项对应进程中的一段。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_28",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "采用分页或分段管理后，提供给用户的物理地址空间为（）。",
      "options": {
        "A": "分页支持更大的物理地址空间",
        "B": "分段支持更大的物理地址空间",
        "C": "不能确定",
        "D": "一样大"
      },
      "answer": [
        "C"
      ],
      "explanation": "页表和段表同样存储在内存中，系统提供给用户的物理地址空间为总空间大小减去页表或段表的长度。因为页表和段表的长度不能确定，所以提供给用户的物理地址空间大小也不能确定。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_29",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "分页系统中的页面是为（）。",
      "options": {
        "A": "用户所感知的",
        "B": "操作系统所感知的",
        "C": "编译系统所感知的",
        "D": "装配程序所感知的"
      },
      "answer": [
        "B"
      ],
      "explanation": "分页管理是在硬件和操作系统层面实现的，对用户、编译系统、装配程序等上层是不可见的。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_30",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "在页式存储管理中，页表的始地址存放在（）中。",
      "options": {
        "A": "物理内存",
        "B": "页表",
        "C": "快表（TLB）",
        "D": "页表寄存器"
      },
      "answer": [
        "D"
      ],
      "explanation": "页表的功能由一组专门的存储器实现，其始址放在页表基址寄存器（PTBR）中。这样才能满足在地址变换时能够较快地完成逻辑地址和物理地址之间的转换。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_31",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "在页式存储管理中，当 CPU 形成一个有效地址时，查找页表的工作是由（）实现的。",
      "options": {
        "A": "操作系统",
        "B": "页表查询程序",
        "C": "硬件",
        "D": "存储管理进程"
      },
      "answer": [
        "C"
      ],
      "explanation": "在页式存储管理中，CPU 将虚拟地址分解为页号和页内偏移量，然后通过硬件中的页表寄存器和内存管理单元（MMU），将页号转换为物理地址，再拼接上页内偏移量，得到最终的内存物理地址。这一过程是由硬件自动完成的，不需要操作系统或其他软件的干预。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_32",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "采用段式存储管理时，一个程序如何分段是在（）时决定的。",
      "options": {
        "A": "分配主存",
        "B": "用户编程",
        "C": "装作业",
        "D": "程序执行"
      },
      "answer": [
        "B"
      ],
      "explanation": "分段是指在用户编程时，将程序按照逻辑划分为几个逻辑段。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_33",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "下面的（）方法有利于程序的动态链接。",
      "options": {
        "A": "分段存储管理",
        "B": "分页存储管理",
        "C": "可变式分区管理",
        "D": "固定式分区管理"
      },
      "answer": [
        "A"
      ],
      "explanation": "程序的动态链接与程序的逻辑结构相关，分段存储管理将程序按照逻辑段进行划分，因此有利于其动态链接。其他的内存管理方式与程序的逻辑结构无关。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_35",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "可重入程序是通过（）方法来改善系统性能的。",
      "options": {
        "A": "改变时间片长度",
        "B": "改变用户数",
        "C": "提高对换速度",
        "D": "减少对换数量"
      },
      "answer": [
        "D"
      ],
      "explanation": "可重入程序主要是通过共享来使用同一块存储空间的，或通过动态链接的方式将所需的程序段映射到相关进程中去，其优点是减少了对程序段的调入/调出，因此减少了对换数量。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_36",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "操作系统实现（）存储管理的代价最小。",
      "options": {
        "A": "分区",
        "B": "分页",
        "C": "分段",
        "D": "段页式"
      },
      "answer": [
        "A"
      ],
      "explanation": "实现分页、分段和段页式存储管理需要特定的数据结构支持，如页表、段表等。为了提高性能，还需要硬件提供快存和地址加法器等，代价高。分区存储管理是满足多道程序设计的最简单的存储管理方案，特别适合嵌入式等微型设备。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_37",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "动态分区也称可变式分区，它是系统运行过程中（）动态建立的。",
      "options": {
        "A": "在作业装入时",
        "B": "在作业创建时",
        "C": "在作业完成时",
        "D": "在作业未装入时"
      },
      "answer": [
        "A"
      ],
      "explanation": "动态分区时，在系统启动后，除操作系统占据一部分内存外，其余所有内存空间是一个大空闲区，称为自由空间。若作业申请内存，则从空闲区中划出一个与作业需求量相适应的分区分配给该作业，将作业创建为进程，在作业运行完毕后，再收回释放的分区。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_38",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "在页式存储管理中选择页面的大小，需要考虑下列（）因素。 I. 页面大的好处是页表项比较少 II. 页面小的好处是可以减少由内碎片引起的内存浪费 III. 影响磁盘访问时间的主要因素通常不是页面大小，所以使用时优先考虑较大的页面",
      "options": {
        "A": "I 和 III",
        "B": "II 和 III",
        "C": "I 和 II",
        "D": "I、II 和 III"
      },
      "answer": [
        "C"
      ],
      "explanation": "页面较大时，页表项较少，但页内碎片较大；页面较小时，页内碎片较小，但页表项增多。此外，页面大小直接影响磁盘访问次数：页面过小会导致缺页频繁，大幅增加 I/O 次数和总访问时间；页面过大会加剧内部碎片。因此，页面大小需要在页表开销、内存浪费与 I/O 效率之间权衡。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_39",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "某个操作系统对内存的管理采用页式存储管理方法，所划分的页面大小（）。",
      "options": {
        "A": "要根据内存大小确定",
        "B": "必须相同",
        "C": "要根据 CPU 的地址结构确定",
        "D": "要依据外存和内存的大小确定"
      },
      "answer": [
        "B"
      ],
      "explanation": "页式管理中很重要的一个问题是页面大小如何确定。确定页面大小有很多因素，如进程的平均大小、页表占用的长度等。而一旦确定，所有的页面就是等长的（一般取 2 的整数幂倍），以便易于系统管理。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_40",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "引入段式存储管理方式，主要是为了更好地满足用户的一系列要求。下面选项中不属于这一系列要求的是（）。",
      "options": {
        "A": "提高内存利用率",
        "B": "方便编程",
        "C": "共享和保护",
        "D": "动态链接和增长"
      },
      "answer": [
        "A"
      ],
      "explanation": "段式存储管理按程序逻辑结构划分段，段名与段长由用户定义，便于编程；各段作为独立逻辑单位，支持共享、按段保护、动态增长（如数据段扩展）和动态链接（运行时按需加载）。而提高内存利用率并非段式管理的目标：因其段长不固定，易产生外部碎片，内存利用率通常较低。高效利用内存恰好是分页式管理的优势，通过固定页框离散分配，可有效消除外部碎片。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_42",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "以下存储管理方式中，不适合多道程序设计系统的是（）。",
      "options": {
        "A": "单用户连续分配",
        "B": "固定式分区分配",
        "C": "可变式分区分配",
        "D": "分页式存储管理方式"
      },
      "answer": [
        "A"
      ],
      "explanation": "单用户连续分配管理方式只适用于单用户、单任务的操作系统，不适用于多道程序设计。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_43",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "在分页存储管理中，主存的分配（）。",
      "options": {
        "A": "以页框为单位进行",
        "B": "以作业的大小进行",
        "C": "以物理段进行",
        "D": "以逻辑记录大小进行"
      },
      "answer": [
        "A"
      ],
      "explanation": "在分页存储管理中，逻辑地址分配是按页为单位进行分配的，而主存的分配即物理地址分配是以内存块为单位分配的。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_44",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "在段式分配中，CPU 每次从内存中取一次数据需要（）次访问内存。",
      "options": {
        "A": "1",
        "B": "3",
        "C": "2",
        "D": "4"
      },
      "answer": [
        "C"
      ],
      "explanation": "在段式分配中，取一次数据时先从内存查找段表，再拼成物理地址后访问内存，共需要2次内存访问。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_45",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "在段页式分配中，CPU 每次从内存中取一次数据需要（）次访问内存。",
      "options": {
        "A": "1",
        "B": "3",
        "C": "2",
        "D": "4"
      },
      "answer": [
        "B"
      ],
      "explanation": "在段页式分配中，取一次数据时先从内存查找段表，再访问内存查找相应的页表，最后拼成物理地址后访问内存，共需要3次内存访问。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_46",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 46,
      "type": "single_choice",
      "question": "采用段页式存储管理时，内存地址结构是（）。",
      "options": {
        "A": "线性的",
        "B": "二维的",
        "C": "三维的",
        "D": "四维的"
      },
      "answer": [
        "B"
      ],
      "explanation": "虽然段页式存储管理的内存地址结构分为段号、段内页号和页内地址三部分，但分页是操作系统的行为，用户不用指出页内偏移量的位数；而分段之间是独立的，且段长不定长，需指出段号所占的位数。因此，当采用段页式存储管理时，内存地址结构仍然是二维的。而在分页存储管理中，作业地址空间是一维的，即单一的线性地址空间，程序员只需要一个整数来表示地址。简言之，确定一个地址需要几个参数，作业地址空间就是几维的。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_47",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 47,
      "type": "single_choice",
      "question": "在段页式存储管理中，地址映射表是（）。",
      "options": {
        "A": "每个进程一张段表，两张页表",
        "B": "每个进程的每个段一张段表，一张页表",
        "C": "每个进程一张段表，每个段一张页表",
        "D": "每个进程一张页表，每个段一张段表"
      },
      "answer": [
        "C"
      ],
      "explanation": "段页式系统中，进程首先划分为段，每段再进一步划分为页。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_48",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 48,
      "type": "single_choice",
      "question": "操作系统采用分页存储管理方式，要求（）。",
      "options": {
        "A": "每个进程拥有一张页表，且进程的页表驻留在内存中",
        "B": "每个进程拥有一张页表，但只有执行进程的页表驻留在内存中",
        "C": "所有进程共享一张页表，以节约有限的内存空间，但页表必须驻留在内存中",
        "D": "所有进程共享一张页表，只有页表中当前使用的页面必须驻留在内存中，以最大限度地节省有限的内存空间"
      },
      "answer": [
        "A"
      ],
      "explanation": "在多个进程并发执行时，所有进程的页表大多数驻留在内存中，在系统中只设置一个页表寄存器（PTR），它存放页表在内存中的始址和长度。平时，进程未执行时，页表的始址和页表长度存放在本进程的 PCB 中，当调度到某进程时，才将这两个数据装入页表寄存器中。每个进程都有一个单独的逻辑地址，有一张属于自己的页表。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_49",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 49,
      "type": "single_choice",
      "question": "在分段存储管理方式中，（）。",
      "options": {
        "A": "以段为单位，每段是一个连续存储区",
        "B": "段与段之间必定不连续",
        "C": "段与段之间必定连续",
        "D": "每段是等长的"
      },
      "answer": [
        "A"
      ],
      "explanation": "在分段存储管理方式中，以段为单位进行分配，每段是一个连续存储区，每段不一定等长，段与段之间可连续，也可不连续。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_50",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 50,
      "type": "single_choice",
      "question": "下列关于段式存储管理的叙述中，错误的是（）。",
      "options": {
        "A": "段是逻辑结构上相对独立的程序块，因此段是可变长的",
        "B": "按程序中实际的段来分配主存，所以分配后的存储块是可变长的",
        "C": "每个段表项必须记录对应段在主存的起始位置和段的长度",
        "D": "分段方式对低级语言程序员和编译器来说是透明的"
      },
      "answer": [
        "D"
      ],
      "explanation": "分段方式对低级语言程序员和编译器是可见的，因为低级语言程序员可以按照程序的逻辑结构划分段，并给每个段命名；编译器也需要对各个段生成逻辑地址。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_51",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 51,
      "type": "single_choice",
      "question": "段页式存储管理汲取了页式管理和段式管理的长处，其实现原理结合了页式和段式管理的基本思想，即（）。",
      "options": {
        "A": "用分段方法来分配和管理物理存储空间，用分页方法来管理用户地址空间",
        "B": "用分段方法来分配和管理用户地址空间，用分页方法来管理物理存储空间",
        "C": "用分段方法来分配和管理主存空间，用分页方法来管理辅存空间",
        "D": "用分段方法来分配和管理辅存空间，用分页方法来管理主存空间"
      },
      "answer": [
        "B"
      ],
      "explanation": "段页式存储管理兼有页式管理和段式管理的优点，采用分段方法来分配和管理用户地址空间，采用分页方法来管理物理存储空间。但它的开销要比段式和页式管理的开销大。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_52",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 52,
      "type": "single_choice",
      "question": "以下存储管理方式中，会产生内部碎片的是（）。 I. 分段虚拟存储管理 II. 分页虚拟存储管理 III. 段页式分区管理 IV. 固定式分区管理",
      "options": {
        "A": "I、II、III",
        "B": "III、IV",
        "C": "仅 II",
        "D": "II、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "只要是固定的分配就会产生内部碎片，其余的都会产生外部碎片。若固定和不固定同时存在（例如段页式），则仍视为固定。分段虚拟存储管理：每段的长度都不一样（对应不固定），所以会产生外部碎片。分页虚拟存储管理：每页的长度都一样（对应固定），所以会产生内部碎片。段页式分区管理：既有固定，又有不固定，以固定为主，所以会有内部碎片。固定式分区管理：很明显固定，会产生内部碎片。综上分析，说法 II、III、IV 会产生内部碎片。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_53",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 53,
      "type": "single_choice",
      "question": "下列关于页式存储管理的论述中，正确的是（）。 I. 若关闭 TLB，则每存取一条指令或一个操作数都至少要访存 2 次 II. 页式存储管理不会产生内部碎片 III. 页式存储管理中的页面是用户所能感知的 IV. 页式存储方式可以采用静态重定位",
      "options": {
        "A": "I、II、IV",
        "B": "I、IV",
        "C": "仅 I",
        "D": "全都正确"
      },
      "answer": [
        "C"
      ],
      "explanation": "说法 I 正确: 关闭 TLB 后, 每当访问一条指令或存取一个操作数时都要先访问页表(内存中), 得到物理地址后, 再访问一次内存进行相应操作。说法 II 错误: 记住, 凡是分区固定的都会产生内部碎片, 而无外部碎片。说法 III 错误: 页式存储管理对于用户是透明的。说法 IV 错误: 静态重定位是在程序运行之前由装配程序完成的, 必须分配其要求的全部连续内存空间。而页式存储管理方案是将程序离散地分成若干页（块), 从而可以将程序装入不连续的内存空间, 显然静态重定位不能满足其要求。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_54",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 54,
      "type": "single_choice",
      "question": "在某分页存储管理系统中，地址结构长 18 位，其中 11～17 位为页号，0～10 位为页内偏移量，则主存的最大容量为（）KB，主存可分为（）个页。若有一作业依次放入 2、3、7 号物理块，相对地址 1500 处有一条指令 “store r1, 2500”，该指令地址所在页的页号为 0，则指令的物理地址为（），指令数据的存储地址所在页的页框号为（）。",
      "options": {
        "A": "256、256、5596、3",
        "B": "256、128、5596、3",
        "C": "256、128、5596、7",
        "D": "256、128、3548、7"
      },
      "answer": [
        "B"
      ],
      "explanation": "地址结构长 18 位，所以主存的最大容量为 $2^{18}=256KB$ ；页内偏移量占 11 位，所以页面大小为 $2^{11}=2048B$ ；页号占 7 位，所以主存页数为 $2^{7}=128$ 个。该指令的相对地址为 1500，小于一个页面的大小，所以该指令存放在 2 号物理块中，物理地址为 $2\\times2048+1500=5596$ ，指令数据的存放地址为 2500，大于一个页面的大小，所以指令数据存放在 3 号物理块中。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_55",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 55,
      "type": "single_choice",
      "question": "在某页式存储管理的系统中，主存容量为 1MB，被分成 256 个页框，页框号为 0, 1, 2, …, 255。某作业的地址空间占用 4 页，其页号为 0, 1, 2, 3，被分配到主存的第 2, 4, 1, 5 号页框中，则作业中的 2 号页在主存中的始址是（）。",
      "options": {
        "A": "1",
        "B": "1024",
        "C": "2048",
        "D": "4096"
      },
      "answer": [
        "D"
      ],
      "explanation": "主存容量为 1MB，分为 256 个页框，页框大小为 1MB/256 = 4KB，作业中的 2 号页被分配到主存的 1 号页框中，因此其在主存中的始址为 $1 \\times 4096 = 4096$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_56",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 56,
      "type": "single_choice",
      "question": "下列关于分页和分段的描述中，正确的是（）。",
      "options": {
        "A": "分段是信息的逻辑单位，段长由系统决定",
        "B": "引入分段的主要目的是实现离散分配并提高内存利用率",
        "C": "分页是信息的物理单位，页长由用户决定",
        "D": "页面在物理内存中只能从页面大小的整数倍地址开始存放"
      },
      "answer": [
        "D"
      ],
      "explanation": "分段是指将逻辑地址空间划分为若干不等长的单元，称为段。段长由用户根据信息的性质和逻辑结构决定，而不由系统决定，引入分段的主要目的是更好地满足用户的需求，实现程序的模块化和保护。实现离散分配并提高内存利用率是引入分页的主要目的。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_57",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 57,
      "type": "single_choice",
      "question": "在采用页式存储管理的系统中，逻辑地址空间大小为 256TB，页表项大小为 8B，页面大小为 4KB，则该系统中的页表应该采用（）级页表。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "C"
      ],
      "explanation": "逻辑地址空间大小为 $256TB = 2^{48}B$ ，逻辑地址有 48 位，页面大小为 $4KB = 2^{12}B$ ，页内偏移量 2 占 12 位，剩余 36 位表示页表索引，页表项大小为 8B，一个页面能存放 $4KB \\div 8 = 2^{9}$ 个页表项，因此可用 9 位来表示某一级的页表索引， $36 \\div 9 = 4$ ，所以共需要采用 4 级页表。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_58",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 58,
      "type": "single_choice",
      "question": "若对经典的页式存储管理方式的页表做出稍微改造，允许不同页表的页表项指向同一个页帧，则可能的结果有（）。 I. 可以实现对可重入代码的共享 II. 只需修改页表项，就能实现内存“复制”操作 III. 容易发生越界访问 IV. 可以实现进程间通信",
      "options": {
        "A": "I、II、IV",
        "B": "II、III",
        "C": "I、II、III",
        "D": "仅 I"
      },
      "answer": [
        "A"
      ],
      "explanation": "让不同页表的页表项指向同一个页帧，可以共享该页帧的代码，若代码是可重入的（如编辑软件、编译软件等），则这种方法可以节省大量的内存空间。实现内存“复制”操作时，不需要将页面的内容逐字节复制，而只需将页表中指向该页面的指针复制到目的地址的页表项中。越界保护是通过界地址寄存器实现的，说法 III 是干扰项。当多个进程需要通信时，可以采用共享内存的方式，它们是通过让各个进程页表的页表项指向相同的页帧实现的。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_59",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 59,
      "type": "single_choice",
      "question": "【2009 统考真题】分区分配内存管理方式的主要保护措施是（）。",
      "options": {
        "A": "界地址保护",
        "B": "程序代码保护",
        "C": "数据保护",
        "D": "栈保护"
      },
      "answer": [
        "A"
      ],
      "explanation": "每个进程都拥有自己独立的进程空间，若一个进程在运行时所产生的地址在其地址空间之外，则发生地址越界，因此需要进行界地址保护，即当程序要访问某个内存单元时，由硬件检查是否允许，若允许，则执行，否则产生地址越界中断。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_60",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 60,
      "type": "single_choice",
      "question": "【2009 统考真题】一个分段存储管理系统中，地址长度为 32 位，其中段号占 8 位，则最大段长是（）。",
      "options": {
        "A": "$2^{8}B$",
        "B": "$2^{16}B$",
        "C": "$2^{24}B$",
        "D": "$2^{32}B$"
      },
      "answer": [
        "C"
      ],
      "explanation": "分段存储管理的逻辑地址分为段号和位移量两部分，段内位移的最大值就是最大段长。地址长度为32位，段号占8位，因此位移量占 $32 - 8 = 24$ 位，因此最大段长为 $2^{24}\\mathrm{B}$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_61",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 61,
      "type": "single_choice",
      "question": "【2010 统考真题】某基于动态分区存储管理的计算机，其主存容量为 55MB（初始为空），采用最佳适配（Best Fit）算法，分配和释放的顺序为：分配 15MB，分配 30MB，释放 15MB，分配 8MB，分配 6MB，此时主存中最大空闲分区的大小是（）。",
      "options": {
        "A": "7MB",
        "B": "9MB",
        "C": "10MB",
        "D": "15MB"
      },
      "answer": [
        "B"
      ],
      "explanation": "最佳适配算法是指每次为作业分配内存空间时，总是找到能满足空间大小需要的最小空闲分区给作业，可以产生最小的内存空闲分区。下图显示了这个过程的主存空间变化。\n\n![](images/a0fb9db17c4b32caa70557d1a51653d8524f92811d6869ebc7af23973e2a0428.jpg)\n\n<details>\n<summary>bar_stacked</summary>\n\n| Category | Initial (MB) | Distribution (MB) |\n|---|---|---|\n| 55MB | 15 | 40 |\n| 15MB | 15 | 30 |\n| 15MB | 15 | 30 |\n| 30MB | 10 | 10 |\n| 30MB | 10 | 10 |\n| 15MB | 15 | 8 |\n| 15MB | 15 | 2 |\n| 6MB | 9 | 30 |\n| 6MB | 6 | 8 |\n| 9MB | 9 | 30 |\n| 8MB | 8 | 2 |\n| 2MB | 2 | 6 |\nThe chart displays a stacked bar chart with each bar representing the total volume for that phase. The labels on the bars indicate the phase names and their corresponding data volumes in MB.\n</details>\n\n图中，灰色部分为分配出去的空间，白色部分为空闲区。这样，容易发现，此时主存中最大空闲分区的大小为 9MB。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_62",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 62,
      "type": "single_choice",
      "question": "【2010 统考真题】某计算机采用二级页表的分页存储管理方式，按字节编址，页大小为 $2^{10}B$ ，页表项大小为 2B，逻辑地址结构为 <table><tr><td>页目录号</td><td>页号</td><td>页内偏移量</td></tr></table> 逻辑地址空间大小为 $2^{16}$ 页，则表示整个逻辑地址空间的页目录表中包含表项的个数至少是（）。",
      "options": {
        "A": "64",
        "B": "128",
        "C": "256",
        "D": "512"
      },
      "answer": [
        "B"
      ],
      "explanation": "页大小为 $2^{10}B$ ，所以页内偏移量占 10 位，又因为页表项大小为 2B，一页可以存放 $2^{9}$ 个页表项，所以页号占 9 位，根据逻辑地址空间共有 $2^{16}$ 页可知，页目录号加页号共占 16 位，页目录号占 7 位，所以页目录表中包含表项的个数至少是 $2^{7}=128$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_63",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 63,
      "type": "single_choice",
      "question": "【2011 统考真题】在虚拟内存管理中，地址变换机构将逻辑地址变换为物理地址，形成该逻辑地址的阶段是（）。",
      "options": {
        "A": "编辑",
        "B": "编译",
        "C": "链接",
        "D": "装载"
      },
      "answer": [
        "C"
      ],
      "explanation": "编译后的程序需要经过链接才能装载，而链接后形成的目标程序中的地址也就是逻辑地址。以 C 语言为例：C 程序经过预处理→编译→汇编→链接产生了可执行文件，其中链接的前一步是产生可重定位的二进制目标文件。C 语言采用源文件独立编译的方法，如程序 main.c, file1.c, file2.c, file1.h, file2.h 在链接的前一步生成了 main.o, file1.o, file2.o，这些目标模块的逻辑地址都从 0 开始，但只是相对于该模块的逻辑地址。链接器将这三个文件、libc 和其库文件链接成一个可执行文件，从而形成整个程序的完整逻辑地址空间。\n\n例如，file1.o 的逻辑地址为 0～1023，main.o 的逻辑地址为 0～1023，假设链接时将 file1.o 链接在 main.o 之后，则链接之后 file1.o 对应的逻辑地址应为 1024～2047。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_64",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 64,
      "type": "single_choice",
      "question": "【2014 统考真题】下列选项中，属于多级页表优点的是（）。",
      "options": {
        "A": "加快地址变换速度",
        "B": "减少缺页中断次数",
        "C": "减少页表项所占字节数",
        "D": "减少页表所占的连续内存空间"
      },
      "answer": [
        "D"
      ],
      "explanation": "多级页表不仅不会加快地址的变换速度,还会因为增加更多的查表过程,使地址变换速度减慢;也不会减少缺页中断的次数,相反,若访问过程中多级的页表都不在内存中,则会大大增加缺页的次数，并不会减少页表项所占的字节数，而多级页表能够减少页表所占的连续内存空间，即当页表太大时，将页表再分级，把每张页表控制在一页之内，减少页表所占的连续内存空间。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_65",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 65,
      "type": "single_choice",
      "question": "【2016 统考真题】某进程的段表内容如下所示。 <table><tr><td>段号</td><td>段长</td><td>内存起始地址</td><td>权限</td><td>状态</td></tr><tr><td>0</td><td>100</td><td>6000</td><td>只读</td><td>在内存</td></tr><tr><td>1</td><td>200</td><td>—</td><td>读写</td><td>不在内存</td></tr><tr><td>2</td><td>300</td><td>4000</td><td>读写</td><td>在内存</td></tr></table> 访问段号为2、段内地址为400的逻辑地址时，进行地址转换的结果是（）。",
      "options": {
        "A": "段缺失异常",
        "B": "得到内存地址 4400",
        "C": "越权异常",
        "D": "越界异常"
      },
      "answer": [
        "D"
      ],
      "explanation": "分段系统的逻辑地址 A 到物理地址 E 之间的地址变换过程如图 3.15 所示。\n\n① 从逻辑地址 A 中取出前几位为段号 S，后几位为段内偏移量 W，注意段式存储管理的题目中，逻辑地址一般以二进制数给出，而页式存储管理的题目中，逻辑地址一般以十进制数给出，读者要注意具体问题具体分析。  \n② 比较段号 S 和段表长度 M，若 $S \\geqslant M$ ，则产生越界异常，否则继续执行。  \n③ 在段表中查询段号对应的段表项，段号 S 对应的段表项地址 = 段表始址 $F +$ 段号 $S \\times$ 段表项长度。取出段表项中该段的段长 C，若 $W \\geqslant C$ ，则产生越界中断，否则继续执行。  \n④ 取出段表项中该段的基址 b，计算 $E = b + W$ ，用得到的物理地址 E 去访问内存。\n\n题目中段号为 2 的段长为 300，小于段内地址 400，因此发生越界异常，选项 D 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_66",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 66,
      "type": "single_choice",
      "question": "【2017 统考真题】某计算机按字节编址，其动态分区内存管理采用最佳适应算法，每次分配和回收内存后都对空闲分区链重新排序。当前空闲分区信息如下表所示。 <table><tr><td>分区始址</td><td>20K</td><td>500K</td><td>1000K</td><td>200K</td></tr><tr><td>分区大小</td><td>40KB</td><td>80KB</td><td>100KB</td><td>200KB</td></tr></table> 回收始址为 60K、大小为 140KB 的分区后，系统中空闲分区的数量、空闲分区链第一个分区的始址和大小分别是（）。",
      "options": {
        "A": "3,20K,380KB",
        "B": "3,500K,80KB",
        "C": "4,20K,180KB",
        "D": "4,500K,80KB"
      },
      "answer": [
        "B"
      ],
      "explanation": "回收始址为 60K、大小为 140KB 的分区时，它与表中第一个分区和第四个分区合并，成为始址为 20K、大小为 380KB 的分区，剩余 3 个空闲分区。在回收内存后，算法会对空闲分区链按分区大小由小到大进行排序，表中的第二个分区排第一。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_67",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 67,
      "type": "single_choice",
      "question": "【2019统考真题】在分段存储管理系统中，用共享段表描述所有被共享的段。若进程 $\\mathrm{P}_{1}$ 和 $\\mathrm{P}_2$ 共享段S，则下列叙述中，错误的是（）。",
      "options": {
        "A": "在物理内存中仅保存一份段 S 的内容",
        "B": "段 S 在 $P_{1}$ 和 $P_{2}$ 中应该具有相同的段号",
        "C": "$\\mathrm{P}_{1}$ 和 $\\mathrm{P}_{2}$ 共享段S在共享段表中的段表项",
        "D": "$P_{1}$ 和 $P_{2}$ 都不再使用段 S 时才回收段 S 所占的内存空间"
      },
      "answer": [
        "B"
      ],
      "explanation": "段的共享是通过两个作业的段表中相应表项指向被共享的段的同一个物理副本来实现的，因此在内存中仅保存一份段 S 的内容，选项 A 正确。段 S 对进程 $P_{1}$ 、 $P_{2}$ 来说，使用位置可能不同，所以在不同进程中的逻辑段号可能不同，选项 B 错误。段表项存放的是段的物理地址（包括段始址和段长度），对共享段 S 来说物理地址唯一，选项 C 正确。为了保证进程可以顺利使用段 S，段 S 必须确保在没有任何进程使用它（可在段表项中设置共享进程计数）后才能被删除，选项 D 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_68",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 68,
      "type": "single_choice",
      "question": "【2019 统考真题】某计算机主存按字节编址，采用二级分页存储管理，地址结构如下： <table><tr><td>页目录号(10位)</td><td>页号(10位)</td><td>页内偏移(12位)</td></tr></table> 虚拟地址 2050 1225H 对应的页目录号、页号分别是（）。",
      "options": {
        "A": "081H, 101H",
        "B": "081H, 401H",
        "C": "201H, 101H",
        "D": "201H, 401H"
      },
      "answer": [
        "A"
      ],
      "explanation": "题中给出的是十六进制地址，首先将它转化为二进制地址，然后用二进制地址去匹配题中对应的地址结构。转换为二进制地址和地址结构的对应关系如下图所示。\n\n![](images/9c1052130ec8950e9a5dfa157264b581bc48d194762150204085d2f75f831cf1.jpg)\n\n<details>\n<summary>text_image</summary>\n\n2050 1225H = 0010 0000 0101 0000 0001 0010 0010 0101\n页目录号 页号 页内偏移\n</details>\n\n前 10 位、11～20 位、21～32 位分别对应页目录号、页号和页内偏移。把页目录号、页号单独拿出，转换为十六进制时缺少的位数在高位补零，0000 1000 0001，0001 0000 0001 分别对应 081H，101H，选项 A 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_69",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 69,
      "type": "single_choice",
      "question": "【2019 统考真题】在下列动态分区分配算法中，最容易产生内存碎片的是（）。",
      "options": {
        "A": "首次适应算法",
        "B": "最坏适应算法",
        "C": "最佳适应算法",
        "D": "循环首次适应算法"
      },
      "answer": [
        "C"
      ],
      "explanation": "最佳适应算法总是匹配与当前大小要求最接近的空闲分区，但是大多数情况下空闲分区的大小不可能完全和当前要求的大小相等，几乎每次分配内存都会产生很小的难以利用的内存块，所以最佳适应算法最容易产生最多的内存碎片。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_70",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 70,
      "type": "single_choice",
      "question": "【2021 统考真题】在采用二级页表的分页系统中，CPU 页表基址寄存器中的内容是（）。",
      "options": {
        "A": "当前进程的一级页表的起始虚拟地址",
        "C": "当前进程的二级页表的起始虚拟地址",
        "B": "当前进程的一级页表的起始物理地址",
        "D": "当前进程的二级页表的起始物理地址"
      },
      "answer": [
        "B"
      ],
      "explanation": "在多级页表中，页表基址寄存器存放的是顶级页表的起始物理地址，所以存放的是一级页表的起始物理地址。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_71",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 71,
      "type": "single_choice",
      "question": "【2023 统考真题】进程 R 和 S 共享数据 data，若 data 在 R 和 S 中所在页的页号分别为 p1 和 p2，两个页所对应的页框号分别为 f1 和 f2，则下列叙述中，正确的是（）。",
      "options": {
        "A": "p1 和 p2 一定相等，f1 和 f2 一定相等",
        "B": "p1 和 p2 一定相等，f1 和 f2 不一定相等",
        "C": "p1 和 p2 不一定相等，f1 和 f2 一定相等",
        "D": "p1 和 p2 不一定相等，f1 和 f2 不一定相等"
      },
      "answer": [
        "C"
      ],
      "explanation": "进程 R 和 S 共享数据 data，说明它们都映射了同一个共享内存段，于是这个段在物理内存中的位置（页框号）必然相同，但这两个段在不同进程的地址空间中的位置（页号）可以不同。因\n\n此，p1 和 p2 不一定相等，f1 和 f2 一定相等。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-1-7_72",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.1.7",
      "section_title": "本节试题精选",
      "num": 72,
      "type": "single_choice",
      "question": "【2024统考真题】下列算法中，每次回收分区时仅合并大小相等的空闲分区的是（）。",
      "options": {
        "A": "伙伴算法",
        "B": "最佳适应算法",
        "C": "最坏适应算法",
        "D": "首次适应算法"
      },
      "answer": [
        "A"
      ],
      "explanation": "伙伴算法在回收一个大小为 $2^{i}$ 的空闲分区时，会检查其伙伴分区（地址相邻、大小同为 $2^{i}$ 的分区）是否也空闲。若是，则将两者合并为一个大小为 $2^{i+1}$ 的空闲分区；随后，继续检查新生成的 $2^{i+1}$ 分区是否存在同大小的伙伴，若有，则再次合并，以此类推。因此，伙伴算法在一次回收过程中可能触发多次合并，但每次合并仅发生在两个大小相等且互为伙伴的空闲分区之间。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_23",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "LRU 页面置换算法软件实现开销高的直接原因是（）。",
      "options": {
        "A": "需要硬件的特殊支持",
        "B": "需要特殊的中断处理程序",
        "C": "需要在页表中标明特殊的页类型",
        "D": "需维护访问历史并遍历查找"
      },
      "answer": [
        "D"
      ],
      "explanation": "LRU 算法要求在缺页时选择淘汰最近最久未使用的页面。若采用纯软件实现，则需为每个驻留页面维护其访问历史信息，并在每次缺页时遍历所有页帧以确定替换目标，时间复杂度为 $O(n)$ ，开销显著。选项 A 并非开销高的原因，而是为降低该软件开销而引入的硬件手段。换言之，正因软件实现开销过高，才需借助硬件辅助。选项 B 和 C 与 LRU 算法的机制无关。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_24",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "在虚拟存储器系统的页表项中，决定是否会发生页故障的是（）。",
      "options": {
        "A": "有效位",
        "B": "修改位",
        "C": "页类型",
        "D": "保护码"
      },
      "answer": [
        "A"
      ],
      "explanation": "页表项中的合法位信息显示本页面是否在内存中，即决定了是否会发生页面故障。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_25",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "在页面置换策略中，（）策略可能引起抖动。",
      "options": {
        "A": "FIFO",
        "B": "LRU",
        "C": "没有一种",
        "D": "所有"
      },
      "answer": [
        "D"
      ],
      "explanation": "抖动是进程的页面置换过程中，频繁的页面调度（缺页中断）行为，所有的页面调度策略都不可能完全避免抖动。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_26",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "虚拟存储管理系统的基础是程序的（）理论。",
      "options": {
        "A": "动态性",
        "B": "虚拟性",
        "C": "局部性",
        "D": "全局性"
      },
      "answer": [
        "C"
      ],
      "explanation": "基于局部性原理：当程序装入时，不必将其全部读入内存，而只需将当前需要执行的部分页或段读入内存，就可让程序开始执行。在程序执行过程中，若需执行的指令或访问的数据尚未在内存（称为缺页或缺段）中，则由处理器通知操作系统将相应的页或段调入内存，然后继续执行程序。由于程序具有局部性，虚拟存储管理在扩充逻辑地址空间的同时，对程序执行时内存调换的代价很小。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_27",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "请求分页存储管理的主要特点是（）。",
      "options": {
        "A": "消除了内部碎片",
        "B": "扩充了内存",
        "C": "便于动态链接",
        "D": "便于信息共享"
      },
      "answer": [
        "B"
      ],
      "explanation": "请求分页存储管理就是为了解决内存容量不足而使用的方法，它基于局部性原理实现了以时间换取空间的目的。它的主要特点自然是间接扩充了内存。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_28",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "在请求分页存储管理的页表中增加了若干项信息，其中修改位和访问位供（）参考。",
      "options": {
        "A": "分配页面",
        "B": "调入页面",
        "C": "置换算法",
        "D": "程序访问"
      },
      "answer": [
        "C"
      ],
      "explanation": "当需要置换页面时，置换算法根据修改位和访问位选择调出内存的页面。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_29",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "下列关于驻留集和工作集的表述中，正确的是（）。 I. 驻留集是进程已装入内存的页面的集合 II. 工作集是某段时间间隔内，进程运行所需要访问页面的集合 III. 工作集是驻留集的子集",
      "options": {
        "A": "I",
        "B": "I、II",
        "C": "II、III",
        "D": "I、II、III"
      },
      "answer": [
        "B"
      ],
      "explanation": "驻留集是指分配给进程的物理页面的集合。工作集是指在某段时间内，进程实际要访问的页面的集合。工作集不一定是驻留集的子集，因为有些工作集中的页面可能还未被调入内存，或已被换出内存。只有当工作集完全包含在驻留集中时，才能保证进程不发生缺页中断。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_30",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "在配置了 TLB 的页式虚拟存储管理的系统中，假设访问内存需要 $\\mu s$ ，查询 TLB 需要 $0.2\\mu s$ 。已知 TLB 和内存的访问是串行的，请问在 TLB 命中率为 85% 和 50% 时，系统的平均访问时间分别是多少？（）",
      "options": {
        "A": "$1.5\\mu s$ , $1.8\\mu s$",
        "B": "$1.35\\mu s, 1.7\\mu s$",
        "C": "$1.6\\mu s$ , $1.7\\mu s$",
        "D": "$1.35\\mu s$ , $1.8\\mu s$"
      },
      "answer": [
        "B"
      ],
      "explanation": "平均访存时间 = 命中率 × 快表访问时间 + 不命中率 × (快表访问时间 + 页表访问时间) + 内存访问时间。当 TLB 命中率为 85% 时，平均访存时间 = 0.85×0.2 + 0.15×(1 + 0.2) + 1 = 1.35μs。当 TLB 命中率为 50% 时，平均访存时间 = 0.5×0.2 + 0.5×(1 + 0.2) + 1 = 1.7μs。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_31",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "下列选项中，（）不是页面换进换出效率的影响因素。",
      "options": {
        "A": "页面置换算法",
        "B": "已修改页面写回磁盘的频率",
        "C": "磁盘数据读入内存的频率",
        "D": "CPU 与内存交换的速度"
      },
      "answer": [
        "D"
      ],
      "explanation": "页面置换算法影响进程运行过程中的缺页率，从而影响页面换进换出的开销。若建立一个已修改页面的链表，则对每个要被换出的页面（已修改），系统可暂不把它们写回磁盘，而等被换出页面数量达到一定值时，才集中写回磁盘，从而减少页面换出的开销。当已修改页面链表中暂未写回磁盘的页面再使用时，就不需从磁盘中调入，而直接从该链表上获取，从而减少页面换进的开销。CPU与内存交换的速度，不是页面换进换出效率的影响因素。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_32",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "允许进程在所有页框中选择一个页面替换，而不管该页框是否已分配给其他进程的置换方法是（）。",
      "options": {
        "A": "局部置换",
        "B": "全局置换",
        "C": "进程外置换",
        "D": "进程内置换"
      },
      "answer": [
        "B"
      ],
      "explanation": "这种置换方法是全局置换，它不受驻留集大小的限制，可以从任何页框中选择一个页面置换。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_33",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "在页面置换算法中，存在 Belady 现象的算法是（）。",
      "options": {
        "A": "最佳页面置换算法（OPT）",
        "B": "先进先出置换算法（FIFO）",
        "C": "最近最久未使用算法（LRU）",
        "D": "最近未使用算法（NRU）"
      },
      "answer": [
        "B"
      ],
      "explanation": "FIFO 是队列类算法，有 Belady 现象；选项 C、D 均为堆栈类算法，理论上可以证明不会出现 Belady 现象。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_34",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "页式虚拟存储管理的主要特点是（）。",
      "options": {
        "A": "不要求将作业装入主存的连续区域",
        "B": "不要求将作业同时全部装入主存的连续区域",
        "C": "不要求进行缺页中断处理",
        "D": "不要求进行页面置换"
      },
      "answer": [
        "B"
      ],
      "explanation": "页式虚拟存储管理的主要特点是，不要求将作业同时全部装入主存的连续区域，一般只装入\n\n10%～30%。不要求将作业装入主存连续区域是所有离散式存储管理（包括页式存储管理）的特点；页式虚拟存储管理需要进行缺页中断处理和页面置换。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_35",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "提供虚拟存储技术的存储管理方法有（）。",
      "options": {
        "A": "动态分区存储管理",
        "B": "页式存储管理",
        "C": "请求段式存储管理",
        "D": "存储覆盖技术"
      },
      "answer": [
        "C"
      ],
      "explanation": "虚拟存储技术是基于页或段从内存的调入/调出实现的，需要有请求机制的支持。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_36",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "内存映射可以将一个文件映射到进程的虚拟地址空间的某个区域，实现文件磁盘地址和进程虚拟地址空间的映射关系，下列说法中正确的是（）。",
      "options": {
        "A": "内存映射文件是将整个文件内容一次性加载到内存中的一种方式",
        "B": "内存映射文件只适用于读取文件，不支持对文件进行写操作",
        "C": "内存映射文件可以通过修改内存中的数据来实现对文件的写操作",
        "D": "由于进程的虚拟地址空间是独立的，内存映射文件不支持多进程映射到同一文件"
      },
      "answer": [
        "C"
      ],
      "explanation": "内存映射文件将一个文件映射到进程的虚拟地址空间的某个区域，让进程可以按读/写内存的方式来读/写文件，选项 C 正确。内存映射文件不是一次性加载整个文件，而是按需加载文件的部分，这样既节省空间，又方便处理大文件。虽然进程的虚拟地址空间是独立的，但操作系统可以通过页表将对应的虚拟地址空间映射到相同的物理内存，很方便实现多个进程共享同一文件。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_37",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "在虚拟分页存储管理系统中，若进程访问的页面不在主存中，且主存中没有可用的空闲帧时，则系统正确的处理顺序为（）。",
      "options": {
        "A": "决定淘汰页→页面调出→缺页中断→页面调入",
        "B": "决定淘汰页→页面调入→缺页中断→页面调出",
        "C": "缺页中断→决定淘汰页→页面调出→页面调入",
        "D": "缺页中断→决定淘汰页→页面调入→页面调出"
      },
      "answer": [
        "C"
      ],
      "explanation": "根据缺页中断的处理流程，产生缺页中断后，首先去内存寻找空闲物理块，若内存没有空闲物理块，则使用页面置换算法决定淘汰页面，然后调出该淘汰页面，最后再调入该进程欲访问的页面。整个流程可归纳为缺页中断→决定淘汰页→页面调出→页面调入。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_38",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "已知系统为 32 位实地址，采用 48 位虚拟地址，页面大小为 4KB，页表项大小为 8B。假设系统使用纯页式存储，则要采用（）级页表，页内偏移（）位。",
      "options": {
        "A": "3, 12",
        "B": "3, 14",
        "C": "4, 12",
        "D": "4, 14"
      },
      "answer": [
        "C"
      ],
      "explanation": "页面大小为 4KB，因此页内偏移为 12 位。系统采用 48 位虚拟地址，因此虚页号 48 - 12 = 36 位。采用多级页表时，最高级页表项不能超出一页大小；每页能容纳的页表项数为 $4KB/8B = 512 = 2^{9}$ ，36/9 = 4，因此应采用 4 级页表，最高级页表项正好占据一页空间，所以本题选择选项 C。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_39",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "下列说法中，正确的是（）。 I. 先进先出（FIFO）页面置换算法会产生 Belady 现象 II. 最近最少使用（LRU）页面置换算法会产生 Belady 现象 III. 在进程运行时，若其工作集页面都在虚拟存储器内，则能够使该进程有效地运行，否则会出现频繁的页面调入/调出现象 IV. 在进程运行时，若其工作集页面都在主存储器内，则能够使该进程有效地运行，否则会出现频繁的页面调入/调出现象",
      "options": {
        "A": "I、III",
        "B": "I、IV",
        "C": "II、III",
        "D": "II、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "FIFO 算法可能产生 Belady 现象，例如页面走向为 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 时，当分配 3 帧时产生 9 次缺页中断，分配 4 帧时产生 10 次缺页中断，说法 I 正确。最近最少使用法不会产生 Belady 现象，说法 II 错误。若页面在内存中，则不会产生缺页中断，即不会出现页面的调入/调出，而不是虚拟存储器（包括作为虚拟内存那部分硬盘），所以说法 III 错误、说法 IV 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_40",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "测得某个采用按需调页策略的计算机系统的部分状态数据为：CPU 利用率为 20%，用于交换空间的磁盘利用率为 97.7%，其他设备的利用率为 5%。由此判断系统出现异常，这种情况下（）能提高系统性能。",
      "options": {
        "A": "安装一个更快的硬盘",
        "B": "通过扩大硬盘容量增加交换空间",
        "C": "增加运行进程数",
        "D": "加内存条来增加物理空间容量"
      },
      "answer": [
        "D"
      ],
      "explanation": "用于交换空间的磁盘利用率已达 97.7%，其他设备的利用率为 5%，CPU 的利用率为 20%，说明在任务作业不多的情况下交换操作非常频繁，因此判断物理内存严重短缺。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_42",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "在请求分页存储管理系统中，为了提高 TLB 命中率，可行的方法是（）。 I. 增大 TLB 容量 II. 采用多级页表 III. 提高页面大小 IV. 降低页面大小",
      "options": {
        "A": "I 和 III",
        "B": "I 和 IV",
        "C": "I、II和III",
        "D": "II和III"
      },
      "answer": [
        "A"
      ],
      "explanation": "增大 TLB 容量可以提高 TLB 命中率，因为可以缓存更多的地址映射。采用多级页表对 TLB 命中率没有影响。提高页面大小可用较少的页面覆盖更大的地址空间，从而减少页表项，因此可以提高 TLB 命中率。反之，降低页面大小则会降低 TLB 命中率。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_43",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "【2011 统考真题】在缺页处理过程中，操作系统执行的操作可能是（）。 I. 修改页表 II. 磁盘 I/O III. 分配页框",
      "options": {
        "A": "仅 I、II",
        "B": "仅 II",
        "C": "仅 III",
        "D": "I、II和III"
      },
      "answer": [
        "D"
      ],
      "explanation": "缺页中断产生后，需要在内存中找到空闲页框并分配给需要访问的页（可能涉及页面置换），之后缺页中断处理程序调用设备驱动程序做磁盘 I/O，将位于外存上的页面调入内存，调入后需要修改页表，将页表中代表该页是否在内存的标志位（或有效位）置为 1，并将物理页框号填入相应位置，必要时还需要修改其他相关表项等。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_44",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "【2011 统考真题】当系统发生抖动时，可以采取的有效措施是（）。 I. 撤销部分进程 II. 增加磁盘交换区的容量 III. 提高用户进程的优先级",
      "options": {
        "A": "仅 I",
        "B": "仅 II",
        "C": "仅 III",
        "D": "仅 I、II"
      },
      "answer": [
        "A"
      ],
      "explanation": "在具有对换功能的操作系统中，通常把外存分为文件区（用于存放文件）和对换区（用于存放从内存换出的进程）。抖动是指刚刚被换出的页很快又要被访问，为此又要换出其他页，而该页又很快被访问，如此频繁地置换页面，以致大部分时间都花在页面置换上，导致系统性能下降。撤销部分进程可以减少所要用到的页面数，防止抖动。对换区大小和进程优先级都与抖动无关。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_45",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "【2012 统考真题】下列关于虚拟存储器的叙述中，正确的是（）。",
      "options": {
        "A": "虚拟存储只能基于连续分配技术",
        "B": "虚拟存储只能基于非连续分配技术",
        "C": "虚拟存储容量只受外存容量的限制",
        "D": "虚拟存储容量只受内存容量的限制"
      },
      "answer": [
        "B"
      ],
      "explanation": "当采用连续分配方式时，会使相当一部分内存空间都处于暂时或“永久”的空闲状态，造成内存资源的严重浪费，也无法从逻辑上扩大内存容量，因此虚拟内存的实现只能建立在离散分配的内存管理的基础上。有以下三种实现方式：请求分页；请求分段；请求段页式。虚存的实际容量受外存和内存容量之和限制，虚存的最大容量是由计算机的地址位数决定的。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_46",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 46,
      "type": "single_choice",
      "question": "【2013 统考真题】若用户进程访问内存时产生缺页，则在下列选项中，操作系统可能执行的操作是（）。 I. 处理越界错 II. 置换页 III. 分配内存",
      "options": {
        "A": "仅 I、II",
        "B": "仅 II、III",
        "C": "仅 I、III",
        "D": "I、II和III"
      },
      "answer": [
        "B"
      ],
      "explanation": "用户进程访问内存时缺页，会发生缺页中断。发生缺页中断时，系统执行的操作可能是置换页面或分配内存。越界检查发生在查询页表之前，而此处产生了缺页中断，说明已经正常进行到查询页表的阶段，系统此时没有产生越界错，因此不会进行越界出错处理。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_47",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 47,
      "type": "single_choice",
      "question": "【2014 统考真题】下列措施中，能加快虚实地址转换的是（）。 I. 增大快表（TLB）容量 II. 让页表常驻内存 III. 增大交换区（swap）",
      "options": {
        "A": "仅 I",
        "B": "仅 II",
        "C": "仅 I、II",
        "D": "仅 II、III"
      },
      "answer": [
        "C"
      ],
      "explanation": "虚实地址转换是指逻辑地址和物理地址的转换。增大快表容量能把更多的表项装入快表，会加快虚实地址转换的速度；让页表常驻内存可以省去一些不在内存中的页表从磁盘上调入的过程，也能加快虚实地址转换；增大交换区对虚实地址转换速度无影响，因此说法 I、II 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_48",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 48,
      "type": "single_choice",
      "question": "【2014 统考真题】在页式虚拟存储管理系统中，采用某些页面置换算法会出现 Belady 异常现象，即进程的缺页次数会随着分配给该进程的页框个数的增加而增加。下列算法中，可能出现 Belady 异常现象的是（）。 I. LRU 算法 II. FIFO 算法 III. OPT 算法",
      "options": {
        "A": "仅 II",
        "B": "仅 I、II",
        "C": "仅 I、III",
        "D": "仅 II、III"
      },
      "answer": [
        "A"
      ],
      "explanation": "只有 FIFO 算法会导致 Belady 异常。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_49",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 49,
      "type": "single_choice",
      "question": "【2015 统考真题】在请求分页系统中，页面分配策略与页面置换策略不能组合使用的是（）。",
      "options": {
        "A": "可变分配，全局置换",
        "B": "可变分配，局部置换",
        "C": "固定分配，全局置换",
        "D": "固定分配，局部置换"
      },
      "answer": [
        "C"
      ],
      "explanation": "对各进程进行固定分配时页面数不变，不可能出现全局置换。而选项 A、B、D 是现代操作系统中常见的 3 种策略。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_50",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 50,
      "type": "single_choice",
      "question": "【2015 统考真题】系统为某进程分配了 4 个页框，该进程已访问的页号序列为 2, 0, 2, 9, 3, 4, 2, 8, 2, 4, 8, 4, 5。若进程要访问的下一页的页号为 7，则依据 LRU 算法，应淘汰页的页号是（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "8"
      },
      "answer": [
        "A"
      ],
      "explanation": "可以采用书中常规的解法思路，也可以采用便捷法。对页号序列从后往前计数，直到数到4（页框数）个不同的数字为止，这个停止的数字就是要淘汰的页号（最近最久未使用的页），题中为页号2。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_51",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 51,
      "type": "single_choice",
      "question": "【2016 统考真题】某系统采用改进型 CLOCK 算法，页表项中字段 A 为访问位，M 为修改位。A = 0 表示页最近没有被访问，A = 1 表示页最近被访问过。M = 0 表示页未被修改过，M = 1 表示页被修改过。按(A, M)所有可能的取值，将页分为 (0, 0), (1, 0), (0, 1) 和(1, 1)四类，则该算法淘汰页的次序为（）。",
      "options": {
        "A": "$(0,0)$ , $(0,1)$ , $(1,0)$ , $(1,1)$",
        "B": "$(0,0),(1,0),(0,1),(1,1)$",
        "C": "$(0,0),(0,1),(1,1),(1,0)$",
        "D": "$(0,0)$ , $(1,1)$ , $(0,1)$ , $(1,0)$"
      },
      "answer": [
        "A"
      ],
      "explanation": "改进型 CLOCK 算法执行的步骤如下。\n\n1）从指针的当前位置开始，扫描帧缓冲区。在这次扫描过程中，对使用位不做任何修改。选择遇到的第一个帧（A=0, M=0）用于替换。  \n2）若第1）步失败，则重新扫描，查找（A=0, M=1）的帧。选择遇到的第一个这样的帧用于替换。在这个扫描过程中，对每个跳过的帧，将其使用位设置成0。  \n3）若第2）步失败，则指针将回到它的最初位置，并且集合中所有帧的使用位均为0。重复第1）步，并在有必要时重复第2）步，这样将可以找到供替换的帧。\n\n因此，该算法淘汰页的次序为 $(0,0)$ ， $(0,1)$ ， $(1,0)$ ， $(1,1)$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_52",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 52,
      "type": "single_choice",
      "question": "【2016统考真题】某进程访问页面的序列如下所示（注意，抖动和工作集已从最新大纲中删除）。 ![](images/c12c70b326397ddd4d274fda34e38845ddb3657b9eb36170f757859059e99be1.jpg) <details> <summary>text_image</summary> …, 1, 3, 4, 5, 6, 0, 3, 2, 3, 2, ↑ 0, 4, 0, 3, 2, 9, 2, 1, … ↑ t 时间 </details> 若工作集的窗口大小为 6，则在 t 时刻的工作集为（）。",
      "options": {
        "A": "$\\{6,0,3,2\\}$",
        "B": "$\\{2,3,0,4\\}$",
        "C": "$\\{0,4,3,2,9\\}$",
        "D": "$\\{4, 5, 6, 0, 3, 2\\}$"
      },
      "answer": [
        "A"
      ],
      "explanation": "在任意时刻 t，都存在一个集合，它包含所有最近 k 次（该题窗口大小为 6）内存访问所访问过的页面。这个集合 $w(k, t)$ 就是工作集。题中最近 6 次访问的页面分别为 6, 0, 3, 2, 3, 2，去除重复的页面，形成的工作集为 $\\{6, 0, 3, 2\\}$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_53",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 53,
      "type": "single_choice",
      "question": "【2019 统考真题】某系统采用 LRU 页置换算法和局部置换策略，若系统为进程 P 预分配了 4 个页框，进程 P 访问页号的序列为 0, 1, 2, 7, 0, 5, 3, 5, 0, 2, 7, 6，则进程访问上述页的过程中，产生页置换的总次数是（）。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "C"
      ],
      "explanation": "最近最久未使用（LRU）算法每次执行页面置换时会换出最近最久未使用过的页面。第一次访问 5 页面时，会把最久未被使用的 1 页面换出，第一次访问 3 页面时，会把最久未访问的 2 页面换出。具体的页面置换情况如下图所示。\n\n<table><tr><td>访问页面</td><td>0</td><td>1</td><td>2</td><td>7</td><td>0</td><td>5</td><td>3</td><td>5</td><td>0</td><td>2</td><td>7</td><td>6</td></tr><tr><td>物理块 1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr><tr><td>物理块 2</td><td></td><td>1</td><td>1</td><td>1</td><td>1</td><td>5</td><td>5</td><td>5</td><td>5</td><td>5</td><td>5</td><td>6</td></tr><tr><td>物理块 3</td><td></td><td></td><td>2</td><td>2</td><td>2</td><td>2</td><td>3</td><td>3</td><td>3</td><td>3</td><td>7</td><td>7</td></tr><tr><td>物理块 4</td><td></td><td></td><td></td><td>7</td><td>7</td><td>7</td><td>7</td><td>7</td><td>7</td><td>2</td><td>2</td><td>2</td></tr><tr><td>缺页否</td><td>√</td><td>√</td><td>√</td><td>√</td><td></td><td>√</td><td>√</td><td></td><td></td><td>√</td><td>√</td><td>√</td></tr></table>\n\n需要注意的是，题中问的是页置换次数，而不是缺页次数，所以前4次缺页未换页的情况不考虑在内，答案为5次，因此选择选项C。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_54",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 54,
      "type": "single_choice",
      "question": "【2020 统考真题】下列因素中，影响请求分页系统有效（平均）访存时间的是（）。 I. 缺页率 II. 磁盘读/写时间 III. 内存访问时间 IV. 执行缺页处理程序的 CPU 时间",
      "options": {
        "A": "仅 II、III",
        "B": "仅 I、IV",
        "C": "仅 I、III、IV",
        "D": "I、II、III 和 IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "说法 I 影响缺页中断的频率，缺页率越高，平均访存时间越长；说法 II 和 IV 影响缺页中断的处理时间，中断处理时间越长，平均访存时间越长；说法 III 影响访问页表和访问目标物理地址的时间，所以说法 I、II、III 和 IV 均正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_55",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 55,
      "type": "single_choice",
      "question": "【2021统考真题】某请求分页存储系统的页大小为4KB，按字节编址。系统给进程P分配2个固定的页框，并采用改进型CLOCK算法，进程P页表的部分内容见下表。 <table><tr><td>页号</td><td>页框号</td><td>存在位1: 存在, 0: 不存在</td><td>访问位1: 访问, 0: 未访问</td><td>修改位1: 修改, 0: 未修改</td></tr><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr><tr><td>2</td><td>20 H</td><td>0</td><td>0</td><td>0</td></tr><tr><td>3</td><td>60 H</td><td>1</td><td>1</td><td>0</td></tr><tr><td>4</td><td>80 H</td><td>1</td><td>1</td><td>1</td></tr><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr></table> 若 P 访问虚拟地址为 02A01H 的存储单元，则经地址变换后得到的物理地址是（）。",
      "options": {
        "A": "00A01H",
        "B": "20A01H",
        "C": "60A01H",
        "D": "80A01H"
      },
      "answer": [
        "C"
      ],
      "explanation": "页面大小为 4KB，低 12 位是页内偏移。虚拟地址为 02A01H，页号为 02H，02H 页对应的页表项中存在位为 0，进程 P 分配的页框固定为 2，且内存中已有两个页面存在。根据 Clock 算法，选择将 3 号页换出，将 2 号页放入 60H 页框，经过地址变换后得到的物理地址是 60A01H。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_56",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 56,
      "type": "single_choice",
      "question": "【2022 统考真题】某进程访问的页 b 不在内存中，导致产生缺页异常，该缺页异常处理过程中不一定包含的操作是（）。",
      "options": {
        "A": "淘汰内存中的页",
        "B": "建立页号与页框号的对应关系",
        "C": "将页 b 从外存读入内存",
        "D": "修改页表中页 b 对应的存在位"
      },
      "answer": [
        "A"
      ],
      "explanation": "缺页异常需要从磁盘调页到内存中，将新调入的页与页框建立对应关系，并修改该页的存在位，选项 B、C、D 正确；若内存中有空闲页框，则不需要淘汰其他页，选项 A 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_57",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 57,
      "type": "single_choice",
      "question": "【2022统考真题】下列选项中，不会影响系统缺页率的是（）。",
      "options": {
        "A": "页置换算法",
        "B": "工作集的大小",
        "C": "进程的数量",
        "D": "页缓冲队列的长度"
      },
      "answer": [
        "D"
      ],
      "explanation": "页置换算法会影响缺页率，例如，LRU 算法的缺页率通常要比 FIFO 算法的缺页率低，排除选项 A。工作集的大小决定了分配给进程的物理块数，分配给进程的物理块数越多，缺页率就越低，排除选项 B。进程的数量越多，对内存资源的竞争越激烈，每个进程被分配的物理块数越少，缺页率也就越高，排除选项 C。页缓冲队列是将被淘汰的页面缓存下来，暂时不写回磁盘，队列长度会影响页面置换的速度，但不会影响缺页率。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_58",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 58,
      "type": "single_choice",
      "question": "【2023 统考真题】对于采用虚拟内存管理方式的系统，下列关于进程虚拟地址空间的叙述中，错误的是（）。",
      "options": {
        "A": "每个进程都有自己独立的虚拟地址空间",
        "B": "C 语言中 malloc() 函数返回的是虚拟地址",
        "C": "进程对数据段和代码段可以有不同的访问权限",
        "D": "虚拟地址空间的大小由内存和硬盘的大小决定"
      },
      "answer": [
        "D"
      ],
      "explanation": "虚拟地址空间的大小由底层的虚拟内存管理机制和操作系统决定，通常在不同的操作系统中有所不同，与内存和硬盘的大小没有关系，内存和硬盘的大小仅决定虚拟存储器实际可用容量的最大值，选项D错误。选项A、C显然正确。在进程的虚拟地址空间中，有专门用来存放动态分配的变量的堆区，通过调用malloc()函数动态地分配该空间，选项B正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_59",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 59,
      "type": "single_choice",
      "question": "【2025 统考真题】某页式虚拟存储管理系统采用固定分配局部置换的 LRU 算法。若系统为进程 P 分配了 3 个页框，P 从某时刻开始的页访问序列为 0, 1, 2, 0, 5, 1, 4, 3, 0, 2, 3, 2, 0，且 0, 1, 2 三个页已在内存中，则完成上述页序列的访问时，系统执行缺页异常处理程序的次数为（）。",
      "options": {
        "A": "5",
        "B": "6",
        "C": "7",
        "D": "8"
      },
      "answer": [
        "B"
      ],
      "explanation": "系统为进程 P 分配 3 个页框，记为 A、B、C，初始时页面 0、1、2 已在内存中。采用固定分配局部置换的 LRU 算法，访问页面序列时，各页框内容及缺页情况如下表所示。\n\n<table><tr><td></td><td>初始</td><td>#0</td><td>#1</td><td>#2</td><td>#0</td><td>#5</td><td>#1</td><td>#4</td><td>#3</td><td>#0</td><td>#2</td><td>#3</td><td>2</td><td>0</td></tr><tr><td>页框A</td><td>#0</td><td>#0</td><td>#0</td><td>#0</td><td>#0</td><td>#0</td><td>#0</td><td>#4</td><td>#4</td><td>#4</td><td>#2</td><td>#2</td><td></td><td></td></tr><tr><td>页框B</td><td>#1</td><td>#1</td><td>#1</td><td>#1</td><td>#1</td><td>#5</td><td>#5</td><td>#5</td><td>#3</td><td>#3</td><td>#3</td><td>#3</td><td></td><td></td></tr><tr><td>页框C</td><td>#2</td><td>#2</td><td>#2</td><td>#2</td><td>#2</td><td>#2</td><td>#1</td><td>#1</td><td>#1</td><td>#0</td><td>#0</td><td>#0</td><td></td><td></td></tr><tr><td>是否缺页</td><td></td><td></td><td></td><td></td><td></td><td>是</td><td>是</td><td>是</td><td>是</td><td>是</td><td>是</td><td></td><td></td><td></td></tr></table>\n\n初始状态：页框 A、B、C 分别存放#0、#1、#2。第 5 次访问#5：不在内存，缺页，此时最近使用顺序为#0→#2→#1（#1 为最久未用），淘汰最久未使用的#1，换入#5。第 6 次访问#1：不在内存，缺页，淘汰最久未用的#2，换入#1。第 7 次访问#4：缺页，淘汰#0，换入#4。第 8 次访问#3：缺页，淘汰#5，换入#3。第9次访问#0：缺页，淘汰#1，换入#0。第10次访问#2：缺页，淘汰#4，换入#2。后续访问#3、#2、#0均命中。共发生6次缺页异常。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_60",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 60,
      "type": "single_choice",
      "question": "【2025统考真题】在页式虚拟存储管理系统中，确定进程正常运行所需的最少页框数时， 下列因素中需要考虑的是（）。",
      "options": {
        "A": "代码段长度",
        "B": "进程的虚拟地址空间大小",
        "C": "物理内存大小",
        "D": "指令系统支持的寻址方式"
      },
      "answer": [
        "D"
      ],
      "explanation": "在页式系统中，进程正常运行所需的最少页框数并不由代码段长度、虚拟地址空间大小或物理内存容量决定，而取决于单条指令在取指和执行过程中可能同时访问的最大页面数。该数量由指令系统支持的寻址方式直接决定：取指阶段至少需访问存放指令的页面；执行阶段则因寻址方式不同而异。寄存器寻址无须访问内存，直接寻址需访问一个数据页面，而间接寻址可能需先后访问两个页面（分别存放形式地址和实际操作数）。若一条指令最多涉及 k 个不同的页面，则系统至少需要为其分配 k 个页框，否则将因频繁缺页而导致颠簸，甚至无法完成该指令的执行。因此，确定最少页框数的关键因素是指令系统的寻址方式。",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_3-2-11_61",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "内存管理",
      "section": "3.2.11",
      "section_title": "本节试题精选",
      "num": 61,
      "type": "single_choice",
      "question": "【2025 统考真题】下列关于内存映射文件（memory-mapped files）机制的叙述中，正确的是（）。 I. 可实现进程之间的通信 II. 可实现页到磁盘块的映射 III. 将文件映射到进程的虚拟地址空间 IV. 将文件映射到系统的物理地址空间",
      "options": {
        "A": "仅 I、III",
        "B": "仅 I、IV",
        "C": "仅 II、III",
        "D": "仅 I、II、III"
      },
      "answer": [
        "A"
      ],
      "explanation": "内存映射文件机制将文件内容映射到进程的虚拟地址空间，使进程能够像访问内存一样直接读/写文件数据，而底层 I/O（如页面的按需加载与换出）由操作系统自动处理，从而简化文件操作。当多个进程映射同一文件时，它们通过共享内核页缓存读/写相同的数据，从而高效实现进程间通信。需要明确的是，该机制本身仅建立文件与进程虚拟地址空间之间的关联，并不直接实现“页到磁盘块的映射”，这一映射由操作系统的虚拟内存管理系统（如页表、缺页中断机制）统一维护，属于通用虚拟存储机制的功能。此外，映射目标始终是进程的虚拟地址空间，物理地址由操作系统动态分配并对进程完全透明，进程无法感知或直接访问。因此，只有说法 I 和 III 准确描述了内存映射文件机制直接提供的功能。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/操作系统/chapters/ch03-第3章-内存管理.md"
    },
    {
      "id": "操作系统_4-2-11_16",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "以下不适合随机存取的外存分配方式是（）。",
      "options": {
        "A": "连续分配",
        "B": "链接分配",
        "C": "索引分配",
        "D": "以上都适合"
      },
      "answer": [
        "B"
      ],
      "explanation": "采用连续分配和索引分配的文件都支持随机存取。采用链接分配的文件不支持随机存取。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_17",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "在以下文件的物理结构中，不利于文件长度动态增长的是（）。",
      "options": {
        "A": "连续结构",
        "B": "链接结构",
        "C": "索引结构",
        "D": "散列结构"
      },
      "answer": [
        "A"
      ],
      "explanation": "要求有连续的存储空间，因此必须事先知道文件的大小，并据此在存储空间中找出一块大小足够的存储区。若文件动态地增长，则会使文件所占的空间越来越大，即使事先知道文件的最终大小，在采用预分配的存储空间的方法时，也是很低效的，它会使大量的存储空间长期闲置。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_18",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "若文件的物理结构采用连续分配，则 FCB 中有关文件的物理位置的信息应包括（）。 I. 首块地址 II. 文件长度 III. 索引表地址",
      "options": {
        "A": "仅 I",
        "B": "I、II",
        "C": "II、III",
        "D": "I、III"
      },
      "answer": [
        "B"
      ],
      "explanation": "在连续分配方式中，为了使系统能找到文件存放的地址，应在目录项的“文件物理地址”字段中，记录该文件第一条记录所在的盘块号和文件长度（以盘块数进行计量）。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_19",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "在磁盘上，最容易导致存储碎片发生的物理文件结构是（）。",
      "options": {
        "A": "隐式链接",
        "B": "顺序存放",
        "C": "索引存放",
        "D": "显式链接"
      },
      "answer": [
        "B"
      ],
      "explanation": "顺序文件占用连续的磁盘空间，容易导致存储碎片（外部碎片）的发生。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_20",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "物理文件的组织方式是由（）确定的。",
      "options": {
        "A": "应用程序",
        "B": "主存容量",
        "C": "外存容量",
        "D": "操作系统"
      },
      "answer": [
        "D"
      ],
      "explanation": "通常用户可以根据需要来确定文件的逻辑结构，而文件的物理结构是由操作系统的设计者根据文件存储器的特性来确定的，一旦确定，就由操作系统管理。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_21",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "文件系统为每个文件创建一张（），存放文件数据块的磁盘存放位置。",
      "options": {
        "A": "打开文件表",
        "B": "位图",
        "C": "索引表",
        "D": "空闲盘块链表"
      },
      "answer": [
        "C"
      ],
      "explanation": "打开文件表仅存放已打开文件信息的表，将指明文件的属性从外存复制到内存，再使用该文件时直接返回索引，选项 A 错误。位图和空闲盘块链表是磁盘管理方法，选项 B、D 错误。只有索引表中记录每个文件所存放的盘块地址，选项 C 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_22",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "下列有关文件组织管理的描述中，错误的是（）。",
      "options": {
        "A": "记录是对文件进行存取操作的单位，一个文件中各记录的长度可以不等",
        "B": "采用链接分配的文件，它的物理块必须连续排列",
        "C": "创建一个文件时, 可以分配连续的区域, 也可以分配不连续的物理块",
        "D": "Hash 结构文件的优点是能够实现物理块的动态分配和回收"
      },
      "answer": [
        "B"
      ],
      "explanation": "链接分配的文件通过在每个盘块上的链接指针，将同属于一个文件的多个离散的盘块链接成一个链表，它的物理块不需要连续排列。其他说法均正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_23",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "逻辑文件存放到存储介质上时，采用的组织形式与（）有关。",
      "options": {
        "A": "逻辑文件结构",
        "B": "存储介质特性",
        "C": "主存储器管理方式",
        "D": "设备分配方式"
      },
      "answer": [
        "B"
      ],
      "explanation": "不同的存储介质有不同的存储特性，如磁带只能顺序存取，磁盘可以随机存取，因此文件的组织形式与存储介质特性有关。文件的逻辑结构与文件的物理结构没有必然关系，主存储器的管理方式只涉及内存管理，文件的物理存储与设备的分配方式也没有必然关系。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_24",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "某 500 个盘块的文件的目录项已调入内存（若为索引分配，其索引块也在内存中）。若需要在文件中增加一块，下列分配方式中磁盘 I/O 次数最多的是（）。",
      "options": {
        "A": "连续分配",
        "B": "隐式链接分配",
        "C": "显式链接分配",
        "D": "索引分配"
      },
      "answer": [
        "A"
      ],
      "explanation": "若需要在文件中间增加一块，则连续分配就要将后面的所有盘块都向后移动一块，这样就会产生很多的磁盘 I/O 操作。而其他三种分配方式都不需要移动盘块，只需修改一些指针或者索引。因此，连续分配是操作磁盘 I/O 次数最多的。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_25",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "设有一个记录文件，采用隐式链接分配方式，逻辑记录的固定长度为 100B，在磁盘上存储时采用记录成组分解技术。盘块长度为 512B。若该文件的目录项已经读入内存，则对第 22 个逻辑记录完成修改后，共启动了磁盘（）次。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "D"
      ],
      "explanation": "记录成组分解技术是指将若干逻辑记录存入一个块，一个逻辑记录不能跨越两个块。逻辑记录的固定长度为 100B，盘块长度为 512B，采用成组分解技术，因此每个盘块可以存放 5 个逻辑记录，剩下 12B 的空间可用于存放指向下一个盘块的指针。每个盘块存放 5 个逻辑记录，因此第 22 个逻辑记录在第 5 个物理块中（ $\\left\\lceil 22/5 \\right\\rceil = 5$ ）。采用链接分配方式，要找到第 5 个物理块，需要从第 1 个物理块开始按指针顺序查找，因此需要启动磁盘 5 次。修改完后还要写回磁盘，因为此前已获得该块的磁盘地址，所以只需启动磁盘 1 次，共需启动磁盘 6 次。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_26",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "设某文件为链接文件，它由 5 个逻辑记录组成，每个逻辑记录的大小与磁盘块的大小相等，均为 512B，并依次存放在 50, 121, 75, 80, 63 号磁盘块上。若要存取文件的第 1569 逻辑字节处的信息，则应该访问（）号磁盘块。",
      "options": {
        "A": "3",
        "B": "80",
        "C": "75",
        "D": "63"
      },
      "answer": [
        "B"
      ],
      "explanation": "因为 $1569 = 512 \\times 3 + 33$ ，所以要访问字节位于第 4 个磁盘块上，对应的物理磁盘块号为 80。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_27",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "某文件共有 8 个记录 L1～L8，采用隐式链接分配，每个记录及链接指针占一个磁盘块，主存中的磁盘缓冲区的大小与磁盘块的大小相等。假设文件目录已读入内存。为了在 L5 和 L6 之间插入一个记录 Lx'（已在内存中），需要进行的磁盘操作有（）。",
      "options": {
        "A": "4 次读盘和 2 次写盘",
        "B": "5次读盘和1次写盘",
        "C": "5 次读盘和 2 次写盘",
        "D": "4 次读盘和 1 次写盘"
      },
      "answer": [
        "C"
      ],
      "explanation": "采用隐式链接分配，首先需要依次读 L1～L5 磁盘块，根据 L5 磁盘块，获取 L6 磁盘块的地址；然后将 $Lx'$ 的数据写入一个空闲磁盘块，将该块的链接指针指向 L6 磁盘块；最后修改 L5 磁盘块，将链接指针指向 $Lx'$ 的磁盘块的地址并写回磁盘。因此共进行了 5 次读盘和 2 次写盘。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_28",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "某文件系统采用显示链接分配方式组织文件，磁盘块大小为 4KB，一个簇包含两个磁盘块，操作系统以簇为单位进行盘块分配。已知系统支持的最大文件长度为 512MB，若 FAT 的每个表项仅存放簇号，则 FAT 表占用的空间大约是（）。",
      "options": {
        "A": "64KB",
        "B": "128KB",
        "C": "512KB",
        "D": "1024KB"
      },
      "answer": [
        "B"
      ],
      "explanation": "根据 2016 年统考真题综合题 47，可知 FAT 支持的最大文件长度可理解为整个分区大小。一个簇的大小为 8KB，一个 512MB 的文件包含 $512MB/8KB = 2^{16}$ 个簇，所以簇号占 2B，最多有 $2^{16}$ 个 FAT 表项，FAT 表占用的空间约为 $2^{16} \\times 2B = 128KB$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_29",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "某文件共有 3 个记录，每个记录占 1 个磁盘块，在 1 次读文件的操作中，为了读出最后 1 个记录，不得不读出其他 2 个记录。由此可知该文件所采用的物理结构是（）。",
      "options": {
        "A": "连续分配",
        "B": "索引分配",
        "C": "链接分配",
        "D": "连续分配或链接分配"
      },
      "answer": [
        "C"
      ],
      "explanation": "连续分配和索引分配都支持随机访问，链接分配通常可默认为隐式链接，仅支持顺序访问，由题意可知该文件仅支持顺序访问，因此文件采用的结构为链接分配。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_30",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "某文件存放在 100 个数据块中，假设管理文件所必需的文件控制块、索引块或索引信息都驻留在内存中。那么若（），则不需要做任何磁盘 I/O 操作。",
      "options": {
        "A": "采用连续分配，将最后一个数据块搬到文件头部",
        "B": "采用单级索引分配，将最后一个数据块插入文件头部",
        "C": "采用隐式链接分配，将最后一个数据块插入文件头部",
        "D": "采用隐式链接分配，将第一个数据块插入文件尾部"
      },
      "answer": [
        "B"
      ],
      "explanation": "采用连续分配时，将最后一个数据块搬到文件头部，要移动文件的物理块，需要磁盘 I/O。采用单级索引分配时，将最后一个数据块插入文件头部，索引块已驻留在内存中，因此只需修改索引块，不需要磁盘 I/O。采用隐式链接分配时，仅支持顺序访问，要修改文件数据块的顺序，就必须修改对应磁盘块末尾的指针，必须将文件块读入内存，需要磁盘 I/O。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_31",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "某文件有 100 个盘块（数据块），假设管理文件所必需的文件控制块、所有索引块都已调入内存。若需要在文件的第 45 个盘块后插入数据，则物理结构采用（）时开销最大。",
      "options": {
        "A": "连续分配",
        "B": "链接分配",
        "C": "一级索引分配",
        "D": "多级索引分配"
      },
      "answer": [
        "A"
      ],
      "explanation": "采用连续分配时，至少需要进行 45 次读磁盘和 45 次写磁盘，将前 45 个盘块依次向前移动，之后还要进行 1 次写磁盘，将数据写入对应空出的盘块。采用链接分配时，需要进行 45 次读磁盘，然后修改第 45 个磁盘块中的链接指针，并写新磁盘块，共进行 2 次写磁盘，开销比顺序文件小。采用一级索引分配或多级索引分配时，只需修改内存中的索引表，不需磁盘 I/O，开销较小。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_32",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "某文件系统使用类似于 Linux 的 inode 存储结构，文件块和磁盘块的大小都是 4KB，磁盘地址是 32 位，现在一个文件包含 10 个直接指针和 1 个一级间接指针，则这个文件所占用的磁盘块数量最多是（）块（不考虑索引块）。",
      "options": {
        "A": "128",
        "B": "512",
        "C": "1024",
        "D": "1034"
      },
      "answer": [
        "D"
      ],
      "explanation": "直接指针可指向 10 个磁盘块，一级间接指针可指向一个索引块，一个索引块中可存放 1024 个磁盘地址，每个地址指向一个磁盘块。因此该文件最多占用 $10 + 1024 = 1034$ 个磁盘块。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_33",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "文件系统采用两级索引分配方式。若每个磁盘块的大小为 1KB，每个盘块号占 4B，则该系统中单个文件的最大长度是（）。",
      "options": {
        "A": "64MB",
        "B": "128MB",
        "C": "32MB",
        "D": "以上都错误"
      },
      "answer": [
        "A"
      ],
      "explanation": "最大文件的尺寸由二级索引块能够指向的磁盘块数决定。每个磁盘块中最多有 $1KB/4B = 256$ 个索引项，则两级索引分配方式下单个文件的最大长度为 $256 \\times 256 \\times 1KB = 64MB$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_34",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "某文件系统的物理结构采用三级索引分配方式，每个磁盘块的大小为 1024B，每个盘块索引号占用 4B，则该文件系统支持的最大文件的尺寸接近（）。",
      "options": {
        "A": "8GB",
        "B": "16GB",
        "C": "32GB",
        "D": "2TB"
      },
      "answer": [
        "B"
      ],
      "explanation": "最大文件的尺寸由三级索引块能够指向的磁盘块数决定。三级索引块可以指向 1024B/4B = 256 个二级索引块，每个二级索引块又可指向 256 个一级索引块，每个一级索引块又可指向 256 个磁盘块。因此，最大文件的尺寸为 $256 \\times 256 \\times 256 \\times 1024B = 16GB$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_35",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "下列各种操作系统内核相关的数据结构中，可以不用数组实现的是（）。",
      "options": {
        "A": "文件分配表",
        "B": "页表",
        "C": "调度器的就绪队列",
        "D": "中断向量表"
      },
      "answer": [
        "C"
      ],
      "explanation": "根据文件分配表、页表和中断向量表的应用原理，它们都有一个要求，就是要能随机访问表中的任一元素，即随机访问，因此只能用数组实现。在进程调度的过程中，每次都调度就绪队列的队首进程，因此既可以用数组实现，又可以用链表实现。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_36",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "文件系统在创建一个文件时，为它建立一个（）。",
      "options": {
        "A": "文件目录项",
        "B": "目录文件",
        "C": "逻辑结构",
        "D": "逻辑空间"
      },
      "answer": [
        "A"
      ],
      "explanation": "一个文件对应一个 FCB，而一个文件目录项就是一个 FCB。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_37",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "打开文件操作的主要工作是（）。",
      "options": {
        "A": "把指定文件的目录项复制到内存指定的区域",
        "B": "把指定文件复制到内存指定的区域",
        "C": "在指定文件所在的存储介质上找到指定文件的目录项",
        "D": "在内存寻找指定的文件"
      },
      "answer": [
        "A"
      ],
      "explanation": "打开文件操作是将该文件的 FCB 存入内存的活跃文件目录表，而不是将文件内容复制到主存，找到指定文件目录是打开文件之前的操作。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_38",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "某用户程序发起 open() 系统调用，下列对该过程的描述中最准确的是（）。",
      "options": {
        "A": "open()调用必然导致文件 I/O",
        "B": "open()调用的参数含有需要打开的文件的文件名",
        "C": "open()调用完成后，系统打开文件表将增加一个表目",
        "D": "open()调用的参数的文件名不同时，必然会打开不同的文件实体"
      },
      "answer": [
        "B"
      ],
      "explanation": "open()调用的参数含有文件名（或者说文件的路径名），它会在进程的用户打开文件表中增加一个对应的表目，并返回该表目的索引号（文件描述符或句柄）。系统打开文件表只有在文件实体第一次被打开时才增加一个表目，也才会通过文件I/O将对应的索引节点从磁盘读入内存。当open()调用的不同文件互为硬链接时，所打开的文件实体是一样的。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_39",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "关闭文件操作的主要工作是（）。",
      "options": {
        "A": "将文件的最新信息从内存写回磁盘",
        "B": "将文件当前的控制信息从内存写回磁盘",
        "C": "将位示图从内存写回磁盘",
        "D": "将超级块当前的信息从内存写回磁盘"
      },
      "answer": [
        "B"
      ],
      "explanation": "关闭文件是指将文件当前的控制信息从内存写回磁盘，需要注意的是关闭文件并不意味着将文件数据写回磁盘，写文件操作才会写回磁盘（不考虑延迟写），选项 B 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_40",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "读文件操作的正确次序应该是（）。 I. 向设备驱动程序发出 I/O 请求，完成数据交换工作 II. 按存取控制说明检查访问的合法性 III. 根据目录项中该文件的逻辑和物理组织形式，将逻辑记录号转换成物理块号 IV. 按文件描述符在打开文件表中找到该文件的目录项",
      "options": {
        "A": "II、IV、III、I",
        "B": "IV、II、III、I",
        "C": "IV、III、II、I",
        "D": "II、IV、I、III"
      },
      "answer": [
        "B"
      ],
      "explanation": "读文件操作的正确次序是：按文件描述符在打开文件表中找到该文件的目录项；按存取控制说明检查访问的合法性；根据目录项中该文件的逻辑和物理组织形式，将逻辑记录号转换成物理块号；向设备驱动程序发出 I/O 请求，完成数据交换工作。因此答案是说法 IV、II、III、I。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_41",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "下列关于文件与文件系统的说法中，错误的是（）。 I. 一个文件在同一系统中、不同的存储介质上的复制文件，应采用同一种物理结构 II. 对一个文件的访问，常由用户访问权限和用户优先级共同限制 III. 文件系统采用树形目录结构后，对于不同用户的文件，其文件名应该不同 IV. 为防止系统故障造成系统内文件受损，常采用存取控制矩阵方法保护文件",
      "options": {
        "A": "II",
        "B": "I、III",
        "C": "I、III、IV",
        "D": "全选"
      },
      "answer": [
        "D"
      ],
      "explanation": "文件在磁带上通常采用连续存放方法，在硬盘上通常不采用连续存放方法，在内存上采用随机存放方法，说法 I 错误。对文件的访问控制，常由用户访问权限和文件属性共同限制，说法 II 错误。在树形目录结构中，对于不同用户的文件，文件名可以不同也可以相同，说法 III 错误。防止文件受损常采用备份的方法，而存取控制矩阵方法用于多用户之间的存取权限保护，说法 IV 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_42",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "在树形目录结构中，文件已被打开后，对文件的访问采用（）。",
      "options": {
        "A": "文件符号名",
        "B": "从根目录开始的路径名",
        "C": "从当前目录开始的路径名",
        "D": "文件描述符"
      },
      "answer": [
        "D"
      ],
      "explanation": "文件被打开后，系统为每个打开的文件分配一个文件描述符（索引号），用来标识该文件。之后用户不再使用文件名，而使用文件描述符，来对该文件进行读/写、定位等操作。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_43",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "设文件 F1 的当前引用计数为 1，先建立 F1 的硬链接文件 F2，再建立 F1 的符号链接文件 F3，然后删除 F2，则此时文件 F1、F3 的引用计数值分别是（）。",
      "options": {
        "A": "1、1",
        "B": "1、2",
        "C": "1、0",
        "D": "2、2"
      },
      "answer": [
        "A"
      ],
      "explanation": "建立 F2 时，F1 和 F2 的引用计数值都变为 2。建立 F3 时，符号链接文件的引用计数值不受被链接文件的影响，始终为 1，所以 F1 和 F3 的引用计数值为 2 和 1。删除 F2 时，F1 的引用计数值变为 2-1=1，F3 的引用计数值仍保持不变，因此 F1、F3 的引用计数值分别是 1、1。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_44",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "设文件 F1 的当前引用计数值为 1，先建立 F1 的硬链接文件 F2，再建立 F2 的符号链接文件 F3，现有两个进程 $P_{1}$ 和 $P_{2}$ 分别打开了 F1 和 F2，则下列说法中正确的是（）。",
      "options": {
        "A": "两次打开操作只涉及一次文件索引节点的磁盘读取操作",
        "B": "进程 $\\mathrm{P}_{1}$ 和 $\\mathrm{P}_{2}$ 对 F1 具有相同的访问权限",
        "C": "若删除文件 F3，则 F2 的引用计数值减 1",
        "D": "进程 $P_{1}$ 读取 F1 时需要提供 F1 的绝对路径作为系统调用参数"
      },
      "answer": [
        "A"
      ],
      "explanation": "文件 F2 是 F1 的硬链接文件，指向同一个索引节点，当进程 $P_{1}$ 第一次打开 F1 时，会将磁盘的索引节点读入内存，之后 $P_{1}$ 打开 F2 及 $P_{2}$ 打开 F1 和 F2 都共享之前已读入内存的索引节点，选项 A 正确。 $P_{1}$ 和 $P_{2}$ 对同一个文件的访问权限可能有所不同，选项 B 错误。F3 是 F2 的软链接文件，删除 F3 不影响 F2 的引用计数值，选项 C 错误。读取 F1 只需传入 F1 在 $P_{1}$ 中的文件描述符（F1 在 $P_{1}$ 的进程打开文件表中的索引号），并不需要其路径名，选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_45",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "操作系统为保证未经文件拥有者授权，任何其他用户不能使用该文件，所提供的解决方法是（）。",
      "options": {
        "A": "文件保护",
        "B": "文件保密",
        "C": "文件转储",
        "D": "文件共享"
      },
      "answer": [
        "A"
      ],
      "explanation": "文件保护是针对文件访问权限的保护。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_46",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 46,
      "type": "single_choice",
      "question": "在文件系统中，以下不属于文件保护的方法是（）。",
      "options": {
        "A": "口令",
        "B": "存取控制",
        "C": "用户权限表",
        "D": "读/写之后使用关闭命令"
      },
      "answer": [
        "D"
      ],
      "explanation": "在文件系统中，口令、存取控制和用户权限表都是常用的文件保护方法。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_47",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 47,
      "type": "single_choice",
      "question": "对一个文件的访问，常由（）共同限制。",
      "options": {
        "A": "用户访问权限和文件属性",
        "B": "用户访问权限和用户优先级",
        "C": "优先级和文件属性",
        "D": "文件属性和口令"
      },
      "answer": [
        "A"
      ],
      "explanation": "对于这道题，只要能区分用户的访问权限和用户优先级，就能得到正确的答案。用户访问权限是指用户有没有权限访问该文件，而用户优先级是指在多个用户同时请求该文件时应该先满足谁。比如，图书馆的用户排队借一本书，某用户可能有更高的优先级，即他排在队伍的前面，但有可能轮到他时被告知他没有借阅那本书的权限。\n\n文件的属性包括保存在 FCB 中对文件访问的控制信息。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_48",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 48,
      "type": "single_choice",
      "question": "为了对文件系统中的文件进行安全管理，任何一个用户在进入系统时都必须进行注册，这一级安全管理是（）。",
      "options": {
        "A": "系统级",
        "B": "目录级",
        "C": "用户级",
        "D": "文件级"
      },
      "answer": [
        "A"
      ],
      "explanation": "系统级安全管理包括注册和登录。此外，通过“进入系统时”也可推测出正确答案。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_49",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 49,
      "type": "single_choice",
      "question": "【2009 统考真题】文件系统中，文件访问控制信息存储的合理位置是（）。",
      "options": {
        "A": "文件控制块",
        "B": "文件分配表",
        "C": "用户口令表",
        "D": "系统注册表"
      },
      "answer": [
        "A"
      ],
      "explanation": "为了实现 “按名存取”，在文件系统中为每个文件设置用于描述和控制文件的数据结构，称为文件控制块。在文件控制块中，通常包含三类信息：基本信息、存取控制信息及使用信息。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_50",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 50,
      "type": "single_choice",
      "question": "【2009 统考真题】下列文件物理结构中，适合随机访问且易于文件扩展的是（）。",
      "options": {
        "A": "连续结构",
        "B": "索引结构",
        "C": "链式结构且磁盘块定长",
        "D": "链式结构且磁盘块变长"
      },
      "answer": [
        "B"
      ],
      "explanation": "文件的物理结构包括连续、链式、索引三种，其中链式结构不能实现随机访问，连续结构的文件不易于扩展。因此随机访问且易于扩展是索引结构的特性。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_51",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 51,
      "type": "single_choice",
      "question": "【2009 统考真题】设文件 F1 的当前引用计数值为 1，先建立文件 F1 的符号链接（软链接）文件 F2，再建立文件 F1 的硬链接文件 F3，然后删除文件 F1。此时，文件 F2 和文件 F3 的引用计数值分别是（）。",
      "options": {
        "A": "0,1",
        "B": "1, 1",
        "C": "1,2",
        "D": "2,1"
      },
      "answer": [
        "B"
      ],
      "explanation": "建立符号链接时，引用计数值直接设置为 1，不受被链接文件的影响；建立硬链接时，引用计数值加 1。删除文件时，删除操作对于符号链接是不可见的，这并不影响文件系统，当以后再通过符号链接访问时，发现文件不存在，直接删除符号链接；但对于硬链接则不可直接删除，引用计数值减 1，若值不为 0，则不能删除此文件，因为还有其他硬链接指向此文件。\n\n当建立 F2 时，F1 和 F2 的引用计数值都为 1。当再建立 F3 时，F1 和 F3 的引用计数值就都变成了 2。当后来删除 F1 时，F3 的引用计数值为 2-1=1，F2 的引用计数值不变。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_52",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 52,
      "type": "single_choice",
      "question": "【2010 统考真题】设置当前工作目录的主要目的是（）。",
      "options": {
        "A": "节省外存空间",
        "B": "节省内存空间",
        "C": "加快文件的检索速度",
        "D": "加快文件的读/写速度"
      },
      "answer": [
        "C"
      ],
      "explanation": "当一个文件系统含有多级目录时，每访问一个文件，都要使用从树根开始到树叶为止、包括各中间节点名的全路径名。当前目录也称工作目录，进程对各个文件的访问都相对于当前目录进行，而不需要从根目录一层一层地检索，加快了文件的检索速度。选项 A、B 都与相对目录无关；选项 D，文件的读/写速度取决于磁盘的性能。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_53",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 53,
      "type": "single_choice",
      "question": "【2010 统考真题】设文件索引节点中有 7 个地址项，其中 4 个地址项是直接地址索引，2 个地址项是一级间接地址索引，1 个地址项是二级间接地址索引，每个地址项大小为 4B，若磁盘索引块和磁盘数据块大小均为 256B，则可表示的单个文件最大长度是（）。",
      "options": {
        "A": "33KB",
        "B": "519KB",
        "C": "1057KB",
        "D": "16516KB"
      },
      "answer": [
        "C"
      ],
      "explanation": "每个磁盘索引块和磁盘数据块大小均为 256B，每个磁盘索引块有 256/4 = 64 个地址项。因此，4 个直接地址索引指向的数据块大小为 $4 \\times 256B$ ；2 个一级间接索引包含的直接地址索引数为 $2 \\times (256/4)$ ，即其指向的数据块大小为 $2 \\times (256/4) \\times 256B$ 。1 个二级间接索引所包含的直接地址索引数为 $(256/4) \\times (256/4)$ ，即其所指向的数据块大小为 $(256/4) \\times (256/4) \\times 256B$ 。因此，7 个地址项所指向的数据块总大小为 $4 \\times 256 + 2 \\times (256/4) \\times 256 + (256/4) \\times (256/4) \\times 256 = 1082368B = 1057KB$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_54",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 54,
      "type": "single_choice",
      "question": "【2012 统考真题】若一个用户进程通过 read 系统调用读取一个磁盘文件中的数据，则下列关于此过程的叙述中，正确的是（）。 I. 若该文件的数据不在内存，则该进程进入睡眠等待状态 II. 请求 read 系统调用会导致 CPU 从用户态切换到核心态 III. read 系统调用的参数应包含文件的名称",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III",
        "C": "仅 II、III",
        "D": "I、II 和 III"
      },
      "answer": [
        "A"
      ],
      "explanation": "对于说法 I，当所读文件的数据不在内存时，产生中断（缺页中断），原进程进入阻塞态，直到所需数据从外存调入内存后，才将该进程唤醒。对于说法 II，read 系统调用通过陷入将 CPU 从用户态切换到核心态，从而获取操作系统提供的服务。对于说法 III，要读一个文件，首先要用 open 系统调用打开该文件。open 中的参数包含文件的路径名与文件名，而 read 只需使用 open 返回的文件描述符，并不使用文件名作为参数。read 要求用户提供三个输入参数：① 文件描述符 fd；② buf 缓冲区首址；③ 传送的字节数 n。read 的功能是试图从 fd 所指示的文件中读入 n 字节的数据，并将它们送至由指针 buf 所指示的缓冲区中。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_55",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 55,
      "type": "single_choice",
      "question": "【2013 统考真题】用户在删除某文件的过程中，操作系统不可能执行的操作是（）。",
      "options": {
        "A": "删除此文件所在的目录",
        "B": "删除与此文件关联的目录项",
        "C": "删除与此文件对应的文件控制块",
        "D": "释放与此文件关联的内存缓冲区"
      },
      "answer": [
        "A"
      ],
      "explanation": "此文件所在目录下可能还存在其他文件，因此删除文件时不能（也不需要）删除文件所在的目录，而与此文件关联的目录项和文件控制块需要随着文件一同删除，同时释放文件关联的内存缓冲区。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_56",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 56,
      "type": "single_choice",
      "question": "【2013 统考真题】若某文件系统索引节点（inode）中有直接地址项和间接地址项，则下列选项中，与单个文件长度无关的因素是（）。",
      "options": {
        "A": "索引节点的总数",
        "B": "间接地址索引的级数",
        "C": "地址项的个数",
        "D": "文件块大小"
      },
      "answer": [
        "A"
      ],
      "explanation": "索引节点的总数即文件的总数，与单个文件的长度无关。间接地址级数越多、地址项数越多、文件块越大，单个文件的长度就会越大。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_57",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 57,
      "type": "single_choice",
      "question": "【2013 统考真题】为支持 CD-ROM 中视频文件的快速随机播放，播放性能最好的文件数据块组织方式是（）。",
      "options": {
        "A": "连续结构",
        "B": "链式结构",
        "C": "直接索引结构",
        "D": "多级索引结构"
      },
      "answer": [
        "A"
      ],
      "explanation": "为了实现快速随机播放，要保证最短的查询时间，即不能选取链表和索引结构，因此连续结构最优。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_58",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 58,
      "type": "single_choice",
      "question": "【2014 统考真题】在一个文件被用户进程首次打开的过程中，操作系统需做的是（）。",
      "options": {
        "A": "将文件内容读到内存中",
        "B": "将文件控制块读到内存中",
        "C": "修改文件控制块中的读/写权限",
        "D": "将文件的数据缓冲区首指针返回给用户进程"
      },
      "answer": [
        "B"
      ],
      "explanation": "一个文件被用户进程首次打开即被执行了 open 操作，会把文件的 FCB 调入内存，而不会把文件内容读到内存中，只有进程希望获取文件内容时才会读入文件内容。选项 C、D 明显错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_59",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 59,
      "type": "single_choice",
      "question": "【2015 统考真题】在文件的索引节点中存放直接索引指针 10 个，一级和二级索引指针各 1 个。磁盘块大小为 1KB，每个索引指针占 4B。若某文件的索引节点已在内存中，则把该文件偏移量（按字节编址）为 1234 和 307400 处所在的磁盘块读入内存，需要访问的磁盘块个数分别是（）。",
      "options": {
        "A": "1, 2",
        "B": "1, 3",
        "C": "2, 3",
        "D": "2, 4"
      },
      "answer": [
        "B"
      ],
      "explanation": "10 个直接索引指针指向的数据块大小为 $10 \\times 1KB = 10KB$ 。每个索引指针占 4B，则每个磁盘块可存放 $1KB/4B = 256$ 个索引指针，一级索引指针指向的数据块大小为 $256 \\times 1KB = 256KB$ ，二级索引指针指向的数据块大小为 $256 \\times 256 \\times 1KB = 2^{16}KB = 64MB$ 。\n\n按字节编址，偏移量为 1234 时，因 1234B < 10KB，由直接索引指针可得到其所在的磁盘块地址。文件的索引节点已在内存中，因此地址可直接得到，因此仅需 1 次访盘即可。\n\n偏移量为 307400 时，因 $10KB + 256KB < 307400B < 64MB$ ，可知该偏移量的内容在二级索引指针所指向的某个磁盘块中，索引节点已在内存中，因此先访盘 2 次得到文件所在的磁盘块地址，再访盘 1 次即可读出内容，共需要 3 次访盘。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_60",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 60,
      "type": "single_choice",
      "question": "【2017 统考真题】某文件系统中，针对每个文件，用户类别分为 4 类：安全管理员、文件主、文件主的伙伴、其他用户；访问权限分为 5 种：完全控制、执行、修改、读取、写入。若文件控制块中用二进制位串表示文件权限，为表示不同类别用户对一个文件的访问权限，则描述文件权限的位数至少应为（）。",
      "options": {
        "A": "5",
        "B": "9",
        "C": "12",
        "D": "20"
      },
      "answer": [
        "D"
      ],
      "explanation": "需要注意的是，二进制位串表示的访问权限是这个文件所持有的，而不是某个用户所持有的，这个二进制位串要表示所有类别的用户的访问权限，每个要访问该文件的用户在访问之前都要查这个二进制位串。对于每类用户来说，都需要用5位来表示5种访问权限中的哪几种访问权限，共有四类用户，因此可将用户访问权限抽象为一个矩阵，其行代表用户类别，列代表访问权限。这个矩阵有4行5列，1代表true，0代表false，所以需要20位。\n\n例如，下表是一个用二进制位串表示的文件权限。\n\n<table><tr><td rowspan=\"2\">用户类别</td><td colspan=\"5\">访问权限</td></tr><tr><td>完全控制</td><td>执行</td><td>修改</td><td>读取</td><td>写入</td></tr><tr><td>安全管理员</td><td>1</td><td>1</td><td>1</td><td>1</td><td>0</td></tr><tr><td>文件主</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td></tr><tr><td>文件主的伙伴</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td></tr><tr><td>其他用户</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr></table>\n\n本题易误选 A，有读者认为用 2 位来表示用户类别，用 3 位来表示访问权限，这种情况在于没有理解文件访问权限的二进制位串是文件所持有的，所以当用户需要检查访问权限时，要在二进制位串中查询所属用户类别的访问权限。此外，每类用户的访问权限不是拥有5种访问权限中的哪一种，而是5种访问权限都可能拥有，因此不可能用3位来表示访问权限。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_61",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 61,
      "type": "single_choice",
      "question": "【2017 统考真题】若文件 f1 的硬链接为 f2，两个进程分别打开 f1 和 f2，获得对应的文件描述符为 fd1 和 fd2，则下列叙述中正确的是（）。 I. f1 和 f2 的读/写指针位置保持相同 II. f1 和 f2 共享同一个内存索引节点 III. fd1 和 fd2 分别指向各自的用户打开文件表中的一项",
      "options": {
        "A": "仅 III",
        "B": "仅 II、III",
        "C": "仅 I、II",
        "D": "I、II 和 III"
      },
      "answer": [
        "B"
      ],
      "explanation": "多个进程打开一个文件时，读/写指针的位置不同，它们保存在各自的用户打开文件表中，说法 I 错误。硬链接是基于索引节点的共享方式，指向同一个内存索引节点，说法 II 正确。不同进程获得的文件描述符是各自独立的，分别指向各自的用户打开文件表中的一项，说法 III 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_62",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 62,
      "type": "single_choice",
      "question": "【2017 统考真题】某文件系统的簇和磁盘扇区大小分别为 1KB 和 512B。若一个文件的大小为 1026B，则系统分配给该文件的磁盘空间大小是（）。",
      "options": {
        "A": "1026B",
        "B": "1536B",
        "C": "1538B",
        "D": "2048B"
      },
      "answer": [
        "D"
      ],
      "explanation": "为了改善磁盘的效率，操作系统将多个相邻的扇区组合成簇，对文件存储空间的分配以簇为单位，因此一个文件所占用的空间只能是簇的整数倍。文件的大小为 1026B，大于 1 簇、小于 2 簇，因此需要分配 2 簇磁盘空间，即 2048B。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_63",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 63,
      "type": "single_choice",
      "question": "【2020 统考真题】某文件系统的目录项由文件名和索引节点号构成。若每个目录项长度为 64 字节，其中 4 字节存放索引节点号，60 字节存放文件名。文件名由小写英文字母构成，则该文件系统能创建的文件数量的上限为（）。",
      "options": {
        "A": "$2^{26}$",
        "B": "$2^{32}$",
        "C": "$2^{60}$",
        "D": "$2^{64}$"
      },
      "answer": [
        "B"
      ],
      "explanation": "在总长为64字节的目录项中，索引节点占4字节，即32位。不同目录下的文件的文件名可以相同，所以在考虑系统创建最多文件数量时，只需考虑索引节点的个数，即创建文件数量上限 $=$ 索引节点数量上限。整个系统中最多存储 $2^{32}$ 个索引节点，因此整个系统最多可以表示 $2^{32}$ 个文件。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_64",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 64,
      "type": "single_choice",
      "question": "【2020 统考真题】若多个进程共享同一个文件 F，则下列叙述中，正确的是（）。",
      "options": {
        "A": "各进程只能用“读”方式打开文件 F",
        "B": "在系统打开文件表中仅有一个表项包含 F 的属性",
        "C": "各进程的用户打开文件表中关于 F 的表项内容相同",
        "D": "进程关闭 F 时，系统删除 F 在系统打开文件表中的表项"
      },
      "answer": [
        "B"
      ],
      "explanation": "多个进程可以同时以 “读” 或 “写” 的方式打开文件，操作系统并不保证写操作的互斥性，进程可通过系统调用对文件加锁，保证互斥写（读者-写者问题），选项 A 错误。整个系统只有一个系统打开文件表，同一个文件打开多次只需改变引用计数，选项 B 正确。用户进程的打开文件表关于同一个文件不一定相同，例如当前读/写位置指针、访问权限不一定相同，选项 C 错误。进程关闭文件时，文件的引用计数减 1，引用计数变为 0 时才删除系统打开文件表中的表项，选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_65",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 65,
      "type": "single_choice",
      "question": "【2020统考真题】下列选项中，支持文件长度可变、随机访问的磁盘存储空间分配方式是（）。",
      "options": {
        "A": "索引分配",
        "B": "链接分配",
        "C": "连续分配",
        "D": "动态分区分配"
      },
      "answer": [
        "A"
      ],
      "explanation": "索引分配支持变长的文件，同时可以随机访问文件的指定数据块，选项 A 正确。链接分配不支持随机访问，需要依靠指针依次访问，选项 B 错误。连续分配的文件长度固定，不支持可变文件长度（连续分配的文件长度虽然也可变，但是需要大量移动数据，代价较大，相比之下不太合适），选项 C 错误。动态分区分配是内存管理方式，不是磁盘空间的管理方式，选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_66",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 66,
      "type": "single_choice",
      "question": "【2021统考真题】若目录dir下有文件file1，则为删除该文件内核不必完成的工作是（）。",
      "options": {
        "A": "删除 file1 的快捷方式",
        "B": "释放 file1 的文件控制块",
        "C": "释放 file1 占用的磁盘空间",
        "D": "删除目录 dir 中与 file1 对应的目录项"
      },
      "answer": [
        "A"
      ],
      "explanation": "删除一个文件时，会根据文件控制块回收相应的磁盘空间，将文件控制块回收，并删除目录中对应的目录项。选项 B、C、D 正确。快捷方式属于文件共享中的软连接，本质上创建的是一个链接文件，其中存放的是访问该文件的路径，删除文件并不会导致文件的快捷方式被删除，正如在 Windows 中删除一个程序后，其快捷方式可能仍留在桌面上，但已无法打开。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_67",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 67,
      "type": "single_choice",
      "question": "【2023 统考真题】若文件 F 仅被进程 P 打开并访问，则当进程 P 关闭 F 时，下列操作中，文件系统需要完成的是（）。",
      "options": {
        "A": "删除目录中文件 F 的目录项",
        "B": "释放 F 的索引节点所占的内存空间",
        "C": "释放 F 的索引节点所占的外存空间",
        "D": "文件磁盘索引节点中的链接计数减 1"
      },
      "answer": [
        "B"
      ],
      "explanation": "当文件 F 首次被进程 P 打开时，会将磁盘的索引节点复制到内存的索引节点，并新增链接计数（打开计数）等内容。当进程 P 关闭文件 F 时，会将内存索引节点的链接计数减 1，因为文件 F 仅被进程 P 打开，所以链接计数变为 0，文件系统释放 F 的内存索引节点，选项 B 正确。关闭 F 不改变目录中文件 F 的目录项，选项 A 错误。关闭 F 只对内存索引节点进行相关的操作，不改变磁盘索引节点的数据结构，选项 C、D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_68",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 68,
      "type": "single_choice",
      "question": "【2024 统考真题】下列系统调用的实现中，包含文件按名查找功能的是（）。",
      "options": {
        "A": "open()",
        "B": "read()",
        "C": "write()",
        "D": "close()"
      },
      "answer": [
        "A"
      ],
      "explanation": "当用户首次对某文件发出操作请求时，需要先用系统调用 open() 将该文件打开。所谓“打开”，是指系统利用文件名检索到指定文件的目录项后，将文件的属性（包括该文件在外存中的物理位置）从外存复制到内存的打开文件表的一个表目中，并给用户返回一个文件描述符 fd。此后（只要文件未被关闭），用户对该文件的所有操作就都是通过文件描述符 fd 来进行的。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_69",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 69,
      "type": "single_choice",
      "question": "【2025 统考真题】在下列选项中，文件系统可用于记录外存空闲空间使用情况的是（）。",
      "options": {
        "A": "目录",
        "B": "系统打开文件表",
        "C": "文件分配表（FAT）",
        "D": "文件控制块（FCB）"
      },
      "answer": [
        "C"
      ],
      "explanation": "文件分配表（FAT）通过一个与逻辑块一一对应的表项数组，既描述文件数据块的链接关系，又标识每个块的使用状态（如空闲、已分配或坏块），进而直接支持空闲空间的跟踪与分配。相比之下，目录仅用于建立文件名到元数据（如FCB或inode）的映射；文件控制块（FCB）或inode存储单个文件的属性及物理位置信息；系统打开文件表则维护当前被进程打开的文件状态。这三者均不负责记录外存空闲空间的使用情况。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-2-11_70",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.2.11",
      "section_title": "本节试题精选",
      "num": 70,
      "type": "single_choice",
      "question": "【2025 统考真题】某文件系统采用目录和索引节点管理文件，当用户在目录中新建文件 F 时，在下列操作中，文件系统不会做的是（）。",
      "options": {
        "A": "对 F 的索引节点进行初始化",
        "B": "在目录文件中写入 F 的索引节点号",
        "C": "在目录文件中写入 F 的访问权限信息",
        "D": "在目录文件中增加一条 F 对应的目录项"
      },
      "answer": [
        "C"
      ],
      "explanation": "在采用目录与索引节点（inode）分离管理的文件系统中，新建文件 F 时，文件系统首先分配一个空闲 inode，并初始化其元数据字段，包括文件类型、访问权限、时间戳以及数据块指针等；随后，在所属目录文件中新增一个目录项，该目录项仅包含文件名 F 及其对应的 inode 号。由于访问权限等属性信息始终保存在 inode 中，目录项并不包含这些内容，因此目录文件不会记录文件的访问权限信息。综上，文件系统在创建文件时不会在目录文件中写入 F 的访问权限信息。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_03",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列关于文件系统的说法中，正确的是（）。",
      "options": {
        "A": "一个文件系统可以管理的文件数量受限于文件控制块的数量",
        "B": "一个文件系统可使用的容量一定等于其所在磁盘的容量",
        "C": "一个文件系统中单个文件的大小只受磁盘剩余容量大小的限制",
        "D": "一个文件系统不能将数据存放在多个磁盘上"
      },
      "answer": [
        "A"
      ],
      "explanation": "一个文件系统的容量不一定等于承载该文件系统的磁盘容量。一个磁盘可分为多个分区，每个分区可以有不同的文件系统，单个文件的大小不仅受磁盘剩余容量大小的限制，还受 FCB 和 FAT 表等结构的限制。利用磁盘阵列技术，一个文件系统可将数据存放到多个磁盘上。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_05",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "文件的存储空间管理实质上是对（）的组织和管理。",
      "options": {
        "A": "文件目录",
        "B": "外存已占用区域",
        "C": "外存空闲区",
        "D": "文件控制块"
      },
      "answer": [
        "C"
      ],
      "explanation": "文件存储空间管理即文件空闲空间管理。文件管理要解决的重要问题是，如何为创建文件分配存储空间，即如何找到空闲盘块，并对其管理。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_06",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "对外存文件区的管理应以（）为主要目标。",
      "options": {
        "A": "提高系统吞吐量",
        "B": "提高换入换出速度",
        "C": "降低存储费用",
        "D": "提高存储空间的利用率"
      },
      "answer": [
        "D"
      ],
      "explanation": "文件区占磁盘空间的大部分，因为通常的文件都较长时间地驻留在外存上，对它们的访问频率是较低的，所以对文件区管理的主要目标是提高存储空间的利用率。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_07",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "位示图可用于（）。",
      "options": {
        "A": "文件目录的查找",
        "B": "磁盘空间的管理",
        "C": "主存空间的管理",
        "D": "文件的保密"
      },
      "answer": [
        "B"
      ],
      "explanation": "位示图方法是空闲块管理方法，用于管理磁盘空间。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_08",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列各种文件存储空间的管理方法中，（）需要使用空闲盘块号栈。",
      "options": {
        "A": "空闲表法",
        "B": "空闲链表法",
        "C": "位示图法",
        "D": "成组链接法"
      },
      "answer": [
        "D"
      ],
      "explanation": "成组链接法将所有空闲盘块分成若干组，每组的第一个盘块记录下一组的空闲盘块总数和空闲盘块号。第一组的空闲盘块总数和空闲盘块号存放在内存的专用栈中，称为空闲盘块号栈。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_09",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "硬盘的主引导扇区（）。",
      "options": {
        "A": "包含引导记录",
        "B": "包含分区表和主引导程序",
        "C": "只包含主引导程序",
        "D": "只包含分区表"
      },
      "answer": [
        "B"
      ],
      "explanation": "硬盘的主引导扇区由三部分组成：主引导程序，也称主引导记录（MBR），用于系统启动时将控制转给用户指定的并在分区表中登记了的某个活动分区；分区表，给出每个分区的起始和结束地址；结束标志，其值通常为 AA55。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_10",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "若用 8 个字（字长 32 位）组成的位示图管理内存，即位示图有 8 行、32 列，行号和列号均从 1 开始，则块号为 100 的内存块所对应位示图的位置是（）。",
      "options": {
        "A": "字号为 3，位号为 5",
        "B": "字号为 4，位号为 4",
        "C": "字号为 3，位号为 4",
        "D": "字号为 4，位号为 5"
      },
      "answer": [
        "B"
      ],
      "explanation": "首先求出块号 100 所在的行号，1～32 在行号 1 中，33～64 在行号 2 中，65～96 在行号 3 中，97～128 在行号 4 中，所以块号 100 在行号 4 中；然后求出块号 100 在行号 4 中的哪列，行号 4 的第 1 列是块号 97，以此类推，块号 100 在行号 4 中的第 4 列。另解，行号 row 和列号 col 分别为\n\n$$\n\\mathrm{row} = (1 0 0 - 1) \\mathrm{DIV} 3 2 + 1 = 4\n$$\n\n$$\n\\mathrm{col} = (1 0 0 - 1) \\mathrm{MOD} 3 2 + 1 = 4\n$$\n\n即字号为 4，位号也为 4。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_11",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "比较难得到连续空间的空闲空间管理方式是（）。",
      "options": {
        "A": "空闲链表",
        "B": "空闲表",
        "C": "位示图",
        "D": "成组链接"
      },
      "answer": [
        "A"
      ],
      "explanation": "空闲链表法适用于离散分配，比较难得到连续空间。空闲表法适用于连续分配，容易得到连续空间。位示图法适用于连续分配和离散分配，容易找到连续的空闲块。成组链接法是将连续分配和离散分配相结合的方法，也能方便找到连续的空闲块。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_12",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "下列选项中，（）不是 Linux 实现虚拟文件系统 VFS 所定义的对象类型。",
      "options": {
        "A": "超级块（superblock）对象",
        "B": "目录项（inode）对象",
        "C": "文件（file）对象",
        "D": "数据（data）对象"
      },
      "answer": [
        "D"
      ],
      "explanation": "为了实现虚拟文件系统（VFS），Linux 主要抽象了四种对象类型：超级块对象、索引节点对象、目录项对象和文件对象。选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_13",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2014 统考真题】现有一个容量为 10GB 的磁盘分区，磁盘空间以簇为单位进行分配，簇的大小为 4KB，若采用位图法管理该分区的空闲空间，即用一位来标识一个簇是否被分配，则存放该位图所需要的簇数为（）。",
      "options": {
        "A": "80",
        "B": "320",
        "C": "80K",
        "D": "320K"
      },
      "answer": [
        "A"
      ],
      "explanation": "簇的总数为 $10\\mathrm{GB} / 4\\mathrm{KB} = 2.5\\mathrm{M}$ ，用一位标识一簇是否被分配，整个磁盘共需要2.5Mbit，即需要 $2.5\\mathrm{M} / 8 = 320\\mathrm{KB}$ ，因此共需要 $320\\mathrm{KB} / 4\\mathrm{KB} = 80$ 簇。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_14",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2015 统考真题】文件系统用位图法表示磁盘空间的分配情况，位图存于磁盘的 32～127 号块中，每个盘块占 1024B，盘块和块内字节均从 0 开始编号。假设要释放的盘块号为 409612，则位图中要修改的位所在的盘块号和块内字节序号分别是（）。",
      "options": {
        "A": "81, 1",
        "B": "81, 2",
        "C": "82, 1",
        "D": "82, 2"
      },
      "answer": [
        "C"
      ],
      "explanation": "盘块号 = 起始块号 + $\\left\\lfloor$ 盘块号/ $(1024\\times8)\\right\\rfloor = 32 + \\left\\lfloor 409612/(1024\\times8)\\right\\rfloor = 32 + 50 = 82$ ，这里问的是块内字节号而不是位号，因此还需要除以8，块内字节号 = $\\left\\lfloor (\\text{盘块号}\\% (1024\\times8))/8\\right\\rfloor = 1$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_15",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2019 统考真题】下列选项中，可用于文件系统管理空闲磁盘块的数据结构是（）。 I. 位图 II. 索引节点 III. 空闲磁盘块链 IV. 文件分配表（FAT）",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III、IV",
        "C": "仅 I、III",
        "D": "仅 II、III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "传统文件系统管理空闲磁盘的方法包括空闲表法、空闲链表法、位示图法和成组链接法，说法I、III正确。FAT的表项与物理磁盘块一一对应，并且可以用一个特殊的数字-1表示文件的最后一块，用-2表示这个磁盘块是空闲的（当然也可用-3,-4来表示），因此FAT不仅记录了文件中各个块的先后链接关系，还标记了空闲的磁盘块，操作系统可以通过FAT对文件存储空间进行管理，说法IV正确。索引节点是操作系统为了实现文件名与文件信息分开而设计的数据结构，存储了文件描述信息，索引节点属于文件目录管理部分的内容，说法II错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_16",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2023 统考真题】某系统采用页式存储管理，用位图管理空闲页框。若页大小为 4KB，物理内存大小为 16GB，则位图所占空间的大小是（）。",
      "options": {
        "A": "128B",
        "B": "128KB",
        "C": "512KB",
        "D": "4MB"
      },
      "answer": [
        "C"
      ],
      "explanation": "物理内存大小为 16GB，页大小为 4KB，则物理内存的总页框数为 $16GB/4KB = 2^{34}/2^{12} = 2^{22}$ 。位图用 1 位来表示一个页框是否空闲，所以占用的空间大小为 $2^{22}b = 2^{19}B = 512KB$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_17",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2024 统考真题】文件系统需要占用部分外存空间记录空闲块位置。在下列方法中，占用外存空间的大小与当前空闲块数量无关的是（）。",
      "options": {
        "A": "位图法",
        "B": "空闲表法",
        "C": "成组链接法",
        "D": "空闲链表法"
      },
      "answer": [
        "A"
      ],
      "explanation": "位图法利用一个二进制位来表示磁盘中一个盘块的使用情况，磁盘上的所有盘块都有一个二进制位与之对应。当其值为“0”时，表示对应的盘块空闲；当其值为“1”时，表示已分配。位图所占空间的大小只取决于外存空间的总大小（盘块数量），而与当前空闲块数量无关。",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_4-3-6_18",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "文件管理",
      "section": "4.3.6",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2025 统考真题】下列关于虚拟文件系统（VFS）的叙述中，正确的是（）。",
      "options": {
        "A": "VFS 是在虚拟内存中建立的文件系统",
        "B": "VFS 能提高不同文件系统中文件的访问速度",
        "C": "VFS 定义了可以访问不同文件系统的统一接口",
        "D": "通过 VFS 只能访问本地文件，不能访问网络文件"
      },
      "answer": [
        "C"
      ],
      "explanation": "虚拟文件系统（VFS）是操作系统内核中的一个抽象层，其核心目标是向上层应用程序提供统一的文件操作接口（如 open、read 等），进而屏蔽底层各类文件系统（如 ext4、NTFS 等）在实现细节上的差异。VFS 并不是一种在虚拟内存中实现的文件系统，也不存在储实际数据，仅作为软件抽象存在。它不改变底层文件系统的数据组织方式，因此无法提升文件访问速度，读/写性能仍由具体文件系统结构及存储设备决定。此外，VFS的设计支持多种文件系统类型，包括本地文件系统和网络文件系统（如NFS），能够透明地访问远程文件。因此，只有关于VFS提供统一接口的描述准确反映了其本质功能。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/操作系统/chapters/ch04-第4章-文件管理.md"
    },
    {
      "id": "操作系统_5-1-6_07",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "在操作系统中，（）指的是一种硬件机制。",
      "options": {
        "A": "通道技术",
        "B": "缓冲池",
        "C": "SPOOLing 技术",
        "D": "内存覆盖技术"
      },
      "answer": [
        "A"
      ],
      "explanation": "通道是一种特殊的处理器，所以属于硬件技术。SPOOLing、缓冲池、内存覆盖都是在内存的基础上通过软件实现的。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_08",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "若 I/O 设备与存储设备进行数据交换不经过 CPU 来完成，则这种数据交换方式是（）。",
      "options": {
        "A": "程序查询",
        "B": "中断方式",
        "C": "DMA 方式",
        "D": "直接存取方式"
      },
      "answer": [
        "C"
      ],
      "explanation": "在 DMA 方式中，设备和内存之间可以成批地进行数据交换而不用 CPU 干预，CPU 只参与预处理和结束过程。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_09",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于 DMA 方式的描述中，正确的是（）。",
      "options": {
        "A": "DMA 是一个专门负责输入/输出的处理机",
        "B": "数据传输过程由 DMA 控制器负责，CPU 只在预处理和后处理阶段进行干预",
        "C": "CPU 通过程序的方式给出 DMA 可以解释的程序",
        "D": "DMA 不需要 CPU 指出所取数据的地址与长度"
      },
      "answer": [
        "B"
      ],
      "explanation": "DMA 不是一个处理机，而是一个控制器，选项 A 错误。CPU 无须给出 DMA 可以解释的程序，而是给 DMA 发出一条命令，同时设置 DMA 控制器中寄存器的值，来启动 DMA，选项 C 错误。DMA 需要 CPU 指出所取数据的地址与长度，这些参数存放在 DMA 控制器的寄存器中，选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_10",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "计算机系统中，不属于 DMA 控制器的是（）。",
      "options": {
        "A": "命令/状态寄存器",
        "B": "内存地址寄存器",
        "C": "数据寄存器",
        "D": "堆栈指针寄存器"
      },
      "answer": [
        "D"
      ],
      "explanation": "命令/状态寄存器控制 DMA 的工作模式并给 CPU 反映它当前的状态，地址寄存器存放 DMA 作业时的源地址和目标地址，数据寄存器存放需要 DMA 转移的数据，只有堆栈指针寄存器不需要在 DMA 控制器中存放。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_11",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "DMA 传输前需要进行预处理，传输后需要进行后处理，则下列说法中正确的是（）。",
      "options": {
        "A": "预处理程序运行在用户态，后处理程序运行在内核态",
        "B": "负责预处理和后处理程序的进程都是请求 I/O 的进程",
        "C": "预处理阶段不需要 CPU 参与，后处理阶段需要 CPU 参与",
        "D": "预处理阶段请求 I/O 的进程处于运行态，后处理阶段处于阻塞态"
      },
      "answer": [
        "D"
      ],
      "explanation": "在预处理之前，请求 I/O 的进程通过系统调用进入内核态，因此预处理程序和后处理程序都运行在内核态。负责预处理的进程是请求 I/O 的进程，负责后处理的进程是中断服务例程，中断服务例程不是一个单独的进程。在预处理阶段，CPU 执行相应的设备驱动程序来设置相关的传输参数，需要 CPU 的参与。预处理由请求 I/O 的进程在内核态执行相关操作，之后阻塞其自身，直到系统调用返回，因此在后处理阶段请求 I/O 的进程仍处于阻塞态。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_12",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "在下列问题中，（）不是设备分配中应考虑的问题。",
      "options": {
        "A": "及时性",
        "B": "设备的固有属性",
        "C": "设备独立性",
        "D": "安全性"
      },
      "answer": [
        "A"
      ],
      "explanation": "设备的固有属性决定了设备的使用方式；设备独立性可以提高设备分配的灵活性和设备的利用率；设备安全性可以保证分配设备时不会导致永久阻塞。设备分配时一般无须考虑及时性，及时性是一个与系统性能和用户需求相关的因素，设备分配时应该考虑的问题是如何在保证系统安全和正确运行的前提下，合理地分配和利用设备资源。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_13",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "将系统中的每台设备按某种原则统一进行编号，这些编号作为区分硬件和识别设备的代号，该编号称为设备的（）。",
      "options": {
        "A": "绝对号",
        "B": "相对号",
        "C": "类型号",
        "D": "符号"
      },
      "answer": [
        "A"
      ],
      "explanation": "系统为每台设备确定一个编号以便区分和识别设备，这个确定的编号称为设备的绝对号。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_14",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "关于通道、设备控制器和设备之间的关系，以下叙述中正确的是（）。",
      "options": {
        "A": "设备控制器和通道可以分别控制设备",
        "B": "对于同一组输入/输出命令，设备控制器、通道和设备可以并行工作",
        "C": "通道控制设备控制器、设备控制器控制设备工作",
        "D": "以上答案都不对"
      },
      "answer": [
        "C"
      ],
      "explanation": "三者的控制关系是层层递进的，选项 C 正确。对于同一组输入/输出命令，要么 CPU 向通道发出命令，要么 CPU 直接给设备控制器发出命令，不存在并行的可能，选项 B 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_15",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "一个计算机系统配置了 2 台相同类型的绘图机和 3 台相同类型的打印机，为了正确驱动这些设备，系统应该提供（）个设备驱动程序。",
      "options": {
        "A": "5",
        "B": "3",
        "C": "2",
        "D": "1"
      },
      "answer": [
        "C"
      ],
      "explanation": "因为绘图机和打印机属于两种不同类型的设备，系统只要按设备类型配置设备驱动程序即可，即每类设备只需一个设备驱动程序。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_16",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "将系统调用参数翻译成设备操作命令的工作由（）完成。",
      "options": {
        "A": "用户层 I/O",
        "B": "设备无关的操作系统软件",
        "C": "中断处理",
        "D": "设备驱动程序"
      },
      "answer": [
        "B"
      ],
      "explanation": "将系统调用参数翻译成设备操作命令的工作由设备无关的操作系统软件完成。设备无关的操作系统软件是 I/O 软件的一部分，它向上层提供系统调用的接口，根据设备类型选择调用相应的驱动程序。设备驱动程序负责执行操作系统发出的 I/O 命令，因设备的不同而不同。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_17",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "向设备寄存器的写命令是在 I/O 软件的（）中完成的。",
      "options": {
        "A": "用户层软件",
        "B": "设备独立性软件",
        "C": "设备驱动程序",
        "D": "中断处理程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "设备驱动程序负责将上层软件发来的抽象 I/O 要求转换为具体要求，发送给设备控制器，控制设备工作。设备驱动程序需要向设备寄存器写入命令，以控制设备的工作状态和数据传输方式。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_18",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "一个典型的文本打印页面有 50 行，每行 80 个字符，假定一台标准的打印机每分钟能打印 6 页，向打印机的输出寄存器中写一个字符的时间很短，可忽略不计。若每打印一个字符都需要花费 $50 \\mu s$ 的中断处理时间（包括所有服务），则使用中断驱动 I/O 方式运行这台打印机，中断的系统开销占 CPU 的百分比为（）。",
      "options": {
        "A": "2%",
        "B": "5%",
        "C": "20%",
        "D": "50%"
      },
      "answer": [
        "A"
      ],
      "explanation": "这台打印机每分钟打印 $50 \\times 80 \\times 6 = 24000$ 个字符，即每秒打印 400 个字符。每个字符打印中断需要占用 CPU 时间 $50 \\mu s$ ，所以每秒用于中断的系统开销为 $400 \\times 50 \\mu s = 20 ms$ 。若使用中断驱动 I/O，则 CPU 剩余的 980 ms 可用于其他处理，中断的开销占 CPU 的 2%。因此，使用中断驱动 I/O 方式运行这台打印机是有意义的。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_19",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "在接收和处理一个输入设备的中断的过程中，一定不由硬件来完成的工作是（）。",
      "options": {
        "A": "判断产生中断的类型",
        "B": "CPU 模式由用户态切换到内核态",
        "C": "主机获取设备输入",
        "D": "保存用户程序的断点"
      },
      "answer": [
        "C"
      ],
      "explanation": "在中断 I/O 方式下，由中断服务程序来完成数据的输入和输出，C 错误。在中断响应阶段，由硬件完成 CPU 模式的转换，并保存用户程序的断点，中断源的识别可以采用硬件识别法。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_20",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "下列几种 I/O 方式中，会导致用户进程进入阻塞态的是（）。 I. 程序直接控制 II. 中断方式 III. DMA 方式",
      "options": {
        "A": "II",
        "B": "I、III",
        "C": "II、III",
        "D": "I、II、III"
      },
      "answer": [
        "C"
      ],
      "explanation": "在程序直接控制方式下，用户进程在 I/O 过程中不会被阻塞，驱动程序完成用户进程的 I/O 请求后才结束，CPU 和 I/O 操作串行。在中断控制方式下，驱动程序启动第一次 I/O 操作后，将调出其他进程执行，而当前用户进程被阻塞，CPU 和设备准备并行。在 DMA 方式下，驱动程序对 DMA 控制器初始化后，便发送 “启动 DMA” 命令，在外设和主存之间传送数据，同时 CPU 执行调度程序，转向其他进程执行，当前用户进程被阻塞时，CPU 和数据传送并行。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_21",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "当一个进程请求 I/O 操作时，该进程将被挂起，直到 I/O 设备完成 I/O 操作后，设备控制器便向 CPU 发送一个中断请求，CPU 响应后便转向中断处理程序，下列关于中断处理程序的说法中，错误的是（）。",
      "options": {
        "A": "中断处理程序将设备控制器中的数据传送到内存的缓冲区（读入），或将要输出的数据传送到设备控制器（输出）。",
        "B": "对于不同的设备，有不同的中断处理程序",
        "C": "中断处理结束后，需要恢复 CPU 现场，此时一定会返回到被中断的进程",
        "D": "I/O 操作完成后，驱动程序必须检查本次 I/O 操作中是否发生了错误"
      },
      "answer": [
        "C"
      ],
      "explanation": "中断处理结束后，是否返回到被中断的进程，有两种情况：① 采用的是屏蔽中断方式（单重中断），此时会返回被中断的进程。② 采用的是中断嵌套方式（多重中断），若没有更高优先级的中断请求，则会返回被中断的进程；否则，系统将处理更高优先级的中断请求。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_22",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "在 I/O 系统与高层之间的接口中，根据设备类型的不同，又进一步分为若干类接口，若某设备的数据传输速率较高，且可寻址，则比较适合采用（）。",
      "options": {
        "A": "块设备接口",
        "B": "网络设备接口",
        "C": "字符设备接口",
        "D": "流设备接口"
      },
      "answer": [
        "A"
      ],
      "explanation": "块设备是指数据的存取和传输都是以数据块为单位的设备，其特征是传输速率较高且可寻址，典型的块设备（如磁盘）通常采用 DMA 方式。字符设备（也称流设备）是指数据的存取和传输是以字符为单位的设备，如键盘、打印机等，字符设备的传输速率较低且不可寻址。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_23",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2010 统考真题】本地用户通过键盘登录系统时，首先获得键盘输入信息的程序是（）。",
      "options": {
        "A": "命令解释程序",
        "B": "中断处理程序",
        "C": "系统调用服务程序",
        "D": "用户登录程序"
      },
      "answer": [
        "B"
      ],
      "explanation": "键盘是典型的通过中断 I/O 方式工作的外设，当用户输入信息时，计算机响应中断并通过中断处理程序获得输入信息。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_24",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2011 统考真题】用户程序发出磁盘 I/O 请求后，系统的正确处理流程是（）。",
      "options": {
        "A": "用户程序→系统调用处理程序→中断处理程序→设备驱动程序",
        "B": "用户程序→系统调用处理程序→设备驱动程序→中断处理程序",
        "C": "用户程序→设备驱动程序→系统调用处理程序→中断处理程序",
        "D": "用户程序→设备驱动程序→中断处理程序→系统调用处理程序"
      },
      "answer": [
        "B"
      ],
      "explanation": "输入/输出软件一般从上到下分为 4 个层次：用户层、与设备无关的软件层、设备驱动程序及中断处理程序。与设备无关的软件层也就是系统调用的处理程序。\n\n当用户使用设备时，首先在用户程序中发起一次系统调用，操作系统的内核接到该调用请求后，请求调用处理程序进行处理，再转到相应的设备驱动程序，当设备准备好或者所需数据到达后，设备硬件发出中断，将数据按上述调用顺序逆向回传到用户程序中。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_25",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2012 统考真题】操作系统的 I/O 子系统通常由 4 个层次组成，每层明确定义了与邻近层次的接口，其合理的层次组织排列顺序是（）。",
      "options": {
        "A": "用户级 I/O 软件、设备无关软件、设备驱动程序、中断处理程序",
        "B": "用户级 I/O 软件、设备无关软件、中断处理程序、设备驱动程序",
        "C": "用户级 I/O 软件、设备驱动程序、设备无关软件、中断处理程序",
        "D": "用户级 I/O 软件、中断处理程序、设备无关软件、设备驱动程序"
      },
      "answer": [
        "A"
      ],
      "explanation": "考查内容同上题。设备管理软件一般分为4个层次：用户层、与设备无关的系统调用处理层、设备驱动程序及中断处理程序。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-1-6_26",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.1.6",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2017 统考真题】系统将数据从磁盘读到内存的过程包括以下操作: ① DMA 控制器发出中断请求 ② 初始化 DMA 控制器并启动磁盘 ③ 从磁盘传输一块数据到内存缓冲区 ④ 执行 “DMA 结束” 中断服务程序 正确的执行顺序是（）。",
      "options": {
        "A": "③→①→②→④",
        "B": "②→③→①→④",
        "C": "②→①→③→④",
        "D": "①→②→④→③"
      },
      "answer": [
        "B"
      ],
      "explanation": "DMA 的传送过程分为预处理、数据传送和后处理三个阶段。在预处理阶段，由 CPU 初始化 DMA 控制器中的有关寄存器、设置传送方向、测试并启动设备等。在数据传送阶段，完全由 DMA 控制，DMA 控制器接管系统总线。在后处理阶段，DMA 控制器向 CPU 发送中断请求，CPU 执行中断服务程序做 DMA 结束处理。因此，正确的执行顺序是②③①④。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_09",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "设从磁盘将一块数据传送到缓冲区所用的时间为 $80 \\mu s$ ，将缓冲区中的数据传送到用户区所用的时间为 $40 \\mu s$ ，CPU 处理一个数据块所用的时间为 $30 \\mu s$ 。若有多块数据需要处理，并采用单缓冲区传送某磁盘数据，则处理一块数据所用的总时间为（）。",
      "options": {
        "A": "$120\\mu s$",
        "B": "110μs",
        "C": "$150\\mu s$",
        "D": "$70\\mu s$"
      },
      "answer": [
        "A"
      ],
      "explanation": "采用单缓冲区传送数据时，设备与处理机对缓冲区的操作是串行的，当进行第 i 次读磁盘数据送至缓冲区时，系统再同时读出用户区中第 i-1 次数据进行计算，此两项操作可以并行，并与数据从缓冲区传送到用户区的操作串行进行，所以系统处理一块数据所用的总时间为 $\\max(80\\mu s, 30\\mu s) + 40\\mu s = 120\\mu s$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_10",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "某操作系统采用双缓冲区传送磁盘上的数据。设从磁盘将数据传送到缓冲区所用的时间为 $T_{1}$ ，将缓冲区中的数据传送到用户区所用的时间为 $T_{2}$ ，CPU 处理一块数据所用的时间为 $T_{3}$ ，假设一个磁盘块和一个缓冲区的大小相等，某系统在一段时间内连续处理一大批数据，则平均处理一个磁盘块数据的时间为（）。",
      "options": {
        "A": "$T_{1} + T_{2} + T_{3}$",
        "B": "$\\max(T_{2}, T_{3}) + T_{1}$",
        "C": "$\\max(T_{1}, T_{3}) + T_{2}$",
        "D": "$\\max(T_{1}, T_{2} + T_{3})$"
      },
      "answer": [
        "D"
      ],
      "explanation": "计算处理一个磁盘块数据的平均时间，可以假定系统的初始状态：用户区为空，缓冲区1为满，缓冲区 2 为空，如右图所示。① $0 \\sim T_{2}$ 时段，将缓冲区 1 中的数据送入用户区；② $T_{2} \\sim T_{2} + T_{3}$ 时段，处理用户区中的数据，③ $0 \\sim T_{1}$ 时段，将数据从磁盘送入缓冲区 2，只有② 和③ 都完成后，系统才重新回到初始状态，因此平均处理一个磁盘块数据的时间为 $\\max(T_{1}, T_{2} + T_{3})$ 。\n\n![](images/c112b16b449a5df49f6ede0db646e02efc0802543190a04ecaef828a058ffd91.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph LR\n    A[\"电脑\"] -->|T1| B[\"缓冲区1\"]\n    A -->|T1| C[\"缓冲区2\"]\n    B -->|T2| D[\"用户区\"]\n    C -->|T2| D\n    D -->|T3(处理)| E[\"用户区\"]\n```\n</details>",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_11",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "若 I/O 所花费的时间比 CPU 的处理时间短得多，则缓冲区（）。",
      "options": {
        "A": "最有效",
        "B": "几乎无效",
        "C": "均衡",
        "D": "以上答案都不对"
      },
      "answer": [
        "B"
      ],
      "explanation": "缓冲区主要解决输入/输出速度比 CPU 处理的速度慢而造成数据积压的矛盾。所以当 I/O 花费的时间比 CPU 处理时间短很多时，缓冲区没有必要设置。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_12",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "缓冲区管理者重要考虑的问题是（）。",
      "options": {
        "A": "选择缓冲区的大小",
        "B": "决定缓冲区的数量",
        "C": "实现进程访问缓冲区的同步",
        "D": "限制进程的数量"
      },
      "answer": [
        "C"
      ],
      "explanation": "在缓冲机制中，无论是单缓冲、多缓冲还是缓冲池，因为缓冲区是一种临界资源，所以在使用缓冲区时都有一个申请和释放（互斥）的问题需要考虑。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_13",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "考虑单用户计算机上的下列 I/O 操作，需要使用缓冲技术的是（）。 I. 图形用户界面下使用鼠标 II. 多任务操作系统下的磁盘驱动器（假设没有设备预分配） III. 包含用户文件的磁盘驱动器 IV. 使用存储器映射 I/O，直接和总线相连的图形卡",
      "options": {
        "A": "I、III",
        "B": "II、IV",
        "C": "II、III、IV",
        "D": "全选"
      },
      "answer": [
        "D"
      ],
      "explanation": "在鼠标移动时，若有高优先级的操作产生，为了记录鼠标活动的情况，必须使用缓冲技术，说法 I 正确。由于磁盘驱动器和目标或源 I/O 设备间的吞吐量不同，必须采用缓冲技术，说法 II 正确。为了能使数据从用户作业空间传送到磁盘或从磁盘传送到用户作业空间，必须采用缓冲技术，说法 III 正确。为了便于多幅图形的存取及提高性能，缓冲技术是可以采用的，特别是在显示当前一幅图形又要得到下一幅图形时，应采用双缓冲技术，说法 IV 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_14",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "以下（）不属于设备管理数据结构。",
      "options": {
        "A": "PCB",
        "B": "DCT",
        "C": "COCT",
        "D": "CHCT"
      },
      "answer": [
        "A"
      ],
      "explanation": "DCT 是设备控制表；COCT 是控制器控制表；CHCT 是通道控制表；PCB 是进程控制块，不属于设备管理的数据结构。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_15",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "下列（）不是设备的分配方式。",
      "options": {
        "A": "独享分配",
        "B": "共享分配",
        "C": "虚拟分配",
        "D": "分区分配"
      },
      "answer": [
        "D"
      ],
      "explanation": "设备的分配方式主要有独享分享、共享分配和虚拟分配，选项 D 是内存的分配方式。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_16",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "设备分配程序需要访问一系列的数据结构来给进程分配设备，这些数据结构有：设备控制表（DCT），控制器控制表（COCT），通道控制表（CHCT），系统设备表（SDT）。在设备分配的过程中，访问这些数据结构的正确顺序是（）。",
      "options": {
        "A": "SDT, DCT, COCT, CHCT",
        "B": "DCT, COCT, CHCT, SDT",
        "C": "SDT, COCT, CHCT, DCT",
        "D": "COCT, CHCT, SDT, DCT"
      },
      "answer": [
        "A"
      ],
      "explanation": "在设备分配的过程中，访问数据结构的顺序通常是按设备管理的逻辑层次来安排的。设备分配过程通常从系统设备表（SDT）开始，然后依次获取设备控制表（DCT）、控制器控制表（COCT）和通道控制表（CHCT）中的信息，最终完成对设备的分配。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_17",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "下面设备中属于共享设备的是（）。",
      "options": {
        "A": "打印机",
        "B": "磁带机",
        "C": "磁盘",
        "D": "磁带机和磁盘"
      },
      "answer": [
        "C"
      ],
      "explanation": "共享设备是指在一个时间间隔内可被多个进程同时访问的设备，只有磁盘满足。打印机在一个时间间隔内被多个进程访问时，打印出来的文档会乱；磁带机旋转到所需的读/写位置需要较长时间，若一个时间间隔内被多个进程访问，磁带机就只能一直旋转，没时间读/写。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_18",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "提高单机资源利用率的关键技术是（）。",
      "options": {
        "A": "SPOOLing 技术",
        "B": "虚拟技术",
        "C": "交换技术",
        "D": "多道程序设计技术"
      },
      "answer": [
        "D"
      ],
      "explanation": "在单机系统中，最关键的资源是处理器资源，最大化地提高处理器利用率，就是最大化地提高系统效率。多道程序设计技术是提高处理器利用率的关键技术，其他均为设备和内存的相关技术。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_19",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "虚拟设备是靠（）技术来实现的。",
      "options": {
        "A": "通道",
        "B": "缓冲",
        "C": "SPOOLing",
        "D": "控制器"
      },
      "answer": [
        "C"
      ],
      "explanation": "SPOOLing 技术是操作系统中采用的一种将独占设备改造为共享设备的技术。通过这种技术处理后的设备通常称为虚拟设备。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_20",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "SPOOLing 技术的主要目的是（）。",
      "options": {
        "A": "提高 CPU 和设备交换信息的速度",
        "B": "提高独占设备的利用率",
        "C": "减轻用户编程负担",
        "D": "提供主、辅存接口"
      },
      "answer": [
        "B"
      ],
      "explanation": "SPOOLing 技术将一台物理设备虚拟为多台逻辑设备，以减少设备的闲置时间，提高设备的并发度和吞吐量，因此 SPOOLing 技术的主要目的是提高独占设备的利用率。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_21",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "在采用 SPOOLing 技术的系统中，用户的打印结果首先被送到（）。",
      "options": {
        "A": "磁盘固定区域",
        "B": "内存固定区域",
        "C": "终端",
        "D": "打印机"
      },
      "answer": [
        "A"
      ],
      "explanation": "输入井和输出井是在磁盘上开辟的两大存储空间。输入井模拟脱机输入时的磁盘设备，用于暂存 I/O 设备输入的数据；输出井模拟脱机输出时的磁盘，用于暂存用户程序的输出数据。为了缓和 CPU，打印结果首先送到位于磁盘固定区域的输出井。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_22",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "采用 SPOOLing 技术的计算机系统，外围计算机需要（）。",
      "options": {
        "A": "一台",
        "B": "多台",
        "C": "至少一台",
        "D": "0 台"
      },
      "answer": [
        "D"
      ],
      "explanation": "SPOOLing 技术需要使用磁盘空间（输入井和输出井）和内存空间（输入/输出缓冲区），不需要外围计算机的支持。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_23",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "SPOOLing 系统由（）组成。",
      "options": {
        "A": "预输入程序、井管理程序和缓输出程序",
        "B": "预输入程序、井管理程序和井管理输出程序",
        "C": "输入程序、井管理程序和输出程序",
        "D": "预输入程序、井管理程序和输出程序"
      },
      "answer": [
        "A"
      ],
      "explanation": "SPOOLing 系统主要包含三部分，即输入井和输出井、输入缓冲区和输出缓冲区以及输入进程和输出进程。这三部分由预输入程序、井管理程序和缓输出程序管理，以保证系统正常运行。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_24",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "在 SPOOLing 系统中，用户进程实际分配到的是（）。",
      "options": {
        "A": "用户所要求的外设",
        "B": "外存区，即虚拟设备",
        "C": "设备的一部分存储区",
        "D": "设备的一部分空间"
      },
      "answer": [
        "B"
      ],
      "explanation": "通过 SPOOLing 技术可将一台物理 I/O 设备虚拟为 I/O 设备，同样允许多个用户共享一台物理 I/O 设备，所以 SPOOLing 并不是将物理设备真的分配给用户进程。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_25",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "下面关于 SPOOLing 系统的说法中，正确的是（）。",
      "options": {
        "A": "构成 SPOOLing 系统的基本条件是有外围输入机与外围输出机",
        "B": "构成 SPOOLing 系统的基本条件仅是要有高速的大容量硬盘作为输入井和输出井",
        "C": "当输入设备忙时，SPOOLing 系统中的用户程序暂停执行，待 I/O 空闲时再被唤醒执行输出操作",
        "D": "SPOOLing 系统中的用户程序可以随时将输出数据送到输出井中，待输出设备空闲时再由 SPOOLing 系统完成数据的输出操作"
      },
      "answer": [
        "D"
      ],
      "explanation": "构成 SPOOLing 系统的基本条件是不仅要有大容量、高速度的外存作为输入井和输出井，还要有 SPOOLing 软件，因此选项 A 错误、选项 B 不够全面，同时利用 SPOOLing 技术提高了系统和 I/O 设备的利用率，进程不必等待 I/O 操作的完成，因此选项 C 也不正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_26",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "下面关于 SPOOLing 的叙述中，不正确的是（）。",
      "options": {
        "A": "SPOOLing 系统中不需要独占设备",
        "B": "SPOOLing 系统加快了作业执行的速度",
        "C": "SPOOLing 系统使独占设备变成共享设备",
        "D": "SPOOLing 系统提高了独占设备的利用率"
      },
      "answer": [
        "A"
      ],
      "explanation": "SPOOLing 技术将独占设备虚拟成共享设备，因此必须先有独占设备才行。下面说明 SPOOLing 技术如何加快作业执行的速度，提高独占设备的利用率。进程不需要等待打印机空闲，只需将输出数据送到输出井，然后继续执行其他操作，这样就提高了进程的效率。打印机不需要空闲等待进程的输出，只需从输出井中读取数据进行打印，然后读取下一个数据，这样就提高了打印机的效率。输出进程可以根据输出井中的数据量和优先级来安排打印顺序，从而平衡各个进程的等待时间和响应时间，这样就提高了系统的性能。输出进程可以减少对打印机的切换次数，从而减少系统的开销，进而提高打印机的利用率。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_27",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "（）是操作系统中采用的以空间换取时间的技术。",
      "options": {
        "A": "SPOOLing 技术",
        "B": "虚拟存储技术",
        "C": "覆盖与交换技术",
        "D": "通道技术"
      },
      "answer": [
        "A"
      ],
      "explanation": "SPOOLing 技术需有高速大容量且可随机存取的外存支持，通过预输入和缓输出来减少 CPU 等待慢速设备的时间，将独享设备改造成共享设备。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_28",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "采用假脱机技术，将磁盘的一部分作为公共缓冲区以代替打印机，用户对打印机的操作实际上是对磁盘的存储操作，用以代替打印机的部分由（）完成。",
      "options": {
        "A": "独占设备",
        "B": "共享设备",
        "C": "虚拟设备",
        "D": "一般物理设备"
      },
      "answer": [
        "C"
      ],
      "explanation": "利用假脱机技术可将独享设备改造为可供多个用户共享的虚拟设备，各作业在执行期间只使用虚拟设备。采用假脱机技术，将磁盘的一部分作为公共缓冲区以代替打印机，用户对打印机的操作实际上是对磁盘的存储操作，用以代替打印机的部分由虚拟设备完成。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_29",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "下面关于独占设备和共享设备的说法中，不正确的是（）。",
      "options": {
        "A": "打印机、扫描仪等属于独占设备",
        "B": "对独占设备往往采用静态分配方式",
        "C": "共享设备是指一个作业尚未撤离，另一个作业即可使用，但每个时刻只有一个作业使用",
        "D": "对共享设备往往采用静态分配方式"
      },
      "answer": [
        "D"
      ],
      "explanation": "独占设备采用静态分配方式，而共享设备采用动态分配方式。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_30",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "当用户要求使用打印机打印某文件时，用户的要求是由操作系统的（）实现的。",
      "options": {
        "A": "文件系统",
        "B": "设备管理程序",
        "C": "文件系统和设备管理程序",
        "D": "打印机启动程序和设备管理程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "当用户使用打印机打印某文件时，需要通过文件系统来访问磁盘上的数据，然后通过设备管\n\n理程序来控制打印机的输出。打印机启动程序只能初始化打印机，不能直接访问磁盘上的数据。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_31",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "下列设备管理工作中，适合由设备独立性软件来完成的有（）。 I. 向设备寄存器写命令 II. 检查用户是否有权使用设备 III. 将二进制整数转换成 ASCII 码格式打印 IV. 缓冲区管理",
      "options": {
        "A": "I、II 和 III",
        "B": "II、III 和 IV",
        "C": "II 和 IV",
        "D": "I、III 和 IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "设备寄存器写命令是由设备驱动程序完成的。检查用户是否有权使用设备属于设备保护，是由设备独立性软件完成的。将二进制整数转换成 ASCII 码的格式打印是通过 I/O 库函数完成的，属于用户层软件。缓冲区管理属于输入/输出的共有操作，是由设备独立性软件完成的。缓冲区是内存中的区域，显然不是由设备驱动程序完成的。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_32",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "下列关于设备驱动程序的说法中，正确的是（）。 I. 设备驱动程序负责处理与设备相关的中断处理过程 II. 驱动程序全部使用汇编语言编写，没有使用高级语言编写 III. 设备驱动程序负责处理磁盘调度 IV. 设备驱动程序与设备密切相关，可以在任意操作系统运行",
      "options": {
        "A": "II、III、IV",
        "B": "I、III",
        "C": "III、IV",
        "D": "I、II、III"
      },
      "answer": [
        "B"
      ],
      "explanation": "不同厂家的设备通常提供不同的驱动程序，对应不同的中断处理，因此需要驱动程序来完成，说法 I 正确。驱动程序仅有一部分需要用汇编语言编写，其余部分可用高级语言编写，说法 II 错误。不同型号的磁盘的调度方式不一定相同，磁盘调度由磁盘驱动程序完成，说法 III 正确。不同的操作系统有不同的驱动程序接口，因此驱动程序要根据操作系统的要求进行定制，说法 IV 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_33",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "下列选项中，（）不属于设备驱动程序的功能。",
      "options": {
        "A": "接收进程发来的 I/O 命令和参数，并检查其合法性",
        "B": "查询 I/O 设备的状态",
        "C": "发出 I/O 命令，启动 I/O 设备",
        "D": "对 I/O 设备传回的数据进行分析和缓冲"
      },
      "answer": [
        "D"
      ],
      "explanation": "设备驱动程序的功能是管理 I/O 设备。数据的分析和缓冲是由进程或操作系统完成的。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_34",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "对设备驱动程序的处理过程进行排序，正确的处理顺序是（）。 ①对服务请求进行校验 ②传送必要的参数 ③启动 I/O 设备 ④将抽象要求转化为具体要求 ⑤检查设备的状态",
      "options": {
        "A": "①④⑤②③",
        "B": "④①⑤②③",
        "C": "①④②⑤③",
        "D": "④①②⑤③"
      },
      "answer": [
        "B"
      ],
      "explanation": "用户层软件发出的命令是设备独立性软件提供的统一接口，需要由驱动程序将这些抽象要求转化为具体要求，才能被设备控制器识别，例如将抽象要求中的盘块号转化为磁盘的柱面号、盘面号和扇区号。然后，驱动程序会检查服务请求是不是该设备可以执行的，之后检查设备的状态，只有设备处于就绪状态时才能启动，最后传送此次 I/O 的参数并启动设备。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_35",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "printf()是 C 语言中进行格式化输出的库函数，该函数最终会转到内核态执行相应的系统调用服务例程，进程是通过执行（）从用户态进入内核态的。",
      "options": {
        "A": "陷入指令",
        "B": "关中断指令",
        "C": "无条件跳转指令",
        "D": "输出指令"
      },
      "answer": [
        "A"
      ],
      "explanation": "printf()是进行输出的函数，最终需要在内核态执行I/O指令来完成输出的功能。系统调用函数中包含一条陷入指令，也称trap指令，会让CPU陷入内核态执行相应的服务程序。\n\n![](images/24a10c1d64737848cdc12972b4b5a139615a14e58a87c3a3eab0b80bff2fc1eb.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph LR\n    A[\"传递系统调用参数\"] --> B[\"执行trap指令陷入内核态\"]\n    B --> C[\"执行相应的服务程序\"]\n    C --> D[\"返回用户态\"]\n```\n</details>",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_36",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "【2009 统考真题】单处理机系统中，可并行的是（）。 I. 进程与进程 II. 处理机与设备 III. 处理机与通道 IV. 设备与设备",
      "options": {
        "A": "I、II、III",
        "B": "I、II、IV",
        "C": "I、III、IV",
        "D": "II、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "在单 CPU 系统中，同一时刻只能有一个进程占用 CPU，因此进程之间不能并行执行。通道是独立于 CPU、控制输入/输出的设备，两者可以并行。显然，处理器与设备是可以并行的。设备与设备也是可以并行的，比如显示屏与打印机是可以并行工作的。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_37",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "【2009 统考真题】程序员利用系统调用打开 I/O 设备时，通常使用的设备标识是（）。",
      "options": {
        "A": "逻辑设备名",
        "B": "物理设备名",
        "C": "主设备号",
        "D": "从设备号"
      },
      "answer": [
        "A"
      ],
      "explanation": "用户程序对 I/O 设备的请求采用逻辑设备名，而程序实际执行时使用物理设备名，它们之间的转换是由设备无关软件层完成的。主设备和从设备是总线仲裁中的概念。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_38",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "【2011 统考真题】某文件占 10 个磁盘块，现要把该文件的磁盘块逐个读入主存缓冲区，并且送到用户区进行分析，假设一个缓冲区与一个磁盘块大小相同，把一个磁盘块读入缓冲区的时间为 $100\\mu \\mathrm{s}$ ，将缓冲区的数据传送到用户区的时间是 $50\\mu \\mathrm{s}$ ，CPU 对一块数据进行分析的时间为 $50\\mu \\mathrm{s}$ 。在单缓冲区和双缓冲区结构下，读入并分析完该文件的时间分别是（）。",
      "options": {
        "A": "$1500\\mu s$ , $1000\\mu s$",
        "B": "$1550\\mu s$ , $1100\\mu s$",
        "C": "1550μs, 1550μs",
        "D": "2000μs, 2000μs"
      },
      "answer": [
        "B"
      ],
      "explanation": "在单缓冲区中，当上一个磁盘块从缓冲区读入用户区完成时，下一磁盘块才能开始读入，也就是当最后一个磁盘块读入用户区完毕时所用的时间为 $150 \\times 10 = 1500 \\mu s$ ，加上处理最后一个磁盘块的时间 $50 \\mu s$ ，得 $1550 \\mu s$ 。双缓冲区中，不存在等待磁盘块从缓冲区读入用户区的问题，10 个磁盘块可以连续从外存读入主存缓冲区，加上将最后一个磁盘块从缓冲区送到用户区的传输时间 $50 \\mu s$ 及处理时间 $50 \\mu s$ ，也就是 $100 \\times 10 + 50 + 50 = 1100 \\mu s$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_39",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "【2013 统考真题】设系统缓冲区和用户工作区均采用单缓冲，从外设读入一块数据到系统缓冲区的时间为 100，从系统缓冲区读入一块数据到用户工作区的时间为 5，对用户工作区中的一块数据进行分析的时间为 90（见右图）。进程从外设读入并分析 2 个数据块的最短时间是（）。 ![](images/7f012ad66c12625742ffdc56f29582f36871641c70b5fab194eb9f09af3859c6.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"用户工作区\"] -->|90| B[\"系统缓冲区\"] B -->|5| A B -->|100| C[\"外设\"] ``` </details>",
      "options": {
        "A": "200",
        "B": "295",
        "C": "300",
        "D": "390"
      },
      "answer": [
        "C"
      ],
      "explanation": "数据块 1 从外设到用户工作区的总时间为 105，在这段时间中，数据块 2 未进行操作。在数据块 1 进行分析处理时，数据块 2 从外设到用户工作区的总时间为 105，这段时间是并行的。再加上数据块 2 进行处理的时间 90，总共是 300。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_40",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "【2013 统考真题】用户程序发出磁盘 I/O 请求后，系统的处理流程是：用户程序→系统调用处理程序→设备驱动程序→中断处理程序。其中，计算数据所在磁盘的柱面号、磁头号、扇区号的程序是（）。",
      "options": {
        "A": "用户程序",
        "B": "系统调用处理程序",
        "C": "设备驱动程序",
        "D": "中断处理程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "计算柱面号、磁头号和扇区号的工作是由设备驱动程序完成的。题中的功能因设备硬件的不同而不同，因此应由厂家提供的设备驱动程序实现。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_41",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "【2015统考真题】在系统内存中设置磁盘缓冲区的主要目的是（）。",
      "options": {
        "A": "减少磁盘 I/O 次数",
        "B": "减少平均寻道时间",
        "C": "提高磁盘数据可靠性",
        "D": "实现设备无关性"
      },
      "answer": [
        "A"
      ],
      "explanation": "磁盘和内存的速度差异，决定了可以将内存经常访问的文件调入磁盘缓冲区，从高速缓存中复制的访问比磁盘 I/O 的机械操作要快很多。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_42",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "【2016 统考真题】下列关于 SPOOLing 技术的叙述中，错误的是（）。",
      "options": {
        "A": "需要外存的支持",
        "B": "需要多道程序设计技术的支持",
        "C": "可以让多个作业共享一台独占式设备",
        "D": "由用户作业控制设备与输入/输出井之间的数据传送"
      },
      "answer": [
        "D"
      ],
      "explanation": "SPOOLing 利用专门的外围控制机，将低速 I/O 设备上的数据传送到高速磁盘上，或者相反。SPOOLing 的意思是外部设备同时联机操作，也称假脱机输入/输出操作，是操作系统中采用的一项将独占设备改造成共享设备的技术。高速磁盘即外存，选项 A 正确。SPOOLing 技术建立在多道程序设计技术的基础上，在一个时间段内，输入进程、输出进程是可以和运行的作业进程并发执行的，选项 B 正确。SPOOLing 技术实现了将独占设备改造成共享设备的技术，选项 C 正确。设备与输入井/输出井之间数据的传送是由系统实现的，选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_43",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "【2020 统考真题】对于具备设备独立性的系统，下列叙述中，错误的是（）。",
      "options": {
        "A": "可以使用文件名访问物理设备",
        "B": "用户程序使用逻辑设备名访问物理设备",
        "C": "需要建立逻辑设备与物理设备之间的映射关系",
        "D": "更换物理设备后必须修改访问该设备的应用程序"
      },
      "answer": [
        "D"
      ],
      "explanation": "设备可视为特殊文件，选项 A 正确。用户使用逻辑设备名来访问物理文件，有利于设备独立性，选项 B 正确。通过逻辑设备名访问物理设备时，需要建立逻辑设备和物理设备之间的映射关系，选项 C 正确。应用程序按逻辑设备名访问设备，再经驱动程序的处理来控制物理设备，若更换物理设备，则只需更换驱动程序，而无须修改应用程序，选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_44",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "【2022统考真题】下列关于驱动程序的叙述中，不正确的是（）。",
      "options": {
        "A": "驱动程序与 I/O 控制方式无关",
        "B": "初始化设备是由驱动程序控制完成的",
        "C": "进程在执行驱动程序时可能进入阻塞态",
        "D": "读/写设备的操作是由驱动程序控制完成的"
      },
      "answer": [
        "A"
      ],
      "explanation": "厂家在设计一个设备时，通常会为该设备编写驱动程序，主机需要先安装驱动程序，才能使用设备。当一个设备被连接到主机时，驱动程序负责初始化设备（如将设备控制器中的寄存器初始化），选项 B 正确。若采用程序直接控制方式，进程不会被阻塞，进程会处于等待状态；若采用中断控制方式，则驱动程序启动 I/O 操作后，将调出其他进程执行，而当前用户进程被阻塞；若采用 DMA 控制方式，则驱动程序对 DMA 控制器初始化后，便发送“启动 DMA 传送”命令，外设开始传送数据，同时 CPU 执行处理器调度程序，当前用户进程被阻塞，选项 C 正确。设备的读/写操作本质就是在设备控制器和主机之间传送数据，而只有厂家知道设备控制器的内部实现，因此也只有厂家提供的驱动程序能控制设备的读/写操作，选项 D 正确。厂家会根据设备特性，在驱动程序中实现一种合适的 I/O 控制方式，不同的 I/O 控制方式需要不同的驱动程序来实现数据的传输和控制，例如，中断驱动方式需要驱动程序能够响应中断信号，DMA 方式需要驱动程序能够设置 DMA 控制器的寄存器，通道控制方式需要驱动程序能够执行通道指令等，选项 A 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_45",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "【2023 统考真题】下列因素中，设备分配需要考虑的是（）。 I. 设备的类型 II. 设备的访问权限 III. 设备的占用状态 IV. 逻辑设备与物理设备的映射关系",
      "options": {
        "A": "仅 I、II",
        "B": "仅 II、III",
        "C": "仅 III、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "设备的类型决定了设备的固有属性，如独占性、共享性、可虚拟性等，不同类型的设备需要采用不同的分配方式，如独占分配、共享分配、虚拟分配等。设备的访问权限决定了哪些进程可以使用哪些设备，以保证系统的安全性和保密性，通常系统设备只能由系统进程或特权进程访问，用户设备只能由用户进程或授权进程访问。设备的占用状态决定了设备是否可以被分配给请求进程，以及如何处理等待进程，若设备空闲，则通常可以直接分配给请求进程；若设备忙，则需要将请求进程排入设备队列，并按照一定的算法进行调度。逻辑设备与物理设备的映射关系决定了如何通过逻辑地址访问物理地址，以提高系统的灵活性和可扩展性，通常系统会为每个物理设备分配一个逻辑名，并建立一个系统设备表来记录逻辑名与物理名之间的对应关系。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-2-8_46",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.2.8",
      "section_title": "本节试题精选",
      "num": 46,
      "type": "single_choice",
      "question": "【2024 统考真题】当键盘中断服务例程执行结束时，所输入数据的存放位置是（）。",
      "options": {
        "A": "用户缓冲区",
        "B": "CPU 中的通用寄存器",
        "C": "内核缓冲区",
        "D": "键盘控制器的数据寄存器"
      },
      "answer": [
        "C"
      ],
      "explanation": "以 C 语言中 scanf() 函数的执行过程为例，用户请求通过键盘输入数据，当程序执行到 scanf()\n\n时，触发系统调用，CPU切换到内核态，执行系统调用服务例程，系统调用的内核程序进行一些初始化操作，启动外设，同时阻塞该用户进程，直到键盘输入数据，键盘中断服务例程（实际上是驱动程序）将数据从I/O接口（键盘控制器）中的数据寄存器取出并送至内核缓冲区，然后唤醒用户进程，用户进程被唤醒后进入就绪队列，等得到CPU运行后，再将内核缓冲区中的数据送至用户缓冲区，最后进行系统调用的返回。综上所述，键盘中断服务例程执行结束后，所输入数据的存放位置是内核缓冲区，当系统调用结束时，所输入数据才被送至用户缓冲区。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_10",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "在下列有关旋转延迟的叙述中，不正确的是（）。",
      "options": {
        "A": "旋转延迟的大小与磁盘调度算法无关",
        "B": "旋转延迟的大小取决于磁盘空闲空间的分配程序",
        "C": "旋转延迟的大小与文件的物理结构有关",
        "D": "扇区数据的处理时间对旋转延迟的影响较大"
      },
      "answer": [
        "D"
      ],
      "explanation": "磁盘调度算法是为了减少寻道时间。扇区数据的处理时间主要影响传输时间。选项 B、C 均与旋转延迟有关，文件的物理结构与磁盘空间的分配方式相对应，包括连续分配、链接分配和索引分配。连续分配的磁盘中，文件的物理地址连续；而链接分配方式的磁盘中，文件的物理地址不连续，因此与旋转延迟都有关。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_11",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "当设计针对传统机械式硬盘的磁盘调度算法时，主要考虑下列哪种因素对磁盘 I/O 的性能影响最为显著？（）。",
      "options": {
        "A": "移动磁头的延迟",
        "B": "单个磁盘块的读/写时间",
        "C": "磁盘平均旋转延迟",
        "D": "磁盘最大旋转延迟"
      },
      "answer": [
        "A"
      ],
      "explanation": "磁盘存取时间由寻道时间、旋转延迟时间、传输时间决定，寻道时间占的比例最大，磁盘的调度算法主要是优化寻道时间，而旋转延迟时间和传输时间难以从操作系统层面优化。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_12",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "下列算法中，用于磁盘调度的是（）。",
      "options": {
        "A": "时间片轮转调度算法",
        "B": "LRU 算法",
        "C": "最短寻道时间优先算法",
        "D": "优先级高者优先算法"
      },
      "answer": [
        "C"
      ],
      "explanation": "选项 A 和 D 可是进程调度算法。选项 B 可是页面淘汰算法。只有选项 C 是磁盘调度算法。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_13",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "以下算法中，（）可能出现“饥饿”现象。",
      "options": {
        "A": "电梯调度",
        "B": "最短寻道时间优先",
        "C": "循环扫描算法",
        "D": "先来先服务"
      },
      "answer": [
        "B"
      ],
      "explanation": "最短寻道时间优先算法中，当新的距离磁头比较近的磁盘访问请求不断被满足时，可能导致较远的磁盘访问请求被无限延迟，从而导致“饥饿”现象。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_14",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "在以下算法中，（）可能随时改变磁头的运动方向。",
      "options": {
        "A": "电梯调度",
        "B": "先来先服务",
        "C": "循环扫描算法",
        "D": "以上答案都不对"
      },
      "answer": [
        "B"
      ],
      "explanation": "先来先服务算法根据磁盘请求的时间先后进行调度，因此可能随时改变磁头方向。而电梯调度、循环扫描算法均限制磁头的移动方向。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_15",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "假设磁盘有 256 个柱面，4 个磁头（盘面），每个磁道有 8 个扇区（编号均从 0 开始）。文件 A 在磁盘上连续存放。若文件 A 中的一个块存放在 5 号柱面、1 号磁头下的 7 号扇区，则文件 A 的下一块应存放在（）。",
      "options": {
        "A": "5号柱面、2号磁头下的7号扇区",
        "B": "5号柱面、2号磁头下的0号扇区",
        "C": "6号柱面、1号磁头下的7号扇区",
        "D": "6号柱面、1号磁头下的0号扇区"
      },
      "answer": [
        "B"
      ],
      "explanation": "文件 A 采用连续存放方式，按照磁盘的地址结构（柱面号，磁头号，扇区号），文件 A 的下\n\n一块应存放在同一个柱面的同一个磁道的下一个扇区中，7号扇区已是本磁道的最后一个扇区，因此应存放在同一个柱面的下一个磁头的0号扇面，即5号柱面、2号磁头下的0号扇区。由此可见，文件A的数据是连续存储在磁盘的一组或相邻几组同心圆中的。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_16",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "假设磁盘有 100 个柱面，每个柱面上有 8 个磁道，每个磁道有 8 个扇区。文件 A 含有 6400 个逻辑记录，逻辑记录大小与扇区大小一致，该文件以顺序结构的形式存放在磁盘上。文件的第 0 个逻辑记录存放在磁盘地址（0 号柱面、0 号盘面、0 号扇区）中，则磁盘地址（78 号柱面、6 号盘面、6 号扇区）中存放了该文件的第（）个逻辑记录。",
      "options": {
        "A": "5045",
        "B": "5046",
        "C": "5047",
        "D": "5048"
      },
      "answer": [
        "B"
      ],
      "explanation": "每个柱面上有 8 个磁道（表示有 8 个磁头），每个磁道有 8 个扇区，因此每个柱面有 $8 \\times 8 = 64$ 个扇区。由题意可知，柱面号、盘面号、扇区号和逻辑记录编号都是从 0 开始的，因此 78 号柱面的 6 号磁道的 6 号扇区存放的是文件的第 $78 \\times 64 + 6 \\times 8 + 6 = 5046$ 个逻辑记录。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_17",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "已知某磁盘的平均转速为 r 秒/转，平均寻道时间为 T 秒，每个磁道可以存储的字节数为 N，现向该磁盘读/写 b 字节的数据，采用随机寻道的方法，每道的所有扇区组成一个簇，其平均访问时间是（）。",
      "options": {
        "A": "$(r + T)b/N$",
        "B": "b/NT",
        "C": "$(b/N + T)r$",
        "D": "$bT/N + r$"
      },
      "answer": [
        "A"
      ],
      "explanation": "将每道的所有扇区组成一个簇，意味着可以将一个磁道的所有存储空间组织成一块数据组，这样有利于提高存储速度。读/写磁盘时，磁头首先找到磁道，称为寻道，然后才可以将信息从磁道里读出或写入。读/写完一个磁道后，磁头会继续寻找下一个磁道，完成剩余的工作，所以在随机寻道的情况下，读/写一个磁道的时间要包括寻道时间和读/写磁道时间，即 $T + r$ 秒。因为总的数据量是 b 字节，它要占用的磁道数为 b/N 个，所以总平均读/写时间为 $(r + T)b/N$ 秒。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_18",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "设磁盘的转速为 3000 转/分，盘面划分为 10 个扇区，则读取一个扇区的时间为（）。",
      "options": {
        "A": "20ms",
        "B": "5ms",
        "C": "2ms",
        "D": "1ms"
      },
      "answer": [
        "C"
      ],
      "explanation": "访问每条磁道的时间为 $60 / 3000\\mathrm{s} = 0.02\\mathrm{s} = 20\\mathrm{ms}$ ，即磁盘旋转一圈的时间为 $20\\mathrm{ms}$ ，每个盘面10个扇区，因此读取一个扇区的时间为 $20\\mathrm{ms} / 10 = 2\\mathrm{ms}$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_19",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "一个磁盘的转速为 7200 转/分，每个磁道有 160 个扇区，每扇区有 512B，那么理想情况下，其数据传输率为（）。",
      "options": {
        "A": "$7200 \\times 160KB/s$",
        "B": "7200KB/s",
        "C": "9600KB/s",
        "D": "19200KB/s"
      },
      "answer": [
        "C"
      ],
      "explanation": "磁盘的转速为 7200 转/分 = 120 转/秒，转一圈经过 160 个扇区，每个扇区为 512B，所以数据传输率 = $120 \\times 160 \\times 512 / 1024KB/s = 9600KB/s$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_20",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "设一个磁道访问请求序列为 55, 58, 39, 18, 90, 160, 150, 38, 184，磁头的起始位置为 100，若采用 SSTF（最短寻道时间优先）算法，则磁头移动（）个磁道。",
      "options": {
        "A": "55",
        "B": "184",
        "C": "200",
        "D": "248"
      },
      "answer": [
        "D"
      ],
      "explanation": "对于 SSTF 算法，寻道序列应为 100, 90, 58, 55, 39, 38, 18, 150, 160, 184；移动磁道次数分别为 10, 32, 3, 16, 1, 20, 132, 10, 24，所以磁头移动总次数为 248。另外也可以画出草图来解答，从 100 寻道到 18 需要 82 次，然后加上从 18 到 184 需要的 $184 - 18 = 166$ 次，共移动 $166 + 82 = 248$ 次。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_21",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "若当前磁头在 67 号磁道，依次有 4 个磁道号请求为 35, 77, 55, 121，则当采用（）调度算法时，下一次磁头才可能到达 55 号磁道。",
      "options": {
        "A": "循环扫描（向大磁道号方向移动）",
        "B": "最短寻道时间优先",
        "C": "电梯调度（向小磁道号方向移动）",
        "D": "先来先服务"
      },
      "answer": [
        "C"
      ],
      "explanation": "当磁头位于 67 号磁道时，各算法的下一访问目标如下：先来先服务算法按请求顺序处理，下一个是 35 号磁道；最短寻道时间优先算法选择距离最近的 77 号磁道；循环扫描算法若规定向大磁道号方向移动，则磁头继续向高编号端扫描，下一个是 77 号磁道；而电梯调度算法若当前向小磁道号方向移动，则在 67 号磁道之后依次服务 55、35，因此下一次到达 55 号磁道，选项 C 正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_22",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "某磁盘有 1000 个磁道，编号从 0 到 999，当前磁头正在 734 号磁道，且向磁道号增大的方向移动。磁道请求依次为 164,845,911,165,788,432,396,700,25，若分别用 SCAN 算法（非 LOOK 调度）和 SSTF 算法完成上述请求后，磁头移过的磁道数分别是（）。",
      "options": {
        "A": "1865, 1543",
        "B": "1688, 1738",
        "C": "1239, 1131",
        "D": "1239, 1738"
      },
      "answer": [
        "C"
      ],
      "explanation": "采用 SCAN 算法时，依次访问的磁道是 788, 845, 911, 999, 700, 432, 396, 165, 164, 25，磁头移动的距离是 $(999 - 734) + (999 - 25) = 1239$ 。采用 SSTF 算法时，依次访问的磁道是 700, 788, 845, 911, 432, 396, 165, 164, 25，磁头移动的距离是 $(734 - 700) + (911 - 700) + (911 - 25) = 1131$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_23",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "假定磁带的记录密度为 400 字符/英寸（1in = 0.0254m），每条逻辑记录为 80 字符，块间隙（每条逻辑记录之间的间隙）为 0.4 英寸，现有 3000 个逻辑记录需要存储，存储这些记录需要长度为（）的磁带，磁带利用率是（）。",
      "options": {
        "A": "1500 英寸，33.3%",
        "B": "1500 英寸，43.5%",
        "C": "1800 英寸，33.3%",
        "D": "1800 英寸，43.5%"
      },
      "answer": [
        "C"
      ],
      "explanation": "一个逻辑记录所占的磁带长度为 80/400 = 0.2 英寸，因此存储 3000 条逻辑记录需要的磁带长度为 $(0.2 + 0.4) \\times 3000 = 1800$ 英寸，利用率为 $0.2/(0.2 + 0.4) = 33.3\\%$ .",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_24",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "下列关于固态硬盘（SSD）的说法中，错误的是（）。",
      "options": {
        "A": "基于闪存的存储技术",
        "B": "随机读/写性能明显高于磁盘",
        "C": "随机写比较慢",
        "D": "不易磨损"
      },
      "answer": [
        "D"
      ],
      "explanation": "固态硬盘基于闪存技术，没有机械部件，随机读/写不需要机械操作，因此速度明显高于磁盘，选项 A 和 B 正确。选项 C 已在考点讲解中解释过。SSD 的缺点是容易磨损，选项 D 错误。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_25",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "下列关于固态硬盘的说法中，正确的是（）。",
      "options": {
        "A": "固态硬盘的写速度比较慢，性能甚至弱于常规硬盘",
        "B": "相比常规硬盘，固态硬盘优势主要体现在连续存取的速度",
        "C": "静态磨损均衡算法通常比动态磨损均衡算法的表现更优秀",
        "D": "写入时，静态磨损均衡算法每次选择使用长期存放数据而很少擦写的存储块"
      },
      "answer": [
        "C"
      ],
      "explanation": "SSD 基于闪存技术，无机械部件，随机读/写性能远优于机械硬盘；而机械硬盘因需寻道，在连续存取上相对占优，故选项 A、B 错误。动态磨损均衡仅在写入时选择擦写次数少的空块，而静态磨损均衡还会在空闲期间将长期未更新的“冷数据”迁移到高磨损块，使各存储块的擦写次数更均衡，从而延长SSD寿命，选项C正确。选项D错误地认为静态磨损均衡是在“写入时选择存放老数据的块”，实际上该机制是在后台空闲时主动迁移冷数据，而非发生在写入时刻。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_26",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "下列关于固态硬盘的说法中，错误的是（）。",
      "options": {
        "A": "常规硬盘需要采用磁盘调度算法，而固态硬盘不需要",
        "B": "固态硬盘需要进行磨损均衡，而常规硬盘不需要",
        "C": "反复写同一个块会减少固态硬盘的寿命",
        "D": "磨损均衡机制的目的是加快固态硬盘读/写速度"
      },
      "answer": [
        "D"
      ],
      "explanation": "磨损均衡机制的目的是延长固态硬盘的寿命，而不是加快固态硬盘读/写速度。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_27",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2009 统考真题】假设磁头当前位于第 105 道，正在向磁道序号增加的方向移动。现有一个磁道访问请求序列为 35, 45, 12, 68, 110, 180, 170, 195，采用 SCAN 调度（电梯调度）算法得到的磁道访问序列是（）。",
      "options": {
        "A": "110, 170, 180, 195, 68, 45, 35, 12",
        "B": "110, 68, 45, 35, 12, 170, 180, 195",
        "C": "110, 170, 180, 195, 12, 35, 45, 68",
        "D": "12, 35, 45, 68, 110, 170, 180, 195"
      },
      "answer": [
        "A"
      ],
      "explanation": "SCAN 算法的原理类似于电梯。首先，当磁头从 105 道向序号增加的方向移动时，便会按照从小到大的顺序服务所有大于 105 的磁道号（110, 170, 180, 195）；往回移动时又会按照从大到小的顺序进行服务（68, 45, 35, 12），结果如下图所示。\n\n![](images/2c3b60faffd52f8a5f284db0867ce2dcaefe54784dad7a91bde9faa1fb7ac782.jpg)\n\n<details>\n<summary>line</summary>\n\n| SCAN | Value |\n|------|-------|\n| 0    | 0     |\n| 12   | 12    |\n| 35   | 35    |\n| 45   | 45    |\n| 68   | 68    |\n| 105  | 105   |\n| 110  | 110   |\n| 170  | 170   |\n| 180  | 180   |\n| 195  | 195   |\n</details>",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_28",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2012 统考真题】下列选项中，不能改善磁盘设备 I/O 性能的是（）。",
      "options": {
        "A": "重排 I/O 请求次序",
        "B": "在一个磁盘上设置多个分区",
        "C": "预读和滞后写",
        "D": "优化文件物理块的分布"
      },
      "answer": [
        "B"
      ],
      "explanation": "对于选项 A，重排 I/O 请求次序也就是进行 I/O 调度，使进程之间公平地共享磁盘访问，减少 I/O 完成所需要的平均等待时间。对于选项 C，缓冲区结合预读和滞后写技术对于具有重复性及阵发性的 I/O 进程改善磁盘 I/O 性能很有帮助。对于选项 D，优化文件物理块的分布可以减少寻道时间与延迟时间，从而提高磁盘性能。在一个磁盘上设置多个分区与改善设备 I/O 性能并无多大联系，相反还会带来处理的复杂性，降低利用率。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_29",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2015 统考真题】某硬盘有 200 个磁道（最外侧磁道号为 0），磁道访问请求序列为 130, 42, 180, 15, 199，当前磁头位于第 58 号磁道并从外侧向内侧移动。按照 SCAN 调度方法处理完上述请求后，磁头移过的磁道数是（）。",
      "options": {
        "A": "208",
        "B": "287",
        "C": "325",
        "D": "382"
      },
      "answer": [
        "C"
      ],
      "explanation": "SCAN 算法就是电梯调度算法。顾名思义，若开始时磁头向外移动，就一直要到最外侧，然后返回向内侧移动，就像电梯若往下，则一直要下到底层才会再上升一样。当前磁头位于 58 号并从外侧向内侧移动，先依次访问 130、180 和 199，然后返回向外侧移动，依次访问 42 和 15，因此磁头移过的磁道数是 $(199-58)+(199-15)=325$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_30",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2017统考真题】下列选项中，磁盘逻辑格式化程序所做的工作是（）。 I. 对磁盘进行分区 II. 建立文件系统的根目录 III. 确定磁盘扇区校验码所占位数 IV. 对保存空闲磁盘块信息的数据结构进行初始化",
      "options": {
        "A": "仅 II",
        "B": "仅 II、IV",
        "C": "仅 III、IV",
        "D": "仅 I、II、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "新磁盘是空白盘，必须分成扇区以便磁盘控制器能进行读/写操作，这个过程称为低级格式化（或物理格式化）。低级格式化为每个扇区使用特别的数据结构，说法III错误。为了使用磁盘存储文件，操作系统还需要将自己的数据结构记录在磁盘上。这分为两步。第一步是将磁盘分为由一个或多个柱面组成的分区，每个分区可以作为一个独立的磁盘，说法I错误。在分区之后，第二步是逻辑格式化（创建文件系统）。在这一步，操作系统将初始的文件系统数据结构存储到磁盘上。这些数据结构包括空闲和已分配的空间及一个初始为空的目录，说法II、IV正确。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_31",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2018 统考真题】下列优化方法中，可以提高文件访问速度的是（）。 I. 提前读 II. 为文件分配连续的簇 III. 延迟写 IV. 采用磁盘高速缓存",
      "options": {
        "A": "仅 I、II",
        "B": "仅 II、III",
        "C": "仅 I、III、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "说法 II 和 IV 显然均能提高文件访问速度。对于说法 I，提前读是指在读当前盘块时，将下一个盘块提前读入缓冲区，以便需要时直接从缓冲区中读取，提高了文件的访问速度。对于说法 III，延迟写是指先将数据写入缓冲区，并置上“延迟写”标志，以备不久之后访问，当缓冲区需要再次被分配出去时，才将缓冲区数据写入磁盘，减少了访问磁盘的次数，提高了文件的访问速度。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_32",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2018 统考真题】系统总是访问磁盘的某个磁道而不响应对其他磁道的访问请求，这种现象称为磁头臂黏着。下列磁盘调度算法中，不会导致磁头臂黏着的是（）。",
      "options": {
        "A": "先来先服务（FCFS）",
        "B": "最短寻道时间优先（SSTF）",
        "C": "扫描算法（SCAN）",
        "D": "循环扫描算法（C-SCAN）"
      },
      "answer": [
        "A"
      ],
      "explanation": "当系统中总是持续存在某个磁道的访问请求时，均持续满足最短寻道时间优先、扫描算法和循环扫描算法的访问条件，会一直服务该访问请求，尽管系统中还存在其他磁道的访问请求，但却得不到响应。而先来先服务按照请求次序进行调度，比较公平。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_33",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2021统考真题】某系统中磁盘的磁道数为200（0\\~199），磁头当前在184号磁道上。 用户进程提出的磁盘访问请求对应的磁道号依次为 184, 187, 176, 182, 199。若采用最短寻道时间优先（SSTF）算法完成磁盘访问，则磁头移动的距离（磁道数）是（）。",
      "options": {
        "A": "37",
        "B": "38",
        "C": "41",
        "D": "42"
      },
      "answer": [
        "C"
      ],
      "explanation": "最短寻道时间优先算法总是选择调度与当前磁头所在磁道距离最近的磁道。可以得出访问序列 184, 182, 187, 176, 199，从而求出移动距离之和是 $0 + 2 + 5 + 11 + 23 = 41$ 。",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_34",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2024 统考真题】某个磁盘的磁道数为 400（磁道号为 0～399），采用循环扫描算法（C-SCAN）进行磁盘调度，完成对 200 号磁道的请求后，磁头向磁道号减小的方向移动。若还有 7 个磁盘请求，对应的磁道号分别为 300, 120, 110, 0, 160, 210, 399，则完成上述磁盘访问请求后磁头移动的距离是（）。",
      "options": {
        "A": "599",
        "B": "619",
        "C": "788",
        "D": "799"
      },
      "answer": [
        "C"
      ],
      "explanation": "采用 C-SCAN 算法进行磁盘调度，完成 200 号磁道的请求后，磁头向磁道号减小的方向移动，依次处理 160, 120, 110, 0 号磁道的请求；然后，磁头向磁道号增大的方向快速移动至 399 号磁道，在快速移动的过程中不处理任何请求；完成 399 号磁道的请求后，依次处理 300, 210 号磁道的请求，所以磁头移动的总距离是 $(200 - 0) + (399 - 0) + (399 - 210) = 788$ 。调度过程如下图所示。\n\n![](images/1c37eed4ea7a31ce88696dddc69adafa06cee9955fe5f79fc2c328596337d456.jpg)\n\n<details>\n<summary>line</summary>\n\n| 磁道 | 数值 |\n| ---- | ---- |\n| 200  | 200  |\n| -200 | -200 |\n</details>",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "操作系统_5-3-6_35",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "输入输出管理",
      "section": "5.3.6",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "【2025 统考真题】在下列选项中，文件系统需要为温彻斯特硬盘和固态硬盘都提供的功能是（）。",
      "options": {
        "A": "划分扇区",
        "B": "确定盘块大小",
        "C": "降低寻道时间",
        "D": "实现均衡磨损"
      },
      "answer": [
        "B"
      ],
      "explanation": "无论是温彻斯特硬盘（机械磁盘）还是固态硬盘，文件系统均以固定大小的逻辑盘块为单位组织和管理存储空间，因此确定盘块大小是两者都必须提供的基础功能。相比之下，“划分扇区”是机械硬盘固件或硬件层面的操作，文件系统无须参与，固态硬盘无传统扇区结构；“降低寻道时间”仅针对存在磁头移动的机械硬盘，固态硬盘无机械部件，无寻道问题；“均衡磨损”则是固态硬盘为延长闪存寿命所特有的机制，机械硬盘无须考虑。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/操作系统/chapters/ch05-第5章-输入输出管理.md"
    },
    {
      "id": "数据结构_1-1-3_03",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.1.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列选项中，属于逻辑结构的是（）。",
      "options": {
        "A": "顺序表",
        "B": "哈希表",
        "C": "有序表",
        "D": "单链表"
      },
      "answer": [
        "C"
      ],
      "explanation": "顺序表、哈希表和单链表是三种不同的数据结构，既描述逻辑结构，又描述存储结构和数据运算。而有序表是指关键字有序的线性表，仅描述元素之间的逻辑关系，它既可链式存储，又可顺序存储，所以属于逻辑结构。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-1-3_04",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.1.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列关于数据结构的说法中，正确的是（）。",
      "options": {
        "A": "数据的逻辑结构独立于其存储结构",
        "B": "数据的存储结构独立于其逻辑结构",
        "C": "数据的逻辑结构唯一决定其存储结构",
        "D": "数据结构仅由其逻辑结构和存储结构决定"
      },
      "answer": [
        "A"
      ],
      "explanation": "数据的逻辑结构是从面向实际问题的角度出发的，只采用抽象表达方式，独立于存储结构，数据的存储方式有多种不同的选择；而数据的存储结构是逻辑结构在计算机上的映射，它不能独立于逻辑结构而存在。数据结构包括三个要素，缺一不可。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-1-3_05",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.1.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "在存储数据时，通常不仅要存储各数据元素的值，还要存储（）。",
      "options": {
        "A": "数据的操作方法",
        "B": "数据元素的类型",
        "C": "数据元素之间的关系",
        "D": "数据的存取方法"
      },
      "answer": [
        "C"
      ],
      "explanation": "在存储数据时，不仅要存储数据元素的值，而且要存储数据元素之间的关系。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_03",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "某算法的时间复杂度为 $O(n^{2})$ ，则表示该算法的（）。",
      "options": {
        "A": "问题规模是 $n^2$",
        "B": "执行时间等于 $n^2$",
        "C": "执行时间与 $n^{2}$ 成正比",
        "D": "问题规模与 $n^2$ 成正比"
      },
      "answer": [
        "C"
      ],
      "explanation": "时间复杂度为 $O(n^{2})$ ，说明算法的时间复杂度 $T(n)$ 满足 $T(n) \\leqslant cn^{2}$ （其中 c 为比例常数），即 $T(n) = O(n^{2})$ ，时间复杂度 $T(n)$ 是问题规模 n 的函数，其问题规模仍然是 n 而不是 $n^{2}$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_04",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "若某算法的空间复杂度为 $O(1)$ ，则表示该算法（）。",
      "options": {
        "A": "不需要任何辅助空间",
        "B": "所需辅助空间大小与问题规模 $n$ 无关",
        "C": "不需要任何空间",
        "D": "所需空间大小与问题规模 $n$ 无关"
      },
      "answer": [
        "B"
      ],
      "explanation": "算法的空间复杂度为 $O(1)$ ，表示执行该算法所需的辅助空间大小相比输入数据的规模来说是一个常量，而不表示该算法执行时不需要任何空间或辅助空间。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_05",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列关于时间复杂度的函数中，时间复杂度最小的是（）。",
      "options": {
        "A": "$T_{1}(n)=n\\log_{2}n+5000n$",
        "B": "$T_{2}(n)=n^{2}-8000n$",
        "C": "$T_{3}(n)=n\\log_{2}n-6000n$",
        "D": "$T_{4}(n) = 20000\\log_{2}n$"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项 A 的最高阶是 $n \\log_{2} n$ ，时间复杂度是 $O(n \\log_{2} n)$ 。选项 B 的最高阶是 $n^{2}$ ，时间复杂度是 $O(n^{2})$ 。选项 C 的最高阶是 $n \\log_{2} n$ ，时间复杂度是 $O(n \\log_{2} n)$ 。选项 D 的最高阶是 $\\log_{2} n$ ，时间复杂度是 $O(\\log_{2} n)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_06",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列算法的时间复杂度为（）。 void fun(int n) { ```txt int i=1; while (i<=n) i=i*2; } ```",
      "options": {
        "A": "$O(n)$",
        "B": "$O(n^{2})$",
        "C": "$O(n\\log_{2}n)$",
        "D": "$O(\\log_{2}n)$"
      },
      "answer": [
        "D"
      ],
      "explanation": "找出基本运算 $i=i*2$ ，设执行次数为 t， $2^{t}\\leqslant n$ ，即 $t\\leqslant\\log_{2}n$ ，故时间复杂度 $T(n)=O(\\log_{2}n)$ 。\n\n更直观的方法：计算基本运算 $i=i*2$ 的执行次数（每执行一次，i 乘以 2），其中判断条件可以理解为 $2^{t}=n$ ，即 $t=\\log_{2}n$ ，则 $T(n)=O(\\log_{2}n)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_07",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列算法的时间复杂度为（）。 ```txt void fun(int n) { int i = 0; while (i * i * i <= n) i++; } ```",
      "options": {
        "A": "$O(n)$",
        "B": "$O(n \\log_{2} n)$",
        "C": "$O(\\sqrt[3]{n})$",
        "D": "$O(\\sqrt{n})$"
      },
      "answer": [
        "C"
      ],
      "explanation": "基本运算为 i++，设执行次数为 t，有 $t \\cdot t \\cdot t \\leqslant n$ ，即 $t^{3} \\leqslant n$ 。因此有 $t \\leqslant \\sqrt[3]{n}$ ，则 $T(n) = O(\\sqrt[3]{n})$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_08",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "某个程序段如下: ```javascript for (i=n-1;i>1;i--) for (j=1;j<i;j++) if (A[j]>A[j+1]) A[j]与A[j+1]对换; ``` 其中 $n$ 为正整数，则最后一行语句的频度在最坏情况下是（）。",
      "options": {
        "A": "$O(n)$",
        "B": "$O(n\\log_{2}n)$",
        "C": "$O(n^{3})$",
        "D": "$O(n^{2})$"
      },
      "answer": [
        "D"
      ],
      "explanation": "这是冒泡排序的算法代码，考查最坏情况下的元素交换次数（若觉得理解起来有困难，则可在学完第8章后再回顾）。当所有相邻元素都为逆序时，则最后一行的语句每次都会执行。此时，\n\n$$\nT (n) = \\sum_ {i = 2} ^ {n - 1} \\sum_ {j = 1} ^ {i - 1} 1 = \\sum_ {i = 2} ^ {n - 1} i - 1 = (n - 2) (n - 1) / 2 = O \\left(n ^ {2}\\right)\n$$\n\n所以在最坏情况下该语句的频度是 $O(n^{2})$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_09",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列程序段的时间复杂度为（）。 ```awk if (n>=0) { for (int i=0;i<n;i++) for (int j=0;j<n;j++) printf(\"输入数据大于或等于零\\n\") } else{ for (int j=0;j<n;j++) printf(\"输入数据小于零\\n\") } ```",
      "options": {
        "A": "$O(n^{2})$",
        "B": "$O(n)$",
        "C": "$O(1)$",
        "D": "$O(n\\log_{2}n)$"
      },
      "answer": [
        "A"
      ],
      "explanation": "当程序段中有条件判断语句时，取分支路径上的最大时间复杂度。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_10",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列算法中加下划线的语句的执行次数为（）。 ```matlab int m=0,i,j; for (i=1;i<=n;i++) for (j=1;j<=2*i;j++) m++; ```",
      "options": {
        "A": "$n(n+1)$",
        "B": "n",
        "C": "$n+1$",
        "D": "$n^{2}$"
      },
      "answer": [
        "A"
      ],
      "explanation": "m++语句的执行次数为\n\n$$\n\\sum_ {i = 1} ^ {n} \\sum_ {j = 1} ^ {2 i} 1 = \\sum_ {i = 1} ^ {n} 2 i = 2 \\sum_ {i = 1} ^ {n} i = n (n + 1)\n$$",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_11",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列函数代码的时间复杂度是（）。 ```c int Func(int n){ if(n==1) return 1; else return 2*Func(n/2)+n; } ```",
      "options": {
        "A": "$O(n)$",
        "B": "$O(n\\log_{2}n)$",
        "C": "$O(\\log_{2}n)$",
        "D": "$O(n^{2})$"
      },
      "answer": [
        "C"
      ],
      "explanation": "本题求的是递归调用的时间复杂度，递归调用可视为多重循环，每次递归执行的基本语句是 if $(n==1)$ return 1；，因此可以认为单层循环的执行次数为 1，设递归次数为 $t, 2^{t} \\leqslant n$ ，即 $t \\leqslant \\log_{2} n$ ，共执行了 $\\log_{2} n$ 次递归调用，总执行次数 $T = \\log_{2} n \\times 1$ ，所以时间复杂度为 $O(\\log_{2} n)$ 。\n\n<table><tr><td>循环变量 i</td><td>单层循环语句</td><td>单层循环执行次数</td></tr><tr><td>n</td><td>if (n==1) return 1;</td><td>1</td></tr><tr><td>n/2</td><td>if (n==1) return 1;</td><td>1</td></tr><tr><td>n/4</td><td>if (n==1) return 1;</td><td>1</td></tr><tr><td>...</td><td>...</td><td>...</td></tr><tr><td>1</td><td>if (n==1) return 1;</td><td>1</td></tr></table>",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_12",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2011 统考真题】设 n 是描述问题规模的非负整数，下列程序段的时间复杂度是（）。 ```javascript x=2; while (x<n/2) x=2*x; ```",
      "options": {
        "A": "$O(\\log_{2}n)$",
        "B": "$O(n)$",
        "C": "$O(n \\log_{2} n)$",
        "D": "$O(n^{2})$"
      },
      "answer": [
        "A"
      ],
      "explanation": "基本运算（执行频率最高的语句）为 $x=2^{*}x$ ，每执行一次，x 乘以 2，设执行次数为 t，则有 $2^{t+1}<n/2$ ，所以 $t<\\log_{2}(n/2)-1=\\log_{2}n-2$ ，得 $T(n)=O(\\log_{2}n)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_13",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2012 统考真题】求整数 $n(n \\geqslant 0)$ 的阶乘的算法如下，其时间复杂度是（）。 ```txt int fact(int n) { if (n <= 1) return 1; return n * fact(n - 1); } ```",
      "options": {
        "A": "$O(\\log_{2}n)$",
        "B": "$O(n)$",
        "C": "$O(n \\log_{2} n)$",
        "D": "$O(n^{2})$"
      },
      "answer": [
        "B"
      ],
      "explanation": "本题求的是递归调用的时间复杂度，递归调用可视为多重循环，每次递归执行的基本语句是if(n<=1) return 1；，因此，可以认为单层循环的执行次数为1，共执行了n次递归调用，总执行次数 $T=1+1+\\cdots+1=n$ ，所以时间复杂度为 $O(n)$ 。\n\n<table><tr><td>循环变量i</td><td>单层循环语句</td><td>单层循环执行次数</td></tr><tr><td>n</td><td>if (n&lt;=1) return 1;</td><td>1</td></tr><tr><td>n-1</td><td>if (n&lt;=1) return 1;</td><td>1</td></tr><tr><td>n-2</td><td>if (n&lt;=1) return 1;</td><td>1</td></tr><tr><td>...</td><td>...</td><td>...</td></tr><tr><td>1</td><td>if (n&lt;=1) return 1;</td><td>1</td></tr></table>",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_14",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2014 统考真题】下列程序段的时间复杂度是（）。 ```txt count=0; for (k=1; k<=n; k*=2) for (j=1; j<=n; j++) count++; ```",
      "options": {
        "A": "$O(\\log_{2}n)$",
        "B": "$O(n)$",
        "C": "$O(n\\log_{2}n)$",
        "D": "$O(n^{2})$"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于单层循环如 for(j=1;j<=n;j++) count++;，可以直接数出执行次数为 n，因此可将多层循环转换成多个并列的单层循环，且列出每个单层循环如下（假设 t 为循环变量的幂次）：\n\n<table><tr><td>循环变量 k</td><td>单层循环语句</td><td>单层循环执行次数</td></tr><tr><td>1</td><td>for (j=1;j&lt;=n;j++)</td><td>n</td></tr><tr><td> $2^1$ </td><td>for (j=1;j&lt;=n;j++)</td><td>n</td></tr><tr><td> $2^2$ </td><td>for (j=1;j&lt;=n;j++)</td><td>n</td></tr><tr><td>...</td><td>...</td><td>...</td></tr><tr><td> $2'$ </td><td>for (j=1;j&lt;=n;j++)</td><td>n</td></tr></table>\n\n进入外层循环的条件是 $k \\leqslant n$ ，当循环结束时，循环变量的幂次 t 满足 $2^{t} \\leqslant n < 2^{t+1}$ ，即 $t \\leqslant \\log_{2} n$ 。所以总执行次数 $T = n(t + 1) = n (\\log_{2} n + 1)$ ，时间复杂度为 $O(n \\log_{2} n)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_15",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2017 统考真题】下列函数的时间复杂度是（）。 ```c int func(int n) { int i=0, sum=0; while (sum<n) sum += ++i; return i; } ```",
      "options": {
        "A": "$O(\\log_{2}n)$",
        "B": "$O(n^{1/2})$",
        "C": "$O(n)$",
        "D": "$O(n\\log_2n)$"
      },
      "answer": [
        "B"
      ],
      "explanation": "基本运算为 $sum+=++i$ ，等价于 “++i； $sum=sum+i$ ”，每执行一次，i 都自增 1。当 i=1 时， $sum=0+1$ ；当 i=2 时， $sum=0+1+2$ ；当 i=3 时， $sum=0+1+2+3$ ，以此类推，得出 $sum=0+1+2+3+\\cdots+i=(1+i)\\times i/2$ ，可知循环次数 t 满足 $(1+t)\\cdot t/2<n$ ，故时间复杂度为 $O(n^{1/2})$ 。\n\n# 注意\n\n统考真题中常将 $\\log_{2}$ 书写为 $\\log$ ，此时默认底数为 2。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_16",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2019 统考真题】设 $n$ 是描述问题规模的非负整数，下列程序段的时间复杂度是（）。 ```javascript x=0; while (n>=(x+1)*(x+1)) x=x+1; ```",
      "options": {
        "A": "$O(\\log_{2}n)$",
        "B": "$O(n^{1/2})$",
        "C": "$O(n)$",
        "D": "$O(n^{2})$"
      },
      "answer": [
        "B"
      ],
      "explanation": "假设第 k 次循环终止，则第 k 次执行时， $(x+1)^{2}>n$ ，x 的初始值为 0，第 k 次判断时，x=k-1，即 $k^{2}>n,\\quad k>\\sqrt{n}$ ，因此该程序段的时间复杂度为 $O(n^{1/2})$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_17",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2022 统考真题】下列程序段的时间复杂度是（）。 ```txt int sum=0; for(int i=1;i<n;i*=2) for(int j=0;j<i;j++) sum++; ```",
      "options": {
        "A": "$O(\\log_{2}n)$",
        "B": "$O(n)$",
        "C": "$O(n\\log_{2}n)$",
        "D": "$O(n^{2})$"
      },
      "answer": [
        "B"
      ],
      "explanation": "对于单层循环如 for(j=0;j<=i;j++) sum++;，可以直接数出执行次数为 i，因此可将多\n\n层循环转换成多个并列的单层循环，且列出每个单层循环如下（假设 t 为循环变量的幂次）：\n\n<table><tr><td>循环变量 i</td><td>单层循环语句</td><td>单层循环执行次数</td></tr><tr><td>1</td><td>for (j=0; j&lt;1; j++)</td><td>1</td></tr><tr><td> $2^1$ </td><td>for (j=0; j&lt;2; j++)</td><td>2</td></tr><tr><td> $2^2$ </td><td>for (j=0; j&lt; $2^2$ ; j++)</td><td>4</td></tr><tr><td>...</td><td>...</td><td>...</td></tr><tr><td> $2^t$ </td><td>for (j=0; j&lt; $2^t$ ; j++)</td><td> $2^t$ </td></tr></table>\n\n进入外层循环的条件是 i < n，当循环结束时，循环变量的幂次 t 满足 $2^{t} < n \\leqslant 2^{t+1}$ 。总执行次数 $T = 1 + 2^{1} + 2^{2} + \\cdots + 2^{t} = 2^{t+1} - 1$ ，即 $n - 1 \\leqslant T$ 且 T < 2n - 1，所以时间复杂度为 $O(n)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_1-2-3_18",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "绪论",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2025 统考真题】下列程序段的时间复杂度是（）。 ```javascript int count=0,i,j; for (i=1;i*i<=n;i++) for (j=1;j<=i;j++) count++; ```",
      "options": {
        "A": "$O(\\log_{2}n)$",
        "B": "$O(n)$",
        "C": "$O(n \\log_{2} n)$",
        "D": "$O(n^{2})$"
      },
      "answer": [
        "B"
      ],
      "explanation": "对于单层循环 for $(j=1; j<=i; j++)$ count++;，其每趟的执行次数为 i （j 从 1 到 i）。外层循环的条件为 $i^{2} \\leqslant n$ ，即 $i \\leqslant \\sqrt{n}$ 。因此，可将多层循环转换为多个并列的单层循环，列出每个单层循环如下。总执行次数 $T(n) = 1 + 2 + \\cdots + \\left| \\sqrt{n} \\right| = n / 2 + \\left| \\sqrt{n} \\right| / 2$ ，时间复杂度为 $O(n)$ 。\n\n<table><tr><td>循环变量 i</td><td>单层循环语句</td><td>单层循环执行次数</td></tr><tr><td>1</td><td>for (j=1;j&lt;=i;j++)</td><td>1</td></tr><tr><td>2</td><td>for (j=1;j&lt;=i;j++)</td><td>2</td></tr><tr><td>...</td><td>for (j=1;j&lt;=i;j++)</td><td>...</td></tr><tr><td> $\\left\\lfloor \\sqrt{n} \\right\\rfloor$ </td><td>for (j=1;j&lt;=i;j++)</td><td> $\\left\\lfloor \\sqrt{n} \\right\\rfloor$ </td></tr></table>\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch01-第1章-绪论.md"
    },
    {
      "id": "数据结构_2-3-7_21",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "对于一个带头结点的循环单链表 L，判断该表为空表的条件是（）。",
      "options": {
        "A": "头结点的指针域为空",
        "B": "L 的值为 NULL",
        "C": "头结点的指针域与 L 的值相等",
        "D": "头结点的指针域与 L 的地址相等"
      },
      "answer": [
        "C"
      ],
      "explanation": "带头结点的循环单链表 L 为空表时，满足 L->next==L，即头结点的指针域与 L 的值相等，而不是头结点的指针域与 L 的地址相等。注意，带头结点的循环单链表中不存在空指针。",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_23",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "一个链表最常用的操作是在末尾插入结点和删除结点，则选用（）最节省时间。",
      "options": {
        "A": "带头结点的循环双链表",
        "C": "带尾指针的循环单链表",
        "B": "循环单链表",
        "D": "单链表"
      },
      "answer": [
        "A"
      ],
      "explanation": "在链表的末尾插入和删除一个结点时，需要修改其相邻结点的指针域。而寻找尾结点及尾结点的前驱结点时，只有带头结点的循环双链表所需要的时间最少。",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_24",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "设对 $n (n > 1)$ 个元素的线性表的运算只有4种：删除第一个元素；删除最后一个元素；在第一个元素之前插入新元素；在最后一个元素之后插入新元素，则最好使用（）。",
      "options": {
        "A": "只有尾结点指针没有头结点指针的循环单链表",
        "B": "只有尾结点指针没有头结点指针的非循环双链表",
        "C": "只有头结点指针没有尾结点指针的循环双链表",
        "D": "既有头结点指针又有尾结点指针的循环单链表"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于选项 A，删除尾结点 $^{*}$ p 时，需要找到 $^{*}$ p 的前一个结点，时间复杂度为 $O(n)$ 。对于选项 B，删除首结点 $^{*}$ p 时，需要找到 $^{*}$ p 结点，这里没有直接给出头结点指针，而是通过尾结点的 prior 指针找到 $^{*}$ p 结点的时间复杂度为 $O(n)$ 。对于选项 D，删除尾结点 $^{*}$ p 时，需要找到 $^{*}$ p 的前一个结点，时间复杂度为 $O(n)$ 。对于 C，执行这四种算法的时间复杂度均为 $O(1)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_25",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "有两个长度为 $n$ 的循环单链表，若要求两个循环单链表头尾相接的时间复杂度为 $O(1)$ ，则对应两个循环单链表各设置一个指针，分别指向（）。",
      "options": {
        "A": "各自的头结点",
        "B": "各自的尾结点",
        "C": "各自的首结点",
        "D": "一个表的头结点，另一个表的尾结点"
      },
      "answer": [
        "B"
      ],
      "explanation": "要求用 $O(1)$ 的时间将两个循环单链表头尾相接，并未指明哪个链表接在另一个链表之后，所以对两个链表都要在 $O(1)$ 的时间找到头结点和尾结点。因此，两个指针应都指向尾结点。",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_26",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "有一个长度为 $n$ 的循环单链表，若从表中删除首元结点的时间复杂度达到 $O(n)$ ，则此时采用的循环单链表的结构可能是（）。",
      "options": {
        "A": "只有表头指针，没有头结点",
        "B": "只有表尾指针，没有头结点",
        "C": "只有表尾指针，带头结点",
        "D": "只有表头指针，带头结点"
      },
      "answer": [
        "A"
      ],
      "explanation": "在循环单链表中，删除首元结点后，要保持链表的循环性，因此需要找到首元结点的前驱。当链表带头结点时，其前驱就是头结点，因此不论是表头指针还是表尾指针，删除首元结点的时间都为 $O(1)$ 。当链表不带头结点时，其前驱是尾结点，因此，若有表尾指针，就可在 $O(1)$ 的时间找到尾结点；若只有表头指针，则需要遍历整个链表找到尾结点，时间为 $O(n)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_27",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "某线性表用带头结点的循环单链表存储，头指针为 head，当 head->next->next==head 成立时，线性表的长度可能是（）。",
      "options": {
        "A": "0",
        "B": "1",
        "C": "2",
        "D": "可能为 0 或 1"
      },
      "answer": [
        "D"
      ],
      "explanation": "对一个空循环单链表，有 head->next==head，推理 head->next->next==head->next==head。对含有一个元素的循环单链表，头结点（头指针 head 指示）的 next 域指向这个唯一的元素结点，该元素结点的 next 域指向头结点，因此也有 head->next->next=head。",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_28",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "有两个长度都为 n 的双链表，若以 $h_{1}$ 为头指针的双链表是非循环的，以 $h_{2}$ 为头指针的双链表是循环的，则下列叙述中正确的是（）。",
      "options": {
        "A": "对于双链表 $h_{1}$ ，删除首结点的时间复杂度是 $O(n)$",
        "B": "对于双链表 $h_{2}$ ，删除首结点的时间复杂度是 $O(n)$",
        "C": "对于双链表 $h_1$ ，删除尾结点的时间复杂度是 $O(1)$",
        "D": "对于双链表 $h_{2}$ ，删除尾结点的时间复杂度是 $O(1)$"
      },
      "answer": [
        "D"
      ],
      "explanation": "对于两种双链表，删除首结点的时间复杂度都是 $O(1)$ 。对于非循环双链表，删除尾结点的时间复杂度是 $O(n)$ ；对于循环双链表，删除尾结点的时间复杂度是 $O(1)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_29",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "一个链表最常用的操作是在最后一个元素后插入一个元素和删除第一个元素，则选用（）最节省时间。",
      "options": {
        "A": "不带头结点的循环单链表",
        "B": "双链表",
        "C": "单链表",
        "D": "不带头结点且有尾指针的循环单链表"
      },
      "answer": [
        "D"
      ],
      "explanation": "对于选项 A，在最后一个元素之后插入元素的情况与普通单链表相同，时间复杂度为 $O(n)$ ；而删除第一个元素时，为保持循环单链表的性质（尾结点指向第一个结点），要先遍历整个链表找到尾结点，再做删除操作，时间复杂度为 $O(n)$ 。对于选项 B，双链表的情况与单链表的相同，一个是 $O(n)$ ，一个是 $O(1)$ 。对于选项 C，在最后一个元素之后插入一个元素，要遍历整个链表才能找到插入位置，时间复杂度为 $O(n)$ ；删除第一个元素的时间复杂度为 $O(1)$ 。对于选项 D，与选项 A 的分析对比，有尾结点的指针，省去了遍历链表的过程，因此时间复杂度均为 $O(1)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_30",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "需要分配较大连续空间，插入和删除不需要移动元素的线性表，其存储结构为（）。",
      "options": {
        "A": "单链表",
        "B": "静态链表",
        "C": "顺序表",
        "D": "双链表"
      },
      "answer": [
        "B"
      ],
      "explanation": "静态链表采用数组表示，因此需要预先分配较大的连续空间，静态链表同时还具有一般链表的特点，即插入和删除不需要移动元素。",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_31",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "下列关于静态链表的说法中，正确的是（）。 I. 静态链表兼具顺序表和单链表的优点，因此存取表中第 $i$ 个元素的时间与 $i$ 无关 II. 静态链表能容纳的最大元素个数在表定义时就确定了，以后不能增加 III. 静态链表与动态链表在元素的插入、删除上类似，不需要移动元素 IV. 相比动态链表，静态链表可能浪费较多的存储空间",
      "options": {
        "A": "I、II、III",
        "B": "II、III、IV",
        "C": "I、III、IV",
        "D": "I、II、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "静态链表的存储空间虽然是顺序分配的，但元素的存储不是顺序的，查找时仍然需要按链依次进行，而插入、删除都不需要移动元素。静态链表的存储空间是一次性申请的，能容纳的最大元素个数在定义时就已确定。并非每个空间都存储了元素，因此会造成存储空间的浪费。",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_32",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2016 统考真题】已知一个带有表头结点的循环双链表 L，结点结构为 prev data next，其中 prev 和 next 分别是指向其直接前驱和直接后继结点的指针。现要删除指针 p 所指的结点，正确的语句序列是（）。",
      "options": {
        "A": "p->next->prev=p->prev; p->prev->next=p->prev; free(p);",
        "B": "p->next->prev=p->next; p->prev->next=p->next; free(p);",
        "C": "p->next->prev=p->next; p->prev->next=p->prev; free(p);",
        "D": "p->next->prev=p->prev; p->prev->next=p->next; free(p);"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项 A 的第二句代码，相当于将 p 前驱结点的后继指针指向其自身，错误；选项 B 和 C 的第一句代码，相当于将 p 后继结点的前驱指针指向其自身，错误。只有选项 D 正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_33",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2016 统考真题】已知表头元素为 $c$ 的单链表在内存中的存储状态如下表所示。 <table><tr><td>地址</td><td>元素</td><td>链接地址</td></tr><tr><td>1000H</td><td>a</td><td>1010H</td></tr><tr><td>1004H</td><td>b</td><td>100CH</td></tr><tr><td>1008H</td><td>c</td><td>1000H</td></tr><tr><td>100CH</td><td>d</td><td>NULL</td></tr><tr><td>1010H</td><td>e</td><td>1004H</td></tr><tr><td>1014H</td><td></td><td></td></tr></table> 现将 f 存放于 1014H 处并插入单链表，若 f 在逻辑上位于 a 和 e 之间，则 a、e、f 的 “链接地址” 依次是（）。",
      "options": {
        "A": "1010H、1014H、1004H",
        "B": "1010H、1004H、1014H",
        "C": "1014H、1010H、1004H",
        "D": "1014H、1004H、1010H"
      },
      "answer": [
        "D"
      ],
      "explanation": "根据存储状态，单链表的结构如下图所示。\n\n![](images/a26e60b04f6c7faae93c4b7479ae446baba0467dad7ad91e486c708bc874e784.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph LR\n    c --> a\n    a --> e\n    e --> b\n    b --> d\n    d --> / \n    1008H --> a\n    1010H --> e\n    1004H --> b\n    1014H --> f\n```\n</details>\n\n其中 “链接地址” 是指结点 next 所指的内存地址。当结点 f 插入后，a 指向 f，f 指向 e，e 指向 b。显然 a、e 和 f 的 “链接地址” 分别是 f、b 和 e 的内存地址，即 1014H、1004H 和 1010H。",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_34",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2021 统考真题】已知头指针 h 指向一个带头结点的非空循环单链表，结点结构为 data next，其中 next 是指向直接后继结点的指针，p 是尾指针，q 是临时指针。现要删除该链表的第一个元素，正确的语句序列是（）。",
      "options": {
        "A": "h->next=h->next->next; q=h->next; free(q);",
        "B": "q=h->next; h->next=h->next->next; free(q);",
        "C": "q=h->next; h->next=q->next; if (p != q) p = h; free(q);",
        "D": "q=h->next; h->next=q->next; if (p==q) p=h; free(q);"
      },
      "answer": [
        "D"
      ],
      "explanation": "如图 1 所示，要删除带头结点的非空循环单链表中的第一个元素，就要先用临时指针 q 指向待删结点，q=h->next；然后将 q 从链表中断开，h->next=q->next（这一步也可写成 h->next=h->next->next）；此时要考虑一种特殊情况，若待删结点是链表的尾结点，即循环单链表中只有一个元素(p 和 q 指向同一个结点)，如图2所示，则在删除后要将尾指针指向头结点，即 if (p==q)p=h；最后释放 q 结点即可，答案选择选项 D。\n\n![](images/aad9cb0a568d229f32002dfde7d6ea7dfe7aab21f56b9406fdb588f9640ad135.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph LR\n    A[\" \"] --> B[\" \"]\n    B --> C[\" \"]\n    C --> D[\" \"]\n    D --> E[\"...\"]\n    E --> F[\" \"]\n    F --> G[\" \"]\n    H[\"表头结点\"] --> B\n    I[\"q\"] --> C\n    J[\"p\"] --> E\n```\n</details>\n\n图 1\n\n![](images/ec1ba3566ec91cead5a07fcace7b7fe1094fcfd8b565dc807cadbf51993514d0.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\" \"]\n    B --> C[\" \"]\n    D[\"h\"] --> A\n    E[\"p、q\"] --> C\n    F[\"表头结点\"] --> A\n    G[\"待删结点\"] --> C\n```\n</details>\n\n图 2",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_35",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "【2023 统考真题】现有非空双链表 L，其结点结构为 prev data next，prev 是指向直接前驱结点的指针，next 是指向直接后继结点的指针。若要在 L 中指针 p 所指向的结点（非尾结点）之后插入指针 s 指向的新结点，则在执行语句序列 “s->next=p->next; p->next=s;” 后，下列语句序列中还需要执行的是（）。",
      "options": {
        "A": "s->next->prev=p; s->prev=p;",
        "B": "p->next->prev=s; s->prev=p;",
        "C": "s->prev=s->next->prev; s->next->prev=s;",
        "D": "p->next->prev=s->prev; s->next->prev=p;"
      },
      "answer": [
        "C"
      ],
      "explanation": "链表的插入操作要保证不会造成断链，画图再依次判断选项。执行语句“①s->next=p->next；②p->next=s；”后的结构如下图所示（虚线表示prev，实线表示next）。\n\n![](images/092eb05dab4fc9386c205d15e091b850387908a6c4c734c7030ef26888880c75.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\"P\"]\n    B --> C[\" \"]\n    C --> D[\" \"]\n    D --> E[\" \"]\n    E --> F[\"P\"]\n    F --> G[\" \"]\n    G --> H[\" \"]\n    H --> I[\"P\"]\n    I --> J[\" \"]\n    J --> K[\" \"]\n    K --> L[\" \"]\n    L --> M[\" \"]\n    M --> N[\" \"]\n    N --> O[\" \"]\n    O --> P[\" \"]\n    P --> Q[\" \"]\n    Q --> R[\" \"]\n    R --> S[\" \"]\n    S --> T[\" \"]\n    T --> U[\" \"]\n    U --> V[\" \"]\n    V --> W[\" \"]\n    W --> X[\" \"]\n    X --> Y[\" \"]\n    Y --> Z[\" \"]\n    Z --> AA[\" \"]\n    AA --> AB[\" \"]\n    AB --> AC[\" \"]\n    AC --> AD[\" \"]\n    AD --> AE[\" \"]\n    AE --> AF[\" \"]\n    AF --> AG[\" \"]\n    AG --> AH[\" \"]\n    AH --> AI[\" \"]\n    AI --> AJ[\" \"]\n    AJ --> AK[\" \"]\n    AK --> AL[\" \"]\n    AL --> AM[\" \"]\n    AM --> AN[\" \"]\n    AN --> AO[\" \"]\n```\n</details>\n\n对于选项 A, s->next->prev=p，错误。对于选项 B, p->next->prev=s，让 s 的 prev 指向 s，错误。对于选项 D，两句代码均错误。对于选项 C，执行语句 “③s->prev=s->next->prev；④s->next->prev=s；” 后的结构如下图所示，满足插入的要求。\n\n![](images/bd464b3b00920ee67e15864f2bd5b0b6145ed4e89799e595b64b6656b9b3a164.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\"p\"]\n    B --> C[\"s\"]\n    C --> D[\" \"]\n    D --> E[\" \"]\n    E --> F[\"p\"]\n    F --> G[\"s\"]\n    G --> H[\" \"]\n    H --> I[\"p\"]\n    I --> J[\"s\"]\n    J --> K[\" \"]\n    K --> L[\" \"]\n    style A fill:#fff,stroke:#000\n    style B fill:#fff,stroke:#000\n    style C fill:#fff,stroke:#000\n    style D fill:#fff,stroke:#000\n    style E fill:#fff,stroke:#000\n    style F fill:#fff,stroke:#000\n    style G fill:#fff,stroke:#000\n    style H fill:#fff,stroke:#000\n    style I fill:#fff,stroke:#000\n    style J fill:#fff,stroke:#000\n    style K fill:#fff,stroke:#000\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_2-3-7_36",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "线性表",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "【2024 统考真题】已知带头结点的非空单链表 L 的头指针为 h，结点结构为 data next，其中 next 是指向直接后继结点的指针。现有指针 p 和 q，若 p 指向 L 中非首且非尾的任意一个结点，则执行语句序列 “q=p->next；p->next=q->next；q->next=h->next；h->next=q；” 的结果是（）。",
      "options": {
        "A": "在 p 所指结点后插入 q 所指结点",
        "B": "在 $q$ 所指结点后插入 $p$ 所指结点",
        "C": "将 p 所指结点移至 L 的头结点之后",
        "D": "将 q 所指结点移动到 L 的头结点之后"
      },
      "answer": [
        "D"
      ],
      "explanation": "假设单链表 L 的初始状态如图①所示。执行 q=p->next 后的状态如图②所示，q 指向 p 的后继结点。执行 p->next=q->next 后的状态如图③所示，结点 p 的 next 指向 q 的后继结点。执行 q->next=h->next 后的状态如图④所示，结点 q 的 next 指向 h 的后继结点。执行 h->next=q 后的状态如图⑤所示，q 所指结点移至 L 的头结点 h 之后，选项 D 正确。\n\n![](images/169f1e569756977f14fa62f3f3ac0474d7c9e779f64890fc0e06415328cd87fe.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"①初始状态\"] --> B[\"②执行q=p->next后\"]\n    B --> C[\"③执行p->next=q->next后\"]\n    C --> D[\"④执行q->next=h->next后\"]\n    D --> E[\"⑤执行h->next=q后\"]\n    \n    subgraph ①初始状态\n        A1[\"h\"] --> A2[\" \"]\n        A2 --> A3[\" \"]\n        A3 --> A4[\" \"]\n        A4 --> A5[\" \"]\n        A5 --> A6[\" \"]\n        A6 --> A7[\" \"]\n    end\n    \n    subgraph ②执行q=p->next后\n        B1[\"h\"] --> B2[\" \"]\n        B2 --> B3[\" \"]\n        B3 --> B4[\" \"]\n        B4 --> B5[\" \"]\n        B5 --> B6[\" \"]\n        B6 --> B7[\" \"]\n        B7 --> B8[\" \"]\n        B8 --> B9[\" \"]\n    end\n    \n    subgraph ③执行p->next=q->next后\n        C1[\"h\"] --> C2[\" \"]\n        C2 --> C3[\" \"]\n        C3 --> C4[\" \"]\n        C4 --> C5[\" \"]\n        C5 --> C6[\" \"]\n        C6 --> C7[\" \"]\n        C7 --> C8[\" \"]\n        C8 --> C9[\" \"]\n        C9 --> C10[\" \"]\n        C10 --> C11[\" \"]\n        C11 --> C12[\" \"]\n        C12 --> C13[\" \"]\n        C13 --> C14[\" \"]\n        C14 --> C15[\" \"]\n        C15 --> C16[\" \"]\n        C16 --> C17[\" \"]\n        C17 --> C18[\" \"]\n        C18 --> C19[\" \"]\n        C19 --> C20[\" \"]\n        C20 --> C21[\" \"]\n    end\n```\n</details>\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch02-第2章-线性表.md"
    },
    {
      "id": "数据结构_3-1-4_06",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "设用数组 data[1...n] 存储一个栈, 初始栈顶指针 top=n+1, 则元素 x 入栈的操作是()。",
      "options": {
        "A": "data [--top]=x",
        "B": "data[top++] = x",
        "C": "data[top--]=x",
        "D": "data[++top]=x"
      },
      "answer": [
        "A"
      ],
      "explanation": "数组下标范围为 $1 \\sim n$ ，初始时 top 为 $n + 1$ ，表示 top 指向栈顶元素。栈向低地址方向增长，所以入栈时应先将指针 top 减 1，然后存入元素 x，A 正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_07",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "设有一个空栈，栈顶指针为 1000H，栈向高地址方向增长，每个元素占一个存储单元，执行 Push、Push、Pop、Push、Pop、Push、Pop、Push 操作后，栈顶指针为（）。",
      "options": {
        "A": "1002H",
        "B": "1003H",
        "C": "1004H",
        "D": "1005H"
      },
      "answer": [
        "A"
      ],
      "explanation": "每个元素需要 1 个存储单元，所以每入栈一次 top 加 1，出栈一次 top 减 1。指针 top 的值依次为 1001H, 1002H, 1001H, 1002H, 1001H, 1002H, 1001H, 1002H。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_08",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "和顺序栈相比，链栈有一个比较明显的优势，即（）。",
      "options": {
        "A": "通常不会出现栈满的情况",
        "B": "通常不会出现栈空的情况",
        "C": "插入操作更容易实现",
        "D": "删除操作更容易实现"
      },
      "answer": [
        "A"
      ],
      "explanation": "顺序栈采用数组存储，数组的大小是固定的，不能动态地分配大小。和顺序栈相比，链栈的最大优势在于它可以动态地分配存储空间。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_09",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "设链表不带头结点且所有操作均在表头进行，则下列最不适合作为链栈的是（）。",
      "options": {
        "A": "只有表头结点指针，没有表尾指针的双向循环链表",
        "B": "只有表尾结点指针，没有表头指针的双向循环链表",
        "C": "只有表头结点指针，没有表尾指针的单向循环链表",
        "D": "只有表尾结点指针，没有表头指针的单向循环链表"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于双向循环链表，不管是表头指针还是表尾指针，都可以很方便地找到表头结点，方便在表头做插入或删除操作。而循环单链表通过尾指针可以很方便地找到表头结点，但通过头指针找尾结点需要遍历一次链表。对于选项 C，插入和删除结点后，找尾结点所需的时间为 $O(n)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_10",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "向一个栈顶指针为 top 的链栈（不带头结点）中插入一个 x 结点，则执行（）。",
      "options": {
        "A": "top->next=x",
        "B": "x->next=top->next; top->next=x",
        "C": "x->next=top; top=x",
        "D": "x->next=top; top=top->next"
      },
      "answer": [
        "C"
      ],
      "explanation": "链栈采用不带头结点的单链表表示时，入栈操作在首部插入一个结点 x（x->next=top），插入完后需将 top 指向该插入的结点 x。请思考当链栈存在头结点时的情况。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_11",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "链栈（不带头结点）执行 Pop 操作，并将出栈的元素存在 x 中，应该执行（）。",
      "options": {
        "A": "x=top; top=top->next",
        "B": "x=top->data",
        "C": "top=top->next; x=top->data",
        "D": "x=top->data; top=top->next"
      },
      "answer": [
        "D"
      ],
      "explanation": "这里假设栈顶指针指向的是栈顶元素，所以选择选项 D；而选项 A 中首先将 top 指针赋给了 x，错误；选项 B 中没有修改 top 指针的值；选项 C 为 top 指针指向栈顶元素的上一个元素时的答案。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_12",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "经过以下栈的操作后，变量 x 的值为（）。 InitStack(st); Push(st, a); Push(st, b); Pop(st, x); GetTop(st, x);",
      "options": {
        "A": "a",
        "B": "b",
        "C": "NULL",
        "D": "false"
      },
      "answer": [
        "A"
      ],
      "explanation": "执行前 3 句后，栈 st 内的值为 a, b，其中 b 为栈顶元素；执行第 4 句后，栈顶元素 b 出栈，x 的值为 b；执行最后一句，读取栈顶元素的值，x 的值为 a。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_13",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "3个不同元素依次入栈，能得到（）种不同的出栈序列。",
      "options": {
        "A": "4",
        "B": "5",
        "C": "6",
        "D": "7"
      },
      "answer": [
        "B"
      ],
      "explanation": "当 n 个不同元素入栈时，出栈序列的个数为\n\n$$\n\\frac {1}{n + 1} C _ {2 n} ^ {n} = \\frac {1}{n + 1} \\frac {(2 n) !}{n ! \\times n !} = \\frac {6 \\times 5 \\times 4}{4 \\times 3 \\times 2 \\times 1} = 5\n$$\n\n考题中给出的 n 值不会很大，可以根据栈的特点，若 $X_{i}$ 已经出栈，则 $X_{i}$ 前面的尚未出栈的元素一定逆置有序地出栈，因此，可以采用例举方法。如 a, b, c 依次入栈的出栈序列有 abc, acb, bac, bca, cba。另外，在一些考题中可能会问符合某个特定条件的出栈序列有多少种，比如此题中问以 b 开头的出栈序列有几种，这种类型的题目一般都使用穷举法。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_14",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "设 $a, b, c, d, e, f$ 以所给的次序入栈，若在入栈操作时，允许出栈操作，则下面不会出现的出栈序列为（）。",
      "options": {
        "A": "fedcba",
        "B": "bcafed",
        "C": "dcefba",
        "D": "cabdef"
      },
      "answer": [
        "D"
      ],
      "explanation": "根据栈 “先进后出” 的特点，且在入栈操作的同时允许出栈操作，显然选项 D 中 c 最先出栈，则此时栈内必定为 a 和 b，但因为 a 先于 b 入栈，所以要晚出栈。对于某个出栈的元素，在它之前入栈却晚出栈的元素必定是按逆序出栈的，其余答案均是可能出现的情况。\n\n此题也可采用将各序列逐个代入的方法来确定是否有对应的进出栈序列（类似下题）。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_15",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "4个元素依次入栈的次序为abcd，则以 $cd$ 开头的出栈序列的个数为（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "A"
      ],
      "explanation": "假设出栈序列为 cd...，分析栈的操作序列：a 入栈，b 入栈，c 入栈，c 出栈，d 入栈，d 出栈，此后只能是 b 出栈和 a 出栈一种情况，因此出栈序列只有 cdba。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_16",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "用 S 表示入栈操作，用 X 表示出栈操作，若元素的入栈顺序是 1234，为了得到 1342 的出栈顺序，相应的 S 和 X 的操作序列为（）。",
      "options": {
        "A": "SXSXSSXX",
        "B": "SSSXXSXX",
        "C": "SXSSXXSX",
        "D": "SXSSXSXX"
      },
      "answer": [
        "D"
      ],
      "explanation": "采用排除法，选项 A, B, C 得到的出栈序列分别为 1243, 3241, 1324。由 1234 得到 1342 的进出栈序列为：1 进，1 出，2 进，3 进，3 出，4 进，4 出，2 出，所以选择选项 D。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_17",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "若栈的输入序列是 $1, 2, 3, \\cdots, n$ ，输出序列的第一个元素是 n，则第 i 个输出元素是（）。",
      "options": {
        "A": "不确定",
        "B": "$n - i$",
        "C": "n-i-1",
        "D": "$n - i + 1$"
      },
      "answer": [
        "D"
      ],
      "explanation": "第 n 个元素第一个出栈，说明前 n-1 个元素都已经按顺序入栈，由 “先进后出” 的特点可知，此时的输出序列一定是输入序列的逆序，所以答案选择选项 D。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_18",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "若栈的输入序列是 $1, 2, 3, \\cdots, n$ ，输出序列的第一个元素是 i，则第 j 个输出元素是（）。",
      "options": {
        "A": "i-j-1",
        "B": "i - j",
        "C": "$j - i + 1$",
        "D": "不确定"
      },
      "answer": [
        "D"
      ],
      "explanation": "当第 $i$ 个元素第一个出栈时，则 $i$ 之前的元素可以依次排在 $i$ 之后出栈，但剩余的元素可以在此时入栈，并且排在 $i$ 之前的元素出栈，所以第 $j$ 个出栈的元素是不确定的。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_19",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "某栈的输入序列为 $a, b, c, d$ ，下面的4个序列中，不可能为其输出序列的是（）。",
      "options": {
        "A": "a, b, c, d",
        "B": "c, b, d, a",
        "C": "d, c, a, b",
        "D": "a, c, b, d"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于选项 A，可能的顺序是 a 入，a 出，b 入，b 出，c 入，c 出，d 入，d 出。对于选项 B，可能的顺序是 a 入，b 入，c 入，c 出，b 出，d 入，d 出，a 出。对于选项 D，可能的顺序是 a 入，a 出，b 入，c 入，c 出，b 出，d 入，d 出。选项 C 没有对应的序列。\n\n【另解】若出栈序列的第一个元素为 d，则出栈序列只能是 dcba。该思想通常也适用于出栈序列的局部分析：如 12345 入栈，问出栈序列 34152 是否正确？如何分析？若第一个出栈元素是 3，则此时 12 必停留在栈中，它们出栈的相对顺序只能是 21，所以 34152 错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_20",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "若栈的输入序列是 $P_{1}, P_{2}, \\cdots, P_{n}$ ，输出序列是 $1, 2, 3, \\cdots, n$ ，若 $P_{3} = 1$ ，则 $P_{1}$ 的值（）。",
      "options": {
        "A": "可能是 2",
        "B": "一定是2",
        "C": "不可能是 2",
        "D": "不可能是 3"
      },
      "answer": [
        "C"
      ],
      "explanation": "入栈序列是 $P_{1}, P_{2}, \\cdots, P_{n}$ 。因为 $P_{3}=1$ ，即 $P_{1}, P_{2}, P_{3}$ 连续入栈后，第一个出栈元素是 $P_{3}$ ，说明 $P_{1}, P_{2}$ 已经按序入栈，根据先进后出的特点可知， $P_{2}$ 必定在 $P_{1}$ 之前出栈，而第二个出栈元素是 2，而此时 $P_{1}$ 不是栈顶元素，所以 $P_{1}$ 的值不可能是 2。思考：哪些 $P_{i}$ 可能是 2？",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_21",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "若栈的输入序列是 $P_{1}, P_{2}, \\cdots, P_{n}$ ，输出序列是 $1, 2, 3, \\cdots, n$ ，若 $P_{3} = 3$ ，则 $P_{1}$ 的值（）。",
      "options": {
        "A": "可能是 2",
        "B": "不可能是 1",
        "C": "一定是1",
        "D": "一定是2"
      },
      "answer": [
        "A"
      ],
      "explanation": "假设 $P_{1}$ 是 1，入栈后立即出栈， $P_{2}$ 是 2，入栈后立即出栈， $P_{3}$ 是 3，入栈后立即出栈，得到的序列符合题意。假设 $P_{1}$ 是 2， $P_{2}$ 是 1， $P_{1}$ 、 $P_{2}$ 依次入栈后全部出栈， $P_{3}$ 是 3，入栈后立即出栈，得到的序列符合题意。因此， $P_{1}$ 既可能是 1，又可能是 2。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_22",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "已知栈的入栈序列是 1, 2, 3, 4，其出栈序列为 $P_{1}, P_{2}, P_{3}, P_{4}$ ，则 $P_{2}, P_{4}$ 不可能是（）。",
      "options": {
        "A": "2,4",
        "B": "2,1",
        "C": "4,3",
        "D": "3,4"
      },
      "answer": [
        "C"
      ],
      "explanation": "逐个判断每个选项可能的入栈出栈顺序。对于选项 A，可能的顺序是 1 入，1 出，2 入，2 出，3 入，3 出，4 入，4 出。对于选项 B，可能的顺序是 1 入，2 入，3 入，3 出，2 出，4 入，4 出，1 出。对于选项 D，可能的顺序是 1 入，1 出，2 入，3 入，3 出，2 出，4 入，4 出。选项 C 没有对应的序列，因为当 4 在栈中时，意味着前面的所有元素（1, 2, 3）都已在栈中或曾经入过栈，此时若 4 第二个出栈，即栈中还有两个元素，且这两个元素是有序的（对应入栈顺序），只能为(1, 2), (1, 3), (2, 3)，若是序列(1, 2)，则 3 已在 $p_1$ 位置出栈，不可能再在 $p_4$ 位置出栈，若是(1, 3)和(2, 3)这种情况中的任意一种，则 3 一定是下一个出栈元素，即 $p_3$ 一定是 3，所以 $p_4$ 不可能是 3。\n\n【另解】对于选项 C， $p_{2}$ 为最后一个入栈元素 4，则只有 $p_{1}$ 或 $p_{3}$ 出栈的元素有可能为 3（请读者分两种情况自行思考），而 $p_{4}$ 绝不可能为 3。读者在解答此类题时，一定要注意出栈序列中的“最后一个入栈元素”，这样可以节省答题的时间。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_23",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "设栈的初始状态为空，当字符序列 “n1\\_” 作为栈的输入时，输出长度为 3，且可用作 C 语言标识符的序列有（）个。",
      "options": {
        "A": "4",
        "B": "5",
        "C": "3",
        "D": "6"
      },
      "answer": [
        "C"
      ],
      "explanation": "标识符只能以英文字母或下划线开头，而不能以数字开头。于上，由n、1、\\_三个字符组合成的标识符有n1\\_、n\\_1、\\_ln和\\_n1四种。第一种：n入栈再出栈，1入栈再出栈，\\_入栈再出栈。第二种：n入栈再出栈，1入栈，\\_入栈，\\_出栈，1出栈。第三种：n入栈，1入栈，\\_入栈，\\_出栈，1出栈，n出栈。而根据栈的操作特性，\\_nl这种情况不可能出现。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_24",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "采用共享栈的好处是（）。",
      "options": {
        "A": "减少存取时间，降低发生上溢的可能",
        "B": "节省存储空间，降低发生上溢的可能",
        "C": "减少存取时间，降低发生下溢的可能",
        "D": "节省存储空间，降低发生下溢的可能"
      },
      "answer": [
        "B"
      ],
      "explanation": "上溢是指存储器满，还往里写；下溢是指存储器空，还往外读。为了解决上溢，可给栈分配很大的存储空间，但这样又会造成存储空间的浪费。共享栈的提出就是为了在解决上溢的基础上节省存储空间，将两个栈放在同一段更大的存储空间内，这样，当一个栈的元素增加时，可使用另一个栈的空闲空间，从而降低发生上溢的可能性。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_25",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "设有一个顺序共享栈 Share[0:n-1]，其中第一个栈顶指针 top1 的初值为 -1，第二个栈顶指针 top2 的初值为 n，则判断共享栈满的条件是（）。",
      "options": {
        "A": "top2-top1==1",
        "B": "top1-top2==1",
        "C": "top1==top2",
        "D": "都不对"
      },
      "answer": [
        "A"
      ],
      "explanation": "这种情况就是前面我们所描述的，详细内容请参见本节考点精析部分对共享栈的讲解。另外，读者可以思考当 top1 的初值为 0，top2 的初值为 n-1 时栈满的条件。\n\n# 注意\n\n栈顶、队头与队尾的指针的定义是不唯一的，做题时务必仔细审题和思考。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_26",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2009 统考真题】设栈 S 和队列 Q 的初始状态均为空，元素 abcdefg 依次入栈 S。若每个元素出栈后立即进入队列 Q，且 7 个元素出队的顺序是 bdcfeag，则栈 S 的容量至少是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "C"
      ],
      "explanation": "时刻注意栈的特点是先进后出，下表是出入栈的详细过程。\n\n<table><tr><td>序号</td><td>说明</td><td>栈内</td><td>栈外</td><td>序号</td><td>说明</td><td>栈内</td><td>栈外</td></tr><tr><td>1</td><td>a入栈</td><td>a</td><td></td><td>8</td><td>e入栈</td><td>ae</td><td>bdc</td></tr><tr><td>2</td><td>b入栈</td><td>ab</td><td></td><td>9</td><td>f入栈</td><td>aef</td><td>bdc</td></tr><tr><td>3</td><td>b出栈</td><td>a</td><td>b</td><td>10</td><td>f出栈</td><td>ae</td><td>bdcf</td></tr><tr><td>4</td><td>c入栈</td><td>ac</td><td>b</td><td>11</td><td>e出栈</td><td>a</td><td>bdcfe</td></tr><tr><td>5</td><td>d入栈</td><td>acd</td><td>b</td><td>12</td><td>a出栈</td><td></td><td>bdcfea</td></tr><tr><td>6</td><td>d出栈</td><td>ac</td><td>bd</td><td>13</td><td>g入栈</td><td>g</td><td>bdcfea</td></tr><tr><td>7</td><td>c出栈</td><td>a</td><td>bdc</td><td>14</td><td>g出栈</td><td></td><td>bdcfeag</td></tr></table>\n\n栈内的最大深度为 3，所以栈 S 的容量至少是 3。\n\n【另解】因为元素的出队顺序和入队顺序相同，所以元素的出栈顺序就是 b, d, c, f, e, a, g，因此元素的出入栈次序为 Push(S, a), Push(S, b), Pop(S, b), Push(S, c), Push(S, d), Pop(S, d), Pop(S, c), Push(S, e), Push(S, f), Pop(S, f), Pop(S, e), Pop(S, a), Push(S, g), Pop(S, g)。初始所需容量为 0，每做一次 Push 操作，容量加 1；每做一次 Pop 操作，容量减 1，记录的容量最大值为 3。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_27",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2010 统考真题】若元素 a, b, c, d, e, f 依次入栈，允许入栈、出栈操作交替进行，但不允许连续 3 次进行出栈操作，不可能得到的出栈序列是（）。",
      "options": {
        "A": "dcebfa",
        "B": "cbdaef",
        "C": "bcaefd",
        "D": "afedcb"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项A由a入，b入，c入，d入，d出，c出，e入，e出，b出，f入，f出，a出得到；选项B由a入，b入，c入，c出，b出，d入，d出，a出，e入，e出，f入，f出得到；选项C由a入，b入，b出，c入，c出，a出，d入，e入，e出，f入，f出，d出得到；选项D由a入，a出，b入，c入，d入，e入，f入，f出，e出，d出，c出，b出得到，但题意要求不允许连续3次出栈操作，选项D不符。\n\n【另解】先入栈的元素后出栈，入栈顺序为 a, b, c, d, e, f，所以连续出栈时的子序列必然是按字母表逆序的，若出栈序列中出现了长度大于或等于 3 的连续逆序子序列，则为所选序列。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_28",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2011 统考真题】元素 $a, b, c, d, e$ 依次进入初始为空的栈中，若元素入栈后可停留、可出栈，直到所有元素都出栈，则在所有可能的出栈序列中，以元素 $d$ 开头的序列个数是（）。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "B"
      ],
      "explanation": "d 第一个出栈，则 c, b, a 出栈的相对顺序是确定的，出栈顺序必为 d\\_c\\_b\\_a\\_，e 的顺序不定，在任意一个“\\_”上都有可能。\n\n【另解】d 首先出栈，则 abc 停留在栈中，此时栈的状态如右图所示。\n\n![](images/a2e8117b9a7b9ba65b8044c6187af63226321d88c46868eb11e5cb391f27be3e.jpg)\n\n<details>\n<summary>text_image</summary>\n\ne → d\n    c\n    b\n    a\n</details>\n\n此时可以有如下 4 种操作：① e 入栈后出栈，则出栈序列为 decba；② c 出栈，e 入栈后出栈，出栈序列为 dceba；③ cb 出栈，e 入栈后出栈，出栈序列为 dcbea；④ cba 出栈，e 入栈后出栈，出栈序列为 dcbae。思路和上面其实一样。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_29",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2013 统考真题】一个栈的入栈序列为 $1, 2, 3, \\cdots, n$ ，出栈序列是 $P_{1}, P_{2}, P_{3}, \\cdots, P_{n}$ 。若 $P_{2} = 3$ ，则 $P_{3}$ 可能取值的个数是（）。",
      "options": {
        "A": "n-3",
        "B": "n-2",
        "C": "n-1",
        "D": "无法确定"
      },
      "answer": [
        "C"
      ],
      "explanation": "显然，3之后的 $4,5,\\cdots,n$ 都是 $P_{3}$ 可取的数（一直入栈直到该数入栈后马上出栈）。接下来分析1和2是否可取： $P_{1}$ 可以是3之前入栈的数（可能是1或2），也可以是4，当 $P_{1}=1$ 时， $P_{3}$ 可取2；当 $P_{1}=2$ 时， $P_{3}$ 可取1。因此， $p_{3}$ 可能取除3外的所有数，个数为n-1。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_30",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2020 统考真题】对空栈 S 进行 Push 和 Pop 操作, 入栈序列为 a, b, c, d, e, 经过 Push、Push、Pop、Push、Pop、Push、Push、Pop 操作后得到的出栈序列是（）。",
      "options": {
        "A": "b, a, c",
        "B": "b, a, e",
        "C": "b, c, a",
        "D": "b, c, e"
      },
      "answer": [
        "D"
      ],
      "explanation": "按题意，出入栈操作的过程如下：\n\n<table><tr><td>操作</td><td>栈内元素</td><td>出栈元素</td></tr><tr><td>Push</td><td>a</td><td></td></tr><tr><td>Push</td><td>a b</td><td></td></tr><tr><td>Pop</td><td>a</td><td>b</td></tr><tr><td>Push</td><td>a c</td><td></td></tr><tr><td>Pop</td><td>a</td><td>c</td></tr><tr><td>Push</td><td>a d</td><td></td></tr><tr><td>Push</td><td>a d e</td><td></td></tr><tr><td>Pop</td><td>a d</td><td>e</td></tr></table>\n\n因此，出栈序列为 b, c, e。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-1-4_31",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2022 统考真题】给定有限符号集 S, in 和 out 均为 S 中所有元素的任意排列。对于初始为空的栈 ST，下列叙述中，正确的是（）。",
      "options": {
        "A": "若 in 是 ST 的入栈序列，则不能判断 out 是否为其可能的出栈序列",
        "B": "若 out 是 ST 的出栈序列，则不能判断 in 是否为其可能的入栈序列",
        "C": "若 in 是 ST 的入栈序列，out 是对应 in 的出栈序列，则 in 与 out 一定不同",
        "D": "若 in 是 ST 的入栈序列，out 是对应 in 的出栈序列，则 in 与 out 可能互为倒序"
      },
      "answer": [
        "D"
      ],
      "explanation": "通过模拟出入栈操作，可以判断入栈序列 in 和出栈序列 out 是否合法。因此，已知 in 序列可以判断 out 序列是否为可能的出栈序列；已知 out 序列也可以判断 in 序列是否为可能的入栈序列，选项 A 和 B 错误。若每个元素入栈后立即出栈，则 in 序列和 out 序列相同，选项 C 错误。若所有元素都入栈后才依次出栈，则 in 序列和 out 序列互为倒序，选项 D 正确。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_05",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "循环队列存储在数组 A[0...n] 中，入队时的操作为（）。",
      "options": {
        "A": "rear=rear+1",
        "B": "rear=(rear+1) mod (n-1)",
        "C": "rear=(rear+1) mod n",
        "D": "rear=(rear+1) mod (n+1)"
      },
      "answer": [
        "D"
      ],
      "explanation": "数组下标范围为 $0 \\sim n$ ，因此数组容量为 $n + 1$ 。循环队列中元素入队的操作是 rear=(rear+1) mod maxsize，题中 maxsize=n+1。因此入队操作应为 rear=(rear+1) mod (n+1)。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_06",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "已知循环队列的存储空间为数组 A[21]，front 指向队首元素的前一个位置，rear 指向队尾元素，假设当前 front 和 rear 的值分别为 8 和 3，则该队列的长度为（）。",
      "options": {
        "A": "5",
        "B": "6",
        "C": "16",
        "D": "17"
      },
      "answer": [
        "C"
      ],
      "explanation": "队列的长度为 $(rear-front+maxsize)\\%$ $maxsize=(rear-front+21)\\%$ 21=16。这种情况和 front 指向当前元素，rear 指向队尾元素的下一个元素的计算是相同的。\n\n# 注意\n\n数组 A[n] 的下标范围为 0 \\~ n - 1。若写成 A[0...n]，则说明下标范围为 0 \\~ n。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_07",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "若用数组 A[0...5] 实现循环队列，且当前 rear 和 front 的值分别为 1 和 5，当从队列中删除一个元素，再加入两个元素后，rear 和 front 的值分别为（）。",
      "options": {
        "A": "3 和 4",
        "B": "3 和 0",
        "C": "5 和 0",
        "D": "5 和 1"
      },
      "answer": [
        "B"
      ],
      "explanation": "循环队列中，每删除一个元素，队首指针 front=(front+1)%6，每插入一个元素，队尾指针 rear=(rear+1)%6。上述操作后，front=0，rear=3。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_08",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "假设用数组 Q[MaxSize] 实现循环队列，队首指针 front 指向队首元素的前一位置，队尾指针 rear 指向队尾元素，则判断该队列为空的条件是（）。",
      "options": {
        "A": "Q.rear==(Q.front+1)%MaxSize",
        "B": "(Q.rear+1) %MaxSize==Q.front+1",
        "C": "(Q.rear+1) %MaxSize==Q.front",
        "D": "Q.rear==Q.front"
      },
      "answer": [
        "D"
      ],
      "explanation": "当队列中只有一个元素时，front 指向该元素的前一个位置，rear 指向该元素，因此当队列为空时，队首指针等于队尾指针，这样一个元素入队后，才能符合题目要求。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_09",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "假设循环队列 Q[MaxSize]的队首指针为 front，队尾指针为 rear，队列的最大容量为 MaxSize，此外，该队列再没有其他数据成员，则判断该队列已满的条件是（）。",
      "options": {
        "A": "Q.front==Q.rear",
        "B": "Q.front+Q.rear>=MaxSize",
        "C": "Q.front==(Q.rear+1)%MaxSize",
        "D": "Q.rear==(Q.front+1)%MaxSize"
      },
      "answer": [
        "C"
      ],
      "explanation": "既然不能附加任何其他数据成员，只能采用牺牲一个存储单元的方法来区分是队空还是队满，约定以“队列头指针在队尾指针的下一位置作为队满的标志”，因此选择选项 C。选项 A 是判断队列是否空的条件，选项 B 和 D 都是干扰项。\n\n# 注意\n\n对于这类具体问题，举一些特例判断往往比直接思考问题能更快得到答案。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_10",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "假设用 A[0...n] 实现循环队列，front、rear 分别指向队首元素的前一个位置和队尾元素。若用 $(rear+1)\\%$ $(n+1)==front$ 作为队满标志，则（）。",
      "options": {
        "A": "可用 front==rear 作为队空标志",
        "B": "队列中最多可有 $n + 1$ 个元素",
        "C": "可用 front>rear 作为队空标志",
        "D": "可用 (front+1) % (n+1) == rear 作为队空标志"
      },
      "answer": [
        "A"
      ],
      "explanation": "若用 $(\\text{rear} + 1)\\% (\\text{n} + 1) == \\text{front}$ 作为队满标志，则说明题目采用了牺牲一个存储单元的方法来区分队空和队满，因此可用 front == rear 作为队空标志。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_11",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "与顺序队列相比，链式队列的（）。",
      "options": {
        "A": "优点是队列的长度不受限制",
        "B": "优点是入队和出队时间效率更高",
        "C": "缺点是不能进行顺序访问",
        "D": "缺点是不能根据队首指针和队尾指针计算队列的长度"
      },
      "answer": [
        "D"
      ],
      "explanation": "虽然链式队列采用动态分配方式，但其长度也受内存空间的限制，不能无限制增长。顺序队列和链式队列的入队和出队时间复杂度均为 $O(1)$ 。顺序队列和链式队列都可以进行顺序访问。对于顺序队列，可通过队首指针和队尾指针计算队列中的元素个数，而链式队列则不能。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_12",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "下列描述的几种链表中，最适合用作队列的是（）。",
      "options": {
        "A": "带队首指针和队尾指针的循环单链表",
        "B": "带队首指针和队尾指针的非循环单链表",
        "C": "只带队首指针的非循环单链表",
        "D": "只带队首指针的循环单链表"
      },
      "answer": [
        "B"
      ],
      "explanation": "因为队列需在双端进行操作，所以选项 C 和 D 的链表显然不太适合链队。对于选项 A，链表在完成入队和出队后还要修改为循环的，对于队列来讲这是多余的（画蛇添足）。对于选项 B，因为有首指针，所以适合删除首结点；因为有队尾指针，所以适合在其后插入结点。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_13",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "下列描述的几种链表中，最不适合用作链式队列的是（）。",
      "options": {
        "A": "只带队首指针的非循环双链表",
        "B": "只带队首指针的循环双链表",
        "C": "只带队尾指针的循环双链表",
        "D": "只带队尾指针的循环单链表"
      },
      "answer": [
        "A"
      ],
      "explanation": "因为非循环双链表只带队首指针，所以在执行入队操作时需要修改队尾结点的指针域，而查找队尾结点需要 $O(n)$ 的时间。选项 B、C 和 D 均可在 $O(1)$ 的时间内找到队首和队尾。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_15",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "用链式存储方式的队列进行删除操作时需要（）。",
      "options": {
        "A": "仅修改头指针",
        "B": "仅修改尾指针",
        "C": "头尾指针都要修改",
        "D": "头尾指针可能都要修改"
      },
      "answer": [
        "D"
      ],
      "explanation": "队列采用链式存储时，删除元素要从表头删除，通常仅需修改头指针，但若队列中仅有一个元素，则队尾指针也需要被修改，仅有一个元素时，删除后队列为空，需要修改队尾指针为 rear=front。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_16",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "在一个链式队列中，假设队首指针为 front，队尾指针为 rear，x 所指向的元素需要入队，则需要执行的操作为（）。",
      "options": {
        "A": "front=x, front=front->next",
        "B": "x->next=front->next, front=x",
        "C": "rear->next=x, rear=x",
        "D": "rear->next=x, x->next=NULL, rear=x"
      },
      "answer": [
        "D"
      ],
      "explanation": "插入操作时，先将结点 x 插入到链表尾部，再让 rear 指向这个结点 x。选项 C 的做法不够严密，因为是队尾，所以队尾 x->next 必须置为空。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_21",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2011 统考真题】已知循环队列存储在一维数组 A[0...n-1] 中，且队列非空时 front 和 rear 分别指向队首元素和队尾元素。若初始时队列为空，且要求第一个进入队列的元素存储在A[0]处，则初始时front和rear的值分别是（）。",
      "options": {
        "A": "0, 0",
        "B": "0, n - 1",
        "C": "n-1, 0",
        "D": "n-1, n-1"
      },
      "answer": [
        "B"
      ],
      "explanation": "根据题意，第一个元素进入队列后存储在 A[0] 处，此时 front 和 rear 值都为 0。入队时因为要执行 (rear+1) %n 操作，所以若入队后指针指向 0，则 rear 初值为 n-1，而因为第一个元素在 A[0] 中，插入操作只改变 rear 指针，所以 front 为 0 不变。\n\n# 注意\n\n① 循环队列是指顺序存储的队列，而不是指逻辑上的循环，如循环单链表表示的队列不能称为循环队列。② front 和 rear 的初值并不是固定的。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_22",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2014 统考真题】循环队列放在一维数组 A[0...M-1] 中，end1 指向队首元素，end2 指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作，队列中最多能容纳 M-1 个元素。初始时为空。下列判断队空和队满的条件中，正确的是（）。",
      "options": {
        "A": "队空: end1==end2;",
        "B": "队空: end1==end2;",
        "C": "队空: end2== (end1+1) mod M;",
        "D": "队空: end1== (end2+1) mod M;"
      },
      "answer": [
        "A"
      ],
      "explanation": "end1 指向队首元素，可知出队操作是先从 A[end1] 读数，然后 end1 再加 1。end2 指向队尾元素的后一个位置，可知入队操作是先存数到 A[end2]，然后 end2 再加 1。若用 A[0] 存储第一个元素，则队列初始时，入队操作先把数据放到 A[0] 中，然后 end2 自增，即可知 end2 初值为 0；而 end1 指向的是队首元素，队首元素在数组 A 中的下标为 0，所以得知 end1 的初值也为 0，可知队空条件为 end1 == end2；然后考虑队列满时，因为队列最多能容纳 M-1 个元素，假设队列存储在下标为 0 到 M-2 的 M-1 个区域，队头为 A[0]，队尾为 A[M-2]，此时队列满，考虑在这种情况下 end1 和 end2 的状态，end1 指向队首元素，可知 end1 = 0，end2 指向队尾元素的后一个位置，可知 end2 = M-2 + 1 = M-1，所以队满条件为 end1 == (end2 + 1) mod M。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_23",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2018 统考真题】现有队列 Q 与栈 S，初始时 Q 中的元素依次是 1, 2, 3, 4, 5, 6（1 在队头），S 为空。若仅允许下列 3 种操作：① 出队并输出出队元素；② 出队并将出队元素入栈；③ 出栈并输出出栈元素，则不能得到的输出序列是（）。",
      "options": {
        "A": "1, 2, 5, 6, 4, 3",
        "B": "2, 3, 4, 5, 6, 1",
        "C": "3,4,5,6,1,2",
        "D": "6, 5, 4, 3, 2, 1"
      },
      "answer": [
        "C"
      ],
      "explanation": "选项 A 的操作顺序为①①②②①①③③。选项 B 的操作顺序为②①①①①①③。选项 D 的操作顺序为②②②②①③③③③③。对于选项 C：首先输出 3，说明 1 和 2 必须先依次入栈，而此后 2 肯定比 1 先输出，因此无法得到 1,2 的输出顺序。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-2-5_24",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2021 统考真题】初始为空的队列 Q 的一端仅能进行入队操作，另外一端既能进行入队操作又能进行出队操作。若 Q 的入队序列是 1, 2, 3, 4, 5，则不能得到的出队序列是（）。",
      "options": {
        "A": "5,4,3,1,2",
        "B": "5, 3, 1, 2, 4",
        "C": "4, 2, 1, 3, 5",
        "D": "4, 1, 3, 2, 5"
      },
      "answer": [
        "D"
      ],
      "explanation": "假设队列左端允许入队和出队，右端只能入队。对于选项 A，依次从右端入队 1, 2，再从左端入队 3, 4, 5。对于选项 B，从右端入队 1, 2，然后从左端入队 3，再从右端入队 4，最后从左端入队 5。对于选项 C，从左端入队 1, 2，然后从右端入队 3，再从左端入队 4，最后从右端入队 5。无法验证选项 D 的序列。\n\n![](images/4765dd265dcb5feadb9c080bb3e6e4b27dc3ebdc35fe15a037007ac60ba6d59b.jpg)\n\n<details>\n<summary>text_image</summary>\n\n→ 5 4 3 1 2\n← A ← → 5 3 1 2 4 ← → 4 2 1 3 5 ←\n← B ← ← C\n</details>\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_04",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "利用栈求表达式的值时，设立运算数栈 OPEN。假设 OPEN 只有两个存储单元，则在下列表达式中，不会发生溢出的是（）。",
      "options": {
        "A": "A-B\\*(C-D)",
        "B": "(A-B)\\*C-D",
        "C": "$(A-B*C)-D$",
        "D": "(A-B) \\* (C-D)"
      },
      "answer": [
        "B"
      ],
      "explanation": "利用栈求表达式的值时，可以分别设立运算符栈和运算数栈，其原理不变。选项 B 中 A 入栈，B 入栈，计算得 R1，C 入栈，计算得 R2，D 入栈，计算得 R3，由此得栈深为 2。选项 A、C、D 依次计算得栈深为 4、3、3。因此选择选项 B。\n\n# 技巧\n\n根据运算符优先级，统计已依次入栈但还未参与计算的运算符数。以选项 C 为例，当 “(” “A” “-” 入栈时，“(” 和 “-” 还未参与运算，此时运算符栈大小为 2，“B” 和 “\\*” 入栈时运算符大小为 3，“C” 入栈时 “B\\*C” 运算，运算符栈大小为 2，以此类推。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_05",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "执行下列语句段后，i 的值为（）。 ```c int f(int x) { return ((x > 0) ? x * f(x - 1) : 2); } int i; i = f(f(1)); ```",
      "options": {
        "A": "2",
        "B": "4",
        "C": "8",
        "D": "无限递归"
      },
      "answer": [
        "B"
      ],
      "explanation": "栈与递归有着紧密的联系。递归模型包括递归出口和递归体两个方面。递归出口是递归算法的出口，即终止递归的条件。递归体是一个递推的关系式。根据题意有\n\n$$\nf (0) = 2;\n$$\n\n$$\nf (1) = 1 ^ {*} f (0) = 2;\n$$\n\n$$\nf (f (1)) = f (2) = 2 ^ {*} f (1) = 4 。\n$$",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_06",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "设有如下递归函数，则计算 $F(8)$ 需要调用该递归函数的次数为（）。 ```txt int F(int n) { if (n <= 3) return 1; else return F(n - 2) + F(n - 4) + 1; } ```",
      "options": {
        "A": "7",
        "B": "8",
        "C": "9",
        "D": "10"
      },
      "answer": [
        "C"
      ],
      "explanation": "计算 F(8) 的递归调用树如右图所示:\n\n由图可知，递归函数 $F()$ 调用的次数为 9。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_07",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "设有如下递归函数，在 func(func(5)) 的执行过程中，第 4 个被执行的 func 函数是（）。 ```c int func(int x) { if (x <= 3) return 2; else return func(x - 2) + func(x - 4); } ```",
      "options": {
        "A": "func(2)",
        "B": "func(3)",
        "C": "func (4)",
        "D": "func(5)"
      },
      "answer": [
        "C"
      ],
      "explanation": "![](images/1350bc943fa0552877835b17562d89a976c158e79858b899a44ae036b69627a2.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"F(8)\"] --> B[\"F(6)\"]\n    A --> C[\"F(4)\"]\n    B --> D[\"F(4)\"]\n    B --> E[\"F(2)\"]\n    C --> F[\"F(2)\"]\n    C --> G[\"F(0)\"]\n    D --> H[\"F(2)\"]\n    D --> I[\"F(0)\"]\n```\n</details>\n\n首先，执行内层参数 $\\mathrm{func}(5) = \\mathrm{func}(3) + \\mathrm{func}(1) = 4$ ，共执行3次func函数。然后，执行 $\\mathrm{func}(\\mathrm{func}(5)) = \\mathrm{func}(4) = \\mathrm{func}(2) + \\mathrm{func}(0) = 4$ ，因此第4个被执行的func函数是func(4)。也可以采用画出递归调用树的方式，即某个函数的执行次序等于其在递归调用树的先序遍历中的次序。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_08",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "对于一个问题的递归算法求解和其相对应的非递归算法求解，（）。",
      "options": {
        "A": "递归算法通常效率高一些",
        "B": "非递归算法通常效率高一些",
        "C": "两者相同",
        "D": "无法比较"
      },
      "answer": [
        "B"
      ],
      "explanation": "通常情况下，递归算法在计算机实际执行的过程中包含很多的重复计算，所以效率会低。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_09",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "执行函数时，其局部变量一般采用（）进行存储。",
      "options": {
        "A": "树形结构",
        "B": "静态链表",
        "C": "栈结构",
        "D": "队列结构"
      },
      "answer": [
        "C"
      ],
      "explanation": "调用函数时，系统会为调用者构造一个由参数表和返回地址组成的活动记录，并将记录压入系统提供的栈中，若被调用函数有局部变量，也要压入栈中。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_10",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "执行（）操作时，需要使用队列作为辅助存储空间。",
      "options": {
        "A": "查找散列（哈希）表",
        "B": "广度优先搜索图",
        "C": "前序（根）遍历二叉树",
        "D": "深度优先搜索图"
      },
      "answer": [
        "B"
      ],
      "explanation": "本题涉及第 5 章和第 6 章的内容，图的广度优先搜索类似于树的层序遍历，都要借助于队列。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_11",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列说法中，正确的是（）。",
      "options": {
        "A": "消除递归不一定需要使用栈",
        "B": "对同一输入序列进行两组不同的合法入栈和出栈组合操作，所得的输出序列也一定相同",
        "C": "通常使用队列来处理函数或过程调用",
        "D": "队列和栈都是运算受限的线性表，只允许在表的两端进行运算"
      },
      "answer": [
        "A"
      ],
      "explanation": "使用栈可以模拟递归的过程，以此来消除递归，但对于单向递归和尾递归而言，可以用迭代的方式来消除递归，选项 A 正确。不同的入栈和出栈组合操作，会产生许多不同的输出序列，B错误。通常使用栈来处理函数或过程调用，选项 C 错误。队列和栈都是操作受限的线性表，但只有队列允许在表的两端进行运算，而栈只允许在栈顶方向进行操作，选项 D 错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_12",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2009 统考真题】为解决计算机主机与打印机之间速度不匹配的问题，通常设置一个打印数据缓冲区，主机将要输出的数据依次写入该缓冲区，而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是（）。",
      "options": {
        "A": "栈",
        "B": "队列",
        "C": "树",
        "D": "图"
      },
      "answer": [
        "B"
      ],
      "explanation": "在提取数据时必须保持原来数据的顺序，所以缓冲区的特性是先进先出。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_13",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2012 统考真题】已知操作符包括“+”“-”“\\*”“/”“（”和“）”。将中缀表达式 $a + b - a^{*}((c + d) / e - f) + g$ 转换为等价的后缀表达式 $ab + acd + e / f - * - g +$ 时，用栈来存放暂时还不能确定运算次序的操作符。栈初始时为空，转换过程中同时保存在栈中的操作符的最大个数是（）。",
      "options": {
        "A": "5",
        "B": "7",
        "C": "8",
        "D": "11"
      },
      "answer": [
        "A"
      ],
      "explanation": "在中缀表达式转后缀表达式的过程中，扫描到操作数时直接输出，扫描到操作符时根据其优先级进行相应的出入栈操作。有几点需要注意：① 若遇到界限符“（”，则直接入栈；② 若遇到界限符“）”，则不入栈，且依次弹出栈顶运算符，直到遇到“（”为止，并删除“（”；③ 若当前运算符的优先级高于栈顶运算符或遇到栈顶为“（”，则直接入栈；④ 若当前运算符的优先级低于或等于栈顶运算符，则依次弹出栈中的运算符并加入后缀表达式，直到遇到一个优先级低于它的运算符或遇到“（”或栈空为止，之后将当前运算符入栈。\n\n求栈中操作符的最大个数时，为简单起见，可省略对操作数的处理。\n\n<table><tr><td>步</td><td>待处理运算符</td><td>栈</td><td>扫描运算符</td><td>动作</td></tr><tr><td>1</td><td>+b-a*( (c+d) /e-f)+g</td><td></td><td>+</td><td>+入栈</td></tr><tr><td>2</td><td>-a*( (c+d) /e-f)+g</td><td>+</td><td>-</td><td>-优先级等于栈顶+,弹出+, -入栈</td></tr><tr><td>3</td><td>*( (c+d) /e-f)+g</td><td>-</td><td>*</td><td>*优先级高于栈顶-, *入栈</td></tr><tr><td>4</td><td>((c+d) /e-f)+g</td><td>-*</td><td>(</td><td>(直接入栈</td></tr><tr><td>5</td><td>(c+d) /e-f)+g</td><td>-* (</td><td>(</td><td>(直接入栈</td></tr><tr><td>6</td><td>+d) /e-f)+g</td><td>-* ( (</td><td>+</td><td>栈顶为(, +直接入栈</td></tr><tr><td>7</td><td>)/e-f)+g</td><td>-* ( (+</td><td>)</td><td>遇到),弹出+,删除(</td></tr><tr><td>8</td><td>/e-f)+g</td><td>-* (</td><td>/</td><td>栈顶为(, /直接入栈</td></tr><tr><td>9</td><td>-f)+g</td><td>-* ( /</td><td>-</td><td>-优先级低于栈顶/,弹出/, -入栈</td></tr><tr><td>10</td><td>)+g</td><td>-* (-</td><td>)</td><td>遇到),弹出-,删除(</td></tr><tr><td>11</td><td>+g</td><td>-*</td><td>+</td><td>+优先级低于栈顶*,等于-,依次弹出*和-; +入栈</td></tr><tr><td>12</td><td></td><td>+</td><td></td><td></td></tr></table>\n\n由上述过程可知，栈中操作符的最大个数为 5。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_14",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2014 统考真题】假设栈初始为空，将中缀表达式 $a / b + (c * d - e * f) / g$ 转换为等价的后缀表达式的过程中，当扫描到 $f$ 时，栈中的元素依次是（）。",
      "options": {
        "A": "+ (\\*-",
        "B": "$+(-\\star)$",
        "C": "$/ + (* - *)$",
        "D": "/+-\\*"
      },
      "answer": [
        "B"
      ],
      "explanation": "中缀表达式 $a/b+(c*d-e*f)/g$ 转换为后缀表达式的过程如下：\n\n<table><tr><td>步</td><td>待处理序列</td><td>栈</td><td>后缀表达式</td><td>扫描项</td><td>动作</td></tr><tr><td>1</td><td>a/b+(c*d-e*f)/g</td><td></td><td></td><td>a</td><td>a加入后缀表达式</td></tr><tr><td>2</td><td>/b+(c*d-e*f)/g</td><td></td><td>a</td><td>/</td><td>/入栈</td></tr><tr><td>3</td><td>b+(c*d-e*f)/g</td><td>/</td><td>a</td><td>b</td><td>b加入后缀表达式</td></tr><tr><td>4</td><td>+(c*d-e*f)/g</td><td>/</td><td>ab</td><td>+</td><td>+优先级低于栈顶的/,弹出/,+入栈</td></tr><tr><td>5</td><td>(c*d-e*f)/g</td><td>+</td><td>ab/</td><td>(</td><td>(入栈</td></tr><tr><td>6</td><td>c*d-e*f)/g</td><td>+(</td><td>ab/</td><td>c</td><td>c加入后缀表达式</td></tr><tr><td>7</td><td>*d-e*f)/g</td><td>+(</td><td>ab/c</td><td>*</td><td>栈顶为(,*入栈</td></tr><tr><td>8</td><td>d-e*f)/g</td><td>+(*)</td><td>ab/c</td><td>d</td><td>d加入后缀表达式</td></tr><tr><td>9</td><td>-e*f)/g</td><td>+(*)</td><td>ab/cd</td><td>-</td><td>-优先级低于栈顶的*,弹出*,-入栈</td></tr><tr><td>10</td><td>e*f)/g</td><td>+(-</td><td>ab/cd*</td><td>e</td><td>e加入后缀表达式</td></tr><tr><td>11</td><td>*f)/g</td><td>+(-</td><td>ab/cd*e</td><td>*</td><td>*优先级高于栈顶的-,*入栈</td></tr><tr><td>12</td><td>f)/g</td><td>+(-*)</td><td>ab/cd*e</td><td>f</td><td>f加入后缀表达式</td></tr><tr><td>13</td><td>)/g</td><td>+(-*)</td><td>ab/cd*ef</td><td>)</td><td>遇到),依次弹出*、-加入表达式,删除(</td></tr><tr><td>14</td><td>/g</td><td>+</td><td>ab/cd*ef*-</td><td>/</td><td>/优先级高于栈顶的+,/入栈</td></tr><tr><td>15</td><td>g</td><td>+/</td><td>ab/cd*ef*-</td><td>g</td><td>g加入后缀表达式</td></tr><tr><td>16</td><td></td><td>+/</td><td>ab/cd*ef*-g</td><td></td><td>扫描完毕,运算符依次弹出加入表达式</td></tr><tr><td>17</td><td></td><td></td><td>ab/cd*ef*-g/+</td><td></td><td>完成</td></tr></table>\n\n由此可知，当扫描到 f 时，栈中的元素依次是 + (- \\*。\n\n【另解】采用手算方法，得出中缀式 $a / b + (c^{*}d - e^{*}f) / g$ 对应的后缀式为 $ab / cd^{*}ef^{*} - g / +$ 。中缀表达式转后缀表达式时，操作数都直接输出，因此操作数的顺序是固定的。扫描到 $f$ 时，在后缀表达式 $f$ 后面的运算符要么还未入栈，要么还在栈中，需要结合中缀式来判断， $f$ 后面依次出栈的运算符为 $* - / +$ ，/在中缀表达式 $f$ 之后，此时还未入栈，因此栈中的运算符（从栈底到栈顶）为 $+ - *$ ；此外，已入栈的界限符（此时还未消解，因此(也还在栈中，栈中的元素依次是 $+ (-\\star)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_15",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2015 统考真题】已知程序如下: ```lisp int S(int n) { return (n<=0)?0:S(n-1)+n;} void main() { cout<<S(1);} } ``` 程序运行时使用栈来保存调用过程的信息，自栈底到栈顶保存的信息依次对应的是（）。",
      "options": {
        "A": "main()→S(1)→S(0)",
        "B": "S(0)→S(1)→main()",
        "C": "main()→S(0)→S(1)",
        "D": "$S(1) \\rightarrow S(0) \\rightarrow \\text{main}()$"
      },
      "answer": [
        "A"
      ],
      "explanation": "递归调用函数时，在系统栈中保存的函数信息需满足先进后出的特点，依次调用了main(), S(1), S(0)，所以栈底到栈顶的信息依次是main(), S(1), S(0)。\n\n# 注意\n\n在递归中，系统为每一层的返回点、局部变量、传入实参等开辟了递归工作栈来存储。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_16",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2016 统考真题】设有如下图所示的火车车轨，入口和出口之间有 n 条轨道，列车的行进方向均为从左至右，列车可驶入任意一条轨道。现有编号为 1～9 的 9 列列车，驶入的次序依次是 8, 4, 2, 5, 3, 9, 1, 6, 7。若期望驶出的次序依次为 1～9，则 n 至少是（）。 ![](images/5d0214dc222bb1570f3030e8861e3918a096c2b360442f413556ca1dee7e32d9.jpg) <details> <summary>text_image</summary> 761935248 入口 987654321 出口 轨道 </details>",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "C"
      ],
      "explanation": "根据题意：入队顺序为8,4,2,5,3,9,1,6,7，出队顺序为 $1\\sim 9$ 。入口和出口之间有多个队列（ $n$ 条轨道），且每个队列（轨道）可容纳多个元素（多列列车），为便于区分，队列用字母编号。分析如下：显然先入队的元素必须小于后入队的元素（否则，若8和4入同一个队列，8在4前面，则出队时也只能8在4前面），这样8入队列A，4入队列B，2入队列C，5入队列B（按照前述原则“大的元素在小的元素后面”也可将5入队列C，但这时剩下的元素3就必须放入一个新的队列中，无法确保“至少”），3入队列C，9入队列A，这时共占了3个队列，后面还有元素1，直接再用一个新的队列D，1从队列D出队后，剩下的元素6和7或入队列B，或入队列C。综上，共占用了4个队列。当然还有其他的入队、出队情况，请读者自己推演，但要确保满足：① 队列中后面的元素大于前面的元素；② 确保占用最少（满足题意中“至少”）的队列。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_17",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2017 统考真题】下列关于栈的叙述中，错误的是（）。 I. 采用非递归方式重写递归程序时必须使用栈 II. 函数调用时，系统要用栈保存必要的信息 III. 只要确定了入栈次序，即可确定出栈次序 IV. 栈是一种受限的线性表，允许在其两端进行操作",
      "options": {
        "A": "仅 I",
        "B": "仅 I、II、III",
        "C": "仅 I、III、IV",
        "D": "仅 II、III、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "说法 I 的反例：计算斐波那契数列迭代实现只需要一个循环即可实现。说法 III 的反例：入栈序列为 1, 2，进行 Push, Push, Pop, Pop 操作，出栈次序为 2、1；进行 Push, Pop, Push, Pop 操作，出栈次序为 1, 2。说法 IV，栈是一种受限的线性表，只允许在一端进行操作。说法 II 正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_18",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2018 统考真题】若栈 S1 中保存整数，栈 S2 中保存运算符，函数 F() 依次执行下述各步操作： 1）从 S1 中依次弹出两个操作数 a 和 b。 2）从 S2 中弹出一个运算符 op。 3）执行相应的运算 b op a。 4）将运算结果压入 S1 中。 假定 S1 中的操作数依次是 5,8,3,2（2 在栈顶），S2 中的运算符依次是 \\*、-、+（+ 在栈顶）。调用 3 次 F() 后，S1 栈顶保存的值是（）。",
      "options": {
        "A": "-15",
        "B": "15",
        "C": "-20",
        "D": "20"
      },
      "answer": [
        "B"
      ],
      "explanation": "第一次调用：① 从 s1 中弹出 2 和 3；② 从 s2 中弹出+；③ 执行 $3+2=5$ ；④ 将 5 压入 s1 中，第一次调用结束后 s1 中剩余 5、8、5（5 在栈顶），s2 中剩余\\*、-（-在栈顶）。第二\n\n次调用：① 从 s1 中弹出 5 和 8；② 从 s2 中弹出-；③ 执行 8-5=3；④ 将 3 压入 s1 中，第二次调用结束后 s1 中剩余 5、3（3 在栈顶），s2 中剩余\\*。第三次调用：① 从 s1 中弹出 3 和 5；② 从 s2 中弹出\\*；③ 执行 5\\*3=15；④ 将 15 压入 s1 中，第三次调用结束后 s1 中仅剩余 15，s2 为空。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_19",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2024 统考真题】与表达式 $x + y^{*}(z - u)/v$ 等价的后缀表达式是（）。",
      "options": {
        "A": "$xyzu^{-*}v/+$",
        "B": "xyzu-v/\\*+",
        "C": "$+x/*y-zuv$",
        "D": "$+x*y/-zuv$"
      },
      "answer": [
        "A"
      ],
      "explanation": "根据中缀表达式画出对应的二叉树如右图所示，对该二叉树进行后序遍历即可得到后缀表达式为 $xyzu^{-*}v/+$ 。本题也可采用本书前面描述的手算方法。\n\n![](images/1f58424745b26624181872aba8c45733433e9de8f118a5abec5c425d21698d8b.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"+\"] --> B[\"x\"]\n    A --> C[\"/\"]\n    C --> D[\"v\"]\n    C --> E[\"*\"]\n    E --> F[\"y\"]\n    E --> G[\"-\"]\n    G --> H[\"z\"]\n    G --> I[\"u\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-3-6_20",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2025 统考真题】已知算法 A 用于检查字符串中各类括号是否匹配，A 执行过程中使用初始为空的栈保存遇到的括号。若栈的容量是 3，则下列选项中，A 不能处理的是（）。",
      "options": {
        "A": "$(a + [b + (c + d) / e] + f) + g - h$",
        "B": "$[a^{*}((b + c) / (d - e) + f / g) - h]$",
        "C": "$[a^{*}(b-(c-d)^{*}e/(f+g))-h]$",
        "D": "$[a - (b + [c^* (d + e) - f] + g + h)]$"
      },
      "answer": [
        "D"
      ],
      "explanation": "该算法利用栈来检查括号匹配：遇到左括号时入栈，遇到右括号时出栈并与之匹配。由于栈的容量为3，因此最多只能容纳3个未匹配的左括号，即最多支持3层嵌套的括号结构。逐项分析各选项的括号嵌套深度：对于选项A，括号序列为([()])，最大嵌套深度为3，依次入栈([()\n\n未超过栈容量。对于选项B，括号序列为[（）]，最大深度为3，依次入栈[（，栈容量足够。对于选项C，括号序列为[（）]，同样最大深度为3，栈容量足够。对于选项D，括号序列为[（）]，最大嵌套深度达到4。扫描至\\*后的(时，栈中已存有[（三个左括号，此时，需要将第四个左括号(入栈，但栈容量仅为3，无法继续入栈，因此该表达式无法被正确处理。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-4-5_05",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "二维数组 A 按行优先存储, 其中每个元素占 1 个存储单元。若 A[1][1] 的存储地址为 420, A[3][3] 的存储地址为 446, 则 A[5][5] 的存储地址为 ( )。",
      "options": {
        "A": "472",
        "B": "471",
        "C": "458",
        "D": "457"
      },
      "answer": [
        "A"
      ],
      "explanation": "本题未直接给出数组 A 的行数和列数，因此需要根据题目中的信息来推理。因为该二维数组按行优先存储，且 A[3][3] 的存储地址为 446，所以 A[3][1] 的存储地址为 444，又 A[1][1] 的存储地址为 420，显然 A[1][1] 和 A[3][1] 正好相差 2 行，所以该矩阵的列数为 12。而 A[5][3] 和 A[3][3] 正好相差 2 行，A[5][5] 和 A[5][3] 又相差 2 个元素，所以 A[5][5] 的存储地址是 $446 + 24 + 2 = 472$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-4-5_06",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "将三对角矩阵即数组 A[1...100][1...100] 按行优先存入一维数组 B[1...298] 中，数组 A 中元素 A[66][65] 在数组 B 中的位置 k 为（）。",
      "options": {
        "A": "198",
        "B": "195",
        "C": "197",
        "D": "196"
      },
      "answer": [
        "B"
      ],
      "explanation": "对于三对角矩阵，将 A[1…n][1…n] 压缩至 B[1…3n-2] 时， $a_{i,j}$ 与 $b_{k}$ 的对应关系为 $k=2i+j-2$ 。则 A 中的元素 A[66][65] 在数组 B 中的位置 k 为 $2\\times66+65-2=195$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-4-5_07",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "若将 $n$ 阶上三角矩阵 $\\mathbf{A}$ 按列优先级压缩存放在一维数组 $\\mathrm{B}[1\\dots n(n + 1) / 2 + 1]$ 中，则存放到 $\\mathrm{B}[k]$ 中的非零元素 $a_{i,j}$ （ $1\\leqslant i,j\\leqslant n$ ）的下标 $i,j$ 与 $k$ 的对应关系是（）。",
      "options": {
        "A": "$i(i+1)/2+j$",
        "B": "$i(i-1)/2 + j - 1$",
        "C": "$j(j-1)/2+i$",
        "D": "$j(j - 1) / 2 + i - 1$"
      },
      "answer": [
        "C"
      ],
      "explanation": "按列优先存储，所以元素 $a_{i,j}$ 前面有 j-1 列，共有 $1+2+3+\\cdots+j-1=j(j-1)/2$ 个元素，元素 $a_{i,j}$ 在第 j 列上是第 i 个元素，数组 B 的下标是从 1 开始，因此 $k=j(j-1)/2+i$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-4-5_08",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "若将 $n$ 阶下三角矩阵 $A$ 按列优先顺序压缩存放在一维数组 $\\mathrm{B}[1\\dots n(n + 1) / 2 + 1]$ 中，则存放到 $\\mathrm{B}[k]$ 中的非零元素 $a_{i,j}$ （ $1\\leqslant i,j\\leqslant n$ ）的下标 $i,j$ 与 $k$ 的对应关系是（）。",
      "options": {
        "A": "$(j-1)(2n-j+1)/2+i-j$",
        "B": "$(j - 1)(2n - j + 2) / 2 + i - j + 1$",
        "C": "$(j-1)(2n-j+2)/2+i-j$",
        "D": "$(j - 1)(2n - j + 1) / 2 + i - j - 1$"
      },
      "answer": [
        "B"
      ],
      "explanation": "按列优先存储，故元素 $a_{ij}$ 前有j-1列，共有 $n+(n-1)+\\cdots+(n-j+2)=(j-1)(2n-j+2)/2$ 个元素，元素 $a_{ij}$ 是第j列上第 $i-j+1$ 个元素，数组B的下标从1开始， $k=(j-1)(2n-j+2)/2+i-j+1$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-4-5_09",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "稀疏矩阵采用压缩存储后的缺点主要是（）。",
      "options": {
        "A": "无法判断矩阵的行列数",
        "B": "丧失随机存取的特性",
        "C": "无法由行、列值查找某个矩阵元素",
        "D": "使矩阵元素之间的逻辑关系更复杂"
      },
      "answer": [
        "B"
      ],
      "explanation": "稀疏矩阵通常采用三元组来压缩存储，存储矩阵元素的行列下标和相应的值，因此不能根据矩阵元素的行列下标快速定位矩阵元素，失去了随机存取的特性。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-4-5_10",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于矩阵的说法中，正确的是（）。 I. 在 $n(n > 3)$ 阶三对角矩阵中，每行都有3个非零元素 II. 稀疏矩阵的特点是矩阵中的元素较少",
      "options": {
        "A": "仅 I",
        "B": "仅 II",
        "C": "I 和 II",
        "D": "无正确项"
      },
      "answer": [
        "D"
      ],
      "explanation": "在三对角矩阵中，第1行和最后1行只有2个非零元，其余各行均有3个非零元。稀疏矩阵的特点是矩阵中非零元的个数较少。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-4-5_11",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2016 统考真题】有一个 100 阶的三对角矩阵 M，其元素 $m_{ij}$ （ $1 \\leqslant i, j \\leqslant 100$ ）按行优先依次压缩存入下标从 0 开始的一维数组 N 中。元素 $m_{30,30}$ 在 N 中的下标是（）。",
      "options": {
        "A": "86",
        "B": "87",
        "C": "88",
        "D": "89"
      },
      "answer": [
        "B"
      ],
      "explanation": "三对角矩阵如下所示。\n\n$$\n\\left[ \\begin{array}{c c c c c c} a _ {1, 1} & a _ {1, 2} & & & & \\\\ a _ {2, 1} & a _ {2, 2} & a _ {2, 3} & & 0 & \\\\ & a _ {3, 2} & a _ {3, 3} & a _ {3, 4} & & \\\\ & & \\ddots & \\ddots & \\ddots & \\\\ & 0 & & a _ {n - 1, n - 2} & a _ {n - 1, n - 1} & a _ {n - 1, n} \\\\ & & & & a _ {n, n - 1} & a _ {n, n} \\end{array} \\right]\n$$\n\n采用压缩存储, 将 3 条对角线上的元素按行优先方式存放在一维数组 B 中, 且 $a_{1,1}$ 存放于 B[0] 中, 其存储形式如下所示:\n\n<table><tr><td> $a_{1,1}$ </td><td> $a_{1,2}$ </td><td> $a_{2,1}$ </td><td> $a_{2,2}$ </td><td> $a_{2,3}$ </td><td> $\\cdots$ </td><td> $a_{n-1,n}$ </td><td> $a_{n,n-1}$ </td><td> $a_{n,n}$ </td></tr></table>\n\n可以计算矩阵 A 中 3 条对角线上的元素 $a_{i,j}$ ( $1 \\leqslant i, j \\leqslant n, |i-j| \\leqslant 1$ ) 在一维数组 B 中存放的下标为 $k = 2i + j - 3$ ，公式很难记忆，我们通常采用解法 2。\n\n解法 1：针对该题，仅需将数字逐一代入公式： $k=2\\times30+30-3=87$ ，结果为 87。\n\n解法 2：观察上图的三对角矩阵不难发现，第一行有两个元素，剩下的在元素 $m_{30,30}$ 所在行之前的 28 行（注意下标 $1 \\leqslant i, j \\leqslant 100$ ）中，每行都有 3 个元素，而 $m_{30,30}$ 之前仅有一个元素 $m_{30,29}$ ，不难发现元素 $m_{30,30}$ 在数组 N 中的下标是 $2 + 28 \\times 3 + 2 - 1 = 87$ 。\n\n# 注意\n\n矩阵和数组的下标从0或1开始（如矩阵可能从 $a_{0,0}$ 或 $a_{1,1}$ 开始，数组可能从B[0]或B[1]开始），这时就需要适时调整计算方法（方法无非是多计算1或少计算1的问题）。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-4-5_12",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2017 统考真题】适用于压缩存储稀疏矩阵的两种存储结构是（）。",
      "options": {
        "A": "三元组表和十字链表",
        "B": "三元组表和邻接矩阵",
        "C": "十字链表和二叉链表",
        "D": "邻接矩阵和十字链表"
      },
      "answer": [
        "A"
      ],
      "explanation": "三元组表的结点存储了行（row）、列（col）、值（value）三种信息，是主要用来存储稀疏矩阵的一种数据结构。十字链表将行单链表和列单链表结合起来存储稀疏矩阵。邻接矩阵空间复杂度达 $O(n^{2})$ ，不适合存储稀疏矩阵。二叉链表又名左孩子右兄弟表示法，可用于表示树或森林。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-4-5_13",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2018 统考真题】设有一个 $12 \\times 12$ 阶对称矩阵 M，将其上三角部分的元素 $m_{i,j} (1 \\leqslant i \\leqslant j \\leqslant 12)$ 按行优先存入 C 语言的一维数组 N 中，元素 $m_{6,6}$ 在 N 中的下标是（）。",
      "options": {
        "A": "50",
        "B": "51",
        "C": "55",
        "D": "66"
      },
      "answer": [
        "A"
      ],
      "explanation": "在 C 语言中，数组 N 的下标从 0 开始。第一个元素 $m_{1,1}$ 对应存入 $n_{0}$ ，矩阵 M 的第一行有 12 个元素，第二行有 11 个，第三行有 10 个，第四行有 9 个，第五行有 8 个，所以 $m_{6,6}$ 是第 $12 + 11 + 10 + 9 + 8 + 1 = 51$ 个元素，下标应为 50。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-4-5_14",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2020 统考真题】将一个 $10 \\times 10$ 阶对称矩阵 M 的上三角部分的元素 $m_{i,j} (1 \\leqslant i \\leqslant j \\leqslant 10)$ 按列优先存入 C 语言的一维数组 N 中，元素 $m_{7,2}$ 在 N 中的下标是（）。",
      "options": {
        "A": "15",
        "B": "16",
        "C": "22",
        "D": "23"
      },
      "answer": [
        "C"
      ],
      "explanation": "上三角矩阵按列优先存储，先存储只有1个元素的第一列，再存储有2个元素的第二列，以此类推。 $m_{7,2}$ 位于左下角，对应右上角的元素为 $m_{2,7}$ ，在 $m_{2,7}$ 之前存有\n\n第1列：1\n\n第2列：2\n\n......\n\n第6列：6\n\n第7列：1\n\n前面共存储有 $1 + 2 + 3 + 4 + 5 + 6 + 1 = 22$ 个元素（数组下标范围为 0～21），注意数组下标从 0 开始，所以 $m_{2,7}$ 在数组 N 中的下标为 22，即 $m_{7,2}$ 在数组 N 中的下标为 22。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-4-5_15",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2021 统考真题】二维数组 A 按行优先方式存储，每个元素占用 1 个存储单元。若元素 A[0][0] 的存储地址是 100, A[3][3] 的存储地址是 220，则元素 A[5][5] 的存储地址是（）。",
      "options": {
        "A": "295",
        "B": "300",
        "C": "301",
        "D": "306"
      },
      "answer": [
        "B"
      ],
      "explanation": "二维数组 A 按行优先存储，每个元素占用 1 个存储单元，由 A[0][0] 和 A[3][3] 的存储地址可知，A[3][3] 是二维数组 A 中的第 121 个元素，假设二维数组 A 的每行有 n 个元素，则 $n \\times 3 + 4 = 121$ ，求得 n = 39，所以元素 A[5][5] 的存储地址为 $100 + 39 \\times 5 + 6 - 1 = 300$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_3-4-5_16",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "栈、队列和数组",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2023 统考真题】若采用三元组表存储结构存储稀疏矩阵 $M$ ，则除三元组表外，下列数据中还需要保存的是（）。 I. $M$ 的行数 II. $M$ 中包含非零元素的行数 III. M 的列数 IV. $M$ 中包含非零元素的列数",
      "options": {
        "A": "仅 I、III",
        "B": "仅 I、IV",
        "C": "仅 II、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "A"
      ],
      "explanation": "用三元组表存储结构存储稀疏矩阵 M 时，每个非零元素都由三元组（行标、列标、关键字\n\n值）组成。但是，仅通过三元组表中的元素无法判断稀疏矩阵 M 的大小，因此还要保存 M 的行数和列数。此外，还可以保存 M 的非零元素个数。例如，右图所示的两个稀疏矩阵的三元组表是相同的，若不保存行数和列数，则无法判断两个稀疏矩阵的大小。\n\n<table><tr><td>0</td><td>2</td><td>0</td><td>0</td></tr><tr><td>0</td><td>0</td><td>5</td><td>0</td></tr><tr><td>0</td><td>0</td><td>0</td><td>0</td></tr><tr><td>0</td><td>0</td><td>0</td><td>0</td></tr></table>\n\n<table><tr><td>0</td><td>2</td><td>0</td></tr><tr><td>0</td><td>0</td><td>5</td></tr><tr><td>0</td><td>0</td><td>0</td></tr></table>\n\n# 归纳总结\n\n本章所介绍的几种数据结构是线性表的应用与推广，考试中主要以选择题形式考查，但栈和队列仍可能出现在算法设计题中。不少读者看到教材中列出大量操作函数时容易产生畏难情绪：如果考试中出现了栈或队列相关的算法大题，是否需要完整写出每个操作函数？\n\n其实，在算法设计题中，栈和队列通常作为辅助工具用于解决其他问题，无须严格按照模块化方式分函数实现。我们完全可以将其声明和核心操作写得简洁明了。以顺序栈为例：\n\n(1) 声明并初始化栈:\n\n```txt\nElemtype stack[maxSize]; int top=-1; //两句代码用来声明和初始化\n```\n\n(2) 入栈操作:\n\n```javascript\nstack[++top]=x; //一句代码实现入栈操作\n```\n\n(3) 出栈操作:\n\n```txt\nX=stack[top--]; //单日运算符在变量之前表示“先运算后使用”，之后则相反\n```\n\n对于链式栈，同样只需定义一个结构体，然后根据需要从常规操作中摘取关键语句，直接嵌入到自己的解题代码中即可，无须完整实现所有接口。此外，在考研真题中，链式栈出现的概率远低于顺序栈，因此大家应有所侧重，多训练与顺序栈相关的题目。\n\n# 思维拓展\n\n设计一个栈，使它可以在 $O(1)$ 的时间复杂度内实现Push、Pop和min操作。所谓min操作，是指得到栈中最小的元素。\n\n# 提示\n\n使用双栈，两个栈是同步关系。主栈是普通栈，用来实现栈的基本操作 Push 和 Pop；辅助栈用来记录同步的最小值 min，例如元素 x 入栈，则辅助栈 stack\\_min[top++] = (x < min) ? x : min；即在每次 Push 中，都将当前最小元素放到 stack\\_min 的栈顶。在主栈中 Pop 最小元素 y 时，stack\\_min 栈中相同位置的最小元素 y 也会随着 top--而出栈。因此 stack\\_min 的栈顶元素必然是 y 之前入栈的最小元素。本题是典型的以空间换时间的算法。\n\n# 购买王道书，就上\n\n# 王道官方考研书店\n\nwangdao.taobao.com\n\n![](images/0e3e5368a712efcbde1de1fa68c1896cfa4e89d993a399d5a25652c8ac209edd.jpg)\n\n<details>\n<summary>text_image</summary>\n\nQR code with central orange logo containing the Chinese character '淘'\n</details>\n\n# 【考纲内容】\n\n字符串模式匹配\n\n# 【知识框架】\n\n![](images/d3988bdd2fa2684df7d0a1497437140c1273000157d2f692abd66a92f7fadd5a.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"串\"] --> B[\"基本概念：主串、子串、串长\"]\n    A --> C[\"存储结构\"]\n    C --> D[\"定长顺序存储\"]\n    C --> E[\"堆分配存储\"]\n    C --> F[\"块链存储\"]\n    A --> G[\"模式匹配算法\"]\n    G --> H[\"暴力匹配法\"]\n    G --> I[\"KMP 算法\"]\n    I --> J[\"部分匹配值表\"]\n    I --> K[\"next 数组\"]\n    I --> L[\"next 函数的推理过程\"]\n    G --> M[\"KMP 算法的进一步改进——nextval 数组\"]\n```\n</details>\n\n扫一扫   \n![](images/56738a6878b677e4ec4a1c67f349eb817c4e40c90d7d00a6be291f2d625f60ed.jpg)  \n视频讲解\n\n# 【复习提示】\n\n本章为统考大纲第6章内容，根据读者建议单独成章。大纲仅要求掌握字符串模式匹配，重点是理解KMP算法的原理、next数组和nextval数组的推导过程。手工计算next数组时，可先求出部分匹配值表再进行转换，也可直接依据递推公式求解。\n\n# \\*4.1 串的定义和实现①\n\n字符串简称串，计算机中非数值处理的对象基本上都是字符串数据。常见的信息检索系统（如搜索引擎）、文本编辑程序（如 Word）、问答系统、自然语言翻译系统等，均以字符串作为核心处理对象。本章将详细介绍字符串的存储结构及其相关操作。",
      "source_file": "wiki/sources/数据结构/chapters/ch03-第3章-栈、队列和数组.md"
    },
    {
      "id": "数据结构_4-2-4_08",
      "book": "数据结构",
      "chapter": 4,
      "chapter_title": "串",
      "section": "4.2.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "设主串 S='aabaaaba'，模式串 T='aaab'，采用改进后的 KMP 算法进行模式匹配，到匹配成功时为止，在匹配过程中进行的单个字符间的比较次数是（）。",
      "options": {
        "A": "9",
        "B": "8",
        "C": "7",
        "D": "6"
      },
      "answer": [
        "C"
      ],
      "explanation": "假设位序从 1 开始，计算出 T 的 nextval 数组如下。\n\n<table><tr><td>编号</td><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><td>S</td><td>a</td><td>a</td><td>a</td><td>b</td></tr><tr><td>nextval</td><td>0</td><td>0</td><td>0</td><td>3</td></tr></table>\n\n采用改进的 KMP 算法时: 第一趟, 经过 3 次比较后, 发现 S[3]≠T[3]; 第二趟, nextval[3]=0, 因此开始用 S[4] 和 T[1] 比较, 经过 4 次比较后, 匹配成功。整个匹配过程如下。\n\n<table><tr><td></td><td>a</td><td>a</td><td>b</td><td>a</td><td>a</td><td>a</td><td>b</td><td>a</td></tr><tr><td>第一趟</td><td>a</td><td>a</td><td>a</td><td>b</td><td></td><td></td><td></td><td></td></tr><tr><td>第二趟</td><td></td><td></td><td></td><td>a</td><td>a</td><td>a</td><td>b</td><td></td></tr></table>\n\n总比较次数为 $3 + 4 = 7$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch04-第4章-串.md"
    },
    {
      "id": "数据结构_4-2-4_09",
      "book": "数据结构",
      "chapter": 4,
      "chapter_title": "串",
      "section": "4.2.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "KMP 算法使用 nextval 数组进行模式匹配，模式串为 S='ababaaa'，当主串中的某个字符与 S 中的第 6 个字符失配时，S 向右滑动的距离是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "B"
      ],
      "explanation": "假设位序从 0 开始，计算出 nextval 数组。当比较到 S[j] 失配时，模式串向右滑动的距离为 j-nextval[j]（ $0 \\leqslant j \\leqslant 6$ ），由下图可知，当 j = 5 时向右滑动的距离为 5 - 3 = 2。\n\n<table><tr><td>编号 j</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr><tr><td>S[j]</td><td>a</td><td>b</td><td>a</td><td>b</td><td>a</td><td>a</td><td>a</td></tr><tr><td>next[j]</td><td>-1</td><td>0</td><td>0</td><td>1</td><td>2</td><td>3</td><td>1</td></tr><tr><td>nextval[j]</td><td>-1</td><td>0</td><td>-1</td><td>0</td><td>-1</td><td>3</td><td>1</td></tr><tr><td>j-nextval[j]</td><td>1</td><td>1</td><td>3</td><td>3</td><td>5</td><td>2</td><td>5</td></tr></table>\n\n此外，若对 KMP 算法很熟悉，则此类题也可直接动手模拟，而不需要求 nextval 数组，与第 6 个字符匹配失败，说明前面的 ababa 匹配成功，S 可向右滑动 2 位继续尝试匹配。\n\n![](images/bcb7ad020ca8a9e3e6733c1d118f640e6bb96681990fe4f655ec2f03f6f5dc33.jpg)\n\n<details>\n<summary>text_image</summary>\n\n匹配失败，说明此元素不是a\n主串： a b a b a ? ? ? ? ?\n第一趟匹配 模式串： a b a b a a a\n此元素继续与元素b比较\n主串： a b a b a ? ? ? ? ?\n第二趟匹配 模式串： a b a b a a a\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch04-第4章-串.md"
    },
    {
      "id": "数据结构_4-2-4_10",
      "book": "数据结构",
      "chapter": 4,
      "chapter_title": "串",
      "section": "4.2.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "【2015 统考真题】已知字符串 s 为 'abaabaabacacaabaabcc'，模式串 t 为 'abaabc'。采用 KMP 算法进行匹配，第一次出现 “失配”（s[i]≠t[j]）时，i=j=5，则下次开始匹配时，i 和 j 的值分别是（）。",
      "options": {
        "A": "i=1, j=0",
        "B": "i=5, j=0",
        "C": "i=5, j=2",
        "D": "i=6, j=2"
      },
      "answer": [
        "C"
      ],
      "explanation": "由题中 “失配 s[i]≠t[j] 时，i=j=5”，可知题中的主串和模式串的位序都是从 0 开始的（要注意灵活应变）。按照 next 数组生成算法，对于 t 有\n\n<table><tr><td>编号</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr><tr><td>t</td><td>a</td><td>b</td><td>a</td><td>a</td><td>b</td><td>c</td></tr><tr><td>next</td><td>-1</td><td>0</td><td>0</td><td>1</td><td>1</td><td>2</td></tr></table>\n\n发生失配时，主串指针 i 不变，子串指针 j 回退到 next[j] 位置重新比较，当 s[i] ≠ t[j] 时，i = j = 5，由 next 表得知 next[j] = next[5] = 2（位序从 0 开始）。因此，i = 5，j = 2。",
      "source_file": "wiki/sources/数据结构/chapters/ch04-第4章-串.md"
    },
    {
      "id": "数据结构_4-2-4_11",
      "book": "数据结构",
      "chapter": 4,
      "chapter_title": "串",
      "section": "4.2.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2019 统考真题】设主串 T='abaabaabcabaabc'，模式串 S='abaabc'，采用 KMP 算法进行模式匹配，到匹配成功时为止，在匹配过程中进行的单个字符间的比较次数是（）。",
      "options": {
        "A": "9",
        "B": "10",
        "C": "12",
        "D": "15"
      },
      "answer": [
        "B"
      ],
      "explanation": "假设位序从 0 开始，按照 next 数组生成算法，对于 s 有\n\n<table><tr><td>编号</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr><tr><td>S</td><td>a</td><td>b</td><td>a</td><td>a</td><td>b</td><td>c</td></tr><tr><td>next</td><td>-1</td><td>0</td><td>0</td><td>1</td><td>1</td><td>2</td></tr></table>\n\n第一趟连续比较6次，在模式串的5号位和主串的5号位匹配失败，模式串的下一个比较位置为next[5]，即下一次比较从模式串的2号位和主串的5号位开始，然后直到模式串的5号位和主串的8号位匹配，第二趟比较4次，匹配成功。单个字符的比较次数为10次。",
      "source_file": "wiki/sources/数据结构/chapters/ch04-第4章-串.md"
    },
    {
      "id": "数据结构_4-2-4_12",
      "book": "数据结构",
      "chapter": 4,
      "chapter_title": "串",
      "section": "4.2.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2024 统考真题】KMP 算法使用修正后的 next 数组进行模式匹配，模式串为 S='aabaab'，当主串的某个字符与 S 的某个字符失配时，S 向右滑动的最长距离是（）。",
      "options": {
        "A": "5",
        "B": "4",
        "C": "3",
        "D": "2"
      },
      "answer": [
        "A"
      ],
      "explanation": "假设位序从 0 开始，计算出 nextval 数组。当比较到 S[j] 失配时，模式串向右滑动的距离为 j-nextval[j]（ $0 \\leqslant j \\leqslant 5$ ），由下图可知，当 j=4 时向右滑动的距离最长，此时距离为 5。\n\n<table><tr><td>编号 j</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr><tr><td>S[j]</td><td>a</td><td>a</td><td>b</td><td>a</td><td>a</td><td>b</td></tr><tr><td>next[j]</td><td>-1</td><td>0</td><td>1</td><td>0</td><td>1</td><td>2</td></tr><tr><td>nextval[j]</td><td>-1</td><td>-1</td><td>1</td><td>-1</td><td>-1</td><td>1</td></tr><tr><td>j-nextval[j]</td><td>1</td><td>2</td><td>1</td><td>4</td><td>5</td><td>4</td></tr></table>\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch04-第4章-串.md"
    },
    {
      "id": "数据结构_5-1-4_04",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "对于一棵具有 n 个结点、度为 4 的树来说，（）。",
      "options": {
        "A": "树的高度至多是 $n - 3$",
        "B": "树的高度至多是 $n - 4$",
        "C": "第 i 层上至多有 $4(i-1)$ 个结点",
        "D": "至少在某一层上正好有 4 个结点"
      },
      "answer": [
        "A"
      ],
      "explanation": "要使得具有 n 个结点、度为 4 的树的高度最大，就要使得每层的结点数尽可能少，类似右图所示的树，除最后一层外，每层的结点数是 1，最终该树的高度为 n-3。树的度为 4 只能说明存在某结点正好（也最多）有 4 个孩子结点，选项 D 错误。\n\n![](images/b01b645e7116ab9264836591bf02873c0cbbdad59178a7326f6839a0cc12a45c.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\" \"]\n    B --> C[\" \"]\n    C --> D[\" \"]\n    D --> E[\" \"]\n    style A fill:#fff,stroke:#000\n    style B fill:#fff,stroke:#000\n    style C fill:#fff,stroke:#000\n    style D fill:#fff,stroke:#000\n    style E fill:#fff,stroke:#000\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-1-4_06",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "假定一棵度为 3 的树中，结点数为 50，则其最小高度为（）。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "C"
      ],
      "explanation": "要求满足条件的树，那么该树是一棵完全三叉树。在度为3的完全三叉树中，第1层有1个结点，第2层有 $3^{1}=3$ 个结点，第3层有 $3^{2}=9$ 个结点，第4层有 $3^{3}=27$ 个结点，因此结点数之和为 $1+3+9+27=40$ ，第5层的结点数=50-40=10个，因此最小高度为5。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-1-4_07",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "设有一棵度为 3 的树，其中度为 3 的结点数 $n_{3}=2$ ，度为 2 的结点数 $n_{2}=1$ ，叶结点数 $n_{0}=6$ ，则该树的结点总数为（）。",
      "options": {
        "A": "12",
        "B": "9",
        "C": "10",
        "D": "$\\geqslant9$ 的任意整数"
      },
      "answer": [
        "D"
      ],
      "explanation": "总结点数 $n=n_{0}+n_{1}+n_{2}+n_{3}=6+n_{1}+1+2=n_{1}+9$ ，总度数 $=n-1=n_{1}+2n_{2}+3n_{3}=n_{1}+2+6=n_{1}+8$ ，根据题目条件无法得出 n 的具体值，只能证明 n 是一个大于或等于 9 的任意整数。画出满足题目条件的树，可以是右图所示的一棵树，该树中无法确定 n 的具体数量。\n\n![](images/db524470a8e3295fcd7386b830e64c3aa2f060eb39109c23aeac384ce8315fb5.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\" \"]\n    A --> C[\" \"]\n    B --> D[\" \"]\n    B --> E[\" \"]\n    C --> F[\" \"]\n    C --> G[\" \"]\n    D --> H[\" \"]\n    D --> I[\" \"]\n    E --> J[\" \"]\n    E --> K[\" \"]\n    F --> L[\" \"]\n    F --> M[\" \"]\n    G --> N[\" \"]\n    G --> O[\" \"]\n    H --> P[\" \"]\n    H --> Q[\" \"]\n    I --> R[\" \"]\n    I --> S[\" \"]\n    J --> T[\" \"]\n    J --> U[\" \"]\n    K --> V[\" \"]\n    K --> W[\" \"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-1-4_08",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "设一棵 m 叉树中有 $N_{1}$ 个度数为 1 的结点， $N_{2}$ 个度数为 2 的结点…… $N_{m}$ 个度数为 m 的结点，则该树中共有（）个叶结点。",
      "options": {
        "A": "$\\sum_{i=1}^{m}(i-1)N_{i}$",
        "B": "$\\sum_{i=1}^{m}N_{i}$",
        "C": "$\\sum_{i=2}^{m}(i-1)N_{i}$",
        "D": "$\\sum_{i=2}^{m}(i-1)N_i + 1$"
      },
      "answer": [
        "D"
      ],
      "explanation": "设叶结点数为 $N_{0}$ ，总结点数为 N，则 $N = N_{1} + 2N_{2} + 3N_{3} + \\cdots + mN_{m} + 1$ ，又因为 $N = N_{0} + N_{1} + N_{2} + N_{3} + \\cdots + N_{m}$ ，所以 $N_{0} = N_{2} + 2N_{3} + \\cdots +$\n\n$$\n(m - 1) N _ {m} + 1 = \\sum_ {i = 2} ^ {m} (i - 1) N _ {i} + 1 。\n$$",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-1-4_09",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "【2010 统考真题】在一棵度为 4 的树 T 中，若有 20 个度为 4 的结点，10 个度为 3 的结点，1 个度为 2 的结点，10 个度为 1 的结点，则树 T 的叶结点数是（）。",
      "options": {
        "A": "41",
        "B": "82",
        "C": "113",
        "D": "122"
      },
      "answer": [
        "B"
      ],
      "explanation": "设树中度为 $i$ （ $i = 0, 1, 2, 3, 4$ ）的结点数分别为 $n_i$ ，树中结点总数为 $n$ ，则 $n =$ 分支数 $+1$ ，而分支数又等于树中各结点的度之和，即 $n = 1 + n_1 + 2n_2 + 3n_3 + 4n_4 = n_0 + n_1 + n_2 + n_3 + n_4$ 。依题意， $n_1 + 2n_2 + 3n_3 + 4n_4 = 10 + 2 + 30 + 80 = 122$ ， $n_1 + n_2 + n_3 + n_4 = 10 + 1 + 10 + 20 = 41$ ，可得出 $n_0 = 82$ ，即树 $T$ 的叶结点的个数是 82。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-1-4_10",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "【2016 统考真题】若森林 $F$ 有 15 条边、25 个结点，则 $F$ 包含树的个数是（）。",
      "options": {
        "A": "8",
        "B": "9",
        "C": "10",
        "D": "11"
      },
      "answer": [
        "C"
      ],
      "explanation": "解法1：树有一个重要性质，即在n个结点的树中有n-1条边，“那么对于每棵树，其结点数比边数多1”。本题森林中的结点数比边数多10（25-15=10），显然共有10棵树。\n\n解法2：仔细分析后发现此题也是考查图的性质：生成树和生成森林。对于图的生成树有一个重要的性质，即图中顶点数若为n，则其生成树含有n-1条边。对比解法1中树的性质，不难发现两种解法都用到了性质“树中结点数比边数多1”，后面的分析如解法1。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_14",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "一棵完全二叉树上有 1001 个结点，其中叶结点的个数是（）。",
      "options": {
        "A": "250",
        "B": "500",
        "C": "254",
        "D": "501"
      },
      "answer": [
        "D"
      ],
      "explanation": "由完全二叉树的性质，最后一个分支结点的序号为 $\\lfloor 1001 / 2\\rfloor = 500$ ，所以叶结点数为501。\n\n【另解】 $n=n_{0}+n_{1}+n_{2}=n_{0}+n_{1}+(n_{0}-1)=2n_{0}+n_{1}-1$ ，因为 n=1001，而在完全二叉树中， $n_{1}$ 只能取 0 或 1。当 $n_{1}=1$ 时， $n_{0}$ 为小数，不符合题意。所以 $n_{1}=0$ ，于是有 $n_{0}=501$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_15",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "若一棵二叉树有 126 个结点，在第 7 层（根结点在第 1 层）至多有（）个结点。",
      "options": {
        "A": "32",
        "B": "64",
        "C": "63",
        "D": "不存在第7层"
      },
      "answer": [
        "C"
      ],
      "explanation": "要使二叉树第 7 层的结点数最多，只考虑树高为 7 层的情况，7 层满二叉树有 127 个结点，126 仅比 127 少 1 个结点，只能少在第 7 层，所以第 7 层最多有 $2^{6}-1=63$ 个结点。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_16",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "一棵有 124 个叶结点的完全二叉树，最多有（）个结点。",
      "options": {
        "A": "247",
        "B": "248",
        "C": "249",
        "D": "250"
      },
      "answer": [
        "B"
      ],
      "explanation": "在非空的二叉树当中，由度为0和2的结点数的关系 $n_0 = n_2 + 1$ 可知 $n_2 = 123$ ；总结点数 $n = n_0 + n_1 + n_2 = 247 + n_1$ ，其最大值为248（ $n_1$ 的取值为1或0，当 $n_1 = 1$ 时结点最多）。注意，由完全二叉树总结点数的奇偶性可以确定 $n_1$ 的值，但不能根据 $n_0$ 来确定 $n_1$ 的值。\n\n【另解】 $124 < 2^{7} = 128$ ，所以第8层没满，前7层为完全二叉树，由此可推算第8层可能有120个叶结点，第7层的最右4个为叶结点，考虑最多的情况，这4个叶结点中的最左边可以有1个左孩子（不改变叶结点数），因此结点总数 $=2^{7}-1+120+1=248$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_17",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "某完全二叉树 T 中，结点数最大的层有 8 个结点，则 T 中至多有（）个结点。",
      "options": {
        "A": "8",
        "B": "15",
        "C": "23",
        "D": "31"
      },
      "answer": [
        "C"
      ],
      "explanation": "在完全二叉树中，第4层刚好最多有8个结点（前4层对应高度为4的满二叉树），若第5层也有8个结点，则对应于结点数最多的情况，此时树高为5，总结点数为 $15 + 8 = 23$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_18",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "一棵有 $n$ 个结点的二叉树采用二叉链存储结点，其中空指针数为（）。",
      "options": {
        "A": "n",
        "B": "$n + 1$",
        "C": "n-1",
        "D": "2n"
      },
      "answer": [
        "B"
      ],
      "explanation": "非空指针数 = 总分支数 = n - 1，空指针数 = 2 × 结点总数 - 非空指针数 = 2n - (n - 1) = n + 1。\n\n【另解】在树中，1个指针对应1个分支， $n$ 个结点的树共有 $n - 1$ 个分支，即 $n - 1$ 个非空指针，每个结点都有2个指针域，所以空指针数 $= 2n - (n - 1) = n + 1$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_19",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "设有 $n (n \\geqslant 1)$ 个结点的二叉树采用三叉链表表示，其中每个结点包含三个指针，分别指向其左孩子、右孩子及双亲（若不存在，则置为空），则下列说法中正确的是（）。 I. 树中空指针的数量为 $n+2$ II. 所有度为 2 的结点均被三个指针指向 III. 每个叶结点均被一个指针所指向",
      "options": {
        "A": "I",
        "B": "I、II",
        "C": "I、III",
        "D": "II、III"
      },
      "answer": [
        "A"
      ],
      "explanation": "二叉链表表示的二叉树中空指针的数量为 $n+1$ ，三叉链表表示的二叉树多了一个根结点指向双亲的空指针，所以树中空指针的数量为 $n+2$ ，说法 I 正确。若根结点的度为 2，则只有左右两个孩子指向它，说法 II 错误。若整棵树只有一个根结点，则没有指针指向它，说法 III 错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_20",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "在一棵完全二叉树中，其根的序号为 1，（）可判定序号为 $p$ 和 $q$ 的两个结点是否在同一层。",
      "options": {
        "A": "$\\left\\lfloor\\log_{2}p\\right\\rfloor=\\left\\lfloor\\log_{2}q\\right\\rfloor$",
        "B": "$\\log_{2}p = \\log_{2}q$",
        "C": "$\\lfloor \\log_2p\\rfloor +1 = \\lfloor \\log_2q\\rfloor$",
        "D": "$\\left\\lfloor\\log_{2}p\\right\\rfloor=\\left\\lfloor\\log_{2}q\\right\\rfloor+1$"
      },
      "answer": [
        "A"
      ],
      "explanation": "由完全二叉树的性质，编号为 $i (i \\geqslant 1)$ 的结点所在的层次为 $\\left\\lfloor \\log_{2} i \\right\\rfloor + 1$ ，若两个结点位于同一层，则一定有 $\\left\\lfloor \\log_{2} p \\right\\rfloor + 1 = \\left\\lfloor \\log_{2} q \\right\\rfloor + 1$ ，因此有 $\\left\\lfloor \\log_{2} p \\right\\rfloor = \\left\\lfloor \\log_{2} q \\right\\rfloor$ 成立。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_21",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "在一个用数组表示的完全二叉树中，根结点的下标为 1，那么下标为 17 和 19 的结点的最近公共祖先的下标是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "4",
        "D": "8"
      },
      "answer": [
        "C"
      ],
      "explanation": "当根结点下标为 1 时，下标为 i 的结点的父结点下标为 $\\lfloor i/2 \\rfloor$ ，那么下标为 17 的祖先的下标有 8, 4, 2, 1，下标为 19 的祖先的下标有 9, 4, 2, 1，因此两者最近的公共祖先的下标是 4。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_22",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "假定一棵三叉树的结点数为 50，则它的最小高度为（）。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "C"
      ],
      "explanation": "分析可知，满足条件的三叉树可以是完全三叉树，这棵树的第 $i$ （ $i \\geqslant 1$ ）层最多有 $3^{i-1}$ 个结点。设高度为 $h$ ，则 $3^0 + 3^1 + \\cdots + 3^{h-1} = (3^h - 1)/2$ 是结点数的上限，问题是求解 $50 \\leqslant (3^h - 1)/2$ 的最小 $h$ 值，即 $h \\geqslant \\log_3 101$ ，有 $h = \\lceil \\log_3 101 \\rceil = 5$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_23",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "具有 $n$ 个结点的三叉树用三叉链表表示，则树中空指针域的个数为（）。",
      "options": {
        "A": "$3n + 1$",
        "B": "$2n + 1$",
        "C": "3n - 1",
        "D": "3n"
      },
      "answer": [
        "B"
      ],
      "explanation": "三叉树采用三叉链表表示，每个结点均有3个指针域指向3个孩子，共有3n个指针域，但n个结点构成的一棵树中只需要n-1个指针（对于n-1条边），因此空指针域有 $2n+1$ 个。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_24",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "对于一棵满二叉树，共有 n 个结点和 m 个叶结点，高度为 h，则（）。",
      "options": {
        "A": "$n = h + m$",
        "B": "$n + m = 2h$",
        "C": "m = h - 1",
        "D": "$n=2^{h}-1$"
      },
      "answer": [
        "D"
      ],
      "explanation": "对于高度为 h 的满二叉树，结点总数 $n=2^{0}+2^{1}+\\cdots+2^{h-1}=2^{h}-1$ ，叶结点数 $m=2^{h-1}$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_25",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2009 统考真题】已知一棵完全二叉树的第 6 层（设根为第 1 层）有 8 个叶结点，则该完全二叉树的结点数最多是（）。",
      "options": {
        "A": "39",
        "B": "52",
        "C": "111",
        "D": "119"
      },
      "answer": [
        "C"
      ],
      "explanation": "第 6 层有叶结点，完全二叉树的高度可能为 6 或 7，显然树高为 7 时结点最多。完全二叉树与满二叉树相比，只是在最下一层的右边缺少部分叶结点，而最后一层之上是个满二叉树，且只有最后两层上有叶结点。若第 6 层上有 8 个叶结点，则前 6 层为满二叉树，而第 7 层缺失 $8 \\times 2 = 16$ 个叶结点，所以完全二叉树的结点数最多为 $2^{7} - 1 - 16 = 111$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_26",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2011 统考真题】若一棵完全二叉树有 768 个结点，则该二叉树中叶结点的个数是（）。",
      "options": {
        "A": "257",
        "B": "258",
        "C": "384",
        "D": "385"
      },
      "answer": [
        "C"
      ],
      "explanation": "最后一个分支结点的编号为 $\\left\\lfloor768/2\\right\\rfloor=384$ ，所以叶结点的个数为 768-384=384。\n\n【另解】 $n=n_{0}+n_{1}+n_{2}=n_{0}+n_{1}+(n_{0}-1)=2n_{0}+n_{1}-1$ ，其中n=768，而在完全二叉树中， $n_{1}$ 只能取0或1，当 $n_{1}=0$ 时， $n_{0}$ 为小数，不符合题意。因此 $n_{1}=1$ ，所以 $n_{0}=384$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_27",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2018 统考真题】设一棵非空完全二叉树 $T$ 的所有叶结点均位于同一层，且每个非叶结点都有 2 个子结点。若 $T$ 有 $k$ 个叶结点，则 $T$ 的结点总数是（）。",
      "options": {
        "A": "2k-1",
        "B": "2k",
        "C": "$k^{2}$",
        "D": "$2^{k}-1$"
      },
      "answer": [
        "A"
      ],
      "explanation": "非叶结点的度均为 2，且所有叶结点都位于同一层的完全二叉树就是满二叉树。对于一棵高度为 h 的满二叉树（空树 h=0），其最后一层全部是叶结点，数目为 $2^{h-1}$ ；总结点数为 $2^{h}-1$ 。因此当 $2^{h-1}=k$ 时，可以得到 $2^{h}-1=2k-1$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_28",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2020 统考真题】对于任意一棵高度为 5 且有 10 个结点的二叉树，若采用顺序存储结构保存，每个结点占 1 个存储单元（仅存放结点的数据信息），则存放该二叉树需要的存储单元数量至少是（）。",
      "options": {
        "A": "31",
        "B": "16",
        "C": "15",
        "D": "10"
      },
      "answer": [
        "A"
      ],
      "explanation": "二叉树采用顺序存储时，用数组下标来表示结点之间的父子关系。对于一棵高度为5的二叉树，为了满足任意性，其1～5层的所有结点都要被存储起来，即考虑为一棵高度为5的满二叉树，共需要存储单元的数量为 $1+2+4+8+16=31$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_29",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2022 统考真题】若三叉树 $T$ 中有 244 个结点（叶结点的高度为 1），则 $T$ 的高度至少是（）。",
      "options": {
        "A": "8",
        "B": "7",
        "C": "6",
        "D": "5"
      },
      "answer": [
        "C"
      ],
      "explanation": "高度一定的三叉树中结点数最多的情况是满三叉树。高度为5的满三叉树的结点数 $=3^{0}+3^{1}+3^{2}+3^{3}+3^{4}=121$ ，高度为6的满三叉树的结点数 $=3^{0}+3^{1}+3^{2}+3^{3}+3^{4}+3^{5}=364$ 。三叉树T的结点数为244，121<244<364，因此T的高度至少为6。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-2-3_30",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2025 统考真题】若二叉树的结点值均为正整数，采用顺序存储方式保存在数组 R 中，用 -1 表示结点不存在，则下列数组中，不能表示一棵二叉树的是（）。",
      "options": {
        "A": "R[] = {20, 15, 40, -1, -1, 35}",
        "B": "R[] = {15, 40, 10, 18, 35, -1, -1}",
        "C": "R[] = {15, 40, 10, -1, -1, -1, 12}",
        "D": "R[] = {17, 20, 35, -1, 18, 45, -1, -1, 19, 27}"
      },
      "answer": [
        "D"
      ],
      "explanation": "在二叉树的顺序存储结构中，结点按完全二叉树的层次顺序存放：根在下标0，对于任意非根结点R[i]，其父结点为 $R[(i-1)/2]$ 。若某结点为空，则其所有后代位置必须也为空，否则将出现“空\n\n结点拥有非空子结点”的情况，违反二叉树的定义。在选项 A、B、C 中，所有非-1 的元素，其从根到该结点的祖先路径上均不含-1，符合顺序存储规则。在选项 D 中，R[8]=19 是一个有效结点，其父结点应为 R[(8-1)/2]=R[3]，但 R[3]=-1，表示该结点不存在，因此无法构成合法的二叉树。\n\n![](images/28e875404d39ba8ebd81a8fc21caf524a092fc5c2673c10ef1873973783076b8.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"17\"] --> B[\"20\"]\n    A --> C[\"35\"]\n    B --> D[\"18\"]\n    B --> E[\"19\"]\n    C --> F[\"45\"]\n    D --> G[\"27\"]\n```\n</details>\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_18",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "已知一棵二叉树的层次序列为 $ABCDEF$ ，中序序列为 $BADCFE$ ，则先序序列为（）。",
      "options": {
        "A": "ACBEDF",
        "B": "ABCDEF",
        "C": "BDFECA",
        "D": "FCEDBA"
      },
      "answer": [
        "B"
      ],
      "explanation": "可构造出二叉树如下图所示。因此，先序序列为 ABCDEF。\n\n![](images/21a3124f872277cd71732b292ae548d6c4c6100d6630acfbd6c7c499466bdcbd.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"A\"] --> B[\"B\"]\n    A --> D[\"D\"]\n    A --> C[\"C\"]\n    A --> F[\"F\"]\n    A --> E[\"E\"]\n```\n</details>\n\n(a) 确定根结点\n\n![](images/e65a2d54177fb8023a34227ec135b82d554c484c4234f2ab6a39ffc334e450ff.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A --> B\n    A --> C\n    C --> D\n    C --> E、F\n```\n</details>\n\n(b) 确定右子树的根结点\n\n![](images/95209160ced6df6b8af9ec54b28ea59d118a3bf46b3158a750f42706e0cb0be7.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A --> B\n    A --> C\n    C --> D\n    C --> E\n    E --> F\n```\n</details>\n\n(c) 确定剩下的子树",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_19",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "某二叉树中结点 $x$ 在先序、中序、后序遍历序列中的编号分别为 $\\mathrm{pre}(x)$ 、 $\\mathrm{in}(x)$ 、 $\\mathrm{post}(x)$ （假设都从1开始依次顺序编号）， $a$ 和 $b$ 是该二叉树中的两个结点，其中 $a$ 是 $b$ 的祖先，则下列选项中不可能出现的是（）。",
      "options": {
        "A": "$\\text{pre}(a) < \\text{pre}(b)$",
        "B": "post(a) < post(b)",
        "C": "$\\text{in}(a) < \\text{in}(b)$",
        "D": "in(a) > in(b)"
      },
      "answer": [
        "B"
      ],
      "explanation": "先序遍历是根左右，祖先 a 先于子孙 b 访问，即 $\\mathrm{pre}(a) < \\mathrm{pre}(b)$ ，因此选项 A 一定成立。后序遍历是左右根，子孙 b 先于祖先 a 访问，即 $\\mathrm{post}(b) < \\mathrm{post}(a)$ ，因此选项 B 一定不成立。中序遍历是左根右，左子树中的子孙先于祖先访问，右子树中的子孙后于祖先访问，因此子孙的编号可能小于祖先的编号，也可能大于祖先的编号，选项 C 和 D 都有可能。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_20",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "某二叉树采用二叉链表存储结构，若要删除该二叉链表中的所有结点，并释放它们占用的存储空间，则采用（）遍历方法最合适。",
      "options": {
        "A": "中序",
        "B": "层次",
        "C": "后序",
        "D": "先序"
      },
      "answer": [
        "C"
      ],
      "explanation": "删除一个结点时，需要先递归地删除它的左右孩子，并释放它们所占的存储空间，然后删除该结点，并删除它所占的存储空间，这正好和后序遍历的访问顺序相吻合。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_21",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "某二叉树 T 采用二叉链表存储结构，T 的中序遍历序列为一个升序序列，要求采用某种方法对 T 进行某种操作之后得到一棵新的二叉树 $T'$ ，要求 $T'$ 的中序遍历序列为一个降序序列，则下列关于该算法的叙述中，正确的是（）。",
      "options": {
        "A": "采用中序遍历的方法最合适",
        "B": "采用后序遍历的方法最合适",
        "C": "$T'$ 中的根结点一定不是原 T 中的根结点",
        "D": "$T'$ 中的叶结点不一定是原 $T$ 中的叶结点"
      },
      "answer": [
        "B"
      ],
      "explanation": "只要交换 T 中所有分支结点的左右子树，就能得到一棵中序遍历序列为降序序列的树，而这并不会改变根结点，叶结点也仅仅交换位置，仍是原 T 中的叶结点，选项 C、D 错误。交换 T 中所有分支结点的左右子树，要么先处理根结点，然后递归地处理左右子树，即先序遍历；要么先处理左右子树，然后处理根结点，即后序遍历；中序遍历是不适合的。选项 A 错误，选项 B 正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_22",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "引入线索二叉树的目的是（）。",
      "options": {
        "A": "加快查找结点的前驱或后继的速度",
        "B": "为了能在二叉树中方便插入和删除",
        "C": "为了能方便找到双亲",
        "D": "使二叉树的遍历结果唯一"
      },
      "answer": [
        "A"
      ],
      "explanation": "线索是前驱结点和后继结点的指针，引入线索的目的是加快对二叉树的遍历。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_23",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "$n$ 个结点的线索二叉树上含有的线索数为（）。",
      "options": {
        "A": "2n",
        "B": "$n - 1$",
        "C": "$n + 1$",
        "D": "n"
      },
      "answer": [
        "C"
      ],
      "explanation": "n 个结点共有链域指针 2n 个，其中，除根结点外，每个结点都被一个指针指向。剩余的链域建立线索，共 $2n - (n - 1) = n + 1$ 个线索。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_24",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "判断线索二叉树中 $^{*}$ p 结点有右孩子结点的条件是（）。",
      "options": {
        "A": "p != NULL",
        "B": "p->rchild!=NULL",
        "C": "p->rtag==0",
        "D": "p->rtag==1"
      },
      "answer": [
        "C"
      ],
      "explanation": "线索二叉树中用 ltag/rtag 标识结点的左/右指针域是否为线索，其值为 1 时，对应指针域为线索，其值为 0 时，对应指针域为左/右孩子。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_25",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "一棵左子树为空的二叉树在先序线索化后，其中空的链域的个数是（）。",
      "options": {
        "A": "不确定",
        "B": "0 个",
        "C": "1 个",
        "D": "2 个"
      },
      "answer": [
        "D"
      ],
      "explanation": "对左子树为空的二叉树进行先序线索化，根结点的左子树为空并且也没有前驱结点（先遍历根结点），先序遍历的最后一个元素为叶结点，左右子树均为空且有前驱无后继结点，所以线索化后，树中空链域有2个。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_26",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "在线索二叉树中，下列说法不正确的是（）。",
      "options": {
        "A": "在中序线索树中，若某结点有右孩子，则其后继结点是它的右子树的最左下结点",
        "B": "在中序线索树中，若某结点有左孩子，则其前驱结点是它的左子树的最右下结点",
        "C": "线索二叉树是利用二叉树的 $n + 1$ 个空指针来存放结点的前驱和后继信息的",
        "D": "每个结点通过线索都可以直接找到它的前驱和后继"
      },
      "answer": [
        "D"
      ],
      "explanation": "不是每个结点通过线索都可以直接找到它的前驱和后继。在先序线索二叉树中查找一个结点\n\n的先序后继很简单，而查找先序前驱必须知道该结点的双亲结点。同样，在后序线索二叉树中查找一个结点的后序前驱也很简单，而查找后序后继也必须知道该结点的双亲结点，二叉链表中没有存放双亲的指针。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_27",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "二叉树在线索化后，仍不能有效求解的问题是（）。",
      "options": {
        "A": "先序线索二叉树中求先序后继",
        "B": "中序线索二叉树中求中序后继",
        "C": "中序线索二叉树中求中序前驱",
        "D": "后序线索二叉树中求后序后继"
      },
      "answer": [
        "D"
      ],
      "explanation": "后序线索二叉树不能有效解决求后序后继的问题。如右图所示，结点 E 的右指针指向右孩子，而在后序序列中 E 的后继结点为 B，在查找\n\n![](images/d2378df727fe1f3249214d944ad86f0cffef72b4121174263ba145f570e82c27.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A --> B\n    A --> C\n    B --> D\n    B --> E\n    C --> F\n    E --> G\n    E --> H\n```\n</details>\n\nE 的后继时仍然只能按常规方法来查找。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_28",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "若 $X$ 是二叉中序线索树中一个有左孩子的结点，且 $X$ 不为根，则 $X$ 的前驱为（）。",
      "options": {
        "A": "$X$ 的双亲",
        "B": "$X$ 的右子树中最左的结点",
        "C": "X 的左子树中最右的结点",
        "D": "$X$ 的左子树中最右的叶结点"
      },
      "answer": [
        "C"
      ],
      "explanation": "在二叉中序线索树中，某结点若有左孩子，则按照中序“左根右”的顺序，该结点的前驱结点为左子树中最右的一个结点（注意，并不一定是最右叶结点）。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_29",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "若 $X$ 是后序线索二叉树中的叶结点，且 $X$ 存在左兄弟 $Y$ ，则 $X$ 的右线索指向的是（）。",
      "options": {
        "A": "$X$ 的双亲",
        "B": "以 $Y$ 为根的子树的最左下结点",
        "C": "X 的左兄弟 Y",
        "D": "以 $Y$ 为根的子树的最右下结点"
      },
      "answer": [
        "A"
      ],
      "explanation": "在二叉树的后序遍历中，叶结点 X 的后继是其双亲，因此 X 的右线索应指向该结点。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_30",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "某二叉树的先序序列和后序序列正好相反，则该二叉树一定是（）。",
      "options": {
        "A": "空或只有一个结点",
        "B": "高度等于其结点数",
        "C": "任意一个结点无左孩子",
        "D": "任意一个结点无右孩子"
      },
      "answer": [
        "B"
      ],
      "explanation": "非空二叉树的先序序列和后序序列相反，即“根左右”与“左右根”顺序相反，因此树只有根结点，或根结点只有左子树或右子树，其子树也有同样的性质，任意结点只有一个孩子，才能满足先序序列和后序序列正好相反。此时树形应为一个长链，树中仅有一个叶结点。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_31",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "某非空二叉树的先序序列和中序序列正好相反，则下列叙述中正确的是（）。",
      "options": {
        "A": "该二叉树一定只有一个结点",
        "B": "只有一个叶结点的二叉树一定满足条件",
        "C": "任意一个结点无左孩子的二叉树一定满足条件",
        "D": "任意一个结点无右孩子的二叉树一定满足条件"
      },
      "answer": [
        "D"
      ],
      "explanation": "非空二叉树的先序序列和中序序列相反，即“根左右”与“左根右”顺序相反，因此树只有根结点，或任意一个结点只有左孩子，此时树形应该是一棵向左倾斜的单支树，这棵单支树只有一个叶结点。但是，只有一个叶结点的二叉树不能保证任意一个结点无右孩子。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_32",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2009 统考真题】给定二叉树如右图所示。设 N 代表二叉树的根，L 代表根结点的左子树，R 代表根结点的右子树。若遍历后的结点序列是 3175624，则其遍历方式是（）。 ![](images/0ff41193e614760e2aa0b0ece252600e8e2f907b0da86bd47fedc79d75af4481.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"1\"] --> B[\"2\"] A --> C[\"3\"] B --> D[\"4\"] B --> E[\"5\"] E --> F[\"6\"] E --> G[\"7\"] ``` </details>",
      "options": {
        "A": "LRN",
        "B": "NRL",
        "C": "RLN",
        "D": "RNL"
      },
      "answer": [
        "D"
      ],
      "explanation": "分析遍历后的结点序列，可以看出根结点是在中间被访问的，而且右子树结点在左子树之前，则遍历的方法是 RNL。本题考查的遍历方法并不是二叉树遍历的 3 种基本遍历方法，对于考生而言，重要的是掌握遍历的思想。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_33",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2010 统考真题】下列线索二叉树中（用虚线表示线索），符合后序线索树定义的是（）。 ![](images/3e63965bd2232d7417e8d0a6f581ea2f2b597137e24de3f6eb5e791a155dbb30.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD a --> b a --> c b --> c b --> d c --> d d --> c c -.-> a c -.-> b b -.-> d d -.-> a style a fill:#fff,stroke:#000 style b fill:#fff,stroke:#000 style c fill:#fff,stroke:#000 style d fill:#fff,stroke:#000 style a stroke-dasharray: 5 5 style b stroke-dasharray: 5 5 style c stroke-dasharray: 5 5 style d stroke-dasharray: 5 5 note1[\"Null\"] ``` </details>",
      "options": {
        "A": "",
        "B": "",
        "C": "",
        "D": ""
      },
      "answer": [
        "D"
      ],
      "explanation": "题中所给二叉树的后序序列为 dbca。结点 d 无前驱和左子树，左链域空，无右子树，右链域指向其后继结点 b；结点 b 无左子树，左链域指向其前驱结点 d；结点 c 无左子树，左链域指向其前驱结点 b，无右子树，右链域指向其后继结点 a。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_34",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2011 统考真题】一棵二叉树的先序遍历序列和后序遍历序列分别为 1, 2, 3, 4 和 4, 3, 2, 1，该二叉树的中序遍历序列不会是（）。",
      "options": {
        "A": "1, 2, 3, 4",
        "B": "2, 3, 4, 1",
        "C": "3, 2, 4, 1",
        "D": "4, 3, 2, 1"
      },
      "answer": [
        "C"
      ],
      "explanation": "先序序列为 NLR，后序序列为 LRN，因为先序序列和后序序列刚好相反，所以不可能存在一个结点同时有左右孩子，即二叉树的高度为 4。1 为根结点，根结点只能有左孩子（或右孩子），因此在中序序列中，1 或在序列首或在序列尾，选项 A、B、C、D 皆满足要求。仅考虑以 1 的孩子结点 2 为根结点的子树，它也只能有左孩子（或右孩子），因此在中序序列中，2 或在序列首或在序列尾，选项 A、B、D 皆满足要求。\n\n【另解】画出各选项与题干信息所对应的二叉树如下，所以选项 A、B、D 均满足。\n\n![](images/928697086dfe27e4a17555776342b540310b969b8a5ea7db03426c4993142701.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    1 --> 2\n    2 --> 3\n    3 --> 4\n    A --> 2\n```\n</details>\n\n![](images/0a899e2da95732ebdce231443ec252243d441727e0cf34db7fc29fac61674e70.jpg)\n\n![](images/960f5abf4920680a8d8d4ba7db8fdbd52e2e3e2d8c19a1d35860fd29a3abc539.jpg)",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_35",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "【2012 统考真题】若一棵二叉树的先序遍历序列为 a, e, b, d, c，后序遍历序列为 b, c, d, e, a，则根结点的孩子结点（）。",
      "options": {
        "A": "只有 e",
        "B": "有 e、b",
        "C": "有 e、c",
        "D": "无法确定"
      },
      "answer": [
        "A"
      ],
      "explanation": "先序序列和后序序列不能唯一确定一棵二叉树，但可以确定二叉树中结点的祖先关系：当两个结点的先序序列为 $XY$ 与后序序列为 $YX$ 时，则 $X$ 为 $Y$ 的祖先。考虑先序序列 $a, e, b, d, c$ 、后序序列 $b, c, d, e, a$ ，可知 $a$ 为根结点， $e$ 为 $a$ 的孩子结点；此外，由 $a$ 的孩子结点的先序序列 $e, b, d, c$ 、后序序列 $b, c, d, e$ ，可知 $e$ 是 $bcd$ 的祖先，所以根结点的孩子结点只有 $e$ 。\n\n![](images/09d3f6e1ef8b8f2cd3001b378f29bf4fde6158b01ce10f3d88d119c870658d23.jpg)  \n(a)\n\n![](images/586287fa91060dbba444571598a9078415cd885c06dac423090824bcd4864e81.jpg)  \n(b)\n\n![](images/b6e9ffd4fa27ae8335f583359929b7c10df8740ee9e248e1a27a7c810f98ec46.jpg)  \n(c)\n\n![](images/87b8ae9d01584e9571867400bc2f59030f53840e2cd3abb7bbcfbd2074aa3805.jpg)  \n(d)\n\n排除法：显然 a 为根结点，且确定 e 为 a 的孩子结点，排除选项 D。各种遍历算法中左右子树的遍历次序是固定的，若 b 也为 a 的孩子结点，则在先序序列和后序序列中 e、b 的相对次序应是不变的，所以排除选项 B，同理排除选项 C。\n\n特殊法：先序序列和后序序列对应多棵不同的二叉树树形，我们只需画出满足该条件的任意一棵二叉树即可，任意一棵二叉树必定满足正确选项的要求。\n\n显然选择选项 A，最终得到的二叉树满足题设中先序序列和后序序列的要求。\n\n36. A。\n\n根据后序线索二叉树的定义，X 结点为叶结点且有左兄弟，因此这个结点为右孩子结点，利用后序遍历的方式可知 X 结点的后序后继是其父结点，即其右线索指向的是父结点。为了更加形象，在解题的过程中可以画出如右所示的草图。\n\n![](images/e7916807403a6a6f67853510bdca593bd5ab17de5fe5513fdf60f3d5a0df0cc7.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\"Y\"]\n    A --> C[\"X\"]\n    C -.-> A\n    style A fill:#fff,stroke:#000\n    style B fill:#fff,stroke:#000\n    style C fill:#fff,stroke:#000\n```\n</details>\n\n37. D\n\n线索二叉树的线索实际上指向的是相应遍历序列特定结点的前驱结点和后继结点，所以先写出二叉树的中序遍历序列 debxac，中序遍历中在 x 左边和右边的字符，就是它在中序线索化的左右线索，即 b, a。\n\n38. B\n\n根据二叉树先序遍历和中序遍历的递归算法中递归工作栈的状态变化得出：先序序列和中序序列的关系相当于以先序序列为入栈次序，以中序序列为出栈次序。因为先序序列和中序序列可以唯一地确定一棵二叉树，所以题意相当于“以序列 a, b, c, d 为入栈次序，则出栈序列的个数为？”，对于 n 个不同元素入栈，出栈序列的个数为 $\\frac{1}{n+1} C_{2n}^{n} = 14$ 。\n\n39. B\n\n后序序列先访问左子树，接着访问右子树，最后访问父结点，递归进行。根结点左子树的叶结点首先被访问，它是 e。接下来是它的父结点 a，然后是 a 的父结点 c。接着访问根结点的右子树。它的叶结点 b 首先被访问，然后是 b 的父结点 d，再后是 d 的父结点 g，最后是根结点 f，如右图所示。因此 d 与 a 同层，选项 B 正确。\n\n![](images/6a4fcf930a4c805d27414a9d5a2a098bfa53ef5b4d763afa219456d6343e437a.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    f --> c\n    f --> g\n    c --> a\n    a --> e\n    g --> d\n    d --> b\n```\n</details>\n\n40. B\n\n先序序列先访问父结点，接着访问左子树，然后访问右子树。中序序列先访问左子树，接着访问父结点，然后访问右子树，递归进行。若所有非叶结点只有右子树，则先序序列和中序序列都先访问父结点，后访问右子树，递归进行。\n\n41. B\n\n对于此类题，每种情况只需举出一个反例即可。如图1所示， $q$ 是 $p$ 的双亲，中序遍历序列为 $\\{p, q\\}$ ，说法I可能。如图2所示， $q$ 是 $p$ 的右孩子，中序遍历序列为 $\\{p, q\\}$ ，说法II可能。如图4所示， $q$ 是 $p$ 的双亲的双亲，中序遍历序列为 $\\{x, p, q\\}$ ，说法IV可能。如图3所示， $q$ 是 $p$ 的右兄弟， $F$ 是 $q$ 和 $p$ 的父结点，中序遍历要求先遍历左子树，再访问根结点，最后遍历右子树，因此一定先访问 p，再访问 F，最后访问 q，p 和 q 不可能相邻出现，说法 III 不可能。\n\n![](images/6174eff230c3eac2ae65b3bb5fcb1ce4858627988241f2303989b46a11dfec2a.jpg)  \n图1\n\n![](images/924e1a802b59d238a4e8ed87abd1b2005a705f6622a17205d158ba934f620a06.jpg)  \n图 2\n\n![](images/d98c20dfb9d5103630466cac49e9fe15d5151400ff0b696a14ddc35cb3ef8af3.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    F --> p\n    F --> q\n    p --> dashed1\n    p --> dashed2\n    q --> dashed3\n    q --> dashed4\n```\n</details>\n\n图 3\n\n![](images/77a35eb338c86397778d7fcea5fe05775f0d21f9f475d223f3df690221826db8.jpg)  \n图 4",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_42",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "【2023 统考真题】已知一棵二叉树的树形如右图所示，若其后序遍历序列为fdbeca，则其先（前）序遍历序列是（）。",
      "options": {
        "A": "aedfbc",
        "B": "acebdf",
        "C": "cabefd",
        "D": "dfebac"
      },
      "answer": [
        "A"
      ],
      "explanation": "根据二叉树的树形和后序遍历序列，可以轻松地将各字母填入结点中，如右图所示。\n\n然后对该二叉树进行先序遍历，得到序列 aedfbc。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-3-3_43",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "【2024 统考真题】若 p、q 和 v 均为二叉树 T 中的结点，v 有两个孩子结点，T 的中序遍历序列形如 “ $\\cdots$ , p, v, q, $\\cdots$ ”，则在下列叙述中，正确的是（）。",
      "options": {
        "A": "p 没有右孩子，q 没有左孩子",
        "B": "$p$ 没有右孩子， $q$ 有左孩子",
        "C": "p 有右孩子，q 没有左孩子",
        "D": "p 有右孩子，q 有左孩子"
      },
      "answer": [
        "A"
      ],
      "explanation": "根据中序遍历的特点，v 有左右子树，以 v 为根的子树的中序序列为：v 的左子树的中序序列, v, v 的右子树的中序序列。又因为 T 的中序序列为 “ $\\cdots$ , p, v, q, $\\cdots$ ”，可知 p 属于 v 的左子树，q 属于 v 的右子树。在 v 的左子树的中序序列\n\n![](images/c01ddcd79914994920dfcf2a5f7e91058eec6439c74806d873411e1ac3d1e0f0.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    a --> e\n    a --> c\n    e --> d\n    e --> b\n    d --> f\n    b --> f\n```\n</details>\n\n中：假设 p 有右孩子，则 p 的右孩子在中序序列中应在 p 之后，与 p 是最后一个遍历结点矛盾，因此 p 不存在右孩子。在 v 的右子树的中序序列中：假设 q 存在左孩子，则 q 的左孩子在中序序列中应在 q 之前，与 q 是第一个遍历结点矛盾，因此 q 不存在左孩子。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_06",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "设森林 $F$ 对应的二叉树是一棵具有16个结点的完全二叉树，则森林 $F$ 中树的数目和结点最多的树的结点数分别是（）。",
      "options": {
        "A": "2 和 8",
        "B": "2 和 9",
        "C": "4 和 8",
        "D": "4 和 9"
      },
      "answer": [
        "D"
      ],
      "explanation": "森林转换为二叉树后，二叉树的根结点及其左子树由第1棵树转换得到，二叉树的根结点的右子树由剩余的森林转换得到，以此类推，可以划分出第2,3,…棵树的结点。具有16个结点的完全二叉树的形态如右图所示，沿二叉树的根结点往右下遍历，共有4个结点，可知森林中有4棵树，其中第1棵树的结点数最多，\n\n![](images/8a714f87dd8258e1a973b8c86625dd71fbc0ea8a10240bdfa4823fd70a8a494e.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\" \"]\n    B --> C[\" \"]\n    C --> D[\" \"]\n    D --> E[\" \"]\n    E --> F[\" \"]\n    F --> G[\" \"]\n    G --> H[\" \"]\n    H --> I[\" \"]\n    I --> J[\" \"]\n    J --> K[\" \"]\n    K --> L[\" \"]\n    L --> M[\" \"]\n    M --> N[\" \"]\n    N --> O[\" \"]\n    O --> P[\" \"]\n    P --> Q[\" \"]\n    Q --> R[\" \"]\n    R --> S[\" \"]\n    S --> T[\" \"]\n    T --> U[\" \"]\n    U --> V[\" \"]\n    V --> W[\" \"]\n    W --> X[\" \"]\n    X --> Y[\" \"]\n    Y --> Z[\" \"]\n```\n</details>\n\n有9个。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_07",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "森林 $T=(T_{1},T_{2},\\cdots,T_{m})$ 转化为二叉树 BT 的过程为：若 m=0，则 BT 为空，若 $m\\neq0$ ，则（）。",
      "options": {
        "A": "将中间子树 $T_{\\mathrm{mid}}$ ( $\\mathrm{mid} = (1 + m)/2$ ) 的根作为 BT 的根；将 $(T_{1}, T_{2}, \\cdots, T_{\\mathrm{mid}-1})$ 转换为 BT 的左子树；将 $(T_{\\mathrm{mid}+1}, \\cdots, T_{m})$ 转换为 BT 的右子树",
        "B": "将子树 $T_{1}$ 的根作为 BT 的根; 将 $T_{1}$ 的子树森林转换成 BT 的左子树; 将 $(T_{2}, T_{3}, \\cdots, T_{m})$ 转换成 BT 的右子树",
        "C": "将子树 $T_{1}$ 的根作为 BT 的根；将 $T_{1}$ 的左子树森林转换成 BT 的左子树；将 $T_{1}$ 的右子树森林转换为 BT 的右子树；其他以此类推",
        "D": "将森林 T 的根作为 BT 的根；将 $(T_{1}, T_{2}, \\cdots, T_{m})$ 转化为该根下的结点，得到一棵树，然后将这棵树再转化为二叉树 BT"
      },
      "answer": [
        "B"
      ],
      "explanation": "将森林中每棵树的根结点视为兄弟结点的关系，再按照“左孩子右兄弟”的规则来进行转化。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_08",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "设 F 是一个森林，B 是由 F 变换来的二叉树。若 F 中有 n 个非终端结点，则 B 中右指针域为空的结点有（）个。",
      "options": {
        "A": "$n - 1$",
        "B": "n",
        "C": "$n + 1$",
        "D": "$n + 2$"
      },
      "answer": [
        "C"
      ],
      "explanation": "根据森林与二叉树转换规则 “左孩子右兄弟”。二叉树 B 中右指针域为空代表该结点没有兄弟结点。森林中每棵树的根结点从第二个开始依次连接到前一棵树的根的右孩子，因此最后一棵树的根结点的右指针为空。另外，每个非终端结点，其所有孩子结点在转换之后，最后一个孩子的右指针也为空，所以树 B 中右指针域为空的结点有 $n+1$ 个。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_09",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "设某树的孩子兄弟链表示中共有 6 个空的左指针域、7 个空的右指针域，包括 5 个结点的左右指针域都为空，则该树中叶结点的个数是（）。",
      "options": {
        "A": "7",
        "B": "6",
        "C": "5",
        "D": "不能确定"
      },
      "answer": [
        "B"
      ],
      "explanation": "在树的孩子兄弟表示法中，若一个结点没有孩子（叶结点），则表现为该结点的左指针域为空，因此本题答案为“6”。至于“5个结点的左右指针域都为空”，表示树中有5个结点既没有孩子又没有右兄弟，约束条件比题中的“求叶结点的个数”要求更严格。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_10",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "若 $T_{1}$ 是由有序树 $T$ 转换而来的二叉树，则 $T$ 中结点的后根序列就是 $T_{1}$ 中结点的（）序列。",
      "options": {
        "A": "先序",
        "B": "中序",
        "C": "后序",
        "D": "层序"
      },
      "answer": [
        "B"
      ],
      "explanation": "有序树 T 转换成二叉树 $T_{1}$ 时，T 的后根序列是对应 $T_{1}$ 的中序序列还是后序序列呢（显然树的后根序列不可能对应二叉树的先序序列和层序序列）？看右图所示的例子，在树 T 中，叶结点\n\nB 应最先访问，在 $T_{1}$ 中，B 的右兄弟 C 转换为它的右孩子，若对应 $T_{1}$ 的后序序列，则 C 应在 B 的前面访问，所以 T 的后根序列不可能对应 $T_{1}$ 的后序序列。\n\n![](images/2ffd3b6421d01a5f01395ba37a9f9acd58574834e2f190efb13c254560e45f6b.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"A\"] --> B[\"B\"]\n    A --> C[\"C\"]\n    B --> D[\"树转化为二叉树\"]\n    C --> D\n    D --> E[\"树\"]\n    E --> F[\"A\"]\n    E --> G[\"C\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_11",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "某二叉树结点的中序序列为 BDAECF，后序序列为 DBEFCA，则该二叉树对应的森林包括（）棵树。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "C"
      ],
      "explanation": "根据二叉树的先序序列和中序序列可以确定一棵二叉树。根据后序序列， $A$ 是二叉树的根结点。根据中序序列，二叉树的形态如下图(a)所示。对于 $A$ 的左子树，根据后序序列， $B$ 比 $D$ 后被访问，因此 $B$ 必为 $D$ 的父结点，又根据中序序列， $D$ 是 $B$ 的右孩子。对于 $A$ 的右子树，同理可确定结点 $E$ 、 $C$ 、 $F$ 的关系。此二叉树的形态如下图(b)所示。\n\n![](images/3ad4f0e2e3711cf461f1e9f1fbd9a382e3beffbf7b5e93c583da1cc07281b333.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"A\"] --> B[\"B, D\"]\n    A --> E[\"E, C, F\"]\n```\n</details>\n\n(a)\n\n![](images/159087a736e0cbab6d0a481e5fddf71ff49e3600e56c68b5c996a0c29636221f.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A --> B\n    A --> C\n    B --> D\n    C --> E\n    C --> F\n```\n</details>\n\n(b)\n\n再根据二叉树与森林的对应关系，森林中树的棵数即其对应二叉树（向右上旋转 $45^{\\circ}$ 后）的根结点 A 及其右兄弟数，或解释为：对应二叉树从根结点 A 开始不断往右孩子访问，所访问到的结点数。可知此森林中有 3 棵树，根结点分别为 A、C 和 F。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_12",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "设 $X$ 是树 $T$ 中的一个非根结点， $B$ 是 $T$ 所对应的二叉树。在 $B$ 中， $X$ 是其双亲结点的右孩子，下列结论中正确的是（）。",
      "options": {
        "A": "在树 T 中，X 是其双亲结点的第一个孩子",
        "B": "在树 T 中，X 一定无右边兄弟",
        "C": "在树 T 中，X 一定是叶结点",
        "D": "在树 T 中，X 一定有左边兄弟"
      },
      "answer": [
        "D"
      ],
      "explanation": "在二叉树 B 中，X 是其双亲的右孩子，因此在树 T 中，X 必是其双亲结点的右兄弟，换句话说，X 在树中必有左兄弟。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_13",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "右图是一棵逻辑上的树 $T$ ，则在关于该树的存储结构的叙述中，错误的是（）。",
      "options": {
        "A": "若 T 采用双亲表示法，则有 9 个指向双亲的指针",
        "B": "若 $T$ 采用孩子表示法，则在 $T$ 中查找某个结点的孩子比双亲表示法更方便",
        "C": "若 T 采用孩子兄弟表示法，则在 T 中查找某个结点的双亲的时间复杂度为 $O(1)$",
        "D": "双亲表示法是顺序存储结构，孩子表示法和孩子兄弟表示法通常是链式存储结构"
      },
      "answer": [
        "C"
      ],
      "explanation": "若 T 采用双亲表示法存储，则除根结点外，其余每个结点都有指向其双亲的指针，T 共有 10 个结点，于是有 9 个指向双亲的指针，选项 A 正确。若 T 采用孩子表示法存储，则每个结点的孩子被视为一个线性表，且以单链表作为存储结构，只要遍历该单链表，就能找到某个结点的所有孩子，而双亲表示法要寻找某个结点的孩子，就必须遍历整棵树，选项 B 正确。若 T 采用孩子兄弟表示法，则在 T 中查找某个结点的双亲也必须遍历整棵树，时间复杂度为 $O(n)$ ，选项 C 错误。选项 D 显然正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_14",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "在森林的二叉树表示中，结点 M 和结点 N 是同一父结点的左孩子和右孩子，则在该森林中（）。",
      "options": {
        "A": "M 和 N 有同一双亲",
        "B": "$M$ 和 $N$ 可能无公共祖先",
        "C": "$M$ 是 $N$ 的孩子",
        "D": "$M$ 是 $N$ 的左兄弟"
      },
      "answer": [
        "B"
      ],
      "explanation": "在森林的二叉树表示中，当 M 和 N 的父结点是二叉树根结点时，M 和 N 在不同的树上。因此 M 和 N 可能无公共祖先。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_15",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2009 统考真题】将森林转换为对应的二叉树，若在二叉树中，结点 $u$ 是结点 $v$ 的父结点的父结点，则在原来的森林中， $u$ 和 $v$ 可能具有的关系是（）。 I. 父子关系 II. 兄弟关系 III. $u$ 的父结点与 $\\nu$ 的父结点是兄弟关系",
      "options": {
        "A": "只有 II",
        "B": "I 和 II",
        "C": "I 和 III",
        "D": "I、II 和 III"
      },
      "answer": [
        "B"
      ],
      "explanation": "森林与二叉树的转换规则为 “左孩子右兄弟”。在最后生成的二叉树中，父子关系在对应森林关系中可能是兄弟关系或者原本就是父子关系。\n\n说法 I: 若结点 v 是结点 u 的第二个孩子结点，转换时，结点 v 就变成结点 u 第一个孩子的右孩子，符合要求。说法 II: 结点 u 和 v 是兄弟结点的关系，但二者之中还有一个兄弟结点 k，则转换后结点 v 就变为结点 k 的右孩子，而结点 k 则是结点 u 的右孩子，符合要求。\n\n![](images/329c5d33766c03430199b332b35f63c8c52b2a4394cf94f889acb0911e9dd71c.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"u\"] --> B[\"v\"]\n    A --> C[\" \"]\n    D[\"u\"] --> E[\"v\"]\n    D --> F[\" \"]\n```\n</details>\n\n图 I\n\n![](images/943b3b4b03b825396b74800673ebbcdf242e2b642bacbcd7eb1da496f3333b5e.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\"u\"]\n    A --> C[\"v\"]\n    D[\" \"] --> E[\"u\"]\n    D --> F[\"v\"]\n```\n</details>\n\n图 II\n\n说法 III：若结点 u 的父结点与 v 的父结点是兄弟关系，则转换后，结点 u 和 v 分别在两者最左父结点的两棵子树中，不可能出现在同一条路径中。\n\n![](images/3ccd9ef7e7cf20243b00b01a1be91db00456e2f0296a9bbe8b8d68bb5a44280f.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"1\"] --> B[\"2\"]\n    A --> C[\"3\"]\n    B --> D[\"u\"]\n    C --> E[\"5\"]\n    C --> F[\"v\"]\n    C --> G[\"7\"]\n    \n    -->\n    \n    H[\"2\"] --> I[\"u\"]\n    H --> J[\"3\"]\n    J --> K[\"5\"]\n    J --> L[\"v\"]\n    L --> M[\"7\"]\n```\n</details>\n\n图 III\n\n【另解】由题意可知 u 是 v 的父结点的父结点，如下图所示，有四种情况：\n\n![](images/bd6ee79b5847cc3c31256e24520f4f6a08762b7e0679afb3c2a031a00ec21ed0.jpg)  \n(1)\n\n![](images/f94a8b7c29688bec2b6394e90e6f34a6fb024d8b680a5031409690cbbb12eab7.jpg)  \n(2)\n\n![](images/9972167d9ea6f1ea422742fedb2f8a882933a43e4b0bf1e64861b032d3354ead.jpg)  \n(3)\n\n![](images/2bf139d80183c78a2079b954d9fd923fbbef9fe50408ff408623778cb458bf47.jpg)  \n(4)\n\n根据树与二叉树的转换规则，将这四种情况转换成树中结点的关系。（1）在原来的树中 u 是 v 的父结点的父结点；（2）在树中 u 是 v 的父结点；（3）在树中 u 是 v 的父结点的兄弟；（4）在树中 u 与 v 是兄弟关系。由此可知说法 I 和 II 正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_16",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2011 统考真题】已知一棵有 2011 个结点的树，其叶结点数为 116，该树对应的二叉树中无右孩子的结点数是（）。",
      "options": {
        "A": "115",
        "B": "116",
        "C": "1895",
        "D": "1896"
      },
      "answer": [
        "D"
      ],
      "explanation": "树转换为二叉树时，树的每个分支结点的所有子结点中的最右子结点无右孩子，根结点转换后也没有右孩子，因此，对应二叉树中无右孩子的结点数 = 分支结点数 + 1 = 2011 - 116 + 1 = 1896。\n\n通常本题应采用特殊法求解，设题意中的树是如右图所示的结构，则对应的二叉树中仅有前115个叶结点有右孩子，所以无右孩子的结点数 $= 2011 - 115 = 1896$ 。\n\n![](images/7589836e38227a4e8e968d221d0224414746c6c67917b2511f787ad7b7b70f62.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\" \"]\n    B --> C[\" \"]\n    C --> D[\" \"]\n    C --> E[\" \"]\n    C --> F[\"...\"]\n    style C stroke-dasharray: 5 5\n    note right of C 共18\n```\n</details>\n\n共1895个中间结点  \n共116个叶结点",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_17",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2014 统考真题】将森林 $F$ 转换为对应的二叉树 $T$ , $F$ 中叶结点的个数等于（）。",
      "options": {
        "A": "T 中叶结点的个数",
        "B": "$T$ 中度为1的结点数",
        "C": "T 中左孩子指针为空的结点数",
        "D": "$T$ 中右孩子指针为空的结点数"
      },
      "answer": [
        "C"
      ],
      "explanation": "将森林转化为二叉树相当于用孩子兄弟表示法来表示森林。在变化过程中，原森林某结点的第一个孩子结点作为它的左子树，它的兄弟作为它的右子树。森林中的叶结点没有孩子结点，转化为二叉树时，该结点就没有左结点，因此 F 中叶结点的个数等于 T 中左孩子指针为空的结点数。此题还可通过一些特例来排除选项 A、B 和 D。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_18",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2019 统考真题】若将一棵树 T 转化为对应的二叉树 BT，则下列对 BT 的遍历中，其遍历序列与 T 的后根遍历序列相同的是（）。",
      "options": {
        "A": "先序遍历",
        "B": "中序遍历",
        "C": "后序遍历",
        "D": "按层遍历"
      },
      "answer": [
        "B"
      ],
      "explanation": "后根遍历树可分为两步：① 从左到右访问双亲结点的每个孩子（转化为二叉树后，先访问根结点，再访问右子树）；② 访问完所有孩子后，再访问它们的双亲结点（转化为二叉树后，先访问左子树，再访问根结点），因此树的后根遍历序列与其相应二叉树的中序遍历序列相同。对于此类题，采用特殊值法求解通常会更便捷，左下图树 T 转换为二叉树 BT 的过程如下图所示，树的后序遍历序列显然和其相应二叉树的中序遍历序列相同，均为 5,6,7,2,3,4,1。\n\n![](images/97df683f6f0516e53d303dbfe581a3afde4e8de66b0bdec7bd50e57078cf9432.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"1\"] --> B[\"2\"]\n    A --> C[\"3\"]\n    A --> D[\"4\"]\n    B --> E[\"5\"]\n    B --> F[\"6\"]\n    B --> G[\"7\"]\n    \n    H[\"1\"] --> I[\"2\"]\n    H --> J[\"3\"]\n    H --> K[\"4\"]\n    I --> L[\"5\"]\n    I --> M[\"6\"]\n    I --> N[\"7\"]\n    \n    O[\"1\"] --> P[\"2\"]\n    O --> Q[\"3\"]\n    O --> R[\"4\"]\n    P --> S[\"5\"]\n    P --> T[\"6\"]\n    P --> U[\"7\"]\n    \n    V[\"1\"] --> W[\"2\"]\n    V --> X[\"3\"]\n    V --> Y[\"4\"]\n    W --> Z[\"5\"]\n    W --> AA[\"6\"]\n    W --> AB[\"7\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_19",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2020 统考真题】已知森林 $F$ 及与之对应的二叉树 $T$ ，若 $F$ 的先根遍历序列是 $a, b, c, d, e, f$ ，后根遍历序列是 $b, a, d, f, e, c$ ，则 $T$ 的后序遍历序列是（）。",
      "options": {
        "A": "b, a, d, f, e, c",
        "B": "b, d, f, e, c, a",
        "C": "b, f, e, d, c, a",
        "D": "f, e, d, c, b, a"
      },
      "answer": [
        "C"
      ],
      "explanation": "森林 $F$ 的先根遍历序列对应于其二叉树 $T$ 的先序遍历序列，森林 $F$ 的后根遍历序列对应于其二叉树 $T$ 的中序遍历序列。即 $T$ 的先序遍历序列为 $a, b, c, d, e, f$ ，中序遍历序列为 $b, a, d, f, e, c$ 。根据二叉树 $T$ 的先序序列和中序序列可以唯一确定它的结构，构造过程如下：\n\n![](images/05c73245fffabf682da00aaa4f8d2521c3da78c5abc690b8218455ea1424de1e.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"a\"] --> B[\"b\"]\n    A --> C[\"dfec\"]\n    D[\"a\"] --> E[\"b\"]\n    D --> F[\"c\"]\n    G[\"a\"] --> H[\"b\"]\n    G --> I[\"c\"]\n    J[\"a\"] --> K[\"b\"]\n    J --> L[\"c\"]\n    M[\"a\"] --> N[\"d\"]\n    M --> O[\"fe\"]\n    P[\"a\"] --> Q[\"b\"]\n    P --> R[\"c\"]\n    S[\"d\"] --> T[\"e\"]\n    S --> U[\"f\"]\n```\n</details>\n\n可以得到二叉树 T 的后序序列为 b, f, e, d, c, a。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_20",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2021 统考真题】某森林 F 对应的二叉树为 T，若 T 的先序遍历序列是 a, b, d, c, e, g, f，中序遍历序列是 b, d, a, e, g, c, f，则 F 中树的棵数是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "C"
      ],
      "explanation": "由二叉树 T 的先序序列和中序序列可以构造出 T，如右图所示。由森林转化成二叉树的规则可知，森林中每棵树的根结点以右子树的方式相连，所以 T 中的结点 a、c、f 为 F 中树的根结点，森林 F 中有 3 棵树。\n\n![](images/57909eede9b0fe01c3fc291b480d316e6946cf1353899a7ddd8fdbda297b3dc2.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    a --> b\n    a --> c\n    b --> d\n    c --> e\n    c --> f\n    e --> g\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-4-4_21",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2025 统考真题】下列关于二叉树及森林的叙述中，正确的是（）。",
      "options": {
        "A": "完全二叉树中不存在度为 1 的结点",
        "B": "任意一个森林都可以转换为一棵二叉树",
        "C": "二叉树的分支结点数比叶结点数少",
        "D": "表达式树的根中保存的是最先计算的运算符"
      },
      "answer": [
        "B"
      ],
      "explanation": "完全二叉树中至多存在一个度为 1 的结点（最后一个非叶结点仅当总结点数为偶数时出现），选项 A 错误。根据 “左孩子右兄弟” 表示法，\n\n任意森林均可唯一地转换为一棵二叉树，即将每棵树的根视为兄弟，各树内部按左孩子、右兄弟关系重构，选项 B 正确。在任意非空二叉树中，叶结点数 $n_{0}$ 等于度为 2 的结点数 $n_{2}$ 加 1。但分支结点包括度为 1 和度为 2 的结点，其总数不一定少于叶结点数。例如，一条单支二叉树中，叶结点仅 1 个，而分支结点有 n-1 个，远多于叶结点。选项 C 错误。表达式树的结构体现运算优先级，根结点对应最后执行的运算符，而非最先计算的。最先计算的操作位于最深层的子树中，选项 D 错误。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_04",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "设哈夫曼编码的长度不超过 4，若已对两个字符编码为 1 和 01，则还最多可对（）个字符编码。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "C"
      ],
      "explanation": "在哈夫曼编码中，一个编码不能是任何其他编码的前缀。3 位编码可能是 001，对应的 4 位编码只能是 0000 和 0001。3 位编码也可能是 000，对应的 4 位编码只能是 0010 和 0011。若全采用 4 位编码，则可以为 0000, 0001, 0010 和 0011。题中问的是最多，所以选择选项 C。\n\n【另解】若哈夫曼编码的长度只允许小于或等于4，则哈夫曼树的高度最高是5，已知一个字符编码为1，另一个字符编码为01，这说明第二层和第三层各有一个叶结点，为使得该树从第3层起能够对尽可能多的字符编码，余下的二叉树应该是满二叉树，如右图所示，底层可以有4个叶结点，最多可以再对4个字符编码。\n\n![](images/f78ab2e5bee93e3735f33f7bfb8e556b67925193b78e298b3e06d59f4ac16ceb.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] -->|0| B[\" \"]\n    A -->|1| C[\" \"]\n    B -->|0| D[\" \"]\n    B -->|1| E[\" \"]\n    D -->|0| F[\" \"]\n    D -->|1| G[\" \"]\n    E -->|0| H[\" \"]\n    E -->|1| I[\" \"]\n    F --> J[\" \"]\n    F --> K[\" \"]\n    G --> L[\" \"]\n    G --> M[\" \"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_05",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "一棵哈夫曼树共有215个结点，对其进行哈夫曼编码，共能得到（）个不同的码字。",
      "options": {
        "A": "107",
        "B": "108",
        "C": "214",
        "D": "215"
      },
      "answer": [
        "B"
      ],
      "explanation": "根据上题的结论，叶结点数为 $(215+1)/2=108$ ，所以共有108个不同的码字。\n\n【另解】在哈夫曼树中只有度为0和2的结点，结点总数 $n=n_{0}+n_{2}$ ，且 $n_{0}=n_{2}+1$ ，由题知n=215， $n_{0}=108$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_06",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "设某哈夫曼树有 5 个叶结点，则该哈夫曼树的高度最高可以是（）。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "C"
      ],
      "explanation": "在哈夫曼树的构造中，每个初始结点最终都成为叶结点，5个初始结点构造的哈夫曼树共新建4个双分支结点，4个双分支结点所构成的高度最高的哈夫曼树如右图所示，其高度为5。\n\n![](images/207c6cb791e99a131f14cc58614167474d0ed67bc41740988a53964585302074.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\"A\"]\n    A --> C[\"B\"]\n    B --> D[\"C\"]\n    C --> E[\"E\"]\n    D --> F[\"D\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_07",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "以下对于哈夫曼树的说法中，错误的是（）",
      "options": {
        "A": "用一组权值构造出的哈夫曼树可能不唯一，但带权路径长度唯一",
        "B": "哈夫曼树具有最小的带权路径长度",
        "C": "哈夫曼树中没有度为 1 的结点",
        "D": "哈夫曼树中除了度为 1 的结点，还有度为 2 的结点和叶结点"
      },
      "answer": [
        "D"
      ],
      "explanation": "在哈夫曼树的构造过程中，每次选根的权值最小的两棵树，一棵作为左子树，一棵作为右子树，生成新的二叉树，新的二叉树根的权值应为其左右两棵子树根结点权值的和。至于谁做左子树，谁做右子树，没有限制，所以构造的哈夫曼树是不唯一的，但其带权路径长度是最小的和唯一的。哈夫曼树只有度为0和2的结点，度为0的结点是外结点，带有权值，没有度为1的结点。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_08",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列关于哈夫曼树的说法中，错误的是（）。 I. 哈夫曼树的总结点数不能是偶数 II. 哈夫曼树中度为 1 的结点数等于度为 2 和 0 的结点数之差 III. 哈夫曼树的带权路径长度等于其所有分支结点的权值之和",
      "options": {
        "A": "仅 III",
        "B": "I 和 II",
        "C": "仅 II",
        "D": "I、II 和 III"
      },
      "answer": [
        "C"
      ],
      "explanation": "由 n 个初始结点构造的哈夫曼树，会新建 n-1 个双分支结点，因此总结点数为 2n-1，必为奇数，说法 I 正确。哈夫曼树中没有度为 1 的结点，说法 II 错误。哈夫曼的带权路径长度有两种计算方法：① 所有叶结点的带权路径长度之和；② 所有分支结点的权值之和，说法 III 正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_09",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "若度为 $m$ 的哈夫曼树中，叶结点数为 $n$ ，则非叶结点的个数为（）。",
      "options": {
        "A": "$n - 1$",
        "B": "$\\lfloor n / m\\rfloor -1$",
        "C": "$\\lceil (n - 1) / (m - 1)\\rceil$",
        "D": "$\\lceil n / (m - 1)\\rceil -1$"
      },
      "answer": [
        "C"
      ],
      "explanation": "一棵度为 m 的哈夫曼树应只有度为 0 和 m 的结点，设度为 m 的结点有 $n_{m}$ 个，度为 0 的结点有 $n_{0}$ 个，又设结点总数为 N， $N = n_{0} + n_{m}$ 。因 N 个结点的哈夫曼树有 N - 1 条分支，则 $mn_{m} = N - 1 = n_{m} + n_{0} - 1$ ，整理得 $(m - 1)n_{m} = n_{0} - 1$ ， $n_{m} = (n_{0} - 1)/(m - 1)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_10",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "并查集的结构是一种（）。",
      "options": {
        "A": "二叉链表存储的二叉树",
        "B": "双亲表示法存储的树",
        "C": "顺序存储的二叉树",
        "D": "孩子表示法存储的树"
      },
      "answer": [
        "B"
      ],
      "explanation": "并查集的存储结构是用双亲表示法存储的树，主要是为了方便两个重要的操作。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_11",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "并查集中最核心的两个操作是：① 查找，查找两个元素是否属于同一个集合；② 合并，若两个元素不属于同一个集合，且所在的两个集合互不相交，则合并这两个集合。假设初始长度为 10（0～9）的并查集，按 1-2、3-4、5-6、7-8、8-9、1-8、0-5、1-9 的顺序进行查找和合并操作，最终并查集共有（）个集合。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "C"
      ],
      "explanation": "初始时，0～9各自成一个集合。查找1-2时，合并{1}和{2}；查找3-4时，合并{3}和{4}；\n\n查找 5-6 时，合并 $\\{5\\}$ 和 $\\{6\\}$ ；查找 7-8 时，合并 $\\{7\\}$ 和 $\\{8\\}$ ；查找 8-9 时，合并 $\\{7, 8\\}$ 和 $\\{9\\}$ ；查找 1-8 时，合并 $\\{1, 2\\}$ 和 $\\{7, 8, 9\\}$ ；查找 0-5 时，合并 $\\{0\\}$ 和 $\\{5, 6\\}$ ；查找 1-9 时，它们属于同一个集合。最终的集合为 $\\{0, 5, 6\\}$ 、 $\\{1, 2, 7, 8, 9\\}$ 和 $\\{3, 4\\}$ ，因此答案选择选项 C。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_12",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "下列关于并查集的说法中，正确的是（）（注，本题涉及图的考点）。",
      "options": {
        "A": "并查集不能检测图中是否存在环路的问题",
        "B": "通过路径优化后的并查集在最坏情况下的高度仍是 $O(n)$",
        "C": "Find 操作返回集合中元素个数的相反数，它用来作为某个集合的标志",
        "D": "Union 操作时可根据当前集合的规模，将小集合合并到大集合中"
      },
      "answer": [
        "D"
      ],
      "explanation": "依次探测图的各条边，用并查集检查该边依附的两个顶点是否已属于同一集合（两个顶点的根结点是否相同）。若是，则说明图中存在环路，选项A错误。经过路径优化后，并查集在最坏情况下的高度远小于 $O(n)$ ，选项B错误。Find操作总返回当前根结点作为集合的标志，选项C错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_13",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "下列关于并查集的叙述中，（）是错误的（注意，本题涉及图的考点）。",
      "options": {
        "A": "并查集是用双亲表示法存储的树",
        "B": "并查集可用于实现克鲁斯卡尔算法",
        "C": "并查集可用于判断无向图的连通性",
        "D": "在长度为 n 的并查集中进行查找操作的时间复杂度为 $O(\\log_{2}n)$"
      },
      "answer": [
        "D"
      ],
      "explanation": "在用并查集实现 Kruskal 算法求图的最小生成树时：判断是否加入一条边之前，先查找这条边关联的两个顶点是否属于同一个集合（判断加入这条边之后是否形成回路），若形成回路，则继续判断下一条边；若不形成回路，则将该边和边对应的顶点加入最小生成树 T，并继续判断下一条边，直到所有顶点都已加入最小生成树 T。选项 B 正确。用并查集判断无向图连通性的方法：遍历无向图的边，每遍历到一条边，就把这条边连接的两个顶点合并到同一个集合中，处理完所有边后，只要是相互连通的顶点都会被合并到同一个子集合中，相互不连通的顶点一定在不同的子集合中。选项 C 正确。未做路径优化的并查集在最坏情况下的高度为 n，此时查找操作的时间复杂度为 $O(n)$ ，时间复杂度通常指最坏情况下的时间复杂度。选项 D 错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_14",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2010 统考真题】 $n(n \\geqslant 2)$ 个权值均不相同的字符构成哈夫曼树，关于该树的叙述中，错误的是（）。",
      "options": {
        "A": "该树一定是一棵完全二叉树",
        "B": "树中一定没有度为 1 的结点",
        "C": "树中两个权值最小的结点一定是兄弟结点",
        "D": "树中任意一个非叶结点的权值一定不小于下一层任意一个结点的权值"
      },
      "answer": [
        "A"
      ],
      "explanation": "哈夫曼树为带权路径长度最小的二叉树，不一定是完全二叉树。哈夫曼树中没有度为1的结点，选项B正确。构造哈夫曼树时，最先选取两个权值最小的结点作为左右子树构造一棵新的二叉树，选项C正确。哈夫曼树中任意一个非叶结点的权值为其左右子树根结点的权值之和，可知，哈夫曼树中任意一个非叶结点的权值一定不小于下一层任意一个结点的权值。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_15",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2014 统考真题】5 个字符有如下 4 种编码方案，不是前缀编码的是（）。",
      "options": {
        "A": "01,0000,0001,001,1",
        "B": "011,000,001,010,1",
        "C": "000,001,010,011,100",
        "D": "0,100,110,1110,1100"
      },
      "answer": [
        "D"
      ],
      "explanation": "前缀编码的定义是在一个字符集中，任何一个字符的编码都不是另一个字符编码的前缀。选项 D 中的编码 110 是编码 1100 的前缀，违反了前缀编码的规则，所以选项 D 不是前缀编码。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_16",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2015统考真题】下列选项给出的是从根分别到达两个叶结点路径上的权值序列，能属于同一棵哈夫曼树的是（）。",
      "options": {
        "A": "24, 10, 5 和 24, 10, 7",
        "B": "24,10,5 和 24,12,7",
        "C": "24, 10, 10 和 24, 14, 11",
        "D": "24, 10, 5 和 24, 14, 6"
      },
      "answer": [
        "D"
      ],
      "explanation": "在哈夫曼树中，左右孩子权值之和为父结点权值。仅以分析选项 A 为例：若两个 10 分别属于两棵不同的子树，则根的权值不等于其孩子的权值和，不符；若两个 10 属同棵子树，则其权值不等于其两个孩子（叶结点）的权值和，不符。选项 B、C 选项的排除方法相同。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_17",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2017 统考真题】已知字符集 $\\{a, b, c, d, e, f, g, h\\}$ ，各字符的哈夫曼编码依次是 0100, 10, 0000, 0101, 001, 011, 11, 0001，编码序列 0100011001001011110101 的译码结果是（）。",
      "options": {
        "A": "acgabfh",
        "B": "ad bag bb",
        "C": "afbeagd",
        "D": "a fe e f gd"
      },
      "answer": [
        "D"
      ],
      "explanation": "哈夫曼编码是前缀编码，各个编码的前缀不同，因此直接拿编码序列与哈夫曼编码一一比对即可。序列可分割为 0100 011 001 001 011 11 0101，译码结果是 afeefgd。选项 D 正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_18",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2018 统考真题】已知字符集 $\\{a, b, c, d, e, f\\}$ ，若各字符出现的次数分别为 6, 3, 8, 2, 10, 4，则对应字符集中各字符的哈夫曼编码可能是（）。",
      "options": {
        "A": "00, 1011, 01, 1010, 11, 100",
        "B": "00, 100, 110, 000, 0010, 01",
        "C": "10, 1011, 11, 0011, 00, 010",
        "D": "0011, 10, 11, 0010, 01, 000"
      },
      "answer": [
        "A"
      ],
      "explanation": "根据各字符出现的次数构造的哈夫曼树如右图所示。由图可知，a、c和e的编码长度应该相同；a和c的第1个编码应该相同，且与e的第1个编码不同；b和d的前3个编码应该相同。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_19",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2019 统考真题】对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有 115 个结点，则 n 的值是（）。",
      "options": {
        "A": "56",
        "B": "57",
        "C": "58",
        "D": "60"
      },
      "answer": [
        "C"
      ],
      "explanation": "n 个符号构造成哈夫曼树的过程中，共新建了 n-1 个结点（双分支结点），因此哈夫曼树的结点总数为 2n-1=115，n 的值为 58。\n\n![](images/6913ce773c4a8af7ac20189b9af40e4448b1ef3176a3237153977dcbd341d545.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"33\"] --> B[\"14\"]\n    A --> C[\"19\"]\n    B --> D[\"a 6\"]\n    B --> E[\"c 8\"]\n    C --> F[\"e 10\"]\n    C --> G[\"f 4\"]\n    C --> H[\"5\"]\n    H --> I[\"d 2\"]\n    H --> J[\"b 3\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_20",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2021 统考真题】若某二叉树有 5 个叶结点，其权值分别为 10, 12, 16, 21, 30，则其最小的带权路径长度（WPL）是（）。",
      "options": {
        "A": "89",
        "B": "200",
        "C": "208",
        "D": "289"
      },
      "answer": [
        "B"
      ],
      "explanation": "对于带权值的结点，构造出哈夫曼树的带权路径长度（WPL）最小，哈夫曼树的构造过程如下图所示。求得其 $WPL = (10 + 12) \\times 3 + (30 + 16 + 21) \\times 2 = 200$ 。\n\n![](images/cee848eee21e8e10d7d17b796a3ac4a715a3484975702af8a3721c2e5b09c665.jpg)",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_21",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2022 统考真题】对任意给定的含 $n (n > 2)$ 个字符的有限集 $S$ ，用二叉树表示 $S$ 的哈夫曼编码集和定长编码集，分别得到二叉树 $T_{1}$ 和 $T_{2}$ 。下列叙述中，正确的是（）。",
      "options": {
        "A": "$T_{1}$ 与 $T_{2}$ 的结点数相同",
        "B": "$T_{1}$ 的高度大于 $T_{2}$ 的高度",
        "C": "出现频次不同的字符在 $T_{1}$ 中处于不同的层",
        "D": "出现频次不同的字符在 $T_{2}$ 中处于相同的层"
      },
      "answer": [
        "D"
      ],
      "explanation": "可以画一个简单的特例来证明。图 1 是满足条件的二叉树 $T_{1}$ ，图 2 是满足条件的二叉树 $T_{2}$ ，结点中有值表示这个结点是编码字符。 $T_{1}$ 和 $T_{2}$ 的结点数不同，选项 A 错误。 $T_{1}$ 的高度等于 $T_{2}$ 的高度，选项 B 错误。出现频次不同的字符在 $T_{1}$ 中也可能处于相同的层，选项 C 错误。对于定长编码集，所有字符一定都在 $T_{2}$ 中处于相同的层，而且都是叶结点。\n\n![](images/e0197d06452c37bb2adb06a1b9c6c0399b190de45be283e7a8ea5f62a4c52095.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\" \"]\n    A --> C[\"3\"]\n    B --> D[\"1\"]\n    B --> E[\"2\"]\n```\n</details>\n\n图1\n\n![](images/8fd5df400a2d8769b60880344e7b4d519e3d27d428297aaaa5f17e865720333b.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\" \"]\n    A --> C[\" \"]\n    B --> D[\"1\"]\n    B --> E[\"2\"]\n    C --> F[\"3\"]\n```\n</details>\n\n图 2",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_22",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2023 统考真题】在由 6 个字符组成的字符集 S 中，各字符出现的频次分别为 3, 4, 5, 6, 8, 10，为 S 构造的哈夫曼编码的加权平均长度为（）。",
      "options": {
        "A": "2.4",
        "B": "2.5",
        "C": "2.67",
        "D": "2.75"
      },
      "answer": [
        "B"
      ],
      "explanation": "构建哈夫曼树的过程如下图所示。\n\n![](images/33e93df32284a4d7c6f519a24efc4545b5b215ff30f9fb680561de0ce7bad5f2.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"3 4 5 6 810\"] --> B[\"合并3、4\"]\n    B --> C[\"7\"]\n    C --> D[\"③\"]\n    C --> E[\"④\"]\n    F[\"5 6 7 8 10\"] --> G[\"合并5、6\"]\n    G --> H[\"7\"]\n    H --> I[\"③\"]\n    H --> J[\"④\"]\n    K[\"7 8 10 11\"] --> L[\"合并7、8\"]\n    L --> M[\"15\"]\n    M --> N[\"③\"]\n    M --> O[\"④\"]\n    P[\"10 11 15\"] --> Q[\"合并15、21\"]\n    Q --> R[\"36\"]\n    R --> S[\"15\"]\n    S --> T[\"7\"]\n    S --> U[\"21\"]\n    T --> V[\"③\"]\n    T --> W[\"④\"]\n    X[\"15 21\"] --> Y[\"合并10、11\"]\n    Y --> Z[\"15\"]\n    Z --> AA[\"③\"]\n    Z --> AB[\"④\"]\n    AC[\"21\"] --> AD[\"合并15、21\"]\n    AD --> AE[\"36\"]\n    AE --> AF[\"15\"]\n    AF --> AG[\"7\"]\n    AF --> AH[\"⑧\"]\n    AI[\"21\"] --> AJ[\"③\"]\n    AI --> AK[\"④\"]\n    AL[\"11\"] --> AM[\"③\"]\n    AL --> AN[\"④\"]\n    AO[\"11\"] --> AP[\"③\"]\n    AO --> AQ[\"④\"]\n    AR[\"10\"] --> AS[\"③\"]\n    AR --> AT[\"④\"]\n    AU[\"10\"] --> AV[\"③\"]\n    AU --> AW[\"④\"]\n```\n</details>\n\n对叶结点的哈夫曼编码，共有4个长度为3的叶结点、2个长度为2的叶结点，编码的加权平均长度为 $[(3+4+5+6)\\times3+(8+10)\\times2]/(3+4+5+6+8+10)=2.5$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_5-5-3_23",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "树与二叉树",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2025 统考真题】设字符集 S 中包含 7 个字符，各字符出现的频次分别为 2, 3, 4, 6, 8, 10, 11。现为 S 中的各字符构造哈夫曼编码，编码长度不小于 3 的字符数是（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "D"
      ],
      "explanation": "哈夫曼编码的编码长度等于该字符在哈夫曼树中的路径深度（从根到该叶结点的边数）。一个字符所在子树参与后续合并的轮数越多，其深度越大。合并过程如下：① 合并2和3→新结点5；② 合并4和5→新结点9；③ 合并6和8→新结点14；④ 合并9和10→新结点19；⑤ 合并11和14→新结点25；⑥ 合并19和25→根结点44。最终构建的哈夫曼树如右图所示。因此，编码长度不小于3的字符为4、2、3、6、8，共5个。\n\n![](images/320f82ee12b972bb68995802e2ac1dbfaec90eb996bcd460b7134d348cc9718b.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"44\"] --> B[\"19\"]\n    A --> C[\"25\"]\n    B --> D[\"9\"]\n    B --> E[\"10\"]\n    C --> F[\"11\"]\n    C --> G[\"14\"]\n    D --> H[\"4\"]\n    D --> I[\"5\"]\n    I --> J[\"2\"]\n    I --> K[\"3\"]\n```\n</details>\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch05-第5章-树与二叉树.md"
    },
    {
      "id": "数据结构_6-1-2_07",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "无向图 G 有 23 条边，度为 4 的顶点有 5 个，度为 3 的顶点有 4 个，其余都是度为 2 的顶点，则图 G 有（）个顶点。",
      "options": {
        "A": "11",
        "B": "12",
        "C": "15",
        "D": "16"
      },
      "answer": [
        "D"
      ],
      "explanation": "因为在具有 $n$ 个顶点、 $e$ 条边的无向图中，有 $\\sum_{i=1}^{n} \\mathrm{TD}(v_i) = 2e$ ，所以求得度为 2 的顶点数为 7，从而共有 16 个顶点。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-1-2_08",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "在有 n 个顶点的有向图中，顶点的度最大可达（）。",
      "options": {
        "A": "n",
        "B": "n - 1",
        "C": "2n",
        "D": "2n-2"
      },
      "answer": [
        "D"
      ],
      "explanation": "在有向图中，顶点的度等于入度与出度之和。n 个顶点的有向图中，任意一个顶点最多还可以与其他 n-1 个顶点有一对指向相反的边相连。注意，数据结构中仅讨论简单图。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-1-2_09",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "具有 6 个顶点的无向图，当有（）条边时能确保是一个连通图。",
      "options": {
        "A": "8",
        "B": "9",
        "C": "10",
        "D": "11"
      },
      "answer": [
        "D"
      ],
      "explanation": "5个顶点构成一个完全无向图，需要 $n(n - 1) / 2 = 10$ 条边；再加上1条边后，能保证第6个顶点必然与此完全无向图构成一个连通图，所以共需11条边。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-1-2_10",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "设有无向图 $G = (V, E)$ 和 $G' = (V', E')$ ，若 $G'$ 是 $G$ 的生成树，则下列不正确的是（）。 I. $G'$ 为G的连通分量 II. $G'$ 为 G 的无环子图 III. $G'$ 为 G 的极小连通子图且 $V' = V$",
      "options": {
        "A": "I、II",
        "B": "只有 III",
        "C": "II、III",
        "D": "只有 I"
      },
      "answer": [
        "D"
      ],
      "explanation": "一个连通图的生成树是一个极小连通子图，显然它是无环的，因此说法 II、III 正确。极大连通子图称为连通分量， $G'$ 连通但非连通分量。这里再补充一下“极大连通子图”：若图本来就是连通的，且每个子部分包含其本身的所有顶点和边，则它就是极大连通子图。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-1-2_11",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "具有 51 个顶点和 21 条边的无向图的连通分量最多为（）。",
      "options": {
        "A": "33",
        "B": "34",
        "C": "45",
        "D": "32"
      },
      "answer": [
        "C"
      ],
      "explanation": "初始考虑只有 51 个顶点的无向图 G，此时 G 中每个顶点都是连通分量，问题转化为向 G 中添加 21 条边，如何添加这 21 条边使得连通分量数目最多。若向两个不同的连通分量之间添加边，则连通分量数目会减 1，所以应尽可能地将这 21 条边加入同一个连通分量且让其接近完全图，含有 7 个顶点的完全图有 21 条边，所以用 7 个顶点构成一个含有 21 条边的连通分量，剩下 51 - 7 = 44 个顶点对应 44 个连通分量，共有 45 个连通分量。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-1-2_12",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "在右图所示的有向图中，共有（）个强连通分量。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "B"
      ],
      "explanation": "强连通分量是极大强连通子图，任意两个顶点之间有方向相反的两条路径。由定义不难得出，若一个顶点只有出边或入边，则该顶点必定单独构成一个连通分量。图中，顶点 B 只有出边，其他所有顶点都不可能有到顶点 B 的路径，所以顶点 B 单独构成一个强连通分量。在顶点 A、C、D、E 中，任意两个顶点之间都有方向相反的两条路径，所以可构成一个强连通分量。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-1-2_13",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "若具有 n 个顶点的图是一个环，则它有（）棵生成树。",
      "options": {
        "A": "$n^{2}$",
        "B": "n",
        "C": "n-1",
        "D": "1"
      },
      "answer": [
        "B"
      ],
      "explanation": "n 个顶点的生成树是具有 n-1 条边的极小连通子图，因为 n 个顶点构成的环共有 n 条边，去掉任意一条边就是一棵生成树，所以共有 n 种情况，所以可以有 n 棵不同的生成树。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-1-2_14",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "若一个具有 n 个顶点、e 条边的无向图是一个森林，则该森林中心有（）棵树。",
      "options": {
        "A": "n",
        "B": "e",
        "C": "n - e",
        "D": "1"
      },
      "answer": [
        "C"
      ],
      "explanation": "n 个顶点的树有 n-1 条边，假设森林中有 x 棵树，将每棵树的根连到一个添加的顶点，则成为一棵树，顶点数是 $n+1$ ，边数是 $e+x$ ，从而可知 x=n-e。\n\n【另解】设森林中有 x 棵树，则再用 x-1 条边就可将所有的树连接成一棵树，此时边数 +1 = 顶点数，即 $e + (x - 1) + 1 = n$ ，所以 x = n - e。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-1-2_15",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2009 统考真题】下列关于无向连通图特性的叙述中，正确的是（）。 I. 所有顶点的度之和为偶数 II. 边数大于顶点个数减 1 III. 至少有一个顶点的度为 1",
      "options": {
        "A": "只有 I",
        "B": "只有 II",
        "C": "I 和 II",
        "D": "I 和 III"
      },
      "answer": [
        "A"
      ],
      "explanation": "每条边都连接了两个顶点，在计算顶点的度之和时每条边都被计算了两次，所以所有顶点的度之和偶数。无向连通图对应的生成树也是无向连通图，但此时边数等于顶点数减1，说法II错误。考虑2个或以上的顶点恰好构成一个环的情况，此时每个顶点的度都为2，说法III错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-1-2_16",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2010 统考真题】若无向图 $G = (V, E)$ 中含有 7 个顶点，要保证图 $G$ 在任何情况下都是连通的，则需要的边数最少是（）。",
      "options": {
        "A": "6",
        "B": "15",
        "C": "16",
        "D": "21"
      },
      "answer": [
        "C"
      ],
      "explanation": "题干要求无论如何分配边，都能使 7 个顶点连通，这不同于只要 6 条边两两相连就能构成一个连通图的情形。考虑最极端的情形，即图 G 的某 6 个顶点构成一个完全无向图，此时若再添加一条边，则都将连通第 7 个顶点，使该图变成一个连通图。所以最少边数 $=6 \\times 5/2 + 1 = 16$ 。若边数 n 小于或等于 15，可以使这 n 条边仅连接图 G 中的某 6 个顶点，从而导致第 7 个顶点无法与这 6 个顶点构成连通图（不满足“在任何情况下”）。\n\n为简单起见，以 5 个顶点为例，左边 4 个顶点和 $4 \\times 3/2 = 6$ 条边构成一个完全图，此时若再添加一条边（可以是虚线中的任意一条），则能保证这 5 个顶点在任何情况下都是连通的，如右图所示。若边数小于 7，则不能保证 5 个顶点在任何情况下都是连通的。\n\n![](images/1205685b0483ff9d6360d7da6e99c9db6bd36d50089a10e55e5d7a6404bdc1c8.jpg)",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-1-2_17",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2017统考真题】已知无向图 $G$ 含有16条边，其中度为4的顶点个数为3，度为3的顶点个数为4，其他顶点的度均小于3。图 $G$ 所含的顶点个数至少是（）。",
      "options": {
        "A": "10",
        "B": "11",
        "C": "13",
        "D": "15"
      },
      "answer": [
        "B"
      ],
      "explanation": "无向图边数的 2 倍等于各顶点度数的总和。要求至少的顶点数，应使每个顶点的度取最大，而其他顶点的度均小于 3，因此可设它们的度都为 2，并设它们的数量为 x，列出方程 $4 \\times 3 + 3 \\times 4 + 2x = 16 \\times 2$ ，解得 x = 4。因此至少包含 $4 + 4 + 3 = 11$ 个顶点。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-1-2_18",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2022 统考真题】对于无向图 $G = (V, E)$ ，下列选项中，正确的是（）。",
      "options": {
        "A": "当 $|V|>|E|$ 时，G一定是连通的",
        "B": "当 $|V|<|E|$ 时，G一定是连通的",
        "C": "当 $|V|=|E|-1$ 时，G一定是不连通的",
        "D": "当 $|V|>|E|+1$ 时，G一定是不连通的"
      },
      "answer": [
        "D"
      ],
      "explanation": "对于此类分析图的边数、顶点数与连通性问题，思路是寻找临界情况，在临界情况下任意增加或减少一条边，都会改变图的连通性。第一种临界情况如图1所示，此时若减少任意一条边，图就由连通变为不连通，即无向图连通的最小边数是 $|V|-1$ ，因此，当 $|E|<|V|-1$ 时，图一定不连通，选项C错误，选项D正确。第二种临界情况如图2所示，此时若增加任意一条边，则图就由不连通变为连通，即无向图不连通的最大边数是 $(|V|-1)(|V|-2)/2$ （此时 $|V|-1$ 个顶点构成一个完全图），因此，仅当 $|E|\\geqslant(|V|-1)(|V|-2)/2+1$ 时才能保证无向图一定连通，选项A、B错误。\n\n![](images/120fe90c35a31262f881c8fcff5f15071afacd4076c0911060db6705d73b4e03.jpg)  \n图1\n\n![](images/be37c46f2788dc4dc849ea0e72e0ad02f475a65a2e6708629cdd860a64b02e3e.jpg)  \n图 2\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_01",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于图的存储结构的说法中，错误的是（）。",
      "options": {
        "A": "使用邻接矩阵存储一个图时，在不考虑压缩存储的情况下，所占用的存储空间大小只与图中的顶点数有关，与边数无关",
        "B": "邻接表只用于有向图的存储，邻接矩阵适用于有向图和无向图",
        "C": "若一个有向图的邻接矩阵的对角线以下的元素为 0，则该图的拓扑序列必定存在",
        "D": "存储无向图的邻接矩阵是对称的，所以只需存储邻接矩阵的下（或上）三角部分"
      },
      "answer": [
        "D"
      ],
      "explanation": "DFS 算法通常以递归形式实现，其执行过程依赖系统提供的递归工作栈，在最坏情况下，递归深度可达 $|V|$ ，因此空间复杂度为 $O(|V|)$ 。\n\n图的遍历本质上是通过边依次访问邻接点的过程。因此，无论是深度优先搜索还是广度优先搜索，其时间复杂度仅取决于图的存储结构，而与访问顺序无关。具体而言：采用邻接矩阵存储时，对每个顶点需扫描整行以查找邻接点，总时间复杂度为 $O(|V|^{2})$ ；采用邻接表存储时，每个顶点和每条边均被访问常数次，总时间复杂度为 $O(|V| + |E|)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_09",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "用邻接表法存储图所用的空间大小（）。",
      "options": {
        "A": "与图的顶点数和边数有关",
        "B": "只与图的边数有关",
        "C": "只与图的顶点数有关",
        "D": "与边数的平方有关"
      },
      "answer": [
        "A"
      ],
      "explanation": "邻接表存储时，顶点数 $n$ 决定了顶点表的大小，边数 $e$ 决定了边表结点的个数，且无向图的\n\n每条边存储两次，总存储空间为 $O(n+2e)$ 。而邻接矩阵只与图的顶点数有关，为 $O(n^{2})$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_10",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "若邻接表中有奇数个边表结点，则（）。",
      "options": {
        "A": "图中有奇数个顶点",
        "B": "图中有偶数个顶点",
        "C": "图为无向图",
        "D": "图为有向图"
      },
      "answer": [
        "D"
      ],
      "explanation": "无向图采用邻接表表示时，每条边存储两次，所以其边表结点的个数为偶数。题中边表结点为奇数个，所以必然是有向图，且有奇数条边。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_11",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "在有向图的邻接表存储结构中，顶点 $v$ 在边表中出现的次数是（）。",
      "options": {
        "A": "顶点 v 的度",
        "B": "顶点 v 的出度",
        "C": "顶点 v 的入度",
        "D": "依附于顶点 v 的边数"
      },
      "answer": [
        "C"
      ],
      "explanation": "题中的边表是不包括顶点表的。因为任何顶点 u 对应的边表中存放的都是以 u 为起点的边所对应的另一个顶点 v。从而 v 在边表中出现的次数也就是它的入度。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_12",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "n 个顶点的无向图的邻接表最多有（）个边表结点。",
      "options": {
        "A": "$n^{2}$",
        "B": "$n(n-1)$",
        "C": "$n(n+1)$",
        "D": "$n(n-1)/2$"
      },
      "answer": [
        "B"
      ],
      "explanation": "最多有 $n(n-1)/2$ 条边，每条边在邻接表中存储两次，因此边表结点最多为 $n(n-1)$ 个。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_13",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "设某无向图中有 $n$ 个顶点和 $e$ 条边，则建立该图的邻接表的时间复杂度为（）。",
      "options": {
        "A": "$O(n + e)$",
        "B": "$O(n^{2})$",
        "C": "$O(ne)$",
        "D": "$O(n^{3})$"
      },
      "answer": [
        "A"
      ],
      "explanation": "建立图的邻接表需要遍历所有的顶点和边，每个顶点有一个顶点表结点，每条边需要创建一个边表结点并插入到相应的链表中。因此，共需 $n + 2e$ 次操作，时间复杂度为 $O(n + e)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_14",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "假设有 $n$ 个顶点、 $e$ 条边的有向图用邻接表表示，则删除与某个顶点 $v$ 相关的所有边的时间复杂度为（）。",
      "options": {
        "A": "$O(n)$",
        "B": "$O(e)$",
        "C": "$O(n + e)$",
        "D": "$O(ne)$"
      },
      "answer": [
        "C"
      ],
      "explanation": "与顶点 v 相关的边包括出边和入边，对于出边，只需遍历 v 的顶点表结点和其指向的边表；对于入边，则需遍历整个边表。先删除出边：删除 v 的顶点表结点的单链表，出边数最多为 n-1，时间复杂度为 $O(n)$ ；再删除入边：扫描整个边表（扫描剩余全部顶点表结点及其指向的边表），删除所有的顶点 v 的入边，时间复杂度为 $O(n + e)$ 。因此总时间复杂度为 $O(n + e)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_15",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "设 $n$ 个顶点、 $e$ 条边的有向图用邻接表表示，则求某顶点 $v$ 的入度的时间复杂度为（）。",
      "options": {
        "A": "$O(n)$",
        "B": "$O(e)$",
        "C": "$O(n + e)$",
        "D": "$O(ne)$"
      },
      "answer": [
        "C"
      ],
      "explanation": "为了求顶点 v 的入度，只需要遍历邻接表中的所有边表，检查每条边是否指向顶点 v，这相当于遍历整个邻接表，因此算法的时间复杂度为 $O(n + e)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_16",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "对邻接表的叙述中，（）是正确的。",
      "options": {
        "A": "无向图的邻接表中，第 $i$ 个顶点的度为第 $i$ 个链表中结点数的两倍",
        "B": "邻接表比邻接矩阵的操作更简便",
        "C": "邻接矩阵比邻接表的操作更简便",
        "D": "求有向图顶点的度，必须遍历整个邻接表"
      },
      "answer": [
        "D"
      ],
      "explanation": "无向图的邻接表中，第 i 个顶点的度为第 i 个链表中的结点数，所以选项 A 错。邻接表和邻接矩阵对于不同的操作各有优势，选项 B 和 C 都不准确。有向图顶点的度包括出度和入度，对于出度，需要遍历顶点表结点所对应的边表；对于入度，则需要遍历剩下的全部边表。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_17",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "邻接多重表是（）的存储结构。",
      "options": {
        "A": "无向图",
        "B": "有向图",
        "C": "无向图和有向图",
        "D": "都不是"
      },
      "answer": [
        "A"
      ],
      "explanation": "邻接多重表是无向图的存储结构。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_18",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "十字链表是（）的存储结构。",
      "options": {
        "A": "无向图",
        "B": "有向图",
        "C": "无向图和有向图",
        "D": "都不是"
      },
      "answer": [
        "B"
      ],
      "explanation": "十字链表是有向图的存储结构。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_19",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2013 统考真题】设图的邻接矩阵 $A$ 如下所示，各顶点的度依次是（）。 $$ \\boldsymbol {A} = \\left[ \\begin{array}{c c c c} 0 & 1 & 0 & 1 \\\\ 0 & 0 & 1 & 1 \\\\ 0 & 1 & 0 & 0 \\\\ 1 & 0 & 0 & 0 \\end{array} \\right] $$",
      "options": {
        "A": "1,2,1,2",
        "B": "2, 2, 1, 1",
        "C": "3,4,2,3",
        "D": "4, 4, 2, 2"
      },
      "answer": [
        "C"
      ],
      "explanation": "邻接矩阵 A 为非对称矩阵，说明图是有向图，度为入度与出度之和。各顶点的度是矩阵中此顶点对应的行（对应出度）和列（对应入度）的非零元素之和。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-2-6_20",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2024 统考真题】若无向图 $G = (V, E)$ 的邻接多重表如下图所示，则 $G$ 中顶点 $b$ 与 $d$ 的度分别是（）。 ![](images/80ac33af08592c2bbe71ee0360b17e0b26a45d967a734c4358bffdc35e51fbc0.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"0 a\"] --> B[\"0 1 ^\"] C[\"1 b\"] --> D[\"1 3 ^\"] E[\"2 c\"] --> F[\"2 0 ^\"] G[\"3 d\"] --> H[\"3 2\"] I[\"4 e\"] --> J[\"4 2 ^\"] B --> K[\"0 3\"] D --> L[\"0 3\"] F --> M[\"0 3\"] H --> N[\"0 3\"] J --> O[\"0 3\"] K --> P[\"4 ^ 3\"] L --> Q[\"4 ^ 3\"] M --> R[\"4 ^ 3\"] N --> S[\"4 ^ 3\"] ``` </details>",
      "options": {
        "A": "0, 2",
        "B": "2, 4",
        "C": "2, 5",
        "D": "3, 4"
      },
      "answer": [
        "B"
      ],
      "explanation": "在邻接多重表中，统计一个顶点的入度、出度或度数（入度+出度）时，只需考虑所有的边结点。下图是邻接多重表的边结点的结构：\n\n<table><tr><td>ivex</td><td>ilink</td><td>jvex</td><td>jlink</td><td>info</td></tr></table>\n\n其中，ivex表示弧头的编号，ilink域指向下一个弧头相同的边结点，jvex表示弧尾的编号，jlink域指向下一个弧尾相同的边结点。根据定义可知：求x号顶点的入度时，只需统计jvex域等于x的边结点个数；求x号顶点的出度时，只需统计ivex域等于x的边结点个数；x号顶点的度数为入度和出度之和。顶点b的编号为1，统计可知：入度为1，出度为1，度数为2。顶点d的编号为3，统计可知：入度为1，出度为3，度数为4。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-3-4_07",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "无向图 $G = (V, E)$ ，其中 $V = \\{a, b, c, d, e, f\\}$ ， $E = \\{(a, b), (a, e), (a, c), (b, e), (c, f), (f, d), (e, d)\\}$ ，对该图从 $a$ 开始进行深度优先遍历，得到的顶点序列正确的是（）。",
      "options": {
        "A": "a, b, e, c, d, f",
        "B": "a, c, f, e, b, d",
        "C": "a, e, b, c, f, d",
        "D": "a, e, d, f, c, b"
      },
      "answer": [
        "D"
      ],
      "explanation": "画出草图后，此类题可以根据边的邻接关系快速排除错误选项。以选项 A 为例，在遍历到 e 之后，应该访问与 e 邻接但未被访问的顶点， $(e, c)$ 显然不在边集中。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-3-4_09",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "multiple_choice",
      "question": "用邻接表存储的图的深度优先遍历算法类似于树的（），而其广度优先遍历算法类似于树的（）。",
      "options": {
        "A": "中序遍历",
        "B": "先序遍历",
        "C": "后序遍历",
        "D": "按层次遍历"
      },
      "answer": [
        "B",
        "D"
      ],
      "explanation": "图的深度优先搜索类似于树的先根遍历，即先访问顶点，再递归向外层顶点遍历，都采用回溯算法。图的广度优先搜索类似于树的层序遍历，即一层一层向外层扩展遍历，都需要采用队列来辅助算法的实现。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-3-4_10",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "multiple_choice",
      "question": "一个有向图 G 的邻接表存储如下图所示，从顶点 1 出发，对图 G 调用深度优先遍历所得顶点序列是（）；按广度优先遍历所得顶点序列是（）。 ![](images/54e6f558f43afef55fa66085086f2cff8ec39b426e9d85a22bfc1f22268182d2.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"1\"] --> B[\"2\"] B --> C[\"4\"] D[\"2\"] --> E[\"5\"] E --> F[\"/\"] G[\"3\"] --> H[\"6\"] H --> I[\"5\"] J[\"4\"] --> K[\"2\"] K --> L[\"/\"] M[\"5\"] --> N[\"4\"] N --> O[\"/\"] P[\"6\"] --> Q[\"6\"] Q --> R[\"/\"] ``` </details>",
      "options": {
        "A": "125436",
        "B": "124536",
        "C": "124563",
        "D": "362514"
      },
      "answer": [
        "A",
        "B"
      ],
      "explanation": "DFS 序列产生的路径为<1, 2>, <2, 5>, <5, 4>, <3, 6>; BFS 序列产生的路径为<1, 2>, <1, 4>, <2, 5>, <3, 6>。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-3-4_11",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "无向图 $G = (V, E)$ ，其中 $V = \\{a, b, c, d, e, f\\}$ ， $E = \\{(a, b), (a, e), (a, c), (b, e), (c, f), (f, d), (e, d)\\}$ 。对该图进行深度优先遍历，不能得到的序列是（）。",
      "options": {
        "A": "acfdeb",
        "B": "aebdfc",
        "C": "aedfcb",
        "D": "abecdf"
      },
      "answer": [
        "D"
      ],
      "explanation": "画出 V 和 E 对应的图 G，然后根据搜索算法求解。\n\n# 注意\n\n为什么本题序列是不唯一的，而上题序列却是唯一的呢？\n\n因为上题给出了具体的存储结构，此时就必须按照算法的过程来执行，每个顶点的邻接点的顺序已固定，但本题中每个顶点的邻接点的顺序是非固定的。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-3-4_12",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "判断有向图中是否存在回路，除拓扑排序外，还可利用（）。 （注：涉及下节内容）",
      "options": {
        "A": "求关键路径的方法",
        "B": "求最短路径的 Dijkstra 算法",
        "C": "深度优先遍历算法",
        "D": "广度优先遍历算法"
      },
      "answer": [
        "C"
      ],
      "explanation": "利用深度优先遍历可以判断图 $G$ 中是否存在回路。\n\n对于无向图来说，若深度优先遍历过程中遇到了回边，则必定存在环；对于有向图来说，这条回边可能是指向深度优先森林中另一棵生成树上的顶点的弧；但是，从有向图的某个顶点 v 出发进行深度优先遍历时，若在 DFS(v) 结束之前出现一条从顶点 u 到顶点 v 的回边，且 u 在生成树上是 v 的子孙，则有向图必定存在包含顶点 v 和顶点 u 的环。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-3-4_13",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "设无向图 $G = (V, E)$ 和 $G' = (V', E')$ ，若 $G'$ 是 $G$ 的生成树，则下列说法错误的是（）。",
      "options": {
        "A": "$G'$ 为G的子图",
        "B": "$G'$ 为 $G$ 的连通分量",
        "C": "$G'$ 为G的极小连通子图且 $V=V'$",
        "D": "$G'$ 是 $G$ 的一个无环子图"
      },
      "answer": [
        "B"
      ],
      "explanation": "连通分量是无向图的极大连通子图，其中极大的含义是将依附于连通分量中顶点的所有边都加上，所以连通分量中可能存在回路，这样就不是生成树了。\n\n# 注意\n\n极大连通子图是无向图（不一定连通）的连通分量，极小连通子图是连通无向图的生成树。极小和极大是在满足连通的前提下，针对边的数目而言的。极大连通子图包含连通分量的全部边；极小连通子图（生成树）包含连通图的全部顶点，且使其连通的边数最少。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-3-4_14",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "图的广度优先生成树的树高比深度优先生成树的树高（）。",
      "options": {
        "A": "小或相等",
        "B": "小",
        "C": "大或相等",
        "D": "大"
      },
      "answer": [
        "A"
      ],
      "explanation": "对于无向图的广度优先搜索生成树，起点到其他顶点的路径是图中对应的最短路径，即所有生成树中树高最小。此外，深度优先总是尽可能“深”地搜索图，因此其路径也尽可能长，所以深度优先生成树的树高总是大于或等于广度优先生成树的树高。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-3-4_15",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2012 统考真题】对有 n 个顶点、e 条边且使用邻接表存储的有向图进行广度优先遍历，其算法的时间复杂度为（）。",
      "options": {
        "A": "$O(n)$",
        "B": "$O(e)$",
        "C": "$O(n + e)$",
        "D": "$O(ne)$"
      },
      "answer": [
        "C"
      ],
      "explanation": "广度优先遍历需要借助队列实现。采用邻接表存储方式对图进行广度优先遍历时，每个顶点均需入队一次（顶点表遍历），所以时间复杂度为 $O(n)$ ，在搜索所有顶点的邻接点的过程中，每条边至少访问一次（出边表遍历），所以时间复杂度为 $O(e)$ ，算法总的时间复杂度为 $O(n + e)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-3-4_16",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2013 统考真题】下列选项中，不是右图所示无向图的广度优先遍历序列的是（）。",
      "options": {
        "A": "h, c, a, b, d, e, g, f",
        "B": "e, a, f, g, b, h, c, d",
        "C": "d, b, c, a, h, e, f, g",
        "D": "a, b, c, d, h, e, f, g"
      },
      "answer": [
        "D"
      ],
      "explanation": "只要掌握 DFS 和 BFS 的遍历过程，便能轻易解决。逐个代入，手工模拟，选项 D 是深度优先遍历，而不是广度优先遍历。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-3-4_17",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2015 统考真题】设有向图 $G = (V, E)$ ，顶点集 $V = \\{V_{0}, V_{1}, V_{2}, V_{3}\\}$ ，边集 $E = \\{<v_{0}, v_{1}>, <v_{0}, v_{2}>, <v_{0}, v_{3}>,$ ![](images/7c4b8a28bef6a9cc783ed5d8cfcf39a1f5fcdb67a09527a23b5e494fdcc61c75.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD a --> b a --> e b --> c b --> d c --> d c --> h e --> f e --> g ``` </details> $<v_{1},v_{3}>\\}$ 。若从顶点 $V_{0}$ 开始对图进行深度优先遍历，则可能得到的不同遍历序列个数是（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "D"
      ],
      "explanation": "画出该有向图，如右图所示。采用图的深度优先遍历，共有5种可能： $<v_{0}, v_{1}, v_{3}, v_{2}>, <v_{0}, v_{2}, v_{3}, v_{1}>, <v_{0}, v_{2}, v_{1}, v_{3}>, <v_{0}, v_{3}, v_{2}, v_{1}>, <v_{0}, v_{3}, v_{1}, v_{2}>$ 。\n\n![](images/3188607e8f67d6e26d8f129731e097ab8c1cf99e492431cf6df2dddaf025c2dd.jpg)",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-3-4_18",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2016 统考真题】下列选项中，不是右图所示深度优先搜索序列的是（）。",
      "options": {
        "A": "$V_{1}, V_{5}, V_{4}, V_{3}, V_{2}$",
        "B": "$V_{1}, V_{3}, V_{2}, V_{5}, V_{4}$",
        "C": "$V_{1}, V_{2}, V_{5}, V_{4}, V_{3}$",
        "D": "$V_{1}, V_{2}, V_{3}, V_{4}, V_{5}$"
      },
      "answer": [
        "D"
      ],
      "explanation": "按深度优先遍历的策略进行遍历。对于选项 A：先访问 $V_{1}$ ，然后访问与 $V_{1}$ 邻接且未被访问的任意一个顶点（满足的有 $V_{2}, V_{3}$ 和 $V_{5}$ ），此时访问 $V_{5}$ ，然后从 $V_{5}$ 出发，访问与 $V_{5}$ 邻接且未被访问的任意一个顶点（满足的只有 $V_{4}$ ），然后从 $V_{4}$ 出发，访问与 $V_{4}$ 邻接且未被访问的任意一个顶点（满足的只有 $V_{3}$ ），然后从 $V_{3}$ 出发，访问与 $V_{3}$ 邻接且未被访问的任意一个顶点（满足的只有 $V_{2}$ ），结束遍历。选项 B 和 C 的分析方法与 A 相同。对于选项 D，首先访问 $V_{1}$ ，然后从 $V_{1}$ 出发，访问与 $V_{1}$ 邻接且未被访问的任意一个顶点（满足的有 $V_{2}, V_{3}$ 和 $V_{5}$ ），然后从 $V_{2}$ 出发，访问与 $V_{2}$ 邻接且未被访问的任意一个顶点（满足的只有 $V_{5}$ ），按规则本应该访问 $V_{5}$ ，但选项 D 却访问了 $V_{3}$ ，错误。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_15",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "若一个有向图的顶点不能排成一个拓扑序列，则判定该有向图（）。",
      "options": {
        "A": "含有多个出度为 0 的顶点",
        "B": "是个强连通图",
        "C": "含有多个入度为 0 的顶点",
        "D": "含有顶点数大于 1 的强连通分量"
      },
      "answer": [
        "D"
      ],
      "explanation": "一个有向图中的顶点不能排成一个拓扑序列，表明其中存在一个顶点数目大于 1 的回路（环），该回路构成一个强连通分量，从而答案选择选项 D。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_16",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "右图所示有向图的所有拓扑序列共有（）个。",
      "options": {
        "A": "4",
        "B": "6",
        "C": "5",
        "D": "7"
      },
      "answer": [
        "C"
      ],
      "explanation": "本图的拓扑排序序列有 ABCFDEG, ABCDFEG, ABCDEFG, ABDCFEG 和 ABDCEFG。读者应能把这一类经典习题的拓扑序列全部写出来。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_17",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "已知有向图 $G = (V, E)$ ，其中 $V = \\{v_{1}, v_{2}, v_{3}, v_{4}, v_{5}, v_{6}\\}$ $v_{7}\\}, E=\\{<v_{1},v_{2}>,<v_{1},v_{3}>,<v_{1},v_{4}>,<v_{2},v_{5}>,<v_{3},v_{5}>,<v_{3},v_{6}>,<v_{5},v_{7}>,<v_{6},v_{7}>,<v_{4},v_{6}>\\}$ ，G的拓扑序列是（）。 ![](images/491b3211379d62f76ff185d9b9afc848deed7a626f0022a010f7b08191a4f071.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A --> B B --> C B --> D C --> F D --> E E --> G F --> G ``` </details>",
      "options": {
        "A": "$\\{v_{1}, v_{3}, v_{4}, v_{6}, v_{2}, v_{5}, v_{7}\\}$",
        "B": "$\\{v_{1}, v_{3}, v_{2}, v_{6}, v_{4}, v_{5}, v_{7}\\}$",
        "C": "$\\{v_{1}, v_{3}, v_{4}, v_{5}, v_{2}, v_{6}, v_{7}\\}$",
        "D": "$\\{v_{1}, v_{2}, v_{5}, v_{3}, v_{4}, v_{6}, v_{7}\\}$"
      },
      "answer": [
        "A"
      ],
      "explanation": "拓扑序列的过程：找到入度为 0 的顶点，删除该顶点及其所有出边，并将顶点加入拓扑序列，重复直至所有顶点都加入拓扑序列。选择入度为 0 的顶点 $v_{1}$ ，删除与 $v_{1}$ 有关的边；此时顶点 $v_{3}$ 的入度为 0，选择 $v_{3}$ ，删除与 $v_{3}$ 有关的边；以此类推，得出 G 的拓扑序列。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_18",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "下列哪种图的邻接矩阵是对称矩阵？（）",
      "options": {
        "A": "有向网",
        "B": "无向图",
        "C": "AOV网",
        "D": "AOE 网"
      },
      "answer": [
        "B"
      ],
      "explanation": "无向图的邻接矩阵存储中，每条边存储两次，且 $A[i][j]=A[j][i]$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_19",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "若一个有向图具有有序的拓扑排序序列，则它的邻接矩阵必定为（）。",
      "options": {
        "A": "对称",
        "B": "稀疏",
        "C": "三角",
        "D": "一般"
      },
      "answer": [
        "C"
      ],
      "explanation": "此题一直以来争议较大，因为有些书中漏掉了“有序”二字。可以证明，对有向图中的顶点适当地编号，使其邻接矩阵为三角矩阵且主对角元素全为零的充分必要条件是，该有向图可以进行拓扑排序。若这个题目把“有序”二字去掉，显然应选择选项D。但此题题干中已经指出是“有序的拓扑序列”，因此应选选项C。需要注意的是，若一个有向图的邻接矩阵为三角矩阵（对角线以上或以下的元素为0），则图中必不存在环，因此其拓扑序列必然存在。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_20",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "用 DFS 算法遍历一个无环有向图，并在 DFS 算法退栈返回时输出相应的顶点，则输出的顶点序列是（）。",
      "options": {
        "A": "逆拓扑有序",
        "B": "拓扑有序",
        "C": "无序的",
        "D": "无法确定"
      },
      "answer": [
        "A"
      ],
      "explanation": "设图中有顶点 $v_{i}$ ，它有后继顶点 $v_{j}$ ，即存在边 $<v_{i}, v_{j}>$ 。根据 DFS 的规则， $v_{i}$ 入栈后，必先遍历完其后继顶点后 $v_{i}$ 才会出栈，也就是说 $v_{i}$ 会在 $v_{j}$ 之后出栈，在如题所指的过程中， $v_{i}$ 在 $v_{j}$ 后打印。 $v_{i}$ 和 $v_{j}$ 具有任意性，因此由上面的规律看出，输出顶点的序列是逆拓扑有序序列。\n\n对有向无环图利用深度优先搜索进行拓扑排序的例子如下：如右图所示，退出 DFS 栈的顺序为 efgdcahb，此图的一个拓扑序列为 bhacdgfe。该方法的每一步均是先输出当前无后继的顶点，即对每个顶点 v，先递归地求出 v 的每个后继的拓扑序列。\n\n![](images/5f0e9faac558f14daacce8a284c40bb82c9a217c13e434e0ed438ad9865bcd99.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    a --> c\n    a --> g\n    b --> h\n    b --> f\n    c --> d\n    d --> e\n    f --> e\n    g --> d\n    g --> f\n    h --> f\n    h --> b\n    d -.-> c\n    d -.-> e\n    b -.-> h\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_21",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "下列关于图的说法中，正确的是（）。 I. 有向图中顶点 $V$ 的度等于其邻接矩阵中第 $V$ 行中1的个数 II. 无向图的邻接矩阵一定是对称矩阵，有向图的邻接矩阵一定是非对称矩阵 III. 在带权图 G 的最小生成树 $G_{1}$ 中，某条边的权值可能会超过未选边的权值 IV. 若有向无环图的拓扑序列唯一，则可以唯一确定该图",
      "options": {
        "A": "I、II 和 III",
        "B": "III 和 IV",
        "C": "III",
        "D": "IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "有向图邻接矩阵的第 $V$ 行中1的个数是顶点 $V$ 的出度，而有向图中顶点的度为入度与出度之和，说法I错。无向图的邻接矩阵一定是对称矩阵，但当有向图中任意两个顶点之间有边相连，且是两条方向相反的有向边时，有向图的邻接矩阵也是一个对称矩阵，说法II错。最小生成树中的 $n - 1$ 条边不能保证是图中权值最小的 $n - 1$ 条边，因为权值最小的 $n - 1$ 条边并不一定能使图连通。在下图中，左图的最小生成树如下图所示，权值为3的边不在其最小生成树中。\n\n![](images/0796a84dd4c610dea1921b24df7463c4ce5652d266171977b643839294072396.jpg)\n\n![](images/55702dc5a9d8d53f997f59d135c3b9f3e925d482e3cfb2d093e7dfdcac4f99c9.jpg)\n\n有向无环图的拓扑序列唯一并不能唯一确定该图。在下图所示的两个有向无环图中，拓扑序列都为 $V_{1}, V_{2}, V_{3}, V_{4}$ ，IV错。注意，很多辅导书对该命题的判断是错误的。\n\n![](images/bb83447be19343611b39c21b2ce81bb3ab157e3187acab89ad150f8e6b376836.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    V1 --> V2\n    V2 --> V3\n    V3 --> V4\n    V1 --> V2\n    V2 --> V3\n    V3 --> V4\n```\n</details>\n\n![](images/06eac9d573616e1a3c51c229259b6f1b9b8b408631d6cf3431a1f04e72889495.jpg)",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_22",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "下图所示的 AOE 网中，关键路径长度为（）。",
      "options": {
        "A": "16",
        "B": "17",
        "C": "18",
        "D": "19"
      },
      "answer": [
        "C"
      ],
      "explanation": "观察题图，从 $V_{0}$ 到 $V_{8}$ 的最长路径为 $V_{0} \\rightarrow V_{1} \\rightarrow V_{4} \\rightarrow V_{6} \\rightarrow V_{8}$ ，长度为 $6 + 1 + 9 + 2 = 18$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_23",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "若某带权图为 $G = (V, E)$ ，其中 $V = \\{v_1, v_2, v_3, v_4, v_5, v_6, v_7, v_8, v_9, v_{10}\\}$ ， $E = \\{<v_1, v_2>5, <v_1, v_3>6, <v_2, v_5>3, <v_3, v_5>6, <v_3, v_4>3, <v_4, v_5>3, <v_4, v_7>1, <v_4, v_8>4, <v_5, v_6>4, <v_5, v_7>2, <v_6, v_{10}>4, <v_7, v_9>5, <v_8, v_9>2, <v_9, v_{10}>2\\}$ （注：边括号外的数据表示边上的权值），则 $G$ 的关键路径的长度为（）。",
      "options": {
        "A": "19",
        "B": "20",
        "C": "21",
        "D": "22"
      },
      "answer": [
        "C"
      ],
      "explanation": "题目描述的图如下，得到关键路径的长度为 21，图中画出的两条路径都是关键路径。\n\n![](images/561ae15e14a01dbe8a0cd66d4d294cfa1fca9d4fcf03fa62a88479967d7e4357.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    1 -->|5| 2\n    1 -->|6| 3\n    2 -->|3| 5\n    3 -->|3| 4\n    4 -->|4| 7\n    5 -->|4| 6\n    5 -->|2| 7\n    6 -->|4| 10\n    7 -->|5| 9\n    8 -->|2| 9\n    9 -->|2| 10\n    4 -->|1| 8\n    5 -->|6| 3\n    7 -->|1| 8\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_24",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "下面关于求关键路径的说法中，不正确的是（）。",
      "options": {
        "A": "求关键路径是以拓扑排序为基础的",
        "B": "一个事件的最早发生时间与以该事件为始的弧的活动的最早开始时间相同",
        "C": "一个事件的最迟发生时间是以该事件为尾的弧的活动的最迟开始时间与该活动的持续时间的差",
        "D": "任何一个活动的持续时间的改变可能会影响关键路径的改变"
      },
      "answer": [
        "C"
      ],
      "explanation": "一个事件的最迟发生时间 = min{以该事件为尾的弧的活动的最迟开始时间}, 或 min{以该事件为尾的弧所指事件的最迟发生时间与该弧的活动的持续时间之差}。改变 AOE 网中任何一个活动的持续时间，需要重新计算关键活动，可能导致关键路径的改变。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_25",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "下列关于 AOE 网的关键路径的说法中，正确的是（）。 I. 改变网上某一关键路径上的任意一个关键活动后，必将产生不同的关键路径 II. 关键路径上活动的时间延长多少，整个工期也就随之延长多少 III. 缩短关键路径上任意一个关键活动的持续时间可缩短关键路径长度 IV. 缩短所有关键路径上共有的任意一个关键活动的持续时间可缩短关键路径长度 V. 缩短多条关键路径上共有的任意一个关键活动的持续时间可缩短关键路径长度",
      "options": {
        "A": "II 和 V",
        "B": "I、II和IV",
        "C": "II 和 IV",
        "D": "I 和 IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "若改变的是所有关键路径上的公共活动，则不一定会产生不同的关键路径（延长必然不会导致，只有缩短才有可能导致）。根据关键路径的定义，可知说法 II 正确。关键路径是源点到终点的最长路径，只有所有关键路径的长度都缩短时，整个图的关键路径才能有效缩短，但也不能任意缩短，一旦缩短到一定程度，该关键活动就有可能变成非关键活动。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_26",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "在求 AOE 网的关键路径时，若该有向图用邻接矩阵表示且第 i 列值全为 $\\infty$ ，则（）。",
      "options": {
        "A": "若关键路径存在，第 $i$ 个顶点一定是起点",
        "B": "若关键路径存在，第 i 个顶点一定是终点",
        "C": "关键路径不存在",
        "D": "该有向图对应的无向图存在多个连通分量"
      },
      "answer": [
        "A"
      ],
      "explanation": "邻接矩阵第 i 列值全为 $\\infty$ ，说明顶点 i 没有入边，为整个工程的开始，若关键路径存在，则该顶点一定是起点。不能确定关键路径是否存在，也不能确定其对应的无向图的连通分量个数。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_27",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2010 统考真题】对右图进行拓扑排序，可得不同拓扑序列的个数是（）。",
      "options": {
        "A": "4",
        "B": "3",
        "C": "2",
        "D": "1"
      },
      "answer": [
        "B"
      ],
      "explanation": "拓扑排序的过程如下图所示。\n\n![](images/e1ff8aefbb1d6628500a35aea3ea4dc03e67cfc076e9ad0fc8f9d3e429f6a615.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    a --> e\n    a --> b\n    a --> c\n    d --> e\n    d --> b\n    d --> c\n    e --> d\n    b --> c\n    c --> d\n    d --> e\n    d --> b\n    d --> c\n    e --> d\n    b --> c\n    c --> d\n    d --> e\n    d --> b\n    d --> c\n    e --> d\n    b --> c\n    c --> d\n    d --> e\n    d --> b\n    d --> c\n    e --> d\n    b --> c\n    c --> d\n    d --> e\n    d --> c\n    e --> d\n    b --> c\n    c --> d\n    d --> e\n    d --> c\n    e --> d\n    b --> c\n    c --> d\n    d --> e\n    d --> c\n```\n</details>\n\n可以得到 3 种不同的拓扑序列，即 abced, abecd 和 aebcd。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_28",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2012 统考真题】下列关于最小生成树的叙述中，正确的是（）。 I. 最小生成树的代价唯一 II. 所有权值最小的边一定会出现在所有的最小生成树中 III. 使用 Prim 算法从不同顶点开始得到的最小生成树一定相同 IV. 使用 Prim 算法和 Kruskal 算法得到的最小生成树总不相同",
      "options": {
        "A": "仅 I",
        "B": "仅 II",
        "C": "仅 I、III",
        "D": "仅 II、IV"
      },
      "answer": [
        "A"
      ],
      "explanation": "最小生成树的树形可能不唯一（因为可能存在权值相同的边），但代价一定是唯一的，说法I正确。若权值最小的边有多条并且构成环状，则总有权值最小的边将不出现在某棵最小生成树中，说法II错误。设 $N$ 个顶点构成环， $N$ 条边的权值相等，从不同的顶点开始执行Prim算法，只要选取任意不同的 $N - 1$ 条边，就能得到不同的最小生成树，说法III错误。当最小生成树唯一时（各边的权值不同），Prim算法和Kruskal算法得到的最小生成树相同，说法IV错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_29",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2012 统考真题】对右图所示的有向带权图，若采用 Dijkstra 算法求从源点 $a$ 到其他各顶点的最短路径，则得到的第一条最短路径的目标顶点是 $b$ ，第二条最短路径的目标顶点是 $c$ ，后续得到的其余各最短路径的目标顶点依次是（）。 ![](images/b4081824720d76a605a4eb5f433205b050be24144e22c016bdaddd1fae5019dd.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD a -->|2| b a -->|5| c b -->|3| d b -->|1| c c -->|4| e d -->|4| f d -->|1| e e -->|1| f e -->|3| b ``` </details>",
      "options": {
        "A": "d, e, f",
        "B": "e, d, f",
        "C": "f, d, e",
        "D": "f, e, d"
      },
      "answer": [
        "C"
      ],
      "explanation": "从 a 到各顶点的最短路径的求解过程下:\n\n<table><tr><td>顶点</td><td>第1轮</td><td>第2轮</td><td>第3轮</td><td>第4轮</td><td>第5轮</td></tr><tr><td> $b$ </td><td> $(a,b)2$ </td><td></td><td></td><td></td><td></td></tr><tr><td> $c$ </td><td> $(a,c)5$ </td><td> $(a,b,c)3$ </td><td></td><td></td><td></td></tr><tr><td> $d$ </td><td> $\\infty$ </td><td> $(a,b,d)5$ </td><td> $(a,b,d)5$ </td><td> $(a,b,d)5$ </td><td></td></tr><tr><td> $e$ </td><td> $\\infty$ </td><td> $\\infty$ </td><td> $(a,b,c,e)7$ </td><td> $(a,b,c,e)7$ </td><td> $(a,b,d,e)6$ </td></tr><tr><td> $f$ </td><td> $\\infty$ </td><td> $\\infty$ </td><td> $(a,b,c,f)4$ </td><td></td><td></td></tr><tr><td>集合 $S$ </td><td> $\\{a,b\\}$ </td><td> $\\{a,b,c\\}$ </td><td> $\\{a,b,c,f\\}$ </td><td> $\\{a,b,c,f,d\\}$ </td><td> $\\{a,b,c,f,d,e\\}$ </td></tr></table>\n\n后续目标顶点依次为f,d,e。\n\n本题也可用排除法：对于选项 A，若下一个顶点为 d，路径 a, b, d 的长度为 5，而 a, b, c, f 的长度仅为 4，显然错误。同理可排除选项 B。将 f 加入集合 S 后，采用上述方法也可排除选项 D。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_30",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2012 统考真题】若用邻接矩阵存储有向图，矩阵中主对角线以下的元素均为零，则关于该图拓扑序列的结论是（）。",
      "options": {
        "A": "存在，且唯一",
        "B": "存在，且不唯一",
        "C": "存在，可能不唯一",
        "D": "无法确定是否存在"
      },
      "answer": [
        "C"
      ],
      "explanation": "对角线以下元素均为零，表明只有顶点 $i$ 到 $j (i < j)$ 可能有边，而顶点 $j$ 到 $i$ 一定没有边，即有向图是一个无环图，因此一定存在拓扑序列。对于拓扑序列是否唯一，试举一例：设有向图的邻接矩阵 $\\begin{bmatrix} 0 & 1 & 1 \\\\ 0 & 0 & 0 \\\\ 0 & 0 & 0 \\end{bmatrix}$ ，存在两个拓扑序列，因此该图存在可能不唯一的拓扑序列。\n\n结论：对于任一有向图，若它的邻接矩阵中对角线以下（或以上）的元素均为零，则存在拓扑序列（可能不唯一）。反之，若图存在拓扑序列，却不一定能满足邻接矩阵中主对角线以下的元素均为零，但是可以通过适当地调整顶点编号，使其邻接矩阵满足前述性质。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_31",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2013 统考真题】下列 AOE 网表示一项包含 8 个活动的工程。通过同时加快若干活动的进度，可缩短整个工程的工期。在下列选项中，加快其进度就可缩短工程工期的是（）。 ![](images/be911dc913ffdba9163f6b04aa6c91fdc893ad98ebaec4264be5261ca1cb5ff2.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD 1 -->|a=3| 2 1 -->|b=8| 3 2 -->|c=9| 4 2 -->|d=4| 3 3 -->|e=6| 5 4 -->|g=6| 6 5 -->|h=9| 6 3 -->|f=10| 5 ``` </details>",
      "options": {
        "A": "c 和 e",
        "B": "d 和 c",
        "C": "f和d",
        "D": "f和 h"
      },
      "answer": [
        "C"
      ],
      "explanation": "找出 AOE 网的全部关键路径为 bdcg、bdeh 和 bfh。根据性质，只有当所有关键路径的活动时间同时减少时，才能缩短工期。即正确选项中的路径必须能涵盖所有的关键路径。选项 A 和 B 不能涵盖 bfh 这条路径，选项 D 不能涵盖 bdcg 这条路径，只有选项 C 能涵盖所有关键路径，因此只有加快 f 和 d 的进度才能缩短工期（建议在图中检验）。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_32",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2014 统考真题】对右图所示的有向图进行拓扑排序，得到的拓扑序列可能是（）。",
      "options": {
        "A": "3, 1, 2, 4, 5, 6",
        "B": "3, 1, 2, 4, 6, 5",
        "C": "3, 1, 4, 2, 5, 6",
        "D": "3, 1, 4, 2, 6, 5"
      },
      "answer": [
        "D"
      ],
      "explanation": "按照拓扑排序的算法，每次都选择入度为 0 的顶点从图中删除，此图中一开始只有顶点 3 的入度为 0；删除顶点 3 后，只有顶点 1 的入度为 0；删除顶点 1 后，只有顶点 4 的入度为 0；删除顶点 4 后，顶点 2 和顶点 6 的入度都为 0，此时选择删除不同的顶点，会得出不同的拓扑序列，分别处理完毕后可知可能的拓扑序列为 3, 1, 4, 2, 6, 5 和 3, 1, 4, 6, 2, 5。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_33",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2015 统考真题】求右图所示带权图的最小（代价）生成树时，可能是 Kruskal 算法第 2 次选中但不是 Prim 算法（从 $V_{4}$ 开始）第 2 次选中的边是（）。 ![](images/31f8d09c360875f28229aea42302ee29352c26cfe4d57431fa6570ce346e355a.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD V1[\" V₁ \"] -- 10 --> V2[\" V₂ \"] V1 -- 8 --> V3[\" V₃ \"] V2 -- 5 --> V3 V2 -- 8 --> V4[\" V₄ \"] V3 -- 8 --> V4 V4 -- 11 --> V2 ``` </details>",
      "options": {
        "A": "$(V_{1}, V_{3})$",
        "B": "$(V_{1}, V_{4})$",
        "C": "$(V_{2}, V_{3})$",
        "D": "$(V_{3}, V_{4})$"
      },
      "answer": [
        "C"
      ],
      "explanation": "从 $V_{4}$ 开始，Kruskal 算法选中的第一条边一定是权值最小的 $(V_{1}, V_{4})$ ，B 错误。 $V_{1}$ 和 $V_{4}$ 已经可达，因此含有 $V_{1}$ 和 $V_{4}$ 的权值为 8 的第二条边一定符合 Prim 算法，排除选项 A 和选项 D。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_34",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2011 统考真题】下列关于图的叙述中，正确的是（）。 I. 回路是简单路径 II. 存储稀疏图，用邻接矩阵比邻接表更省空间 III. 若有向图中存在拓扑序列，则该图不存在回路",
      "options": {
        "A": "仅 II",
        "B": "仅 I、II",
        "C": "仅 III",
        "D": "仅 I、III"
      },
      "answer": [
        "C"
      ],
      "explanation": "第一个顶点和最后一个顶点相同的路径称为回路；序列中顶点不重复出现的路径称为简单路径；回路显然不是简单路径，说法 I 错误。稀疏图是边比较少的情况，邻接矩阵存储的空间复杂度为 $O(n^{2})$ ，必将浪费大量的空间，而邻接表存储的空间复杂度为 $O(n+e)$ ，所以应选用邻接表，说法 II 错误。存在回路的有向图不存在拓扑序列，若拓扑排序输出结束后所余下的顶点都有前驱，则说明只得到了部分顶点的拓扑有序序列，图中存在回路，说法 III 正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_35",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "【2016 统考真题】使用 Dijkstra 算法求下图中从顶点 1 到其他各顶点的最短路径，依次得到的各最短路径的目标顶点是（）。 ![](images/a5aac357d269e1ce297082246b9168b0572f64c53027b0f5a3d343f21a9724be.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD 1 -->|5| 2 1 -->|4| 5 1 -->|2| 4 2 -->|2| 3 2 -->|9| 5 2 -->|6| 5 3 -->|6| 5 3 -->|2| 6 4 -->|7| 5 4 -->|2| 1 5 -->|5| 6 ``` </details>",
      "options": {
        "A": "5,2,3,4,6",
        "B": "5, 2, 3, 6, 4",
        "C": "5,2,4,3,6",
        "D": "5, 2, 6, 3, 4"
      },
      "answer": [
        "B"
      ],
      "explanation": "根据Dijkstra算法，从顶点1到其余各顶点的最短路径如下表所示。\n\n<table><tr><td>顶点</td><td>第1轮</td><td>第2轮</td><td>第3轮</td><td>第4轮</td><td>第5轮</td></tr><tr><td>2</td><td> $5$  $v_1 \\rightarrow v_2$ </td><td> $5$  $v_1 \\rightarrow v_2$ </td><td></td><td></td><td></td></tr><tr><td>3</td><td> $\\infty$ </td><td> $\\infty$ </td><td> $7$  $v_1 \\rightarrow v_2 \\rightarrow v_3$ </td><td></td><td></td></tr><tr><td>4</td><td> $\\infty$ </td><td> $11$  $v_1 \\rightarrow v_5 \\rightarrow v_4$ </td><td> $11$  $v_1 \\rightarrow v_5 \\rightarrow v_4$ </td><td> $11$  $v_1 \\rightarrow v_5 \\rightarrow v_4$ </td><td> $11$  $v_1 \\rightarrow v_5 \\rightarrow v_4$ </td></tr><tr><td>5</td><td> $4$  $v_1 \\rightarrow v_5$ </td><td></td><td></td><td></td><td></td></tr><tr><td>6</td><td> $\\infty$ </td><td> $9$  $v_1 \\rightarrow v_5 \\rightarrow v_6$ </td><td> $9$  $v_1 \\rightarrow v_5 \\rightarrow v_6$ </td><td> $9$  $v_1 \\rightarrow v_5 \\rightarrow v_6$ </td><td></td></tr><tr><td>集合S</td><td> $\\{1,5\\}$ </td><td> $\\{1,5,2\\}$ </td><td> $\\{1,5,2,3\\}$ </td><td> $\\{1,5,2,3,6\\}$ </td><td> $\\{1,5,2,3,6,4\\}$ </td></tr></table>\n\n快速解法。依次观察从顶点 1 到其他顶点的最短路径长度：顶点 1 到顶点 2 的最短路径长度为 5；顶点 1 到顶点 3 的最短路径长度为 $5 + 2 = 7$ ；顶点 1 到顶点 4 的最短路径长度为 11；顶点 1 到顶点 5 的最短路径长度为 4；顶点 1 到顶点 6 的最短路径长度为 $4 + 5 = 9$ ；最终 dist[] = {0, 5, 7, 11, 4, 9}，根据 dist 数组值从小到大选择顶点顺序为 1, 5, 2, 3, 6, 4。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_36",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "【2016 统考真题】若对 $n$ 个顶点、 $e$ 条弧的有向图采用邻接表存储，则拓扑排序算法的时间复杂度为（）。",
      "options": {
        "A": "$O(n)$",
        "B": "$O(n + e)$",
        "C": "$O(n^{2})$",
        "D": "$O(ne)$"
      },
      "answer": [
        "B"
      ],
      "explanation": "采用邻接表作为 AOV 网的存储结构进行拓扑排序，需要对 n 个顶点做入栈、出栈、输出各一次，当处理 e 条边时，需要检测这 n 个顶点的边链表结点，共需要的时间为 $O(n + e)$ 。若采用邻接矩阵作为 AOV 网的存储结构进行拓扑排序，在处理 e 条边时需对每个顶点检测相应矩阵中的某一行，寻找与它相关联的边，以便对这些顶点的入度减 1，需要的时间代价为 $O(n^{2})$ 。\n\n【补充】有两种常用的拓扑排序算法：基于 BFS 的算法和基于 DFS 的算法。本题未指明采用哪种算法，因此只需验证一种算法即可（说明两种算法在对应条件下的时间复杂度相同）。\n\n基于 BFS 的算法的思想：首先找到所有入度为 0 的顶点，将它们加入一个队列，并将它们作为拓扑序列的起始部分；然后依次从队列中取出顶点，并删除它们与后继顶点的所有边。若某个后继顶点的入度变为 0，则将它也加入队列，并将它加入拓扑序列，重复这个过程。\n\n基于 DFS 的算法的思想：在 DFS 调用过程中设定一个时间标记，当 DFS 调用结束时，对各顶点计时，进而按结束时间从大到小排序，可以得到一个拓扑序列。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_37",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "【2018 统考真题】下列选项中，不是右侧有向图的拓扑序列的是（）。 ![](images/dfd0bd3c95d8e46088378236e89fc1d0e4783890d7308c7d7ce69506f20abb4b.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD 1 --> 2 1 --> 3 1 --> 5 2 --> 3 2 --> 4 2 --> 5 2 --> 6 3 --> 4 3 --> 4 4 --> 6 5 --> 6 6 --> 4 ``` </details>",
      "options": {
        "A": "1, 5, 2, 3, 6, 4",
        "B": "5, 1, 2, 6, 3, 4",
        "C": "5, 1, 2, 3, 6, 4",
        "D": "5, 2, 1, 6, 3, 4"
      },
      "answer": [
        "D"
      ],
      "explanation": "拓扑排序每次选取入度为 0 的顶点输出，经观察不难发现拓扑序列前两位一定是 1, 5 或 5, 1（因为只有 1 和 5 的入度均为 0，且其他顶点都不满足仅有 1 或仅有 5 作为前驱）。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_38",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "【2019 统考真题】下图所示的 AOE 网表示一项包含 8 个活动的工程。活动 $d$ 的最早开始时间和最迟开始时间分别是（）。 ![](images/b41812b1e9007cfd2e1c7344d87b95f38cf8d3997f5a78f4b7a353db14ae1207.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD 1 -->|a=3| 2 1 -->|c=8| 3 2 -->|d=7| 4 2 -->|e=6| 5 3 -->|f=10| 5 4 -->|g=6| 6 5 -->|h=9| 6 ``` </details>",
      "options": {
        "A": "3 和 7",
        "B": "12 和 12",
        "C": "12 和 14",
        "D": "15 和 15"
      },
      "answer": [
        "C"
      ],
      "explanation": "活动 d 的最早开始时间等于该活动弧的起点所表示的事件的最早发生时间，活动 d 的最早开始时间等于事件 2 的最早发生时间 $\\max\\{a,b+c\\}=\\max\\{3,12\\}=12$ 。活动 d 的最迟开始时间等于该活动弧的终点所表示的事件的最迟发生时间与该活动所需时间之差，先算出图中关键路径长度为 27（对于不复杂的选择题，找出所有路径计算长度），那么事件 4 的最迟发生时间为 $\\min\\{27-g\\}=\\min\\{27-6\\}=21$ ，活动 d 的最迟开始时间为 21-d=21-7=14 。\n\n常规方法：按照关键路径算法算得到下表。\n\n<table><tr><td></td><td> ${v}_{1}$ </td><td> ${v}_{2}$ </td><td> ${v}_{3}$ </td><td> ${v}_{4}$ </td><td> ${v}_{5}$ </td><td> ${v}_{6}$ </td></tr><tr><td> ${v}_{e}\\left( i\\right)$ </td><td>0</td><td>12</td><td>8</td><td>19</td><td>18</td><td>27</td></tr><tr><td> ${v}_{l}\\left( i\\right)$ </td><td>0</td><td>12</td><td>8</td><td>21</td><td>18</td><td>27</td></tr></table>\n\n<table><tr><td></td><td>a</td><td>b</td><td>c</td><td>d</td><td>e</td><td>f</td><td>g</td><td>h</td></tr><tr><td>e(i)</td><td>0</td><td>8</td><td>0</td><td>12</td><td>12</td><td>8</td><td>19</td><td>18</td></tr><tr><td>l(i)</td><td>9</td><td>8</td><td>0</td><td>14</td><td>12</td><td>8</td><td>21</td><td>18</td></tr><tr><td>l(i)-e(i)</td><td>9</td><td>0</td><td>0</td><td>2</td><td>0</td><td>0</td><td>2</td><td>0</td></tr></table>\n\n从表中可知，活动 d 的最早开始时间和最迟开始时间分别为 12 和 14，所以选择选项 C。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_39",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "【2019统考真题】用有向无环图描述表达式 $(x + y)((x + y) / x)$ ，需要的顶点个数至少是（）。",
      "options": {
        "A": "5",
        "B": "6",
        "C": "8",
        "D": "9"
      },
      "answer": [
        "A"
      ],
      "explanation": "先将该表达式转换成有向二叉树，该二叉树中有些顶点是重复的，为了节省存储空间，去除重复的顶点，将有向二叉树去重转换成有向无环图，如下图所示。\n\n![](images/f29fc0e5e2a9d3764903a4b5ca75a7fae9f813e2aaec3a285b2ca51efbb8ea75.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"*\"] --> B[\"+\"]\n    A --> C[\"/\"]\n    B --> D[\"x\"]\n    B --> E[\"y\"]\n    C --> F[\"+\"]\n    C --> G[\"x\"]\n    F --> H[\"x\"]\n    F --> I[\"y\"]\n    \n    J[\"*\"] --> K[\"+\"]\n    J --> L[\"/\"]\n    K --> M[\"x\"]\n    K --> N[\"y\"]\n    L --> O[\"x\"]\n    L --> P[\"y\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_40",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "【2020 统考真题】已知无向图 $G$ 如右所示，使用 Kruskal 算法求图 $G$ 的最小生成树，加 到最小生成树中的边依次是（）。",
      "options": {
        "A": "$(b,f),(b,d),(a,e),(c,e),(b,e)$",
        "B": "$(b,f),(b,d),(b,e),(a,e),(c,e)$",
        "C": "$(a, e)$ , $(b, e)$ , $(c, e)$ , $(b, d)$ , $(b, f)$",
        "D": "$(a, e)$ , $(c, e)$ , $(b, e)$ , $(b, f)$ , $(b, d)$"
      },
      "answer": [
        "A"
      ],
      "explanation": "Kruskal 算法：按权值递增顺序依次选取 n-1 条边，并保证这 n-1 条边不构成回路。初始构造一个仅含 n 个顶点的森林；第一步，选取权值最小的边 $(b, f)$ 加入最小生成树；第二步，剩余边中权值最小的边为 $(b, d)$ ，加入最小生成树，第二步操作后权值最小的边 $(d, f)$ 不能选，因为会与之前已选取的边形成回路；接下来依次选取权值 9、10、11 对应的边加入最小生成树，此时 6 个顶点形成了一棵树，最小生成树构造完成。按照上述过程，加到最小生成树的边依次为 $(b, f)$ ， $(b, d)$ ， $(a, e)$ ， $(c, e)$ ， $(b, e)$ 。其生成过程如下所示。\n\n![](images/2e4cd0b8d71da81559dca3f820476508606f2000399134994b2fbd85cae7f834.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    a -- 20 --> b\n    a -- 12 --> c\n    c -- 10 --> d\n    e -- 11 --> b\n    e -- 14 --> d\n    d -- 6 --> b\n    d -- 7 --> f\n    b -- 5 --> f\n```\n</details>\n\n第一步\n选取边<b,f>\n\n![](images/661c099c65541bc649e10746e1d616b7eeba79e63f75bae033221811a2b12ef7.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    a -- 20 --> b\n    a -- 9 --> e\n    c -- 12 --> a\n    c -- 10 --> d\n    e -- 11 --> b\n    e -- 14 --> d\n    d -- 6 --> b\n    d -- 7 --> f\n    b -- 5 --> f\n```\n</details>\n\n第二步\n选取边<b,d>\n\n![](images/9dcf5ed113f05cbfafa14dcc3a7d44805e3ca866891aae7af3a8699cb96d390c.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    a -- 20 --> b\n    a -- 9 --> e\n    c -- 12 --> a\n    c -- 10 --> d\n    e -- 11 --> b\n    e -- 14 --> d\n    d -- 6 --> b\n    d -- 7 --> f\n    e -- 18 --> d\n```\n</details>\n\n第三步\n选取边<a, e>\n\n![](images/abafe7b05b98eb8f434fe3931d16a018068cbd3936b87fd815309b0b5fa69447.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    a -- 20 --> b\n    a -- 9 --> e\n    c -- 12 --> e\n    c -- 10 --> d\n    e -- 11 --> b\n    e -- 14 --> d\n    d -- 6 --> b\n    d -- 7 --> f\n    b -- 5 --> f\n```\n</details>\n\n第四步\n选取边<c, e>\n\n![](images/cb1f7c0c78415a008d32a298cda04433873bd40f3cea58e638e04905025d1400.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    a -- 20 --> b\n    a -- 9 --> e\n    c -- 12 --> e\n    c -- 10 --> d\n    e -- 11 --> b\n    e -- 14 --> d\n    d -- 6 --> b\n    d -- 7 --> f\n    b -- 5 --> f\n```\n</details>\n\n第五步\n选取边<b,e>",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_41",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "【2020 统考真题】修改递归方式实现的图的深度优先搜索（DFS）算法，将输出（访问）顶点信息的语句移到退出递归前（执行输出语句后立刻退出递归）。采用修改后的算法遍历有向无环图 G，若输出结果中包含 G 中的全部顶点，则输出的顶点序列是 G 的（）。",
      "options": {
        "A": "拓扑有序序列",
        "B": "逆拓扑有序序列",
        "C": "广度优先搜索序列",
        "D": "深度优先搜索序列"
      },
      "answer": [
        "B"
      ],
      "explanation": "根据题干所提供的信息可知:\n\n① 图 G 为有向无环图，因此一定存在拓扑序列和逆拓扑序列。  \n② DFS 的性质是顶点 $v_{i}$ 的所有后继顶点 $v_{j}$ 出栈后， $v_{i}$ 才会出栈。  \n③ 本题要求执行输出语句后立刻退出递归，即执行完输出语句后立即出栈，因此后入栈的顶点先输出，结合②不难得出只有输出顶点 $v_{i}$ 的所有后继顶点 $v_{j}$ 后， $v_{i}$ 才会输出。\n\n综合上述分析，输出的顶点序列是逆拓扑有序序列。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_42",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "【2020 统考真题】若使用 AOE 网估算工程进度，则下列叙述中正确的是（）。",
      "options": {
        "A": "关键路径是从源点到汇点边数最多的一条路径",
        "B": "关键路径是从源点到汇点路径长度最长的路径",
        "C": "增加任意一个关键活动的时间不会延长工程的工期",
        "D": "缩短任意一个关键活动的时间将会缩短工程的工期"
      },
      "answer": [
        "B"
      ],
      "explanation": "关键路径是指权值之和最大而非边数最多的路径，选项 A 错误。选项 B 是关键路径的概念。无论是存在一条还是存在多条关键路径，增加任意一个关键活动的时间都会延长工程的工期，因为关键路径始终是权值之和最大的那条路径，选项 C 错误。仅有一条关键路径时，减少关键活动的时间会缩短工程的工期；存在多条关键路径时，缩短一条关键活动的时间不一定会缩短工程的工期，缩短了路径长度的那条关键路径不一定还是关键路径，选项 D 错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_43",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "【2021 统考真题】给定右图所示有向图，该图的拓扑有序序列的个数是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "A"
      ],
      "explanation": "求拓扑序列的过程：从图中选择无入边的顶点，输出该顶点并删除该顶点的所有出边，重复上述过程，直至全部顶点都已输出，这样求得的拓扑序列为 ABCDEF。每次输出一个顶点并删除该顶点的所有出边后，都发现有且仅有一个顶点无入边，因此该拓扑序列唯一。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_44",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "【2021 统考真题】使用 Dijkstra 算法求下图中从顶点 1 到其余各顶点的最短路径，将当前找到的从顶点 1 到顶点 2, 3, 4, 5 的最短路径长度保存在数组 dist 中，求出第二条最短路径后，dist 中的内容更新为（）。 ![](images/d161686ca7c97e952d9704f6fe0269079954353f5958b799ff591866eadbd9a2.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A --> B A --> F B --> C B --> D C --> D D --> E D --> F F --> E ``` </details> ![](images/bd298862db1bb3a6c2348266750f33e0ee7c079259df2a6f05eaeedf24a3dd52.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD 1 -->|6| 5 1 -->|26| 2 1 -->|3| 2 2 -->|22| 3 2 -->|22| 3 3 -->|6| 4 3 -->|1| 4 4 -->|8| 5 4 -->|6| 5 5 -->|15| 1 ``` </details>",
      "options": {
        "A": "26, 3, 14, 6",
        "B": "25, 3, 14, 6",
        "C": "21, 3, 14, 6",
        "D": "15, 3, 14, 6"
      },
      "answer": [
        "C"
      ],
      "explanation": "在执行 Dijkstra 算法时，首先初始化 dist[]，若顶点 1 到顶点 i（i = 2, 3, 4, 5）有边，就初始化为边的权值；若无边，就初始化为 $\\infty$ ；初始化顶点集 S 只含顶点 1。Dijkstra 算法每次选择一个到顶点 1 距离最近的顶点 j 加入顶点集 S，并判断由顶点 1 绕行顶点 j 后到任意一个顶点 k 是否距离更短，若距离更短（dist[j] + arcs[j][k] < dist[k]），则将 dist[x] 更新为 dist[j] + arcs[j][k]；重复该过程，直至所有顶点都加入顶点集 S。数组 dist 的变化过程如下图所示，可知将第二个顶点 5 加入顶点集 S 后，数组 dist 更新为 21, 3, 14, 6。\n\n$$\n\\operatorname{dist} \\{2 6, 3, \\infty , 6 \\} \\xrightarrow {\\text {顶点} 3 \\text {入} S} \\{2 5, 3, \\infty , 6 \\} \\xrightarrow {\\text {顶点} 5 \\text {入} S} \\{2 1, 3, 1 4, 6 \\}\n$$",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_45",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "【2022 统考真题】下图是一个有 10 个活动的 AOE 网，时间余量最大的活动是（）。 ![](images/8f703168965b395e8038213b92d4ebabaed77e8ecd0ce31e21300b976d1904e0.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD 1 -->|a=2| 2 1 -->|b=5| 3 2 -->|d=3| 4 2 -->|c=1| 3 3 -->|e=3| 4 3 -->|f=4| 5 4 -->|i=4| 6 4 -->|h=1| 5 5 -->|g=1| 6 5 -->|j=1| 6 ``` </details>",
      "options": {
        "A": "c",
        "B": "g",
        "C": "h",
        "D": "j"
      },
      "answer": [
        "B"
      ],
      "explanation": "在 AOE 网中，活动的时间余量 = 结束顶点的最迟开始时间 - 开始顶点的最早开始时间 - 该活动的持续时间。根据关键路径算法得到下表：\n\n<table><tr><td>顶点编号</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr><tr><td>最早开始时间  $v_{e}(i)$ </td><td>0</td><td>2</td><td>5</td><td>8</td><td>9</td><td>12</td></tr><tr><td>最迟开始时间  $v_{l}(i)$ </td><td>0</td><td>4</td><td>5</td><td>8</td><td>11</td><td>12</td></tr></table>\n\nc 的时间余量 = $v_{l}(3) - v_{e}(2) - 1 = 5 - 2 - 1 = 2$ ，g 的时间余量 = $v_{l}(6) - v_{e}(3) - 1 = 12 - 5 - 1 = 6$ ，h 的时间余量 = $v_{l}(5) - v_{e}(4) - 1 = 11 - 8 - 1 = 2$ ，j 的时间余量 = $v_{l}(6) - v_{e}(5) - 1 = 12 - 9 - 1 = 2$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_46",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 46,
      "type": "single_choice",
      "question": "【2023统考真题】已知无向连通图 $G$ 中各边的权值均为1。在下列算法中，一定能够求出图 $G$ 中从某顶点到其余各顶点最短路径的是（）。 I. Prim 算法 II. Kruskal 算法 III. 图的广度优先搜索算法",
      "options": {
        "A": "仅 I",
        "B": "仅 III",
        "C": "仅 I、II",
        "D": "I、II、III"
      },
      "answer": [
        "B"
      ],
      "explanation": "Prim 算法和 Kruskal 算法用于求解最小生成树，最小生成树中某顶点到其余各顶点的路径不一定具有最短路径的性质。例如，在右图求得的最小生成树中，a 到 c 的路径长度为 2，但原图中 a 到 c 的最短路径长度为 1。\n\n![](images/af29989c461e95f5e400a615d6b055c2d3705ec0881b691fc74e4609a9b5bb0e.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"a\"] --> B[\"b\"]\n    A --> C[\"c\"]\n    D[\"a\"] --> E[\"b\"]\n    D --> F[\"c\"]\n    style A fill:#fff,stroke:#000\n    style B fill:#fff,stroke:#000\n    style C fill:#fff,stroke:#000\n    style D fill:#fff,stroke:#000\n    style E fill:#fff,stroke:#000\n    style F fill:#fff,stroke:#000\n    note right of D 求出最小生成树\n```\n</details>\n\n图的广度优先搜索算法总按距离由近到远来遍历图中的每个顶点，因此可用来求解非带权图（或各边权值均相同）的单源最短路径问题。",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_6-4-6_47",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "图",
      "section": "6.4.6",
      "section_title": "本节试题精选",
      "num": 47,
      "type": "single_choice",
      "question": "【2025统考真题】下列关于图的叙述中，正确的是（）。",
      "options": {
        "A": "有向图必存在入度为 0 的顶点",
        "B": "有向无环图的拓扑有序序列存在且唯一",
        "C": "各顶点的度均大于或等于 2 的无向图必有回路",
        "D": "可用 BFS 算法求出带权图中每对顶点间的最短路径"
      },
      "answer": [
        "C"
      ],
      "explanation": "若一个有向图构成环，则每个顶点的入度均不为 0。有向无环图一定存在拓扑序列，但当存在多个入度为 0 的顶点时，其拓扑序列不唯一。在无向图中，若每个顶点的度都大于或等于 2，说明从任意点出发，总能 “一直走下去”（因为每到一个点，至少还有另一条边可走），由于顶点有限，走着走着必定会重复访问某个顶点，从而形成回路，选项 C 正确。BFS 算法仅适用于求解无权图（或所有边权相等）的单源最短路径，不适用于带权图（边权不等）。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch06-第6章-图.md"
    },
    {
      "id": "数据结构_7-2-4_08",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "折半查找和二叉排序树的时间性能（）。",
      "options": {
        "A": "相同",
        "B": "有时不相同",
        "C": "完全不同",
        "D": "无法比较"
      },
      "answer": [
        "B"
      ],
      "explanation": "折半查找的性能分析可以用二叉判定树来衡量，平均查找长度和最大查找长度都是 $O(\\log_{2}n)$ ; 二叉排序树的查找性能与数据的输入顺序有关，最好情况下的平均查找长度与折半查找相同，但最坏情况即形成单支树时，其查找长度为 $O(n)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_09",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "在有 11 个元素的有序表 A[1,2,…,11] 中进行折半查找 ( $\\lfloor(\\text{low}+\\text{high})/2\\rfloor$ )，查找元素 A[11] 时，被比较的元素下标依次是（）。",
      "options": {
        "A": "6, 8, 10, 11",
        "B": "6, 9, 10, 11",
        "C": "6,7,9,11",
        "D": "6,8,9,11"
      },
      "answer": [
        "B"
      ],
      "explanation": "依据折半查找算法的思想，第一次 $\\text{mid} = \\lfloor (1 + 11) / 2 \\rfloor = 6$ ，第二次 $\\text{mid} = \\lfloor [(6 + 1) + 11] / 2 \\rfloor = 9$ ，第三次 $\\text{mid} = \\lfloor [(9 + 1) + 11] / 2 \\rfloor = 10$ ，第四次 $\\text{mid} = 11$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_10",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "已知有序表(13, 18, 24, 35, 47, 50, 62, 83, 90, 115, 134)，当二分查找值为90的元素时，查找成功的元素比较次数为（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "4",
        "D": "6"
      },
      "answer": [
        "B"
      ],
      "explanation": "开始时 low 指向 13，high 指向 134，mid 指向 50，比较第一次 90 > 50，所以将 low 指向 62，high 指向 134，mid 指向 90，第二次比较找到 90。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_11",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "若有序表的关键字序列为 $\\{b, c, d, e, f, g, q, r, s, t\\}$ ，则在二分查找关键字 b 的过程中，进行比较的关键字依次为（）。",
      "options": {
        "A": "f, c, b",
        "B": "f, d, b",
        "C": "g, c, b",
        "D": "g, d, b"
      },
      "answer": [
        "A"
      ],
      "explanation": "在折半查找算法中，mid 取值的方式是确定的，要么采用向上取整，要么采用向下取整，而不能出现两种情况。对于选项 A，第 1 次比较的元素是 f，为向下取整；第 2 次比较的元素是 c，为向下取整；第 3 次比较的元素是 b，为向下取整，查找成功，符合二分查找。对于选项 B，第 1 次比较的元素是 f，为向下取整；第 2 次比较的元素是 d，为向上取整，两次 mid 取值的方式不同，不符合二分查找。对于选项 C，第 1 次比较的元素是 g，为向上取整；第 2 次比较的元素是 c，为向下取整，不符合二分查找。对于选项 D，第 1 次比较的元素是 g，为向上取整；第 2 次比较的元素是 d，为正中间元素；第 3 次比较的元素为 b，为向下取整，不符合二分查找。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_12",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "对表长为 $n$ 的有序表进行折半查找，其判定树的高度为（）。",
      "options": {
        "A": "$\\left\\lceil\\log_{2}(n+1)\\right\\rceil$",
        "B": "$\\lfloor \\log_2(n + 1)\\rfloor -1$",
        "C": "$\\lceil\\log_{2}n\\rceil$",
        "D": "$\\lfloor \\log_2n\\rfloor -1$"
      },
      "answer": [
        "A"
      ],
      "explanation": "对 n 个结点的判定树，设结点总数 $n = 2^{h} - 1$ ，则 $h = \\left\\lceil \\log_{2}(n + 1) \\right\\rceil$ 。\n\n【另解】特殊值代入法。直接将 n=1 和 n=2 的情况代入，仅有 A 满足要求。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_13",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "multiple_choice",
      "question": "已知一个长度为 16 的顺序表，其元素按关键字有序排列，若采用折半查找算法查找一个不存在的元素，则比较的次数至少是（），至多是（）。",
      "options": {
        "A": "4",
        "B": "5",
        "C": "6",
        "D": "7"
      },
      "answer": [
        "A",
        "B"
      ],
      "explanation": "对于此类题，有两种做法：一种方法是，画出查找过程中构成的判定树，让最小的分支高度对应于最少的比较次数，让最大的分支高度对应于最多的比较次数，出现类似于长度为15的顺序表时，判定树刚好是一棵满树，此时最多比较次数与最少比较次数相等；另一种方法是，直接用公式求出最小的分支高度和最大分支高度，从前面的讲解不难看出最大分支高度为 $H=\\left\\lceil\\log_{2}(n+1)\\right\\rceil=5$ ，这对应的就是最多比较次数，然后因为判定树不是一棵满树，所以至少应该是4（由判定树的各分支高度最多相差1得出）。\n\n注意，若求查找成功或查找失败的平均查找长度，则需要画出判定树来求解。此外，对长度为 $n$ 的有序表，采用折半查找时，查找成功和查找失败的最多比较次数相同，均为 $\\lceil \\log_2(n + 1) \\rceil$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_14",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "multiple_choice",
      "question": "具有 12 个关键字的有序表中，对每个关键字的查找概率相同，折半查找算法查找成功的平均查找长度为（），折半查找查找失败的平均查找长度为（）。",
      "options": {
        "A": "37/12",
        "B": "35/12",
        "C": "39/13",
        "D": "49/13"
      },
      "answer": [
        "A",
        "D"
      ],
      "explanation": "假设有序表中元素为 A[0...11]，不难画出对它进行折半查找的判定树如下图所示，圆圈是查找成功结点，方形是虚构的查找失败结点。从而可以求出查找成功的 ASL = (1 + 2 × 2 + 3 × 4 + 4 × 5) / 12 = 37 / 12，查找失败的 ASL = (3 × 3 + 4 × 10) / 13。\n\n![](images/51aadf64518d1febc5970aa9f2040c91dd243a1533639b089a12e8d739733396.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"5\"] --> B[\"2\"]\n    A --> C[\"8\"]\n    B --> D[\"0\"]\n    B --> E[\"3\"]\n    C --> F[\"6\"]\n    C --> G[\"10\"]\n    D --> H[\" \"]\n    D --> I[\"1\"]\n    E --> J[\" \"]\n    E --> K[\"4\"]\n    F --> L[\" \"]\n    F --> M[\"7\"]\n    G --> N[\"9\"]\n    G --> O[\"11\"]\n    H --> P[\" \"]\n    H --> Q[\" \"]\n    I --> R[\" \"]\n    I --> S[\" \"]\n    J --> T[\" \"]\n    J --> U[\" \"]\n    K --> V[\" \"]\n    K --> W[\" \"]\n    L --> X[\" \"]\n    L --> Y[\" \"]\n    M --> Z[\" \"]\n    M --> AA[\" \"]\n    N --> AB[\" \"]\n    N --> AC[\" \"]\n    O --> AD[\" \"]\n    O --> AE[\" \"]\n```\n</details>\n\n# 注意\n\n对于本类题目，应先根据所给 $n$ 的值，画出如上图所示的折半查找判定树。另外，查找失败结点的ASL不是到图中的方形结点，而是到方形结点上一层的圆形结点。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_15",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "下列关于查找的说法中，正确的是（）。 （注，涉及下节内容）",
      "options": {
        "A": "若数据元素保持有序，则查找时就可以采用折半查找法",
        "B": "折半查找与二叉查找树的时间性能在最坏情况下是相同的",
        "C": "折半查找法的平均查找长度一定小于顺序查找法",
        "D": "折半查找法查找一个元素大约需要 $O(\\log_{2}n)$ 次关键字比较"
      },
      "answer": [
        "D"
      ],
      "explanation": "折半查找法不仅要求数据元素有序，而且要求必须为顺序存储，选项 A 错误。折半查找法在最坏情况下的时间性能为 $O(\\log_{2}n)$ ，二叉查找树在最坏情况下的时间性能为 $O(n)$ ，选项 B 错误。在每个元素查找概率不同的情况下，折半查找法的平均查找长度可能大于顺序查找法，选项 C 错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_16",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "采用分块查找时，数据的组织方式为（）。",
      "options": {
        "A": "数据分成若干块，每块内数据有序",
        "B": "数据分成若干块，每块内数据不必有序，但块间必须有序，每块内最大（或最小）的数据组成索引块",
        "C": "数据分成若干块，每块内数据有序，每块内最大（或最小）的数据组成索引块",
        "D": "数据分成若干块，每块（除最后一块外）中数据个数需相同"
      },
      "answer": [
        "B"
      ],
      "explanation": "通常情况下，在分块查找的结构中，不要求每个索引块中的元素个数都相等。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_17",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "对有 2500 个记录的索引顺序表（分块表）进行查找，最理想的块长为（）。",
      "options": {
        "A": "50",
        "B": "125",
        "C": "500",
        "D": "$\\left\\lceil\\log_{2}2500\\right\\rceil$"
      },
      "answer": [
        "A"
      ],
      "explanation": "设块长为 b，索引表包含 n/b 项，索引表的 ASL = (n/b + 1)/2，块内的 ASL = (b + 1)/2，总 ASL = 索引表的 ASL + 块内的 ASL = (b + n/b + 2)/2，其中对于 $b + n/b$ ，由均值不等式可知，b = n/b 时有最小值，此时 $b = \\sqrt{n}$ 。则最理想块长为 $\\sqrt{2500} = 50$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_18",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "设顺序存储的某线性表共有 123 个元素，按分块查找的要求等分为 3 块。若对索引表采用顺序查找法来确定子块，且在确定的子块中也采用顺序查找法，则在等概率情况下，分块查找成功的平均查找长度为（）。",
      "options": {
        "A": "21",
        "B": "23",
        "C": "41",
        "D": "62"
      },
      "answer": [
        "B"
      ],
      "explanation": "根据公式 $\\mathrm{ASL} = L_{1} + L_{\\mathrm{S}} = \\frac{b + 1}{2} +\\frac{s + 1}{2} = \\frac{s^2 + 2s + n}{2s}$ ，其中 $b = n / s,s = 123 / 3,n = 123$ ，代入不难得出ASL为23。所以选择选项B。另一方面，可根据穷举法来一步步模拟。对于A块中的元素，查找过程的第一步是先找到 A 块，由于是顺序查找，找到 A 块只需一步，然后在 A 块中顺序查找，因此 A 块内各元素查找长度分别为 2, 3, 4, …, 42。对于 B 块，采用类似的方法，但查找到 B 块要比查找到 A 块多一步，因此 B 块内各元素查找长度为 3, 4, 5, …, 43。同理，C 块中各个元素查找长度为 4, 5, 6, …, 44。所以平均查找长度为 $(2 + 3 + 4 + \\cdots + 42 + 3 + 4 + 5 + \\cdots + 43 + 4 + 5 + 6 + \\cdots + 44)/123 = 23$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_19",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "为提高查找效率，对有 65025 个元素的有序顺序表建立索引顺序结构，在最好情况下查找到表中已有元素最多需要执行（）次关键字比较。",
      "options": {
        "A": "10",
        "B": "14",
        "C": "16",
        "D": "21"
      },
      "answer": [
        "C"
      ],
      "explanation": "为使查找效率最高，每个索引块的大小应是 $\\sqrt{65025}=255$ ，为每个块建立索引，则索引表中索引项的个数为 255。若对索引项和索引块内部都采用折半查找，则查找效率最高，为 $\\left\\lceil\\log_{2}(255+1)\\right\\rceil+\\left\\lceil\\log_{2}(255+1)\\right\\rceil=16$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_20",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2010 统考真题】已知一个长度为 16 的顺序表 $L$ ，其元素按关键字有序排列，若采用折半查找法查找一个 $L$ 中不存在的元素，则关键字的比较次数最多是（）。",
      "options": {
        "A": "4",
        "B": "5",
        "C": "6",
        "D": "7"
      },
      "answer": [
        "B"
      ],
      "explanation": "折半查找法在查找不成功时和给定值进行关键字的比较次数最多为树的高度，即 $\\lfloor \\log_2 n \\rfloor + 1$ 或 $\\lceil \\log_2 (n + 1) \\rceil$ 。在本题中， $n = 16$ ，所以比较次数最多为5。\n\n# 注意\n\n在折半查找判定树中的方形结点是虚构的，它不计入比较的次数。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_21",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2015 统考真题】下列选项中，不能构成折半查找中关键字比较序列的是（）。",
      "options": {
        "A": "500, 200, 450, 180",
        "B": "500, 450, 200, 180",
        "C": "180,500,200,450",
        "D": "180, 200, 500, 450"
      },
      "answer": [
        "A"
      ],
      "explanation": "画出查找路径图，因为折半查找判定树是一棵二叉排序树，看其是否满足二叉排序树的要求。\n\n![](images/a9b6e457ba34cd236f06dbb62b4d393d7569a1903f71228a303b5ca645b38097.jpg)\n\n显然，选项 A 的查找路径不满足。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_22",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2016 统考真题】在有 $n (n > 1000)$ 个元素的升序数组 A 中查找关键字 x。查找算法的伪代码如下所示。 ```txt k=0; while(k<n 且 A[k]<x) k=k+3; if(k<n 且 A[k]==x) 查找成功; else if(k-1<n 且 A[k-1]==x) 查找成功; else if(k-2<n 且 A[k-2]==x) 查找成功; else 查找失败; ``` 本算法与折半查找算法相比，有可能具有更少比较次数的情形是（）。",
      "options": {
        "A": "当 x 不在数组中",
        "B": "当 x 接近数组开头处",
        "C": "当 x 接近数组结尾处",
        "D": "当 x 位于数组中间位置"
      },
      "answer": [
        "B"
      ],
      "explanation": "本题为送分题。\n\n该程序采用跳跃式的顺序查找法查找升序数组中的 x。显然，x 越靠前，比较次数越少。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_23",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2017统考真题】下列二叉树中，可能成为折半查找判定树（不含外部结点）的是（）。",
      "options": {
        "A": "",
        "B": "",
        "C": "",
        "D": ""
      },
      "answer": [
        "A"
      ],
      "explanation": "对于给定的一个有序查找表，其对应的折半查找判定树是确定且唯一的。在折半查找算法中， $\\text{mid} = \\lfloor (\\text{low} + \\text{high}) / 2 \\rfloor$ ，因此若表中初始有 $2n + 1$ 个元素，则 mid 分割后，左右子树各有 n 个元素；若表中初始有 2n 个元素，则 mid 分割后，左子树有 n - 1 个元素，右子树有 n 个元素。即左子树的元素个数或者与右子树的元素个数相等，或者比右子树少一个。若令 $\\text{mid} = \\lceil (\\text{low} + \\text{high}) / 2 \\rceil$ ，不难理解，左子树的元素个数或者与右子树的元素个数相等，或者比右子树多一个。对于选项 A，树中每个左子树都与右子树的结点个数相等，或者多一个结点，符合向上取整的规则。对于选项 B、C、D，存在有的左子树比右子树多一个结点，有的左子树比右子树少一个结点，不符合折半查找的规则。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_24",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2023 统考真题】对含 600 个元素的有序顺序表进行折半查找，关键字间的比较次数最多是（）。",
      "options": {
        "A": "9",
        "B": "10",
        "C": "30",
        "D": "300"
      },
      "answer": [
        "B"
      ],
      "explanation": "用折半查找法查找给定值的比较次数最多不超过折半查找判定树的高度。折半查找判定树的树高 $h=\\left\\lceil\\log_{2}(n+1)\\right\\rceil$ ，将 n=600 代入，结果为 10。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_25",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2024 统考真题】下列数据结构中，不适合直接使用折半查找的是（）。 I. 有序链表 II. 无序数组 III. 有序静态链表 IV. 无序静态链表",
      "options": {
        "A": "仅 I、III",
        "B": "仅 II、IV",
        "C": "仅 II、III、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "折半查找必须满足两个条件：① 数组（或顺序表），折半查找的上一次查找和本次查找可能相隔很远的距离，如依次查找下标为 $n/2, n/4, n/8, \\cdots$ 的元素，若采用链表（或静态链表），则会使得时间复杂度非常高。② 有序，只有在有序的情况下才能根据上一次的比较情况舍弃一半的序列。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-2-4_26",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2025 统考真题】已知查找表中有 400 个元素，查找每个元素的概率相同。采用分块查找法进行查找，且均匀分块。若采用顺序查找法确定元素所在的块，且块内也采用顺序查找法，为使查找效率最高，则每块包含的元素个数应为（）。",
      "options": {
        "A": "8",
        "B": "10",
        "C": "20",
        "D": "25"
      },
      "answer": [
        "C"
      ],
      "explanation": "本题可直接套用书中的结论“每块记录数= $\\sqrt{n}$ 时，平均查找长度最小”。解释如下：分块查找的平均查找长度（ASL）等于查找索引表的ASL与块内查找的ASL之和。设每块含s个元素，则块数为k=400/s。总 $ASL=(k+1)/2+(s+1)/2=(k+s)/2+1$ 。要使ASL最小，需要最小化 $k+s=400/s+s$ 。根据均值不等式，当400/s=s时取最小值，解得s=20。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_01",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "对于二叉排序树，下面的说法中，（）是正确的。",
      "options": {
        "A": "二叉排序树是动态树表，查找失败时插入新结点，会引起树的重新分裂和组合",
        "B": "对二叉排序树进行层序遍历可得到有序序列",
        "C": "用逐点插入法构造二叉排序树，若先后插入的关键字有序，二叉排序树的深度最大",
        "D": "在二叉排序树中进行查找，关键字的比较次数不超过结点数的 1/2"
      },
      "answer": [
        "B"
      ],
      "explanation": "在B树上进行查找与二叉排序树相似，只是每个结点都是多关键字的有序表。在每个结点上\n\n所做的不是二路分支决定，而是基于该结点的多个子树进行多路分支决策。\n\nB 树的查找包含两个基本操作：① 在 B 树中定位目标结点；② 在结点内查找关键字。B 树常存储在磁盘上，因此前一操作是在磁盘上进行的，而后一操作是在内存中进行的，即在磁盘上找到目标结点后，先将结点读入内存，再采用顺序查找法或折半查找法。因此，在磁盘上的查找次数（目标结点在 B 树中的层次数）是决定查找效率的关键因素。\n\n在 B 树上查找到某结点后，先在该结点的有序表中查找。若找到，则查找成功；否则，根据对应的指针信息继续在所指子树中查找。例如，在图 7.28 中查找关键字 42，先从根结点开始，根结点只有一个关键字 22，且 42 > 22，因此 42 必定位于 22 的右边子树。右孩子结点包含两个关键字 36 和 45，由于 36 < 42 < 45，因此 42 必定位于 36 与 45 之间的子树。最终在该子结点中找到 42，查找成功。若查找到叶结点，则说明树中不存在该关键字，查找失败。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_02",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "按（）遍历二叉排序树得到的序列是一个有序序列。",
      "options": {
        "A": "先序",
        "B": "中序",
        "C": "后序",
        "D": "层次"
      },
      "answer": [
        "B"
      ],
      "explanation": "由上一节可知，B树中大多数操作所需的磁盘存取次数与树的高度成正比。\n\n下面分析 B 树在不同情况下的高度范围。需要特别说明的是：B 树的高度不包括最底层外部叶结点所处的那一层（部分教材将该层计入高度，定义略有不同）。\n\n设 $n \\geqslant 1$ ，对于任意一棵包含 n 个关键字、高度为 h、阶数为 m 的 B 树：\n\n1）最小高度情形：当每个结点的关键字数达到最大值时，B树的高度最小。因每个结点最多有m棵子树（最多含m-1个关键字），故高度为h的B树最多可容纳的关键字数为 $n\\leqslant(m-1)(1+m+m^{2}+\\cdots+m^{h-1})=m^{h}-1$ ，因此有 $h\\geqslant\\log_{m}(n+1)$ 。\n\n2）最大高度情形：当每个结点的关键字数达到最小值时，B树的高度最大。第1层（根）至少有1个结点；第2层至少有2个结点；除根结点外，每个非叶结点至少有 $\\lceil m/2\\rceil$ 棵子树，因此第3层至少有 $2\\lceil m/2\\rceil$ 个结点……，第 $h+1$ 层至少有 $2(\\lceil m/2\\rceil)^{h-1}$ 个结点。注意到第 $h+1$ 层为不存储数据的外部叶结点。对于包含n个关键字的B树，其外部叶结点数量恒为 $n+1$ ，由此有 $n+1\\geqslant2(\\lceil m/2\\rceil)^{h-1}$ ，即 $h\\leqslant\\log_{\\lceil m/2\\rceil}((n+1)/2)+1$ 。\n\n例如，假设一棵3阶B树共有8个关键字，则其高度范围为 $2 \\leqslant h \\leqslant 3.17$ 。由于高度h必为整数，故实际高度范围为 $2 \\leqslant h \\leqslant 3$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_03",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "在二叉排序树中进行查找的效率与（）有关。",
      "options": {
        "A": "二叉排序树的深度",
        "B": "二叉排序树的结点的个数",
        "C": "被查找结点的度",
        "D": "二叉排序树的存储结构"
      },
      "answer": [
        "B"
      ],
      "explanation": "考点追踪 ▶ 通过插入操作构造一棵初始为空的 B 树（2020）\n\n与二叉排序树的插入操作相比，B 树的插入要复杂得多。在 B 树中找到插入位置后，不能简单地将关键字添加到终端结点中，因为这可能导致结点违反 B 树的定义约束。\n\n将关键字 key 插入 B 树的过程如下:\n\n1）定位。利用 B 树查找算法，沿着路径向下查找，最终指向一个外部叶结点（表示查找失败），但实际的插入位置一定是该叶结点的父结点，即最底层终端结点。  \n2）插入与分裂。每个非根结点的关键字个数必须维持在区间 $\\left[\\left\\lceil m/2\\right\\rceil-1,m-1\\right]$ 内。若该结点在插入 key 后关键字总数不超过 m-1，则可直接插入；若插入后关键字总数超过 m-1（达到 m 个），则必须对该结点进行分裂。\n\n分裂方法：创建一个新结点，并将插入 key 后的原结点中的关键字从中间位置（第 $\\lceil m/2 \\rceil$ 个关键字）处分成左右两部分：左半部分的关键字保留在原结点中；右半部分的关键字移至新结点中；中间的关键字（注意，是关键字而非结点）被提升并插入原结点的父结点。若父结点因接收该关键字而超出上限（关键字数大于 m-1），则对父结点递归执行分裂操作。这一过程可能向上传播，直至根结点。若根结点也被分裂，则 B 树高度增 1。\n\n对于 $m = 3$ 的B树，每个结点最多包含 $m - 1 = 2$ 个关键字。当某个结点已有两个关键字时[见图 7.29(a)]，则已满。此时，插入 60 后，结点包含 3 个关键字 [见图 7.29(b)]，超过上限。分裂后，中间关键字 52 被提升至父结点，原结点与新结点各保留 1 个关键字 [见图 7.29(c)]。\n\n![](images/2209810203f14415481f3c0b6cf6a1726abb7a9b0cb01179f12b1da668d180c5.jpg)  \n图 7.29 结点的 “分裂” 示意",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_04",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "在常用的描述二叉排序树的存储结构中，关键字值最大的结点（）。",
      "options": {
        "A": "左指针一定为空",
        "B": "右指针一定为空",
        "C": "左右指针均为空",
        "D": "左右指针均不为空"
      },
      "answer": [
        "B"
      ],
      "explanation": "B 树的删除比插入操作更复杂，因为删除后需保证每个结点的关键字数不少于下限（ $\\left\\lceil m/2\\right\\rceil-1$ ），否则需通过“借位”或“合并”来恢复平衡。\n\n考点追踪 B 树的删除操作的实例（2012、2022）\n\n当被删关键字 k 不在终端结点中时，可以用 k 的前驱（或后继） $k'$ 替代，即 k 左侧子树中“最右下”的元素（或右侧子树中“最左下”的元素），然后在相应的结点中删除 $k'$ 。关键字 $k'$ 必定落在某个终端结点中，从而转化为删除终端结点中关键字的情形。例如，在图 7.30 的 4 阶 B 树中，删除关键字 80，用其前驱 78 替代，然后在终端结点中删除 78。\n\n![](images/ad852353f236b0a12d9a8731d18dbdf08aa3e0e0ce1de74e33630c0c2d4b1157.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"60 80\"] --> B[\"...\"]\n    A --> C[\"68 78\"]\n    A --> D[\"...\"]\n    E[\"60 78\"] --> F[\"...\"]\n    E --> G[\"68\"]\n    E --> H[\"...\"]\n    I[\"删除80\"] --> E\n```\n</details>\n\n图 7.30 B 树中删除非终端结点关键字的取代\n\n因此只需讨论被删关键字在终端结点中的情形，有下列三种情况：\n\n1）直接删除关键字。若被删关键字所在结点删除前的关键字个数 $\\geqslant \\lceil m / 2\\rceil$ ，则删除该关键字后仍满足B树定义，可以直接删除该关键字。  \n2）兄弟够借。若被删关键字所在结点删除前的关键字个数= $\\lceil m/2\\rceil-1$ ，且与该结点相邻的右（或左）兄弟结点的关键字个数 $\\geqslant\\lceil m/2\\rceil$ ，则需要调整该结点、右（或左）兄弟结点及其父结点（父子换位法），以达到新的平衡。例如，在图7.31(a)中删除4阶B树的关键字65，右兄弟关键字个数 $\\geqslant\\lceil m/2\\rceil=2$ ，将父结点中的关键字71下移到当前结点替代65，再将右兄弟中的最小关键字74上移到父结点原71的位置。\n\n![](images/56668fc3cfe83f92f54202c54399cde7a41e899b0fc0c44d22a65276f82a36bd.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"60 71\"] --> B[\"...\"]\n    A --> C[\"65\"]\n    A --> D[\"74 86\"]\n    E[\"60 74\"] --> F[\"...\"]\n    E --> G[\"71\"]\n    E --> H[\"86\"]\n    I[\"删除65\"] --> E\n```\n</details>\n\n(a)兄弟够借\n\n![](images/edf875b94e22c50c97e800fc32fec120633e9892ce373008c2dece8c33ccb16c.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"60 71\"] --> B[\"5\"]\n    A --> C[\"65\"]\n    A --> D[\"74 86\"]\n    E[\"71\"] --> F[\"60 65\"]\n    E --> G[\"74 86\"]\n    H[\"删除5\"] --> I[\"71\"]\n```\n</details>\n\n(b) 兄弟不够借  \n图 7.31 4 阶 B 树中删除终端结点关键字的示意图\n\n3）兄弟不够借。若被删关键字所在结点删除前的关键字个数为 $\\lceil m / 2\\rceil -1$ ，且其左右兄弟结点的关键字个数也均为 $\\lceil m / 2\\rceil -1$ ，则删除该关键字后，需将该结点、其中一个兄弟结点以及父结点中分隔它们的关键字合并为一个新结点。例如，在图7.31(b)中删除4阶B树的关键字5，该结点与其右兄弟的关键字个数均为 $\\lceil m / 2\\rceil -1 = 1$ ，因此在删除5后，将父结点中的关键字60与左右两个子结点（分别为空和含65）合并为一个新结点。\n\n考点追踪 ▶ 非空B树的查找、插入、删除操作的特点（2023）\n\n在合并过程中，父结点中的关键字个数会减1。若其父结点是根结点且关键字个数减少至0（根结点关键字个数为1时，有2棵子树），则直接将根结点删除，合并后的新结点成为根；若父结点不是根结点，且关键字个数减少到 $\\lceil m / 2\\rceil -2$ ，则需对其执行借位或合并操作，并可能向上递归，直至整棵树重新满足B树性质。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_07",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "从空树开始，依次插入元素 52, 26, 14, 32, 71, 60, 93, 58, 24 和 41 后构成了一棵二叉排序树。在该树查找 60，要进行比较的次数为（）。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "B"
      ],
      "explanation": "考点追踪 B+树的应用场合（2017）\n\nB+树是为满足数据库系统高效检索需求而设计的一种 B 树变体。\n\n一棵 m 阶 B+树应满足下列条件。\n\n1）每个分支结点最多有 m 棵子树。  \n2）非叶根结点至少有2棵子树；其余每个分支结点至少有 $m/2$ 棵子树。  \n3）每个分支结点的关键字个数等于其子树个数。  \n4）所有关键字及其对应的记录指针均存储在叶结点中；叶结点内的关键字按升序排列，且相邻叶结点通过指针按关键字顺序链接，从而支持高效的顺序查找。  \n5）所有分支结点（可视为索引的索引）仅包含用于引导查找的关键字（通常为其对应子结点中关键字的最大值）以及指向各子结点的指针。\n\n考点追踪 B树和B+树的差异的分析（2016）\n\nm 阶 B+树与 m 阶 B 树的主要差异如下。\n\n1）子树数量关系不同：在 B+ 树中，具有 n 个关键字的结点恰好含有 n 棵子树，即每个关键字对应一棵子树；而在 B 树中，具有 n 个关键字的结点含有 $n+1$ 棵子树。  \n2）关键字数量范围不同：在 B+树中，每个非根内部结点的关键字个数 n 满足 $\\lceil m/2 \\rceil \\leqslant n \\leqslant m$ （非叶根结点满足 $2 \\leqslant n \\leqslant m$ ）；而在 B 树中，每个非根内部结点的关键字个数 n 满足 $\\lceil m/2 \\rceil - 1 \\leqslant n \\leqslant m - 1$ （根结点满足 $1 \\leqslant n \\leqslant m - 1$ ）。  \n3）关键字存储位置不同：在 B+树中，所有关键字均存储在叶结点中，非叶结点中的关键字是其对应子树中关键字的副本（通常为最大值），因此会重复出现在叶结点中；而在 B 树中，关键字仅出现一次，终端结点与其他结点的关键字互不重复。  \n4）结点功能不同：在 B+树中，叶结点包含完整的数据信息，所有非叶结点仅起索引作用，其索引项只包含对应子树的最大关键字和指向该子树的指针。由于非叶结点结构更紧凑，一个磁盘块可容纳更多关键字，从而可减少磁盘 I/O 次数，提升查询效率。  \n5）支持顺序查找：B+树通常设置一个头指针，指向关键字最小的叶结点，并将所有叶结点通过指针按关键字顺序链接成一个线性链表，便于范围查询和顺序遍历。\n\n图 7.32 所示为一棵 4 阶 B+树。可以看出，分支结点中的关键字是其子树中最大关键字的副本。通常在 B+树中有两个头指针：一个指向根结点，另一个指向关键字最小的叶结点。因此，B+树支持两种查找方式：一种是从最小关键字开始的顺序查找，另一种是从根结点开始的多路查找。\n\n![](images/35257d96b1ea407c91b2ed9002f02e3b4e48fa9abb51ce49e68bf74664334791.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"60 85\"] --> B[\"10 20 50 60\"]\n    A --> C[\"77 85\"]\n    B --> D[\"8 10\"]\n    B --> E[\"16 20\"]\n    B --> F[\"40 50\"]\n    B --> G[\"55 60\"]\n    C --> H[\"69 77\"]\n    C --> I[\"80 85\"]\n    D --> J[\"记录\"]\n    D --> K[\"记录\"]\n    E --> L[\"记录\"]\n    E --> M[\"记录\"]\n    F --> N[\"记录\"]\n    F --> O[\"记录\"]\n    G --> P[\"记录\"]\n    G --> Q[\"记录\"]\n    H --> R[\"记录\"]\n    H --> S[\"记录\"]\n    I --> T[\"记录\"]\n    I --> U[\"记录\"]\n```\n</details>\n\n图 7.32 B+树结构示意图\n\nB+树的查找、插入和删除操作与 B 树基本类似。区别在于：在查找过程中，即使在非叶结点中遇到与给定关键字相等的值，也不会终止查找，而是继续向下，直到到达对应的叶结点为止。因此，无论查找成功与否，每次查找都对应一条从根结点到某个叶结点的路径。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_11",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "含有 20 个结点的平衡二叉树的最大深度为（）。",
      "options": {
        "A": "4",
        "B": "5",
        "C": "6",
        "D": "7"
      },
      "answer": [
        "C"
      ],
      "explanation": "平衡二叉树结点数的递推公式为 $n_{0}=0,\\quad n_{1}=1,\\quad n_{2}=2,\\quad n_{h}=1+n_{h-1}+n_{h-2}$ （h 为平衡二叉树高度， $n_{h}$ 为构造此高度的平衡二叉树所需的最少结点数）。通过递推公式可得，构造 5 层平衡二叉树至少需 12 个结点，构造 6 层至少需要 20 个结点。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_12",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "具有 5 层结点的平衡二叉树至少有（）个结点。",
      "options": {
        "A": "10",
        "B": "12",
        "C": "15",
        "D": "17"
      },
      "answer": [
        "B"
      ],
      "explanation": "设 $n_h$ 表示高度为 $h$ 的平衡二叉树中含有的最少结点数，则有 $n_1 = 1, n_2 = 2, n_h = n_{h-1} + n_{h-2} + 1$ ，由此求出 $n_5 = 12$ ，对应的 AVL 如右图所示。\n\n![](images/47dbfed8b576a5fbe557f70004c7836ed976f002f92bbf3c88a49521ab9adf95.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\" \"]\n    A --> C[\" \"]\n    B --> D[\" \"]\n    B --> E[\" \"]\n    C --> F[\" \"]\n    C --> G[\" \"]\n    D --> H[\" \"]\n    D --> I[\" \"]\n    E --> J[\" \"]\n    E --> K[\" \"]\n    F --> L[\" \"]\n    F --> M[\" \"]\n    G --> N[\" \"]\n    G --> O[\" \"]\n    H --> P[\" \"]\n    H --> Q[\" \"]\n    I --> R[\" \"]\n    I --> S[\" \"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_13",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "高度为 3 的平衡二叉排序树的形态共有（）种。",
      "options": {
        "A": "13",
        "B": "14",
        "C": "16",
        "D": "15"
      },
      "answer": [
        "D"
      ],
      "explanation": "高度为 3 的平衡二叉树的左右子树的高度共有三种情况: ① 左右子树都是高度为 2 的平衡二叉树; ② 左子树是高度为 1 的平衡二叉树, 右\n\n子树是高度为 2 的平衡二叉树；③ 左子树是高度为 2 的平衡二叉树，右子树是高度为 1 的平衡二叉树。高度为 1 的平衡二叉树只有 1 种形态，即单个结点，如图 1 所示；高度为 2 的平衡二叉树有 3 种形态，如图 2 所示。\n\n![](images/9a0e66f21a3e32788f01f36ba05667c1b28d4723bd5022c707d23cf6900bc058.jpg)  \n图1\n\n![](images/b2117bded2c24a097de648548f3b639525e9850ed3be964805dbde085c2a6f6a.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\" \"] --> B[\" \"]\n    C[\" \"] --> D[\" \"]\n    E[\" \"] --> F[\" \"]\n```\n</details>\n\n图 2\n\n因此，对于情况①，共有 $3 \\times 3 = 9$ 种树形态；对于情况②，共有 $1 \\times 3 = 3$ 种树形态；情况③和情况②类似，也有3种树形态，所以共有 $9 + 3 + 3 = 15$ 种树形态。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_14",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "在平衡二叉树的基本操作中，可能发生两次旋转的操作是（）。",
      "options": {
        "A": "添加、删除结点",
        "B": "仅删除结点",
        "C": "仅添加结点",
        "D": "都不会"
      },
      "answer": [
        "A"
      ],
      "explanation": "插入和删除结点都有可能引起 LR 平衡旋转或者 RL 平衡旋转，发生两次旋转操作。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_15",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "将关键字 1, 2, 3, …, 1024 依次插入到初始为空的平衡二叉树中，假设只有一个根结点的二叉树的高度为 0，则插入结束后的平衡二叉树的高度为（）。",
      "options": {
        "A": "8",
        "B": "9",
        "C": "10",
        "D": "11"
      },
      "answer": [
        "C"
      ],
      "explanation": "当按关键字有序的顺序插入初始为空的平衡二叉树时，若关键字个数 $n=2^{k}-1$ 时，则该平衡二叉树一定是一棵满二叉树（可以用 1～3、1～7 手工验证）。当插入关键字 1023 时，平衡二叉树正好是一棵满二叉树，高度为 9。因此，插入关键字 1024 后，平衡二叉树的高度为 10。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_16",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "下列关于红黑树和 AVL 树的说法中，不正确的是（）。 I. 一棵含有 n 个结点的红黑树的高度至多为 $2\\log_{2}(n+1)$ II. 若一个结点是红色的，则它的父结点和孩子结点都是黑色的 III. 红黑树的查询效率一般要优于含有相同结点数的 AVL 树 IV. 若 AVL 树的某结点的左右孩子的平衡因子都是零，则该结点的平衡因子也是零",
      "options": {
        "A": "I、III",
        "B": "III",
        "C": "II、IV",
        "D": "III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "说法 I 和 II 都是红黑树的性质。AVL 是高度平衡的二叉查找树，红黑树是适度平衡的二叉查找树，从这一点也可以看出 AVL 的查询效率往往更优，说法 III 错误。AVL 的某结点的左右孩子的平衡因子都是零，并不能说明左右子树的高度相等，因此该结点的平衡因子不一定为零，说法 IV 错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_17",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "下列关于红黑树和 AVL 树的描述中，不正确的是（）。",
      "options": {
        "A": "两者都属于自平衡的二叉树",
        "B": "两者查找、插入、删除的时间复杂度都相同",
        "C": "红黑树插入和删除过程至多有 2 次旋转操作",
        "D": "红黑树的任意一个结点的左右子树高度（含叶结点）之比不超过 2"
      },
      "answer": [
        "C"
      ],
      "explanation": "自平衡的二叉排序树是指在插入和删除时能自动调整以保持其所定义的平衡性，两者都属于自平衡二叉树，选项 A 正确。两者的查找、插入、删除操作的时间复杂度都为 $O(\\log_{2}n)$ ，选项 B 正确。在红黑树中删除结点时，情况 1 可能变为情况 2、3 或 4，情况 2 会变为情况 3，可能会出现旋转次数超过 2 次的情况，选项 C 错误。从任一结点到每个叶结点的所有路径都包含相同数目的黑结点，没有两个连续的红结点，且叶结点是黑色的，这意味着在任一结点到其左右子树中最远和最近的叶结点之间，红结点的数目小于或等于黑结点的数目，路径长度之比不超过 2，选项 D 正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_18",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "下列关于红黑树的说法中，正确的是（）。",
      "options": {
        "A": "红黑树的红结点的数目最多和黑结点的数目相同（不考虑虚构结点）",
        "B": "若红黑树的所有结点都是黑色的，则它一定是一棵满二叉树",
        "C": "红黑树的任何一个分支结点都有两个非空孩子结点",
        "D": "红黑树的子树也一定是红黑树"
      },
      "answer": [
        "B"
      ],
      "explanation": "红黑树的红结点数目最大可以是黑结点数目的2倍（如一棵有3个结点的红黑树，第1层为黑色，第2层为红色），选项A错误。从根结点出发到所有叶结点的黑结点数是相同的，若所有结点都是黑色，则一定是满二叉树，选项B正确。考虑某个黑结点，它可以有一个空叶结点孩子和一个非空红结点孩子，选项C错误。红黑树中可能存在红结点，根结点为红色的子树不是红黑树，选项D错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_19",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "下列四个选项中，满足红黑树定义的是（）。",
      "options": {
        "A": "",
        "B": "",
        "C": "",
        "D": ""
      },
      "answer": [
        "A"
      ],
      "explanation": "红黑树是一种特殊的二叉排序树，选项 B 不满足二叉排序树的性质。选项 C 中，结点 2 的左右黑结点数不同。在选项 D 中，结点 3 的左右黑结点数不同。只有选项 A 满足红黑树的定义。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_20",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "将关键字 1, 2, 3, 4, 5, 6, 7 依次插入初始为空的红黑树 T，则 T 中红结点的个数是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "C"
      ],
      "explanation": "关键字 1, 2, 3, 4, 5, 6, 7 依次插入红黑树后的形态变化如下:\n\n![](images/cbe12f99b40cf1349d395a0d4d8e3ae0ab5f60b185ed529bd983b7941a3fae47.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"1\"] --> B[\"2\"]\n    C[\"2\"] --> D[\"1\"]\n    C --> E[\"3\"]\n    F[\"2\"] --> G[\"1\"]\n    F --> H[\"3\"]\n    H --> I[\"4\"]\n    J[\"2\"] --> K[\"1\"]\n    J --> L[\"4\"]\n    M[\"2\"] --> N[\"1\"]\n    M --> O[\"4\"]\n    P[\"2\"] --> Q[\"3\"]\n    P --> R[\"5\"]\n    S[\"2\"] --> T[\"5\"]\n    S --> U[\"6\"]\n    V[\"2\"] --> W[\"1\"]\n    V --> X[\"4\"]\n    X --> Y[\"6\"]\n    Z[\"6\"] --> AA[\"5\"]\n    Z --> AB[\"7\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_21",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "将关键字 5, 4, 3, 2, 1 依次插入初始为空的红黑树 T，则 T 的最终形态是（）。",
      "options": {
        "A": "",
        "B": "",
        "C": "",
        "D": ""
      },
      "answer": [
        "D"
      ],
      "explanation": "关键字 5, 4, 3, 2, 1 依次插入红黑树后的形态变化如下:\n\n![](images/f672a1f47ab808123a524016430209a9611b983308ea12e5da231e9d45e53917.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"5\"] --> B[\"4\"]\n    C[\"4\"] --> D[\"3\"]\n    C --> E[\"5\"]\n    F[\"4\"] --> G[\"3\"]\n    F --> H[\"5\"]\n    I[\"4\"] --> J[\"3\"]\n    I --> K[\"5\"]\n    L[\"2\"] --> M[\"2\"]\n    N[\"2\"] --> O[\"1\"]\n    N --> P[\"3\"]\n    Q[\"4\"] --> R[\"2\"]\n    Q --> S[\"5\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_22",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "在下图所示的红黑树中插入结点 2 且染成红色后，则下一步应进行的操作是（）。 ![](images/1ada3d54275a84ba35055d1f5af5da05bb210cc388397d53060c62633f903ae9.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"8\"] --> B[\"5\"] A --> C[\"12\"] B --> D[\"3\"] C --> E[\"10\"] C --> F[\"14\"] ``` </details>",
      "options": {
        "A": "左旋",
        "B": "右旋",
        "C": "变色",
        "D": "无须调整"
      },
      "answer": [
        "B"
      ],
      "explanation": "插入结点 2 且将其染成红色后违反不红红原则，并且叔结点是黑色，应进行 LL 旋转，将结点 3 右旋旋转到结点 5 的位置，结点 2 和结点 5 分别成为结点 3 的左右孩子，然后将结点 3 染成黑色，结点 2 和结点 5 染成红色。因此，下一步应进行右旋操作。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_23",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2009 统考真题】下列二叉排序树中，满足平衡二叉树定义的是（）。 ![](images/87e4a23ca64e34e0cb1715640d2527c2a123bff9f64f64a75abf3292a2059a9f.jpg)",
      "options": {
        "A": "",
        "B": "",
        "C": "",
        "D": ""
      },
      "answer": [
        "B"
      ],
      "explanation": "根据平衡二叉树的定义，任意结点的左右子树高度差的绝对值不超过 1。而其余 3 个答案均可以找到不满足条件的结点。答题时可以把每个非叶结点的平衡因子都写出来。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_24",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2010 统考真题】在下图所示的平衡二叉树中插入关键字 48 后得到一棵新平衡二叉树，在新平衡二叉树中，关键字 37 所在结点的左右子结点中保存的关键字分别是（）。 ![](images/eb753cea728884ed83e14cc5f3b0673158b0bd9570d726a6385e6fd5fab333bb.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"24\"] --> B[\"13\"] A --> C[\"53\"] C --> D[\"37\"] C --> E[\"90\"] ``` </details>",
      "options": {
        "A": "13,48",
        "B": "24,48",
        "C": "24,53",
        "D": "24, 90"
      },
      "answer": [
        "C"
      ],
      "explanation": "插入 48 以后，该二叉树根结点的平衡因子由 -1 变为 -2，在最小不平衡子树根结点的右子树（R）的左子树（L）中插入新结点引起的不平衡属于 RL 型平衡旋转（先右旋后左旋）。\n\n![](images/4c0d19c29c62a54794fbe67253a023f18ecbb3debdf79e900155f9098581efe5.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"53\"] --> B[\"24\"]\n    A --> C[\"13\"]\n    A --> D[\"37\"]\n    A --> E[\"90\"]\n    \n    F[\"53\"] --> G[\"24\"]\n    F --> H[\"13\"]\n    F --> I[\"37\"]\n    F --> J[\"90\"]\n    \n    K[\"24\"] --> L[\"37\"]\n    K --> M[\"13\"]\n    K --> N[\"48\"]\n    \n    O[\"37\"] --> P[\"24\"]\n    O --> Q[\"53\"]\n    O --> R[\"48\"]\n    O --> S[\"90\"]\n```\n</details>\n\n调整后，关键字 37 所在结点的左右子结点中保存的关键字分别是 24、53。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_25",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2011统考真题】对下列关键字序列，不可能构成某二叉排序树中一条查找路径的是（）。",
      "options": {
        "A": "95, 22, 91, 24, 94, 71",
        "B": "92, 20, 91, 34, 88, 35",
        "C": "21, 89, 77, 29, 36, 38",
        "D": "12, 25, 71, 68, 33, 34"
      },
      "answer": [
        "A"
      ],
      "explanation": "在二叉排序树中，左子树结点值小于根结点，右子树结点值大于根结点。在选项 A 中，当查找到 91 后再向 24 查找，说明这一条路径（左子树）之后查找的数都要比 91 小，而后面却查找到了 94（解题过程中，建议配合画图），因此错误。\n\n画图法：各选项对应的查找过如下图所示。选项 B、C、D 对应的查找树都是二叉排序树，选项 A 对应的查找树不是二叉排序树，因为在 91 为根的左子树中出现了比 91 大点的结点 94。\n\n![](images/ac8f49a6eb3ef04d8207a031fe9c1b0dc410737d5edc7a877de52346cd43aecf.jpg)",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_26",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2012 统考真题】若平衡二叉树的高度为 6，且所有非叶结点的平衡因子均为 1，则该平衡二叉树的结点总数为（）。",
      "options": {
        "A": "12",
        "B": "20",
        "C": "32",
        "D": "33"
      },
      "answer": [
        "B"
      ],
      "explanation": "所有非叶结点的平衡因子均为 1，即平衡二叉树满足平衡的最少结点情况，如下图所示。对于高度为 n、左右子树的高度分别为 n-1 和 n-2、所有非叶结点的平衡因子均为 1 的平衡二叉树，计算总结点数的公式为 $C_{n}=C_{n-1}+C_{n-2}+1$ ， $C_{1}=1$ ， $C_{2}=2$ ， $C_{3}=2+1+1=4$ ，可推出 $C_{6}=20$ 。\n\n![](images/ba18e2c3001be16f945655087760775a20efa927c42dcda1ad5e910e0ca3a396.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    T1[\" \"] --> T2[\" \"]\n    T2 --> T3[\" \"]\n    T3 --> T4[\" \"]\n    T4 --> Th[\" \"]\n    T4 --> Th1[\"T_h 1\"]\n    T4 --> Th2[\"T_h 2\"]\n```\n</details>\n\n画图法：先画出 $T_{1}$ 和 $T_{2}$ ；然后新建一个根结点，连接 $T_{2}$ 、 $T_{1}$ 构成 $T_{3}$ ；新建一个根结点，连接 $T_{3}$ 、 $T_{2}$ 构成 $T_{4}$ ……直到画出 $T_{6}$ ，可知 $T_{6}$ 的结点数为 20。\n\n排除法：对于选项 A，高度为 6、结点数为 12 的树怎么也无法达到平衡。对于选项 C，结点较多时，考虑较极端的情形，即第 6 层只有最左叶子的完全二叉树刚好有 32 个结点，虽然满足平衡的条件，但显然再删去部分结点依然不影响平衡，不是最少结点的情况。同理，选项 D 错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_27",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2013 统考真题】在任意一棵非空二叉排序树 $T_{1}$ 中，删除某结点 v 之后形成二叉排序树 $T_{2}$ ，再将 v 插入 $T_{2}$ 形成二叉排序树 $T_{3}$ 。下列关于 $T_{1}$ 与 $T_{3}$ 的叙述中，正确的是（）。I. 若 v 是 $T_{1}$ 的叶结点，则 $T_{1}$ 与 $T_{3}$ 不同 II. 若 v 是 $T_{1}$ 的叶结点，则 $T_{1}$ 与 $T_{3}$ 相同 III. 若 $v$ 不是 $T_{1}$ 的叶结点，则 $T_{1}$ 与 $T_{3}$ 不同 IV. 若 v 不是 $T_{1}$ 的叶结点，则 $T_{1}$ 与 $T_{3}$ 相同",
      "options": {
        "A": "仅 I、III",
        "B": "仅 I、IV",
        "C": "仅 II、III",
        "D": "仅 II、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "由于在二叉排序树中插入结点的位置是一个新的叶结点，若删除的是叶结点，则重新插入后得到的二叉排序树与原来的二叉排序树相同。若删除的是非叶结点，在删除过程中会找其他结点填补，重新插入后变成叶结点，则得到的二叉排序树与原来的二叉排序树不同。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_28",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2013 统考真题】若将关键字 1, 2, 3, 4, 5, 6, 7 依次插入初始为空的平衡二叉树 T，则 T 中平衡因子为 0 的分支结点的个数是（）。",
      "options": {
        "A": "0",
        "B": "1",
        "C": "2",
        "D": "3"
      },
      "answer": [
        "D"
      ],
      "explanation": "利用7个关键字构建平衡二叉树 $T$ ，平衡因子为0的分支结点个数为3，构建的平衡二叉树及构造与调整过程如下图所示。\n\n![](images/75e46abf977b19a386648dd5c11e3d521066246f508045ff718cd09c3caf64f4.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"1\"] --> B[\"1\"]\n    B --> C[\"2\"]\n    C --> D[\"1\"]\n    D --> E[\"2\"]\n    E --> F[\"3\"]\n    F --> G[\"2\"]\n    G --> H[\"1\"]\n    H --> I[\"3\"]\n    I --> J[\"4\"]\n    J --> K[\"5\"]\n    \n    subgraph RR Region 1\n        L[\"1\"] --> M[\"2\"]\n        M --> N[\"4\"]\n        N --> O[\"5\"]\n    end\n    \n    subgraph RR Region 2\n        P[\"1\"] --> Q[\"2\"]\n        Q --> R[\"4\"]\n        R --> S[\"5\"]\n        S --> T[\"6\"]\n        T --> U[\"7\"]\n    end\n    \n    subgraph RR Region 3\n        V[\"1\"] --> W[\"2\"]\n        W --> X[\"4\"]\n        X --> Y[\"5\"]\n        Y --> Z[\"6\"]\n        Z --> AA[\"7\"]\n    end\n    \n    subgraph RR Region 4\n        AB[\"1\"] --> AC[\"2\"]\n        AC --> AD[\"4\"]\n        AD --> AE[\"5\"]\n        AE --> AF[\"6\"]\n        AF --> AG[\"7\"]\n    end\n    \n    style RR Region 1 fill:#f9f,stroke:#333\n    style RR Region 2 fill:#f9f,stroke:#333\n    style RR Region 3 fill:#f9f,stroke:#333\n    style RR Region 4 fill:#f9f,stroke:#333\n    style RR Region 5 fill:#f9f,stroke:#333\n    style RR Region 6 fill:#f9f,stroke:#333\n    style RR Region 7 fill:#f9f,stroke:#333\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_29",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2015 统考真题】现有一棵无重复关键字的平衡二叉树（AVL），对其进行中序遍历可得到一个降序序列。下列关于该平衡二叉树的叙述中，正确的是（）。",
      "options": {
        "A": "根结点的度一定为 2",
        "B": "树中最小元素一定是叶结点",
        "C": "最后插入的元素一定是叶结点",
        "D": "树中最大元素一定是无左子树"
      },
      "answer": [
        "D"
      ],
      "explanation": "大多数教材将平衡二叉树定义为一种高度平衡的二叉排序树，二叉排序树的中序序列是一个升序序列，而题意正好相反。由此可知，命题老师认为平衡二叉树仅为一棵满足高度平衡的二叉树，不一定是二叉排序树。只有两个结点的平衡二叉树的根结点的度为1，选项A错误。中序遍历后得到一个降序序列（与二叉排序树正好相反），树中最大元素一定无左子树（可能有右子树），这与二叉排序树也正好相反，也因此不一定是叶结点，选项B错误，选项D正确。最后插入的结点可能会导致平衡调整，而不一定是叶结点，选项C错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_30",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2018 统考真题】已知二叉排序树如右图所示，元素之间应满足的大小关系是（）。",
      "options": {
        "A": "$x_{1}<x_{2}<x_{5}$",
        "B": "$x_{1}<x_{4}<x_{5}$",
        "C": "$x_{3}<x_{5}<x_{4}$",
        "D": "$x_{4}<x_{3}<x_{5}$"
      },
      "answer": [
        "C"
      ],
      "explanation": "根据二叉排序树的特性：中序遍历（LNR）得到的是一个递增序列。图中二叉排序树的中序遍历序列为 $x_{1}, x_{3}, x_{5}, x_{4}, x_{2}$ ，可知 $x_{3} < x_{5} < x_{4}$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_31",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2019 统考真题】在任意一棵非空平衡二叉树（AVL 树） $T_{1}$ 中，删除某结点 v 之后形成平衡二叉树 $T_{2}$ ，再将 v 插入 $T_{2}$ 形成平衡二叉树 $T_{3}$ 。下列关于 $T_{1}$ 与 $T_{3}$ 的叙述中，正确的是（）。 I. 若 v 是 $T_{1}$ 的叶结点，则 $T_{1}$ 与 $T_{3}$ 可能不相同 II. 若 v 不是 $T_{1}$ 的叶结点，则 $T_{1}$ 与 $T_{3}$ 一定不相同 III. 若 v 不是 $T_{1}$ 的叶结点，则 $T_{1}$ 与 $T_{3}$ 一定相同",
      "options": {
        "A": "仅 I",
        "B": "仅 II",
        "C": "仅 I、II",
        "D": "仅 I、III"
      },
      "answer": [
        "A"
      ],
      "explanation": "在非空平衡二叉树中插入结点，在失去平衡调整前，一定插入在叶结点的位置。\n\n若删除的是 $T_{1}$ 的叶结点，则删除后平衡二叉树可能不会失去平衡，即不会发生调整，再插入此结点得到的二叉平衡树 $T_{1}$ 与 $T_{3}$ 相同；若删除后平衡二叉树失去平衡而发生调整，再插入结点得到的二叉平衡树 $T_{3}$ 与 $T_{1}$ 可能不同。说法 I 正确。例如，如下图所示，删除结点 0，平衡二叉树失衡调整，再插入结点 0 后，平衡二叉树和以前不同。\n\n![](images/7812dccbafcbdbae63d023e6fd48b0a29bc946004f5175ed01821d110bde32d9.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"1\"] --> B[\"0\"]\n    A --> C[\"2\"]\n    C --> D[\"3\"]\n    E[\"2\"] --> F[\"1\"]\n    E --> G[\"3\"]\n    H[\"2\"] --> I[\"1\"]\n    H --> J[\"3\"]\n    K[\"2\"] --> L[\"0\"]\n    K --> M[\"3\"]\n    N[\"删除0\"] --> O[\"调整\"]\n    P[\"插入0\"] --> Q[\"插入0\"]\n```\n</details>\n\n对于比较绝对的说法 II 和 III，通常只需举出反例即可。\n\n若删除的是 $T_{1}$ 的非叶结点，且删除和插入操作均没有导致平衡二叉树的调整（这时可以首先想到删除的结点只有一个孩子的情况），则该结点从非叶结点变成了叶结点， $T_{1}$ 与 $T_{3}$ 显然不同。例如，如下图所示，删除结点 2，用右孩子结点 3 填补，再插入结点 2，平衡二叉树和以前不同。\n\n![](images/d6c5518be0deecf12b5ccae446db8615150a446ebadc104f33b4166823b5f5fe.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"1\\n0\\n2\\n3\"] -->|删除2| B[\"1\\n0\\n3\"]\n    B -->|插入2| C[\"1\\n0\\n3\\n2\"]\n```\n</details>\n\n若删除的是 $T_{1}$ 的非叶结点，且删除和插入操作后导致了平衡二叉树的调整，则该结点有可能通过旋转后继续变成非叶结点， $T_{1}$ 与 $T_{3}$ 相同。例如，如下图所示，删除结点 2，用右孩子结点 3 填补，再插入结点 2，平衡二叉树失衡调整，调整后的平衡二叉树和以前相同。\n\n![](images/df2ceae45fa0e70fbf5e7e7eb05c794c0dd2f1c37b707370a2d76d28e8095f58.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"2\\n1\\n3\"] -->|删除2| B[\"3\\n1\\n1\"]\n    B -->|插入2| C[\"3\\n1\\n2\"]\n    C -->|调整| D[\"2\\n1\\n3\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_32",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2020 统考真题】下列给定的关键字输入序列中，不能生成右边二叉排序树的是（）。",
      "options": {
        "A": "4, 5, 2, 1, 3",
        "B": "4, 5, 1, 2, 3",
        "C": "4, 2, 5, 3, 1",
        "D": "4,2,1,3,5"
      },
      "answer": [
        "B"
      ],
      "explanation": "每个选项都逐一验证，选项 B 生成二叉排序树的过程如下图所示，显然错误。\n\n![](images/67b313891c789597979638a75cafabc2a144fb97b1847d45902c58c0ed1ae295.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"4\"] --> B[\"4\"]\n    B --> C[\"5\"]\n    D[\"4\"] --> E[\"1\"]\n    D --> F[\"5\"]\n    G[\"4\"] --> H[\"1\"]\n    G --> I[\"5\"]\n    J[\"4\"] --> K[\"2\"]\n    J --> L[\"1\"]\n    L --> M[\"5\"]\n    N[\"4\"] --> O[\"2\"]\n    N --> P[\"3\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_33",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2021 统考真题】给定平衡二叉树如右图所示，插入关键字 23 后，根中的关键字是（）。",
      "options": {
        "A": "16",
        "B": "20",
        "C": "23",
        "D": "25"
      },
      "answer": [
        "D"
      ],
      "explanation": "关键字 23 的插入位置为 25 的左孩子，此时破坏了平衡的性质，需要对平衡二叉树进行调整。最小不平衡子树就是该树本身，插入位置在根结点的右子树的左子树上，因此需要进行 RL 旋转，RL 旋转过程如下图所示，旋转完成后根结点的关键字为 25，所以选择选项 D。\n\n![](images/6fc377ec33f6f1b7c40e22fc55eb7958dfa0cb5d898bb8787cf1692e93fd625e.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"20\"] --> B[\"16\"]\n    A --> C[\"30\"]\n    C --> D[\"25\"]\n    C --> E[\"40\"]\n    D --> F[\"23\"]\n    G[\"25\"] --> H[\"20\"]\n    G --> I[\"30\"]\n    I --> J[\"16\"]\n    I --> K[\"23\"]\n    I --> L[\"40\"]\n    M[\"RL旋转\"] --> N\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-3-4_34",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2024 统考真题】一棵二叉搜索树如右图所示， $k_{1}$ 、 $k_{2}$ 、 $k_{3}$ 分别是对应结点中保存的关键字。子树 $T$ 的任一结点中保存的关键字 $x$ 满足的是（）。",
      "options": {
        "A": "$x < k_{1}$",
        "B": "$x > k_{2}$",
        "C": "$k_{1}<x<k_{3}$",
        "D": "$k_{3}<x<k_{2}$"
      },
      "answer": [
        "D"
      ],
      "explanation": "在二叉搜索树中，每个结点的左子树中的所有关键字都小于该结点的关键字，右子树中的所有关键字都大于该结点的关键字。 $k_{2}$ 、 $k_{3}$ 所在结点都在 $k_{1}$ 所在结点的右子树中，因此 $k_{2}>k_{1}$ 、 $k_{3}>k_{1}$ ； $k_{3}$ 所在结点在 $k_{2}$ 所在结点的左子树中，因此 $k_{3}<k_{2}$ ；子树T是 $k_{3}$ 所在结点的右子树，因此子树T中任意结点的关键字x满足 $x>k_{3}$ 。综合可得， $k_{3}<x<k_{2}$ 。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_05",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "具有 n 个关键字的 m 阶 B 树，应有（）个叶结点。",
      "options": {
        "A": "$n + 1$",
        "B": "n - 1",
        "C": "mn",
        "D": "nm/2"
      },
      "answer": [
        "A"
      ],
      "explanation": "B 树的叶结点对应查找失败的情况，对有 n 个关键字的查找集合进行查找，失败的可能性有 $n + 1$ 种。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_06",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "multiple_choice",
      "question": "高度为 5 的 3 阶 B 树至少有（）个结点，至多有（）个结点。",
      "options": {
        "A": "32",
        "B": "31",
        "C": "120",
        "D": "121"
      },
      "answer": [
        "B",
        "D"
      ],
      "explanation": "由 $m$ 阶B树的性质可知，根结点至少有2棵子树；根结点外的所有非终端结点至少有 $\\lceil m / 2\\rceil$ 棵子树，结点数最少时，3阶B树形状至少类似于一棵满二叉树，即高度为5的B树至少有 $2^{5} - 1 = 31$ 个结点。因为每个结点最多有 $m$ 棵子树，所以当结点数最多时，3阶B树形状类似于满三叉树，结点数为 $(3^{5} - 1) / 2 = 121$ （注意，这里求的是结点数而非关键字数，若求的是关键字数，则还应把每个结点中关键字数的上下界确定出来）。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_08",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "multiple_choice",
      "question": "已知一棵 5 阶 B 树中共有 53 个关键字，则树的最大高度为（），最小高度为（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "C",
        "B"
      ],
      "explanation": "5 阶 B 树中共有 53 个关键字，由最大高度公式 $H \\leqslant \\log_{\\lceil m/2 \\rceil} ((n + 1)/2) + 1$ 得最大高度 $H \\leqslant$ $\\log_3[(53 + 1) / 2] + 1 = 4$ ，即最大高度为4；由最小高度公式 $h\\geqslant \\log_m(n + 1)$ 得最小高度 $h\\geqslant \\log_554\\approx 2.5$ 从而最小高度为3。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_09",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "multiple_choice",
      "question": "已知一棵 3 阶 B 树中共有 2047 个关键字，则树的最大高度为（），最小高度为（）。",
      "options": {
        "A": "11",
        "B": "10",
        "C": "8",
        "D": "7"
      },
      "answer": [
        "A",
        "D"
      ],
      "explanation": "利用前面的公式即最小高度 $h \\geqslant \\log_{m}(n + 1)$ 和最大高度 $H \\leqslant \\log_{\\lceil m/2 \\rceil}[(n + 1)/2] + 1$ ，易算出最大高度 $H \\leqslant \\log_{2}[(2047 + 1)/2] + 1 = 11$ ，最小高度 $h \\geqslant \\log_{3}2048 = 6.9$ ，从而最小高度取7（注意，有些辅导书针对本题算出的高度要比这里给出的答案多1，因为它们在对B树的高度定义中，把最底层不包含任何关键字的叶结点也算进去了）。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_10",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "在7阶B树中，按从上往下、从左往右的顺序搜索第2016个关键字，若根结点已读入内存，则最多需启动（）次I/O。",
      "options": {
        "A": "4",
        "B": "5",
        "C": "6",
        "D": "7"
      },
      "answer": [
        "B"
      ],
      "explanation": "本题要计算的是最坏情况下第2016个关键字在7阶B树中的最大深度，即考查B树结点中关键字数最少的情况。按照B树的定义，根结点至少有1个关键字，第二层至少有2个结点，即 $2\\times3$ 个关键字；第三层至少有 $2\\times4$ 个结点，即 $2\\times4\\times3$ 个关键字；第四层至少有 $2\\times4^{2}$ 个结点，即 $2\\times4^{2}\\times3$ 个关键字；以此类推，第h层至少有 $2\\times4^{h-2}$ 个结点，即 $2\\times4^{h-2}\\times3$ 个关键字，故前h层的关键字总数 $n=1+2\\times3\\times(1+4+\\cdots+4^{h-2})=1+2\\times(4^{h-1}-1)$ 。故当h=5时，n=511；当h=6时，n=2047，说明5层高的7阶B树最少有511个关键字，而6层高的7阶B树最少有2047个关键字，故最坏情况下第2016个关键字在7阶B树的第6层，需启动5次I/O操作。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_11",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "在一棵高度为 $h$ 的 B 树中插入一个新关键字，假设在插入过程中读入的结点一直在内存中，根结点的高度为 1，且初始时未读入内存，则下列叙述中错误的是（）。 （注意，本题中的新结点是指新产生的结点，如一次分裂才产生一个新结点。）",
      "options": {
        "A": "若插入操作导致树的高度变为 $h + 1$ ，则本次插入一定导致了根结点的分裂",
        "B": "若插入操作导致旧结点的分裂，则树的高度一定会变为 $h + 1$",
        "C": "由于本次插入操作而产生的新结点的个数最多为 $h + 1$",
        "D": "由于本次插入操作而产生的读/写磁盘的次数最多为 $3h + 1$"
      },
      "answer": [
        "B"
      ],
      "explanation": "考虑最坏情况，在待插入结点中插入一个关键码后，导致结点分裂，在该层分裂成2个结点，因此需要2次写磁盘操作；分裂操作逐层向上传导，导致每层都有结点分裂，因为结点分裂而导致的写磁盘操作共有 $2h$ 次，加上最后一次结点分裂形成新根结点也需要1次写磁盘操作，写磁盘的总次数为 $2h + 1$ ，即由于本次插入而产生的新结点个数为 $h + 1$ ，加上寻找插入位置而引起的 $h$ 次的读磁盘操作，整个过程中读/写磁盘的总次数为 $3h + 1$ 次，选项C、D正确。若插入操作导致了B树的高度增加，则分裂操作一定是从最底层传导至根结点的，即前面分析的最坏情况，选项A正确。若分裂操作没有传导至根结点，则B树的高度不变，选项B错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_12",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "下列关于 B 树和 B+树的叙述中，错误的是（）。",
      "options": {
        "A": "B 树和 B+树都能有效地支持顺序查找",
        "B": "B 树和 B+树都能有效地支持随机查找",
        "C": "B 树和 B+树都是平衡的多叉树",
        "D": "B 树和 B+树都可以用于文件索引结构"
      },
      "answer": [
        "A"
      ],
      "explanation": "B 树和 B+树的差异主要体现在：① 结点关键字和子树的个数；② B+树非叶结点仅起索引作用；③ B 树叶结点关键字和其他结点包含的关键字是不重复的；④ B+树支持顺序查找和随机查找，而 B 树仅支持随机查找。B+树的所有叶结点中包含了全部的关键字信息，且叶结点本身依关键字从小到大顺序链接，因此可以进行顺序查找，而 B 树不支持顺序查找。B 树和 B+树都可用于文件索引结构，但 B+树更适合做数据库索引和文件索引，因为它的磁盘读/写代价更低。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_13",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "下列关于 B 树和 B+树的查找操作的叙述中，错误的是（）。",
      "options": {
        "A": "B 树查找成功时，不一定需要查找到最后一层的内部结点",
        "B": "B 树查找失败时，一定需要查找到叶结点",
        "C": "B+树查找成功时，不一定需要查找到叶结点",
        "D": "B+树查找成功时，每次查找的长度都相等"
      },
      "answer": [
        "C"
      ],
      "explanation": "在 B 树的查找操作中，若目标元素在某个内部结点中，则查找结束，不需要进入叶结点；查找失败时，叶结点是所有路径的终点，选项 A、B 正确。B+树中仅叶结点包含信息，非叶结点仅起到索引作用，查找成功时一定会找到相应的叶结点，所经过的路径长度都相等，选项 C 错误，选项 D 正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_14",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2009 统考真题】下列叙述中，不符合 $m$ 阶B树定义要求的是（）。",
      "options": {
        "A": "根结点至多有 m 棵子树",
        "B": "所有叶结点都在同一层上",
        "C": "各结点内关键字均升序或降序排列",
        "D": "叶结点之间通过指针链接"
      },
      "answer": [
        "D"
      ],
      "explanation": "m 阶 B 树不要求将各叶结点之间用指针链接。选项 D 描述的实际上是 B+树。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_15",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2012 统考真题】已知一棵 3 阶 B 树，如右图所示。删除关键字 78 得到一棵新 B 树，其最右叶结点中的关键字是（）。",
      "options": {
        "A": "60",
        "B": "60, 62",
        "C": "62, 65",
        "D": "65"
      },
      "answer": [
        "D"
      ],
      "explanation": "对于图中所示的 3 阶 B 树，被删关键字 78 所在的结点在删除前的关键字个数 = 1 = $\\left\\lceil 3/2 \\right\\rceil - 1$ ，且其左兄弟结点的关键字个数 = 2 ≥ $\\left\\lceil 3/2 \\right\\rceil$ ，属于“兄弟够借”的情况，因此要把该结点的左兄弟结点中的最大关键字上移到父结点中，同时把父结点中大于上移关键字的关键字下移到要删除关键字的结点中，这样就达到了新的平衡，如下图所示。\n\n![](images/77e744e219b43ffae7bc33b5acad1d0611cb5aa16c8d69ea76a7cdbecca09398.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"45\"] --> B[\"17 35\"]\n    A --> C[\"55 65\"]\n    B --> D[\"10\"]\n    B --> E[\"21\"]\n    B --> F[\"37\"]\n    C --> G[\"47\"]\n    C --> H[\"60 62\"]\n    C --> I[\"78\"]\n    \n    J[\"45\"] --> K[\"17 35\"]\n    J --> L[\"55 62\"]\n    K --> M[\"10\"]\n    K --> N[\"21\"]\n    K --> O[\"37\"]\n    L --> P[\"47\"]\n    L --> Q[\"60\"]\n    L --> R[\"65\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_16",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2013 统考真题】在一棵高度为 2 的 5 阶 B 树中，所含关键字的个数至少是（）。",
      "options": {
        "A": "5",
        "B": "7",
        "C": "8",
        "D": "14"
      },
      "answer": [
        "A"
      ],
      "explanation": "对于 5 阶 B 树，根结点的分支数最少为 2（关键字数最少为 1），其他非叶结点的分支数最少为 $\\left\\lceil n/2 \\right\\rceil = 3$ （关键字数最少为 2），因此关键字个数最少的情况如右图所示（叶结点不计入高度）。\n\n![](images/aaea797530173760904e7ffce22356288cb15809fa9726a8d2b1c95269bfa1ea.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"×\"] --> B[\"××\"]\n    A --> C[\"××\"]\n    B --> D[\" \"]\n    B --> E[\" \"]\n    B --> F[\" \"]\n    C --> G[\" \"]\n    C --> H[\" \"]\n    C --> I[\" \"]\n```\n</details>\n\n# 注意\n\n一般来说，对于某个具体的B树图形，并不能确定是几阶B树。对于本题所述的5阶B树，不要误认为：“存在至少有一个含关键字结点中的关键字达到4”才符合5阶B树的要求，因为5阶B树中各个结点包含的关键字个数最少为2（ $\\lceil 5 / 2 \\rceil - 1 = 2$ ），最多为4（ $5 - 1 = 4$ ）。当5阶B树中各个结点包含的关键字个数为2时，也满足5阶B树的要求。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_17",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2014 统考真题】在一棵有 15 个关键字的 4 阶 B 树中，含关键字的结点个数最多是（）。",
      "options": {
        "A": "5",
        "B": "6",
        "C": "10",
        "D": "15"
      },
      "answer": [
        "D"
      ],
      "explanation": "关键字数量不变，要求结点数量最多，即要求每个结点中含关键字的数量最少。根据4阶B树的定义，根结点最少含1个关键字，非根结点中最少含 $[4 / 2] - 1 = 1$ 个关键字，所以每个结点中关键字数量最少都为1个，即每个结点都有2个分支，类似于排序二叉树，而15个结点正好可以构造一个4层的4阶B树，使得终端结点全在第四层，符合B树的定义。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_18",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2016 统考真题】B+树不同于 B 树的特点之一是（）。",
      "options": {
        "A": "能支持顺序查找",
        "B": "结点中含有关键字",
        "C": "根结点至少有两个分支",
        "D": "所有叶结点都在同一层上"
      },
      "answer": [
        "A"
      ],
      "explanation": "B+树的所有叶结点中包含了全部的关键字信息，且叶结点本身依关键字从小到大顺序链接，因此可以进行顺序查找，而 B 树不支持顺序查找（只支持多路查找）。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_19",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2017 统考真题】下列应用中，适合使用 B+树的是（）。",
      "options": {
        "A": "编译器中的词法分析",
        "B": "关系数据库系统中的索引",
        "C": "网络中的路由表快速查找",
        "D": "操作系统的磁盘空闲块管理"
      },
      "answer": [
        "B"
      ],
      "explanation": "B+树是应文件系统所需而产生的 B 树的变形，前者比后者更加适用于实际应用中的操作系统的文件索引和数据库索引，因为前者的磁盘读/写代价更低，查询效率更加稳定。编译器中的词法分析使用有穷自动机和语法树。网络中的路由表快速查找主要靠高速缓存、路由表压缩技术和快速查找算法。系统一般使用空闲空间链表管理磁盘空闲块。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_20",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2018 统考真题】高度为 5 的 3 阶 B 树含有的关键字个数至少是（）。",
      "options": {
        "A": "15",
        "B": "31",
        "C": "62",
        "D": "242"
      },
      "answer": [
        "B"
      ],
      "explanation": "m 阶 B 树的基本性质：除根结点外的非叶结点最少含有 $\\left[m/2\\right]-1$ 个关键字，代入 m=3 得到每个非叶结点中最少包含 1 个关键字，而根结点含有 1 个关键字，因此所有非叶结点都有两个孩子。此时其树形与 h=5 的满二叉树相同，可求得关键字最少为 31 个。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_21",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2020 统考真题】依次将关键字 5, 6, 9, 13, 8, 2, 12, 15 插入初始为空的 4 阶 B 树后，根结点中包含的关键字是（）。",
      "options": {
        "A": "8",
        "B": "6, 9",
        "C": "8, 13",
        "D": "9, 12"
      },
      "answer": [
        "B"
      ],
      "explanation": "一个 4 阶 B 树的任意非叶结点至多含有 m-1=3 个关键字，在关键字依次插入的过程中，会导致结点的不断分裂，插入过程如下图所示。得到根结点包含的关键字为 6,9。\n\n![](images/a196b2d4d5dd07b264dc177febeadeb7a56f7d7ae79b5291f43ddfa46db1510c.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"插入5,6,9\"] --> B[\"5 6 9\"]\n    B --> C[\"插入13\"]\n    C --> D[\"5 6 9 13\"]\n    D --> E[\"分裂\"]\n    E --> F[\"5\"]\n    E --> G[\"9 13\"]\n    G --> H[\"插入8,2\"]\n    H --> I[\"2 5\"]\n    H --> J[\"8 9 13\"]\n    I --> K[\"6\"]\n    J --> L[\"6 9\"]\n    K --> M[\"2 5\"]\n    K --> N[\"8 9 12 13\"]\n    L --> O[\"2 5\"]\n    L --> P[\"8 12 13\"]\n    M --> Q[\"分裂\"]\n    N --> Q\n    O --> R[\"插入15\"]\n    P --> R\n    Q --> S[\"6 9\"]\n    R --> T[\"2 5\"]\n    R --> U[\"8 12 13 15\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_22",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2021 统考真题】在一棵高度为 3 的 3 阶 B 树中，根为第 1 层，若第 2 层中有 4 个关键字，则该树的结点数最多是（）。",
      "options": {
        "A": "11",
        "B": "10",
        "C": "9",
        "D": "8"
      },
      "answer": [
        "A"
      ],
      "explanation": "在阶为 3 的 B 树中，每个结点至多含有 2 个关键字（至少 1 个），至多有 3 棵子树。本题规定第二层有 4 个关键字，欲使 B 树的结点数达到最多，则这 4 个关键字包含在 3 个结点中，B 树树形如下图所示，其中 A, B, C, …, M 表示关键字，最多有 11 个结点。\n\n![](images/1dd32a299cbcd7aae44096f01b50334cd467762bc7081e57de25a0851ce8fe30.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"A\"] --> B[\"B\"]\n    A --> C[\"C\"]\n    A --> D[\"D\"]\n    B --> C\n    B --> E[\"E\"]\n    B --> F[\"F\"]\n    C --> G[\"G\"]\n    C --> H[\"H\"]\n    C --> I[\"I\"]\n    E --> J[\"J\"]\n    E --> K[\"K\"]\n    F --> L[\"L\"]\n    F --> M[\"M\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_23",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2022 统考真题】在下图所示的 5 阶 B 树 T 中，删除关键字 260 之后需要进行必要的调整，得到新的 B 树 $T_{1}$ 。下列选项中，不可能是 $T_{1}$ 根结点中关键字序列的是（）。 ![](images/65608418f110f0d71be8f2a8308b6270ba870545bc1108a06b130398bc9e883f.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"60\"] --> B[\"30\"] A --> C[\"50\"] D[\"90\"] --> E[\"70\"] D --> F[\"80\"] D --> G[\"85\"] H[\"260\"] --> I[\"100\"] H --> J[\"110\"] K[\"350\"] --> L[\"280\"] K --> M[\"300\"] N[\"400\"] --> O[\"500\"] ``` </details>",
      "options": {
        "A": "60, 90, 280",
        "B": "60, 90, 350",
        "C": "60, 85, 110, 350",
        "D": "60, 90, 110, 350"
      },
      "answer": [
        "D"
      ],
      "explanation": "在 5 阶 B 树中，除根结点外的非叶结点的关键字数 k 需要满足 $2 \\leqslant k \\leqslant 4$ 。当被删关键字 x 不在终端结点（最底层非叶结点）时，可以用 x 的前驱（或后继）关键字 y 来替代 x，然后在相应结点中删除 y 。情况①：删除 260，将其前驱 110 放入 260 处，删除 110 后的结点 <100 > 不满足 5 阶 B 树定义，从左兄弟中借 85，将 85 放入根中，将根中的 90 移入结点 <100 > 变为 <90, 100 > 。情况②：删除 260，将其后继 280 放入 260 处，结点 <300 > 不满足 5 阶 B 树定义且左右兄弟都不够借，结点 <300 > 可以和左兄弟 <100, 110 > 以及关键字 280 合并成一个新的结点 <100, 110, 280, 300 > 。情况③：在情况②中，结点 <300 > 也可以和右兄弟 <400, 500 > 以及关键字 350 合并成一个新的结点 <300, 350, 400, 500 > 。综上， $T_{1}$ 根结点中的关键字序列可能是 <60, 85, 110, 350 > 或 <60, 90, 350 > 或 <60, 90, 280 > ，仅选项 D 不可能。\n\n快速解法：假如选项 D 的 60, 90, 110, 350 作为根结点，则在 90 和 110 之间只有 100 这一个数据，显然不符合 5 阶 B 树的定义，因此选项 D 不可能。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_24",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2023 统考真题】下列关于非空 B 树的叙述中，正确的是（）。 I. 插入操作可能增加树的高度 II. 删除操作一定会导致叶结点的变化 III. 查找某关键字总是要查找到叶结点 IV. 插入的新关键字最终位于叶结点中",
      "options": {
        "A": "仅 I",
        "B": "仅 I、II",
        "C": "仅 III、IV",
        "D": "仅 I、II、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "B 树的插入操作可能导致叶结点分裂，叶结点分裂可能导致父结点分裂，甚至会传导到根结点，从而导致 B 树高度增 1，说法 I 正确。若被删结点是叶结点，则显然会导致叶结点变化；若被删结点不是叶结点，则要先将被删结点和它的前驱或后继交换，最终转换为删除叶结点，还是导致叶结点变化，说法 II 正确。若在非叶结点中查找到了给定的关键字，则不用向下继续查找，说法 III 错误。插入关键字的初始位置是最底层叶结点，但可能因结点分裂而被转移到父结点中，说法 IV 错误。\n\n# 注意\n\n由本题可知，与大多数教材不同，统考真题中称最底层终端结点为叶结点。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-4-3_25",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2025 统考真题】给定 7 个不同的关键字，能构造的不同 4 阶 B 树的个数最多是（）。",
      "options": {
        "A": "7",
        "B": "8",
        "C": "9",
        "D": "10"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于 4 阶 B 树，每个结点包含 1～3 个关键字（根结点可为 1～3 个，非根结点至少 1 个）。给定 7 个不同关键字，按树高分类讨论：① 当树为 2 层时，若根含 1 个关键字，则其 2 个子结点需要分配 6 个关键字，唯一合法的分配为 (3, 3)，对应 1 种；若根含 2 个关键字，则 3 个子结点分配 5 个关键字，合法分配为 (3, 1, 1) 和 (2, 2, 1)，考虑所有排列共 6 种；若根含 3 个关键字，则 4 个子结点各含 1 个关键字，对应 1 种；合计 8 种。② 当树为 3 层时，仅当根及其两个子结点均含 1 个关键字时，剩余 4 个关键字恰好分配给 4 个叶子结点（各 1 个），满足最小关键字数要求，仅 1 种。综上，共可构造 $8 + 1 = 9$ 种不同的 4 阶 B 树。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_08",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "对包含 $n$ 个元素的散列表进行查找，平均查找长度（）。",
      "options": {
        "A": "为 $O(\\log_{2}n)$",
        "B": "为 $O(1)$",
        "C": "不直接依赖于 $n$",
        "D": "直接依赖于表长 $m$"
      },
      "answer": [
        "C"
      ],
      "explanation": "散列表的平均查找长度与装填因子 $\\alpha$ 直接相关，表的查找效率不直接依赖于表中已有表项个数 $n$ 或表长 $m$ 。若表中存放的记录全是某个地址的同义词，则平均查找长度为 $O(n)$ 而非 $O(1)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_09",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "采用开放定址法解决冲突的散列查找中，发生聚集的原因主要是（）。",
      "options": {
        "A": "数据元素过多",
        "C": "散列函数选择不当",
        "B": "负载因子过大",
        "D": "解决冲突的方法选择不当"
      },
      "answer": [
        "D"
      ],
      "explanation": "聚集是因选取不当的处理冲突的方法，而导致不同关键字的元素对同一散列地址进行争夺的现象。用线性探查法时，容易引发聚集现象。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_10",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "当用线性探测再散列法解决冲突时，计算出的一系列“下一个空位”的要求是（）。",
      "options": {
        "A": "必须大于或等于原散列地址",
        "B": "必须小于或等于原散列地址",
        "C": "可以大于或小于但不等于原散列地址",
        "D": "对地址在何处没有限制"
      },
      "answer": [
        "C"
      ],
      "explanation": "“下一个空位”可以大于或小于但不等于原散列地址，等于原散列地址是没有意义的。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_11",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "一组记录的关键字为 $\\{19, 14, 23, 1, 68, 20, 84, 27, 55, 11, 10, 79\\}$ ，用链地址法构造散列表，散列函数为 $H(\\mathrm{key}) = \\mathrm{key} \\mod 13$ ，散列地址为 1 的链中有（）个记录。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "D"
      ],
      "explanation": "由散列函数计算可知，14, 1, 27, 79 散列后的地址都是 1，所以有 4 个记录。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_12",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "multiple_choice",
      "question": "在采用链地址法处理冲突所构成的散列表上查找某一关键字，则在查找成功的情况下，所探测的这些位置上的关键字值（）；若采用线性探测法，则（）。",
      "options": {
        "A": "一定都是同义词",
        "B": "不一定都是同义词",
        "C": "都相同",
        "D": "一定都不是同义词"
      },
      "answer": [
        "A",
        "B"
      ],
      "explanation": "因为在链地址法中，映射到同一地址的关键字都会链到与此地址相对应的链表上，所以探测过程一定是在此链表上进行的，从而这些位置上的关键字均为同义词；但在线性探测法中出现两个同义关键字时，会把该关键字对应地址的下一个地址也占用掉，两个地址分别记为 Addr、Addr + 1，查找一个满足 $H(\\text{key}) = \\text{Addr} + 1$ 的关键字 key 时，显然首次探测到的不是 key 的同义词。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_14",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "设散列表长 $m = 14$ ，散列函数为 $H(\\text{key}) = \\text{key}\\% 11$ ，表中仅有 4 个结点 $H(15) = 4$ ， $H(38) = 5$ ， $H(61) = 6$ ， $H(84) = 7$ ，若采用线性探测法处理冲突，则关键字为 49 的结点地址是（）。",
      "options": {
        "A": "8",
        "B": "3",
        "C": "5",
        "D": "9"
      },
      "answer": [
        "A"
      ],
      "explanation": "线性探测法的公式为 $H_{i}=(H(\\text{key})+d_{i})\\%m$ ，其中 $d_{i}=1,2,\\cdots,m-1$ 。 $H(49)=49\\%11=5$ ，有冲突； $H_{1}=(H(49)+1)\\%14=6$ ，有冲突； $H_{2}=(H(49)+2)\\%14=7$ ，有冲突； $H_{3}=(H(49)+3)\\%14=8$ ，无冲突。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_15",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "现有长度为 17、初始为空的散列表 HT，散列函数 $H(\\text{key}) = \\text{key}\\% 17$ ，用线性探查法解决冲突。将关键字序列 26, 25, 72, 38, 8, 18, 59 依次插入 HT 后，查找 59 需探查（）次。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "C"
      ],
      "explanation": "插入过程如下： $H(26)=9$ ，不冲突； $H(25)=8$ ，不冲突； $H(72)=4$ ，不冲突； $H(38)=4$ ，冲突，冲突处理后的地址为5； $H(8)=8$ ，冲突，冲突处理后的地址为10； $H(18)=1$ ，不冲突； $H(59)=8$ ，冲突，冲突处理后的地址为11。因此，在表中查找59需要探查4次。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_16",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "现有长度为 17、初始为空的散列表 HT，散列函数 $H(\\text{key}) = \\text{key}\\% 17$ ，用平方探测法解决冲突： $H_i(\\text{key}) = (H(\\text{key}) \\pm i^2)\\% 17$ 。将关键字序列 6, 22, 7, 26, 9, 23 依次插入 HT 后，则关键字 23 存放在散列表中的位置是（）。",
      "options": {
        "A": "0",
        "B": "2",
        "C": "6",
        "D": "15"
      },
      "answer": [
        "B"
      ],
      "explanation": "插入过程如下： $6\\% 17 = 6$ ； $22\\% 17 = 5$ ； $7\\% 17 = 7$ ； $26\\% 17 = 9$ ； $9\\% 17 = 9$ ，冲突，平方探测法探测10（无冲突）； $23\\% 17 = 6$ ，冲突，平方探测法探测7（冲突），探测5（冲突），探测10（冲突），探测2（无冲突）。因此，关键字23应放在位置2。构造的散列表如下表所示。\n\n<table><tr><td>地址</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td></tr><tr><td>元素</td><td></td><td></td><td>23</td><td></td><td></td><td>22</td><td>6</td><td>7</td><td></td><td>26</td><td>9</td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_17",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "将 10 个元素散列到 100000 个单元的散列表中，则（）产生冲突。",
      "options": {
        "A": "一定会",
        "B": "一定不会",
        "C": "仍可能会",
        "D": "不确定"
      },
      "answer": [
        "C"
      ],
      "explanation": "由于散列函数的选取，仍然有可能产生地址冲突，冲突不能绝对地避免。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_18",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2011 统考真题】为提高散列表的查找效率，可以采取的正确措施是（）。 I. 增大装填（载）因子 II. 设计冲突（碰撞）少的散列函数 III. 处理冲突（碰撞）时避免产生聚集（堆积）现象",
      "options": {
        "A": "仅 I",
        "B": "仅 II",
        "C": "仅 I、II",
        "D": "仅 II、III"
      },
      "answer": [
        "D"
      ],
      "explanation": "散列表的查找效率取决于散列函数、处理冲突的方法和装填因子。显然，冲突的产生概率与装填因子（表中记录数与表长之比）的大小成正比，说法 I 与题意相反。说法 II 显然正确。采用合适的冲突处理方法可避免聚集现象，也将提高查找效率，说法 III 正确。例如，用链地址法处理冲突时不存在聚集现象，用线性探测法处理冲突时易引起聚集现象。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_19",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2014 统考真题】用哈希（散列）方法处理冲突（碰撞）时可能出现堆积（聚集）现象，下列选项中，会受堆积现象直接影响的是（）。",
      "options": {
        "A": "存储效率",
        "B": "散列函数",
        "C": "装填（装载）因子",
        "D": "平均查找长度"
      },
      "answer": [
        "D"
      ],
      "explanation": "堆积现象因冲突而产生，它对存储效率、散列函数和装填因子均不会有影响，而平均查找长度会因为堆积现象而增大。散列函数是指将关键字映射到哈希地址的函数。存储效率和装填（装载）因子的定义相同，指哈希表中已存储的元素个数与哈希表长度的比值。这些因素都与堆积现象无关，而只与哈希表的结构和设计有关。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_20",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2018 统考真题】现有长度为 7、初始为空的散列表 HT，散列函数 $H(k) = k\\% 7$ ，用线性探测再散列法解决冲突。将关键字 22, 43, 15 依次插入 HT 后，查找成功的平均查找长度是（）。",
      "options": {
        "A": "1.5",
        "B": "1.6",
        "C": "2",
        "D": "3"
      },
      "answer": [
        "C"
      ],
      "explanation": "根据题意，得到的 HT 如下：\n\n<table><tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr><tr><td></td><td>22</td><td>43</td><td>15</td><td></td><td></td><td></td></tr></table>\n\n$$\n\\mathrm{ASL} _ {\\text {成功}} = (1 + 2 + 3) / 3 = 2 。\n$$",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_21",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2019 统考真题】现有长度为 11 且初始为空的散列表 HT, 散列函数是 $H(\\text{key}) = \\text{key}\\% 7$ , 采用线性探查（线性探测再散列）法解决冲突。将关键字序列 87, 40, 30, 6, 11, 22, 98, 20 依次插入 HT 后，HT 查找失败的平均查找长度是（）。",
      "options": {
        "A": "4",
        "B": "5.25",
        "C": "6",
        "D": "6.29"
      },
      "answer": [
        "C"
      ],
      "explanation": "采用线性探查法计算每个关键字的存放情况如下表所示。\n\n<table><tr><td>散列地址</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td></tr><tr><td>关键字</td><td>98</td><td>22</td><td>30</td><td>87</td><td>11</td><td>40</td><td>6</td><td>20</td><td></td><td></td><td></td></tr></table>\n\n由于 $H(\\text{key}) = 0 \\sim 6$ ，查找失败时可能对应的地址有 7 个，对于计算出地址为 0 的关键字 key0，只有比较完 0～8 号地址后才能确定该关键字不在表中，比较次数为 9；对于计算出地址为 1 的关键字 key1，只有比较完 1～8 号地址后才能确定该关键字不在表中，比较次数为 8；以此类推。需要特别注意的是，散列函数不可能计算出地址 7，因此有\n\n$$\n\\mathrm{ASL} _ {\\text { 失败 }} = (9 + 8 + 7 + 6 + 5 + 4 + 3) / 7 = 6\n$$",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_22",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2022统考真题】下列因素中，影响散列（哈希）方法平均查找长度的是（）。 I. 装填因子 II. 散列函数 III. 冲突解决策略",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III",
        "C": "仅 II、III",
        "D": "I、II、III"
      },
      "answer": [
        "D"
      ],
      "explanation": "原题再现。填装因子越大，说明哈希表中存储的元素越满，发生冲突的可能性就越高，导致平均查找长度越大。散列函数、冲突解决策略也会影响发生冲突的可能性。说法 I、II、III 都正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_23",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2023 统考真题】现有长度为 5、初始为空的散列表 HT，散列函数 $H(k) = (k + 4)\\% 5$ ，用线性探查再散列法解决冲突。若将关键字序列 2022,12,25 依次插入 HT，然后删除关键字 25，则 HT 中查找失败的平均查找长度为（）。",
      "options": {
        "A": "1",
        "B": "1.6",
        "C": "1.8",
        "D": "2.2"
      },
      "answer": [
        "C"
      ],
      "explanation": "当采用开放定址法时，不能随便物理删除表中的已有元素，因为若删除元素，则可能截断其他具有相同散列地址的元素的查找地址。因此，当要删除一个元素时，可给它做一个删除标记。依次将2022,12,25插入散列表，然后删除25，得到的散列表如下：\n\n<table><tr><td>地址</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><td>关键字</td><td></td><td>2022</td><td>12</td><td></td><td>25(删除)</td></tr><tr><td>查找失败次数</td><td>1</td><td>3</td><td>2</td><td>1</td><td>2</td></tr></table>\n\n当查找位置是删除标记时，应继续往后查找。\n\n查找失败的平均查找长度为 $(1+3+2+1+2)/5=1.8$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_7-5-5_24",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "查找",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2025统考真题】下列关于散列方法处理冲突的叙述中，正确的是（）。",
      "options": {
        "A": "只要散列表不满，线性探查再散列一定能找到一个空闲位置",
        "B": "只要散列表不满，二次探查再散列一定能找到一个空闲位置",
        "C": "线性探查再散列处理的冲突，一定是发生在同义词之间的冲突",
        "D": "二次探查再散列处理的冲突，一定是发生在非同义词之间的冲突"
      },
      "answer": [
        "A"
      ],
      "explanation": "线性探查法按顺序依次探查下一个地址，其探查序列覆盖整个散列表，因此只要表中尚有空闲位置，该方法就一定能找到一个空位，选项 A 正确。二次探查法的探查序列仅访问部分地址（取决于表长是否为质数等条件），即使表未满，也可能无法遍历所有位置，从而找不到空位，选项 B 错误。线性探查处理的冲突不仅限于同义词（散列地址相同的关键词），非同义词因探查路径重叠也可能发生冲突，故选项 C 错误；同理，二次探查处理的冲突既可能来自同义词，又可能来自非同义词，选项 D 中 “一定发生在非同义词之间” 的说法同样错误。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch07-第7章-查找.md"
    },
    {
      "id": "数据结构_8-1-2_02",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.1.2",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "排序算法的稳定性是指（）。",
      "options": {
        "A": "经过排序后，能使关键字相同的元素保持原顺序中的相对位置不变",
        "B": "经过排序后，能使关键字相同的元素保持原顺序中的绝对位置不变",
        "C": "排序算法的性能与被排序元素个数关系不大",
        "D": "排序算法的性能与被排序元素的个数关系密切"
      },
      "answer": [
        "A"
      ],
      "explanation": "注意，这里的绝对位置是指若在排序前元素 R 在位置 i，则绝对位置就是 i，即排序后 R 的位置不发生变化，显然选项 B 是不对的。选项 C、D 与题目要求无关。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-1-2_03",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.1.2",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列关于排序的叙述中，正确的是（）。",
      "options": {
        "A": "稳定的排序算法优于不稳定的排序算法",
        "B": "对同一线性表使用不同的排序算法进行排序，得到的排序结果可能不同",
        "C": "排序算法都是在顺序表上实现的，在链表上无法实现排序算法",
        "D": "在顺序表上实现的排序算法在链表上也可以实现"
      },
      "answer": [
        "B"
      ],
      "explanation": "算法的稳定性与算法优劣无关，选项 A 排除。使用链表也可以进行排序，只是有些排序算法不再适用，因为这时定位元素只能顺序逐链查找，如折半插入排序。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_03",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "multiple_choice",
      "question": "对有 $n$ 个元素的顺序表采用直接插入排序算法进行排序，在最坏情况下所需的比较次数是（），在最好情况下所需的比较次数是（）。",
      "options": {
        "A": "$n - 1$",
        "B": "$n + 1$",
        "C": "n/2",
        "D": "$n(n-1)/2$"
      },
      "answer": [
        "D",
        "A"
      ],
      "explanation": "待排序表为反序时，直接插入排序需要进行 $n(n-1)/2$ 次比较（从前往后依次需要比较 $1,2,\\cdots,n-1$ 次）；待排序表为正序时，只需进行 n-1 次比较。注意本题不考虑与哨兵的比较。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_04",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "数据序列{8, 10, 13, 4, 6, 7, 22, 2, 3}只能是（）两趟排序后的结果。",
      "options": {
        "A": "简单选择排序",
        "B": "冒泡排序",
        "C": "直接插入排序",
        "D": "堆排序"
      },
      "answer": [
        "C"
      ],
      "explanation": "冒泡排序和选择排序经过两趟排序后，应该有两个最大（或最小）元素放在其最终位置；插入排序经过两趟排序后，前三个元素应该是局部有序的。只可能是插入排序。\n\n# 注意\n\n在排序过程中，每趟都能确定一个元素在其最终位置的有冒泡排序、简单选择排序、堆排序、快速排序，其中前三者能形成全局有序的子序列，后者能确定枢轴元素的最终位置。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_05",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "用直接插入排序算法对下列 4 个表进行（从小到大）排序，比较次数最少的是（）。",
      "options": {
        "A": "94, 32, 40, 90, 80, 46, 21, 69",
        "B": "21, 32, 46, 40, 80, 69, 90, 94",
        "C": "32, 40, 21, 46, 69, 94, 90, 80",
        "D": "90, 69, 80, 46, 21, 32, 94, 40"
      },
      "answer": [
        "B"
      ],
      "explanation": "越接近正序的序列，直接插入排序的比较次数就越少。选项 B 和 C 是比较接近正序的，然后分别判断两个序列的比较次数，以选项 B 为例：第一趟，插入 32，比较 1 次；第二趟，插入 46，比较 1 次；第三趟，插入 40，因为 40 比 46 小但比 32 大，所以比较 2 次；第四趟，插入 80，比较 1 次；第五趟，插入 69，比较 2 次；以此类推，共比较 9 次。同理求出选项 C 的比较次数为 11 次。所以选择选项 B。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_06",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在下列算法中，（）算法可能出现下列情况：在最后一趟开始之前，所有元素都不在最终位置上。",
      "options": {
        "A": "堆排序",
        "B": "冒泡排序",
        "C": "直接插入排序",
        "D": "快速排序"
      },
      "answer": [
        "C"
      ],
      "explanation": "在直接插入排序中，若待排序列中的最后一个元素应插入表中的第一个位置，则前面的有序子序列中的所有元素都不在最终位置上。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_07",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "希尔排序属于（）。",
      "options": {
        "A": "插入排序",
        "B": "交换排序",
        "C": "选择排序",
        "D": "归并排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "希尔排序是对直接插入排序算法改进后提出来的，本质上仍属于插入排序的范畴。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_09",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "若序列 $\\{15, 9, 7, 8, 20, -1, 4\\}$ 经一趟排序后变成 $\\{9, 15, 7, 8, 20, -1, 4\\}$ ，则采用的是（）方法。",
      "options": {
        "A": "选择排序",
        "B": "快速排序",
        "C": "直接插入排序",
        "D": "冒泡排序"
      },
      "answer": [
        "C"
      ],
      "explanation": "前两个元素已经局部有序，很明显一趟直接插入排序算法有效。再排除其他算法即可。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_10",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "对序列 $\\{98, 36, -9, 0, 47, 23, 1, 8, 10, 7\\}$ 采用希尔排序，下列序列（）是增量为4的一趟排序结果。",
      "options": {
        "A": "$\\{10,7,-9,0,47,23,1,8,98,36\\}$",
        "B": "$\\{-9,0,36,98,1,8,23,47,7,10\\}$",
        "C": "$\\{36, 98, -9, 0, 23, 47, 1, 8, 7, 10\\}$",
        "D": "以上都不对"
      },
      "answer": [
        "A"
      ],
      "explanation": "增量为 4 意味着所有相距为 4 的记录构成一组，然后在组内进行直接插入排序，经观察，只有选项 A 满足要求。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_11",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "对序列 $\\{\\mathrm{E},\\mathrm{A},\\mathrm{S},\\mathrm{Y},\\mathrm{Q},\\mathrm{U},\\mathrm{E},\\mathrm{S},\\mathrm{T},\\mathrm{I},\\mathrm{O},\\mathrm{N}\\}$ 按照字典顺序排序，采用增量 $d = 6,3,1$ 的希尔排序算法。则前两趟排序后，关键字的总比较次数为（）。",
      "options": {
        "A": "15",
        "B": "17",
        "C": "16",
        "D": "18"
      },
      "answer": [
        "B"
      ],
      "explanation": "第一趟：EE 为一组，比较；AS 为一组，比较；ST 为一组，比较；YI 为一组，比较后交换；QO 为一组，比较后交换；UN 为一组，比较后交换，结果为 EASIONESTYQU。第二趟：EIEY 为一组，用直接插入排序需要依次比较 I 和 E、E 和 I、E 和 E、Y 和 I；AOSQ 为一组，依次比较 O 和 A、S和 O、Q 和 S、Q 和 O；SNTU 为一组，依次比较 N 和 S、T 和 S、U 和 T。第一趟比较次数为 6，第二趟比较次数为 11，总比较次数为 17。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_12",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "已知输入序列 $\\{13, 24, 7, 1, 8, 9, 11, 56, 34, 51, 2, 77, 5\\}$ ，增量序列 $d = 5, 3, 1$ ，采用希尔排序算法进行排序，则两趟排序后的结果为（）。",
      "options": {
        "A": "1, 7, 8, 9, 13, 24, 11, 34, 51, 2, 5, 56, 77",
        "B": "1, 7, 5, 2, 8, 9, 24, 11, 34, 51, 13, 77, 56",
        "C": "2, 11, 5, 1, 8, 9, 24, 7, 34, 51, 13, 77, 56",
        "D": "2, 5, 11, 1, 8, 9, 7, 24, 34, 13, 51, 77, 56"
      },
      "answer": [
        "B"
      ],
      "explanation": "第一趟增量 d=5，第一趟排序后，结果为 2, 11, 5, 1, 8, 9, 24, 7, 34, 51, 13, 77, 56。第二趟增量 d=3，第二趟排序后，结果为 1, 7, 5, 2, 8, 9, 24, 11, 34, 51, 13, 77, 56。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_13",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "折半插入排序算法的时间复杂度为（）。",
      "options": {
        "A": "$O(n)$",
        "B": "$O(n\\log_{2}n)$",
        "C": "$O(n^{2})$",
        "D": "$O(n^{3})$"
      },
      "answer": [
        "C"
      ],
      "explanation": "虽然折半插入排序是对直接插入排序的改进，但它改进的只是比较的次数，而移动次数未发生变化，时间复杂度仍为 $O(n^{2})$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_14",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "有些排序算法在每趟排序过程中，都会有一个元素被放置到其最终位置上，（）算法不一定会出现此种情况。",
      "options": {
        "A": "希尔排序",
        "B": "堆排序",
        "C": "冒泡排序",
        "D": "快速排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "因为希尔排序是基于插入排序算法提出的，所以它不一定在每趟排序过程后将某一元素放置到最终位置上。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_15",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "以下排序算法中，不稳定的是（）。",
      "options": {
        "A": "冒泡排序",
        "B": "直接插入排序",
        "C": "希尔排序",
        "D": "归并排序"
      },
      "answer": [
        "C"
      ],
      "explanation": "希尔排序是一种复杂的插入排序算法，它是一种不稳定的排序算法。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_16",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "以下排序算法中，稳定的是（）。",
      "options": {
        "A": "快速排序",
        "B": "堆排序",
        "C": "直接插入排序",
        "D": "简单选择排序"
      },
      "answer": [
        "C"
      ],
      "explanation": "基于插入、交换、选择的三类排序算法中，通常简单方法是稳定的（直接插入、折半插入、冒泡），但有一个例外就是简单选择，复杂方法都是不稳定的（希尔排序、快速排序、堆排序）。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_17",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2012统考真题】对同一待排序序列分别进行折半插入排序和直接插入排序，两者之间可能的不同之处是（）。",
      "options": {
        "A": "排序的总趟数",
        "B": "元素的移动次数",
        "C": "使用辅助空间的数量",
        "D": "元素之间的比较次数"
      },
      "answer": [
        "D"
      ],
      "explanation": "折半插入排序与直接插入排序都将待插入元素插入前面的有序子表，区别是：确定当前记录在前面有序子表中的位置时，直接插入排序采用顺序查找法，而折半插入排序采用折半查找法。排序的总趟数取决于元素个数 n，两者都是 n-1 趟。元素的移动次数都取决于初始序列，两者相同。使用辅助空间的数量也都是 $O(1)$ 。折半插入排序的比较次数与序列初态无关，时间复杂度为 $O(n\\log_{2}n)$ ；而直接插入排序的比较次数与序列初态有关，时间复杂度为 $O(n)\\sim O(n^{2})$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_18",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2014 统考真题】用希尔排序算法对一个数据序列进行排序时，若第一趟排序结果为 9, 1, 4, 13, 7, 8, 20, 23, 15，则该趟排序采用的增量（间隔）可能是（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "B"
      ],
      "explanation": "首先，第二个元素为1，是整个序列中的最小元素，可知该希尔排序为从小到大排序。然后考虑增量问题，若增量为2，则第 $1+2$ 个元素4明显比第1个元素9要小，排除选项A。若增量为3，则第 $i,i+3,i+6(i=1,2,3)$ 个元素都为有序序列，符合希尔排序的特点。若增量为4，则第1个元素9比第 $1+4$ 个元素7要大，排除选项C。若增量为5，则第1个元素9比第 $1+5$ 个元素8要大，排除选项D。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_19",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2015 统考真题】希尔排序的组内排序采用的是（）。",
      "options": {
        "A": "直接插入排序",
        "B": "折半插入排序",
        "C": "快速排序",
        "D": "归并排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "希尔排序的思想是: 先将待排元素序列分割成若干子序列(由相隔某个“增量”的元素组成), 分别进行直接插入排序, 然后依次缩减增量再进行排序, 待整个序列中的元素基本有序(增量足够小)时, 再对全体元素进行一次直接插入排序。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-2-4_20",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2018 统考真题】对初始数据序列(8,3,9,11,2,1,4,7,5,10,6)进行希尔排序。若第一趟排序结果为(1,3,7,5,2,6,4,9,11,10,8)，第二趟排序结果为(1,2,6,4,3,7,5,8,11,10,9)，则两趟排序采用的增量（间隔）依次是（）。",
      "options": {
        "A": "3,1",
        "B": "3,2",
        "C": "5,2",
        "D": "5,3"
      },
      "answer": [
        "D"
      ],
      "explanation": "如下图所示。\n\n初始序列：8，3，9，11，2，1，4，7，5，10，6\n\n![](images/b44e9db49c97fcc8a100ebb5336663ed413c4bfe27ba919c7e8bf9b6a4f65476.jpg)\n\n<details>\n<summary>text_image</summary>\n\n第一趟: 1, 3, 7, 5, 2, 6, 4, 9, 11, 10, 8\n第二趟: 1, 2, 6, 4, 3, 7, 5, 8, 11, 10, 9\n</details>\n\n第一趟分组：8,1,6；3,4；9,7；11,5；2,10；间隔为5，排序后组内递增。\n\n第二趟分组：1,5,4,10；3,2,9,8；7,6,11；间隔为3，排序后组内递增。\n\n因此，选择选项 D。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_05",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "快速排序算法在（）情况下最不利于发挥其长处。",
      "options": {
        "A": "要排序的数据量太大",
        "B": "要排序的数据中含有多个相同值",
        "C": "要排序的数据个数为奇数",
        "D": "要排序的数据已基本有序"
      },
      "answer": [
        "D"
      ],
      "explanation": "当待排序数据为基本有序时，每次选取第 n 个元素为基准，会导致划分区间分配不均匀，不利于发挥快速排序算法的优势。相反，当待排序数据分布较为随机时，基准元素能将序列划分为两个长度大致相等的序列，这时才能发挥快速排序的优势。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_06",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "就平均性能而言，目前最好的内部排序算法是（）。",
      "options": {
        "A": "冒泡排序",
        "B": "直接插入排序",
        "C": "希尔排序",
        "D": "快速排序"
      },
      "answer": [
        "D"
      ],
      "explanation": "这里问的是平均性能，选项 A、B 的平均性能都会达到 $O(n^{2})$ ，而希尔排序虽然大大降低了直接插入排序的时间复杂度，但其平均性能不如快速排序。另外，虽然众多排序算法的平均时间复杂度也是 $O(n\\log_{2}n)$ ，但快速排序算法的常数因子是最小的。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_07",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "数据序列 $F=\\{2,1,4,9,8,10,6,20\\}$ 只能是下列排序算法中的（）两趟排序后的结果。",
      "options": {
        "A": "快速排序",
        "B": "冒泡排序",
        "C": "选择排序",
        "D": "插入排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "若为插入排序，则前三个元素应该是有序的，显然不对。而冒泡排序和选择排序经过两趟排序后应该有两个元素处于最终位置（最左/右端），无论是按从小到大还是从大到小排序，数据序列中都没有两个满足这样的条件的元素，因此只可能选择选项 A。\n\n【另解】先写出排好序的序列，并和题中的序列进行对比。\n\n题中序列：2 1 4 9 8 10 6 20\n\n已排好序序列：1 2 4 6 8 9 10 20\n\n在已排好序的序列中，与题中序列相同的元素有 4、8 和 20，最左和最右两个元素与题中的序列不同，所以不可能是冒泡排序、选择排序或插入排序。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_09",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "双向冒泡排序是指对一个序列在正反两个方向交替进行扫描，第一趟把最大值放在序列的最右端，第二趟把最小值放在序列的最左端，之后在缩小的范围内进行同样的扫描，放在次右端、次左端，直至序列有序。对数组{4,7,8,3,5,6,10,9,1,2}进行双向冒泡排序，则排序趟数是（）。 （第一趟从左往右开始，从左往右或从右往左都称为一趟。）",
      "options": {
        "A": "7",
        "B": "6",
        "C": "8",
        "D": "9"
      },
      "answer": [
        "B"
      ],
      "explanation": "第一趟从左往右的排序结果为4,7,3,5,6,8,9,1,2,10；第二趟从右往左的排序结果为1,4,7,3,5,6,8,9,2,10；第三趟从左往右的排序结果为1,4,3,5,6,7,8,2,9,10；第四趟从右往左的排序结果为1,2,4,3,5,6,7,8,9,10；第五趟从左往右的排序结果为1,2,3,4,5,6,7,8,9,10，此时序列已有序，但仍需进行一趟无交换的排序才能确定序列已有序，因此共需6趟排序。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_10",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "multiple_choice",
      "question": "对下列关键字序列用快速排序进行排序时，每次选取的基准元素都为待处理序列的第一个元素，速度最快的情形是（），速度最慢的情形是（）。",
      "options": {
        "A": "$\\{21, 25, 5, 17, 9, 23, 30\\}$",
        "B": "$\\{25, 23, 30, 17, 21, 5, 9\\}$",
        "C": "$\\{21, 9, 17, 30, 25, 23, 5\\}$",
        "D": "{5, 9, 17, 21, 23, 25, 30}"
      },
      "answer": [
        "A",
        "D"
      ],
      "explanation": "当每趟的枢轴值都把表等分为长度相近的两个子表时，速度是最快的；当表本身已经有序或逆序时，速度最慢。选项D中的序列已按关键字排好序，因此它是最慢的，而选项A中第一趟枢轴值21将表划分为两个子表{9, 17, 5}和{25, 23, 30}，而后对两个子表划分时，枢轴值再次将它们等分，所以该序列是快速排序最优的情况，速度最快。针对其他选项，可以进行类似的分析。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_11",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "对下列 4 个序列，以第一个关键字为基准用快速排序算法进行排序，在第一趟过程中移动记录次数最多的是（）。",
      "options": {
        "A": "92, 96, 88, 42, 30, 35, 110, 100",
        "B": "92, 96, 100, 110, 42, 35, 30, 88",
        "C": "100, 96, 92, 35, 30, 110, 88, 42",
        "D": "42, 30, 35, 92, 100, 96, 88, 110"
      },
      "answer": [
        "B"
      ],
      "explanation": "对各序列分别执行一趟快速排序，可做如下分析（以选项 A 为例）：枢轴值为 92，因此 35 移动到第一个位置，96 移动到第六个位置，30 移动到第二个位置，再将枢轴值移动到 30 所在的单元，即第五个位置，所以选项 A 中序列移动的次数为 4。同样，可以分析出选项 B 中序列的移动次数为 8，选项 C 中序列的移动次数为 4，选项 D 中序列的移动次数为 2。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_12",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "下列序列中，（）可能是执行第一趟快速排序后所得到的序列（按从大到小排序和从小到大排序来分别讨论）。 I. $\\{68, 11, 18, 69, 23, 93, 73\\}$ II. $\\{68, 11, 69, 23, 18, 93, 73\\}$ III. $\\{93, 73, 68, 11, 69, 23, 18\\}$ IV. {68, 11, 69, 23, 18, 73, 93}",
      "options": {
        "A": "I、IV",
        "B": "II、III",
        "C": "III、IV",
        "D": "只有 IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "显然，若按从小到大排序，则最终有序的序列是 $\\{11, 18, 23, 68, 69, 73, 93\\}$ ；若按从大到小排序，则最终有序的序列是 $\\{93, 73, 69, 68, 23, 18, 11\\}$ 。对比可知说法 I、II 中没有处于最终位置的元素，所以说法 I、II 都不可能。说法 III 中 73 和 93 处于从大到小排序后的最终位置，而且 73 将序列分割成大于 73 和小于 73 的两部分，所以说法 III 是有可能的。说法 IV 中 73 和 93 处于从小到大排列后的最终位置，73 也将序列分割成大于 73 和小于 73 的两部分。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_13",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "multiple_choice",
      "question": "对 $n$ 个关键字进行快速排序，最大递归深度为（），最小递归深度约为（）。",
      "options": {
        "A": "1",
        "B": "n",
        "C": "$\\log_2n$",
        "D": "$n\\log_{2}n$"
      },
      "answer": [
        "B",
        "C"
      ],
      "explanation": "快速排序过程构成一个递归树，递归深度即递归树的高度。枢轴值每次都将子表等分时，递归树的高为 $\\log_{2}n$ ；枢轴值每次都是子表的最大值或最小值时，递归树退化为单链表，树高为 n。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_14",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "对 8 个元素的序列进行快速排序，在最好情况下的关键字比较次数是（）。",
      "options": {
        "A": "7",
        "B": "8",
        "C": "12",
        "D": "13"
      },
      "answer": [
        "D"
      ],
      "explanation": "快速排序的最好情况是每次划分将待排序列划分为等长的两部分。因此，第一趟将第1个元素与后面的7个元素进行比较，将原序列划分为长度为3和4的两个子表，比较7次；第二趟对两个子表进行划分，将长度为3的子表划分为长度为1的两个子表（不用继续划分），比较2次，将长度为4的子表划分为长度为1和2的两个子表，比较3次；第三趟将长度为2的子表划分为长度为1的子表，比较1次。至此，排序结束，共进行的比较次数是 $7+2+3+1=13$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_15",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2010 统考真题】采用递归方式对顺序表进行快速排序。下列关于递归次数的叙述中，正确的是（）。",
      "options": {
        "A": "递归次数与初始数据的排列次序无关",
        "B": "每次划分后，先处理较长的分区可以减少递归次数",
        "C": "每次划分后，先处理较短的分区可以减少递归次数",
        "D": "递归次数与每次划分后得到的分区的处理顺序无关"
      },
      "answer": [
        "D"
      ],
      "explanation": "快速排序的递归次数与元素的初始排列有关。若每次划分后分区比较平衡，则递归次数少；若划分后分区不平衡，则递归次数多。递归次数与分区处理顺序无关。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_16",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2011 统考真题】为实现快速排序算法，待排序序列宜采用的存储方式是（）。",
      "options": {
        "A": "顺序存储",
        "B": "散列存储",
        "C": "链式存储",
        "D": "索引存储"
      },
      "answer": [
        "A"
      ],
      "explanation": "对于绝大部分内部排序而言，只适用于顺序存储结构。快速排序在排序的过程中，既要从后往前查找，也要从前往后查找，因此宜采用顺序存储。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_17",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2014 统考真题】下列选项中，不可能是快速排序第二趟排序结果的是（）。",
      "options": {
        "A": "2, 3, 5, 4, 6, 7, 9",
        "B": "2, 7, 5, 6, 4, 3, 9",
        "C": "3, 2, 5, 4, 7, 6, 9",
        "D": "4, 2, 3, 5, 7, 6, 9"
      },
      "answer": [
        "C"
      ],
      "explanation": "对 n 个元素进行第一趟快速排序后，会确定一个基准元素，根据这个基准元素在数组中的位置，有两种情况：① 基准元素在数组的首端或尾端，接下来对剩下的 n-1 个元素构成的子序列进行第二趟快速排序，再确定一个基准元素。这样，在两趟排序后就至少能确定两个元素的最终位置，其中至少有一个元素是在数组的首端或尾端。② 基准元素不在数组的首端或尾端，第二趟快速排序对基准元素划分开的两个子序列分别进行一次划分，两个子序列各确定一个基准元素。这样，两趟排序后就至少能确定三个元素的最终位置。基于上述结论，观察题中的四个选项，选项 A 的 2, 3, 6, 7, 9 符合第一种或第二种情况；选项 B 中 2, 9 符合第一种情况；选项 D 中 5, 9 符合第一种情况；最后看选项 C，只有 9 处于最终位置，因此不可能是快速排序第二趟的结果。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_18",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2019 统考真题】排序过程中，对尚未确定最终位置的所有元素进行一遍处理称为一趟。下列序列中，不可能是快速排序第二趟结果的是（）。",
      "options": {
        "A": "5, 2, 16, 12, 28, 60, 32, 72",
        "B": "2, 16, 5, 28, 12, 60, 32, 72",
        "C": "2, 12, 16, 5, 28, 32, 72, 60",
        "D": "5, 2, 12, 28, 16, 32, 72, 60"
      },
      "answer": [
        "D"
      ],
      "explanation": "基于上题中分析得出的结论，观察题中的四个选项，选项 A 的 28, 72 符合第一种情况；选项 B 的 2, 72 符合第一种情况；选项 C 的 2, 28, 32 符合第一种或第二种情况；最后看选项 D，只有 12 和 32 处于最终位置，既不符合第一种情况，又不符合第二种情况。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_19",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2023 统考真题】使用快速排序算法对数据进行升序排序，若经过一次划分后得到的数据序列是 68, 11, 70, 23, 80, 77, 48, 81, 93, 88，则该次划分的枢轴是（）。",
      "options": {
        "A": "11",
        "B": "70",
        "C": "80",
        "D": "81"
      },
      "answer": [
        "D"
      ],
      "explanation": "第一趟划分后得到的序列中只有一个枢轴，因此可将当前序列和最终排好序的序列进行比较，如下表所示。枢轴会出现在两个序列的相同位置，可以看出枢轴只可能是77、81，选项只有81。在当前序列中，77左边有比它大的元素80，因此77不是枢轴；而81左边都是比它小的元素，右边都是比它大的元素，因此81是枢轴。\n\n<table><tr><td>当前序列</td><td>68</td><td>11</td><td>70</td><td>23</td><td>80</td><td>77</td><td>48</td><td>81</td><td>93</td><td>88</td></tr><tr><td>最终序列</td><td>11</td><td>23</td><td>48</td><td>68</td><td>70</td><td>77</td><td>80</td><td>81</td><td>88</td><td>93</td></tr></table>",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-3-3_20",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2024 统考真题】使用快速排序算法对含 $n (n \\geqslant 3)$ 个元素的数组 $M$ 进行排序，若第一趟排序将 $M$ 中除枢轴外的 $n - 1$ 个元素划分为均不为空的 $P$ 和 $Q$ 两块，则下列叙述中，正确的是（）。",
      "options": {
        "A": "P 与 Q 块间有序",
        "B": "$P$ 与 $Q$ 均块内有序",
        "C": "P 和 Q 的元素个数大致相等",
        "D": "$P$ 中和 $Q$ 中均不存在相等的元素"
      },
      "answer": [
        "A"
      ],
      "explanation": "依题意，对数组 M 进行第一趟快速排序后，会将 M 划分为三部分：小于枢轴值的块 P，枢轴元素，大于枢轴值的块 Q。P 和 Q 块内都是无序的，但是 P 块内的数据 $\\leqslant$ 枢轴值，Q 块内的数据 $\\geqslant$ 枢轴值，因此 P 块内的数据 $\\leqslant Q$ 块内的数据，即 P 与 Q 块间有序。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_09",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "对由相同的 $n$ 个整数构成的二叉排序树和小根堆，下列说法中不正确的是（）。",
      "options": {
        "A": "二叉排序树的高度大于或等于小根堆的高度",
        "B": "对二叉排序树进行中序遍历可以得到从小到大的序列",
        "C": "从小根堆的根结点到任意叶结点的路径构成从小到大的序列",
        "D": "对小根堆进行层序遍历可以得到从小到大的序列"
      },
      "answer": [
        "D"
      ],
      "explanation": "堆是顺序存储的完全二叉树, 因此其高度小于或等于结点数相同的二叉排序树, 选项 A 正确。选项 B 显然正确。根据小根堆的定义, 其根结点到任意叶结点的路径构成从小到大的序列, 选项 C 正确。堆的各层结点之间没有大小要求, 因此层序遍历不能保证得到有序序列, 选项 D 错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_10",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "有一组数据(15,9,7,8,20,-1,7,4)，用堆排序的筛选方法建立的初始小根堆为（）。",
      "options": {
        "A": "-1, 4, 8, 9, 20, 7, 15, 7",
        "B": "-1, 7, 15, 7, 4, 8, 20, 9",
        "C": "-1, 4, 7, 8, 20, 15, 7, 9",
        "D": "A、B、C 均不对"
      },
      "answer": [
        "C"
      ],
      "explanation": "从 $\\lfloor n/2\\rfloor \\sim 1$ 依次筛选堆的过程如下图所示，显然选择选项 C。\n\n![](images/29a4504e798b2668f4cb4e4c25cb3b1ff050e924a43ca45e23350c39ca0170a2.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"15\"] --> B[\"9\"]\n    A --> C[\"7\"]\n    B --> D[\"8\"]\n    B --> E[\"20\"]\n    C --> F[\"-1\"]\n    C --> G[\"7\"]\n    D --> H[\"4\"]\n    E --> I[\"8\"]\n    \n    J[\"15\"] --> K[\"9\"]\n    J --> L[\"7\"]\n    K --> M[\"4\"]\n    K --> N[\"20\"]\n    L --> O[\"-1\"]\n    L --> P[\"7\"]\n    \n    Q[\"15\"] --> R[\"9\"]\n    Q --> S[\"-1\"]\n    R --> T[\"4\"]\n    R --> U[\"20\"]\n    S --> V[\"7\"]\n    S --> W[\"7\"]\n    \n    X[\"15\"] --> Y[\"9\"]\n    X --> Z[\"-1\"]\n    Y --> AA[\"4\"]\n    Y --> AB[\"20\"]\n    Z --> AC[\"7\"]\n    Z --> AD[\"7\"]\n    \n    AE[\"15\"] --> AF[\"9\"]\n    AE --> AG[\"-1\"]\n    AF --> AH[\"4\"]\n    AF --> AI[\"20\"]\n    AG --> AJ[\"7\"]\n    AG --> AK[\"7\"]\n    \n    AL[\"15\"] --> AM[\"9\"]\n    \n    AN[\"筛选结点8\"] --> AO[\"筛选结点7\"]\n    \n    AP[\"筛选结点9\"] --> AQ[\"筛选结点15\"]\n    \n    AR[\"筛选结点15\"] --> AS[\"筛选结点15\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_11",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "对关键字序列{23, 17, 72, 60, 25, 8, 68, 71, 52}进行堆排序，输出两个最小关键字后的剩余堆为（）。",
      "options": {
        "A": "$\\{23, 72, 60, 25, 68, 71, 52\\}$",
        "B": "$\\{23, 25, 52, 60, 71, 72, 68\\}$",
        "C": "$\\{71, 25, 23, 52, 60, 72, 68\\}$",
        "D": "$\\{23, 25, 68, 52, 60, 72, 71\\}$"
      },
      "answer": [
        "D"
      ],
      "explanation": "筛选法初始建堆为 $\\{8,17,23,52,25,72,68,71,60\\}$ ，输出8后重建的堆为 $\\{17,25,23,52,60,72,68,71\\}$ ，输出17后重建的堆为 $\\{23,25,68,52,60,72,71\\}$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_12",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "堆排序分为两个阶段：第一阶段将给定的序列构造成一个初始堆，第二阶段逐次输出堆顶元素，并调整使其保持堆的性质。设有给定序列{48, 62, 35, 77, 55, 14, 35, 98}，若在堆排序的第一阶段将该序列构造成一个大根堆，则交换元素的次数为（）。",
      "options": {
        "A": "5",
        "B": "6",
        "C": "7",
        "D": "8"
      },
      "answer": [
        "B"
      ],
      "explanation": "初始序列是一棵顺序存储的完全二叉树，然后根据大根堆的要求，按照从下到上、从右到左的顺序进行调整。98 和 77 比较，98 和 77 交换（交换 1 次）；14 和 35 比较，35 和 35 比较，不交换；98 和 55 比较，98 和 62 比较，98 和 62 交换（交换 1 次）；62 和 77 比较，77 和 62 交换（交换 1 次）；98 和 35 比较，98 和 48 比较，98 和 48 交换（交换 1 次）；77 和 55 比较，77 和 48 比较，77 和 48 交换（交换 1 次）；48 和 62 比较，62 和 48 交换（交换 1 次），共交换 6 次。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_13",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "已知大根堆{62, 34, 53, 12, 8, 46, 22}，删除堆顶元素后需要重新调整堆，则在此过程中关键字的比较次数为（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "B"
      ],
      "explanation": "删除堆顶 62 后，将堆尾 22 放入堆顶，然后自上而下调整。首先 34 与 53 比较（第一次比较），较大者 53 与根 22 比较（第二次比较），53 被换至堆顶；22 只有一个孩子，直接与其左孩子 46 比较（第 3 次比较），22 与 46 交换，至此大根堆调整结束，具体过程如下图所示。\n\n![](images/8f919f90050ab8d7df306fc925b8ca3052c3e880ff5a153eb41b8c237058f4f6.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"22\"] --> B[\"34\"]\n    A --> C[\"53\"]\n    B --> D[\"12\"]\n    B --> E[\"8\"]\n    C --> F[\"46\"]\n    G[\"53\"] --> H[\"34\"]\n    G --> I[\"22\"]\n    H --> J[\"12\"]\n    H --> K[\"8\"]\n    L[\"46\"] --> M[\"46\"]\n    N[\"53\"] --> O[\"34\"]\n    N --> P[\"46\"]\n    Q[\"12\"] --> R[\"8\"]\n    S[\"22\"] --> T[\"46\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_14",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "从根结点到任意叶结点的路径都是有序的数据结构是（）。",
      "options": {
        "A": "红黑树",
        "B": "二叉查找树",
        "C": "哈夫曼树",
        "D": "堆"
      },
      "answer": [
        "D"
      ],
      "explanation": "红黑树和二叉查找树的中序序列是有序序列，从根结点到任意叶结点的路径不能保证是有序的。哈夫曼树是根据权值按一定规则构造的树，和关键字次序无关。若是小根堆，则从根结点到任意叶结点的路径是升序序列；若是大根堆，则从根结点到叶结点的路径是降序序列。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_15",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2009 统考真题】已知关键字序列 $\\{5, 8, 12, 19, 28, 20, 15, 22\\}$ 是小根堆，插入关键字 3，调整好后得到的小根堆为（）。",
      "options": {
        "A": "3, 5, 12, 8, 28, 20, 15, 22, 19",
        "B": "3, 5, 12, 19, 20, 15, 22, 8, 28",
        "C": "3, 8, 12, 5, 20, 15, 22, 28, 19",
        "D": "3, 12, 5, 8, 28, 20, 15, 22, 19"
      },
      "answer": [
        "A"
      ],
      "explanation": "插入关键字 3 后，堆的变化过程如下图所示。\n\n![](images/fd100dd454424c574af92f0c4b36acaddde0f5b668c8173e9214aa0c6a01a877.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"22\"] --> B[\"19\"]\n    B --> C[\"8\"]\n    C --> D[\"5\"]\n    B --> E[\" \"]\n    C --> F[\"28\"]\n    F --> G[\"20\"]\n    G --> H[\"12\"]\n    H --> I[\"15\"]\n```\n</details>\n\n(a) 原始堆\n\n![](images/c178d3b5a34d9d295a36e3a217226e1793e763ad5eb975a2dbc845a123f0ac59.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"5\"] --> B[\"8\"]\n    A --> C[\"12\"]\n    B --> D[\"19\"]\n    B --> E[\"28\"]\n    C --> F[\"20\"]\n    C --> G[\"15\"]\n    D --> H[\"22\"]\n    D --> I[\"3\"]\n```\n</details>\n\n(b) 插入3\n\n![](images/614e6b053e00058ee085c8a45b030e467910be4e124c11da94862f7ca76ff7e1.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"8\"] --> B[\"5\"]\n    A --> C[\"19\"]\n    B --> D[\"3\"]\n    B --> E[\"28\"]\n    E --> F[\"20\"]\n    F --> G[\"15\"]\n    G --> H[\"12\"]\n```\n</details>\n\n(c) 调整结束",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_16",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2011 统考真题】已知序列 $\\{25, 13, 10, 12, 9\\}$ 是大根堆，在序列尾部插入新元素 18，再将其调整为大根堆，调整过程中元素之间进行的比较次数是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "B"
      ],
      "explanation": "首先 18 与 10 比较，交换；18 与 25 比较，不交换。共比较 2 次，调整过程如下图所示。\n\n![](images/3ca9027577304d8981e9b7eca136e3fd8c92e99e873afa5009ea9deecb8fb731.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"25\"] --> B[\"13\"]\n    A --> C[\"10\"]\n    B --> D[\"12\"]\n    B --> E[\"9\"]\n    F[\"25\"] --> G[\"13\"]\n    F --> H[\"10\"]\n    G --> I[\"12\"]\n    G --> J[\"9\"]\n    K[\"25\"] --> L[\"13\"]\n    K --> M[\"10\"]\n    L --> N[\"12\"]\n    L --> O[\"9\"]\n    P[\"25\"] --> Q[\"13\"]\n    P --> R[\"18\"]\n    Q --> S[\"12\"]\n    Q --> T[\"9\"]\n    U[\"25\"] --> V[\"13\"]\n    U --> W[\"18\"]\n    V --> X[\"12\"]\n    V --> Y[\"9\"]\n    Z[\"25\"] --> AA[\"13\"]\n    Z --> AB[\"18\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_17",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2015 统考真题】已知小根堆为 8, 15, 10, 21, 34, 16, 12，删除关键字 8 之后需重建堆，在此过程中，关键字之间的比较次数是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "C"
      ],
      "explanation": "删除 8 后，将 12 移动到堆顶，第一次是 15 和 10 比较，第二次是 10 和 12 比较并交换，第三次还需比较 12 和 16，所以比较次数为 3。\n\n![](images/0d106fd3cc4bce27b6c2e7f4c8b963059f5c18d104163e1724f7a7010cf5241a.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"8\"] --> B[\"15\"]\n    A --> C[\"10\"]\n    B --> D[\"21\"]\n    B --> E[\"34\"]\n    C --> F[\"16\"]\n    C --> G[\"12\"]\n```\n</details>\n\n![](images/294dc09d38516c6e5b0db46636c88e613e4f94f876861ad54926b68133ef61fb.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"12\"] --> B[\"15\"]\n    A --> C[\"10\"]\n    B --> D[\"21\"]\n    B --> E[\"34\"]\n    C --> F[\"16\"]\n```\n</details>\n\n![](images/9f3035eca720cf174f096ef8548594577433c6a3a3452bb1c86a746df5c2cba4.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"10\"] --> B[\"15\"]\n    A --> C[\"12\"]\n    B --> D[\"21\"]\n    B --> E[\"34\"]\n    C --> F[\"16\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_18",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2018 统考真题】在将序列(6,1,5,9,8,4,7)建成大根堆时，正确的序列变化过程是（）。",
      "options": {
        "A": "6,1,7,9,8,4,5→6,9,7,1,8,4,5→9,6,7,1,8,4,5→9,8,7,1,6,4,5",
        "B": "6,9,5,1,8,4,7→6,9,7,1,8,4,5→9,6,7,1,8,4,5→9,8,7,1,6,4,5",
        "C": "6,9,5,1,8,4,7→9,6,5,1,8,4,7→9,6,7,1,8,4,5→9,8,7,1,6,4,5",
        "D": "6, 1, 7, 9, 8, 4, 5 → 7, 1, 6, 9, 8, 4, 5 → 7, 9, 6, 1, 8, 4, 5 → 9, 7, 6, 1, 8, 4, 5 → 9, 8, 6, 1, 7, 4, 5"
      },
      "answer": [
        "A"
      ],
      "explanation": "要熟练掌握建堆和调整堆的方法，从序列末尾开始向前遍历，变换过程如下图所示。\n\n![](images/42198cfe4c9ab50566588b29571c1079b500105ae7d42d1a480b0e519230c250.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"6\"] --> B[\"1\"]\n    A --> C[\"5\"]\n    B --> D[\"9\"]\n    B --> E[\"8\"]\n    C --> F[\"4\"]\n    C --> G[\"7\"]\n    D --> H[\"7\"]\n    E --> I[\"4\"]\n    F --> J[\"7\"]\n    \n    K[\"6\"] --> L[\"1\"]\n    K --> M[\"7\"]\n    L --> N[\"9\"]\n    L --> O[\"8\"]\n    M --> P[\"4\"]\n    M --> Q[\"5\"]\n    \n    R[\"6\"] --> S[\"9\"]\n    R --> T[\"7\"]\n    S --> U[\"1\"]\n    S --> V[\"8\"]\n    T --> W[\"4\"]\n    T --> X[\"5\"]\n    \n    Y[\"9\"] --> Z[\"6\"]\n    Y --> AA[\"7\"]\n    Z --> AB[\"1\"]\n    Z --> AC[\"8\"]\n    AA --> AD[\"4\"]\n    AA --> AE[\"5\"]\n    \n    AF[\"9\"] --> AG[\"6\"]\n    AF --> AH[\"7\"]\n    AG --> AI[\"1\"]\n    AG --> AJ[\"8\"]\n    AH --> AK[\"4\"]\n    AH --> AL[\"5\"]\n    \n    AM[\"6\"] --> AN[\"9\"]\n    AM --> AO[\"7\"]\n    AN --> AP[\"1\"]\n    AN --> AQ[\"8\"]\n    AO --> AR[\"4\"]\n    AO --> AS[\"5\"]\n    \n    AT[\"6\"] --> AU[\"9\"]\n    AT --> AV[\"7\"]\n    AU --> AW[\"1\"]\n    AU --> AX[\"8\"]\n    AV --> AY[\"4\"]\n    AV --> AZ[\"5\"]\n    \n    BA[\"6\"] --> BB[\"9\"]\n    BA --> BC[\"7\"]\n    BB --> BD[\"1\"]\n    BB --> BE[\"8\"]\n    BC --> BF[\"4\"]\n    BC --> BG[\"5\"]\n    \n    BH[\"6\"] --> BI[\"9\"]\n    BH --> BJ[\"7\"]\n    BI --> BK[\"1\"]\n    BJ --> BL[\"8\"]\n    BK --> BM[\"4\"]\n    BL --> BN[\"5\"]\n    \n    BO[\"6\"] --> BP[\"9\"]\n    BO --> BQ[\"7\"]\n    BP --> BR[\"1\"]\n    BP --> BS[\"8\"]\n    BQ --> BT[\"4\"]\n    BP --> BU[\"5\"]\n    \n    BV[\"6\"] --> BW[\"9\"]\n    BV --> BX[\"7\"]\n    BW --> BY[\"1\"]\n    BW --> BZ[\"8\"]\n    BX --> CA[\"4\"]\n    BX --> CB[\"5\"]\n    \n    CC[\"6\"] --> DD[\"9\"]\n    CC --> DE[\"7\"]\n    DD --> DF[\"1\"]\n    DD --> DG[\"8\"]\n    DE --> DH[\"4\"]\n    DE --> DI[\"5\"]\n    \n    DJ[\"6\"] --> DK[\"9\"]\n    DJ --> DL[\"7\"]\n    DK --> DJ\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_19",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2020 统考真题】下列关于大根堆（至少含 2 个元素）的叙述中，正确的是（）。 I. 可以将堆视为一棵完全二叉树 II. 可以采用顺序存储方式保存堆 III. 可以将堆视为一棵二叉排序树 IV. 堆中的次大值一定在根的下一层",
      "options": {
        "A": "仅 I、II",
        "B": "仅 II、III",
        "C": "仅 I、II 和 IV",
        "D": "I、III 和 IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "简单概念题。堆是一棵完全树，采用一维数组存储，说法 I 正确，说法 II 正确。大根堆只要求根结点值大于左右孩子值，并不要求左右孩子值有序，说法 III 错误。堆的定义是递归的，所以其左右子树也是大根堆，所以堆的次大值一定是其左孩子或右孩子，说法 IV 正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_20",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2021 统考真题】将关键字 6,9,1,5,8,4,7 依次插入初始为空的大根堆 H, 得到的 H 是()。",
      "options": {
        "A": "9,8,7,6,5,4,1",
        "B": "9,8,7,5,6,1,4",
        "C": "9,8,7,5,6,4,1",
        "D": "9,6,7,5,8,4,1"
      },
      "answer": [
        "B"
      ],
      "explanation": "要熟练掌握调整堆的方法，建堆的过程如下图所示，所以选择选项 B。\n\n![](images/93e2ff88681f442dc543b5ccb47a915545accefc2049f07cecfe69c5d25f0c57.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"6\"] --> B[\"9\"]\n    B --> C[\"6\"]\n    C --> D[\"6\"]\n    D --> E[\"9\"]\n    E --> F[\"6\"]\n    F --> G[\"1\"]\n    G --> H[\"9\"]\n    H --> I[\"6\"]\n    I --> J[\"5\"]\n    J --> K[\"6\"]\n    K --> L[\"1\"]\n    L --> M[\"9\"]\n    M --> N[\"5\"]\n    N --> O[\"8\"]\n    \n    P[\"调整\"] --> Q[\"8\"]\n    Q --> R[\"9\"]\n    R --> S[\"1\"]\n    S --> T[\"8\"]\n    T --> U[\"9\"]\n    U --> V[\"4\"]\n    V --> W[\"8\"]\n    W --> X[\"9\"]\n    X --> Y[\"4\"]\n    Y --> Z[\"8\"]\n    Z --> AA[\"7\"]\n    \n    AB[\"调整\"] --> AC[\"5\"]\n    AC --> AD[\"6\"]\n    \n    AE[\"调整\"] --> AF[\"6\"]\n    AF --> AG[\"1\"]\n    AG --> AH[\"5\"]\n    AH --> AI[\"6\"]\n    AI --> AJ[\"4\"]\n    AJ --> AK[\"5\"]\n    AK --> AL[\"6\"]\n    \n    AM[\"调整\"] --> AN[\"5\"]\n    AN --> AO[\"6\"]\n    AO --> AP[\"1\"]\n    AP --> AQ[\"5\"]\n    AQ --> AR[\"7\"]\n```\n</details>\n\n注意，给定序列依次插入空堆的结果与给定序列直接调整成堆的结果是不同的，最终得到的堆的形式也不同。若对序列6,9,1,5,8,4,7直接调整成堆，则会误选选项C。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-4-3_21",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2024 统考真题】已知关键字序列 28, 22, 20, 19, 8, 12, 15, 5 是大根堆（最大堆），对该堆进行两次删除操作后，得到的新堆为（）。",
      "options": {
        "A": "20, 19, 15, 12, 8, 5",
        "B": "20, 19, 15, 5, 8, 12",
        "C": "20, 19, 12, 15, 8, 5",
        "D": "20, 19, 8, 12, 15, 5"
      },
      "answer": [
        "B"
      ],
      "explanation": "该序列已调整成大根堆，接下来进行第一次删除操作：删除28后，将5放入堆顶；然后自上而下调整。22和20比较，较大者22与5比较，交换；19和8比较，较大者19与5比较，交换。\n\n![](images/c716b2ec9c0558380b999de54105c54356cead65a394a2a90b7c55c68376eba2.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"5\"] --> B[\"22\"]\n    A --> C[\"20\"]\n    B --> D[\"19\"]\n    B --> E[\"8\"]\n    C --> F[\"12\"]\n    C --> G[\"15\"]\n    \n    H[\"22\"] --> I[\"5\"]\n    H --> J[\"20\"]\n    I --> K[\"19\"]\n    I --> L[\"8\"]\n    J --> M[\"12\"]\n    J --> N[\"15\"]\n    \n    O[\"22\"] --> P[\"19\"]\n    O --> Q[\"20\"]\n    P --> R[\"5\"]\n    P --> S[\"8\"]\n    Q --> T[\"12\"]\n    Q --> U[\"15\"]\n```\n</details>\n\n接下来进行第二次删除操作：删除 22 后，将 15 放入堆顶；然后自上而下调整。19 和 20 比较，较大者 20 与 15 比较，交换；15 直接与其仅有的左孩子 12 比较，不交换。\n\n![](images/20968a8deff96925725c228280df5b51cdf84f9b071f920eeeadb52c503880a6.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"15\"] --> B[\"19\"]\n    A --> C[\"20\"]\n    B --> D[\"5\"]\n    B --> E[\"8\"]\n    C --> F[\"12\"]\n    \n    G[\"20\"] --> H[\"19\"]\n    G --> I[\"15\"]\n    H --> J[\"5\"]\n    H --> K[\"8\"]\n    I --> L[\"12\"]\n```\n</details>\n\n因此，进行两次删除操作后，得到的新堆是 20, 19, 15, 5, 8, 12。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_04",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列排序算法中，排序过程中比较次数的数量级与序列初始状态无关的是（）。",
      "options": {
        "A": "归并排序",
        "B": "插入排序",
        "C": "快速排序",
        "D": "冒泡排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "前面已讲过选择排序的比较次数与序列初始状态无关，归并排序的比较次数的数量级也与序列的初始状态无关。读者应能从算法的原理方面来考虑为什么和初始状态无关。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_05",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "2 路归并排序中，归并趟数的数量级是（）。",
      "options": {
        "A": "$O(n)$",
        "B": "$O(\\log_{2}n)$",
        "C": "$O(n\\log_{2}n)$",
        "D": "$O(n^{2})$"
      },
      "answer": [
        "B"
      ],
      "explanation": "N 个元素进行 k 路归并排序的趟数 m 满足 $k^{m}=N$ ，即 $m=\\left\\lceil\\log_{k}N\\right\\rceil$ ，本题中为 $\\left\\lceil\\log_{2}n\\right\\rceil$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_06",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "若对 27 个元素只进行三趟多路归并排序，则选取的归并路数最少为（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "B"
      ],
      "explanation": "N 个元素进行 k 路归并排序的趟数 m 满足 $k^{m}=N$ ，这里要求的是 k，代入可得 k=3。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_07",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "multiple_choice",
      "question": "将两个各有 $N$ 个元素的有序表合并成一个有序表，最少的比较次数是（），最多的比较次数是（）。",
      "options": {
        "A": "N",
        "B": "2N-1",
        "C": "2N",
        "D": "N-1"
      },
      "answer": [
        "A",
        "B"
      ],
      "explanation": "注意，当一个表中的最小元素比另一个表中的最大元素还大时，比较的次数是最少的，仅比较 N 次；而当两个表中的元素依次间隔地比较时，即 $a_{1}<b_{1}<a_{2}<b_{2}<\\cdots<a_{n}<b_{n}$ 时，比较的次数是最多的，为 2N-1 次。\n\n建议读者对此举一反三: 若将本题中的两个有序表的长度分别设为 M 和 N, 则最多 (或最少) 的比较次数是多少? 时间复杂度又是多少?",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_09",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "一组经过第一趟2路归并排序后的记录的关键字为 $\\{25, 50, 15, 35, 80, 85, 20, 40, 36, 70\\}$ , 其中包含5个长度为2的有序表, 用2路归并排序算法对该序列进行第二趟归并后的结果为（）。",
      "options": {
        "A": "15, 25, 35, 50, 80, 20, 85, 40, 70, 36",
        "B": "15, 25, 35, 50, 20, 40, 80, 85, 36, 70",
        "C": "15, 25, 50, 35, 80, 85, 20, 36, 40, 70",
        "D": "15, 25, 35, 50, 80, 20, 36, 40, 70, 85"
      },
      "answer": [
        "B"
      ],
      "explanation": "这里采用 2 路归并排序算法，且是第二趟排序，因此每 4 个元素放在一起归并，可将序列划分为 $\\{25, 50, 15, 35\\}$ ， $\\{80, 85, 20, 40\\}$ 和 $\\{36, 70\\}$ ，分别对它们进行排序后有 $\\{15, 25, 35, 50\\}$ ， $\\{20, 40, 80, 85\\}$ 和 $\\{36, 70\\}$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_10",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "若将中国人按照生日（不考虑年份，只考虑月、日）来排序，则使用下列排序算法时，最快的是（）。",
      "options": {
        "A": "归并排序",
        "B": "希尔排序",
        "C": "快速排序",
        "D": "基数排序"
      },
      "answer": [
        "D"
      ],
      "explanation": "按照所有中国人的生日排序，一方面 N 是非常大的，另一方面关键字所含的排序码数为 2，且一个排序码的基数为 12，另一个排序码的基数为 31，都是较小的常数值，因此采用基数排序可以在 $O(N)$ 内完成排序过程。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_11",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "设线性表中每个元素有两个数据项 $k_{1}$ 和 $k_{2}$ ，现对线性表按以下规则进行排序：先看数据项 $k_{1}$ ， $k_{1}$ 值小的元素在前，大的元素在后；在 $k_{1}$ 值相同的情况下，再看 $k_{2}$ ， $k_{2}$ 值小的元素在前，大的元素在后。满足这种要求的排序算法是（）。",
      "options": {
        "A": "先按 $k_{1}$ 进行直接插入排序，再按 $k_{2}$ 进行简单选择排序",
        "B": "先按 $k_{2}$ 进行直接插入排序，再按 $k_{1}$ 进行简单选择排序",
        "C": "先按 $k_{1}$ 进行简单选择排序，再按 $k_{2}$ 进行直接插入排序",
        "D": "先按 $k_{2}$ 进行简单选择排序，再按 $k_{1}$ 进行直接插入排序"
      },
      "answer": [
        "D"
      ],
      "explanation": "本题思路来自基数排序的 LSD，首先应确定 $k_{1}$ 、 $k_{2}$ 的排序顺序，若先排 $k_{1}$ 再排 $k_{2}$ ，则排序结果不符合题意，排除选项 A 和 C。再考虑排序的稳定性，当 $k_{2}$ 排好序后，再对 $k_{1}$ 排序，若对 $k_{1}$ 排序采用的方法是不稳定的，则对于 $k_{1}$ 相同而 $k_{2}$ 不同的元素可能会改变相对次序，从而不一定能满足题设要求。直接插入排序是稳定的，而简单选择排序是不稳定的，只能选择选项 D。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_12",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "对 $\\{05, 46, 13, 55, 94, 17, 42\\}$ 进行基数排序，一趟排序的结果是（）。",
      "options": {
        "A": "05, 46, 13, 55, 94, 17, 42",
        "B": "05, 13, 17, 42, 46, 55, 94",
        "C": "42, 13, 94, 05, 55, 46, 17",
        "D": "05, 13, 46, 55, 17, 42, 94"
      },
      "answer": [
        "C"
      ],
      "explanation": "基数排序有 MSD 和 LSD 两种，基数排序是稳定的。对于选项 A，不符合 LSD 和 MSD；对于选项 B，符合 MSD，但关键字 42、46 的相对位置发生了变化；对于选项 D，不符合 LSD 和 MSD。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_13",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "有 $n$ 个十进制整数进行基数排序，其中最大的整数为5位，则基数排序过程中临时建立的队列个数是（）。",
      "options": {
        "A": "n",
        "B": "2",
        "C": "5",
        "D": "10"
      },
      "answer": [
        "D"
      ],
      "explanation": "基数排序中建立的队列个数等于进制数。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_14",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下列各种排序算法中，（）需要的附加存储空间最大。",
      "options": {
        "A": "快速排序",
        "B": "堆排序",
        "C": "归并排序",
        "D": "插入排序"
      },
      "answer": [
        "C"
      ],
      "explanation": "快速排序的平均空间复杂度是 $O(\\log_{2}n)$ ，归并排序的空间复杂度是 $O(n)$ ，其他都是 $O(1)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_15",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2013 统考真题】已知两个长度分别为 $m$ 和 $n$ 的升序链表，若将它们合并为长度为 $m + n$ 的一个降序链表，则最坏情况下的时间复杂度为（）。",
      "options": {
        "A": "$O(n)$",
        "B": "$O(mn)$",
        "C": "$O(\\min(m, n))$",
        "D": "$O(\\max(m, n))$"
      },
      "answer": [
        "D"
      ],
      "explanation": "考虑两个升序链表合并，两两比较表中元素，每比较一次，确定一个元素的链接位置（取较小元素，头插法）。当一个链表比较结束后，将另一个链表的剩余元素插入即可。最坏的情况是两个链表中的元素依次进行比较，因为 $2\\max(m, n) \\geqslant m + n$ ，所以时间复杂度为 $O(\\max(m, n))$ 。此外，每次比较把两个链表中的较小结点插入新链表的表头，直到一个链表为空，因为原链表是升序排列的，要求合并后为降序排列的，因此还要把另一个链表剩下的结点一一插入新链表的表头，不论是最好情况还是最坏情况，都需要遍历两个链表中的所有结点。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_16",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2013 统考真题】对给定的关键字序列 110, 119, 007, 911, 114, 120, 122 进行基数排序，第二趟分配、收集后得到的关键字序列为（）。",
      "options": {
        "A": "007, 110, 119, 114, 911, 120, 122",
        "B": "007, 110, 119, 114, 911, 122, 120",
        "C": "007, 110, 911, 114, 119, 120, 122",
        "D": "110, 120, 911, 122, 114, 007, 119"
      },
      "answer": [
        "C"
      ],
      "explanation": "基数排序的第一趟排序是按照个位数字的大小来进行的，第二趟排序是按照十位数字的大小来进行的，排序的过程如下图所示。\n\n![](images/24918e3ae36f0b1263973bd76132b77288f0ebfbd98bba3ddc8d096d59da7236.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"分配: e[0\"]] --> B[\"110\"]\n    B --> C[\"120\"]\n    D[\"分配: e[1\"]] --> E[\"911\"]\n    E --> F[\"122\"]\n    G[\"分配: e[2\"]] --> H[\"114\"]\n    I[\"分配: e[3\"]] --> J[\"114\"]\n    K[\"分配: e[4\"]] --> L[\"114\"]\n    M[\"分配: e[5\"]] --> N[\"114\"]\n    O[\"分配: e[6\"]] --> P[\"114\"]\n    Q[\"分配: e[7\"]] --> R[\"114\"]\n    S[\"分配: e[8\"]] --> T[\"114\"]\n    U[\"分配: e[9\"]] --> V[\"119\"]\n    W[\"收集: e[0\"]] --> X[\"110\"]\n    Y[\"收集: e[1\"]]\n    Z[\"收集: e[2\"]]\n    AA[\"收集: e[3\"]]\n    AB[\"收集: e[4\"]]\n    AC[\"收集: e[5\"]]\n    AD[\"收集: e[6\"]]\n    AE[\"收集: e[7\"]]\n    AF[\"收集: e[8\"]]\n    AG[\"收集: e[9\"]]\n    AH[\"分配: 007\"]\n    AI[\"分配: 110\"]\n    AJ[\"分配: 911\"]\n    AK[\"分配: 120\"]\n    AL[\"分配: 114\"]\n    AM[\"分配: 119\"]\n    AN[\"收集: 007\"]\n    AO[\"收集: 110\"]\n    AP[\"收集: 911\"]\n    AQ[\"收集: 114\"]\n    AR[\"收集: 119\"]\n    AS[\"收集: 120\"]\n    AT[\"收集: 122\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_17",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2015统考真题】下列排序算法中，元素的移动次数与关键字的初始状态无关的是（）。",
      "options": {
        "A": "直接插入排序",
        "B": "冒泡排序",
        "C": "基数排序",
        "D": "快速排序"
      },
      "answer": [
        "C"
      ],
      "explanation": "基数排序的元素移动次数与序列初态无关，而其他三种排序算法都与序列初态有关。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_18",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2021 统考真题】设数组 $S[] = \\{93, 946, 372, 9, 146, 151, 301, 485, 236, 327, 43, 892\\}$ ，采用最低位优先（LSD）基数排序将 S 排列成升序序列。第一趟分配、收集后，元素 372 之前、之后紧邻的元素分别为（）。",
      "options": {
        "A": "43,892",
        "B": "236, 301",
        "C": "301,892",
        "D": "485,301"
      },
      "answer": [
        "C"
      ],
      "explanation": "基数排序是一种稳定的排序算法。因为采用最低位优先（LSD）的基数排序，即第一趟对个位进行分配和收集操作，所以第一趟分配和收集后的结果是{151, 301, 372, 892, 93, 43, 485, 946, 146, 236, 327, 9}，元素372之前、之后紧邻的元素分别为301和892。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_19",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2022 统考真题】使用 2 路归并排序对含 $n$ 个元素的数组 M 进行排序时，2 路归并排序的功能是（）。",
      "options": {
        "A": "将两个有序表合并为一个新的有序表",
        "B": "将 M 划分为两部分，两部分的元素个数大致相等",
        "C": "将 M 划分为 n 个部分，每个部分中仅含有一个元素",
        "D": "将 M 划分为两部分，一部分元素的值均小于另一部分元素的值"
      },
      "answer": [
        "A"
      ],
      "explanation": "送分题。本书对归并的定义原话是“归并的含义是将两个或两个以上的有序表合并成一个新的有序表”，而2路归并是将两个有序表合并为一个新的有序表。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-5-4_20",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2024 统考真题】现有由关键字组成的 3 个有序序列(3, 5)、(7, 9)和(6)，若按从左至右的次序选择有序序列进行 2 路归并排序，则关键字之间的总比较次数是（）。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "C"
      ],
      "explanation": "从左至右对这三个有序序列进行 2 路归并排序的过程如下。\n\n① 合并(3,5)和(7,9): 比较 3 和 7 (1 次), 选择 3; 比较 5 和 7 (1 次), 选择 5; 剩余元素 7 和 9 直接加入。② 合并(3,5,7,9)和(6): 比较 3 和 6 (1 次), 选择 3; 比较 5 和 6 (1 次), 选择 5; 比较 7 和 6 (1 次), 选择 6; 剩余元素 7 和 9 直接加入。总共比较 5 次。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_10",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "对于元素个数相同的不同初始序列，总比较次数大致相同的排序算法是（）。",
      "options": {
        "A": "折半插入排序和简单选择排序",
        "B": "基数排序和归并排序",
        "C": "冒泡排序和快速排序",
        "D": "堆排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "简单选择排序的总比较次数显然是确定的。折半插入排序每趟的比较次数都为 $O(\\log_{2}m)$ （m 为当前已排好序的子序列的长度），因此总比较次数也是确定的。基数排序不是基于比较的排序算法。其他几种排序算法的比较次数显然和序列的初始状态有关。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_11",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "一般情况下，以下查找效率最低的数据结构是（）。",
      "options": {
        "A": "有序顺序表",
        "B": "二叉排序树",
        "C": "堆",
        "D": "平衡二叉树"
      },
      "answer": [
        "C"
      ],
      "explanation": "堆是用于排序的，在查找时它是无序的，所以效率没有其他查找结构的高。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_12",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "一台计算机具有多核 CPU，可以同时执行相互独立的任务。归并排序的各个归并段可以并行执行，在下列排序算法中，不可以并行执行的有（）。 I. 基数排序 II. 快速排序 III. 冒泡排序 IV. 堆排序",
      "options": {
        "A": "I、III",
        "B": "I、II",
        "C": "I、III、IV",
        "D": "II、IV"
      },
      "answer": [
        "A"
      ],
      "explanation": "基数排序每趟需要利用前一趟已排好的序列，无法并行执行。快速排序每趟划分的子序列互不影响，可以并行执行。冒泡排序每趟对未排序的所有元素进行一趟处理，无法并行执行。堆排序可以并行执行，因为根结点的左右子树构成的子堆在执行过程中是互不影响的。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_13",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2009 统考真题】若数据元素序列 $\\{11, 12, 13, 7, 8, 9, 23, 4, 5\\}$ 是采用下列排序算法之一得到的第二趟排序后的结果，则该排序算法只能是（）。",
      "options": {
        "A": "冒泡排序",
        "B": "插入排序",
        "C": "选择排序",
        "D": "2 路归并排序"
      },
      "answer": [
        "B"
      ],
      "explanation": "每趟冒泡和选择排序后，总会有一个元素被放置在最终位置上。显然，这里 $\\{11, 12\\}$ 和 $\\{4, 5\\}$ 所处的位置并不是最终位置，因此不可能是冒泡和选择排序。2 路归并算法经过第二趟后应该是每 4 个元素有序的，但 $\\{11, 12, 13, 7\\}$ 并非有序，因此也不可能是 2 路归并排序。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_14",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2010 统考真题】对一组数据(2, 12, 16, 88, 5, 10)进行排序，若前 3 趟排序结果如下: 第一趟排序结果：2, 12, 16, 5, 10, 88 第二趟排序结果：2, 12, 5, 10, 16, 88 第三趟排序结果：2, 5, 10, 12, 16, 88 则采用的排序算法可能是（）。",
      "options": {
        "A": "冒泡排序",
        "B": "希尔排序",
        "C": "归并排序",
        "D": "基数排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "题中给出的排序过程，每一趟都是从前往后依次比较使最大值沉底，符合冒泡排序的特点。分别用其他3种排序算法尝试，归并排序第一趟后的结果为(2, 12, 16, 88, 5, 10)，基数排序第一趟后的结果为(10, 2, 12, 5, 16, 88)，希尔排序显然不符合。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_15",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2012 统考真题】在内部排序过程中，对尚未确定最终位置的所有元素进行一遍处理称为一趟排序。下列排序算法中，每趟排序结束都至少能够确定一个元素最终位置的方法是（）。 I. 简单选择排序 II. 希尔排序 III. 快速排序 IV. 堆排序 V. 2 路归并排序",
      "options": {
        "A": "仅 I、III、IV",
        "B": "仅 I、III、V",
        "C": "仅 II、III、IV",
        "D": "仅 III、IV、V"
      },
      "answer": [
        "A"
      ],
      "explanation": "对于说法 I，简单选择排序每次选择未排序序列中的最小元素放入其最终位置。对于说法 II，希尔排序每次对划分的子表进行排序，得到局部有序的结果，所以不能保证每趟结束都能确定一个元素的最终位置。对于说法 III，快速排序每趟结束后都将枢轴元素放到最终位置。对于说法 IV，堆排序属于选择排序，每次都将大根堆的根结点与表尾结点交换，确定其最终位置。对于选项 V，2 路归并排序每趟对子表进行两两归并，从而得到若干局部有序的结果，但无法确定最终位置。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_16",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2017 统考真题】在内部排序时，若选择了归并排序而未选择插入排序，则可能的理由是（）。 I. 归并排序的程序代码更短 II. 归并排序的占用空间更少 III. 归并排序的运行效率更高",
      "options": {
        "A": "仅 II",
        "B": "仅 III",
        "C": "仅 I、II",
        "D": "仅 I、III"
      },
      "answer": [
        "B"
      ],
      "explanation": "归并排序的代码比插入排序的代码更为复杂，前者的空间复杂度为 $O(n)$ ，后者为 $O(1)$ 。但是前者的时间复杂度为 $O(n\\log_{2}n)$ ，后者为 $O(n^{2})$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_17",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2017统考真题】下列排序算法中，若将顺序存储更换为链式存储，则算法的时间效率会降低的是（）。 I. 插入排序 II. 选择排序 III. 冒泡排序 IV. 希尔排序 V. 堆排序",
      "options": {
        "A": "仅 I、II",
        "B": "仅 II、III",
        "C": "仅 III、IV",
        "D": "仅 IV、V"
      },
      "answer": [
        "D"
      ],
      "explanation": "在顺序存储的条件下，插入排序、选择排序、冒泡排序的时间复杂度都是 $O(n^{2})$ ，更换为链式存储后的时间复杂度还是 $O(n^{2})$ 。希尔排序和堆排序都利用了顺序存储的随机访问特性，而链式存储不支持这种性质，所以时间复杂度会增加。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_18",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2019 统考真题】选择一个排序算法时，除算法的时空效率外，下列因素中，还需要考虑的是（）。 I. 数据的规模 II. 数据的存储方式 III. 算法的稳定性 IV. 数据的初始状态",
      "options": {
        "A": "仅 III",
        "B": "仅 I、II",
        "C": "仅 II、III、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "当数据规模较小时可选择复杂度为 $O(n^{2})$ 的简单排序算法，当数据规模较大时应选择复杂度为 $O(n\\log_{2}n)$ 的排序算法，当数据规模大到内存无法放下时需选择外部排序算法，说法I正确。数据的存储方式主要分为顺序存储和链式存储，有些排序算法（如堆排序）只能用于顺序存储方式，说法II正确。若对数据稳定性有要求，则不能选择不稳定的排序算法，说法III显然正确。当数据初始基本有序时，直接插入排序的效率最高，冒泡排序和直接插入排序的时间复杂度都为 $O(n)$ ，而归并排序的时间复杂度仍然为 $O(n\\log_{2}n)$ ，说法IV正确。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_19",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2020 统考真题】对大部分元素已有序的数组排序时，直接插入排序比简单选择排序效率更高，其原因是（）。 I. 直接插入排序过程中元素之间的比较次数更少 II. 直接插入排序过程中所需的辅助空间更少 III. 直接插入排序过程中元素的移动次数更少",
      "options": {
        "A": "仅 I",
        "B": "仅 III",
        "C": "仅 I、II",
        "D": "I、II 和 III"
      },
      "answer": [
        "A"
      ],
      "explanation": "考虑比较极端的情况，对于有序数组，直接插入排序的比较次数为 n-1，简单选择排序的比较次数始终为 $1+2+\\cdots+n-1=n(n-1)/2$ ，说法 I 正确。两种排序算法的辅助空间都为 $O(1)$ ，无差别，说法 II 错误。初始有序时，移动次数均为 0；对于通常情况，直接插入排序每趟插入都需要依次向后挪位，而简单选择排序只需与找到的最小元素交换位置，后者的移动次数少很多，说法 III 错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_20",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2022 统考真题】对数据进行排序时，若采用直接插入排序而不采用快速排序，则可能的原因是（）。 I. 大部分元素已有序 II. 待排序元素数量很少 III. 要求空间复杂度为 $O(1)$ IV. 要求排序算法是稳定的",
      "options": {
        "A": "仅 I、II",
        "B": "仅 III、IV",
        "C": "仅 I、II、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "直接插入排序和快速排序的特点如下表所示。\n\n<table><tr><td></td><td>适合初始序列情况</td><td>适合元素数量</td><td>空间复杂度</td><td>稳定性</td></tr><tr><td>直接插入排序</td><td>大部分元素有序</td><td>较少</td><td> $O(1)$ </td><td>稳定</td></tr><tr><td>快速排序</td><td>基本无序</td><td>较多</td><td> $O(\\log_{2}n)$ </td><td>不稳定</td></tr></table>\n\n可见，说法 I、II、III、IV 都是采用直接插入排序而不采用快速排序的可能原因。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_21",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2023 统考真题】下列排序算法中，不稳定的是（）。 I. 希尔排序 II. 归并排序 III. 快速排序 IV. 堆排序 V. 基数排序",
      "options": {
        "A": "仅 I、II",
        "B": "仅 II、V",
        "C": "仅 I、III、IV",
        "D": "仅 III、IV、V"
      },
      "answer": [
        "C"
      ],
      "explanation": "稳定的内部排序算法：插入排序、冒泡排序、归并排序和基数排序。不稳定的内部排序算法：简单选择排序、快速排序、希尔排序和堆排序。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_22",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2025统考真题】在下列排序算法中，最坏情况下元素移动次数最少的是（）。",
      "options": {
        "A": "起泡排序",
        "B": "直接插入排序",
        "C": "快速排序",
        "D": "简单选择排序"
      },
      "answer": [
        "D"
      ],
      "explanation": "简单选择排序每趟从未排序部分选出最小（或最大）元素，与未排序部分的首元素交换。无论输入如何，最多执行 n-1 次交换，总移动次数为 $O(n)$ ，是所有选项中最少的。而起泡排序、直接插入排序和快速排序在最坏情况下均需 $O(n^{2})$ 次移动（如逆序时起泡和插入需要大量移位，快排递归分割导致频繁交换）。因此，简单选择排序在最坏情况下的元素移动次数最少。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-6-3_23",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2025 统考真题】对含 9 个关键字的初始序列进行排序，若序列的变化情况如下表所示，则下列排序算法中，采用的是（）。 <table><tr><td>初始序列</td><td>5, 25, 40, 30, 10, 20, 45, 15, 35</td></tr><tr><td>第1趟排序后的序列</td><td>5, 10, 20, 30, 15, 35, 45, 25, 40</td></tr><tr><td>第2趟排序后的序列</td><td>5, 10, 15, 25, 20, 30, 40, 35, 45</td></tr></table>",
      "options": {
        "A": "希尔排序",
        "B": "基数排序",
        "C": "归并排序",
        "D": "折半插入排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "第 1 趟排序后，序列呈现出以间隔 3 分组的局部有序特征：下标模 3 相同的元素各自有序（如位置 1, 4, 7 上的 25, 10, 15 变为 10, 15, 25；位置 2, 5, 8 上的 40, 20, 35 变为 20, 35, 40），这是希尔排序在增量 d = 3 时对各子序列进行插入排序的典型特征。第 2 趟进一步调整，符合增量缩小至 1 的结果。而其他三种排序方法均无法产生这种跨距离分组、局部有序的中间状态。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-7-6_07",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "置换-选择排序的作用是（）。",
      "options": {
        "A": "用于生成外部排序的初始归并段",
        "B": "完成将一个磁盘文件排序成有序文件的有效的外部排序算法",
        "C": "生成的初始归并段的长度是内存工作区的 2 倍",
        "D": "对外部排序中输入/归并/输出的并行处理"
      },
      "answer": [
        "A"
      ],
      "explanation": "置换-选择排序是外部排序中生成初始归并段的方法，用此方法得到的初始归并段的长度是不等长的，其长度平均是传统等长初始归并段的2倍，从而使得初始归并段数减少到原来的近二分之一。但是，置换-选择排序不是一种完整的生成有序文件的外部排序算法。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-7-6_10",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于小顶堆和败者树的说法中，正确的是（）。 I. 败者树从下往上维护，每上一层，只需和失败结点比较 1 次 II. 败者树的每次维护，必定要从叶结点一直走到根结点，不可能从中间停止 III. 堆从上往下维护，每下一层，若其左右孩子均不为空，则需比较 2 次 IV. 堆的每次维护，必定要从根结点一直走到叶结点，不可能从中间停止",
      "options": {
        "A": "I、III",
        "B": "II、III",
        "C": "I、II、III",
        "D": "I、III、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "说法 I 正确，是败者树的性质。在败者树的维护过程中，会让胜利者一直调整到根结点，说法 II 正确。以小根堆为例，每次调整时，先比较下一层的两个元素（1 次），找出较小值，然后比较当前元素和下一层的较小元素（1 次），以决定是否向下交换位置，说法 III 正确。堆在维护时，可能会在中间某层停止（若此处无须调整），而不一定要走到叶结点，说法 IV 错误。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-7-6_11",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "最佳归并树在外部排序中的作用是（）。",
      "options": {
        "A": "完成 m 路归并排序",
        "B": "设计 $m$ 路归并排序的优化方案",
        "C": "产生初始归并段",
        "D": "与锦标赛树的作用类似"
      },
      "answer": [
        "B"
      ],
      "explanation": "最佳归并树在外部排序中的作用是设计 m 路归并排序的优化方案，仿照构造哈夫曼树的方法，以初始归并段的长度为权值，构造具有最小带权路径长度的 m 叉哈夫曼树，可以有效地减少归并过程中的读/写记录数，加快外部排序的速度。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-7-6_12",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "在由 $m$ 个初始归并段构建的 $k$ 阶最佳归并树中，不需要补充虚段，则度为 $k$ 的结点个数是（）。",
      "options": {
        "A": "$(m-1)/k$",
        "B": "m/k",
        "C": "$(m-1)/(k-1)$",
        "D": "无法确定"
      },
      "answer": [
        "C"
      ],
      "explanation": "k 阶最佳归并树中只有度为 0 和 k 的结点。设结点总数为 n，度为 0 的结点数为 $n_{0}$ ，度为 k 的结点数为 $n_{k}$ ，则 $n_{0}=m$ 、 $n-1=kn_{k}$ ， $n=n_{0}+n_{k}$ ，因此 $kn_{k}=m+n_{k}-1$ ，求得 $n_{k}=(m-1)/(k-1)$ 。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-7-6_13",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2013 统考真题】已知三叉树 $T$ 中 6 个叶结点的权分别是 2, 3, 4, 5, 6, 7, $T$ 的带权（外部）路径长度最小是（）。",
      "options": {
        "A": "27",
        "B": "46",
        "C": "54",
        "D": "56"
      },
      "answer": [
        "B"
      ],
      "explanation": "题中的三叉树为使 WPL 最小，必须构造三叉哈夫曼树，应满足 $(n_{0}-1)\\%(3-1)=0$ 的条件，因此需添加 1 个权值为 0 的虚叶结点，说明 7 个叶结点刚好可构成一棵严格的三叉树。按照哈夫曼树的原则，权为 0 的叶结点应离树根最远，构造三叉哈夫曼树的过程如下：\n\n① 合并权值最小的三个结点 0,2,3，得到新结点的权值 =5，剩下 5,4,5,6,7。  \n② 合并权值最小的三个结点 4, 5, 5，得到新结点的权值 = 14，剩下 14, 6, 7。  \n③ 合并权值最小的三个结点 6, 7, 14，得到新结点的权值 = 27，仅有 27，建树完成。\n\n$$\n\\mathrm{WPL} = \\sum_ {1} ^ {n} \\text {权值} W _ {\\text {叶结点} i} \\times \\text {深度} D _ {\\text {叶结点} i} = (2 + 3) \\times 3 + (4 + 5) \\times 2 + (6 + 7) \\times 1 = 4 6\n$$\n\n或\n\n$$\n\\mathrm{WPL} = \\sum_ {1} ^ {m} \\text {权值} W _ {\\text {分支结点} j} = 2 7 + 1 4 + 5 = 4 6\n$$\n\n每个分支结点的权值都累加了其下面所有分支结点的权值，因此采用第二种方法更方便。\n\n![](images/338a2fc43279f555b44bf382c8c8a1119be287c747fb938b6f581dd6ceb0570b.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"5\"] --> B[\"0\"]\n    A --> C[\"2\"]\n    A --> D[\"3\"]\n    A --> E[\"4\"]\n    A --> F[\"5\"]\n    A --> G[\"6\"]\n    A --> H[\"7\"]\n    \n    I[\"14\"] --> J[\"0\"]\n    I --> K[\"2\"]\n    I --> L[\"3\"]\n    M[\"5\"] --> N[\"0\"]\n    M --> O[\"2\"]\n    M --> P[\"3\"]\n    Q[\"14\"] --> R[\"0\"]\n    Q --> S[\"2\"]\n    Q --> T[\"3\"]\n    U[\"5\"] --> V[\"0\"]\n    U --> W[\"2\"]\n    U --> X[\"3\"]\n    \n    Y[\"27\"] --> Z[\"6\"]\n    Y --> AA[\"7\"]\n```\n</details>",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-7-6_14",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2016 统考真题】对 10TB 的数据文件进行排序，应使用的方法是（）。",
      "options": {
        "A": "希尔排序",
        "B": "堆排序",
        "C": "快速排序",
        "D": "归并排序"
      },
      "answer": [
        "D"
      ],
      "explanation": "外部排序指的是大文件的排序，即待排序的记录存储在外存中，待排序的文件无法一次性装入内存，需要在内存和外存之间进行多次数据交换，以达到排序整个文件的目的。外部排序通常采用归并排序算法。选项 A、B、C 都是内部排序的方法。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-7-6_15",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2019 统考真题】设外存上有 120 个初始归并段，进行 12 路归并时，为实现最佳归并，需要补充的虚段个数是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "B"
      ],
      "explanation": "在 12 路归并树中只存在度为 0 和度为 12 的结点，设度为 0 的结点数、度为 12 的结点数和要补充的结点数分别为 $n_{0}$ 、 $n_{12}$ 和 $n_{补}$ ，则有 $n_{0}=120+n_{补}$ ， $n_{0}=(12-1)n_{12}+1$ ，可得 $n_{12}=(120-1+n_{补})/(12-1)$ 。因为结点数 $n_{12}$ 为整数，所以 $n_{补}$ 是使上式整除的最小整数，求得 $n_{补}=2$ 。\n\n此外，题中为实现最佳归并，应满足12叉哈夫曼树， $n = 120$ ， $m = 12$ ，不满足 $(n - 1)\\% (m - 1) = 0$ 的条件，因此需要添加两个权值为0的叶结点，使得 $n = 122$ ，才能满足条件。",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "数据结构_8-7-6_16",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "排序",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2024 统考真题】在外排序中，利用败者树对初始为升序的归并段进行多路归并，败者树中记录“冠军”的结点保存的是（）。",
      "options": {
        "A": "最大关键字",
        "B": "最小关键字",
        "C": "最大关键字所在的归并段号",
        "D": "最小关键字所在的归并段号"
      },
      "answer": [
        "D"
      ],
      "explanation": "利用败者树归并升序归并段，每次需要得到当前的最小关键字，因此记录“冠军”的结点保存的只能是最小关键字或最小关键字所在的归并段号。通过败者树找出最小关键字后，还需要找到该关键字所在的归并段，并移动段内元素，以继续比较下一个元素，下面分别进行讨论：① 假设记录“冠军”的结点保存的是最小关键字所在的归并段号，则能直接得到最小关键字及其所在的段，时间复杂度低。② 假设记录“冠军”的结点保存的是最小关键字，则查找其所在的段需要检索所有段的首元素是否与该最小关键字相等，时间复杂度高。为了提高效率，记录“冠军”的结点保存的是最小关键字所在的归并段号，而不是最小关键字。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/数据结构/chapters/ch08-第8章-排序.md"
    },
    {
      "id": "计算机组成原理_1-2-7_03",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "冯．诺依曼机工作方式的基本特点是（）。",
      "options": {
        "A": "程序一边被输入计算机一边被执行",
        "B": "程序直接从磁盘读到 CPU 执行",
        "C": "按地址访问指令并自动按序执行程序",
        "D": "程序自动执行而数据手工输入"
      },
      "answer": [
        "C"
      ],
      "explanation": "冯·诺依曼机的核心特征包括“存储程序”、程序和数据统一存储、按地址访问，以及指令的自动顺序执行。其基本工作方式是：程序以二进制形式预先存入主存储器，CPU依据程序计数器（PC）提供的地址逐条取出指令，并自动按序执行，无须人工干预。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-2-7_04",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "以下关于计算机各部件功能的叙述中，错误的是（）。",
      "options": {
        "A": "运算器（ALU）仅用来完成算术运算",
        "B": "存储器用来存放指令和数据",
        "C": "控制器负责指挥和协调计算机各部件",
        "D": "输入/输出设备用来完成用户和计算机之间的信息交换"
      },
      "answer": [
        "A"
      ],
      "explanation": "运算器（ALU）不仅负责算术运算，还承担逻辑运算（如与、或、非、移位等），因此选项A限定为“算术运算”是片面的，表述错误。选项B、C和D的描述明显正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-2-7_05",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "计算机系统采用层次化结构，从最上层的应用程序到最底层的硬件，其典型层次自上而下依次为（）。",
      "options": {
        "A": "高级语言虚拟机→操作系统虚拟机→汇编语言虚拟机→机器语言机器",
        "B": "高级语言虚拟机→汇编语言虚拟机→机器语言机器→操作系统虚拟机",
        "C": "高级语言虚拟机→汇编语言虚拟机→操作系统虚拟机→机器语言机器",
        "D": "操作系统虚拟机→高级语言虚拟机→汇编语言虚拟机→机器语言机器"
      },
      "answer": [
        "C"
      ],
      "explanation": "计算机系统通常被抽象为多层虚拟机结构。用户程序以高级语言编写，在高级语言虚拟机上运行；经编译后生成汇编代码，在汇编语言虚拟机上抽象执行；但实际指令需要由操作系统加载、调度并管理资源，因此操作系统构成操作系统虚拟机层；最终，所有操作由机器语言机器执行。该层次自上而下为“高级语言虚拟机→汇编语言虚拟机→操作系统虚拟机→机器语言机器”。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-2-7_06",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列关于计算机系统层次结构的说法中，正确的是（）。",
      "options": {
        "A": "高级语言程序经编译生成汇编语言后，可直接在机器上执行",
        "B": "ISA 仅定义指令功能，不涉及硬件实现细节",
        "C": "同一 ISA 可由不同微体系结构实现，软件无须修改即可兼容",
        "D": "高级语言中的每条语句与 ISA 的机器指令一一对应"
      },
      "answer": [
        "C"
      ],
      "explanation": "汇编语言仍需汇编为机器码才能执行。ISA 是软/硬件的抽象接口，定义了软件可见的处理器行为（如指令、寄存器、寻址方式等），而非仅描述功能。同一 ISA 可由不同微体系结构（如流水线、缓存设计等）实现，软件无须修改即可兼容，选项 C 正确。高级语言高度抽象，与机器指令无直接对应关系，仅汇编语言与 ISA 指令基本一一对应。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-2-7_07",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "关于编译程序和解释程序，下列说法中错误的是（）。",
      "options": {
        "A": "编译程序和解释程序的作用都是将高级语言程序转换为机器语言程序",
        "B": "编译程序编译时间较长，运行速度较快",
        "C": "解释程序方法较简单，运行速度也较快",
        "D": "解释程序将源程序翻译成机器语言，并且翻译一条以后，立即执行这条语句"
      },
      "answer": [
        "C"
      ],
      "explanation": "编译程序是先完整编译后运行的程序，如 C、C++ 等；解释程序是逐句翻译且边翻译边执行的程序，如 JavaScript、Python 等。解释程序要边翻译成机器语言边执行，因此一般速度较编译程序慢。为增加对该过程的理解，附 C 语言编译链接的过程：\n\n源程序(.c) $\\xrightarrow{\\text{C编译器}}$ 汇编语言源程序 $\\xrightarrow{\\text{汇编程序}}$ 可重定位目标文件 $\\xrightarrow{\\text{链接程序}}$ 可执行文件",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-2-7_08",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "只有当程序执行时才将源程序翻译成机器语言，并且一次只能翻译一行语句，边翻译边执行的是（）程序，把汇编语言源程序转换为机器语言程序的过程是（）。 I. 编译 II. 目标 III. 汇编 IV. 解释",
      "options": {
        "A": "I、II",
        "B": "IV、II",
        "C": "IV、I",
        "D": "IV、III"
      },
      "answer": [
        "D"
      ],
      "explanation": "解释程序的特点是翻译一句执行一句，边翻译边执行；由高级语言转化为汇编语言的过程称为编译，把汇编语言源程序翻译成机器语言程序的过程称为汇编。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-2-7_09",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于各种级别语言的描述中，错误的是（）。",
      "options": {
        "A": "可用高级语言和低级语言编写出功能等价的程序",
        "B": "低级语言的执行效率一般情况下高于高级语言",
        "C": "机器语言源程序可在机器上直接执行，而高级语言和汇编语言源程序不可以",
        "D": "汇编语言与机器结构无关"
      },
      "answer": [
        "D"
      ],
      "explanation": "在不同的设备中，汇编语言对应着不同的机器语言指令集，通过汇编程序转换为机器指令。特定的汇编语言与特定的机器语言指令集是一一对应的，不同平台之间不可直接移植。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-2-7_10",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于机器指令和汇编指令的叙述中，错误的是（）。",
      "options": {
        "A": "可以直接用机器语言（机器指令）编写程序",
        "B": "汇编指令和机器指令都能被计算机直接执行",
        "C": "汇编语言和机器语言都与计算机系统结构相关",
        "D": "汇编指令和机器指令一一对应，功能相同"
      },
      "answer": [
        "B"
      ],
      "explanation": "计算机只能直接执行机器指令，而汇编指令需要通过汇编程序转换为机器指令才能被计算机直接执行。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-2-7_11",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2015 统考真题】计算机硬件能够直接执行的是（）。 I. 机器语言程序 II. 汇编语言程序 III. 硬件描述语言程序",
      "options": {
        "A": "仅 I",
        "B": "仅 I、II",
        "C": "仅 I、III",
        "D": "I、II、III"
      },
      "answer": [
        "A"
      ],
      "explanation": "硬件能直接执行的只能是机器语言（二进制编码），汇编语言是增强机器语言的可读性和记忆性的语言，经过汇编后才能被执行。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-2-7_12",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2016统考真题】将高级语言源程序转换为机器级目标代码文件的程序是（）。",
      "options": {
        "A": "汇编程序",
        "B": "链接程序",
        "C": "编译程序",
        "D": "解释程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "翻译程序是指把高级语言源程序转换为机器语言程序的软件。翻译程序有两种：一种是编译程序，它将源程序一次全部翻译成目标程序，并且会生成目标代码文件。另一种是解释程序，它将源程序的一条语句翻译成对应的机器目标代码，并立即执行，翻译一句执行一句，并且不会生成目标代码文件。汇编程序也是一种翻译程序，它把汇编语言源程序翻译为机器语言程序。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-2-7_13",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2019 统考真题】下列关于冯·诺依曼机基本思想的叙述中，错误的是（）。",
      "options": {
        "A": "程序的功能都通过中央处理器执行指令实现",
        "B": "指令和数据都用二进制数表示，形式上无差别",
        "C": "指令按地址访问，数据都在指令中直接给出",
        "D": "程序执行前，指令和数据需预先存放在存储器中"
      },
      "answer": [
        "C"
      ],
      "explanation": "冯·诺依曼机的功能部件包括输入设备、输出设备、存储器、运算器和控制器，程序的功能都通过中央处理器（运算器和控制器）执行指令，选项A正确。指令和数据以同等地位存放于存储器内，形式上无差别，只在程序执行时具有不同的含义，选项B正确。指令按地址访问，数据由指令的地址码指出，除立即寻址外，数据均存放在存储器内，选项C错误。在程序执行前，指令和数据需预先存放在存储器中，中央处理器可以从存储器存取代码，选项D正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-2-7_14",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.2.7",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2022统考真题】将高级语言源程序转换为可执行目标文件的主要过程是（）。",
      "options": {
        "A": "预处理→编译→汇编→链接",
        "C": "预处理→编译→链接→汇编",
        "B": "预处理→汇编→编译→链接",
        "D": "预处理→汇编→链接→编译"
      },
      "answer": [
        "A"
      ],
      "explanation": "将源程序转换为可执行目标文件的过程分为预处理、编译、汇编、链接四个阶段。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_05",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "某基准程序在机器 A 上运行的时间是 20s，而在机器 B 上运行的时间是 16s，那么相对来说，下列给出的结论中，（）是正确的。",
      "options": {
        "A": "所有程序在机器 A 上都比在机器 B 上运行速度慢",
        "B": "机器 B 的速度是机器 A 的 1.25 倍",
        "C": "机器 A 的速度是机器 B 的 1.25 倍",
        "D": "机器 A 比机器 B 慢 1.25 倍"
      },
      "answer": [
        "B"
      ],
      "explanation": "机器的速度与基准程序在该机器上的运行时间呈相反关系，因此可知：机器 B 的速度/机器 A 的速度 = 基准程序在机器 A 上的运行时间/基准程序在机器 B 上的运行时间 = $20s \\div 16s = 1.25$ 。因此，可以说，机器 B 的速度是机器 A 的 1.25 倍，或者机器 A 的速度是机器 B 的 0.8 倍。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_09",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "假定编译器对高级语言的某条语句可以编译生成两种不同的指令序列，A、B 和 C 三类指令的 CPI 和两种不同序列所含的三类指令条数如下表所示，两个指令序列都在时钟周期为 2ns 的机器上运行，则下列结论中正确的是（）。 <table><tr><td>指令类型</td><td>CPI</td><td>序列一的指令条数</td><td>序列二的指令条数</td></tr><tr><td>A</td><td>1</td><td>1</td><td>2</td></tr><tr><td>B</td><td>2</td><td>1</td><td>1</td></tr><tr><td>C</td><td>3</td><td>4</td><td>2</td></tr></table>",
      "options": {
        "A": "序列一的 MIPS 数比序列二多 50，序列一的执行速度比序列二快 10ns",
        "B": "序列一的 MIPS 数比序列二多 50，序列二的执行速度比序列一快 10ns",
        "C": "序列二的 MIPS 数比序列一多 50，序列一的执行速度比序列二快 10ns",
        "D": "序列二的 MIPS 数比序列一多 50，序列二的执行速度比序列一快 10ns"
      },
      "answer": [
        "D"
      ],
      "explanation": "MIPS = 主频÷(CPI×10 $^{6}$ )，主频 = 1/时钟周期 = 1/2ns = 500MHz，序列一的 CPI = (1×1 + 1×2 + 4×3)÷ 6 = 15÷6 = 2.5，序列二的 CPI = (2×1 + 1×2 + 2×3)÷5 = 10÷5 = 2，故序列一的 MIPS = 500×10 $^{6}$ ÷(2.5×10 $^{6}$ ) = 200，序列二的 MIPS = 500×10 $^{6}$ ÷(2×10 $^{6}$ ) = 250。CPU 执行时间 = 指令条数×CPI×时钟周期 = 程序的时钟周期数×时钟周期，序列一所需的时钟周期数是 15，序列二所需的时钟周期数是 10，所以序列一的执行时间为 15×2ns = 30ns，序列二的执行时间为 10×2ns = 20ns。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_10",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "用一台 40MHz 的 CPU 执行标准测试程序，共包含 100 条指令，它所包含的指令混合比和不同指令的 CPI 见下表。该段程序的平均 CPI 和程序的执行时间分别为（）。 <table><tr><td>指令类型</td><td>CPI</td><td>指令混合比</td><td>指令类型</td><td>CPI</td><td>指令混合比</td></tr><tr><td>算术和逻辑</td><td>1</td><td>60%</td><td>转移</td><td>4</td><td>12%</td></tr><tr><td>高速缓存命中的访存</td><td>2</td><td>18%</td><td>高速缓存失效的访存</td><td>8</td><td>10%</td></tr></table>",
      "options": {
        "A": "$2.26, 5.6 \\times 10^{-8}$ s",
        "B": "$2.26, 5.6 \\times 10^{-6}$ s",
        "C": "$2.24, 5.6 \\times 10^{-6}$ s",
        "D": "2.24, $5.6 \\times 10^{-8} \\mathrm{~s}$"
      },
      "answer": [
        "C"
      ],
      "explanation": "标准测试程序共包含 4 种指令，CPI 是这 4 种指令的数学期望，平均 CPI = 1×60% + 2×18% + 4×12% + 8×10% = 2.24。程序的执行时间 T = CPI×T\\_IC×I，其中 T\\_IC 是一个时钟周期（它是主频 f 的倒数），I 是指令条数，因此 T = CPI×T\\_IC×I = CPI×(1/f)×I = 5.6×10 $^{-6}$ s。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_11",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列给出了改善计算机性能的 4 种措施: I. 用更快的处理器来替换原来的慢速处理器 II. 增加同类处理器个数，使得不同的处理器同时执行程序 III. 优化编译生成的代码，使得程序执行的总时钟周期数减少 IV. 减少指令执行过程中的访存时间 对于某个特定的程序，在以上措施中，能缩短其执行时间的措施是（）。",
      "options": {
        "A": "I、II 和 III",
        "B": "I、II 和 IV",
        "C": "I、III 和 IV",
        "D": "全部"
      },
      "answer": [
        "D"
      ],
      "explanation": "采用更快的处理器，可以减少单条指令的执行时间；增加处理器的个数，可以增加程序执行的并行性，缩短程序的执行时间；优化编译代码，可以减少指令之间的各种冲突；访存时间占指令执行的大部分时间，减少访存时间同样可以大大加快指令的执行时间。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_12",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2010 统考真题】下列选项中，能缩短程序执行时间的措施是（）。 I. 提高 CPU 时钟频率 II. 优化数据通路结构 III. 对程序进行编译优化",
      "options": {
        "A": "仅 I 和 II",
        "B": "仅 I 和 III",
        "C": "仅Ⅱ和Ⅲ",
        "D": "I、II、III"
      },
      "answer": [
        "D"
      ],
      "explanation": "CPU 时钟频率（主频）越高，完成指令的一个执行步骤所用的时间就越短，执行指令的速度就越快，说法 I 正确。数据通路的功能是实现 CPU 内部的运算器和寄存器及寄存器之间的数据交换，优化数据通路结构，可以有效提高计算机系统的吞吐量，从而加快程序的执行，说法 II 正确。计算机程序需要先转化成机器指令序列才能最终得到执行，通过对程序进行编译优化可以得到更优的指令序列，从而使得程序的执行时间也越短，说法 III 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_13",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2011 统考真题】下列选项中，描述浮点数操作速度指标的是（）。",
      "options": {
        "A": "MIPS",
        "B": "CPI",
        "C": "IPC",
        "D": "MFLOPS"
      },
      "answer": [
        "D"
      ],
      "explanation": "MIPS 是每秒执行多少百万条指令，适用于衡量标量机的性能。CPI 是平均每条指令的时钟周期数。IPC 是 CPI 的倒数，即每个时钟周期执行的指令数。MFLOPS 是每秒执行多少百万条浮点数运算，用来描述浮点数运算速度，适用于衡量向量机的性能。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_14",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2012 统考真题】假定基准程序 A 在某计算机上的运行时间为 100s，其中 90s 为 CPU 时间，其余为 I/O 时间。若 CPU 速度提高 50%，I/O 速度不变，则运行基准程序 A 所耗费的时间是（）。",
      "options": {
        "A": "55s",
        "B": "60s",
        "C": "65s",
        "D": "70s"
      },
      "answer": [
        "D"
      ],
      "explanation": "程序 A 的运行时间为 100s，减去 CPU 时间 90s，剩余 10s 为 I/O 时间。CPU 提速 50% 后运行基准程序 A 所耗费的时间是 $T = 90 \\div 1.5 + 10 = 70s$ 。\n\n# 误区\n\nCPU 速度提高 50%，而误认为 CPU 时间减少一半，从而误选选项 A。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_15",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2013 统考真题】某计算机的主频为 1.2GHz，其指令分为 4 类，它们在基准程序中所占比例及 CPI 如下表所示。 <table><tr><td>指令类型</td><td>所占比例</td><td>CPI</td><td>指令类型</td><td>所占比例</td><td>CPI</td></tr><tr><td>A</td><td>50%</td><td>2</td><td>C</td><td>10%</td><td>4</td></tr><tr><td>B</td><td>20%</td><td>3</td><td>D</td><td>20%</td><td>5</td></tr></table> 该机的 MIPS 数是（）。",
      "options": {
        "A": "100",
        "B": "200",
        "C": "400",
        "D": "600"
      },
      "answer": [
        "C"
      ],
      "explanation": "基准程序的 $\\mathrm{CPI} = 2\\times 0.5 + 3\\times 0.2 + 4\\times 0.1 + 5\\times 0.2 = 3$ 。计算机的主频为 $1.2\\mathrm{GHz}$ ，即 $1200\\mathrm{MHz}$ ，因此该机器的MIPS $= 1200\\div 3 = 400$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_16",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2014 统考真题】程序 P 在机器 M 上的执行时间是 20s，编译优化后，P 执行的指令数减少到原来的 70%，而 CPI 增加到原来的 1.2 倍，则 P 在 M 上的执行时间是（）。",
      "options": {
        "A": "8.4s",
        "B": "11.7s",
        "C": "14s",
        "D": "16.8s"
      },
      "answer": [
        "D"
      ],
      "explanation": "假设原来的指令条数为 x，则原 CPI 为 20f/x（f 为 CPU 的时钟频率），经过编译优化后，指令条数减少到原来的 70%，即指令条数为 0.7x，而 CPI 增加到原来的 1.2 倍，即 24f/x，则现在程序 P 在机器 M 上的执行时间就为：(指令条数×CPI)/f = (0.7x×24×f/x)/f = 24×0.7 = 16.8s。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_17",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2017 统考真题】假定计算机 M1 和 M2 具有相同的指令集体系结构（ISA），主频分别为 1.5GHz 和 1.2GHz。在 M1 和 M2 上运行某基准程序 P，平均 CPI 分别为 2 和 1，则程序 P 在 M1 和 M2 上运行时间的比值是（）。",
      "options": {
        "A": "0.4",
        "B": "0.625",
        "C": "1.6",
        "D": "2.5"
      },
      "answer": [
        "C"
      ],
      "explanation": "运行时间 = 指令数×CPI/主频。M1 的时间 = 指令数×2/1.5，M2 的时间 = 指令数×1/1.2，两者之比为(2/1.5):(1/1.2)=1.6。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_18",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2021 统考真题】2017 年公布的全球超级计算机 TOP 500 排名中，我国 “神威·太湖之光” 超级计算机蝉联第一，其浮点运算速度为 93.0146 PFLOPS，说明该计算机每秒完成的浮点操作次数约为（）。",
      "options": {
        "A": "$9.3 \\times 10^{13}$ 次",
        "B": "$9.3 \\times 10^{15}$ 次",
        "C": "9.3 千万亿次",
        "D": "9.3 亿亿次"
      },
      "answer": [
        "D"
      ],
      "explanation": "PFLOPS = 每秒千万亿（ $10^{15}$ ）次浮点运算。故 93.0146 PFLOPS ≈ 每秒 $9.3 \\times 10^{16}$ 次浮点运算，即每秒 9.3 亿亿次浮点运算。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_19",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2022 统考真题】某计算机主频为 1GHz，程序 P 运行过程中，共执行了 10000 条指令，其中，80% 的指令执行平均需 1 个时钟周期，20% 的指令执行平均需 10 个时钟周期。程序 P 的平均 CPI 和 CPU 执行时间分别是（）。",
      "options": {
        "A": "2.8, 28μs",
        "B": "28, 28μs",
        "C": "2.8, 28ms",
        "D": "28, 28ms"
      },
      "answer": [
        "A"
      ],
      "explanation": "CPI 指平均每条指令的执行需要多少个时钟周期。80%的指令执行平均需要 1 个时钟周期，20%的指令执行平均需要 10 个时钟周期，因此 $CPI = 80\\% \\times 1 + 20\\% \\times 10 = 2.8$ 。计算机主频为 1GHz，程序 P 共执行 10000 条指令，平均每条指令需要 2.8 个时钟周期，因此，CPU 执行时间 $(10000 \\times 2.8) \\div 10^{9} = 2.8 \\times 10^{-5} \\, \\text{s} = 28 \\mu\\text{s}$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_1-3-2_20",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "计算机系统概述",
      "section": "1.3.2",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2023 统考真题】若机器 M 的主频为 1.5GHz，在 M 上执行程序 P 的指令条数为 $5 \\times 10^{5}$ ，P 的平均 CPI 为 1.2，则 P 在 M 上的指令执行速度和用户 CPU 时间分别为（）。",
      "options": {
        "A": "0.8GIPS, 0.4ms",
        "B": "0.8GIPS, 0.4μs",
        "C": "1.25GIPS, 0.4ms",
        "D": "1.25GIPS, 0.4 $\\mu$ s"
      },
      "answer": [
        "C"
      ],
      "explanation": "程序 P 的指令条数为 $5 \\times 10^{5}$ ，平均 CPI 为 1.2，程序 P 的总时钟周期数为 $5 \\times 10^{5} \\times 1.2 = 6 \\times 10^{5}$ ，主频 1.5GHz 说明 1s 有 $1.5G = 1.5 \\times 10^{9}$ 个时钟周期，故指令执行速度 = 主频/平均 CPI = $1.5 \\times 10^{9} \\div 1.2 = 1.25GIPS$ ，用户 CPU 时间 $= 6 \\times 10^{5} \\div (1.5 \\times 10^{9})s = 4 \\times 10^{-4}s = 0.4ms$ 。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch01-第1章-计算机系统概述.md"
    },
    {
      "id": "计算机组成原理_2-1-5_05",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "若 $[X]_{补}=1.1101010$ ，则 $[X]_{原}=(\\quad)$ 。",
      "options": {
        "A": "1.0010101",
        "B": "1.0010110",
        "C": "0.0010110",
        "D": "0.1101010"
      },
      "answer": [
        "A"
      ],
      "explanation": "ALU 是一种功能较强的组合逻辑电路，能够执行多种算术与逻辑运算。其中，加法和减法由带标志加法器直接完成；乘法和除法则通常通过 ALU 配合控制逻辑，以多次加减和移位的方式迭代实现。此外，ALU 还能执行与、或、非等基本逻辑运算。其基本结构如图 2.7 所示：A 和 B 为两个 n 位操作数输入端， $C_{in}$ 为进位输入端，ALUop 为操作控制信号，用于选择 ALU 执行的具体功能。例如，当 ALUop 选择加法（Add）时，ALU 输出 $A + B + C_{in}$ 。ALUop 的位数决定了可支持的操作种类数量。例如，3 位 ALUop 最多可支持 8 种不同操作。\n\n图 2.8 展示了一位 ALU 的结构，可完成 “与” “或” “加法” 三种操作。其中，加法由一个全加器实现，逻辑运算由专用门电路并行计算，最终通过多路选择器（MUX）根据 ALUop 选择输出结果。由于有 3 种操作，ALUop 至少需要 2 位。\n\n![](images/adcc41ec823d0006544b71f84e3a3ae5cc53f08470b0024f2220ea04ff694ab3.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"A\"] -->|n| ALU[\"ALU\"]\n    B[\"B\"] -->|n| ALU\n    ALU --> ZF[\"ZF\"]\n    ALU --> OF[\"OF\"]\n    ALU --> SF[\"SF\"]\n    ALU --> CF[\"CF\"]\n    ALU --> Cout[\"Cout\"]\n    ALU --> Cin[\"Cin\"]\n    ALU --> s[\"s\"]\n    ALU --> s\n```\n</details>\n\n图 2.7 ALU 的基本结构\n\n![](images/a141e6032c5f53a04a111204ebc30ef45c3915ae7fcf15752e3b5d434dbc8d6b.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"A\"] --> AND1[\"AND\"]\n    B[\"B\"] --> AND2[\"AND\"]\n    AND1 --> OR1[\"OR\"]\n    AND2 --> OR2[\"OR\"]\n    OR1 --> MUX[\"MUX\"]\n    OR2 --> MUX\n    MUX --> F[\"F\"]\n    C_in[\"C_in\"] --> AND1\n    C_in --> AND2\n    C_in --> AND3[\"AND\"]\n    C_in --> AND4[\"AND\"]\n    C_in --> AND5[\"AND\"]\n    C_in --> AND6[\"AND\"]\n    C_in --> AND7[\"AND\"]\n    C_in --> AND8[\"AND\"]\n    C_in --> AND9[\"AND\"]\n    C_in --> AND10[\"AND\"]\n    C_in --> AND11[\"AND\"]\n    C_in --> AND12[\"AND\"]\n    C_in --> AND13[\"AND\"]\n    C_in --> AND14[\"AND\"]\n    C_in --> AND15[\"AND\"]\n    C_in --> AND16[\"AND\"]\n    C_in --> AND17[\"AND\"]\n    C_in --> AND18[\"AND\"]\n    C_in --> AND19[\"AND\"]\n    C_in --> AND20[\"AND\"]\n    C_in --> AND21[\"AND\"]\n    C_in --> AND22[\"AND\"]\n    C_in --> AND23[\"AND\"]\n    C_in --> AND24[\"AND\"]\n    C_in --> AND25[\"AND\"]\n    C_in --> AND26[\"AND\"]\n    C_in --> AND27[\"AND\"]\n    C_in --> AND28[\"AND\"]\n    C_in --> AND29[\"AND\"]\n    C_in --> AND30[\"AND\"]\n    C_in --> AND31[\"AND\"]\n    C_in --> AND32[\"AND\"]\n    C_in --> AND33[\"AND\"]\n    C_in --> AND34[\"AND\"]\n    C_in --> AND35[\"AND\"]\n    C_in --> AND36[\"AND\"]\n    C_in --> AND37[\"AND\"]\n    C_in --> AND38[\"AND\"]\n    C_in --> AND39[\"AND\"]\n    C_in --> AND40[\"AND\"]\n    C_in --> AND41[\"AND\"]\n    C_in --> AND42[\"AND\"]\n    C_in --> AND43[\"AND\"]\n    C_in --> AND44[\"AND\"]\n    C_in --> AND45[\"AND\"]\n    C_in --> AND46[\"AND\"]\n    C_in --> AND47[\"AND\"]\n    C_in --> AND48[\"AND\"]\n    C_in --> AND49[\"AND\"]\n    C_in --> AND50[\"AND\"]\n    C_in --> AND51[\"AND\"]\n    C_in --> AND52[\"AND\"]\n    C_in --> AND53[\"AND\"]\n    C_in --> AND54[\"AND\"]\n    C_in --> AND55[\"AND\"]\n    C_in --> AND56[\"AND\"]\n    C_in --> AND57[\"AND\"]\n    C_in --> AND58[\"AND\"]\n    C_in --> AND59[\"AND\"]\n    C_in --> AND60[\"AND\"]\n    C_in --> AND61[\"AND\"]\n    C_in --> AND62[\"AND\"]\n    C_in --> AND63[\"AND\"]\n    C_in --> AND64[\"AND\"]\n    C_in --> AND65[\"AND\"]\n    C_in --> AND66[\"AND\"]\n    C_in --> AND67[\"AND\"]\n    C_in --> AND68[\"AND\"]\n    C_in --> AND69[\"AND\"]\n    C_in --> AND70[\"AND\"]\n    C_in --> AND71[\"AND\"]\n    C_in --> AND72[\"AND\"]\n    C_in --> AND73[\"AND\"]\n    C_in --> AND74[\"AND\"]\n    C_in --> AND75[\"AND\"]\n    C_in --> AND76[\"AND\"]\n    C_in --> AND77[\"AND\"]\n    C_in --> AND78[\"AND\"]\n    C_in --> AND79[\"AND\"]\n    C_in --> AND80[\"AND\"]\n    C_in --> AND81[\"AND\"]\n    C_in --> AND82[\"AND\"]\n    C_in --> AND83[\"AND\"]\n    C_in --> AND84[\"AND\"]\n    C_in --> AND85[\"AND\"]\n    C_in --> AND86[\"AND\"]\n    C_in --> AND87[\"AND\"]\n    C_in --> AND88[\"AND\"]\n    C_in --> AND89[\"AND\"]\n    C_in --> AND90[\"AND\"]\n    C_in --> AND91[\"AND\"]\n    C_in --> AND92[\"AND\"]\n    C_in --> AND93[\"AND\"]\n    C_in --> AND94[\"AND\"]\n    C_in --> AND95[\"AND\"]\n    C_in --> AND96[\"AND\"]\n    C_in --> AND97[\"AND\"]\n    C_in --> AND98[\"AND\"]\n    C_in --> AND99[\"AND\"]\n    C_in --> AND100[\"MUX\"] --> MUX\n```\n</details>\n\n图 2.8 一位 ALU 结构图",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_06",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "若 X 为负数，则由 $[X]_{补}$ 求 $[-X]_{补}$ 是将（）。",
      "options": {
        "A": "$[X]_{\\text{补}}$ 各值保持不变",
        "B": "$[X]_{补}$ 符号位变反，其他各位不变",
        "C": "$[X]_{补除符号位外}$ ，各位变反，末位加1",
        "D": "$[X]_{\\text{补}}$ 连同符号位一起变反，末位加1"
      },
      "answer": [
        "D"
      ],
      "explanation": "不论 X 是正数还是负数，由 $[X]_{补}$ 求 $[-X]_{补}$ 的方法是连同符号位一起，每位取反，末位加 1。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_07",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "8位原码能表示的不同数据有（）个。",
      "options": {
        "A": "15",
        "B": "16",
        "C": "255",
        "D": "256"
      },
      "answer": [
        "C"
      ],
      "explanation": "8 个二进制位有 $2^{8} = 256$ 种不同表示。原码中 0 有两种表示，因此原码能表示的不同数据为 $2^{8} - 1 = 255$ 个。0 在反码中也有两种表示，因此若题目改为反码，答案也为选项 C。0 在补码与移码中只有一种表示，因此题目若改为补码或移码，答案为选项 D。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_08",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "一个 $n + 1$ 位整数 $x$ 原码的数值范围是（）。",
      "options": {
        "A": "$-2^{n} + 1 <   x <   2^{n} - 1$",
        "B": "$-2^{n} + 1\\leqslant x <   2^{n} - 1$",
        "C": "$-2^{n}+1<x\\leqslant2^{n}-1$",
        "D": "$-2^{n}+1 \\leqslant x \\leqslant 2^{n}-1$"
      },
      "answer": [
        "D"
      ],
      "explanation": "$n+1$ 位整数原码的表示范围为 $-2^{n}+1\\leqslant x\\leqslant2^{n}-1$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_09",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "若定点整数为 64 位，含 1 位符号位，则采用补码表示的绝对值最大的负数为（）。",
      "options": {
        "A": "$-2^{64}$",
        "B": "$-(2^{64}-1)$",
        "C": "$-2^{63}$",
        "D": "$-(2^{63}-1)$"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于长度为 $n + 1$ （含1位符号位）定点整数 $x$ ，用补码表示时， $x_{\\text{绝对值最大负数}} = -2^n$ ，其中 $n = 63$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_10",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于补码和移码关系的叙述中，（）是不正确的。",
      "options": {
        "A": "相同位数的补码和移码表示具有相同的数据表示范围",
        "B": "0 的补码和移码表示相同",
        "C": "同一个数的补码和移码表示，其数值部分相同，而符号位相反",
        "D": "一般用移码表示浮点数的阶码，而补码表示定点整数"
      },
      "answer": [
        "B"
      ],
      "explanation": "以机器字长 5 位为例， $[0]_{补}=00000,\\quad[0]_{移}=2^{4}+0=10000,\\quad[0]_{补}\\neq[0]_{移}$ ，表示不相同，但在补码或移码中的表示形式是唯一的。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_11",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "若 $[x]_{\\text{补}} = 1, x_1 x_2 x_3 x_4 x_5 x_6$ ，其中 $x_i$ 取 0 或 1，若要 $x > -32$ ，应当满足（）。",
      "options": {
        "A": "$x_{1}$ 为 0，其他各位任意",
        "B": "$x_{1}$ 为1，其他各位任意",
        "C": "$x_{1}$ 为 1, $x_{2}\\cdots x_{6}$ 中至少有一位为 1",
        "D": "$x_{1}$ 为 0, $x_{2}\\cdots x_{6}$ 中至少有一位为 1"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于此类题型，先写出特定值的机器码表示，然后根据机器数判断大小的规则来推导数值位的特点（若条件允许，也可以取特殊值来推断）。-32 的补码为 1,100000，根据负数补码判断大小的规则：数值位部分越小，其绝对值越大，即负得越多。因此，若要 x > -32，数值位 $x_{1}x_{2}x_{3}x_{4}x_{5}x_{6}$ 需大于 100000，即 $x_{1}$ 必须为 1，而 $x_{2}\\ldots x_{6}$ 中至少有一位为 1。\n\n【特殊值法】对于选项 A，取 1,000000，真值为 -64，错误。对于选项 B，取 1,100000，真值为 -32，错误。对于选项 C，取 1,100001，真值为 -31，符合。对于选项 D，取 1,000001，真值为 -63，错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_12",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "设 $x$ 为整数， $[x]_{\\text{补}} = 1, x_1 x_2 x_3 x_4 x_5$ ，若要 $x < -16$ ， $x_1 \\sim x_5$ 应满足的条件是（）。",
      "options": {
        "A": "$x_{1} \\sim x_{5}$ 至少有一个为 1",
        "B": "$x_{1}$ 必须为0， $x_{2} \\sim x_{5}$ 至少有一个为1",
        "C": "$x_{1}$ 必须为 0, $x_{2} \\sim x_{5}$ 任意",
        "D": "$x_{1}$ 必须为 1， $x_{2} \\sim x_{5}$ 任意"
      },
      "answer": [
        "C"
      ],
      "explanation": "解题思路与上题类似（也可采用特殊值解法，请读者自行思考），-16的补码为1,10000，根据负数补码判断大小的规则：数值位部分越小，其绝对值越大，即负得越多。因此，若要x<-16，数值位 $x_{1}x_{2}x_{3}x_{4}x_{5}$ 需小于10000，即 $x_{1}$ 必为0，而 $x_{2}\\sim x_{5}$ 任意。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_13",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "设 x 为真值， $x^{*}$ 为其绝对值，满足 $[-x^{*}]_{补}=[-x]_{补}$ ，当且仅当（）。",
      "options": {
        "A": "x 任意",
        "B": "$x$ 为正数",
        "C": "$x$ 为负数",
        "D": "以上说法都不对"
      },
      "answer": [
        "D"
      ],
      "explanation": "当 x 为 0 或为正数时，满足 $[-x^{*}]_{补} = [-x]_{补}$ ，B 为充分条件，因此选项 B 错误。而 x 为负数时，-x 为正数，而 $-x^{*}$ 为负数，补码的表示是唯一的，显然二者不等，因此选项 C 错误。\n\n14. B\n\nx = -66 用二进制数表示， $[x]_{原} = 11000010$ ，则有 $[x]_{补} = 10111110 = BEH$ 。\n\n15. C\n\n$9\\mathrm{BH}=(1001\\ 1011)_{2}$ ，最高位的1表示负数，所以其真值为 $(11100101)_{2}=-(64+32+4+1)=-101$ 。\n\n16. A\n\n值等于-0说明只可能是原码或反码(因为补码和移码表示0时是唯一的,没有+0和-0之分), $[-0]_{原}=10000000,\\quad[-0]_{反}=11111111$ 。\n\n17. D\n\n这里寄存器长度为8， $[+127]_{\\text{原}} = [+127]_{\\text{反}} = [+127]_{\\text{补}} = 01111111$ ，又知同一数值的移码和补码除最高位相反外，其他各位相同，则 $[+127]_{\\text{移}} = 11111111$ 或 $[+127]_{\\text{移}} = 2^7 + 01111111 = 11111111$ 。\n\n18. B\n\n这里寄存器长度为 8， $[-1]_{补}=[10000001]_{补}=11111111$ 。\n\n19. D\n\n这里寄存器长度为 8， $[-128]_{移}=2^{7}+(-10000000)=00000000$ 。\n\n20. C\n\n真值-0.1101，对应的原码表示为1.1101，补码表示为1.0011，反码表示为1.0010，移码通常用于表示阶码，不用来表示定点小数。\n\n21. B\n\n选项 B 对应 8 位最小的值 -128，而 -x = 128 发生溢出，因此无法表示其移码。\n\n22. A\n\n当采用补码表示时，要使得数值最大，就要让符号位为0，且把“1”放在高位，得到的补码为0111 1110B = 126；要使得数值最小，就要让符号位为1，且把“1”放在低位，得到的补码为1001 1111B = -97。当采用移码表示时，设偏置值为128，要使得数值最大，就要把“1”放在高位，得到的移码为1111 1100B - 1000 0000B = 252 - 128 = 124；设偏置值为127，要使得数值最小，则应把“1”放在低位，得到的移码为0011 1111B - 0111 1111B = 1100 0000B = -64，选项A正确。\n\n23. A\n\n在 8 位补码中，符号位为最高位。要使数值最大，符号位为 0，其余位中将两个 “1” 尽可能置于高位，最大值为 0110 0000 = 96。要使数值最小，符号位为 1，此时需要将另一个 “1” 置于最低位（其余为 0），得最小补码为 1000 0001 = -127。二者之差为 $96 - (-127) = 223$ 。\n\n24. D\n\n$[+0]_{\\text{补}}$ 和 $[-0]_{\\text{补}}$ 是相同的，所以说法I正确。在进行补码定点数的加减运算时，符号位作为数的一部分参加运算，说法II正确， $[A]_{\\text{补}} - [B]_{\\text{补}} = [A]_{\\text{补}} + [-B]_{\\text{补}}$ ，即将减法采用加法实现，说法IV正确。实际上，补码和其真值的对应关系远不如原码和其真值的对应关系简单直观，说法III错误。\n\n25. D\n\n主存地址都是正数，因此不需要符号位，即直接采用无符号数表示。\n\n26. B\n\n16 位扩展为 32 位，符号位不变，附加位是符号位的扩展。该数是一个负数，需用 1 来填补。A 是一个正数，C 的数值位发生变化，D 用 0 来填充附加位，均不正确。\n\n27. B\n\n将一个 16 位 unsigned short 型数转换为 32 位 unsigned int 型数时，因为都是无符号数，新表示形式的高位用 0 填充。16 位无符号整数所能表示的最大值为 65535，其十六进制表示为 FFFFH，因此 x 的十六进制表示为 FFFFH - 5H = FFFAH，所以 y 的十六进制表示为 0000 FFFAH。\n\n排除法：先直接排除 C、D，然后分析余下选项的特征。A、B 的值相差几乎近 1 倍，因此可以算出 0001 0000H（接近 B 且好算的数）的值后，再推断出答案。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_28",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2015 统考真题】由 3 个 “1” 和 5 个 “0” 组成的 8 位二进制补码，能表示的最小整数是（）。",
      "options": {
        "A": "-126",
        "B": "-125",
        "C": "-32",
        "D": "-3"
      },
      "answer": [
        "B"
      ],
      "explanation": "原码很容易判断大小。而负数的补码很难直接判断大小，可采用如下规则快速判断：对于负数，数值位部分越小，其绝对值越大，即负得越多。采用补码整数表示时，负数的符号位为1，因此剩下的两个“1”放在末位时其值最小，补码形式为1000 0011，转换为真值为-125。此外，考虑负数的补码转换为原码的方法，从右向左找到第一个数值为1的位，之后的每位进行取反操作，符号位不变，不难发现，当符号位为1，剩下的两个“1”放在末位时，补码的绝对值最大。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_29",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2016 统考真题】有如下 C 语言程序段: ```txt short si = -32767; unsigned short usi = si; ``` 执行上述两条语句后，usi 的值为（）。",
      "options": {
        "A": "-32767",
        "B": "32767",
        "C": "32768",
        "D": "32769"
      },
      "answer": [
        "D"
      ],
      "explanation": "因 C 语言中的数据在内存中为补码表示形式，si 对应的补码为 1000 0000 0000 0001B，最前面的一位 “1” 为符号位，表示负数，即 -32767。由 signed 型数转换为等长的 unsigned 型数时，符号位成为数据的一部分，即负数转换为无符号数（正数）时，其数值将发生变化。usi 对应的补码与 si 的相同，但表示正数，为 32769。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_30",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2018 统考真题】冯·诺依曼结构计算机中的数据采用二进制编码表示，其主要原因是（）。 I. 二进制的运算规则简单 II. 制造两个稳态的物理器件较容易 III. 便于用逻辑门电路实现算术运算",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III",
        "C": "仅 II、III",
        "D": "I、II 和 III"
      },
      "answer": [
        "D"
      ],
      "explanation": "对于说法 I，二进制只有 0 和 1 两种数值，运算规则较简单，都通过 ALU 转换为加法运算。对于说法 II，二进制数只需要高电平和低电平两个状态就可表示，这样的物理器件很容易制造。对于说法 III，二进制数与逻辑量相吻合。二进制的 0 和 1 正好与逻辑量的 “真” 和 “假” 相对应，因此用二进制数表示二值逻辑显得十分自然，采用逻辑门电路很容易实现运算。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_31",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2019 统考真题】考虑以下 C 语言代码: ```txt unsigned short usi = 65535; short si = usi; ``` 执行上述程序段后，si 的值是（）。",
      "options": {
        "A": "-1",
        "B": "-32767",
        "C": "-32768",
        "D": "-65535"
      },
      "answer": [
        "A"
      ],
      "explanation": "unsigned short 型为无符号短整型，长度为 2 字节，因此 unsigned short usi 型转换为二进制代码即 1111 1111 1111 1111。short 型为短整型，长度为 2 字节，在采用补码的机器上，short si 的二进制代码为 1111 1111 1111 1111，因此 si 的值为 -1。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_32",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2021 统考真题】已知有符号整数用补码表示，变量 $x, y, z$ 的机器数分别为 FFFDH, FFDFH, 7FFCH，下列结论中，正确的是（）。",
      "options": {
        "A": "若 x, y 和 z 为无符号整数，则 z < x < y",
        "B": "若 x, y 和 z 为无符号整数，则 x < y < z",
        "C": "若 x, y 和 z 为有符号整数，则 x < y < z",
        "D": "若 x, y 和 z 为有符号整数，则 y < x < z"
      },
      "answer": [
        "D"
      ],
      "explanation": "若 x, y 和 z 均为无符号整数，则 x > y > z，选项 A 和 B 错误。若 x, y 和 z 均为有符号整数，补码的最高位是符号位，0 表示正数，1 表示负数，因此 z 为正数，而 x 和 y 为负数。对于 x 和 y 的比较，数值位取反加 1，可知 x = -3，y = -33，所以 x > y。选项 D 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_33",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2022 统考真题】32 位补码所能表示的整数范围是（）。",
      "options": {
        "A": "$-2^{32}\\sim2^{31}-1$",
        "B": "$-2^{31}\\sim2^{31}-1$",
        "C": "$-2^{32} \\sim 2^{32} - 1$",
        "D": "$-2^{31}\\sim2^{32}-1$"
      },
      "answer": [
        "B"
      ],
      "explanation": "n 位补码整数的最小值是 $1,00\\ldots0(-2^{n-1})$ ；最大值是 $0,11\\ldots1(2^{n-1}-1)$ 。n 位补码整数所能表示的范围是 $-2^{n-1}\\sim2^{n-1}-1$ ，32 位补码整数所能表示的范围是 $-2^{31}\\sim2^{31}-1$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-1-5_34",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.1.5",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2025 统考真题】在 32 位计算机上执行下列 C 语言代码段后，ui 的值是（）。 ```txt short si = -32767; unsigned int ui = si; ```",
      "options": {
        "A": "$2^{15} - 1$",
        "B": "$2^{15} + 1$",
        "C": "$2^{32}-2^{15}-1$",
        "D": "$2^{32}-2^{15}+1$"
      },
      "answer": [
        "D"
      ],
      "explanation": "在 32 位系统中，short 通常为 16 位有符号整数。-32767 的 16 位补码为 1000 0000 0000 0001。将其赋值给 32 位 unsigned int 时，先按符号扩展转换为 32 位有符号整数 1111 1111 1111 1111 1000 0000 0000 0001，再以无符号方式解释，其值为 $2^{32} - (2^{15} - 1) = 2^{32} - 2^{15} + 1$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_06",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "两个机器数 7E5H 和 4D3H 相加，得（）。",
      "options": {
        "A": "BD8H",
        "B": "CD8H",
        "C": "CB8H",
        "D": "CC8H"
      },
      "answer": [
        "C"
      ],
      "explanation": "在十六进制数的加减法中，逢十六进一，因此有 $7E5\\ H + 4D3\\ H = CB8\\ H$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_07",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "设机器数字长为 8 位（含 1 位符号位），若机器数 BAH 为补码，算术左移 1 位和算术右移 1 位分别得（）。",
      "options": {
        "A": "F4H, EDH",
        "B": "B4H, 6DH",
        "C": "74H, DDH",
        "D": "B5H, EDH"
      },
      "answer": [
        "C"
      ],
      "explanation": "算术左移时，低位补0；算术右移时，高位补符号位。 $\\mathrm{BAH}=(1011\\ 1010)_{2}$ ，算术左移1位得 $(0111\\ 0100)_{2}=74\\mathrm{H}$ ，左移前后的符号位不同，溢出；算术右移1位得 $(1101\\ 1101)_{2}=DDH$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_08",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "在定点运算器中，无论是采用双符号位还是采用单符号位，必须有（）。",
      "options": {
        "A": "译码电路，它一般用“与非”门来实现",
        "B": "编码电路，它一般用“或非”门来实现",
        "C": "溢出判断电路，它一般用“异或”门来实现",
        "D": "移位电路，它一般用“与或非”门来实现"
      },
      "answer": [
        "C"
      ],
      "explanation": "三种溢出判别方法，均须有溢出判别电路，可用“异或”门来实现。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_09",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "机器运算发生溢出的根本原因是（）。",
      "options": {
        "A": "寄存器的位数有限",
        "B": "运算中将符号位的进位丢弃",
        "C": "运算中将符号位的借位丢弃",
        "D": "数据运算中发生错误"
      },
      "answer": [
        "A"
      ],
      "explanation": "机器运算发生溢出的根本原因是计算机的字长有限，所以不能表示超过一定范围的数据。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_10",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "假定有两个整数用 8 位补码分别表示为 $r_{1}=F5H$ , $r_{2}=EEH$ 。若将运算结果存放在一个 8 位寄存器中，则下列运算会发生溢出的是（）。",
      "options": {
        "A": "$r_{1} + r_{2}$",
        "B": "$r_{1}-r_{2}$",
        "C": "$r_{1} \\times r_{2}$",
        "D": "$r_{1}/r_{2}$"
      },
      "answer": [
        "C"
      ],
      "explanation": "首先将 $r_{1}$ 和 $r_{2}$ 转换为真值，F5H = 11110101，转换为原码是 10001011，真值为 -11；EEH = 11101110，转换为原码是 10010010，真值为 -18，8 位补码的表示范围为 [-128, 127]， $r_{1} \\times r_{2}$ 的结果为 198，超出了 8 位补码的表示范围，发生溢出。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_11",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "关于模 4 补码，下列说法正确的是（）。",
      "options": {
        "A": "模 4 补码和模 2 补码不同，它不容易检查乘除运算中的溢出问题",
        "B": "每个模 4 补码存储时只需要一个符号位",
        "C": "存储每个模 4 补码需要两个符号位",
        "D": "模 4 补码，在算术与逻辑单元中为一个符号位"
      },
      "answer": [
        "B"
      ],
      "explanation": "模 4 补码具有模 2 补码的全部优点且更易检查加减运算中的溢出问题，选项 A 错误。需要注意的是，存储模 4 补码仅需一个符号位，因为任何一个正确的数值，模 4 补码的两个符号位总是相同的，选项 B 正确。只在把两个模 4 补码的数送往 ALU 完成加减运算时，才把每个数的符号位的值同时送到 ALU 的双符号位中，即只在 ALU 中采用双符号位，选项 C、D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_12",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "若采用双符号位，则两个正数相加产生溢出的特征时，双符号位为（）。",
      "options": {
        "A": "00",
        "B": "01",
        "C": "10",
        "D": "11"
      },
      "answer": [
        "B"
      ],
      "explanation": "采用双符号位时，第一符号位表示最终结果的符号，第二符号位表示运算结果是否溢出。若第二位和第一位符号相同，则未溢出；若不同，则溢出。若发生正溢出，则双符号位为01，若发生负溢出，则双符号位为10。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_13",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "判断加减法溢出时，可采用判断进位的方式，若符号位的进位为 $C_{0}$ ，最高位的进位为 $C_{1}$ ，则产生溢出的条件是（）。 I. $C_{0}$ 产生进位 II. $C_{1}$ 产生进位 III. $C_{0}$ 、 $C_{1}$ 都产生进位 IV. $C_0$ 、 $C_1$ 都不产生进位 V. $C_{0}$ 产生进位， $C_{1}$ 不产生进位 VI. $C_{0}$ 不产生进位， $C_{1}$ 产生进位",
      "options": {
        "A": "I 和 II",
        "B": "III",
        "C": "IV",
        "D": "V 和 VI"
      },
      "answer": [
        "D"
      ],
      "explanation": "采用进位位来判断溢出时，当最高有效位进位和符号位进位的值不相同时才产生溢出。两正数相加，当最高有效位产生进位（ $C_{1}=1$ ）而符号位不产生进位（ $C_{0}=0$ ）时，发生正溢出；两负数相加，当最高有效位不产生进位（ $C_{1}=0$ ）而符号位产生进位（ $C_{0}=1$ ）时产生负溢出。因此溢出条件为 $\\overline{C_{0}}C_{1}+C_{0}\\overline{C_{1}}=C_{0}\\oplus C_{1}$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_14",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "在补码的加减法中，用两位符号位判断溢出，两位符号位 $S_{s1}S_{s2}=10$ 时，表示（）。",
      "options": {
        "A": "结果为正数，无溢出",
        "B": "结果正溢出",
        "C": "结果负溢出",
        "D": "结果为负数，无溢出"
      },
      "answer": [
        "C"
      ],
      "explanation": "用两位符号位判断溢出时，两个符号位不同时表示溢出，即 01 时表示正溢出；10 时表示负溢出；两个符号位相同时（11 或 00）表示未溢出。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_15",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "若 $[X]_{补}=X_{0}.X_{1}X_{2}\\cdots X_{n}$ ，其中 $X_{0}$ 为符号位， $X_{1}$ 为最高数位。若（），则当补码算术左移时，将会发生溢出。",
      "options": {
        "A": "$X_{0}=X_{1}$",
        "B": "$X_{0} \\neq X_{1}$",
        "C": "$X_{1}=0$",
        "D": "$X_{1}=1$"
      },
      "answer": [
        "B"
      ],
      "explanation": "补码左移时，若移出的高位不同于移位后的符号位，即左移前后的符号位不同，则发生溢出。补码左移时， $X_{0}$ 移出， $X_{1}$ 取代 $X_{0}$ 成为新的符号位，因此若 $X_{0} \\neq X_{1}$ ，则表示发生了溢出。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_16",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "假设一次 ALU 运算和一次移位操作各需 1 个时钟周期，则 32 位无符号整数乘法电路完成一次乘法运算所需的时钟周期数约为（）。",
      "options": {
        "A": "16",
        "B": "64",
        "C": "96",
        "D": "100"
      },
      "answer": [
        "B"
      ],
      "explanation": "32 位无符号乘法通常采用“移位-相加”算法，共进行 32 轮迭代，每轮至少包含 1 次加法（或空操作）和 1 次移位。每轮消耗 2 个时钟周期（加法 + 移位），共需约 $32 \\times 2 = 64$ 个时钟周期。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_17",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "下列关于移位运算的说法中，正确的是（）。 I. 补码算术左移时，高位移出，低位补0，若左移前后的符号位不同，则发生溢出 II. 无符号数逻辑左移时，若最高位移出的是1，则发生溢出 III. 逻辑左移和补码算术左移的结果都一样，都是移出最高位，并在低位补0",
      "options": {
        "A": "I、III",
        "B": "仅 II",
        "C": "只有 III",
        "D": "I、II、III"
      },
      "answer": [
        "D"
      ],
      "explanation": "对于左移操作，逻辑左移和算术左移的结果都一样，高位移出，低位补0。逻辑移位不考虑符号位的问题，逻辑左移时，若最高位移出的是1，表示发生溢出。算术左移时，若移出的高位不同于移位后的符号位，即左移前后的符号位不同，表示发生溢出。因此说法I、II、III均正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_18",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "某计算机字长为 8 位，CPU 中有一个 8 位加法器。已知无符号数 x=69, y=38，若在该加法器中计算 x-y，则加法器的两个输入端信息和输入的低位进位信息分别为（）。",
      "options": {
        "A": "0100 0101、0010 0110、0",
        "B": "0100 0101、1101 1001、1",
        "C": "0100 0101、1101 1010、0",
        "D": "0100 0101、1101 1010、1"
      },
      "answer": [
        "B"
      ],
      "explanation": "不管是补码减法，还是无符号数减法，都是用被减数加上减数的负数的补码来实现的。根据求补公式，减数 y 的负数的补码 $[-y]_{补} = \\overline{Y} + 1$ ，因此，在加法器的 $Y'$ 输入端用一个反向器实现，并用控制端 Sub 控制多路选择器是否将 y 的各位取反后，输入 $Y'$ 端，同时将 Sub 作为低位进位送到加法器。当 Sub 为 1 时，做减法，Sub = 1 控制将 $\\overline{Y}$ 输入加法器 $Y'$ 端，即实现“各位取反”功能；同时将 Sub = 1 作为低位进位送到加法器，实现“末位加 1”功能。69 的二进制数为 0100 0101；38 的二进制数为 0010 0110，各位取反得 1101 1001。做减法时，低位进位为 Sub，即为 1。\n\n# 注意\n\n若仅记忆补码加减运算的过程，而未掌握加法电路的原理，则本题易误选D。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_19",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "某计算机中有一个8位加法器，有符号整数 $x$ 和 $y$ 的机器数用补码表示， $[x]_{\\text{补}} = \\mathrm{F5H}$ ， $[y]_{\\text{补}} = 7\\mathrm{EH}$ ，若在该加法器中计算 $x - y$ ，则加法器的低位进位输入信息和运算后的溢出标志OF分别是（）。",
      "options": {
        "A": "1、1",
        "B": "1、0",
        "C": "0、1",
        "D": "0、0"
      },
      "answer": [
        "A"
      ],
      "explanation": "对补码减法运算，控制端 Sub 为 1，所以低位进位输入位 = Sub = 1。 $[x]_{补} = 11110101$ ， $[y]_{补} = 01111110$ ， $[-y]_{补} = 10000001 + 1$ ， $[x]_{补} - [y]_{补} = [x]_{补} + [-y]_{补} = 11110101 + 10000010 = 01110111$ ，进位丢掉，参与运算的两个数的符号位均为 1，结果的符号位为 0，所以溢出标志 OF 为 1。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_20",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "某 8 位计算机中，x 和 y 是两个有符号整数，用补码表示， $[x]_{\\text{补}} = 44H$ ， $[y]_{\\text{补}} = DCH$ ，则 $x/2 + 2y$ 的机器数及相应的溢出标志 OF 分别是（）。",
      "options": {
        "A": "CAH、0",
        "B": "CAH、1",
        "C": "DAH、0",
        "D": "DAH、1"
      },
      "answer": [
        "C"
      ],
      "explanation": "$[x/2+2y]_{补}=[x]_{补}>>1+[y]_{补}<<1=0100\\ 0100>>1+1101\\ 1100<<1=0010\\ 0010+1011\\ 1000=1101\\ 1010=DAH$ 。x右移移出了0，没有溢出或损失精度；y为负数，左移后，符号位仍为1，没有溢出；且从最后一步加法操作来看，一个正数和一个负数相加，必然不会溢出。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_21",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "某8位计算机中，x 和 y 是两个有符号整数，用补码表示， $[x]_{\\text{补}} = 44H$ ， $[y]_{\\text{补}} = DCH$ ，则 x - 2y 的机器数及相应的溢出标志 OF 分别是（）。",
      "options": {
        "A": "8CH、1",
        "B": "8CH、0",
        "C": "68H、1",
        "D": "68H、0"
      },
      "answer": [
        "A"
      ],
      "explanation": "$[x]_{补}=44H=0100\\ 0100,\\ [y]_{补}=DCH=1101\\ 1100$ 。执行 x-2y 时，先将 y 算术左移一位，得到 1011 1000，未溢出，然后各位取反，再与 x 相加，做减法时 Sub=1，即 $0100\\ 0100+0100\\ 0111+1=1000\\ 1100(8CH)$ ，两个加数的符号都为 0，而结果的符号为 1，因此发生了溢出，即 OF=1。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_22",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "某 C 语言代码段如下: ```txt int si=65536; short i=si; unsigned j=0; if(i<=j-1) printf(\"王道\"); else printf(\"计算机教育\"); ``` 当上述代码段执行到 if 分支条件的判断时，会根据标志寄存器中的（）决定执行顺序。最终的输出结果是（）。",
      "options": {
        "A": "CF, 王道",
        "B": "CF, 计算机教育",
        "C": "OF, 王道",
        "D": "OF, 计算机教育"
      },
      "answer": [
        "A"
      ],
      "explanation": "无符号数和有符号数一起参与运算时，计算机按无符号数来解释最终的执行结果，因此 j-1 的结果是 32 个全 1，会被解释成最大的无符号数。 $65536 = 2^{16}$ ，当把 si 强制转换为 short 型时，直接保留机器数的末 16 位，即 16 个全 0，因此，当 i 和 j-1 进行比较时，根据无符号数的解释，OF 标志是没有意义的，即根据 CF 位可知 i 小于 j-1，因此最终输出 “王道”。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_23",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "下图是实现 32 位补码一位乘法的逻辑结构图，下列说法中正确的是（）。 ![](images/73f2a75f04ee50db72be4c9204c4bf6bb12ac7ca0fd403c6cf486801dcfe4f95.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"被乘数寄存器X\"] -->|32| B[\"32位ALU\"] B -->|32| C[\"乘积寄存器P\"] C -->|64位| D[\"乘数寄存器Y\"] D -->|右移| E[\"控制逻辑计数器Cn\"] E -->|时钟| F[\"输出\"] D -->|写使能| E B -->|加/减| D ``` </details>",
      "options": {
        "A": "32位无符号整数的乘法电路和该图没有区别",
        "B": "在执行过程中，ALU 要么做加法，要么做减法，不可能执行空操作",
        "C": "图中的乘积寄存器 $P$ 和乘数寄存器 $Y$ 所执行的右移是算术右移",
        "D": "计算完成后，若乘积寄存器 P 中的值不全为 0，则发生溢出"
      },
      "answer": [
        "C"
      ],
      "explanation": "无符号乘法无须辅助位，电路结构更简单。当控制逻辑的输入是“00”或“11”时，ALU执行空操作，仅移位。因结果为有符号数，P和Y的右移必须为算术右移，以保持符号位不变，选项C正确。溢出判断依据是P的所有位是否都等于Y的符号位，而非P是否全为0。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_24",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "某计算机采用下图所示的补码除法器执行 32 位补码整数除法运算，当除数寄存器 Y 与余数/商寄存器 Q 的初始值为（）时，除法执行时间最短（Y、Q 均为补码表示）。 ![](images/8f5935c87f57e89db6c579da6729a116a13ab6e4ef154741f353db38b3472e8a.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"除数寄存器 Y\"] -->|32| B[\"32位ALU\"] B -->|32| C[\"余数寄存器R\"] C -->|64位| D[\"余数/商寄存器Q\"] D -->|左移| E[\"控制逻辑计数器Cn\"] E -->|时钟| F[\"输出\"] B -->|加/减| D ``` </details>",
      "options": {
        "A": "Y = FFFF FFFF, Q = 8000 0000",
        "B": "$Y = 80000000, Q = \\text{FFFF FFFF}$",
        "C": "Y = FFFF FFFF, Q = FFFF FFFF",
        "D": "$Y = 80000000, Q = 80000000$"
      },
      "answer": [
        "B"
      ],
      "explanation": "该补码除法器在正式迭代之前会先判断：若被除数的绝对值小于除数的绝对值，则直接置商为0、余数为被除数，跳过全部移位和加减操作，从而最快完成。在选项B中， $Y = -2^{31}$ ，绝对值为 $2^{31}$ ；Q = -1，绝对值为1。由于 $|Q| < |Y|$ ，满足快速退出条件，故执行时间最短。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_25",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2009 统考真题】一个 C 语言程序在一台 32 位机器上运行。程序中定义了三个变量 x, y, z，其中 x 和 z 为 int 型，y 为 short 型。当 x = 127, y = -9 时，执行赋值语句 $z = x + y$ 后，x, y, z 的值分别是（）。",
      "options": {
        "A": "x = 0000007FH, y = FFF9H, z = 00000076H",
        "B": "x = 0000007FH, y = FFF9H, z = FFFF0076H",
        "C": "x = 0000007FH, y = FFF7H, z = FFFF0076H",
        "D": "x = 0000007FH, y = FFF7H, z = 00000076H"
      },
      "answer": [
        "D"
      ],
      "explanation": "C 语言中的整型数据为补码形式，int 型为 32 位，short 型为 16 位，因此 x、y 的机器数写为 0000 007FH、FFF7H。执行 z = x + y 时，x 为 int 型，y 为 short 型，因此需将 y 的类型强制转换为 int 型，在机器中通过符号位扩展实现，y 的符号位为 1，因此在 y 的前面添加 16 个 1，即可将 y 强制转换为 int 型，其十六进制形式为 FFFF FFF7H。然后执行加法，即 0000 007FH + FFFF FFF7H = 0000 0076H，其中最高位的进位 1 自然丢弃。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_26",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2010 统考真题】假定有四个整数用 8 位补码分别表示： $r_{1}=FEH,\\quad r_{2}=F2H,\\quad r_{3}=90H,\\quad r_{4}=F8H$ ，若将运算结果存放在一个 8 位寄存器中，则下列运算会发生溢出的是（）。",
      "options": {
        "A": "$r_{1} \\times r_{2}$",
        "B": "$r_{2} \\times r_{3}$",
        "C": "$r_{1} \\times r_{4}$",
        "D": "$r_{2} \\times r_{4}$"
      },
      "answer": [
        "B"
      ],
      "explanation": "本题的真正意图是考查补码的表示范围，采用补码乘法规则计算出四个选项是费力不讨好的做法，且极易出错。8位补码所能表示的整数范围为 $-128\\sim +127$ 。将四个数全部转换为十进制数： $r_1 = -2$ ， $r_2 = -14$ ， $r_3 = -112$ ， $r_4 = -8$ ，得 $r_2\\times r_3 = 1568$ ，远超出了表示范围，发生溢出。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_27",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2013 统考真题】某字长为 8 位的计算机中，已知整型变量 x、y 的机器数分别为 $[x]_{补}=1\\ 1110100,\\quad[y]_{补}=1\\ 0110000$ 。若整型变量 $z=2x+y/2$ ，则 z 的机器数为（）。",
      "options": {
        "A": "1 1000000",
        "B": "00100100",
        "C": "10101010",
        "D": "溢出"
      },
      "answer": [
        "A"
      ],
      "explanation": "$x^{*}2$ ，将 x 算术左移一位为 1 1101000；y/2，将 y 算术右移一位为 1 1011000，均无溢出或丢失精度。补码相加为 $1\\ 1101000 + 1\\ 1011000 = 1\\ 1000000$ ，亦无溢出。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_28",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2014 统考真题】若 $x = 103, y = -25$ ，则下列表达式采用 8 位定点补码运算实现时，会发生溢出的是（）。",
      "options": {
        "A": "$x + y$",
        "B": "$-x + y$",
        "C": "x - y",
        "D": "-x - y"
      },
      "answer": [
        "C"
      ],
      "explanation": "8 位定点补码表示的数据范围为 -128～127，若运算结果超出这个范围，则会溢出。对选项 A， $x + y = 103 - 25 = 78$ ，符合范围。对选项 B， $-x + y = -103 - 25 = -128$ ，符合范围。对选项 D， $-x - y = -103 + 25 = -78$ ，符合范围。对选项 C， $x - y = 103 + 25 = 128$ ，超过 127。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_29",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2018 统考真题】假定有符号整数采用补码表示，若 int 型变量 x 和 y 的机器数分别是 FFFF FFDFH 和 0000 0041H，则 x、y 的值及 x-y 的机器数分别是（）。",
      "options": {
        "A": "x = -65, y = 41, x - y 的机器数溢出",
        "B": "x = -33, y = 65, x - y 的机器数为 FFFF FF9DH",
        "C": "x = -33, y = 65, x - y 的机器数为 FFFF FF9EH",
        "D": "$x = -65, y = 41, x - y$ 的机器数为 FFFF FF96H"
      },
      "answer": [
        "C"
      ],
      "explanation": "利用补码转换为原码的规则：负数的符号位不变数值位取反加1；正数补码等于原码。两个机器数对应的原码是 $[x]_{\\text{原}} = 80000021\\mathrm{H}$ ，对应的数值是-33， $[y]_{\\text{原}} = [y]_{\\text{补}} = 00000041\\mathrm{H} = 65$ 。排除选项A、D。 $x - y$ 直接利用补码减法准则， $[x]_{\\text{补}} - [y]_{\\text{补}} = [x]_{\\text{补}} + [-y]_{\\text{补}}$ ， $-y$ 的补码是连同符号位取反加1，最终减法变成加法，得出结果为FFFFFF9EH。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_30",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2018 统考真题】整数 x 的机器数为 1101 1000，分别对 x 进行逻辑右移 1 位和算术右移 1 位操作，得到的机器数各是（）。",
      "options": {
        "A": "1110 1100、1110 1100",
        "B": "0110 1100、1110 1100",
        "C": "1110 1100、0110 1100",
        "D": "0110 1100、0110 1100"
      },
      "answer": [
        "B"
      ],
      "explanation": "逻辑移位：左移和右移空位都补 0，且所有数字参与移动；补码算术移位：仍然是所有数字参与移动，右移空位补符号位，左移空位补 0。根据该规则，轻松选取选项 B。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_31",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2018 统考真题】减法指令 “sub R1, R2, R3” 的功能为 “(R1)-(R2)→R3”，该指令执行后将生成进位/借位标志 CF 和溢出标志 OF。若(R1) = FFFF FFFFH，(R2) = FFFF FFF0H，则该减法指令执行后，CF 与 OF 分别为（）。",
      "options": {
        "A": "CF = 0, OF = 0",
        "B": "CF = 1, OF = 0",
        "C": "CF = 0, OF = 1",
        "D": "CF = 1, OF = 1"
      },
      "answer": [
        "A"
      ],
      "explanation": "$[x]_{补}-[y]_{补}=[x]_{补}+[-y]_{补},[-R2]_{补}=00000010H$ ，很明显 $[R1]_{补}+[-R2]_{补}$ 的最高位进位和符号位进位都是1（当最高位进位和符号位进位的值不相同时才产生溢出），可以判断溢出标志OF为0。同时，减法操作只需判断借位标志，R1大于R2，所以借位标志为0。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_32",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2023 统考真题】已知 x, y 为 int 型，当 x = 100, y = 200 时，执行 “x 减 y” 指令得到的溢出标志 OF 和借位标志 CF 分别为 0, 1，那么当 x = 10, y = -20 时，执行该指令得到的 OF 和 CF 分别为（）。",
      "options": {
        "A": "OF = 0, CF = 0",
        "B": "OF = 0, CF = 1",
        "C": "OF = 1, CF = 0",
        "D": "OF = 1, CF = 1"
      },
      "answer": [
        "B"
      ],
      "explanation": "ALU 生成标志位时只负责计算，而不管运算对象是有符号数还是无符号数，CF = 1 表示当作无符号数运算时溢出，OF = 1 表示当作有符号数运算时溢出。当作有符号数时，x = 10, y = -20, x - y = 30，未超过 32 位有符号数范围，不溢出，OF = 0。当作无符号数时， $x' = 10$ , $y' = 2^{32} - 20$ （符号位读作数值位）， $x' - y' = 30 - 2^{32}$ ，为负，超过 32 位无符号数范围，溢出，CF = 1。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_33",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2024 统考真题】C 语言代码段如下，执行该代码段后，j 的值是（）。 ```txt int i=32777; short si=i; int j=si; ```",
      "options": {
        "A": "-32777",
        "B": "-32759",
        "C": "32759",
        "D": "32777"
      },
      "answer": [
        "B"
      ],
      "explanation": "$2^{15}=32768,\\quad i=32768+9=8000H+9H=8009H,$ 32位有符号数i的机器数为0000 8009H。将32位有符号数i强制转换为16位有符号数si，直接保留机器数的末16位即可，因此si的机器数为8009H，真值为 $-2^{15}+9=-32759$ 。将16位有符号数si强制转换为32位有符号数j，采用符号扩展（si的符号为 1，因此高位补 1），j 的机器数变为 FFFF 8009H，对应的真值为 -32759。\n\n<table><tr><td></td><td>int i</td><td>short si</td><td>int j</td></tr><tr><td>机器数</td><td>0000 8009H</td><td>8009H</td><td>FFFF 8009H</td></tr><tr><td>真值</td><td>32777</td><td>-32759</td><td>-32759</td></tr></table>",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_34",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2024 统考真题】下列关于整数乘法运算的叙述中，错误的是（）。",
      "options": {
        "A": "用阵列乘法器实现的乘运算可以在一个时钟周期内完成",
        "B": "用 ALU 和移位器实现的乘运算无法在一个时钟周期内完成",
        "C": "变量与常数的乘运算可编译优化为若干移位及加减运算指令",
        "D": "两个变量的乘运算无法编译转换为移位及加法等指令的循环实现"
      },
      "answer": [
        "D"
      ],
      "explanation": "阵列乘法器中的所有部分积同时产生并组成一个阵列，运用多操作数相加就能得到最终的积，因此可在一个时钟周期内完成。用 ALU 和移位器实现的乘运算通常采用串行的乘法算法，需要多个时钟周期才能完成。当一个乘数是常数时，编译器可将乘运算优化为若干移位和加减运算指令。两个变量的乘运算可通过移位和加法等指令循环实现，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-2-5_35",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.2.5",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "【2025 统考真题】假设在 8 位字长的计算机中，两个带符号整数 $x$ 和 $y$ 的补码表示分别为 $[x]_{\\text{补}} = A3H, [y]_{\\text{补}} = 75H$ ，则通过补码加减运算器得到的 $x - y$ 的值及 OF 标志分别为（）。",
      "options": {
        "A": "24,0",
        "B": "24,1",
        "C": "46,0",
        "D": "46,1"
      },
      "answer": [
        "D"
      ],
      "explanation": "要求计算 $x - y$ ，即 $[x]_{\\text{补}} + [-y]_{\\text{补}}$ 。首先求 $[-y]_{\\text{补}}$ ：对 $[y]_{\\text{补}}$ 按位取反得10001010，再加1，得1000 $1011 = 8\\mathrm{BH}$ 。然后计算 $[x]_{\\text{补}} + [-y]_{\\text{补}} = \\mathrm{A}3\\mathrm{H} + 8\\mathrm{BH} = 10100011 + 10001011 = (1)00101110$ ，忽略进位后，结果为 $00101110 = 2\\mathrm{EH}$ ，对应十进制数46。判断溢出：参与运算的两个操作数符号位均为1（负数），而结果符号位为0（正数），表明发生了溢出，因此OF=1。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_06",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在浮点数编码表示中，（）在机器数中不出现，是隐含的。",
      "options": {
        "A": "阶码",
        "B": "符号",
        "C": "尾数",
        "D": "基数"
      },
      "answer": [
        "D"
      ],
      "explanation": "在浮点数编码表示中，基数的值是约定好的，因此将其隐含。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_07",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "若某单精度浮点数、某原码、某补码、某移码的 32 位机器数均为 0xF0000000，则这些数从大到小的顺序是（）。",
      "options": {
        "A": "浮原补移",
        "B": "浮移补原",
        "C": "移原补浮",
        "D": "移补原浮"
      },
      "answer": [
        "D"
      ],
      "explanation": "这个机器数的最高位为1，对于原码、补码、单精度浮点数而言为负数，对于移码而言为正数，所以移码最大，而补码为 $-2^{28}$ ，原码为 $-(2^{30} + 2^{29} + 2^{28})$ ，单精度浮点数为 $-1.0 \\times 2^{97}$ ，大小依次递减。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_08",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "采用规格化的浮点数最主要是为了（）。",
      "options": {
        "A": "增加数据的表示范围",
        "B": "方便浮点运算",
        "C": "防止运算时数据溢出",
        "D": "增加数据的表示精度"
      },
      "answer": [
        "D"
      ],
      "explanation": "与非规格化浮点数相比，采用规格化浮点数的目的主要是为了增加数据的表示精度。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_09",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "设 $x$ 是采用 IEEE 754 标准表示的 32 位单精度浮点数，下列说法中正确的是（）。 I. 当 $|x|<1.0\\times2^{-126}$ 时，x将被置为机器零 II. 当 $|x|>1.0\\times2^{127}$ 时，将发生溢出 III. $x$ 所能表示的最小非规格化正数与最大非规格化负数的绝对值相等 IV. $x$ 可表示的最大正数与最小负数的绝对值相等",
      "options": {
        "A": "I, II, III, IV",
        "B": "I, II",
        "C": "II, III, IV",
        "D": "III, IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "IEEE 754 单精度浮点数的阶码偏置为 127，规格化数的阶码范围为 1～254（对应真值指数 -126～+127），非规格化数用于表示接近零的数值。 $1.0 \\times 2^{-126}$ 是最小规格化正数，最小非规格化正数为 $1.0 \\times 2^{-149}$ ，仅当 $|x|$ 小于此值时才舍入为机器零。最大可表示正数为 $(2 - 2^{-23}) \\times 2^{127}$ ，仅当 $|x|$ 超过该值时才溢出。IEEE 754 浮点数的表示范围在正负区间完全对称，故说法 III 和 IV 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_10",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "在浮点运算中，下溢指的是（）。",
      "options": {
        "A": "运算结果的绝对值小于机器所能表示的最小绝对值",
        "B": "运算的结果小于机器所能表示的最小负数",
        "C": "运算的结果小于机器所能表示的最小正数",
        "D": "运算结果的最低有效位产生的错误"
      },
      "answer": [
        "A"
      ],
      "explanation": "运算结果在 0 至规格化最小正数之间时称为正下溢，运算结果在 0 至规格化最大负数之间时称为负下溢，正下溢和负下溢统称下溢。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_11",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "判断浮点数运算是否溢出，取决于（）。",
      "options": {
        "A": "尾数是否上溢",
        "B": "尾数是否下溢",
        "C": "阶码是否上溢",
        "D": "阶码是否下溢"
      },
      "answer": [
        "C"
      ],
      "explanation": "判断浮点数运算是否溢出，取决于阶码是否上溢。阶码下溢可以通过非规格化数来表示。尾数上溢或下溢，可以通过左移或右移进行调整。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_12",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "假定采用 IEEE 754 标准中的单精度浮点数格式表示一个数为 45100000H，则该数的值是（）。",
      "options": {
        "A": "$(+1.125)_{10} \\times 2^{10}$",
        "B": "$(+1.125)_{10} \\times 2^{11}$",
        "C": "$(+0.125)_{10} \\times 2^{11}$",
        "D": "$(+0.125)_{10} \\times 2^{10}$"
      },
      "answer": [
        "B"
      ],
      "explanation": "写成二进制表示为 0100 0101 0001 0000 0000 0000 0000 0000，第一位为符号位，0 表示正数，随后 8 位（float 型）1000 1010 是用移码表示的阶码，因此减去 0111 1111 后得十进制数 11，而 IEEE 754 标准中单精度浮点数在阶码不为 0 时隐藏 1，因此尾数为 $(1.0010)_{\\mathrm{B}} = (1.125)_{\\mathrm{D}}$ ，因此该数值为 $(+1.125)_{10} \\times 2^{11}$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_13",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "已知 float 型采用 IEEE 754 单精度浮点数格式, 若 x、y 为 float 型变量, 且 x = -126, y = 15.75, 则执行语句 $z = x + y$ 时, 在浮点运算单元中进行对阶操作后的结果是（）。",
      "options": {
        "A": "x 不变，y 为 010000101,0.001111110...0",
        "B": "x 不变，y 为 010000110,0.001111110...0",
        "C": "y 不变，x 为 110000101,0.001111110...0",
        "D": "y 不变，x 为 110000110,0.001111110...0"
      },
      "answer": [
        "A"
      ],
      "explanation": "规格化 IEEE 754 浮点数尾数部分的数值范围为[1, 2)， $x = -1111110B = -1.111110B \\times 2^{6}$ ， $y = 1111.11B = 1.11111B \\times 2^{3}$ ，所以浮点数 x、y 的阶数分别为 6 和 3。对阶操作是小阶码向大阶码看齐，即 y 的阶数变为 6，移码表示为 $6 + 127 = 133$ ，即 10000101B，y 的尾数右移 3 位，变为 0.0011111B。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_14",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "假设 $x$ 和 $y$ 均是 float 型变量， $x$ 的真值为 1， $y$ 的真值为 0.1。已知 0.1 的二进制表示为无限循环小数 0.00011[0011]…（重复因子为 0011），某计算机采用 IEEE 754 单精度格式及就近舍入方式，则计算 $x + y$ 的结果用十六进制机器数表示为（）。",
      "options": {
        "A": "3F80 0000",
        "B": "3F8C CCCD",
        "C": "3F8C CCCC",
        "D": "3F80 000C"
      },
      "answer": [
        "B"
      ],
      "explanation": "$x=1.0=(1.0)_{2}\\times2^{0}$ ，尾数为 $1.00\\ldots0$ （隐含的1加上23个0）。 $y=0.1=(1.10011\\ldots)_{2}\\times2^{-4}$ ，尾数为 $1.100\\ 1100\\ 1100\\ 1100\\ 1100\\ 1101$ （最低有效位之后的3位为110，故末位加1）。执行 $x+y$ 时对阶：将y的尾数右移4位使其与x同阶 $(2^{0})$ ，得0.000 1100 1100 1100 1100 1100 1101。将其与x的尾数 $1.00\\ldots0$ 相加，得1.000 1100 1100 1100 1100 1100 1101。根据1101进行就近舍入，末位加1，得1.000 1100 1100 1100 1100 1101。最终编码为：符号位为0，阶码为 $127=0111\\ 1111$ ，尾数为（隐含 $1$ ）000 1100 1100 1100 1100 1101，组合并转换成十六进制数为3F8C CCCD。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_15",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "在 IEEE 754 标准浮点格式中，非规格化浮点数表示为（）。",
      "options": {
        "A": "阶码为 0，尾数为任意非 0 的二进制数",
        "B": "阶码为 255，尾数全为 0",
        "C": "阶码为 255，尾数为任意非 0 的二进制数",
        "D": "阶码为 0，尾数全为 0"
      },
      "answer": [
        "A"
      ],
      "explanation": "在 IEEE 754 标准浮点格式中，阶码全为 0，尾数不全为 0 表示非规格化数，非规格化数可用于处理阶码下溢，使得出现比最小规格化数还小的数时程序也能继续进行下去。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_16",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "在 IEEE 754 单精度浮点数加减运算的对阶阶段，若需将某操作数的尾数右移以对齐阶码，则关于其隐含的前导 “1”，以下说法正确的是（）。",
      "options": {
        "A": "隐含的 “1” 始终保留在最高位，在右移过程中不会被移出",
        "B": "隐含的 “1” 参与右移，但为保持规格化形式，移位后仍重置为 1",
        "C": "对阶移位前，需先将隐含的 “1” 恢复到尾数高位，再整体右移",
        "D": "非规格化数也包含隐含的“1”，因此同样需要恢复后再移位"
      },
      "answer": [
        "C"
      ],
      "explanation": "IEEE 754 单精度规格化数的有效数字为 24 位（ $1.f_{22}f_{21}\\cdots f_0$ ），其中前导“1”是隐含的，未实际存储。对阶时，必须先恢复该隐含位，与 23 位尾数拼接成 24 位，再整体右移（高位补 0）以对齐阶码。因此，前导“1”会随尾数一同参与移位，可能被移出，选项 A 错误，选项 C 正确。右移是逻辑右移，高位补 0；若补 1，将导致数值错误，选项 B 错误。非规格化数无隐藏位，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_17",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "在 IEEE 754 单精度浮点数加减运算中，若两个操作数阶码之差的绝对值为 $\\Delta E$ ，当其大于或等于（）时，阶码较小的操作数对结果无影响，结果直接取阶码较大的操作数（假设采用就近舍入的方式）。",
      "options": {
        "A": "24",
        "B": "25",
        "C": "126",
        "D": "128"
      },
      "answer": [
        "B"
      ],
      "explanation": "IEEE 754 单精度浮点数的有效数字为 24 位（含隐含前导 1）。对阶时，若阶差 $\\Delta E \\geqslant 25$ ，则小阶操作数的隐含 1 将右移至舍入位或更低位，导致保护位为 0。根据就近舍入规则，此时无论舍入位和粘滞位为何值，均直接截断，不会进位。因此，结果直接取大阶操作数。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_18",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "下列关于机器字长的叙述中，错误的是（）。",
      "options": {
        "A": "机器字长是指 CPU 中定点运算数据通路的宽度",
        "B": "机器字长通常与 CPU 通用寄存器的位数一致",
        "C": "机器字长决定了定点数的表示范围和精度",
        "D": "机器字长对计算机硬件造价没有影响"
      },
      "answer": [
        "D"
      ],
      "explanation": "机器字长是 CPU 一次能处理的定点整数位数，通常等于通用寄存器位数和定点运算数据通路宽度。机器字长越长，定点数的表示范围越大，可精确表示的整数位数越多。机器字长直接影响寄存器、ALU、总线等硬件的位宽，字长越长，电路规模越大，硬件成本显著增加。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_19",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "计算机中的信息按边界对齐方式存储的含义是（）。",
      "options": {
        "A": "信息的字节长度必须是整数",
        "B": "信息单元的字节长度必须是整数",
        "C": "信息单元的存储地址必须是整数",
        "D": "信息单元的存储地址是其字节长度的整数倍"
      },
      "answer": [
        "D"
      ],
      "explanation": "信息在存储器中按边界对齐方式存储的含义是信息单元的存储地址是其字节长度的整数倍。这样可以保证对一个字长数据的读/写只需要一次存储器访问，提高了访存效率，但有时会导致存储空间的浪费。因此，这是一种以空间换时间的办法。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_20",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "假设已定义三个 int 型变量 x、y 和 z，sizeof(int)=4，double 型采用 IEEE 754 双精度浮点数格式，变量 dx、dy 和 dz 的声明和初始化如下： ```matlab double dx = (double)x; double dy = (double)y; double dz = (double)z; ``` 则下列关系表达式中永远为真的是（）。 I. $dx + dy == (double)(x + y)$ II. $(dx + dy) + dz == dx + (dy + dz)$",
      "options": {
        "A": "I 和 II",
        "B": "仅 I",
        "C": "仅 II",
        "D": "无正确项"
      },
      "answer": [
        "D"
      ],
      "explanation": "说法 I 非永真，因为 $x + y$ 可能溢出，而 $dx + dy$ 不会溢出，两者结果可能不同。说法 II 永真，由于 dx、dy 和 dz 均由 32 位 int 转换而到，double 可精确地表示 int，且对阶时尾数移动位数不会超过 52 位，因此尾数不会舍入，不会发生大数吃小数 [当两浮点数阶码相差超过尾数位宽（24/53 位）时，小阶操作数在右移后有效位全部丢失，导致加法结果等于大阶操作数] 的情况。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_21",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "在按字节编址的计算机中，采用小端方式存储数据，某静态二维数组 b 的声明如下： ```txt static short b[2][4] = {{2,9,-1,5},{3,1,-6,2}}; ``` 若 b 的首地址为 0x8049820，采用按行优先存储，地址 0x804982c 中的内容是（）。",
      "options": {
        "A": "FAH",
        "B": "FFH",
        "C": "00H",
        "D": "05H"
      },
      "answer": [
        "A"
      ],
      "explanation": "二维数组 b 的元素是 short 型，占 2 字节，采用按行优先存储，b[0][0]的地址为 0x8049820，b[0][1]的地址为 0x8049822，以此类推，b[1][2]的地址为 0x804982c。b[1][2]的值为 -6，补码表示为 11111111 11111010，采用小端方式存储，因此地址 0x804982c 存放的是低位字节 FAH。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_22",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "在按字节编址的计算机中，数据在存储器中以小端方式存放。假定 int 型变量 i 的地址为 08000000H，i 的机器数为 01234567H，地址 08000000H 单元的内容是（）。",
      "options": {
        "A": "01H",
        "B": "23H",
        "C": "45H",
        "D": "67H"
      },
      "answer": [
        "D"
      ],
      "explanation": "小端方式是将最低有效字节存储在最小位置。在数 01234567H 中，最低有效字节为 67H。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_23",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "在按字节编址的 32 位计算机中，按边界对齐方式为以下结构型变量 x 分配存储空间： ```c struct cont_info{ char id; unsigned post; char phone; } x; ``` 若 x 的首地址为 0x8049820，则成员变量 phone 的起始地址为（）。",
      "options": {
        "A": "0x8049828",
        "B": "0x8049826",
        "C": "0x8049825",
        "D": "0x8049822"
      },
      "answer": [
        "A"
      ],
      "explanation": "结构体按边界对齐存放的要求：数据成员的起始地址是其数据类型大小的整数倍，char 型占 1 字节，char 型的起始地址必须是 1 字节的整数倍；unsigned 型占 4 字节，所以 unsigned 型的起始地址必须是 4 字节的整数倍。据此分析，id 的起始地址为 0x8049820，post 的起始地址为\n\n0x8049824，所以 phone 的起始地址为 0x8049828。结构体 x 的存放方式如下所示。\n\n<table><tr><td rowspan=\"2\">地址</td><td>8049820H</td><td>8049821H</td><td>8049822H</td><td>8049823H</td></tr><tr><td>char</td><td></td><td></td><td></td></tr><tr><td rowspan=\"2\">地址</td><td>8049824H</td><td>8049825H</td><td>8049826H</td><td>8049827H</td></tr><tr><td colspan=\"4\">post</td></tr><tr><td rowspan=\"2\">地址</td><td>8049828H</td><td>8049829H</td><td>804982AH</td><td>804982BH</td></tr><tr><td>phone</td><td></td><td></td><td></td></tr></table>",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_24",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "假定变量 i、f 的数据类型分别是 int、float。已知 $i = 12345$ ， $f = 1.2345 \\times 2^{3}$ ，则在一个 32 位机器中执行下列表达式时，结果为 “假” 的是（）。",
      "options": {
        "A": "i == (int)(double)i",
        "B": "$f == (\\text{float})(\\text{double})f$",
        "C": "i == (int)(float)i",
        "D": "f== (float)(int)f"
      },
      "answer": [
        "D"
      ],
      "explanation": "对于选项 A 和 B, int 型的有效位数不会超过 31 位, float 型的有效位数比 double 型的小得多, 因此都能精确转换为具有 53 位有效位的 double 型。对于选项 C, $12345 < 1024 \\times 16 = 2^{14}$ , 因此 12345 对应的二进制的位数一定小于 14, 因此可精确转换为具有 24 位有效位的 float 型。对于选项 D, f = 1234.5, 转换为 int 型后, 小数点后面的数字丢失, 因此与原来的 f 不相等。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_25",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "有以下 C 语言代码段: ```txt int m=13; float a=12.6,x; x=m/2+a/2; printf(\"%f\\n\",x); ``` 执行上述代码后，输出的 x 值为（）。",
      "options": {
        "A": "12.000000",
        "B": "12.300000",
        "C": "12.800000",
        "D": "12"
      },
      "answer": [
        "B"
      ],
      "explanation": "整数与整数运算，结果为整数，所以 m/2 的结果为 6。实数与整数运算，结果为实数，所以 a/2 的结果为 6.3，相加为 12.3。C 语言的输出格式可使输出值保留小数点后 6 位，输出为 12.300000。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_26",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2009 统考真题】浮点数加、减运算过程一般包括对阶、尾数运算、规格化、舍入和判断溢出等步骤。设浮点数的阶码和尾数均采用补码表示，且位数分别为 5 和 7（均含 2 位符号位）。若有两个数 $X = 2^{7} \\times 29 / 32$ 和 $Y = 2^{5} \\times 5 / 8$ ，则用浮点加法计算 $X + Y$ 的最终结果是（）。",
      "options": {
        "A": "00111 1100010",
        "B": "00111 0100010",
        "C": "01000 0010001",
        "D": "发生溢出"
      },
      "answer": [
        "D"
      ],
      "explanation": "X 的浮点数格式为 00, 111; 00, 11101（分号前为阶码，分号后为尾数），Y 的浮点数格式为 00, 101; 00, 10100。然后根据浮点数的加法步骤进行运算。\n\n① 对阶。X、Y 阶码相减，即 00, 111 - 00, 101 = 00, 111 + 11, 011 = 00, 010，可知 X 的阶码比 Y 的阶码大 2（这一步可直接目测）。根据小阶码向大阶码看齐的原则，将 Y 的阶码加 2，尾数右移 2 位，将 Y 变为 00, 111; 00, 00101。  \n② 尾数相加。即 00,11101 + 00,00101 = 01,00010，尾数相加结果符号位为 01，因此需要右规。  \n③ 规格化。将尾数右移 1 位，阶码加 1，得 $X + Y$ 为 01,000;00,10001。  \n④ 判断溢出。阶码符号位为 01，说明发生溢出。\n\n本题容易误选选项 B、C，因为选项 B、C 本身并无计算错误，只是它们不是最终结果，选项 B 少了第 3 步和第 4 步，选项 C 少了第 4 步。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_27",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2010 统考真题】假定变量 i、f 和 d 的数据类型分别为 int、float 和 double（int 型用补码表示，float 型和 double 型分别用 IEEE 754 单精度和双精度浮点数格式表示），已知 i = 785、f = 1.5678E3、d = 1.5E100，若在 32 位机器中执行下列关系表达式，则结果为“真”的是（）。 I. i == (int)(float)i II. $f == (\\text{float})(\\text{int})f$ III. f==(float)(double)f IV. $(d+f)-d==f$",
      "options": {
        "A": "仅I和II",
        "B": "仅 I 和 III",
        "C": "仅 II 和 III",
        "D": "仅 III 和 IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "题中三种数据类型强制类型转换的顺序为 $int \\rightarrow float \\rightarrow double$ 。若将 float 型转换为 int 型，小数位部分会被舍去，int 型是精确到 32 位的整数，而 float 型只保存到 $1 + 23$ 位，因此一个 32 位的 int 型整数在转换为 float 型时可能有损失，具体判断方法如下：先将 int 型整数转换为二进制真值，然后将真值写为 $\\pm 1.x \\ldots x \\times 2^{n}$ 的形式，若小数点后的位数超过 23 位，则转换为 float 型会发生精度损失。本题中 i = 785，转换为二进制真值为 $1.100010001 \\times 2^{9}$ ，小数点后只有 9 位，不会发生精度损失，说法 I 正确。对于说法 II，将 float 型的 f 转换为 int 型，小数点后的数位丢失，结果非真。double 型的精度和范围都比 float 型的大，float 型转换为 double 型不会有损失，说法 III 正确。对于说法 IV，初看似乎没有问题，但浮点运算 d + f 时需要对阶，对阶后 f 的尾数有效位被舍去而变为 0，因此 d + f 仍然为 d，再减去 d 后结果为 0，结果非真。注意，从 int 型转换为 float 型时，虽然不会发生溢出，但由于尾数位数的关系，可能有数据舍入，影响精度，而转换为 double 型则能保留精度。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_28",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2011 统考真题】float 型数据通常用 IEEE 754 单精度格式表示。若编译器将 float 型变量 x 分配在一个 32 位浮点寄存器 FR1 中，且 x = -8.25，则 FR1 的内容是（）。",
      "options": {
        "A": "C104 0000H",
        "B": "C242 0000H",
        "C": "C184 0000H",
        "D": "C1C2 0000H"
      },
      "answer": [
        "A"
      ],
      "explanation": "本题的目的在于考查 IEEE 754 单精度浮点数的表示。首先先将 x 转换为二进制数，即 -1000.01 = -1.00001 × 2 $^{3}$ ，然后计算阶码 E，根据 IEEE 754 单精度浮点数格式，有 E - 127 = 3，因此 E = 130，转换为二进制数，即 10000010。最后，根据 IEEE 754 标准，最高位的 1 是被隐藏的。\n\nIEEE 754 单精度浮点数格式：符号（1 位）+ 阶码（8 位）+ 尾数（23 位）。\n\n因此 FR1 的内容为 1; 1000 0010; 0000 1000 0000 0000 0000 000。\n\n即 1100 0001 0000 0100 0000 0000 0000 0000 = C104 0000H。\n\n本题易误选选项 D，未考虑 IEEE 754 标准隐藏最高位 1 的情况，把偏置值认为是 128。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_29",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2012 统考真题】float 型（IEEE 754 单精度浮点数格式）能表示的最大正整数是（）。",
      "options": {
        "A": "$2^{126} - 2^{103}$",
        "B": "$2^{127}-2^{104}$",
        "C": "$2^{127}-2^{103}$",
        "D": "$2^{128}-2^{104}$"
      },
      "answer": [
        "D"
      ],
      "explanation": "IEEE 754 单精度浮点数是尾数用采取隐藏位策略的原码表示，且阶码用移码（偏置值为 127）表示的浮点数。规格化短浮点数的真值为 $(-1)^{S} \\times 1.m \\times 2^{E-127}$ ，其中 S 为符号位，阶码 E 的取值为 1～254（8 位表示），尾数 m 为 23 位，共 32 位；因此，float 型能表示的最大整数是 $1.111 \\ldots 1 \\times 2^{254-127} = 2^{127} \\times (2 - 2^{-23}) = 2^{128} - 2^{104}$ 。\n\n【另解】IEEE 754 单精度浮点数格式如下图所示。\n\n<table><tr><td>符号(1)</td><td>阶码(8)</td><td>尾数(23)</td></tr></table>\n\n表示最大正整数时：符号取 0；阶码取最大值 127；尾数部分隐藏了整数部分的“1”，23位尾数全取 1 时尾数最大，为 $2 - 2^{-23}$ ，此时浮点数的大小为 $(2 - 2^{-23}) \\times 2^{127} = 2^{128} - 2^{104}$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_30",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2012 统考真题】某计算机存储器按字节编址，采用小端方式存放数据。假定编译器规定 int 型和 short 型长度分别为 32 位和 16 位，并且数据按边界对齐存储。某 C 语言程序 段如下: ```javascript struct{ int a; char b; short c; }record; record.a = 273; ``` 若 record 变量的首地址为 0xC008，地址 0xC008 中的内容及 record.c 的地址分别为（）。",
      "options": {
        "A": "0x00, 0xC00D",
        "B": "0x00, 0xC00E",
        "C": "0x11, 0xC00D",
        "D": "0x11, 0xC00E"
      },
      "answer": [
        "D"
      ],
      "explanation": "尽管 record 大小为 7B（成员 a 有 4B，成员 b 有 1B，成员 c 有 2B），因为数据按边界对齐方式存储，所以 record 共占用 8B。record.a 的十六进制表示为 0x00000111，因为采用小端方式存放数据，所以地址 0xC008 中的内容应为低字节 0x11；record.b 只占 1B，后面的 1B 留空；record.c 占 2B，因此其地址为 0xC00E。各字节的存储分配如下表所示。\n\n<table><tr><td>地址</td><td>0xC008</td><td>0xC009</td><td>0xC00A</td><td>0xC00B</td></tr><tr><td>内容</td><td>record.a (0x11)</td><td>record.a (0x01)</td><td>record.a (0x00)</td><td>record.a (0x00)</td></tr><tr><td>地址</td><td>0xC00C</td><td>0xC00D</td><td>0xC00E</td><td>0xC00F</td></tr><tr><td>内容</td><td>record.b</td><td>-</td><td>record.c</td><td>record.c</td></tr></table>",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_31",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2013 统考真题】某数采用 IEEE 754 单精度浮点数格式表示为 C640 0000H，则该数的值是（）。",
      "options": {
        "A": "$-1.5 \\times 2^{13}$",
        "B": "$-1.5 \\times 2^{12}$",
        "C": "$-0.5 \\times 2^{13}$",
        "D": "$-0.5 \\times 2^{12}$"
      },
      "answer": [
        "A"
      ],
      "explanation": "IEEE 754 单精度浮点数格式为 C640 0000H，二进制格式为 1100 0110 0100 0000 0000 0000 0000 0000，转换为标准的格式为\n\n<table><tr><td>符号</td><td>阶码</td><td>尾数</td></tr><tr><td>1</td><td>1000 1100</td><td>100 0000 0000 0000 0000 0000</td></tr></table>\n\n符号为 1 表示负数；阶码为 1000 1100 - 0111 1111 = 0000 1101 = 13；尾数为 1.5（注意其有隐藏位，要加 1）。因此，浮点数的值为 $-1.5 \\times 2^{13}$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_32",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2014 统考真题】float 型数据常用 IEEE 754 单精度浮点格式表示。假设两个 float 型变量 x 和 y 分别存放在 32 位寄存器 f1 和 f2 中，若 $(f1) = CC90\\ 0000H, (f2) = B0C0\\ 0000H$ ，则 x 和 y 之间的关系为（）。",
      "options": {
        "A": "x < y 且符号相同",
        "B": "$x <   y$ 且符号不同",
        "C": "x > y 且符号相同",
        "D": "$x > y$ 且符号不同"
      },
      "answer": [
        "A"
      ],
      "explanation": "(f1)和(f2)对应的二进制分别是(110011001001...) $_{2}$ 和(101100001100...) $_{2}$ ，根据 IEEE 754 浮点数标准，可知(f1)的符号为 1，阶码为 10011001，尾数为 1.001，而(f2)的符号为 1，阶码为 01100001，尾数为 1.1，可知两数均为负数，符号相同，B、D 排除；(f1)的绝对值为 $1.001 \\times 2^{26}$ ，(f2)的绝对值为 $1.1 \\times 2^{-30}$ ，(f1)的绝对值比(f2)的绝对值大，而符号为负，真值大小相反，即(f1)的真值比(f2)的真值小，即 x < y。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_33",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2015 统考真题】下列有关浮点数加减运算的叙述中，正确的是（）。 I. 对阶操作不会引起阶码上溢或下溢 II. 右规和尾数舍入都可能引起阶码上溢 III. 左规时可能引起阶码下溢 IV. 尾数溢出时结果不一定溢出",
      "options": {
        "A": "仅 II、III",
        "B": "仅 I、II、IV",
        "C": "仅 I、III、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "对阶是较小的阶码向较大的阶码对齐，所以对阶后的阶码是当前那个较大的阶码而不会导致阶码溢出，说法 I 正确。右规和尾数舍入过程，阶码加 1 而可能上溢，说法 II 正确，同理说法 III 也正确。尾数溢出时可能仅产生误差，结果不一定溢出，说法 IV 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_34",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2016 统考真题】某计算机字长为 32 位，按字节编址，采用小端方式存放数据。假定有一个 double 型变量，其机器数表示为 1122 3344 5566 7788H，存放在以 0000 8040H 开始的连续存储单元中，则存储单元 0000 8046H 中存放的是（）。",
      "options": {
        "A": "22H",
        "B": "33H",
        "C": "77H",
        "D": "66H"
      },
      "answer": [
        "A"
      ],
      "explanation": "大端方式：一个字中的高位字节存放在内存中这个字区域的低地址处。小端方式：一个字中\n\n的低位字节存放在内存中这个字区域的低地址处。各字节的存储分配如下表所示。\n\n<table><tr><td>地址</td><td>0000 8040H</td><td>0000 8041H</td><td>0000 8042H</td><td>0000 8043H</td></tr><tr><td>内容</td><td>88H</td><td>77H</td><td>66H</td><td>55H</td></tr><tr><td>地址</td><td>0000 8044H</td><td>0000 8045H</td><td>0000 8046H</td><td>0000 8047H</td></tr><tr><td>内容</td><td>44H</td><td>33H</td><td>22H</td><td>11H</td></tr></table>\n\n从而存储单元 0000 8046H 中存放的是 22H。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_35",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "【2018 统考真题】IEEE 754 单精度浮点格式表示的数中，最小的规格化正数是（）。",
      "options": {
        "A": "$1.0 \\times 2^{-126}$",
        "B": "$1.0 \\times 2^{-127}$",
        "C": "$1.0 \\times 2^{-128}$",
        "D": "$1.0 \\times 2^{-149}$"
      },
      "answer": [
        "A"
      ],
      "explanation": "IEEE 754 单精度浮点数的符号位、阶码位、尾数位（省去正数位 1）所占的位数分别是 1、8、23。最小正数，符号位取 0，移码的取值范围是 1～254，取 1，得阶码 1-127=-126（127 为我们规定的偏置值），尾数取全 0，最终推出最小规格化正数为 A。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_36",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "【2018 统考真题】某 32 位计算机按字节编址，采用小端方式。若语句 “int i = 0;” 对应指令的机器代码为 “C7 45 FC 00 00 00 00”，则语句 “int i = -64;” 对应指令的机器代码是（）。",
      "options": {
        "A": "C7 45 FC C0 FF FF FF",
        "B": "C7 45 FC 0C FF FF FF",
        "C": "C7 45 FC FF FF FF C0",
        "D": "C7 45 FC FF FF FF 0C"
      },
      "answer": [
        "A"
      ],
      "explanation": "按字节编址，采用小端方式，低位的数据存储在低地址位、高位的数据存储在高地址位，并且按照一字节相对不变的顺序存储。由题意，存储0的位数是后32位，则我们只需要把-64的补码按字节存储在其中即可，而-64表示成32位的十六进制是FFFFFFC0，根据小端方式的特点，低位字节存储在低地址位，就是C0FFFFFF。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_37",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "【2020 统考真题】在按字节编址、采用小端方式的 32 位计算机中，按边界对齐方式为以下 C 语言结构型变量 a 分配存储空间： ```txt struct record{ short x1; int x2; } a; ``` 若 a 的首地址为 2020 FE00H，a 的成员变量 x2 的机器数为 1234 0000H，则其中 34H 所在存储单元的地址是（）。",
      "options": {
        "A": "2020 FE03H",
        "B": "2020 FE04H",
        "C": "2020 FE05H",
        "D": "2020 FE06H"
      },
      "answer": [
        "D"
      ],
      "explanation": "在 32 位计算机中，按字节编址，根据小端方式和按边界对齐的定义，变量 a 的存放方式：\n\n<table><tr><td>地址</td><td>2020 FE00H</td><td>2020 FE01H</td><td>2020 FE02H</td><td>2020 FE03H</td></tr><tr><td></td><td>未知</td><td>未知</td><td></td><td></td></tr><tr><td>说明</td><td>x1 (LSB)</td><td>x1 (MSB)</td><td></td><td></td></tr><tr><td>地址</td><td>2020 FE04H</td><td>2020 FE05H</td><td>2020 FE06H</td><td>2020 FE07H</td></tr><tr><td></td><td>00H</td><td>00H</td><td>34H</td><td>12H</td></tr><tr><td>说明</td><td>x2 (LSB)</td><td></td><td></td><td>x2 (MSB)</td></tr></table>\n\n于是，34H 所在存储单元的地址为 2020 FE06H。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_38",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "【2020 统考真题】已知有符号整数用补码表示，float 型数据用 IEEE 754 标准表示，假定变量 x 的类型只可能是 int 或 float，当 x 的机器数为 C800 0000H 时，x 的值可能是()。",
      "options": {
        "A": "$-7\\times2^{27}$",
        "B": "$-2^{16}$",
        "C": "$2^{17}$",
        "D": "$25 \\times 2^{27}$"
      },
      "answer": [
        "A"
      ],
      "explanation": "C800 0000H = 1100 1000 0000 0000 0000 0000 0000 0000 0000。\n\n将其转换为对应的 float 型或 int 型。\n\n1）若为 float 型，则尾数隐藏最高位 1，符号为 1 表示负数，阶码 $1001\\ 0000 = 2^{7} + 2^{4} = 128 + 16$ ，再减去偏置值 127 得到 17，算出 x 值为 $-2^{17}$ 。\n\n2）若为 int 型，则有符号补码，为负数，数值部分取反加 1，得 011 1000 0000 0000 0000 0000 0000 0000，算出 x 值为 $-7 \\times 2^{27}$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_39",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "【2021 统考真题】下列数值中，不能用 IEEE 754 浮点格式精确表示的是（）。",
      "options": {
        "A": "1.2",
        "B": "1.25",
        "C": "2.0",
        "D": "2.5"
      },
      "answer": [
        "A"
      ],
      "explanation": "使用排除法。选项 B: $1.25 = 1.01B \\times 2^{0}$ ; 选项 C: $2.0 = 1.0B \\times 2^{1}$ ; 选项 D: $2.5 = 1.01B \\times 2^{1}$ 。因此，选项 B、C 和 D 均可以用 IEEE 754 浮点格式精确表示。选项 A 的十进制小数 1.2 转换为二进制的结果是无限循环小数 1.001100110011...，无法用精度有限的 IEEE 754 浮点格式精确表示。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_40",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "【2022 统考真题】-0.4375 的 IEEE 754 单精度浮点数表示为（）。",
      "options": {
        "A": "BEE0 0000H",
        "B": "BF60 0000H",
        "C": "BF70 0000H",
        "D": "C0E0 0000H"
      },
      "answer": [
        "A"
      ],
      "explanation": "IEEE 754 单精度浮点数格式中依次为符号 1 位、阶码 8 位（偏置值 127）、尾数 23 位（隐藏 1 位）。 $-0.4375 = -1.75 \\times 2^{-2}$ ，保证小数点前是 1。根据单精度浮点数格式，符号为 1；阶码为移码表示， $-2 + 127 = 125$ ，写成 8 位二进制数为 01111101；尾数隐藏小数点前的 1，剩下的 0.75 写成二进制数为 0.11，所以尾数部分是 $1100 \\cdots 0$ 。该浮点数的二进制格式为 1011 1110 1110 0000 0000 0000 0000 0000 0000，对应的十六进制格式为 BEE0 0000H。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_41",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "【2023 统考真题】若 short 型变量 x = -8190，则 x 的机器数是（）。",
      "options": {
        "A": "E002H",
        "B": "E001H",
        "C": "9FFFH",
        "D": "9FFEH"
      },
      "answer": [
        "A"
      ],
      "explanation": "short 型变量是补码表示的 16 位有符号整数。x 是负数，可先求出 8190 的机器数， $8190 = 8192 - 2 = 2^{13} - 2^1$ ，8190 的机器数为 $0010\\ 0000\\ 0000\\ 0000B - 0000\\ 0000\\ 0000\\ 0010B = 0001\\ 1111\\ 1111\\ 1110B$ ，因此-8190 的机器数为 $1110\\ 0000\\ 0000\\ 0010B = E002H$ （按位取反，末位加 1）。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_42",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "【2023 统考真题】已知 float 型变量用 IEEE 754 单精度浮点数格式表示。若 float 型变量 x 的机器数为 8020 0000H，则 x 的值是（）。",
      "options": {
        "A": "$-2^{-128}$",
        "B": "$-1.01 \\times 2^{-127}$",
        "C": "$-1.01 \\times 2^{-126}$",
        "D": "非数 (NaN)"
      },
      "answer": [
        "A"
      ],
      "explanation": "把 x 的机器数按二进制展开， $8020\\ 0000H = \\underline{1000\\ 0000\\ 0010\\ 0000\\ 0000\\ 0000\\ 0000\\ 0000B}$ ，符号为负，阶码全为 0，尾数不全为 0，由下表可知，这是非规格化数，对于 32 位非规格化负数，若尾数的二进制为 f，则真值为 $-2^{-126} \\times 0. f = -2^{-126} \\times 0. 01 = -2^{-128}$ 。\n\n<table><tr><td rowspan=\"2\">值的类型</td><td colspan=\"4\">单精度(32位)</td></tr><tr><td>符号</td><td>阶码</td><td>尾数</td><td>值</td></tr><tr><td>非规格化正数</td><td>0</td><td>0</td><td> $f \\neq 0$ </td><td> $2^{-126}(0.f)$ </td></tr><tr><td>非规格化负数</td><td>1</td><td>0</td><td> $f \\neq 0$ </td><td> $-2^{-126}(0.f)$ </td></tr></table>",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_43",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "【2024 统考真题】某科学实验中，需要使用大量的整型参数，为了在保证表数精度的基础上提高运算速度，需要选择合理的数据表示方法。若整型参数 $\\alpha$ 、 $\\beta$ 的取值范围分别为 $-2^{20} \\sim 2^{20}$ 、 $-2^{40} \\sim 2^{40}$ ，则在下列选项中， $\\alpha$ 、 $\\beta$ 最适合采用的数据表示方法分别是（）。",
      "options": {
        "A": "32 位整数、32 位整数",
        "B": "单精度浮点数、单精度浮点数",
        "C": "32 位整数、双精度浮点数",
        "D": "单精度浮点数、双精度浮点数"
      },
      "answer": [
        "C"
      ],
      "explanation": "表示整数时，相同位数的浮点型的精度不如整型，因此在能满足 $\\alpha$ 、 $\\beta$ 的取值范围的前提下，应优先选择整型；否则，才选择浮点型。32 位补码整数的表示范围为 $-2^{31} \\sim 2^{31} - 1$ ，满足 $\\alpha$ 的取值范围，因此 $\\alpha$ 应采用 32 位整数。双精度浮点数的精度比单精度浮点数的更高， $-2^{40} \\sim 2^{40}$ 超出了单精度浮点数可以表示的精度（由尾数位数+隐含位决定），因此 $\\beta$ 应采用双精度浮点数。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_44",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "【2025 统考真题】已知 float 型变量用 IEEE 754 单精度浮点数格式表示。若 float 型变量 x 的机器数为 4730 0000H，则 x 的值是（）。",
      "options": {
        "A": "$0.375 \\times 2^{14}$",
        "B": "$1.375 \\times 2^{14}$",
        "C": "$0.375 \\times 2^{15}$",
        "D": "$1.375 \\times 2^{15}$"
      },
      "answer": [
        "D"
      ],
      "explanation": "根据 IEEE 754 单精度浮点数格式，机器数 4730 0000H 对应的二进制数为 0, 100 0111 0, 011 0000 0000 0000 0000 0000。符号位为 0，表示正数；8 位阶码 10001110 的十进制值为 142，减去偏置 127，得到实际指数为 15；23 位尾数为 011 0000 0000 0000 0000 0000，规格化形式隐含了前导 1，故有效数字为 1.011（二进制），即十进制数 1.375，因此 x 的值为 $1.375 \\times 2^{15}$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_2-3-5_45",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "数据的表示和运算",
      "section": "2.3.5",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "【2025 统考真题】某 32 位计算机按字节编址，采用小端方式存放数据，编译器按边界对齐方式为下列 C 语言结构型数组变量 employee 分配存储空间。 ```txt struct record { int id; char name[10]; int salary; } employee[200]; ``` 若 employee 的首地址为 0000 A0B0H, employee[1].id 的机器数为 1234 5678H，则该机器数中的 56H 所在存储单元的地址是（）。",
      "options": {
        "A": "0000 A0C3H",
        "B": "0000 A0C4H",
        "C": "0000 A0C5H",
        "D": "0000 A0C6H"
      },
      "answer": [
        "C"
      ],
      "explanation": "首先分析结构体 record 的内存布局：int id 占 4 字节；char name[10] 占 10 字节，为使后续 int salary 对齐到 4 字节边界，需要在 name 后填充 2 字节，使 salary 从 4 的整数倍偏移处开始。因此结构体总大小为 $4 + 10 + 2 + 4 = 20$ 字节。employee[1] 的首地址为 $0000\\mathrm{A}0\\mathrm{B}0\\mathrm{H} + 20 = 0000\\mathrm{A}0\\mathrm{C}4\\mathrm{H}$ ，id 为其第一个成员，起始地址即为 $0000\\mathrm{A}0\\mathrm{C}4\\mathrm{H}$ 。已知 id 的值为 12345678H，在小端方式下，字节按 78H、56H、34H、12H 的顺序存放，故 56H 位于 $0000\\mathrm{A}0\\mathrm{C}5\\mathrm{H}$ 。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch02-第2章-数据的表示和运算.md"
    },
    {
      "id": "计算机组成原理_3-1-5_04",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.1.5",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "multiple_choice",
      "question": "在下列几种存储器中，CPU 不能直接访问的是（）。",
      "options": {
        "A": "硬盘",
        "B": "内存",
        "C": "Cache",
        "D": "寄存器"
      },
      "answer": [
        "D",
        "A"
      ],
      "explanation": "# （1）地址引脚复用技术\n\n图 3.6 给出了一个 $4M \\times 4$ 位 DRAM 芯片的逻辑结构图。该芯片共有 11 个地址引脚 ( $A_{0} \\sim A_{10}$ )，在行选通信号 RAS 和列选通信号 CAS 的控制下，分时复用传送行地址和列地址。数据端口有 4 个引脚 ( $D_{1} \\sim D_{4}$ )，因此每个芯片可同时读/写 4 位数据。WE 为读/写控制信号，低电平表示写操作；OE 为输出使能信号，低电平有效，高电平时断开输出驱动。芯片内部存储阵列采用三维结构，总容量为 $2048 \\times 2048 \\times 4$ 位，即 $4M \\times 4$ 位。因此，行地址和列地址各需 11 位，共 4 个位平面；在任意行与列的交叉点上，4 个位平面上的数据被同时读/写。\n\n![](images/cbb39bb8d6964b904c6ab3be71c792d441313a3f44dff532cb5f18f296d4ebcc.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"RAS\"] --> B[\"定时和控制\"]\n    C[\"CAS\"] --> B\n    D[\"WE\"] --> B\n    E[\"OE\"] --> B\n    B --> F[\"刷新计数器\"]\n    F --> G[\"MUX\"]\n    G --> H[\"行译码器\"]\n    H --> I[\"存储阵列 2048×2048×4\"]\n    I --> J[\"读出放大器 I/O门\"]\n    J --> K[\"列译码器\"]\n    K --> L[\"数据输入缓冲器\"]\n    L --> M[\"数据输出缓冲器\"]\n    M --> N[\"D1-D4\"]\n    O[\"A0-A1\"] --> P[\"行地址缓冲器\"]\n    Q[\"A10\"] --> P\n    P --> R[\"列地址缓冲器\"]\n    R --> S[\"读出放大器 I/O门\"]\n    T[\"D2-D3\"] --> U[\"数据输入缓冲器\"]\n    V[\"D4\"] --> W[\"数据输出缓冲器\"]\n```\n</details>\n\n图 3.6 一个 $4M \\times 4$ 位 DRAM 芯片的逻辑结构图\n\n# 考点追踪 DRAM 芯片地址引脚复用技术（2014）\n\nDRAM 芯片容量较大，所需地址位数较多。为减少芯片地址引脚数量，通常采用地址引脚复用技术：行地址和列地址通过相同的引脚分两次先后输入，从而使地址引脚数量减少一半。\n\n# （2）刷新机制与阵列设计优化\n\nDRAM 芯片需要定期刷新以维持所存信息。刷新时，仅向芯片提供行地址和 RAS 信号，即可选中某一行的所有存储单元并执行读操作。由于 DRAM 采用破坏性读出，每次读取后必须立即再生：若读出为 0，则将电容充分放电；若读出为 1，则重新充电。对于图中所示的 $2048 \\times 2048 \\times 4$ 存储阵列，只需进行 2048 次刷新操作即可完成全芯片刷新（因刷新按整行进行，无须列地址）。芯片内部集成一个刷新计数器，可自动产生刷新所需的行地址，其位数与行地址位数相同。行地址缓冲器与刷新计数器通过一个多路选择器（MUX）共享通往行译码器的地址通路。刷新周期定义为对某一特定行完成一次刷新后，到下一次对该行再次刷新的时间间隔。\n\n# 考点追踪 ▶ DRAM 芯片行、列设计优化原则（2018）\n\n假定一个 DRAM 芯片的存储容量为 $2^{n} \\times b$ 位，其存储阵列的行数为 r，列数为 c，则满足 $2^{n} = r \\times c$ 。整个阵列的地址位数为 n，其中行地址占 $\\log_{2}r$ 位，列地址占 $\\log_{2}c$ 位，因此有 $n = \\log_{2}r + \\log_{2}c$ 。由于 DRAM 采用地址引脚复用技术，引脚数量由行、列地址位数中的较大者决定，为最小化地址引脚数，应使 r 与 c 尽可能接近。此外，DRAM 按行刷新，行数越少，刷新开销越低，故还需满足 $r \\leqslant c$ 。综合考虑，通常将阵列设计为行数略小于或等于列数的近似正方形结构。\n\n# （3）缓存机制与突发传输\n\n# 考点追踪 DRAM芯片行缓冲器容量的计算（2022）\n\n图 3.7 展示了一个 DRAM 芯片的简化示意图，其容量为 $16 \\times 8$ 位，存储阵列为 4 行 $\\times 4$ 列。\n\n![](images/765c4147ddd6a5e1a8035af165dac7565cec0b3bcbab30e66e81e288bfce1e65.jpg)\n\n<details>\n<summary>text_image</summary>\n\n16×8位\nDRAM\n列\n0 1 2 3\n行\n0\n1\n2\n3\n存储元\n(2,1)\n8位\n数据线\n4×8位 行缓冲器\n2位\n地址线\n</details>\n\n图 3.7 一个 DRAM 芯片的简化示意图\n\n由于采用地址引脚复用技术，仅需2根地址线，分时传送2位行地址和2位列地址。每个存储单元包含8位数据，因此需要8根数据线。芯片内部设有一个行缓冲器（通常由SRAM实现），用于缓存被选中行中所有列的数据。其容量等于一行中所有存储单元的数据总量，即列数 $\\times$ 每个存储单元的位数（如4列 $\\times 8$ 位 $= 32$ 位）。当某一行被选中后，该行全部数据被一次性加载到行缓冲器中，后续可在每个时钟周期连续输出一个存储单元的数据（8位），从而支持突发传输，即在寻址阶段提供首地址，随后连续读取多个相邻存储单元的数据，显著\n\n提升有效带宽。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-1-5_05",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.1.5",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "multiple_choice",
      "question": "计算机的存储器采用分级方式是为了（）。",
      "options": {
        "A": "方便编程",
        "B": "解决容量、速度、价格三者之间的矛盾",
        "C": "保存大量数据方便",
        "D": "操作方便"
      },
      "answer": [
        "D",
        "A"
      ],
      "explanation": "目前更广泛使用的是 SDRAM（同步 DRAM）。与传统的异步 DRAM 不同，SDRAM 的数据读/写操作与系统时钟同步，能够以 CPU-主存总线的较高速率运行。在连续访问同一行（页）内的数据时，可实现突发传输，显著减少甚至避免插入等待状态。在异步 DRAM 中，CPU 发出地址和控制信号后，必须等待一段不确定的延迟时间才能获得数据或完成写入；在此期间，CPU 不断轮询存储器的状态信号，无法执行其他任务，从而降低整体执行效率。而 SDRAM 在系统时钟驱动下工作，它将 CPU 发出的地址和控制信号锁存，并在预设的若干时钟周期后返回数据或完成写入，使得 CPU 无须等待，可在延迟期间执行其他指令，显著提升系统性能。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-1-5_06",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.1.5",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "multiple_choice",
      "question": "计算机的存储系统包括（）。",
      "options": {
        "A": "RAM",
        "B": "ROM",
        "C": "主存储器",
        "D": "寄存器、Cache、主存储器和外存储器"
      },
      "answer": [
        "A",
        "D",
        "A"
      ],
      "explanation": "表 3.1 详细列出了 SRAM 和 DRAM 各自的特点。\n\n表 3.1 SRAM 和 DRAM 各自的特点\n\n<table><tr><td rowspan=\"2\">特点</td><td colspan=\"2\">类型</td></tr><tr><td>SRAM</td><td>DRAM</td></tr><tr><td>存储信息</td><td>触发器</td><td>电容</td></tr><tr><td>破坏性读出</td><td>非</td><td>是</td></tr><tr><td>需要刷新</td><td>不需要</td><td>需要</td></tr><tr><td>送行列地址</td><td>同时送</td><td>分两次送(复用)</td></tr><tr><td>运行速度</td><td>快</td><td>慢</td></tr><tr><td>集成度</td><td>低</td><td>高</td></tr><tr><td>存储成本</td><td>高</td><td>低</td></tr><tr><td>主要用途</td><td>高速缓存</td><td>主机内存</td></tr></table>",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md",
      "hidden": true,
      "hidden_reason": "duplicated_answer_and_mismatched_explanation"
    },
    {
      "id": "计算机组成原理_3-1-5_09",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.1.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "存储器分层体系结构中，存储器从速度最快到最慢的排列顺序是（）。",
      "options": {
        "A": "寄存器-主存-Cache-辅存",
        "B": "寄存器-主存-辅存-Cache",
        "C": "寄存器-Cache-辅存-主存",
        "D": "寄存器-Cache-主存-辅存"
      },
      "answer": [
        "D"
      ],
      "explanation": "在存储器分层结构中，寄存器在 CPU 中，因此速度最快，Cache 次之，主存再次之，最慢的是辅存（如磁盘、光盘等）。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-1-5_10",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.1.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于多级存储系统的说法中，正确的有（）。 I. 多级存储系统是为了降低存储成本 II. 虚拟存储器中主存和辅存之间的数据调动对任何程序员是透明的 III. CPU 只能与 Cache 直接交换信息，CPU 与主存交换信息也需要经过 Cache",
      "options": {
        "A": "仅 I",
        "B": "仅 I 和 II",
        "C": "I、II和III",
        "D": "仅 II"
      },
      "answer": [
        "A"
      ],
      "explanation": "主存和辅存之间的数据调动是由硬件和操作系统共同完成的，仅对应用级程序员透明。CPU与主存可直接交换信息。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-1-5_11",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.1.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "若某存储器存取周期为 250ns，每次读出 16 位，该存储器的数据传输速率是（）。",
      "options": {
        "A": "$4 \\times 10^{6}$ B/s",
        "B": "16MB/s",
        "C": "$8 \\times 10^{6}$ B/s",
        "D": "$8 \\times 2^{20} B/s$"
      },
      "answer": [
        "C"
      ],
      "explanation": "每个存取周期读出 16bit = 2B，因此数据传输速率为 $2\\mathrm{B} \\div (250 \\times 10^{-9})\\mathrm{s}$ ，即 $8 \\times 10^{6}\\mathrm{B/s}$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_06",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列关于存储器的说法中，不正确的是（）。",
      "options": {
        "A": "随机存储器和只读存储器不可以统一编址",
        "B": "在访问随机存储器时，访问时间与存储单元的物理位置无关",
        "C": "随机存储器（RAM）芯片可随机存取信息，掉电后信息会丢失",
        "D": "只读存储器（ROM）芯片可随机存取信息，掉电后信息不会丢失"
      },
      "answer": [
        "A"
      ],
      "explanation": "主存由 RAM 和 ROM 构成，两者统一编址，选项 A 错误。选项 B 描述的是随机访问特性，正确。RAM 芯片具有随机访问特性和易失性，选项 C 正确。ROM 芯片具有随机访问特性和非易失性，选项 D 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_07",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "关于半导体存储器的组织，下列选项中（）是不正确的。",
      "options": {
        "A": "在同一个存储器中，每个存储单元的宽度可以不同",
        "B": "所谓 “编址”，是指给每个存储单元一个编号",
        "C": "存储器的核心部分是存储阵列，由若干存储单元构成",
        "D": "每个存储单元由若干存储元件构成，每个存储元件存储一个比特位"
      },
      "answer": [
        "A"
      ],
      "explanation": "同一个存储器中，每个存储单元的宽度必须相同，即每个存储单元存储的比特位数必须相同。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_08",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "关于 SRAM 和 DRAM，下列叙述中正确的是（）。",
      "options": {
        "A": "通常 SRAM 依靠电容暂存电荷来存储信息，电容上有电荷为 1，无电荷为 0",
        "B": "DRAM 依靠双稳态电路的两个稳定状态来分别存储 0 和 1",
        "C": "SRAM 速度较慢，但集成度稍高；DRAM 速度稍快，但集成度低",
        "D": "SRAM 速度较快，但集成度稍低；DRAM 速度稍慢，但集成度高"
      },
      "answer": [
        "D"
      ],
      "explanation": "SRAM 依靠双稳态电路的两个稳定状态来分别存储 0 和 1；SRAM 速度较快，不需要动态刷新，但集成度稍低，功耗大，单位价格高。DRAM 依靠电容暂存电荷来存储信息，电容上有电荷为 1，无电荷为 0；DRAM 集成度高，功耗小，单位价格较低，需定时刷新，速度慢。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_09",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "某一 DRAM 芯片，采用地址复用技术，容量为 $1024 \\times 8$ 位，该芯片的地址引脚和数据引脚总数至少是（）。",
      "options": {
        "A": "18",
        "B": "13",
        "C": "8",
        "D": "17"
      },
      "answer": [
        "B"
      ],
      "explanation": "$1024 \\times 8$ 位，寻址范围是 $1024 = 2^{10}$ 。采用地址复用技术时，分两次传送行、列地址，地址引脚减半为5根，数据引脚仍为8根，因此地址引脚和数据引脚总数至少为13根。\n\n注意 SRAM 和 DRAM 的区别，DRAM 采用地址复用技术，而 SRAM 不采用。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_10",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列几种存储器中，（）是易失性存储器。",
      "options": {
        "A": "Cache",
        "B": "EPROM",
        "C": "Flash 存储器",
        "D": "CD-ROM"
      },
      "answer": [
        "A"
      ],
      "explanation": "Cache 由 SRAM 组成，掉电后信息即消失，属于易失性存储器。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_11",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "U 盘属于（）类型的存储器。",
      "options": {
        "A": "高速缓存",
        "B": "主存",
        "C": "只读存储器",
        "D": "随机存储器"
      },
      "answer": [
        "C"
      ],
      "explanation": "U 盘采用 Flash 存储技术，它是在 $E^{2}PROM$ 的基础上发展起来的，属于 ROM 的一种。擦写速度和性价比均很可观，因此常用作辅存。值得注意的是，随机存取与随机存储器是两个不同的概念，只读存储器也是随机存取的。因此，支持随机存取的存储器并不一定是随机存储器。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_12",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "下面有关 ROM 和 RAM 的叙述中，错误的是（）。",
      "options": {
        "A": "RAM 是可读可写存储器，ROM 是只读存储器",
        "B": "ROM 和 RAM 都采用随机访问方式进行读/写",
        "C": "系统的主存由 RAM 和 ROM 组成",
        "D": "系统的主存都用 DRAM 芯片实现"
      },
      "answer": [
        "D"
      ],
      "explanation": "系统主存主要由 DRAM 构成，但通常也包含用于存放 BIOS 或固件的 ROM（如 Flash），因此并非全部由 DRAM 实现，D 选项的说法错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_13",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "下列说法正确的是（）。",
      "options": {
        "A": "EPROM 是可改写的，因此可以作为随机存储器",
        "B": "EPROM 是可改写的，但不能作为随机存储器",
        "C": "EPROM 是不可改写的，因此不能作为随机存储器",
        "D": "EPROM 只能改写一次，因此不能作为随机存储器"
      },
      "answer": [
        "B"
      ],
      "explanation": "EPROM 可多次改写，但改写较为烦琐，写入时间过长，且改写的次数有限，速度较慢，因此不能作为需要频繁读/写的 RAM 使用。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_14",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下列（）是动态半导体存储器的特点。 I. 在工作中存储器内容会产生变化 II. 每隔一定时间，需要根据原存内容重新写入一遍 III. 一次完整的刷新过程需要占用两个存取周期 IV. 一次完整的刷新过程只需要占用一个存取周期",
      "options": {
        "A": "I、III",
        "B": "II、III",
        "C": "II、IV",
        "D": "只有 III"
      },
      "answer": [
        "C"
      ],
      "explanation": "动态半导体存储器利用电容存储电荷的特性记录信息，电容会放电，因此必须在电荷流失前对电容充电，即刷新。方法是每隔一定的时间，根据原存内容重新写入一遍，因此说法I错误。这里的读并不是把信息读入CPU，也不是从CPU向主存存入信息，它只是把信息读出，通过一个刷新放大器后又重新存回存储单元，而刷新放大器是集成在RAM上的。因此，这里只进行了一次访存，也就是占用一个存取周期，说法II、IV正确，说法III错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_15",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "下列关于存储器层次结构的说法中，错误的是（）。",
      "options": {
        "A": "Flash 存储器读/写速度差异显著，读速接近 RAM，写速接近 ROM",
        "B": "存储器层次结构基于程序局部性原理，通常采用缓冲技术缓解层级间速率差异",
        "C": "Cache 位于 CPU 与主存之间，容量通常大于主存，旨在提升平均访问速率",
        "D": "辅存（如机械硬盘）容量大、成本低但速度慢，仅作为主存的补充与备份"
      },
      "answer": [
        "C"
      ],
      "explanation": "Flash 存储器的读速接近 RAM，但写/擦除速度慢，类似 ROM，读写性能显著不对称。存储器层次结构以局部性原理为设计基础，通过缓冲机制有效缓解各级存储器间的速率差异。Cache 虽位于 CPU 与主存之间且访问速度快，但其容量远小于主存，并非 “大于主存”，选项 C 错误。辅存（如机械硬盘）因速度慢，不参与 CPU 实时访存，仅用于主存扩展或持久性存储。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_16",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "下列关于 Flash 存储器特性与应用的说法中，正确的是（）。",
      "options": {
        "A": "读写速度一致，均接近 DRAM 的访问速率",
        "B": "属于易失性存储器，断电后数据丢失",
        "C": "写操作前需先擦除目标块，故写速慢于读速",
        "D": "仅能用作辅助存储器（如 U 盘）"
      },
      "answer": [
        "C"
      ],
      "explanation": "Flash 存储器是非易失性存储器，断电后数据不会丢失。其读操作速度较快（接近 RAM），但写入和擦除必须以块为单位进行，且需要先擦除再写入，因此写速显著慢于读速，选项 C 正确。此外，Flash 存储器广泛应用于电脑、手机、智能手表等设备的内部存储，而非限于 U 盘等辅助存储器。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_17",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "DRAM 具有破坏性读出的特性，需要定时刷新，下列说法中不正确的是（）。",
      "options": {
        "A": "刷新是以行为单位的",
        "B": "刷新是为了给 DRAM 存储单元中的存储电容重新充电",
        "C": "刷新是通过对存储单元进行“读但不输出数据”，即“假读”的操作来实现的",
        "D": "DRAM 内部设有专门的刷新电路，不会影响到 CPU 的正常访存"
      },
      "answer": [
        "D"
      ],
      "explanation": "刷新也是一个读取的过程，根据读出内容对相应单元进行重写，因此会和CPU的访存冲突，会有访存“死时间”。刷新是指每隔一定的时间必须向栅极电容补充一次电荷，并以行为单位。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_18",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "下列关于 DRAM 和 SDRAM 的说法中，不正确的是（）。",
      "options": {
        "A": "传统 DRAM 芯片与 CPU 采用异步方式交换数据",
        "B": "SDRAM 芯片与 CPU 采用同步方式交换数据",
        "C": "DRAM 需要定期刷新，而 SDRAM 不需要定期刷新",
        "D": "SDRAM 的行缓冲器通常用 SRAM 实现"
      },
      "answer": [
        "C"
      ],
      "explanation": "SDRAM（同步 DRAM）与 SRAM 不同，其与 CPU 采用同步方式交换数据。SDRAM 也是 DRAM 的一种，需要定期刷新。行缓冲器用来缓存指定行中整行的数据，通常用 SRAM 实现。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_19",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "每推出新一代 DRAM 芯片，地址引脚至少增加 1 根，则容量至少提高到原来的（）倍。",
      "options": {
        "A": "2",
        "B": "4",
        "C": "8",
        "D": "16"
      },
      "answer": [
        "B"
      ],
      "explanation": "DRAM 芯片采用地址线复用技术，行地址和列地址分时复用，每增加 1 根地址线，则行地址和列地址各增加 1 位，所以行数和列数各增加 1 倍，因此容量至少提高到原来的 4 倍。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_20",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "若一个内存条中有 16 个 DRAM 芯片，每个芯片中有 4 个位平面，每个位平面的存储阵列为 4096 行×4096 列，则内存条的总容量为（）MB。",
      "options": {
        "A": "64",
        "B": "128",
        "C": "256",
        "D": "512"
      },
      "answer": [
        "B"
      ],
      "explanation": "DRAM 芯片的容量 = 位平面数×行数×列数，即由位平面数、存储阵列的行数和列数决定。因此，一个 DRAM 芯片的容量为 $4096 \\times 4096 \\times 4b = 8MB$ ，内存条的总容量为 $8MB \\times 16 = 128MB$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_21",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "某 DRAM 芯片容量为 $4M \\times 4$ 位，下列说法中错误的是（）。",
      "options": {
        "A": "芯片有 11 个地址引脚",
        "B": "芯片内部的行地址生成器（刷新计数器）为 11 位",
        "C": "芯片内部的行缓冲器容量为 2Kb",
        "D": "芯片有 4 个数据引脚"
      },
      "answer": [
        "C"
      ],
      "explanation": "4M×4 位 DRAM 芯片需 22 位地址，采用地址复用技术，行、列地址分时共用引脚，地址引脚数为 22/2 = 11。行地址位数为 11 位，刷新计数器位数与行地址位数相同。行缓冲器需暂存整行数据，每行包含 $2048 \\times 4$ 位 = 8Kb 数据，选项 C 错误。芯片字长为 4 位，对应 4 个数据引脚。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_22",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "已知单个存储体的存取周期为 110ns，总线传输周期为 10ns，采用低位交叉编址的多模块存储器时，存储体数应（）。",
      "options": {
        "A": "小于 11",
        "B": "等于 11",
        "C": "大于 11",
        "D": "大于或等于 11"
      },
      "answer": [
        "D"
      ],
      "explanation": "低位交叉编址多模块存储器，采用轮流启动的方式时，类似于流水线的工作方式，为保证某个模块再次启动时，其上次的存取操作已完成（流水线不间断），要求两次启动间隔的时间必须大于或等于一个存取周期，即“模块数×总线周期≥存取周期”，得出存储体数应大于或等于11。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_23",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "一个四体并行低位交叉存储器，每个模块的容量是 $64\\mathrm{K} \\times 32$ 位，存取周期为 $200\\mathrm{ns}$ ，总线周期为 $50\\mathrm{ns}$ ，在下述说法中，（）是正确的。",
      "options": {
        "A": "在 200ns 内，存储器能向 CPU 提供 256 位二进制信息",
        "B": "在 200ns 内，存储器能向 CPU 提供 128 位二进制信息",
        "C": "在 50ns 内，每个模块能向 CPU 提供 32 位二进制信息",
        "D": "以上都不对"
      },
      "answer": [
        "B"
      ],
      "explanation": "低位交叉存储器采用流水线技术，可以在一个存取周期内连续访问4个模块，32位 $\\times 4 = 128$ 位。本题答案为B。\n\n注：本题若作为计算题来考虑，从第一个字的读/写请求发出，到第 4 个字读/写结束，共需要 350ns，但这里考查的是整体工作性能，可从以下角度理解：\n\n1）连续取 m 个字耗时 $t_{1}=T+(m-1)r$ ，平均每个字的存取时间是 $t_{1}/m$ ，实际工作时 m 非常大，因此 $t_{1}/m$ 也就非常接近 r，可认为存储器在每个总线周期 r 都能给 CPU 提供一个字。  \n2）流水线充分流动起来后，每个总线周期后都能完成一个字的读/写，所以本题中每4个总线周期（200ns）都能完成4个字的读/写。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_24",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "某机器采用四体低位交叉存储器，现分别执行下述操作：① 读取 6 个连续地址单元中存放的存储字，重复 80 次；② 读取 8 个连续地址单元中存放的存储字，重复 60 次。则①、②所花费的时间之比为（）。",
      "options": {
        "A": "1:1",
        "B": "2:1",
        "C": "4:3",
        "D": "3:4"
      },
      "answer": [
        "C"
      ],
      "explanation": "1）在每轮读取存储器的前6个T/4时间（共3T/2）内，依次进入各个存储体。下一轮读取存储器时，最近访问的 $M_{1}$ 还在占用中（才过T/2的时间），因此必须再等待T/2的时间才能开始新的读取（ $M_{1}$ 连续完成两次读取，也即总共2T的时间才可进入下一轮）。\n\n# 注意\n\n进入下一轮不需要第6个字读取结束，第5个字读取结束时 $\\mathrm{M}_1$ 就已空出，即可马上进入下一轮。\n\n最后一轮读取结束的时间是本轮第6个字读取结束，共 $(6-1)\\times(T/4)+T=2.25T$ 。\n\n情况 1）的总时间为 $(80-1)\\times2T+2.25T=160.25T$ 。\n\n![](images/c977a2fad0a186887b7b89abae749c946678c8e181b49d0fea9512ccd9c58f3a.jpg)\n\n<details>\n<summary>other</summary>\n\n| t   | M1  | M2  | M3  | M4  |\n| --- | --- | --- | --- | --- |\n| 0   | 1   | 1   | 1   | 1   |\n| T   | 2   | 2   | 2   | 2   |\n| 2T  | 3   | 3   | 3   | 3   |\n| 3T  | 4   | 4   | 4   | 4   |\n| 4T  | 5   | 5   | 5   | 5   |\n| End | End | End | End | End |\n</details>\n\n2）每轮读取8个存储字刚好经过 $2T$ 的时间，每轮结束后，最近访问的 $\\mathbf{M}_1$ 刚好经过了时间 $T$ ，此时可以立即开始下一轮的读取。\n\n最后一轮读取结束的时间是本轮第8个字读取结束，共 $(8-1)\\times(T/4)+T=2.75T$ 。\n\n情况 2）的总时间为 $(60-1)\\times2T+2.75T=120.75T$ 。\n\n因此情况 1）和 2）所花费的总时间比为 4：3。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_25",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "假定用若干 $16K \\times 8$ 位的存储芯片组成一个 $64K \\times 8$ 位的存储器，芯片各单元采用交叉编址方式，则地址 BFFFH 所在的芯片的最小地址为（）。",
      "options": {
        "A": "0000H",
        "B": "0001H",
        "C": "0002H",
        "D": "0003H"
      },
      "answer": [
        "D"
      ],
      "explanation": "$64\\mathrm{K}\\times 8$ 位/ $16\\mathrm{K}\\times 8$ 位 $= 4$ ，可知芯片数为4。芯片各单元采用交叉编址，所以每个芯片的片选信号由最低两位地址确定，高14位为片内地址。4个芯片内各存储单元的最低两位地址分别为00、01、10、11，即最小地址分别为 $0000\\mathrm{H}$ 、 $0001\\mathrm{H}$ 、 $0002\\mathrm{H}$ 、 $0003\\mathrm{H}$ 。地址BFFFH最低两位为11，因此该存储单元所在芯片的最小地址为 $0003\\mathrm{H}$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_26",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "下列关于单体多字存储器的说法中，不正确的是（）。",
      "options": {
        "A": "单体多字存储器主要解决主存容量太小的问题",
        "B": "单体多字存储器中，每个存储单元存储多个字",
        "C": "指令与数据的连续存放有利于单体多字存储器提高主存的读/写速度",
        "D": "过多的转移指令会严重影响单体多字存储器的工作效率"
      },
      "answer": [
        "A"
      ],
      "explanation": "单体多字存储器主要解决访存速度的问题，并没有解决主存容量太小的问题。在单体多字存储器中，每个存储单元存储多个字，当指令和数据连续存放，且没有过多的转移指令时，单体多字存储器能有效地提高主存的读/写速度。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_27",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "多模块存储器之所以能提高存储器的访问速度，是因为（）。",
      "options": {
        "A": "采用了高速元器件",
        "B": "各模块有独立的读/写电路",
        "C": "采用了信息预读技术",
        "D": "模块内各单元地址连续"
      },
      "answer": [
        "B"
      ],
      "explanation": "多模块存储器各模块有独立的读/写电路，可以实现并行操作，所以多模块存储器能进行高速的读/写操作。采用低位交叉编址的多模块存储器各单元地址不连续。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_28",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "某存储器总线的宽度是 64 位，若用 8 个 16M×8 位的 DRAM 芯片扩展构成 16M×64 位的内存条，按字节编址，支持突发传送方式，某 double 型的变量 x 的主存地址为 2026 0000H，某 int 型的变量 y 的主存地址为 2026 1006H，则下列叙述中错误的是（）。",
      "options": {
        "A": "该内存条可不采用多模块交叉编址",
        "B": "DRAM 芯片的行缓冲采用的是 SRAM",
        "C": "读取变量 x 只需要一个存取周期",
        "D": "读取变量 y 需要两个存取周期"
      },
      "answer": [
        "A"
      ],
      "explanation": "存储器总线的宽度是 64 位，内存条一次向计算机提供 8B 的数据，每个 DRAM 芯片提供 1B 的数据，因此一定采用多模块交叉编址，选项 A 错误。DRAM 芯片的行缓冲采用 SRAM。在此内存条中，同时读出的 64 位只可能是第 0～7 单元、第 8～15 单元……第 $8k \\sim 8k + 7$ 单元，根据变量 x 和 y 的主存地址可知，读取 x 需要一个存取周期，读取 y 需要两个存取周期。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_29",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2010 统考真题】下列有关 RAM 和 ROM 的叙述中，正确的是（）。 I. RAM 是易失性存储器，ROM 是非易失性存储器 II. RAM 和 ROM 都采用随机存取方式进行信息访问 III. RAM 和 ROM 都可用作 Cache IV. RAM 和 ROM 都需要进行刷新",
      "options": {
        "A": "仅I和II",
        "B": "仅 II 和 III",
        "C": "仅 I、II 和 III",
        "D": "仅 II、III 和 IV"
      },
      "answer": [
        "A"
      ],
      "explanation": "RAM（分 DRAM 和 SRAM）断电后会失去信息，而 ROM 断电后不会丢失信息，它们都采用随机存取方式。Cache 一般采用高速的 SRAM 制成，而 ROM 只可读，不能用作 Cache，说法 III 错误。DRAM 需要定期刷新，而 ROM 不需要刷新，所以说法 IV 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_30",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2011 统考真题】下列各类存储器中，不采用随机存取方式的是（）。",
      "options": {
        "A": "EPROM",
        "B": "CD-ROM",
        "C": "DRAM",
        "D": "SRAM"
      },
      "answer": [
        "B"
      ],
      "explanation": "随机存取是指 CPU 可对存储器的任意一个存储单元中的内容随机存取，而且存取时间与存储单元的物理位置无关。选项 A、C 和 D 均采用随机存取方式，CD-ROM 即光盘，采用串行存取方式（直接存取）。注意，CD-ROM 是只读型光盘存储器，不属于只读存储器（ROM）。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_31",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2012 统考真题】下列关于闪存的叙述中，错误的是（）。",
      "options": {
        "A": "信息可读可写，并且读、写速度一样快",
        "B": "存储元件由 MOS 管组成，是一种半导体存储器",
        "C": "掉电后信息不丢失，是一种非易失性存储器",
        "D": "采用随机访问方式，可替代计算机外部存储器"
      },
      "answer": [
        "A"
      ],
      "explanation": "闪存是 $E^{2}PROM$ 的进一步发展，可读可写，用 MOS 管的浮栅上有无电荷来存储信息。闪存依然是 ROM 的一种，写入时必须先擦除原有数据，所以写速度要比读速度慢。闪存是一种非易失性存储器，它采用随机访问方式。现在常见的 SSD 固态硬盘，即由 Flash 存储器芯片组成。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_32",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2014统考真题】某容量为256MB的存储器由若干 $4\\mathrm{M}\\times 8$ 位的DRAM芯片构成，该DRAM芯片的地址引脚和数据引脚总数是（）。",
      "options": {
        "A": "19",
        "B": "22",
        "C": "30",
        "D": "36"
      },
      "answer": [
        "A"
      ],
      "explanation": "$4\\mathrm{M}\\times 8$ 位的芯片数据线应为8根，地址线应为 $\\log_24\\mathrm{M} = 22$ 根，而DRAM采用地址复用技术，地址线是原来的 $1 / 2$ ，且地址信号分行、列两次传送。地址线数为 $22 / 2 = 11$ 根，所以地址引脚与数据引脚的总数为 $11 + 8 = 19$ 根，选择选项A。此题需要注意DRAM采用的是传两次地址的策略，所以地址线为正常的一半，这是很多考生容易忽略的地方。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_33",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2015 统考真题】下列存储器中，在工作期间需要周期性刷新的是（）。",
      "options": {
        "A": "SRAM",
        "B": "SDRAM",
        "C": "ROM",
        "D": "Flash 存储器"
      },
      "answer": [
        "B"
      ],
      "explanation": "DRAM 使用电容存储，所以必须隔一段时间刷新一次，若存储单元未被刷新，则存储的信息就会丢失。同步动态随机存储器 SDRAM 是现在最常用的一种 DRAM。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_34",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2015 统考真题】某计算机使用四体交叉编址存储器，假定在存储器总线上出现的主存地址（十进制）序列为 8005, 8006, 8007, 8008, 8001, 8002, 8003, 8004, 8000，则可能发生访存冲突的地址对是（）。",
      "options": {
        "A": "8004 和 8008",
        "B": "8002 和 8007",
        "C": "8001 和 8008",
        "D": "8000 和 8004"
      },
      "answer": [
        "D"
      ],
      "explanation": "每个访存地址对应的存储模块序号（0,1,2,3）如下所示：\n\n<table><tr><td>访存地址</td><td>8005</td><td>8006</td><td>8007</td><td>8008</td><td>8001</td><td>8002</td><td>8003</td><td>8004</td><td>8000</td></tr><tr><td>模块序号</td><td>1</td><td>2</td><td>3</td><td>0</td><td>1</td><td>2</td><td>3</td><td>0</td><td>0</td></tr></table>\n\n其中，模块序号 = 访存地址%存储器交叉模块数。\n\n判断可能发生访存冲突的规则如下：给定的访存地址在相邻的四次访问中出现在同一个存储模块内。据此，根据上表可知8004和8000对应的模块号都为0，即表明这两次的访问出现在同一模块内且在相邻的访问请求中，满足发生冲突的条件。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_35",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "【2017 统考真题】某计算机主存按字节编址，由 4 个 64M×8 位的 DRAM 芯片采用交叉编址方式构成，并与宽度为 32 位的存储器总线相连，主存每次最多读/写 32 位数据。若 double 型变量 x 的主存地址为 804 001AH，则读取 x 需要的存取周期数是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "C"
      ],
      "explanation": "交叉编址多模块存储器有轮流启动和同时启动两种方式，本题中所有存储模块一次并行读/写的总位数正好等于系统总线中的数据线数，所以可以判定采用的是同时启动方式。在同时启动方式下，一个存取周期可以对所有芯片的同一行都读取一个字节。double型变量占64位（8B）。其主存地址804 001AH的最低两位是10，说明它从编号为2的芯片开始存储（编号从0开始），共占3行，因此需要同时启动3轮才能完成对double型变量的读取。从本题也可发现，采用同时启动方式时，一次读行也许会有没用的数据读入。\n\n<table><tr><td>第i轮</td><td></td><td></td><td></td><td></td></tr><tr><td>第 $i+1$ 轮</td><td></td><td></td><td></td><td></td></tr><tr><td>第 $i+2$ 轮</td><td></td><td></td><td></td><td></td></tr><tr><td>第 $i+3$ 轮</td><td></td><td></td><td></td><td></td></tr><tr><td>第 $i+4$ 轮</td><td></td><td></td><td></td><td></td></tr><tr><td>体号</td><td>00</td><td>01</td><td>10</td><td>11</td></tr></table>",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_36",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "【2018 统考真题】假定 DRAM 芯片中存储阵列的行数为 r、列数为 c，对于一个 $2K \\times 1$ 位的 DRAM 芯片，为保证其地址引脚数最少，并尽量减少刷新开销，则 r、c 的取值分别是（）。",
      "options": {
        "A": "2048, 1",
        "B": "64, 32",
        "C": "32,64",
        "D": "1,2048"
      },
      "answer": [
        "C"
      ],
      "explanation": "由题意，首先根据DRAM采用的是行列地址线复用技术，我们尽量选用行列差值不要太大的，选项B、C的地址线只需6根（取行或列所需地址线的最大值），轻松排除选项A和D。其次，为了减小刷新开销，而DRAM一般是按行刷新的，所以应选行数值较少的。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-2-4_37",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.2.4",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "【2022 统考真题】某内存条包含 8 个 $8192 \\times 8192 \\times 8$ 位的 DRAM 芯片，按字节编址，支持突发（burst）传送方式，对应存储器总线宽度为 64 位，每个 DRAM 芯片内有一个行缓冲区（row buffer）。下列关于该内存条的叙述中，不正确的是（）。",
      "options": {
        "A": "内存条的容量为 512 MB",
        "B": "采用多模块交叉编址方式",
        "C": "芯片的地址引脚为 26 位",
        "D": "芯片内行缓冲有 $8192 \\times 8$ 位"
      },
      "answer": [
        "C"
      ],
      "explanation": "$8 \\times 8192 \\times 8192 \\times 8bit = 512MB$ ，内存条的容量为 512MB，选项 A 正确。存储器总线宽度 64 = 8×8bit，而每个芯片一次只能传输 8bit，需要 8 体多模块交叉编址采用同时启动方式才能实现，选项 B 正确。芯片容量为 $8192 \\times 8192 \\times 8bit$ ，按字节编址，地址线数应为 $\\log_{2}(8192 \\times 8192) = 26$ ，DRAM 采用地址复用技术，地址信号分行、列两次传送，因此地址引脚数为 26/2 = 13 根，选项 C 错误。芯片内行数是 8192，一行的大小是 $8192 \\times 8bit$ ，行缓冲长度就是一行的大小，选项 D 正确。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-3-3_04",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "16 片 2K×4 位的存储器可以设计为（）存储容量的 16 位存储器。",
      "options": {
        "A": "16K",
        "B": "32K",
        "C": "8K",
        "D": "2K"
      },
      "answer": [
        "C"
      ],
      "explanation": "设存储容量为 M，则有 $(M \\times 16) \\div (2K \\times 4) = 16$ ，因此 M = 8K。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-3-3_05",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "设 CPU 地址总线有 24 根，数据总线有 32 根，用 512K×8 位的 RAM 芯片构成该计算机的主存储器，则该计算机主存最多需要（）片这样的存储芯片。",
      "options": {
        "A": "256",
        "B": "512",
        "C": "64",
        "D": "128"
      },
      "answer": [
        "D"
      ],
      "explanation": "地址线为 24 根，寻址范围是 $2^{24}$ ；数据线为 32 根，字长为 32 位。主存的总容量 $=2^{24}\\times32$ 位，因此所需存储芯片数 $=(2^{24}\\times32)\\div(512K\\times8)=128$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-3-3_06",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "地址总线 $A_{0}$ （高位）\\~ $A_{15}$ （低位），用 $4K \\times 4$ 位的存储芯片组成 16KB 存储器，则产生片选信号的译码器的输入地址线应该是（）。",
      "options": {
        "A": "$A_{2}A_{3}$",
        "B": "$A_{0}A_{1}$",
        "C": "$A_{12}A_{13}$",
        "D": "$A_{14}A_{15}$"
      },
      "answer": [
        "A"
      ],
      "explanation": "$A_{15}$ 为地址线的低位，接入各芯片地址端的是地址线的低 12 位，即 $A_{4} \\sim A_{15}$ ，共有 8 个芯片（16KB/4K = 4B，并且位扩展时每组两片共分为 4 组）组成 16KB 的存储器，因此由高两位地址线 $A_{2}A_{3}$ 作为译码器的输入。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-3-3_07",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "若内存地址区间为 4000H～43FFH，每个存储单元可存储 16 位二进制数，该内存区域用 4 片存储芯片构成，构成该内存所用的存储芯片的容量是（）。",
      "options": {
        "A": "$512 \\times 16$ bit",
        "B": "256×8bit",
        "C": "256×16bit",
        "D": "$1024 \\times 8$ bit"
      },
      "answer": [
        "C"
      ],
      "explanation": "$43FF - 4000 + 1 = 400H$ ，即内存区域为1K个单元，总容量为 $1K \\times 16$ 位。现该内存由4片存储芯片构成，则构成该内存的芯片容量为 $1K \\times 16$ 位/ $4 = 256 \\times 16$ 位。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-3-3_08",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "内存按字节编址，地址从 90000H 到 CFFFFH，若用存储容量为 16K×8 位的芯片构成该内存，至少需要的芯片数是（）。",
      "options": {
        "A": "2",
        "B": "4",
        "C": "8",
        "D": "16"
      },
      "answer": [
        "D"
      ],
      "explanation": "CFFFF - 90000 + 1 = 40000H，即内存区域有 256K 个单元。若用存储容量为 $16K \\times 8$ 位的芯片，则需要的芯片数 $=(256K \\times 8) \\div (16K \\times 8) = 16$ 片。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-3-3_09",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "若片选地址为 111 时，选定某一 $32K \\times 16$ 位的存储芯片工作，则该芯片在存储器中的首地址和末地址分别为（）。",
      "options": {
        "A": "00000H, 01000H",
        "B": "38000H, 3FFFFH",
        "C": "3800H, 3FFFH",
        "D": "0000H, 0100H"
      },
      "answer": [
        "B"
      ],
      "explanation": "32K×16 的存储芯片有地址线 15 根（片内地址），片选地址为 3 位，因此地址总位数为 18 位，现高 3 位为 111，则首地址为 111000000000000000 = 38000H，末地址为 111111111111111111 = 3FFFFH。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-3-3_10",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "【2009 统考真题】某计算机主存容量为 64KB，其中 ROM 区为 4KB，其余为 RAM 区，按字节编址。现要用 2K×8 位的 ROM 芯片和 4K×4 位的 RAM 芯片来设计该存储器，需要上述规格的 ROM 芯片数和 RAM 芯片数分别是（）。",
      "options": {
        "A": "1,15",
        "B": "2,15",
        "C": "1,30",
        "D": "2,30"
      },
      "answer": [
        "D"
      ],
      "explanation": "首先确定 ROM 的个数，ROM 区为 4KB，选用 2K×8 位的 ROM 芯片，需要 $(4K \\times 8) \\div (2K \\times 8) = 2$ 片，采用字扩展方式；RAM 区为 60KB，选用 4K×4 位的 RAM 芯片，需要 $(60K \\times 8) \\div (4K \\times 4) = 30$ 片，采用字和位同时扩展的方式。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-3-3_11",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2010 统考真题】假定用若干 $2K \\times 4$ 位的芯片组成一个 $8K \\times 8$ 位的存储器，则地址 0B1FH 所在芯片的最小地址是（）。",
      "options": {
        "A": "0000H",
        "B": "0600H",
        "C": "0700H",
        "D": "0800H"
      },
      "answer": [
        "D"
      ],
      "explanation": "用 $2K \\times 4$ 位的芯片组成一个 $8K \\times 8$ 位的存储器，共需 8 片 $2K \\times 4$ 位的芯片，分为 4 组，每组由 2 片 $2K \\times 4$ 位的芯片并联组成 $2K \\times 8$ 位的芯片，各组芯片的地址分配如下：\n\n第一组（两个芯片并联）：0000H～07FFH。\n\n第二组（两个芯片并联）：0800H～0FFFH。\n\n第三组（两个芯片并联）：1000H～17FFH。\n\n第四组（两个芯片并联）：1800H～1FFFH。\n\n地址 0B1FH 所在的芯片属于第二组，所以其所在芯片的最小地址为 0800H。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-3-3_12",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2011 统考真题】某计算机存储器按字节编址，主存地址空间大小为 64MB，现用 $4M \\times 8$ 位的 RAM 芯片组成 32MB 的主存储器，则存储器地址寄存器 MAR 的位数至少是（）。",
      "options": {
        "A": "22 位",
        "B": "23 位",
        "C": "25 位",
        "D": "26 位"
      },
      "answer": [
        "D"
      ],
      "explanation": "主存按字节编址，地址空间大小为 64MB，MAR 的寻址范围为 $64M = 2^{26}$ ，因此是 26 位。实际的主存容量 32MB 不能代表 MAR 的位数，考虑到存储器扩展的需要，MAR 应保证能访问到整个主存地址空间，反过来，MAR 的位数决定了主存地址空间的大小。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-3-3_13",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2016 统考真题】某存储器容量为 64KB，按字节编址，地址 4000H \\~ 5FFFH 为 ROM 区，其余为 RAM 区。若采用 8K×4 位的 SRAM 芯片进行设计，则需要该芯片的数量是（）。",
      "options": {
        "A": "7",
        "B": "8",
        "C": "14",
        "D": "16"
      },
      "answer": [
        "C"
      ],
      "explanation": "5FFF - 4000 + 1 = 2000H，即 ROM 区容量为 $2^{13}B = 8KB$ （ $2000H = 2 \\times 16^{3} = 2^{13}$ ），RAM 区容量为 56KB（64KB - 8KB = 56KB）。需要 8K × 4 位的 SRAM 芯片的数量为 14（56KB / 8K × 4 位 = 14）。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-3-3_14",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2021 统考真题】某计算机的存储器总线中有 24 位地址线和 32 位数据线，按字编址，字长为 32 位。若 00 0000H \\~ 3F FFFFH 为 RAM 区，则需要 512K×8 位的 RAM 芯片数为（）。",
      "options": {
        "A": "8",
        "B": "16",
        "C": "32",
        "D": "64"
      },
      "answer": [
        "C"
      ],
      "explanation": "000000～3FFFFFF，共有 3FFFFFFH - 000000H + 1H = 400000H = 2 $^{22}$ 个地址，按字编址，字长为 32位（4B），因此 RAM 区大小为 $2^{22} \\times 4B = 2^{22} \\times 32bit$ 。每个 RAM 芯片的容量为 $512K \\times 8bit = 2^{19} \\times 8bit$ ，所以需要 RAM 芯片的数量为 $(2^{22} \\times 32bit) \\div (2^{19} \\times 8bit) = 32$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-3-3_15",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2023 统考真题】某计算机的 CPU 有 30 根地址线，按字节编址，CPU 和主存连接时，要求主存芯片占满所有可能的存储地址空间，且 RAM 区和 ROM 区所分配的空间大小比是 3:1。若 RAM 在低地址区，ROM 在高地址区，则 ROM 的地址范围是（）。",
      "options": {
        "A": "0000 0000H \\~ 0FFF FFFFH",
        "B": "1000 0000H \\~ 2FFF FFFFH",
        "C": "3000 0000H \\~ 3FFF FFFFH",
        "D": "4000 0000H \\~ 4FFF FFFFH"
      },
      "answer": [
        "C"
      ],
      "explanation": "地址空间为 $2^{30}$ ，地址范围为 0000 0000H～3FFF FFFFH。RAM:ROM = 3:1，则 ROM 可分配的地址空间为 $2^{28}$ ，从 3FFF FFFFH 往前数 $2^{28}$ 个地址，即 ROM 的地址范围是 3000 0000H～3FFF FFFFH。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-4-3_01",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于磁盘的说法中，错误的是（）。",
      "options": {
        "A": "本质上，U 盘（闪存）是一种只读存储器",
        "B": "RAID 技术可以提高磁盘的磁记录密度和磁盘利用率",
        "C": "未格式化的硬盘容量要大于格式化后的实际容量",
        "D": "计算磁盘的存取时间时，“寻道时间”和“旋转等待时间”常取其平均值"
      },
      "answer": [
        "C"
      ],
      "explanation": "考点追踪 ▶ 直写法的原理及特点（2015、2020）\n\n# （1）全写法（直写法，Write Through）\n\n当 CPU 对 Cache 写命中时，数据同时写入 Cache 和主存。由于主存始终与 Cache 保持同步，因此在替换 Cache 块时，可直接覆盖，无须写回。该方法实现简单，能保证主存数据的实时正确性，但缺点是每次写操作都需访问主存，降低了系统性能。\n\n为缓解直写法的性能开销，可在 Cache 与主存之间增设写缓冲（Write Buffer），如图 3.23 所示。CPU 将数据同时写入 Cache 和写缓冲，由写缓冲异步地将数据写入主存。写缓冲可缓解 CPU 与主存之间的速度差异。但在高频率写操作下，写缓冲可能饱和甚至溢出。\n\n![](images/a23715baf29b33aca9c4f20c416cbfab9727607ea2142d8238c014be4dbe7793.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph LR\n    CPU --> Cache\n    Cache --> DRAM\n    Cache --> WriteBuffer\n    WriteBuffer --> Cache\n```\n</details>\n\n图 3.23 在 Cache 和主存之间加一个写缓冲\n\n考点追踪 ▶ 回写法的原理及应用（2018、2020）\n\n# (2) 回写法（Write Back） $^{①}$\n\n当 CPU 对 Cache 写命中时，仅将数据写入 Cache，不立即写入主存，仅在该块被替换出 Cache 时才写回主存。这种方法减少了主存访问次数，提高了 Cache 效率，但存在数据不一致的风险。为避免不必要的写回操作，每个 Cache 行设置一个修改位（又称脏位）：若修改位为 1，表示该行数据已被修改，替换时必须写回主存；若修改位为 0，表示该行数据与主存一致，替换时可直接覆盖。需要注意的是，直写法无须脏位，因为主存始终同步；回写法则必须设置脏位。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-4-3_02",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于磁盘驱动器的叙述中，错误的是（）。",
      "options": {
        "A": "送到磁盘驱动器的地址由磁头号、盘面号和扇区号组成",
        "B": "能控制磁头移动到指定磁道，并发回“寻道结束”信号",
        "C": "能控制磁盘片转过指定的扇区，并发回“扇区符合”信号",
        "D": "能控制对指定盘面的指定扇区进行数据的读/写操作"
      },
      "answer": [
        "C"
      ],
      "explanation": "# (1) 写分配法（Write Allocate） $^{②}$\n\n当发生写不命中时，先将数据写入主存的对应单元，然后将该主存块调入 Cache 的一个空闲行中。该方法利用了程序的空间局部性，但每次写不命中都要将主存块加载到 Cache 中。\n\n# (2) 非写分配法（Not-Write-Allocate）\n\n当发生写不命中时，直接将数据写入主存，不将主存块调入 Cache。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-4-3_03",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列有关磁盘存储器读/写操作的叙述中，错误的是（）。",
      "options": {
        "A": "最小读/写单位可以是一个扇区",
        "B": "采用直接存储器存取 DMA 方式进行输入/输出",
        "C": "按批处理方式进行一个数据块的读/写",
        "D": "磁盘存储器可与 CPU 交换盘面上的存储信息"
      },
      "answer": [
        "C"
      ],
      "explanation": "(1) 分离 Cache\n\n考点追踪 ▶ 采用分离的指令与数据 Cache 的目的（2014）\n\n随着指令流水技术的发展，现代处理器通常将指令 Cache 和数据 Cache 分开设计，形成分离的 Cache 结构。统一 Cache 的优点在于其设计和实现相对简单，但在流水线执行中，取指部件和执行部件同时访问同一 Cache 时容易产生冲突。通过采用分离 Cache 结构，不仅可以消除这类冲突，还能针对指令和数据的不同局部性特征进行优化，从而提升整体性能。\n\n# (2) 多级 Cache\n\n现代计算机普遍采用多级 Cache 结构。以两级为例，按距离 CPU 的远近分别称为 L1 Cache 和 L2 Cache：L1 离 CPU 最近，速度最快、容量较小；L2 则较远，速度较慢、容量较大。通常情况下，L1 级会采用分离的指令 Cache 和数据 Cache 设计，其中 L1 数据 Cache 在写操作中采用写分配法（写不命中时加载块）与回写法（写命中时不立即写主存）相结合的策略。图 3.25 展示了一个典型的两级 Cache 系统。通常，L1 和 L2 Cache 均采用回写法，当 L1 发生写命中时，仅更新 L1；当 L1 块被替换时，若为脏块，则写回 L2；L2 同理，在替换时写回主存。由于 L2 Cache 的访问速度远高于主存，L1 无须在写命中时访问主存，仅更新本地 Cache 即可快速完成写操作；后续的脏块写回由 L2 高效承接，从而有效避免因频繁写操作导致的写缓冲饱和或溢出问题。\n\n![](images/d1ac9cf2d5bcb132fdfe0aaf4f61894213ffa6a116dfa7042c15308f10e873af.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph LR\n    CPU --> L1 Cache\n    CPU --> WriteBuffer\n    L1 Cache <--> L2 Cache\n    L2 Cache <--> DRAM\n    WriteBuffer --> L1 Cache\n    WriteBuffer --> L2 Cache\n```\n</details>\n\n图 3.25 一个含有两级 Cache 的系统",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-4-3_07",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "一个磁盘的转速为 7200 转/分，每个磁道有 160 个扇区，每个扇区有 512 字节，则在理想情况下，磁盘每秒传输的数据量是（）。",
      "options": {
        "A": "$7200 \\times 160KB$",
        "B": "7200KB",
        "C": "9600KB",
        "D": "19200KB"
      },
      "answer": [
        "C"
      ],
      "explanation": "磁盘的转速为 7200 转/分 = 120 转/秒，转一圈经过 160 个扇区，每个扇区为 512B，所以磁盘每秒传输的数据量为 $120 \\times 160 \\times 512 / 1024 = 9600KB$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-4-3_08",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "某磁盘盘面共有 200 个磁道，盘面总存储容量为 60MB，磁盘旋转一周的时间为 25ms，每个磁道有 8 个扇区，各扇区之间有一间隙，磁头通过每个间隙需 1.25ms。则磁盘接口所需的最大传输速率是（）。",
      "options": {
        "A": "10MB/s",
        "B": "60MB/s",
        "C": "83.3MB/s",
        "D": "20MB/s"
      },
      "answer": [
        "D"
      ],
      "explanation": "每个磁道的容量 = 60MB/200 = 0.3MB，读一个磁道数据的时间等于磁盘旋转一周的时间减去通过扇区间隙的总时间（每个磁道有8个间隙），即 $25ms - 1.25ms \\times 8 = 15ms$ ，数据传输速率 = 0.3MB/15ms = 20MB/s。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-4-3_09",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "【2013 统考真题】某磁盘的转速为 10000 转/分，平均寻道时间是 6ms，磁盘传输速率是 20MB/s，磁盘控制器延迟为 0.2ms，读取一个 4KB 的扇区所需的平均时间约为（）。",
      "options": {
        "A": "9ms",
        "B": "9.4ms",
        "C": "12ms",
        "D": "12.4ms"
      },
      "answer": [
        "B"
      ],
      "explanation": "磁盘转速是 10000 转/分，转一圈的时间为 6ms，因此平均查询扇区的时间为 3ms，平均寻道时间为 6ms，读取 4KB 扇区信息的时间为 $4KB \\div 20MB/s = 0.2ms$ ，磁盘控制器延迟为 0.2ms，总时间为 $3 + 6 + 0.2 + 0.2 = 9.4ms$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-4-3_10",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "【2013 统考真题】下列选项中，用于提高 RAID 可靠性的措施有（）。 I. 磁盘镜像 II. 条带化 III. 奇偶校验 IV. 增加 Cache 机制",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III",
        "C": "仅 I、III 和 IV",
        "D": "仅 II、III 和 IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "RAID0 方案是无冗余和无校验的磁盘阵列技术，而 RAID1～RAID5 方案均是加入了冗余（镜像）或校验的磁盘阵列技术。因此，提高 RAID 可靠性的措施主要是对磁盘进行镜像和奇偶校验，其余选项不符合条件。条带化是一种将数据分片，分别存储至不同的磁盘，提高读/写速度的技术。条带化的优点是读/写速度快，缺点是没有冗余，若其中一块磁盘损坏，则数据就会丢失。因此，条带化通常和其他技术如磁盘镜像或奇偶校验结合使用，形成不同的 RAID 级别。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-4-3_11",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2015 统考真题】若磁盘转速为 7200 转/分，平均寻道时间为 8ms，每个磁道包含 1000 个扇区，则访问一个扇区的平均存取时间大约是（）。",
      "options": {
        "A": "8.1ms",
        "B": "12.2ms",
        "C": "16.3ms",
        "D": "20.5ms"
      },
      "answer": [
        "B"
      ],
      "explanation": "存取时间 = 寻道时间 + 旋转等待时间 + 传输时间。存取一个扇区的平均旋转等待时间为旋转半周的时间，即 $(60/7200)/2=4.17\\mathrm{ms}$ ，传输时间为 $(60/7200)/1000=0.01\\mathrm{ms}$ ，因此访问一个扇区的平均存取时间为 $4.17+0.01+8=12.18\\mathrm{ms}$ ，保留一位小数则为12.2ms。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-4-3_12",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2019 统考真题】下列关于磁盘存储器的叙述中，错误的是（）。",
      "options": {
        "A": "磁盘的格式化容量比非格式化容量小",
        "B": "扇区中包含数据、地址和校验等信息",
        "C": "磁盘存储器的最小读/写单位为 1 字节",
        "D": "磁盘存储器由磁盘控制器、磁盘驱动器和盘片组成"
      },
      "answer": [
        "C"
      ],
      "explanation": "磁盘存储器的最小读/写单位为一个扇区，即磁盘按块存取。磁盘存储数据之前需要进行格式化，将磁盘分成扇区并写入信息，因此磁盘的格式化容量比非格式化容量小。磁盘扇区中包含数据、地址和校验等信息。磁盘存储器由磁盘控制器、磁盘驱动器和盘片组成。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_03",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "假定用作 Cache 的 SRAM 的存取时间为 2ns，用作主存的 SDRAM 的存取时间为 40ns。为使存储系统的平均存取时间达到 3ns，则 Cache 命中率应达到（）左右。",
      "options": {
        "A": "92.5%",
        "B": "85%",
        "C": "97.5%",
        "D": "99.9%"
      },
      "answer": [
        "C"
      ],
      "explanation": "考点追踪 虚拟存储器与 Cache 的比较（2024）\n\n虚拟存储器与 Cache 既有相同之处，又有不同之处。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_04",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "multiple_choice",
      "question": "关于 Cache 的更新策略，下列说法中正确的是（）。",
      "options": {
        "A": "读操作时，全写法和回写法在命中时应用",
        "B": "写操作时，回写法和写分配法在命中时应用",
        "C": "读操作时，全写法和写分配法在失效时应用",
        "D": "写操作时，写分配法、非写分配法在失效时应用"
      },
      "answer": [
        "B",
        "C"
      ],
      "explanation": "考点追踪 ▶ 具有 TLB 的虚拟存储系统的地址变换过程（2024）\n\n图 3.29 为一个具有 TLB 和 Cache 的多级存储系统，其中 Cache 采用 2 路组相联映射方式。CPU 给出一个 32 位的虚拟地址，TLB 采用全相联结构，每项均配备一个比较器。地址转换时，将虚拟地址中的虚页号与所有 TLB 项的标记字段并行比较；若某一项匹配且有效位为 1，则 TLB 命中，直接从中获取实页号，完成地址转换。若 TLB 未命中，则需访问主存中的页表（慢表）以获取对应的页表项，完成地址转换后将其装入 TLB；若 TLB 已满，则需执行替换算法。\n\n获得物理地址后，Cache 根据映射方式将其划分为标记、组号和块内地址三个字段。首先利用组号定位到对应的 Cache 组，再将该组中各 Cache 行的标记与物理地址的标记字段进行比较；若某一行匹配且有效位为 1，则 Cache 命中，再根据块内地址取出对应的数据送至 CPU。\n\n![](images/ac4d20d577660b0b111318cb8d2a460e340be3b35fdd166d3b0ebe62bb9e5129.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"虚拟地址\"] --> B[\"虚页号 (20位)\"]\n    A --> C[\"页内地址 (12位)\"]\n    B --> D[\"TLB\"]\n    C --> D\n    D --> E[\"Tag 有效位 实页号\"]\n    E --> F[\"0008CH 1 0040H\"]\n    F --> G[\"...\"]\n    G --> H[\"...\"]\n    H --> I[\"TLB缺失\"]\n    I --> J[\"20位\"]\n    J --> K[\"页表\"]\n    K --> L[\"物理地址\"]\n    L --> M[\"实页号\"]\n    L --> N[\"页内地址\"]\n    M --> O[\"标记\"]\n    N --> O\n    O --> P[\"组号\"]\n    O --> Q[\"块内地址\"]\n    P --> R[\"数据\"]\n    Q --> R\n    R --> S[\"Cache命中\"]\n    S --> T[\"多路选择\"]\n    T --> U[\"Cache命中\"]\n    U --> V[\"比较器\"]\n    V --> W[\"0 0 00400H ...\"]\n    W --> X[\"有效位 Tag Data\"]\n    X --> Y[\"数据\"]\n    Y --> Z[\"块内地址\"]\n    Z --> AA[\"数据\"]\n    AA --> AB[\"数据\"]\n    AB --> AC[\"数据\"]\n    AC --> AD[\"数据\"]\n    AD --> AE[\"数据\"]\n```\n</details>\n\n图 3.29 TLB 和 Cache 的访问过程\n\n通过 TLB 缓存频繁访问的页表项，系统避免了每次地址转换都访问主存页表，从而在引入虚拟存储器的同时，几乎不降低访存性能。\n\n考点追踪 ▶ TLB、Cache 和 Page 缺失组合的分析（2010）\n\nCPU 一次访存操作可能涉及 TLB、页表、Cache、主存和磁盘的访问，访问过程如图 3.30 所示。可见，CPU 访存过程中存在三种缺失情况：\n\n① TLB 缺失：要访问的虚页号不在 TLB 中：  \n② Cache 缺失：要访问的主存块不在 Cache 中：  \n③ Page 缺失：要访问的页面不在主存中。\n\nTLB 是页表项的缓存，因此 Page 缺失时，TLB 也必然缺失。同理，Cache 是主存的副本，因此 Page 缺失时，Cache 中也不可能有对应的数据。这三种缺失的组合情况见表 3.3。\n\n![](images/b1d5058954df12f5985c9a91bbbee820861a2137e2f3b4142de57cd704b223cc.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"CPU 给出虚拟地址 VA\"] --> B{对应页表项在TLB中?}\n    B -->|否| C[\"TLB缺失\"]\n    B -->|是| D[\"将 VA 转换为物理地址 PA\"]\n    C --> E[\"访问主存中的页表\"]\n    E --> F{访问页面在主存中?}\n    F -->|否| G[\"缺页\"]\n    F -->|是| H[\"更新 TLB 并将 VA 转换为物理地址 PA\"]\n    D --> I{对应主存块在Cache?}\n    I -->|否| J[\"Cache中存在空闲行?\"]\n    I -->|是| K[\"从 Cache 替换出一块\"]\n    J --> L[\"主存块送 Cache, 并置标记和有效位\"]\n    K --> M[\"从磁盘读出一页到主存\"]\n    L --> N[\"更新页表和 TLB\"]\n    M --> O[\"访问 Cache存取数据\"]\n    N --> P[\"主存中存在空闲页框?\"]\n    P --> Q[\"从主存换出一页\"]\n    Q --> R[\"主存中存在空闲页框?\"]\n    R --> S[\"缺页处理\"]\n    style A fill:#f9f,stroke:#333\n    style D fill:#f9f,stroke:#333\n    style I fill:#f9f,stroke:#333\n    style J fill:#f9f,stroke:#333\n    style K fill:#f9f,stroke:#333\n    style L fill:#f9f,stroke:#333\n    style M fill:#f9f,stroke:#333\n    style N fill:#f9f,stroke:#333\n    style O fill:#f9f,stroke:#333\n```\n</details>\n\n图 3.30 带 TLB 虚拟存储器的 CPU 访存过程\n\n表 3.3 TLB、Page、Cache 三种缺失的可能组合情况\n\n<table><tr><td>序号</td><td>TLB</td><td>Page</td><td>Cache</td><td>说明</td></tr><tr><td>1</td><td>命中</td><td>命中</td><td>命中</td><td>TLB 命中则 Page 一定命中,信息在主存,就可能在 Cache 中</td></tr><tr><td>2</td><td>命中</td><td>命中</td><td>缺失</td><td>TLB 命中则 Page 一定命中,信息在主存,也可能不在 Cache 中</td></tr><tr><td>3</td><td>缺失</td><td>命中</td><td>命中</td><td>TLB 缺失但 Page 可能命中,信息在主存,就可能在 Cache 中</td></tr><tr><td>4</td><td>缺失</td><td>命中</td><td>缺失</td><td>TLB 缺失但 Page 可能命中,信息在主存,也可能不在 Cache 中</td></tr><tr><td>5</td><td>缺失</td><td>缺失</td><td>缺失</td><td>TLB 缺失则 Page 也可能缺失,信息不在主存,也一定不在 Cache</td></tr></table>\n\n最好的情况是第 1 种组合，此时无须访问主存；第 2 种和第 3 种组合需要访问一次主存；第 4 种组合需要访问两次主存；第 5 种组合发生 “缺页异常”，需要访问磁盘，并至少访问两次主存。Cache 缺失处理由硬件自动完成；缺页处理由操作系统通过 “缺页异常处理程序” 实现，具体步骤包括调入所需页面、更新页表等；TLB 缺失既可用硬件处理，也可用软件处理。\n\n# 注意\n\n在《操作系统考研复习指导》的第3章中，介绍了在同时具有TLB和Cache的存储系统中虚实地址转换的实例，读者可以结合该内容进行学习。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_07",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "对于下列代码，以下哪种变化将使其具有更好的空间局部性（）。 ```c ① int i, j, k, sum = 0; ② for (i = 0; i < n; i++) ③    for (j = 0; j < n; j++) ④    for (k = 0; k < n; k++) ⑤    sum += a[k][j][i]; ```",
      "options": {
        "A": "将第 2 行与第 3 行互换",
        "B": "将第 2 行与第 4 行互换",
        "C": "将第 5 行改为 sum+=a[i][k][j];",
        "D": "将第 5 行改为 sum+=a[j][i][k];"
      },
      "answer": [
        "B"
      ],
      "explanation": "空间局部性是指程序在一段时间内所访问的存储空间的集中度。为了提高空间局部性，应尽量按照数组在内存中的存储顺序依次访问数组元素。根据 C 语言的规定，数组 a 在内存中是按最右下标变化最快的方式存储的，即 a[0][0][0]，a[0][0][1]，…，a[0][0][n-1]，a[0][1][0]，…，a[0][n-1][n-1]，a[1][0][0]，…，a[n-1][n-1][n-1]。因此，若将代码的第 2 行与第 4 行互换，则可使得对数组 a 的访问变成顺序访问，从而提高其空间局部性。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_08",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列关于高速缓存 Cache 的描述中，正确的是（）。",
      "options": {
        "A": "Cache 的功能全部由硬件实现",
        "B": "Cache 替换时的单位为字",
        "C": "Cache 与主存统一编址，即主存地址空间的某一部分属于 Cache",
        "D": "无论何时，Cache 中的信息一定与主存中的信息一致"
      },
      "answer": [
        "A"
      ],
      "explanation": "Cache 的功能完全由硬件实现，选项 A 正确。Cache 替换时的单位是块，而不是字或字节，因为 Cache 和主存是以块为单位进行数据交换的。Cache 地址空间和主存地址空间相互独立，通过地址映射把主存地址空间映射到 Cache 地址空间。Cache 中的信息不一定与主存中的信息一致，因为 Cache 可能采用回写策略，只有当被修改的块被换出时才写回主存。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_09",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于 Cache 的描述中，比较合理的是（）。 I. 指令 Cache 通常比数据 Cache 具有更好的空间局部性 II. 由于空间局部性，适当增加 Cache 块大小通常会提高命中率 III. 回写法的写主存操作次数少于直写法",
      "options": {
        "A": "III",
        "B": "I 和 II",
        "C": "II 和 III",
        "D": "I 和 II 和 III"
      },
      "answer": [
        "D"
      ],
      "explanation": "指令 Cache 通常比数据 Cache 具有更好的空间局部性，这是因为指令流通常是顺序执行的，而数据流转移或随机访问的概率较高，说法 I 正确。因为空间局部性，同一主存块中的数据的访问概率较高，所以增加 Cache 块大小会提高命中率，说法 II 正确。写回法只有在被修改的块被换出时才写回主存，而直写法每次写操作都会同时写回主存，说法 III 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_10",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "假设 Cache 采用 2 路组相联映射方式，Cache 共有 4 行（分为 2 组，每组 2 行），Cache 每行可存放一个主存块。组内采用 LRU 算法进行替换。给定主存块访问序列为 1, 8, 1, 7, 8, 2, 7, 2, 1, 8, 3, 8, 2, 1, 3, 1, 7, 1, 3, 7 若 Cache 初始为空，则该访问序列的 Cache 缺失率为（）。",
      "options": {
        "A": "30%",
        "B": "50%",
        "C": "40%",
        "D": "45%"
      },
      "answer": [
        "C"
      ],
      "explanation": "Cache 为 2 路组相联，组号 = 块号 mod 2，组内采用 LRU 算法。对 20 次主存块访问序列模拟，缺失发生在第 1、2、4、6、11、17、19、20 次，共 8 次。缺失率 = 8/20 = 40%。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_11",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "已知某程序运行期间，L1 Cache 的命中率为 94%，而 L2 Cache 的局部命中率（在 L1 不命中情况下的命中率）为 85%。请问该存储系统的全局命中率（CPU 的访存请求最终在 L1 或 L2 中得到满足的比例）是多少？",
      "options": {
        "A": "97.9%",
        "B": "98.5%",
        "C": "99.1%",
        "D": "99.4%"
      },
      "answer": [
        "C"
      ],
      "explanation": "L1 命中率为 94%，故 L1 未命中率为 6%。L2 在 L1 未命中时的局部命中率为 85%，因此 L2 命\n\n中的比例为 $6\\% \\times 85\\% = 5.1\\%$ 。全局命中率 $= \\mathrm{L}1$ 命中率 $+\\mathrm{L}2$ 命中比例 $= 94\\% +5.1\\% = 99.1\\%$",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_12",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "假设一个 Cache 中共有 M 块，每 K 块组成一个组，则下列描述中正确的是（）。",
      "options": {
        "A": "若 K=1，则该 Cache 是直接映射 Cache",
        "B": "若 K=1，则该 Cache 是全相联映射 Cache",
        "C": "若 K = M，则该 Cache 是直接映射 Cache",
        "D": "若 K > 1 且 K < M，则该 Cache 是 M/K 路组相联映射 Cache"
      },
      "answer": [
        "A"
      ],
      "explanation": "当 K=1 时，每组仅含 1 块，主存块只能映射到唯一 Cache 位置，属于直接映射，选项 A 正确，选项 B 错误。当 K=M 时所有块组成一组，即全相联映射，选项 C 错误。若 Cache 共 M 块、每组 K 块，则组数为 M/K，应称为 K 路组相联，而非 “M/K 路”，故选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_19",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "对于 n 路组相联映射 Cache，在保持 n 及主存和 Cache 总容量不变的前提下，将主存块大小和 Cache 块大小都增加一倍，则下列描述中正确的是（）。",
      "options": {
        "A": "字块内地址的位数增加 1 位，主存标记字段的位数增加 1 位",
        "B": "字块内地址的位数增加 1 位，主存标记字段的位数不变",
        "C": "字块内地址的位数减少 1 位，主存标记字段的位数增加 1 位",
        "D": "字块内地址的位数增加 1 倍, 主存标记字段的位数减少一半"
      },
      "answer": [
        "B"
      ],
      "explanation": "组相联映射的主存地址结构为：标记 + Cache 组号 + 块内地址。Cache 块大小增加一倍，则字块内地址的位数增加 1 位。Cache 组数 = (Cache 总容量 / Cache 块大小) / n，所以 Cache 组数减少一半；Cache 组号 = 主存块号 MOD Cache 组数，所以 Cache 组号也减少 1 位。主存总容量不变，则主存地址总长度不变，字块内地址和 Cache 组号一个增 1 位，一个减 1 位，因此标记字段的位数不变。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_24",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "假定8个存储器模块采用交叉方式组织，存储芯片和总线支持突发传送，CPU通过存储器总线读取数据的过程为：发送首地址和读命令需1个时钟周期，存储器准备第一个数据需 8 个时钟周期，随后每个时钟周期总线上传送 1 个数据，可连续传送 8 个数据（突发长度为 8）。若主存和 Cache 之间交换的主存块大小为 64B，存取宽度和总线宽度都为 8B，则 Cache 的一次缺失损失至少为（）个时钟周期。",
      "options": {
        "A": "17",
        "B": "20",
        "C": "33",
        "D": "80"
      },
      "answer": [
        "A"
      ],
      "explanation": "一次缺失损失需要从主存读出一个主存块(64B)，每个突发传送总线事务可读取 $8B\\times8=64B$ ，因此只需要一个突发传送总线事务。首先，发送首地址和读命令需要一个时钟周期，然后轮流启动每个存储器模块，每隔一个时钟周期启动一个存储器模块，采用流水线工作方式，所以每个突发传送总线事务所用的时间为 $1+8+8=17$ 个时钟周期，因此共需17个时钟周期。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_25",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "下列关于 Cache 替换算法的叙述中，错误的是（）。",
      "options": {
        "A": "组相联映射和全相联映射都必须考虑如何进行替换",
        "B": "先进先出算法无须对每个 Cache 行记录替换信息",
        "C": "直接映射是多对一的映射，无须考虑替换问题",
        "D": "LRU 算法需要对每个 Cache 行记录替换信息"
      },
      "answer": [
        "B"
      ],
      "explanation": "对于直接映射，主存中的每一块只能装入 Cache 中的唯一位置，若产生块冲突，原来的块将被无条件换出，因此无须考虑替换问题，而组相联映射和全相联映射都需要考虑替换问题。先进先出算法需要对每个 Cache 行打一个时间戳，记录何时装入了一个新主存块。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_26",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "下列关于 Cache 大小、主存块大小和 Cache 缺失率之间关系的叙述中，错误的是（）。",
      "options": {
        "A": "主存块大小和 Cache 容量无直接关系",
        "B": "Cache 容量越大，Cache 缺失率越低",
        "C": "主存块大小通常为几十到上百字节",
        "D": "主存块越大，Cache 缺失率越低"
      },
      "answer": [
        "D"
      ],
      "explanation": "主存块太小，不能很好地利用空间局部性，从而导致缺失率变高；但主存块太大也会使得 Cache 行数变少，即 Cache 中可以存放主存块的位置变少，从而也会降低命中率。因此，主存块大小应该适中，既不能太大，又不能太小，通常为几十字节到上百字节。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_27",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "若计算机按字编址，Cache 数据区容量为 8K 字，主存块大小为 512 字，主存地址空间为 1M 字，采用 2 路组相联映射方式。每次根据主存地址访问 Cache 时，需要同时进行（）次标记位的比较，每次需要比较的位数是（）。",
      "options": {
        "A": "2,8",
        "B": "2,16",
        "C": "4,8",
        "D": "4,16"
      },
      "answer": [
        "A"
      ],
      "explanation": "Cache 中比较器的个数取决于 Cache 的关联度（这个名词不常见，了解即可），即一个主存块可能映射到 Cache 中的几个行。在 2 路组相联映射方式中，关联度是 2，因此 Cache 中有 2 个比较器，每次根据主存地址访问 Cache 时，需要同时进行 2 次比较。比较器的作用是比较主存地址中的标记字段和 Cache 中的标记位，因此比较器的位数取决于主存地址中标记位占多少位。主存地址空间是 1M 字，主存地址的位数是 20，其中块内地址占 9 位，Cache 共有 8K/1K = 8 组，组号占 3 位，因此标记位的位数是 20 - 9 - 3 = 8，即每次需要比较的位数是 8。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_28",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2009 统考真题】假设某计算机的存储系统由 Cache 和主存组成，某程序执行过程中访存 1000 次，其中访问 Cache 缺失（未命中）50 次，则 Cache 的命中率是（）。",
      "options": {
        "A": "5%",
        "B": "9.5%",
        "C": "50%",
        "D": "95%"
      },
      "answer": [
        "D"
      ],
      "explanation": "命中率 = Cache 命中次数/总访问次数。注意看清题目，题中说明的是缺失 50 次，而不是命中 50 次，仔细审题是做对题的第一步。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_29",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2009 统考真题】某计算机的 Cache 共有 16 块，采用 2 路组相联映射方式（每组 2 块）。每个主存块大小为 32B，按字节编址，主存 129 号单元所在主存块应装入的 Cache 组号是（）。",
      "options": {
        "A": "0",
        "B": "2",
        "C": "4",
        "D": "6"
      },
      "answer": [
        "C"
      ],
      "explanation": "因为 Cache 共有 16 块，采用 2 路组相联映射方式，共分为 8 组，组号为 0, 1, 2, …, 7，组号占 3 位。主存块大小为 32B，按字节编址，块内地址占 5 位。主存单元地址 $129 = 0 \\cdots 0$ 100 00001，后 5 位是块内地址，块内地址的前 3 位是组号，所以将映射到组号 4 的任意一个 Cache 块中。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_31",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2015 统考真题】假定主存地址为 32 位，按字节编址，主存和 Cache 之间采用直接映射方式，主存块大小为 4 个字，每字 32 位，采用回写方式，则能存放 4K 字数据的 Cache 的总容量的位数至少是（）。",
      "options": {
        "A": "146K",
        "B": "147K",
        "C": "148K",
        "D": "158K"
      },
      "answer": [
        "C"
      ],
      "explanation": "直接映射的地址结构为\n\n<table><tr><td>主存字块标记</td><td>Cache 字块标记</td><td>字块内地址</td></tr></table>\n\n按字节编址，块大小为 $4 \\times 32$ 位 = $16B = 2^{4}B$ ，则“字块内地址”占4位；“能存放4K字数据的Cache”即Cache的存储容量为4K字（注意单位），则Cache共有 $1K = 2^{10}$ 个Cache行，Cache字块标记占10位；主存字块标记占32 - 10 - 4 = 18位。\n\nCache 总容量包括：存储容量和标记阵列容量（有效位、标记位、脏位和替换算法控制位）。标记阵列中的有效位和标记位一定存在，而脏位和替换算法控制位的取舍需要看题意，题目中明确说明了采用回写法，则一定包含一致性维护位，而关于替换算法的词眼题目中未提及，所以不予考虑。因此，每个 Cache 行标记项包含 $18 + 1 + 1 = 20$ 位，标记阵列容量为 $2^{10} \\times 20$ 位 = 20K 位，存储容量为 $4K \\times 32$ 位 = 128K 位，总容量为 $128K + 20K = 148K$ 位。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_32",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2016 统考真题】有如下 C 语言程序段: ```javascript for (k=0; k<1000; k++) a[k] = a[k]+32; ``` 若数组 a 和变量 k 均为 int 型，int 型数据占 4B，数据 Cache 采用直接映射方式，数据区大小为 1KB、块大小为 16B，该程序段执行前 Cache 为空，则该程序段执行过程中访问数组 a 的 Cache 缺失率约为（）。",
      "options": {
        "A": "1.25%",
        "B": "2.5%",
        "C": "12.5%",
        "D": "25%"
      },
      "answer": [
        "C"
      ],
      "explanation": "分析语句 “a[k] = a[k] + 32”：首先读取 a[k] 需要访问一次 a[k]，之后将结果赋值给 a[k] 需要访问一次，共访问两次。第一次访问 a[k] 未命中，并将该字所在的主存块调入 Cache 对应的块中，对该主存块中的 4 个整数的两次访问中，只在访问第一次的第一个元素时发生缺失，其他的 7 次访问中全部命中，因此该程序段执行过程中访问数组 a 的 Cache 缺失率约为 12.5%。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_33",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2017 统考真题】某 C 语言程序段如下: ```javascript for (i=0;i<=9;i++) { temp=1; for (j=0;j<=i;j++) temp*=a[j]; sum += temp; } ``` 下列关于数组 a 的访问局部性的描述中，正确的是（）。",
      "options": {
        "A": "时间局部性和空间局部性皆有",
        "B": "无时间局部性，有空间局部性",
        "C": "有时间局部性，无空间局部性",
        "D": "时间局部性和空间局部性皆无"
      },
      "answer": [
        "A"
      ],
      "explanation": "时间局部性是指最近的未来要用到的信息，很可能是现在正在使用的信息，本题的外层循环每次都会访问一次数组 a，体现了时间局部性。空间局部性是指最近的未来要用到的信息，很可能与现在正在使用的信息在存储空间上是邻近的，本题在访问数组 a 的过程中是顺序访问的，体现了空间局部性。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_34",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2021 统考真题】若计算机主存地址为 32 位，按字节编址，Cache 数据区大小为 32KB，主存块大小为 32B，采用直接映射方式和回写法（Write Back），则 Cache 行的位数至少是（）。",
      "options": {
        "A": "275",
        "B": "274",
        "C": "258",
        "D": "257"
      },
      "answer": [
        "A"
      ],
      "explanation": "Cache 数据区大小为 32KB，主存块的大小为 32B，于是 Cache 中共有 1K 个 Cache 行，物理地址中偏移量部分的长度为 5bit。因为采用直接映射方式，所以 1K 个 Cache 行映射到 1K 个分组，物理地址中组号部分的长度为 10bit。32bit 的主存地址除去 5bit 的偏移量和 10bit 的组号后，还剩 17bit 的标记部分。又因为 Cache 采用回写法，所以 Cache 行的总位数应为 32B（数据位）+17bit（标记位）+1bit（脏位）+1bit（有效位）=275bit。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-5-8_35",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.5.8",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "【2022 统考真题】若计算机主存地址为 32 位，按字节编址，某 Cache 的数据区容量为 32KB，主存块大小为 64B，采用 8 路组相联映射方式，该 Cache 中比较器的个数和位数分别为（）。",
      "options": {
        "A": "8,20",
        "B": "8,23",
        "C": "64,20",
        "D": "64, 23"
      },
      "answer": [
        "A"
      ],
      "explanation": "Cache 采用组相联映射，主存地址结构应分为标记、组号、块内地址三部分。主存块大小 = Cache 块大小 = 64B = 2 $^{6}$ B，因此块内地址占 6 位。Cache 数据区容量为 32KB，每个 Cache 块大小为 64B，则 Cache 总块数 = 32KB/64B = 2 $^{9}$ ，因为采用 8 路组相联映射，即每 8 个 Cache 块为一个分组，所以共被分为 2 $^{9}$ /8 = 2 $^{6}$ 组，因此，组号占 6 位。除了块内地址和组号，剩余的位为标记位，占 32 - 6 - 6 = 20 位。地址结构如下所示。\n\n<table><tr><td>标记</td><td>组号</td><td>块内地址</td></tr><tr><td>20 位</td><td>6 位</td><td>6 位</td></tr></table>\n\nCache 采用 8 路组相联映射，因此在访问一个物理地址时，要先根据组号定位到某一分组，然后用物理地址的高 20 位（标记）与分组中 8 个 Cache 行的标记做并行比较（用 8 个 20 位 “比较器” 实现），若某个 Cache 行的标记与物理地址的高 20 位完全一致，则选中该 Cache 行。综上所述，在组相联映射的 Cache 中，“比较器”用于并行地比较分组中所有 Cache 行的标记位与要访问物理地址的标记位，因此比较器的个数就是分组中的 Cache 行数 8，比较器的位数就是标记位数 20。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-6-6_06",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.6.6",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "采用虚拟存储器的主要目的是（）。",
      "options": {
        "A": "提高主存储器的存取速度",
        "B": "扩大主存储器的存储空间",
        "C": "提高外存储器的存取速度",
        "D": "扩大外存储器的存储空间"
      },
      "answer": [
        "C"
      ],
      "explanation": "CPU 控制指令主要有停机、开中断、关中断、系统模式切换以及进入特殊处理程序等。这类指令只能在操作系统内核代码中使用，以防止用户误用，对系统运行造成危害。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-6-6_10",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.6.6",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于段式虚拟存储管理的叙述中，错误的是（）。",
      "options": {
        "A": "段是逻辑结构上相对独立的程序块，因此段是可变长的",
        "B": "按程序中实际的段来分配主存，所以分配后的存储块是可变长的",
        "C": "每个段表项必须记录对应段在主存的起始位置和段的长度",
        "D": "分段方式对低级语言程序员和编译器来说是透明的"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项 A、B 和 C 都正确。分段方式对低级语言程序员和编译器来说是不透明的，因为低级语言程序员需要使用段号来编程，编译器需要使用段号来链接，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-6-6_11",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.6.6",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "虚拟存储器中的页表有快表和慢表之分，下面关于页表的叙述中正确的是（）。",
      "options": {
        "A": "快表与慢表都存储在主存中，但快表比慢表容量小",
        "B": "快表采用了优化的搜索算法，因此查找速度快",
        "C": "快表比慢表的命中率高，因此快表可以得到更多的搜索结果",
        "D": "快表采用相联存储器件组成，按照查找内容访问，因此比慢表查找速度快"
      },
      "answer": [
        "D"
      ],
      "explanation": "快表采用高速相联存储器，它的速度快来源于硬件本身，而不是依赖搜索算法来查找的；慢表存储在内存中，通常是依赖于查找算法，所以选项 A 和 B 错误。快表与慢表的命中率没有必然联系，快表仅是慢表的一个部分拷贝，不能够得到比慢表更多的结果，选项 C 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-6-6_12",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.6.6",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2010 统考真题】下列命令组合的一次访存过程中，不可能发生的是（）。",
      "options": {
        "A": "TLB 未命中，Cache 未命中，Page 未命中",
        "B": "TLB 未命中，Cache 命中，Page 命中",
        "C": "TLB 命中，Cache 未命中，Page 命中",
        "D": "TLB 命中，Cache 命中，Page 未命中"
      },
      "answer": [
        "D"
      ],
      "explanation": "Cache 的内容是主存的一部分副本，TLB 的内容是 Page（页表）的一部分副本。在同时具有 TLB 和 Cache 的虚拟存储系统中，CPU 发出访存命令，先查找对应的 Cache 块。\n\n1）若 Cache 命中，则说明所需内容在 Cache 内，其所在页面必然已调入主存，因此 Page 必然命中，但 TLB 不一定命中。  \n2）若 Cache 未命中，则并不能说明所需内容未调入主存，和 TLB、Page 命中与否没有联系。但若 TLB 命中，Page 也必然命中；而当 Page 命中，TLB 则未必命中，因此 D 不可能发生。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-6-6_13",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.6.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2013 统考真题】某计算机主存地址空间大小为 256 MB，按字节编址。虚拟地址空间大小为 4GB，采用页式存储管理，页面大小为 4KB，TLB（快表）采用全相联映射，有 4 个页表项，内容如下表所示。 <table><tr><td>有效位</td><td>标记</td><td>页框号</td><td>...</td></tr><tr><td>0</td><td>FF180H</td><td>0002H</td><td>...</td></tr><tr><td>1</td><td>3FFF1H</td><td>0035H</td><td>...</td></tr><tr><td>0</td><td>02FF3H</td><td>0351H</td><td>...</td></tr><tr><td>1</td><td>03FFFH</td><td>0153H</td><td>...</td></tr></table> 则对虚拟地址 03FF F180H 进行虚实地址变换的结果是（）。",
      "options": {
        "A": "015 3180H",
        "B": "003 5180H",
        "C": "TLB 缺失",
        "D": "缺页"
      },
      "answer": [
        "A"
      ],
      "explanation": "按字节编址，页面大小为 4KB，页内地址共 12 位。地址空间大小为 4GB，虚拟地址共 32 位，前 20 位为页号。虚拟地址为 03FF F180H，因此页号为 03 FFFH，页内地址为 180H。查找页标记 03FFFH 所对应的页表项，页框号为 0153H，页框号与页内地址拼接即为物理地址 0153180H。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-6-6_14",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.6.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2015 统考真题】假定编译器将赋值语句 “x=x+3;” 转换为指令 “add xaddr, 3”，其中 xaddr 是 x 对应的存储单元地址。若执行该指令的计算机采用页式虚拟存储管理方式，并配有相应的 TLB，且 Cache 使用直写方式，则完成该指令功能需要访问主存的次数至少是（）。",
      "options": {
        "A": "0",
        "B": "1",
        "C": "2",
        "D": "3"
      },
      "answer": [
        "B"
      ],
      "explanation": "上述指令的执行过程可划分为取数、运算和写回过程，取数时读取 xaddr 可能不需要访问主存而直接访问 Cache，而直写方式需要把数据同时写入 Cache 和主存，因此至少访问 1 次。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-6-6_15",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.6.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2019 统考真题】下列关于缺页处理的叙述中，错误的是（）。",
      "options": {
        "A": "缺页是在地址转换时 CPU 检测到的一种异常",
        "B": "缺页处理由操作系统提供的缺页处理程序来完成",
        "C": "缺页处理程序根据页故障地址从外存读入所缺失的页",
        "D": "缺页处理完成后回到发生缺页的指令的下一条指令执行"
      },
      "answer": [
        "D"
      ],
      "explanation": "在请求分页系统中，每当要访问的页面不在内存中时，CPU 检测到异常，便会产生缺页中断，请求操作系统将所缺的页调入内存。缺页处理由缺页中断处理程序完成，根据发生缺页故障的地址从外存读入所缺失的页，缺页处理完成后回到发生缺页的指令继续执行。选项 D 中描述回到发生缺页的指令的下一条指令执行，明显错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-6-6_16",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.6.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2020 统考真题】下列关于 TLB 和 Cache 的叙述中，错误的是（）。",
      "options": {
        "A": "命中率都与程序局部性有关",
        "B": "缺失后都需要去访问主存",
        "C": "缺失处理都可以由硬件实现",
        "D": "都由 DRAM 存储器组成"
      },
      "answer": [
        "D"
      ],
      "explanation": "Cache 由 SRAM 组成；TLB 也由 SRAM 组成。DRAM 需要不断刷新，性能偏低，不适合组成 TLB 和 Cache。选项 A、B 和 C 都是 TLB 和 Cache 的特点。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-6-6_17",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.6.6",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2022 统考真题】某计算机主存地址为 24 位，采用分页虚拟存储管理方式，虚拟地址空间大小为 4 GB，页大小为 4 KB，按字节编址。某个进程的页表部分内容如下表所示。 <table><tr><td>虚页号</td><td>实页号(页框号)</td><td>存在位</td></tr><tr><td>82</td><td>024H</td><td>0</td></tr><tr><td>...</td><td>...</td><td>...</td></tr><tr><td>129</td><td>180H</td><td>1</td></tr><tr><td>130</td><td>018H</td><td>1</td></tr></table> 当 CPU 访问虚拟地址 00082840H 时，虚-实地址转换的结果是（）。",
      "options": {
        "A": "得到主存地址 024840H",
        "B": "得到主存地址 180840H",
        "C": "得到主存地址 01 8840H",
        "D": "检测到缺页异常"
      },
      "answer": [
        "C"
      ],
      "explanation": "页大小为 $4KB = 2^{12}B$ ，按字节编址，因此页内地址为 12 位。虚拟地址空间大小为 $4GB = 2^{32}B$ ，因此虚拟地址共 32 位，其中低 12 位为页内地址，高 20 位为虚页号。题中给出的虚拟地址为 00082840H，虚页号为高 20 位即 00082H（页内地址为低 12 位即 840H），82H 对应的十进制数为 130（注意题中页表的虚页号部分末尾未写 H，所以是十进制数，因此查找时要先将虚页号转换为十进制数），查页表命中，并且存在位为 1，对应页框号为 018H。将查找到的页框号 018H 和页内地址 840H 拼接，得到主存地址为 018840H。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-6-6_18",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.6.6",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2024 统考真题】对于页式虚拟存储管理系统，下列关于存储器层次结构的叙述中，错误的是（）。",
      "options": {
        "A": "Cache-主存层次的交换单位为主存块，主存-外存层次的交换单位为页",
        "B": "Cache-主存层次替换算法由硬件实现，主存-外存层次替换算法由软件实现",
        "C": "Cache-主存层次可采用回写法，主存-外存层次通常采用回写法",
        "D": "Cache-主存层次可采用直接映射方式，主存-外存层次通常采用直接映射方式"
      },
      "answer": [
        "D"
      ],
      "explanation": "Cache 与主存之间交换的是主存块，主存与外存之间交换的是页。Cache-主存层次和主存-外存层次的区别在于前者主要解决速度不匹配问题，用软件实现会影响速度，因此 Cache-主存层次替换算法由硬件实现；而主存-外存层次替换算法由软件实现。Cache-主存层次可采用回写法或全写法；主存-外存层次通常采用回写法，即页面被修改后，仅当被换出时才写回外存，访问外存的代价很大，采用全写法的开销过高。访问外存的代价很大，提高命中率是关键，因此主存-外存层次通常采用全相联映射；而 Cache-主存层次可采用直接映射、组相联或全相联，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-6-6_19",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.6.6",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2024 统考真题】某计算机按字节编址，采用页式虚拟存储管理方式，虚拟地址为 32 位，主存地址为 30 位，页大小为 1KB。若 TLB 共有 32 个表项，采用 4 路组相联映射方式，则 TLB 表项中标记字段的位数至少是（）。",
      "options": {
        "A": "17",
        "B": "18",
        "C": "19",
        "D": "20"
      },
      "answer": [
        "C"
      ],
      "explanation": "按字节编址，页大小为 $2^{10}B$ ，因此页内地址占 10 位；TLB 有 32 个表项，采用 4 路组相联映射，被分为 $2^{3}=8$ 组，因此 TLB 组号占 3 位；于是，标记字段的位数至少是 32-3-10=19。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_3-6-6_20",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "存储系统",
      "section": "3.6.6",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2024统考真题】下列事件中，不是在MMU地址转换过程中检测的是（）。",
      "options": {
        "A": "访问越权",
        "B": "Cache缺失",
        "C": "页面缺失",
        "D": "TLB缺失"
      },
      "answer": [
        "B"
      ],
      "explanation": "在地址转换的过程中，MMU 会检查页表项的访问权限，以确保进程有权访问某个页面，否则就会访问越权。为了获得对应的页表项，先查找 TLB，若找不到，则 TLB 缺失，然后查找页表，若找不到，则页面缺失。访问 Cache 是在获得物理地址后使用物理地址存取数据的过程中才执行的操作，而 MMU 地址转换过程是在获得物理地址之前进行的，选项 B 错误。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch03-第3章-存储系统.md"
    },
    {
      "id": "计算机组成原理_4-1-6_11",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "某指令系统的指令字长为 16 位，地址码长度为 6 位。若已定义二地址指令 15 条、一地址指令 48 条，则零地址指令最多可定义（）条。",
      "options": {
        "A": "255",
        "B": "256",
        "C": "1023",
        "D": "1024"
      },
      "answer": [
        "D"
      ],
      "explanation": "操作码按从短到长进行扩展编码。指令字长16位，地址码占6位。二地址指令含两个地址码（共12位），操作码为高4位，可编码 $2^{4}=16$ 种；15条指令可使用编码0000～1110，剩余1111用作扩展。一地址指令的高4位固定为1111，中间6位用作扩展操作码，共 $2^{6}=64$ 种组合；实际使用48条，剩余64-48=16个编码可用作零地址扩展。零地址指令无地址字段，其高10位由1111拼接上述16个空闲扩展码构成，低6位自由取值，故最多可定义 $16\\times2^{6}=16\\times64=1024$ 条。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-1-6_12",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "某机器的指令字长为 12 位，采用扩展操作码技术，支持零地址、一地址和二地址 3 种指令格式，地址码长度均为 4 位。若一地址和二地址指令均取最大可能条数，则该机器最多可定义的指令总数为（）。",
      "options": {
        "A": "16",
        "B": "46",
        "C": "48",
        "D": "4366"
      },
      "answer": [
        "B"
      ],
      "explanation": "二地址指令的操作码占4位，共 $2^{4}=16$ 种编码，保留1个用于扩展，最多定义15条。一地址指令利用该保留编码，将第二个4位地址字段作为扩展操作码，得到 $2^{4}=16$ 种组合，再保留其中1个用于零地址扩展，最多可定义15条。零地址指令则使用这一保留编码，将剩余的4位全部作为操作码，可定义24=16条。因此，指令总数最多为 $15+15+16=46$ 条。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-1-6_13",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2017 统考真题】某计算机按字节编址，指令字长固定且只有两种指令格式，其中三地址指令 29 条、二地址指令 107 条，每个地址字段为 6 位，则指令字长至少应该是（）。",
      "options": {
        "A": "24 位",
        "B": "26 位",
        "C": "28 位",
        "D": "32 位"
      },
      "answer": [
        "A"
      ],
      "explanation": "三地址指令有 29 条，所以其操作码至少为 5 位。以 5 位进行计算，它剩余 32 - 29 = 3 种操作码给二地址。而二地址额外多了 6 位给操作码，因此其数量最大达 $3 \\times 64 = 192$ 。所以指令字长最少为 23 位，因为计算机按字节编址，需要是 8 的倍数，所以指令字长至少应该是 24 位。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-1-6_14",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2022 统考真题】下列选项中，属于指令集体系结构（ISA）规定的内容是（）。 I. 指令字格式和指令类型 II. CPU 的时钟周期 III. 通用寄存器个数和位数 IV. 加法器的进位方式",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III",
        "C": "仅 II、IV",
        "D": "仅 I、III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "指令集体系结构处于软/硬件的交界面上。指令字和指令格式、通用寄存器个数和位数都与机器指令有关，由 ISA 规定。两个 CPU 可以有不同的时钟周期，但指令集可以相同；加法器的进位方式涉及电路设计，这两项都属于计算机的硬件部分，不由 ISA 规定。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-1-6_15",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2022 统考真题】设计某指令系统时，假设采用 16 位定长指令字格式，操作码使用扩展编码方式，地址码为 6 位，包含零地址、一地址和二地址 3 种格式的指令。若二地址指令有 12 条，一地址指令有 254 条，则零地址指令的条数最多为（）。",
      "options": {
        "A": "0",
        "B": "2",
        "C": "64",
        "D": "128"
      },
      "answer": [
        "D"
      ],
      "explanation": "地址码为 6 位，一条二地址指令会占用 $2^{6}$ 条一地址指令的空间，一条一地址指令会占用 $2^{6}$ 条零地址指令的空间。若全都是零地址指令，则最多有 $2^{16}$ 条，减去一地址指令和二地址指令所占用的零地址指令空间，即 $2^{16}-254\\times2^{6}-12\\times2^{6}\\times2^{6}=(2^{10}-254-12\\times2^{6})\\times2^{6}=2\\times2^{6}=128$ 。\n\n【另解】二地址指令有 12 条，则剩余 16 - 12 = 4 种操作码给一地址指令，一地址指令有 254 条，剩余 $4 \\times 64 - 254 = 2$ 种操作码给 0 地址指令，所以 0 地址一共有 $2 \\times 2^{6} = 128$ 条。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-1-6_16",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2025 统考真题】在下列选项中，由指令集体系结构（ISA）规定的是（）。",
      "options": {
        "A": "是否采用阵列乘法器",
        "B": "是否采用定长指令字格式",
        "C": "是否采用微程序控制器",
        "D": "是否采用单总线数据通路"
      },
      "answer": [
        "B"
      ],
      "explanation": "指令集体系结构（ISA）是软件和硬件之间的抽象接口，定义了机器语言程序员可见的处理器行为，包括指令集、数据类型、寄存器、寻址方式及指令编码格式等。指令字是否定长属于编码格式的一部分，直接影响机器代码解析与程序设计，由 ISA 明确规定。而阵列乘法器、微程序控制器和单总线数据通路均属于微架构实现细节，对程序员不可见，不在 ISA 范畴内。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_06",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "假定指令中地址码所给出的是操作数的有效地址，则该指令采用（）。",
      "options": {
        "A": "直接寻址",
        "B": "立即寻址",
        "C": "寄存器寻址",
        "D": "间接寻址"
      },
      "answer": [
        "A"
      ],
      "explanation": "指令字中的形式地址为操作数的有效地址，这种方式为直接寻址。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_07",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "设指令中的地址码为 A，变址寄存器为 X，程序计数器为 PC，则变址间址寻址方式的操作数的有效地址 EA 是（）。",
      "options": {
        "A": "$((PC) + A)$",
        "B": "$((X) + A)$",
        "C": "$(X) + (A)$",
        "D": "$(X)+A$"
      },
      "answer": [
        "B"
      ],
      "explanation": "变址寻址的有效地址是 $(\\mathrm{X}) + \\mathrm{A}$ ，再进行变址间址寻址，即把 $(\\mathrm{X}) + \\mathrm{A}$ 中取出的内容作为真实地址EA，即 $\\mathrm{EA} = ((\\mathrm{X}) + \\mathrm{A})$ 。\n\n寄存器中的内容和指令地址码相加得到的是操作数的地址码。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_08",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "（）便于处理数组问题。",
      "options": {
        "A": "间接寻址",
        "B": "变址寻址",
        "C": "相对寻址",
        "D": "基址寻址"
      },
      "answer": [
        "B"
      ],
      "explanation": "变址寻址便于处理数组问题。基址寻址与变址寻址的区别见下表。\n\n<table><tr><td></td><td>基址寻址</td><td>变址寻址</td></tr><tr><td>有效地址</td><td> $EA = (BR) + A$ </td><td> $EA = (IX) + A$ </td></tr><tr><td>访存次数</td><td>1</td><td>1</td></tr><tr><td>寄存器内容</td><td>由操作系统或管理程序确定</td><td>由用户设定</td></tr><tr><td>程序执行过程中值可变否</td><td>不可变</td><td>可变</td></tr><tr><td>特点</td><td>有利于多道程序设计和编制浮动程序</td><td>有利于处理数组问题和编制循环程序</td></tr></table>",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_09",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "相对寻址方式中，指令所提供的相对地址实质上是一种（）。",
      "options": {
        "A": "立即数",
        "B": "内存地址",
        "C": "以本条指令在内存中首地址为基准位置的偏移量",
        "D": "以下条指令在内存中首地址为基准位置的偏移量"
      },
      "answer": [
        "D"
      ],
      "explanation": "相对寻址中，有效地址 $EA = (PC) + A$ （A 为形式地址），执行本条指令时，PC 已完成加 1 操作，PC 中保存的是下一条指令的地址，因此以下一条指令的地址为基准位置的偏移量。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_10",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "指令寻址方式有顺序和跳跃两种，采用跳跃寻址方式可以实现（）。",
      "options": {
        "A": "程序浮动",
        "B": "程序的无条件浮动和条件浮动",
        "C": "程序的无条件转移和条件转移",
        "D": "程序的调用"
      },
      "answer": [
        "C"
      ],
      "explanation": "跳跃寻址通过转移类指令（如相对寻址）来实现，可用来实现程序的条件或无条件转移。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_11",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "寄存器 R1、R2 均为 16 位，指令 MOV R1, [R2] 的功能是把内存数据传送至寄存器 R1，寻址方式为寄存器间接寻址。R2 的值为 1234H，内存单元 1234H 存放数据 56H，内存单元 1235H 存放数据 78H，采用小端方式存储。则执行指令后 R1 的值为（）。",
      "options": {
        "A": "5678H",
        "B": "7856H",
        "C": "8765H",
        "D": "6587H"
      },
      "answer": [
        "B"
      ],
      "explanation": "寄存器 R2 中的值是 1234H，内存单元 1234H 中的值是 56H，1235H 中的值是 78H，因为采用小端方式，所以实际存储的数据为 7856H，取出后存放到 R1，因此 R1 的值为 7856H。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_12",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "某计算机的字长为 16 位，主存按字编址。转移指令由两个字节组成，采用相对寻址，第一个字节为操作码字段，第二个字节为相对偏移量字段。若某转移指令所在的主存地址为 4000H，相对偏移量字段的内容为 06H，则该转移指令执行后的 PC 值为（）。",
      "options": {
        "A": "4002H",
        "B": "4004H",
        "C": "4007H",
        "D": "4008H"
      },
      "answer": [
        "C"
      ],
      "explanation": "主存按字编址，指令字长为 1 个字（2 字节），因此取出该指令后，PC 自动加 1，相对偏移量为 06H，所以该转移指令执行后的 PC 值为 $4000H + 06H + 1H = 4007H$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_13",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "某计算机的指令字长为 16 位，由低到高第 0～7 位是形式地址 D，第 8～9 位为寻址特征位 X，第 10～15 位为操作码。当 X=00 时为直接寻址；当 X=01 时使用 X1 进行变址寻址；当 X=10 时使用 X2 进行变址寻址；当 X=11 时为相对寻址。设(PC)=1234H, (X1)=0005H, (X2)=1188H，则指令 2222H 的有效地址是（）。",
      "options": {
        "A": "1256H",
        "B": "0027H",
        "C": "2222H",
        "D": "11AAH"
      },
      "answer": [
        "D"
      ],
      "explanation": "将指令 2222H 展开成二进制为 0010 0010 0010 0010B，因此寻址特征位 X = 10，即使用 X2 进行变址寻址，其有效地址为 $1188H + 22H = 11AAH$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_14",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "某机器指令字长为 16 位，主存按字节编址，取指令时，每取一字节，PC 自动加 1。当前指令地址为 2000H，指令内容为相对寻址的无条件转移指令，指令中的形式地址为 40H。则取指令后及指令执行后 PC 的内容为（）。",
      "options": {
        "A": "2000H, 2042H",
        "B": "2002H, 2040H",
        "C": "2002H, 2042H",
        "D": "2000H, 2040H"
      },
      "answer": [
        "C"
      ],
      "explanation": "指令字长为 16 位，2 字节，因此取指令后 PC 的内容为 $(PC) + 2 = 2002H$ ；无条件转移指令将下一条指令的地址送至 PC，形式地址为 40H，指令执行后 $PC = 2002H + 0040H = 2042H$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_15",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "某计算机的主存容量为 $4M \\times 16$ 位，且存储字长等于指令字长，若该机能完成 97 种操作，操作码位数固定，且有直接、间接、基址、变址、相对、立即六种寻址方式，则相对寻 址的偏移量范围为（）。",
      "options": {
        "A": "$(-32,+31)$",
        "B": "$(-64,+63)$",
        "C": "$(-128,+127)$",
        "D": "$(-256,+255)$"
      },
      "answer": [
        "A"
      ],
      "explanation": "操作码位数固定，且能完成97种操作，则操作码位数是 $\\left\\lceil\\log_{2}97\\right\\rceil=7$ 位；具有六种寻址方式，则寻址特征位数是 $\\left\\lceil\\log_{2}6\\right\\rceil=3$ 位；指令字长为16位，因此地址码位数是16-3-7=6位，6位补码的表示范围为 $-32\\sim+31$ ，即为相对寻址的偏移量范围。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_16",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "假设寄存器 R 中的数值为 200，主存地址为 200 和 300 的地址单元中存放的内容分别是 300 和 400，则（）方式下访问到的操作数为 200。",
      "options": {
        "A": "直接寻址 200",
        "B": "寄存器间接寻址（R）",
        "C": "存储器间接寻址（200）",
        "D": "寄存器寻址 R"
      },
      "answer": [
        "D"
      ],
      "explanation": "直接寻址 200 访问的操作数是 300，选项 A 错误。寄存器间接寻址（R）的访问结果与 I 一样，选项 B 错误。存储器间接寻址（200）表示主存地址 200 中的内容为有效地址，有效地址为 300，访问的操作数是 400，选项 C 错误。寄存器寻址 R 表示寄存器 R 的内容为操作数，只有选项 D 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_17",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "假设某条指令的第一个操作数采用寄存器间接寻址方式，指令中给出的寄存器编号为 8, 8 号寄存器的内容为 1200H，地址为 1200H 的单元中的内容为 12FCH，地址为 12FCH 的单元中的内容为 38D8H，而地址为 38D8H 的单元中的内容为 88F9H，则该操作数的有效地址为（）。",
      "options": {
        "A": "1200H",
        "B": "12FCH",
        "C": "38D8H",
        "D": "88F9H"
      },
      "answer": [
        "A"
      ],
      "explanation": "寄存器间接寻址中操作数的有效地址 $EA = (R_{i})$ ，8 号寄存器内容为 1200H，因此 EA = 1200H。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_18",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "multiple_choice",
      "question": "设相对寻址的转移指令占 3B，第 1 字节为操作码，第 2、3 字节为相对位移量（补码表示），数据在存储器中采用以低字节为字地址的存放方式。每当 CPU 从存储器取出一字节时，即自动完成 $(PC)+1\\rightarrow PC$ 。若 PC 的当前值为 240（十进制），要求转移到 290（十进制），则转移指令的第 2、3 字节的机器代码是（）；若 PC 的当前值为 240（十进制），要求转移到 200（十进制），则转移指令的第 2、3 字节的机器代码是（）。",
      "options": {
        "A": "2FH、FFH",
        "B": "D5H、00H",
        "C": "D5H、FFH",
        "D": "2FH、00H"
      },
      "answer": [
        "D",
        "C"
      ],
      "explanation": "首先需要讲解一下补码扩充的问题。补码的扩充只需使用符号位补足即可，也就是说正数补码的扩充只要补0，负数补码的扩充只需补1（这是由补码的性质决定的）。理解了该性质，这道题就变成了十进制数转换为十六进制数的简单问题。\n\n1）PC 的当前值为 240，该指令取出后 PC 的值为 243，要求转移到 290，即相对位移量为 290 - 243 = 47，转换成补码为 2FH。因为数据在存储器中采用以低字节地址为字地址的存放方式，所以该转移指令的第二字节为 2FH，而由于 47 是正数，只需在高位补 0，所以第三字节为 00H。  \n2）PC 的当前值为 240，该指令取出后 PC 的值为 243，要求转移到 200，即相对位移量为 200 - 243 = -43，转换成补码为 D5H。数据在存储器中采用以低字节地址为字地址的存放方式，因此该转移指令的第二字节为 D5H，因为 -43 是负数，所以只需在高位补 1，所以第三字节为 FFH。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_19",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "某计算机按字节编址，采用大端方式，某指令的一个操作数的机器数为 ABCD 00FFH，该操作数采用基址寻址方式，指令中形式地址（用补码表示）为 FF00H，当前基址寄存器的内容为 C000 0000H，则该操作数的 LSB（FFH）存放的地址是（）。",
      "options": {
        "A": "C000 FF00H",
        "B": "C000 FF03H",
        "C": "BFFF FF00H",
        "D": "BFFF FF03H"
      },
      "answer": [
        "D"
      ],
      "explanation": "基址寻址的操作数的有效地址为基址寄存器内容加上形式地址，即 C000 0000H + FF00H = C000 0000H + FFFF FF00H = BFFF FF00H。因为是大端方式，所以 LSB 的存放地址为 BFFF FF03H。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_20",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "下列关于指令的功能及分类的叙述中，正确的是（）。",
      "options": {
        "A": "算术与逻辑运算指令，通常完成算术运算或逻辑运算，都需要两个数据",
        "B": "移位操作指令，通常用于把指定的两个操作数左移或右移一位",
        "C": "转移指令、子程序调用与返回指令，用于解决数据调用次序的需求",
        "D": "特权指令，通常仅用于实现系统软件，这类指令一般不提供给用户"
      },
      "answer": [
        "D"
      ],
      "explanation": "算术与逻辑运算指令用于完成对一个（如自增、取反等）或两个数据的算术运算或逻辑运算，选项 A 错误。移位操作用于把一个操作数左移或右移一位或多位，选项 B 错误。转移指令、子程序调用与返回指令用于解决变动程序中指令执行次序的需求，而不是数据调用次序的需求，选项 C 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_21",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "某计算机字长为 16 位，标志寄存器中存在 ZF、SF、OF 和 CF 标志位，采用双字节字长指令字。假定 bgt（大于零转移）指令的第一个字节指明操作码和寻址方式，第二个字节为立即数 Imm8，用补码表示。指令功能是：若转移条件成立，则 PC = PC + 2 + Imm8 × 2；否则，PC = PC + 2。则下列叙述中错误的是（）。",
      "options": {
        "A": "该计算机按字节编址",
        "B": "若 bgt 指令是无符号整数的比较，则转移条件可以是 $ZF + CF = 0$",
        "C": "若 bgt 指令是有符号整数的比较，则转移条件可以是 $SF \\oplus OF = 0$",
        "D": "转移目标地址的范围是相对于 bgt 指令的前 127 条指令到后 128 条指令之间"
      },
      "answer": [
        "C"
      ],
      "explanation": "PC 的增量是 2，每条指令占 2 字节，可知编址单位为字节。若 bgt 指令是无符号整数的比较，则大于零时，ZF 一定为 0，且 CF 也一定为 0。若 bgt 指令是有符号整数的比较，则转移条件成立时，要么未发生溢出，SF = OF = 0，要么发生溢出，SF = OF = 1，但前提是 ZF 一定为 0，故正确的转移条件是 $\\left(\\mathrm{ZF} + (\\mathrm{SF} \\oplus \\mathrm{OF}) = 0\\right)$ 。Imm8 的范围为 -128～127，因此转移目标地址的范围是 PC + 2 + (-128×2)～PC + 2 + 127×2，即相对于 bgt 指令的前 127 条指令到后 128 条指令之间。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_22",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "下列关于指令寻址与数据寻址的描述中，错误的是（）。",
      "options": {
        "A": "中断响应时，中断隐指令的执行不属于指令寻址的范畴",
        "B": "指令格式中，每个操作数字段均需通过显式编码或隐含约定确定其寻址方式",
        "C": "在含 Cache 的系统中，指令访存遵循 “Cache 优先” 原则，未命中时再访问主存",
        "D": "数据寻址方式不属于指令集体系结构（ISA）规定的内容"
      },
      "answer": [
        "D"
      ],
      "explanation": "中断隐指令由硬件自动完成（如保存 PC、转移至中断向量），不涉及程序控制流中的指令地址生成，故不属于指令寻址。操作数要通过显式字段或隐含规则（如堆栈使用 SP）确定来源，是寻址机制的基本要求。在现代存储体系中，指令与数据访存优先经 Cache，缺失时才访问主存以提升性能。数据寻址方式是 ISA 的核心内容，必须明确定义，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_23",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2009 统考真题】某机器字长为 16 位，主存按字节编址，转移指令采用相对寻址，由 2 字节组成，第一字节为操作码字段，第二字节为相对位移量字段。假定取指令时，每取一字节，PC 自动加 1。若某转移指令所在主存地址为 2000H，相对位移量字段的内容为 06H，则该转移指令成功转移后的目标地址是（）。",
      "options": {
        "A": "2006H",
        "B": "2007H",
        "C": "2008H",
        "D": "2009H"
      },
      "answer": [
        "C"
      ],
      "explanation": "相对寻址 $EA=(PC)+A$ ，首先计算取指令后的 PC 值。转移指令由 2 字节组成，每取一字节 PC 加 1，取指令后的 PC 值为 2002H，因此 $EA=(PC)+A=2002H+06H=2008H$ 。本题易误选选项 A 或 B，选项 A 未考虑 PC 值的自动更新，选项 B 虽然考虑了 PC 值的自动更新，但未注意到该转移指令是一条 2 字节指令，PC 值应是 “+2” 而不是 “+1”。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_24",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2011 统考真题】偏移寻址通过将某个寄存器的内容与一个形式地址相加来生成有效地址。下列寻址方式中，不属于偏移寻址方式的是（）。",
      "options": {
        "A": "间接寻址",
        "B": "基址寻址",
        "C": "相对寻址",
        "D": "变址寻址"
      },
      "answer": [
        "A"
      ],
      "explanation": "间接寻址不需要寄存器， $\\mathrm{EA} = (\\mathrm{A})$ 。基址寻址 $EA = A + \\text{基址寄存器 BR 的内容}$ ；相对寻址 $EA = A + \\text{程序计数器（PC）的内容}$ ；变址寻址 $EA = A + \\text{变址寄存器 IX 的内容}$ 。后三者都是将某个寄存器的内容与一个形式地址相加而形成有效地址，所以统称偏移寻址。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_25",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2011 统考真题】某机器有一个标志寄存器，其中有进位/借位标志 CF、零标志 ZF、符号标志 SF 和溢出标志 OF，条件转移指令 bgt（无符号整数比较大于时转移）的转移条件是（）。",
      "options": {
        "A": "CF + OF = 1",
        "B": "$\\overline{SF} + ZF = 1$",
        "C": "$\\overline{CF+ZF}=1$",
        "D": "$\\overline{CF+SF}=1$"
      },
      "answer": [
        "C"
      ],
      "explanation": "假设两个无符号整数 A 和 B, bgt 指令会将 A 和 B 进行比较, 也就是将 A 和 B 相减。若 A > B, 则 A - B 肯定无进位/借位, 也不为 0 (为 0 时表示两数相等), 因此 CF 和 ZF 均为 0, 选 C。其余选项中用到了符号标志 SF 和溢出标志 OF, SF 表示结果的符号, OF 是有符号整数的溢出标志位，对于无符号数运算，SF 和 OF 没有意义，显然应当排除。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_26",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2013 统考真题】假设变址寄存器 R 的内容为 1000H，指令中的形式地址为 2000H；地址 1000H 中的内容为 2000H，地址 2000H 中的内容为 3000H，地址 3000H 中的内容为 4000H，则变址寻址方式下访问到的操作数是（）。",
      "options": {
        "A": "1000H",
        "B": "2000H",
        "C": "3000H",
        "D": "4000H"
      },
      "answer": [
        "D"
      ],
      "explanation": "根据变址寻址的方法，变址寄存器的内容（1000H）与形式地址的内容（2000H）相加，得到操作数的实际地址（3000H），根据实际地址访问内存，获取操作数4000H，如下图所示。\n\n![](images/e7f6b6a52dbe109d9999ecd0d8c31a0cade978155e7bc1dd26eed7ae7cadb4f6.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"变址寄存器 1000 H\"] --> C[\"+\"]\n    B[\"形式地址 2000 H\"] --> C\n    C --> D[\"地址 1000 H 2000 H\"]\n    C --> E[\"地址 2000 H 3000 H\"]\n    C --> F[\"地址 3000 H 4000 H\"]\n```\n</details>",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_27",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2014 统考真题】某计算机有 16 个通用寄存器，采用 32 位定长指令字，操作码字段（含寻址方式位）为 8 位，STORE 指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任意一个通用寄存器，且偏移量用补码表示，则 STORE 指令中偏移量的取值范围是（）。",
      "options": {
        "A": "$-32768 \\sim +32767$",
        "B": "-32767～+32768",
        "C": "$-65536 \\sim +65535$",
        "D": "-65535～+65536"
      },
      "answer": [
        "A"
      ],
      "explanation": "采用 32 位定长指令字，其中操作码为 8 位，两个地址码共占用 32 - 8 = 24 位，而 STORE 指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址，机器中共有 16 个通用寄存器，因此寻址一个寄存器需要 $\\log_{2}16 = 4$ 位，源操作数中的寄存器直接寻址用掉 4 位，而目的操作数采用基址寻址也要指定一个寄存器，同样用掉 4 位，则留给偏移量的位数为 24 - 4 - 4 = 16 位，而偏移量用补码表示，因此 16 位补码的表示范围为 -32768～+32767。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_28",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2016 统考真题】某指令格式如下所示。 <table><tr><td>OP</td><td>M</td><td>I</td><td>D</td></tr></table> 其中 M 为寻址方式，I 为变址寄存器编号，D 为形式地址。若采用先变址后间址的寻址方式，则操作数的有效地址是（）。",
      "options": {
        "A": "I + D",
        "B": "(I) + D",
        "C": "((I) + D)",
        "D": "((I)) + D"
      },
      "answer": [
        "C"
      ],
      "explanation": "在变址寻址中，有效地址（EA）等于指令字中的形式地址 D 与变址寄存器 I 的内容之和，即 EA = (I) + D。间接寻址是相对于直接寻址而言的，指令的地址字段给出的形式地址不是操作数的真正地址，而是操作数地址的地址，即 EA = (D)。从而该操作数的有效地址是 ((I) + D)。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_29",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2017 统考真题】下列寻址方式中，最适合按下标顺序访问一维数组元素的是（）。",
      "options": {
        "A": "相对寻址",
        "B": "寄存器寻址",
        "C": "直接寻址",
        "D": "变址寻址"
      },
      "answer": [
        "D"
      ],
      "explanation": "变址操作时，将计算机指令中的地址与变址寄存器中的地址相加，得到有效地址，指令提供数组首地址，由变址寄存器来定位数据中的各元素。所以它最适合按下标顺序访问一维数组元素，选择选项 D。相对寻址以 PC 为基地址，以指令中的地址为偏移量确定有效地址。寄存器寻址则在指令中指出需要使用的寄存器。直接寻址在指令的地址字段直接指出操作数的有效地址。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_30",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2018 统考真题】按字节编址的计算机中，某 double 型数组 A 的首地址为 2000H，使用变址寻址和循环结构访问数组 A，保存数组下标的变址寄存器的初值为 0，每次循环取一个数组元素，其偏移地址为变址值乘以 sizeof (double)，取完后变址寄存器的内容自动加 1。若某次循环所取元素的地址为 2100H，则进入该次循环时变址寄存器的内容是（）。",
      "options": {
        "A": "25",
        "B": "32",
        "C": "64",
        "D": "100"
      },
      "answer": [
        "B"
      ],
      "explanation": "根据变址寻址的公式 $EA = (IX) + A$ ，有 $(IX) = 2100H - 2000H = 100H = 256$ ，sizeof(double) = 8（双精度浮点数用 8 位字节表示），因此数组的下标为 256/8 = 32。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_31",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2019 统考真题】某计算机采用大端方式，按字节编址。某指令中操作数的机器数为 1234 FF00H，该操作数采用基址寻址方式，形式地址（用补码表示）为 FF12H，基址寄存器的内容为 F000 0000H，则该操作数的 LSB（最低有效字节）所在的地址是（）。",
      "options": {
        "A": "F000 FF12H",
        "B": "F000 FF15H",
        "C": "EFFF FF12H",
        "D": "EFFF FF15H"
      },
      "answer": [
        "D"
      ],
      "explanation": "注意，内存地址是无符号数。\n\n操作数采用基址寻址方式， $EA=(BR)+A$ ，基址寄存器 BR 的内容为 F000 0000H，形式地址用补码表示为 FF12H 即 1111 1111 0001 0010B，因此有效地址为 F000 0000H + (-00EEH) = EFFF FF12H。计算机采用大端方式编址，所以低位字节存放在字的高地址处，机器数一共占 4 字节，该操作数的 LSB 所在的地址是 EFFF FF12H + 3 = EFFF FF15H。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_32",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2020 统考真题】某计算机采用 16 位定长指令字格式，操作码位数和寻址方式位数固定，指令系统有 48 条指令，支持直接、间接、立即、相对 4 种寻址方式。在单地址指令中，直接寻址方式的可寻址范围是（）。",
      "options": {
        "A": "0\\~255",
        "B": "0\\~1023",
        "C": "$-128 \\sim 127$",
        "D": "$-512 \\sim 511$"
      },
      "answer": [
        "A"
      ],
      "explanation": "48 条指令需要 6 位操作码字段 $(2^{5}<48<2^{6})$ ，4 种寻址方式需要 2 位寻址特征位 $(4=2^{2})$ ，还剩 16-6-2=8 位作为地址码，所以直接寻址范围为 0～255。注意，主存地址不能为负。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-2-3_33",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.2.3",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2023 统考真题】某运算类指令中有一个地址码为通用寄存器编号，对应通用寄存器中存放的是操作数或操作数的地址，CPU 区分两者的依据是（）。",
      "options": {
        "A": "操作数的寻址方式",
        "B": "操作数的编码方式",
        "C": "通用寄存器的编号",
        "D": "通用寄存器的内容"
      },
      "answer": [
        "A"
      ],
      "explanation": "指令字由操作码、寻址特征和地址码三个字段组成，寻址特征字段用来指明指令属于哪种寻址方式。若寻址方式是寄存器直接寻址，则地址码所指的通用寄存器中存放的是操作数，若寻址方式是寄存器间接寻址，则对应通用寄存器中存放的是操作数的地址。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-3-5_04",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.3.5",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "multiple_choice",
      "question": "某 C 语言程序中对数组变量 b 的声明为 “int b[10][5];”，有一条 for 语句如下: ```javascript for (i=0; i<10; i++) for (j=0; j<5; j++) sum+=b[i][j]; ``` 假设执行到 “sum+=b[i][j];” 时，sum 的值在 eax 中，b[i][0] 所在的地址在 edx 中，j 在 esi 中，则 “sum+=b[i][j];” 所对应的指令（Intel 格式）可以是（）。",
      "options": {
        "A": "add dword ptr eax, [edx+esi\\*4]",
        "B": "add dword ptr eax, [esi+edx\\*4]",
        "C": "add dword ptr eax, [edx+esi\\*2]",
        "D": "add dword ptr eax, [esi+edx\\*2]"
      },
      "answer": [
        "C",
        "C",
        "C"
      ],
      "explanation": "与 CISC 相比，RISC 的优势主要体现在以下几个方面：\n\n1）更高效利用芯片面积。CISC 采用微程序控制，其控制存储器占 CPU 芯片面积的 50% 以上，而 RISC 采用硬布线控制，逻辑电路仅占约 10%，节省了宝贵的硅片资源。\n\n2）更高的运算速度。RISC 指令数量少、格式统一、寻址方式简单，配合大量通用寄存器和流水线技术，使大多数指令可在单周期内完成，显著提升执行效率。  \n3）更易设计与维护。RISC 指令系统结构简单，设计周期短；其逻辑清晰，出错概率低，且便于调试和验证，从而提高了系统可靠性。  \n4）更利于编译优化。由于指令类型和寻址方式有限，编译器更容易选择最优指令序列、调整指令调度，生成高效的目标代码。\n\nCISC 与 RISC 的对比如表 4.3 所示。\n\n表 4.3 CISC 与 RISC 的对比\n\n<table><tr><td rowspan=\"2\">对比项目</td><td colspan=\"2\">类别</td></tr><tr><td>CISC</td><td>RISC</td></tr><tr><td>指令系统</td><td>复杂,庞大</td><td>简单,精简</td></tr><tr><td>指令数目</td><td>一般大于200条</td><td>一般小于100条</td></tr><tr><td>指令字长</td><td>不固定</td><td>定长</td></tr><tr><td>可访存指令</td><td>不加限制</td><td>只有LOAD/STORE指令</td></tr><tr><td>各种指令执行时间</td><td>相差较大</td><td>绝大多数在一个周期内完成</td></tr><tr><td>各种指令使用频度</td><td>相差很大</td><td>都比较常用</td></tr><tr><td>通用寄存器数量</td><td>较少</td><td>多</td></tr><tr><td>目标代码</td><td>难以用优化编译生成高效的目标代码程序</td><td>采用优化的编译程序,生成代码较为高效</td></tr><tr><td>控制方式</td><td>绝大多数为微程序控制</td><td>绝大多数为组合逻辑控制</td></tr><tr><td>指令流水线</td><td>可以通过一定方式实现</td><td>必须实现</td></tr></table>",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md",
      "hidden": true,
      "hidden_reason": "duplicated_answer_mismatched_explanation_and_duplicate_id"
    },
    {
      "id": "计算机组成原理_4-3-5_08",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.3.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "子程序调用指令执行时，必须完成的操作是（）。",
      "options": {
        "A": "仅将子程序入口地址送入程序计数器（PC）",
        "B": "将返回地址存入主存，并将子程序入口地址送入程序计数器（PC）",
        "C": "将程序计数器（PC）当前值存入通用寄存器",
        "D": "修改数据通路中的控制信号以实现转移"
      },
      "answer": [
        "B"
      ],
      "explanation": "子程序调用指令属于控制转移类指令，其执行时必须完成两个关键操作：一是保存返回地址（调用指令的下一条指令地址），通常压入主存中的栈；二是将子程序的入口地址送入 PC，以实现转移。选项 A 仅完成转移，缺失返回地址保存，无法正确返回。选项 C 和 D 的描述不准确或不完整。因此，选项 B 正确且完整地描述了子程序调用的本质功能。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-3-5_09",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.3.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于选择结构语句 “if(comp\\_A) then statement\\_B; else statement\\_C” 对应的机器级代码表示的叙述中，错误的是（）。",
      "options": {
        "A": "一定包含一条无条件转移指令",
        "B": "一定包含一条条件转移指令 (分支指令)",
        "C": "计算 comp\\_A 的代码段一定在条件转移指令之前",
        "D": "对应 statement\\_B 的代码一定在对应 statement\\_C 的代码之前"
      },
      "answer": [
        "D"
      ],
      "explanation": "在 if 语句的机器级代码中，comp\\_A 后面紧接着有一个条件转移指令，条件成立则转移到 statement\\_B，statement\\_B 中有一个无条件转移指令，会转移到 if-else 的下一条语句，选项 A、B 和 C 正确。statement\\_B 不一定在 statement\\_C 之前，这取决于条件转移指令的类型和方向，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-3-5_10",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.3.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于循环结构语句的机器级代码表示的叙述中，错误的是（）。",
      "options": {
        "A": "一定至少包含一条条件转移指令",
        "B": "不一定包含无条件转移指令",
        "C": "循环结束条件可以用一条比较指令 CMP 来实现",
        "D": "循环体内执行的指令不包含条件转移指令"
      },
      "answer": [
        "D"
      ],
      "explanation": "循环结构循环体内最后会有一条条件转移指令，判断是否跳出循环，可以用比较指令（CMP）来实现，选项A和C正确，选项D错误。循环结构不一定包含无条件转移指令，选项B正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-3-5_11",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.3.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列有关调用指令（转子指令）的叙述中，错误的是（）。",
      "options": {
        "A": "与高级语言源程序中的过程调用相对应，一次过程调用对应一条调用指令",
        "B": "指令执行时必须保留返回地址，调用指令随后一条指令的地址是返回地址",
        "C": "嵌套调用时返回地址通常保存在栈中，非嵌套调用时可保存在特定寄存器中",
        "D": "指令执行时将无条件转移到目标地址处，转移目标地址无须在指令中明显给出"
      },
      "answer": [
        "D"
      ],
      "explanation": "为了能保证从被调用过程返回到调用过程继续执行，必须确定并保存返回地址，这个地址是调用指令随后的指令的地址，返回地址只能由调用指令来计算并保存，因为执行调用指令后就转移到了被调用过程，因此无法获取返回地址。为了保证嵌套调用时能够返回到调用过程，必须将返回地址压栈，若不压栈而保存在特定寄存器中，则后面执行的调用指令会将前面调用指令保存的返回地址覆盖掉。调用指令执行时将无条件转移到目标地址处，这个目标地址就是被调用过程第一条指令的地址，它一定在调用指令中明显给出，因此选项D错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_4-3-5_12",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "指令系统",
      "section": "4.3.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "假设 P 为调用过程，Q 为被调用过程，程序在 32 位 x86 处理器上执行，以下是 C 语言程序中过程调用所涉及的操作： ① 过程 Q 保存 P 的现场，并为非静态局部变量分配空间 ② 过程 P 将实参存放到 Q 能访问到的地方 ③ 过程 P 将返回地址存放到特定处，并转移到 Q 执行 ④ 过程 Q 取出返回地址，并转移回到过程 P 执行 ⑤ 过程 Q 恢复 P 的现场，并释放局部变量所占空间 ⑥ 执行过程 Q 的函数体 过程调用的正确执行步骤是（）。",
      "options": {
        "A": "②→③→④→①→⑤→⑥",
        "B": "②→③→①→④→⑥→⑤",
        "C": "②→③→①→⑥→⑤→④",
        "D": "②→③→①→⑤→⑥→④"
      },
      "answer": [
        "C"
      ],
      "explanation": "过程调用的具体过程已在 4.3.4 节中介绍。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch04-第4章-指令系统.md"
    },
    {
      "id": "计算机组成原理_5-1-4_07",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "指令（）从主存储器中读出。",
      "options": {
        "A": "总是根据程序计数器",
        "B": "有时根据程序计数器，有时根据转移指令",
        "C": "根据地址寄存器",
        "D": "有时根据程序计数器，有时根据地址寄存器"
      },
      "answer": [
        "A"
      ],
      "explanation": "CPU 根据程序计数器（PC）中的内容从主存储器中取指令。读者可能想到无条件转移指令或中断返回指令，认为不一定总是根据 PC 读出。实际上，当前指令正在执行时，PC 已经是下一条指令的地址。若遇到无条件转移指令，则只需简单地用转移地址覆盖原 PC 的内容即可，最终的结果还是根据 PC 从主存储器中读出。地址寄存器用来指出所取数据在主存储器中的地址。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_08",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "程序计数器（PC）属于（）的部件。",
      "options": {
        "A": "运算器",
        "B": "控制器",
        "C": "存储器",
        "D": "ALU"
      },
      "answer": [
        "B"
      ],
      "explanation": "控制器是计算机中处理指令的部件，包含程序计数器。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_09",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下面有关程序计数器（PC）的叙述中，错误的是（）。",
      "options": {
        "A": "PC 中总是存放指令地址",
        "B": "PC 的值由 CPU 在执行指令过程中进行修改",
        "C": "执行转移指令时，PC 的值总是修改为转移指令的目标地址",
        "D": "PC 的位数一般和存储器地址寄存器（MAR）的位数一样"
      },
      "answer": [
        "C"
      ],
      "explanation": "PC 中存放下一条要执行的指令的地址，选项 A 正确。PC 的值会根据 CPU 在执行指令的过程中修改（确切地说是在取指周期），或自增，或转移到程序的某处，选项 B 正确。转移指令时，需要判别转移是否成功，若成功则 PC 修改为转移指令的目标地址，否则下一条指令的地址仍然为 PC 自增后的地址，选项 C 错误。PC 的位数通常和 MAR 的位数一样，选项 D 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_10",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "若指令按字边界对齐存放，程序计数器（PC）可以使用字地址，其位数取决于（）。 I. 存储器的容量 II. 机器字长 III. 指令字长",
      "options": {
        "A": "I",
        "B": "I 和 III",
        "C": "II 和 III",
        "D": "I、II 和 III"
      },
      "answer": [
        "B"
      ],
      "explanation": "当指令按字边界对齐且 PC 采用字地址时，PC 的值表示下一条指令所在 “字” 的地址。设主存容量为 M 字节，指令字长为 W 字节，则主存最多容纳 M/W 个指令字，PC 至少需要 $\\log_{2}(M/W)$ 位。因此，PC 的位数取决于存储器容量和指令字长，而与机器字长无直接关系。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_11",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列关于程序计数器（PC）的叙述中，错误的是（）。",
      "options": {
        "A": "机器指令中不能显式地使用 PC",
        "B": "指令顺序执行时，PC 值总是自动加 1",
        "C": "调用指令执行后，PC 值一定是被调用过程的入口地址",
        "D": "无条件转移指令执行后，PC 值一定是转移目标地址"
      },
      "answer": [
        "B"
      ],
      "explanation": "机器指令中不能显式地使用 PC，PC 的值是自增的，或者是由转移类指令设置的。指令顺序执行时，PC 自动加 1，这里的 “1” 是指一条指令的长度，PC 的值不一定总是自动加 1，而是根据指令长度来确定的，具体取决于指令长度占几个编址单位。其余说法均正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_12",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "指令寄存器（IR）的位数取决于（）。",
      "options": {
        "A": "存储器的容量",
        "B": "机器字长",
        "C": "指令字长",
        "D": "存储字长"
      },
      "answer": [
        "C"
      ],
      "explanation": "指令寄存器中保存当前正在执行的指令，所以其位数取决于指令字长。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_13",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "CPU 中通用寄存器的位数取决于（）。",
      "options": {
        "A": "存储器的容量",
        "B": "指令的长度",
        "C": "机器字长",
        "D": "都不对"
      },
      "answer": [
        "C"
      ],
      "explanation": "通用寄存器用于存放操作数和各种地址信息等，其位数与机器字长相等，因此便于操作控制。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_14",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "CPU 中的通用寄存器，（）。",
      "options": {
        "A": "只能存放数据，不能存放地址",
        "B": "可以存放数据和地址",
        "C": "既不能存放数据，又不能存放地址",
        "D": "可以存放数据和地址，还可以替代指令寄存器"
      },
      "answer": [
        "B"
      ],
      "explanation": "通用寄存器供用户自由编程，可以存放数据和地址。而指令寄存器是专门用于存放指令的专用寄存器，不能由通用寄存器代替。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_15",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "在计算机系统中表示程序和机器运行状态的部件是（）。",
      "options": {
        "A": "程序计数器",
        "B": "指令寄存器",
        "C": "中断寄存器",
        "D": "程序状态字寄存器"
      },
      "answer": [
        "D"
      ],
      "explanation": "程序状态字寄存器用于存放程序状态字，而程序状态字的各位表征程序和机器的运行状态，如含有进位标志（CF）、结果为零标志（ZF）等。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_16",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "状态寄存器用来存放（）。",
      "options": {
        "A": "算术运算结果",
        "B": "逻辑运算结果",
        "C": "运算类型",
        "D": "算术、逻辑运算及测试指令的结果状态"
      },
      "answer": [
        "D"
      ],
      "explanation": "程序状态字寄存器用于保留算术、逻辑运算及测试指令的结果状态。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_17",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "下列关于标志寄存器（EFLAGS 寄存器或 PSW 寄存器）的叙述中，错误的是（）。",
      "options": {
        "A": "不需要像通用寄存器那样，对标志寄存器进行编号",
        "B": "条件转移指令根据其中的一些的标志位来确定 PC 的值",
        "C": "可以通过指令直接访问标志寄存器并修改它的值",
        "D": "可以用它来存放执行指令得到的各种标志信息"
      },
      "answer": [
        "C"
      ],
      "explanation": "标志寄存器是专用寄存器，不需要编号，也不能在指令中直接指定编号来访问；标志寄存器中的内容是执行指令的过程中，CPU 根据指令执行的结果生成的各种标志信息，用户不能直接修改它的值。标志寄存器中的标志位主要用于条件转移或条件设置类指令的条件判断。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_18",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "下列表述中，对 CPU 中控制器功能描述最完整的是（）。",
      "options": {
        "A": "产生 CPU 工作所需的时序信号",
        "B": "控制从主存取出一条指令",
        "C": "完成指令操作码的译码",
        "D": "完成指令操作码译码，并产生相应的操作控制信号"
      },
      "answer": [
        "D"
      ],
      "explanation": "控制器的核心功能是在时序驱动下完成取指、译码，并根据操作码生成相应的控制信号，协调各部件工作。选项 A 仅描述其子功能（时序生成），选项 B 和 C 均只涉及单一环节；而选项 D 抓住了控制器 “分析指令并发出控制命令” 的本质，因此是对其功能最完整的描述。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_19",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "CPU 中不包括（）。",
      "options": {
        "A": "存储器地址寄存器",
        "B": "指令寄存器",
        "C": "地址译码器",
        "D": "程序计数器"
      },
      "answer": [
        "C"
      ],
      "explanation": "地址译码器是主存等存储器的组成部分，其作用是根据输入的地址码唯一选定一个存储单元，它不是 CPU 的组成部分。而 MAR、IR、PC 都是 CPU 的组成部分。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_20",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "以下关于计算机系统的概念中，正确的是（）。 I. CPU 不包括地址译码器 II. CPU 的程序计数器中存放的是操作数地址 III. CPU 中决定指令执行顺序的是程序计数器 IV. CPU的状态寄存器对用户是完全透明的",
      "options": {
        "A": "I、III",
        "B": "III、IV",
        "C": "II、III、IV",
        "D": "I、III、IV"
      },
      "answer": [
        "A"
      ],
      "explanation": "地址译码器位于存储器，说法 I 正确；程序计数器中存放的是欲执行指令的地址，它决定程序的执行顺序，说法 II 错误、说法 III 正确；程序状态字寄存器对用户不完全透明，说法 IV 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_21",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "间址周期结束后，CPU 内寄存器 MDR 中的内容为（）。",
      "options": {
        "A": "指令",
        "B": "操作数地址",
        "C": "操作数",
        "D": "无法确定"
      },
      "answer": [
        "B"
      ],
      "explanation": "间址周期的作用是取操作数的有效地址，因此，间址周期结束后，MDR 中的内容为操作数地址。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_22",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2010 统考真题】下列寄存器中，汇编语言程序员可见的是（）。",
      "options": {
        "A": "存储器地址寄存器（MAR）",
        "B": "程序计数器（PC）",
        "C": "存储器数据寄存器（MDR）",
        "D": "指令寄存器（IR）"
      },
      "answer": [
        "B"
      ],
      "explanation": "汇编语言程序员可见的是程序计数器（PC），即汇编语言程序员通过汇编程序可以对某个寄存器进行访问。汇编语言程序员可以通过指定待执行指令的地址来设置 PC 的值，如转移指令、子程序调用指令等。而 IR、MAR、MDR 是 CPU 的内部工作寄存器，对程序员不可见。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_23",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2016 统考真题】某计算机的主存储器空间为 4GB，字长为 32 位，按字节编址，采用 32 位字长指令字格式。若指令按字边界对齐存放，则程序计数器（PC）和指令寄存器（IR）的位数至少分别是（）。",
      "options": {
        "A": "30, 30",
        "B": "30, 32",
        "C": "32, 30",
        "D": "32, 32"
      },
      "answer": [
        "B"
      ],
      "explanation": "PC 用于指出下一条指令的主存地址，虽然可以用 32 位的地址来表示指令地址，但实际上内存中最多只能存放 4GB/32 位 = $2^{30}$ 条指令，所以可以用 30 位的字地址来表示指令地址，这种情况下指令必须采用按边界对齐的方式存放，所以 PC 的位数至少是 30 位，即 PC 给出的地址是字地址。题干已说明指令按字边界对齐的方式存放，也就是说，指令地址都是 4 字节的整数倍，因此为了让 PC 的位数最少，可以采用字地址，取指令时将 PC 值左移 2 位到主存中取指令。指令寄存器（IR）用于存放从内存中取出的指令，它取决于指令字长，所以 IR 的位数至少是 32 位。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-1-4_24",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2020统考真题】下列给出的部件中，其位数（宽度）一定与机器字长相同的是（）。 I. ALU II. 指令寄存器 III. 通用寄存器 IV. 浮点寄存器",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III",
        "C": "仅 II、III",
        "D": "仅 II、III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "机器字长是指 CPU 内部用于整数运算的数据通路的宽度。数据通路是指数据在指令执行过程中所经过的路径及路径上的部件，主要是 CPU 内部进行数据运算、存储和传送的部件，这些部件的宽度基本上要一致才能相互匹配。因此，机器字长等于 ALU 位数和通用寄存器宽度。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-2-5_06",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.2.5",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列关于指令执行过程的叙述中，错误的是（）。",
      "options": {
        "A": "取指操作是控制器固有的功能，不需要在操作码控制下完成",
        "B": "所有指令的取指操作是相同的",
        "C": "在指令长度相同的情况下，所有指令的取指操作是相同的",
        "D": "中断周期是在指令执行完成后出现的"
      },
      "answer": [
        "B"
      ],
      "explanation": "不同长度的指令，其取指操作可能是不同的。例如，双字指令、三字指令与单字指令的取指操作是不同的。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-2-5_07",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.2.5",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列关于指令周期的叙述中，错误的是（）。",
      "options": {
        "A": "指令周期的第一个阶段一定是取指令阶段",
        "B": "乘法指令和加法指令的指令周期总是一样长",
        "C": "一个指令周期可由若干时钟周期组成",
        "D": "单周期 CPU 中的指令周期就是一个时钟周期"
      },
      "answer": [
        "B"
      ],
      "explanation": "无论哪种指令，指令周期的第一个阶段都是取指令（从主存中获得指令）。乘法指令通常比加法指令复杂，若是多周期 CPU，则乘法指令通常需要更多的时钟周期，选项 B 错误。多周期 CPU 的指令周期由若干时钟周期组成。在单周期 CPU 中，指令执行的所有阶段（取指令、译码、执行等）都在一个时钟周期内完成，因此其指令周期就是一个时钟周期。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-2-5_08",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.2.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列关于多周期 CPU 的说法中，合理的是（）。",
      "options": {
        "A": "执行各条指令的时钟周期数相同，各时钟周期的长度均匀",
        "B": "执行各条指令的时钟周期数相同，各时钟周期的长度可变",
        "C": "执行各条指令的时钟周期数可变，各时钟周期的长度均匀",
        "D": "执行各条指令的时钟周期数可变，各时钟周期的长度可变"
      },
      "answer": [
        "C"
      ],
      "explanation": "多周期 CPU 把指令的执行分为多个阶段来实现，每个阶段在一个时钟周期内完成，时钟周期以最复杂的阶段所花的时间为准，阶段的划分原则是：将一条指令的执行过程尽量分成大致相等的若干阶段。不同的指令（根据指令的复杂程度）所含的时钟周期数可以不同。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-2-5_09",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.2.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "关于指令执行过程，下列叙述中正确的是（）。",
      "options": {
        "A": "取指令和取操作数阶段都一定需要通过总线访问主存",
        "B": "指令译码阶段需要计算操作数在内存中的地址",
        "C": "所有指令在执行阶段必然包含访问主存或 I/O 端口的操作",
        "D": "取指令和译码是每条指令必须执行的操作，但取数或写结果不一定要访问主存"
      },
      "answer": [
        "D"
      ],
      "explanation": "指令执行的基本步骤通常包括取指令、译码、地址计算、取操作数、执行和写回结果，其中取指令和译码是所有指令执行的必经阶段，而后续操作因指令而异：操作数和结果可能仅涉及寄存器，无须访问主存或 I/O。因此选项 D 正确。选项 A 错在取操作数不一定访存；选项 B 错在地址计算属于执行阶段，而非译码阶段；选项 C 错在并非所有指令都需要访问主存或 I/O。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-2-5_10",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.2.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "【2009 统考真题】冯·诺依曼机中指令和数据均以二进制形式存放在存储器中，CPU 区分它们的依据是（）。",
      "options": {
        "A": "指令操作码的译码结果",
        "B": "指令和数据的寻址方式",
        "C": "指令周期的不同阶段",
        "D": "指令和数据所在的存储单元"
      },
      "answer": [
        "C"
      ],
      "explanation": "虽然指令和数据都以二进制形式存放在存储器中，但 CPU 可以根据指令周期的不同阶段来区分是指令还是数据，通常在取指阶段取出的是指令，在执行阶段取出的是数据。本题容易误选选项 A，需要清楚的是，CPU 只有在确定取出的是指令后，才会将其操作码送去译码，因此不可能依据译码的结果来区分指令和数据。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-2-5_11",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.2.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2011 统考真题】假定不采用 Cache 和指令预取技术，且机器处于 “开中断” 状态，则在下列有关指令执行的叙述中，错误的是（）。",
      "options": {
        "A": "每个指令周期中 CPU 都至少访存一次",
        "B": "每个指令周期一定大于或等于一个 CPU 时钟周期",
        "C": "空操作指令的指令周期中任何寄存器的内容都不会被改变",
        "D": "当前程序在每条指令执行结束时都可能被外部中断打断"
      },
      "answer": [
        "C"
      ],
      "explanation": "因为不采用指令预取技术，每个指令周期都需要取指令，而不采用 Cache 技术，所以每次取指令都至少要访存一次（当指令字长与存储字长相等且按边界对齐时），选项 A 正确。时钟周期是 CPU 的最小时间单位，每个指令周期一定大于或等于一个 CPU 时钟周期，选项 B 正确。即使是空操作指令，在取指操作结束后，PC 也会自动加 1，选项 C 错误。因为机器处于 “开中断” 状态，所以在每条指令执行结束时都可能被外部中断打断。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-3-5_11",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.3.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列关于单周期 CPU 与采用单总线结构的多周期 CPU 的说法中，正确的是（）。",
      "options": {
        "A": "单周期 CPU 可基于单总线结构实现",
        "B": "运行相同程序时，单周期 CPU 的总执行时间一定更短",
        "C": "多周期 CPU 可将指令和数据存放在同一单端口存储器中，而单周期 CPU 不行",
        "D": "单周期 CPU 的硬件实现成本通常低于多周期 CPU"
      },
      "answer": [
        "C"
      ],
      "explanation": "单周期 CPU 需要在一个时钟周期内并行完成取指、运算和访存，而单总线结构无法同时传输多路数据；其时钟周期由最慢指令决定，通常远大于多周期 CPU，总执行时间未必更短。多周期 CPU 通过分时复用，在不同节拍访问同一存储器，实现指令与数据共存；而单周期 CPU 需要在同一时钟周期内取指和访存，必须采用分离的指令/数据存储器，选项 C 正确。由于需要专用通路和冗余硬件以支持并行操作，单周期 CPU 的芯片面积与成本通常高于采用部件复用的多周期 CPU。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-3-5_12",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.3.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "与专用通路结构的数据通路相比，单总线结构的数据通路（）。",
      "options": {
        "A": "性能更高",
        "B": "数据冲突更严重",
        "C": "硬件规模更大、实现更复杂",
        "D": "控制逻辑更复杂"
      },
      "answer": [
        "B"
      ],
      "explanation": "单总线结构通过一条共享总线分时串行传输数据，硬件简单、状态少、控制逻辑简洁；但因同一时刻仅能传输一次数据，性能较低，且容易引发总线冲突。相比之下，专用通路结构采用独立连线支持并行操作，性能更高、冲突更少，也相应带来了更大的硬件规模。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-3-5_13",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.3.5",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "CPU 的读/写控制信号的作用是（）。",
      "options": {
        "A": "决定数据总线上的数据流方向",
        "B": "控制存储器操作的读/写类型",
        "C": "控制流入、流出存储器信息的方向",
        "D": "以上都是"
      },
      "answer": [
        "D"
      ],
      "explanation": "读/写控制信号线决定了是从存储器读还是向存储器写，显然选项 A、B、C 都正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-3-5_14",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.3.5",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下列有关取指令操作部件的叙述中，错误的是（）。",
      "options": {
        "A": "取指令操作的时延主要由存储器的访问时间决定",
        "B": "取指令操作可与下条指令地址的计算并行进行",
        "C": "在单周期数据通路中，需设置指令寄存器（IR）暂存取出的指令",
        "D": "在单周期数据通路中，程序计数器（PC）无须“写使能”控制信号"
      },
      "answer": [
        "C"
      ],
      "explanation": "单周期 CPU 在一个时钟周期内完成整条指令的执行：指令从存储器读出后，其各字段（如 opcode、rs、rt、imm）通过组合逻辑直接驱动控制单元、寄存器堆和 ALU 等部件，解析与执行同步进行，无须经由 IR 暂存；若设置 IR，则取指到 IR 至少需要一个时钟周期，违背单周期设计原则。此外，PC 每周期无条件更新为下一条指令地址，始终写入，无须 “写使能” 信号。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-3-5_15",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.3.5",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2016 统考真题】单周期处理器中所有指令的指令周期为一个时钟周期。下列关于单周期处理器的叙述中，错误的是（）。",
      "options": {
        "A": "可以采用单总线结构数据通路",
        "B": "处理器时钟频率较低",
        "C": "在指令执行过程中控制信号不变",
        "D": "每条指令的 CPI 为 1"
      },
      "answer": [
        "A"
      ],
      "explanation": "单周期处理器中所有指令的指令周期为一个时钟周期，选项 D 正确。因为每条指令的 CPI 为 1，要考虑比较慢的指令，所以处理器的时钟频率较低，选项 B 正确。单总线数据通路将所有寄存器的输入/输出端都连接在一条公共通路上，一个时钟内只允许一次操作，无法完成指令的所有操作，选项 A 错误。控制信号是 CU 根据指令操作码发出的信号，对于单周期处理器来说，每条指令的执行只有一个时钟周期，而在一个时钟周期内控制信号并不会变化；若是多周期处理器，则指令的执行需要多个时钟周期，在每个时钟周期控制器会发出不同信号，选项 C 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-3-5_16",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.3.5",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2019 统考真题】下列有关处理器时钟信号的叙述中，错误的是（）。",
      "options": {
        "A": "时钟信号由机器脉冲源发出的脉冲信号经整形和分频后形成",
        "B": "时钟信号的宽度称为时钟周期，时钟周期的倒数为机器主频",
        "C": "时钟周期以相邻状态单元间组合逻辑电路的最大延迟为基准确定",
        "D": "处理器总是在每来一个时钟信号时就开始执行一条新的指令"
      },
      "answer": [
        "D"
      ],
      "explanation": "时钟信号的宽度称为时钟周期，时钟周期的倒数为机器主频。时钟信号由机器脉冲源发出的脉冲信号经整形和分频后形成，时钟周期以相邻状态单元间组合逻辑电路的最大延迟为基准确定。对于单周期 CPU，一个指令周期就是一个时钟周期，每个时钟周期执行一条新指令；对于多周期 CPU，每个指令周期（包含若干时钟周期）执行一条新指令；对于流水线 CPU，只有在理想情况下才能实现每个时钟周期执行一条新指令，选项 D 的描述有误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-3-5_17",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.3.5",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2021 统考真题】下列关于数据通路的叙述中，错误的是（）。",
      "options": {
        "A": "数据通路包含 ALU 等组合逻辑（操作）元件",
        "B": "数据通路包含寄存器等时序逻辑（状态）元件",
        "C": "数据通路不包含用于异常事件检测及响应的电路",
        "D": "数据通路中的数据流动路径由控制信号进行控制"
      },
      "answer": [
        "C"
      ],
      "explanation": "指令执行过程中数据所经过的路径，包括路径上的部件，称为数据通路。ALU、通用寄存器、状态寄存器、Cache、MMU、浮点运算逻辑、异常和中断处理逻辑等，都是指令执行过程中数据流经的部件，都属于数据通路的一部分。数据通路中的数据流动路径由控制部件控制，控制部件根据每条指令功能的不同，生成对数据通路的控制信号。选项 C 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-3-5_18",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.3.5",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2023 统考真题】数据通路由组合逻辑元件（操作元件）和时序逻辑元件（状态元件）组成。下列给出的元件中，属于操作元件的是（）。 I. 算术逻辑单元（ALU） II. 程序计数器（PC） III. 通用寄存器组（GPRs） IV. 多路选择器（MUX）",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、IV",
        "C": "仅 II、III",
        "D": "仅 I、II、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "组合逻辑元件（操作元件）不含存储信号的记忆单元，任何时刻产生的输出仅取决于当前的输入，加法器、算术逻辑单元（ALU）、译码器、多路选择器、三态门等都属于操作元件。时序逻辑元件（状态元件）包含存储信号的记忆单元，各类寄存器和存储器，如通用寄存器组、程序计数器、状态/移位/暂存/锁存寄存器等，都属于状态元件。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_06",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列关于微指令的说法中，错误的是（）。 I. 字段直接编码方式可用较少的二进制位数表示较多的微操作命令。若有两组互斥的微命令，每组微命令的个数分别为4和9，则分别只需要2位和4位即可 II. 直接编码方式不用进行译码操作，微指令字段中的每一位都代表一个微命令 III. 垂直型微指令用较长的微程序结构换取较短的微指令结构，所以在执行效率和灵活性两方面都高于水平型微指令 IV. 在字段间接编码方式中，某个字段的译码输出需要依靠另外某个字段的输出",
      "options": {
        "A": "II",
        "B": "I、II",
        "C": "I、III",
        "D": "II、III、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "字段直接编码方式为了缩短微指令字长而牺牲了速度，当微命令个数为4时需要3位，2位会导致每个编码都输出一个微命令，而不能表示不输出，说法I错误。说法II正确。垂直型微指令的缺点是微程序长、执行速度慢、工作效率低，说法III错误。在字段间接编码方式中，一个字段的某些微命令要由另一个字段的某些微命令来解释，即依赖另一个字段的译码输出，说法IV正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_07",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "微程序控制存储器属于（）的一部分。",
      "options": {
        "A": "主存",
        "B": "外存",
        "C": "CPU",
        "D": "缓存"
      },
      "answer": [
        "C"
      ],
      "explanation": "微程序控制存储器用来存放微程序，是微程序控制器的核心部件，属于 CPU 的一部分，而不属于主存。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_08",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列说法中，正确的是（）。",
      "options": {
        "A": "采用微程序控制器是为了提高速度",
        "B": "控制存储器由高速 RAM 电路组成",
        "C": "微指令计数器决定指令执行顺序",
        "D": "一条微指令存放在控制器的一个控制存储器单元中"
      },
      "answer": [
        "D"
      ],
      "explanation": "硬布线控制器采用硬件电路，速度较快，但设计难度大、成本高。微程序控制器的速度较慢，\n\n但灵活性高。通常控制存储器采用 ROM 元件实现。微指令计数器决定了微指令执行的顺序。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_09",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "假设计算机 A 要求应用在实时性要求较高的场合，计算机 B 要求有较好的灵活性和可修改性，则两台计算机的控制器应采用的设计方式分别是（）。",
      "options": {
        "A": "计算机 A 和 B 都应采用硬布线控制器",
        "B": "计算机 A 和 B 都应采用微程序控制器",
        "C": "计算机 A 应采用硬布线控制器，计算机 B 应采用微程序控制器",
        "D": "计算机 A 应采用微程序控制器，计算机 B 应采用硬布线控制器"
      },
      "answer": [
        "C"
      ],
      "explanation": "实时性要求较高的场合通常需要能快速地响应和执行，硬布线控制器由硬件直接实现控制逻辑，速度较快，非常适用于实时性要求较高的场合。灵活性和可修改性要求高时，适合采用微程序控制器，因为微程序控制器可很方便地通过修改微程序来灵活调整控制逻辑。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_10",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "在微程序控制器中，控制部件向执行部件发出的某个控制信号称为（）。",
      "options": {
        "A": "微程序",
        "B": "微指令",
        "C": "微操作",
        "D": "微命令"
      },
      "answer": [
        "D"
      ],
      "explanation": "在微程序控制器中，控制部件向执行部件发出的控制信号称为微命令，微命令执行的操作称为微操作。微指令则是若干微命令的集合，若干微指令的有序集合称为微程序。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_11",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "在微程序控制器中，机器指令与微指令的关系是（）。",
      "options": {
        "A": "每条机器指令由一条微指令来执行",
        "B": "每条机器指令由若干微指令组成的微程序来执行",
        "C": "若干机器指令组成的程序可由一个微程序来执行",
        "D": "每条机器指令由若干微程序来执行"
      },
      "answer": [
        "B"
      ],
      "explanation": "在一个 CPU 周期中，一组实现一定功能的微命令的组合构成一条微指令，有序的微指令序列构成一段微程序，微程序的作用是实现一条对应的机器指令。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_12",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "水平型微指令与垂直型微指令相比，（）。",
      "options": {
        "A": "前者一次只能完成一个基本操作",
        "B": "后者一次只能完成一个基本操作",
        "C": "两者都是一次只能完成一个基本操作",
        "D": "两者都能一次完成多个基本操作"
      },
      "answer": [
        "B"
      ],
      "explanation": "一条水平型微指令能定义并执行几种并行的基本操作；一条垂直型微指令只能定义并执行一种基本操作。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_13",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "垂直型微指令的特点是（）。",
      "options": {
        "A": "控制信号经过编码产生",
        "C": "采用微操作码",
        "B": "强调并行控制功能",
        "D": "微指令格式垂直表示"
      },
      "answer": [
        "C"
      ],
      "explanation": "垂直型微指令是一种微指令格式，相比于水平型微指令而言的，并不是指令格式垂直表示，在微指令中设置了微操作码字段，结构类似于机器指令格式。控制信号经过编码产生是一种控制字段的编码方式，属于水平型微指令，强调并行控制功能是一种控制字段的设计目标，适合水平型微指令而不适合垂直型微指令。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_14",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下列关于微命令的描述中，正确的是（）。",
      "options": {
        "A": "同一个时钟周期中，可以同时出现的微命令叫相容性微命令",
        "B": "同一个时钟周期中，可以同时出现的微命令叫互斥性微命令",
        "C": "在执行过程中可能引起总线冲突的微命令叫互斥性微命令",
        "D": "同一个时钟周期中，不允许同时出现的微命令叫相容性微命令"
      },
      "answer": [
        "A"
      ],
      "explanation": "在同一个 CPU 周期中，可以同时出现的微命令叫相容性微命令，不允许同时出现的微命令叫互斥性微命令。不允许同时出现的原因有可能是会引起总线冲突，也有可能是其他原因。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_15",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "在微程序控制方式中，以下说法正确的是（）。 I. 采用微程序控制器的处理器称为微处理器 II. 每条机器指令由一段微程序来执行 III. 在微指令的编码中，效率最低的是直接编码方式 IV. 水平型微指令能充分利用数据通路的并行结构",
      "options": {
        "A": "I、II",
        "B": "II、IV",
        "C": "I、III",
        "D": "III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "微处理器是相对于一些大型处理器而言的，与微程序控制器没有必然联系。不管是采用微程序控制器，还是采用硬布线控制器，微机的 CPU 都是微处理器，说法 I 错误。微程序的设计思想就是将每条机器指令编写成一个微程序，每个微程序包含若干微指令，每条微指令对应一个或几个微操作命令，说法 II 正确。直接编码方式中每位代表一个微命令，不需要译码，因此执行效率最高，只是这种方式会使得微指令的位数大大增加，说法 III 错误。一条水平型微指令能定义并执行几种并行的基本操作，因此能够更充分利用数据通路的并行结构，说法 IV 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_16",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "下列说法中，正确的是（）。 I. 微程序控制方式和硬布线控制方式相比较，前者可以使指令的执行速度更快 II. 若采用微程序控制方式，则可用 $\\mu$ PC 取代 PC III. 控制存储器可以用 ROM 元件实现 IV. 指令周期也称 CPU 时钟周期",
      "options": {
        "A": "I、III",
        "B": "II、III",
        "C": "只有 III",
        "D": "I、III、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "微程序控制方式采用编程方式来执行指令，而硬布线控制方式则采用硬件方式来执行指令，因此硬布线控制方式速度较快，说法I错误。 $\\mu$ PC无法取代PC，因为它只在微程序中指向下一条微指令地址的寄存器。因此它也必然不可能知道这段微程序执行完毕后下一条是什么指令，说法II错误。每条微指令执行时所发出的控制信号是事先设计好的，不需要改变，因此存放所有控制信号的存储器应为ROM，说法III正确。指令周期是从一条指令启动到下一条指令启动的间隔时间，而时钟周期是计算机内部最基本、最小的时间单位，说法IV错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_17",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "通常一条指令对应一个微程序，一个微程序的周期对应一个（）。",
      "options": {
        "A": "指令周期",
        "B": "主频周期",
        "C": "时钟周期",
        "D": "工作周期"
      },
      "answer": [
        "A"
      ],
      "explanation": "一条指令对应一个微程序，所以一个微程序的周期对应一个指令周期。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_18",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "下列部件中属于控制部件的是（）。 I. 指令寄存器 II. 操作控制器 III. 程序计数器 IV. 状态条件寄存器",
      "options": {
        "A": "I、III、IV",
        "B": "I、II、III",
        "C": "I、II、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "CPU 控制器主要由三个部件组成：指令寄存器、程序计数器和操作控制器。状态条件寄存器通常属于运算器的部件，保存由算术指令和逻辑指令运行或测试的结果建立的各种条件码内容，如运算结果进位标志（CF）、运算结果溢出标志（OF）等。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_19",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "为了确定下一条微指令的地址，通常采用断定方式，其基本思想是（）。",
      "options": {
        "A": "用程序计数器（PC）来产生后继微指令地址",
        "B": "用微程序计数器（μPC）来产生后继微指令地址",
        "C": "通过后继微指令地址字段由设计者指定或转移控制字段控制产生后继微指令地址",
        "D": "通过指令中指定一个专门字段来控制产生后继微指令地址"
      },
      "answer": [
        "C"
      ],
      "explanation": "断定法是指在微指令（后继地址字段）中直接明确指出下一条微指令的地址，这样相当于每条都是转移微指令，此外，还有一些其他方法如条件测试和转移控制字段，也用于控制微指令的寻址。因此，后继微指令地址可由微程序设计者指定，或者根据微指令所规定的转移控制字段控制产生。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_20",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "下图是某微程序控制器的基本结构， $\\mu \\mathrm{PC}$ 是一个8位寄存器， $\\mu \\mathrm{IR}$ 是一个32位寄存器，一条机器指令平均由4条不同的微指令组成（不含取指部分），则下列描述中错误的是（）。 ![](images/df8c8931ba249c6abaf199ba13a7a942d1da7b316fb354ea2d4cb6348a46abed.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"微命令\"] --> B[\"译码\"] B --> C[\"...\"] C --> D[\"转移控制\"] D --> E[\"控制存储器 CS\"] E --> F[\"起始和转移地址发生器\"] F --> G[\"条件码\"] G --> H[\"μPC\"] H --> I[\"CLK\"] I --> J[\"...\"] J --> C K[\"来自主存\"] --> L[\"IR\"] L --> F M[\"“+1”\"] --> H ``` </details>",
      "options": {
        "A": "微指令的地址形成方式是增量法",
        "B": "条件码来自标志寄存器",
        "C": "最多有 64 条不同的机器指令",
        "D": "控制存储器的容量为 1KB"
      },
      "answer": [
        "C"
      ],
      "explanation": "图中 $\\mu$ PC 根据时钟信号进行自增 “+1” 操作，因此微指令的地址形成方式是增量（计数器）法。转移微指令根据标志寄存器中的标志位来决定下一条微指令的地址。 $\\mu$ PC 的位数是 8 位，能够指向 256 条微指令，其中包括若干取指微指令，因此机器指令的条数小于 256/4 = 64，选项 C 错误。控制存储器的容量为微指令所占用的存储空间，即 $256 \\times 32b = 1KB$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_21",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2009 统考真题】相对于微程序控制器，硬布线控制器的特点是（）。",
      "options": {
        "A": "指令执行速度慢，指令功能的修改和扩展容易",
        "B": "指令执行速度慢，指令功能的修改和扩展难",
        "C": "指令执行速度快，指令功能的修改和扩展容易",
        "D": "指令执行速度快，指令功能的修改和扩展难"
      },
      "answer": [
        "D"
      ],
      "explanation": "微程序控制器采用了 “存储程序” 的原理，每条机器指令对应一个微程序，因此修改和扩充容易，灵活性好，但每条指令的执行都要访问控制存储器，所以速度慢。硬布线控制器采用专门的逻辑电路实现，其速度主要取决于逻辑电路的延迟，因此速度快，但修改和扩展困难，灵活性差。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_22",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2012 统考真题】某计算机的控制器采用微程序控制方式，微指令中的操作控制字段采用字段直接编码法，共有 33 个微命令，构成 5 个互斥类，分别包含 7、3、12、5 和 6 个微命令，则操作控制字段至少有（）。",
      "options": {
        "A": "5 位",
        "B": "6位",
        "C": "15 位",
        "D": "33 位"
      },
      "answer": [
        "C"
      ],
      "explanation": "字段直接编码法将微命令字段分成若干小字段，互斥性微命令组合在同一字段中，相容性微命令分在不同字段中，每个字段还要留出一个状态，表示本字段不发出任何微命令。5个互斥类，分别包含7、3、12、5和6个微命令，需要3、2、4、3和3位，共15位。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_23",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2014 统考真题】某计算机采用微程序控制器，共有 32 条指令，公共的取指令微程序包含 2 条微指令，各指令对应的微程序平均由 4 条微指令组成，采用断定法（后继地址字段法）确定下条微指令地址，则微指令中后继地址字段的位数至少是（）。",
      "options": {
        "A": "5",
        "B": "6",
        "C": "8",
        "D": "9"
      },
      "answer": [
        "C"
      ],
      "explanation": "计算机共有32条指令，各个指令对应的微程序平均为4条，则指令对应的微指令为 $32\\times4=128$ 条，而公共微指令还有2条，整个系统中微指令的条数共为 $128+2=130$ 条，所以需要 $\\left[\\log_{2}130\\right]=8$ 位才能寻址到130条微指令。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_24",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2017统考真题】下列关于主存储器（MM）和控制存储器（CS）的叙述，错误的是（）。",
      "options": {
        "A": "MM 在 CPU 外，CS 在 CPU 内",
        "B": "MM 按地址访问，CS 按内容访问",
        "C": "MM 存储指令和数据，CS 存储微指令",
        "D": "MM 用 RAM 和 ROM 实现，CS 用 ROM 实现"
      },
      "answer": [
        "B"
      ],
      "explanation": "主存储器（MM）在 CPU 外，用于存储指令和数据，由 RAM 和 ROM 实现（主要是 RAM）。控制存储器（CS）用来存放构成指令系统的所有微指令，是一种只读型存储器，机器运行时只读不写，在 CPU 的控制器内。控制存储器按照微指令的地址访问。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_25",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2019 统考真题】某指令的功能为 R[r2]←R[r1] + M[R[r0]], 其两个源操作数分别采用寄存器、寄存器间接寻址方式。对于下列给定部件，该指令在取数及执行过程中需要用到的是（）。 I. 通用寄存器组（GPRs） II. 算术逻辑单元（ALU） III. 存储器（Memory） IV. 指令译码器（ID）",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、II、III",
        "C": "仅 II、III、IV",
        "D": "仅 I、III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "该指令的两个源操作数分别采用寄存器、寄存器间接寻址方式，因此在取数阶段需要用到通用寄存器组（GPRs）和存储器（Memory）；在执行阶段，两个源操作数相加需要用到算术逻辑单元（ALU）。而指令译码器（ID）用于对操作码字段进行译码，向控制器提供特定的操作信号，在取数及执行阶段用不到。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_26",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2021 统考真题】下列寄存器中，汇编语言程序员可见的是（）。 I. 指令寄存器 II. 微指令寄存器 III. 基址寄存器 IV. 标志/状态寄存器",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、IV",
        "C": "仅 II、IV",
        "D": "仅 III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "汇编语言程序员可见的寄存器有基址寄存器（用于实现多道程序设计或者编制浮动程序）和状态/标志寄存器、程序计数器（PC）及通用寄存器组；而 MAR、MDR、IR 是 CPU 的内部工作寄存器，对汇编语言程序员不可见。微指令寄存器属于微程序控制器的组成部分，它是硬件设计者的任务，对汇编语言程序员是透明的（不可见的）。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-4-4_27",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2021 统考真题】通常情况下，将汇编语言程序中实现特定功能的指令序列定义成一条伪指令（pseudoinstruction）。在下列选项中，CPU 能理解并直接执行的是（）。 I. 伪指令 II. 微指令 III. 机器指令 IV. 汇编指令",
      "options": {
        "A": "仅 I、IV",
        "B": "仅 II、III",
        "C": "仅 III、IV",
        "D": "仅 I、III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "高级语言程序、汇编语言程序都需要通过翻译程序来处理，生成机器语言程序后才能被 CPU 执行。机器指令能被 CPU 理解并直接执行。微指令是 CPU 控制单元用于实现机器指令的更低层次的指令。在微程序控制的 CPU 中，一条机器指令对应一个微程序，微程序是微指令的有序序列，用来控制 CPU 实现机器指令的过程，因此微指令也能被 CPU 理解并直接执行。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-5-4_07",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.5.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列选项中，不属于外部中断事件的是（）。",
      "options": {
        "A": "采样定时时间到",
        "B": "无效操作码",
        "C": "打印机缺纸",
        "D": "键盘缓冲满"
      },
      "answer": [
        "B"
      ],
      "explanation": "无效操作码是由 CPU 在对某条指令译码时发现的，因此是内部异常。采样定时时间到、打印机缺纸、键盘缓冲满都与当前指令的执行无关，是由 CPU 外部的中断源发出的中断请求。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-5-4_08",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.5.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列关于异常/中断机制与进程上下文切换机制的叙述中，错误的是（）。",
      "options": {
        "A": "进程上下文切换和异常/中断响应两者都会产生异常控制流",
        "B": "进程上下文切换后，CPU 执行的是另一个进程的代码",
        "C": "响应异常/中断请求后，CPU 执行的是内核程序的代码",
        "D": "进程上下文切换和异常/中断响应处理都通过执行内核程序实现"
      },
      "answer": [
        "D"
      ],
      "explanation": "在硬件层，CPU 中有检测异常和中断事件并将控制转移到操作系统内核执行的机制；在操作系统层，内核能通过进程的上下文切换将一个进程的执行转移到另一个进程的执行，它们都会产生异常控制流。响应异常/中断请求后，CPU 执行的是异常/中断服务程序，是操作系统的内核程序。进程上下文切换由操作系统的内核程序实现，而异常/中断的响应则由硬件实现。\n\n# 补充知识\n\nCPU 所执行指令的地址序列称为 CPU 的控制流。在程序正常执行时，通过顺序执行指令或转移指令得到的控制流称为正常控制流。在正常执行过程中，因遇到异常或中断事件而引起用户程序的正常执行被打断所形成的意外控制流，称为异常控制流。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-5-4_09",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.5.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "异常或中断处理结束后，返回到被中断原程序继续执行的指令地址称为“断点”，下列关于“断点”的说法中，错误的是（）。",
      "options": {
        "A": "“陷阱”类异常的断点为陷阱指令下一条指令的地址",
        "B": "“故障”类异常的断点为当前发生异常的指令的地址",
        "C": "外部中断的断点总是当前刚执行完的指令的地址",
        "D": "“终止”类异常的断点可以是当前指令或下一条指令的地址"
      },
      "answer": [
        "C"
      ],
      "explanation": "外部中断请求信号的检测总是在一条指令执行完之后，取下一条指令之前。因此，若检测到有外部中断请求，则响应中断请求并转到中断服务程序执行后，应返回到原来被中断的程序中已经执行完成的指令的下一条指令执行，而不返回到刚执行完的指令执行。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-5-4_10",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.5.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "【2015 统考真题】内部异常（内中断）可分为故障（fault）、陷阱（trap）和终止（abort）三类。下列有关内部异常的叙述中，错误的是（）。",
      "options": {
        "A": "内部异常的产生与当前执行指令相关",
        "B": "内部异常的检测由 CPU 内部逻辑实现",
        "C": "内部异常的响应发生在指令执行过程中",
        "D": "内部异常处理后返回到发生异常的指令继续执行"
      },
      "answer": [
        "D"
      ],
      "explanation": "内部异常是指来自 CPU 内部产生的中断，如非法指令、地址非法、校验错、页面失效、运算溢出和除数为零等，以上都是在指令的执行过程中产生的，选项 A 正确。内部异常的检测是由 CPU 自身完成的，不必通过外部的某个信号通知 CPU，选项 B 正确。内部异常不能被屏蔽，一旦出现应立即处理，选项 C 正确。对于非法指令、除数为零等异常，无法通过异常处理程序恢复故障，因此不能回到原断点执行，必须终止进程的执行，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-5-4_11",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.5.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2016 统考真题】异常是指令执行过程中在处理器内部发生的特殊事件，中断是来自处理器外部的请求事件。下列关于中断或异常情况的叙述中，错误的是（）。",
      "options": {
        "A": "“访存时缺页”属于中断",
        "B": "“整数除以 0” 属于异常",
        "C": "“DMA 传送结束” 属于中断",
        "D": "“存储保护错”属于异常"
      },
      "answer": [
        "A"
      ],
      "explanation": "中断是指来自 CPU 执行指令以外的事件，如设备发出的 I/O 结束中断，表示设备输入/输出已完成，希望处理机能向设备发出下一个输入/输出请求，同时让完成输入/输出后的程序继续运行。异常也称内中断，指源自 CPU 执行指令内部的事件。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-5-4_12",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.5.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2020 统考真题】下列关于 “自陷”（Trap，也称陷阱）的叙述中，错误的是（）。",
      "options": {
        "A": "自陷是通过陷阱指令预先设定的一类外部中断事件",
        "B": "自陷可用于实现程序调试时的断点设置和单步跟踪",
        "C": "自陷发生后 CPU 将转去执行操作系统内核相应程序",
        "D": "自陷处理完成后返回到陷阱指令的下一条指令执行"
      },
      "answer": [
        "A"
      ],
      "explanation": "自陷是一种内部异常，选项 A 错误。在 x86 计算机中，用于程序调试的“断点设置”功能是通过自陷机制实现的，选项 B 正确。执行到自陷指令时，无条件或有条件地自动调出操作系统内核程序进行执行，选项 C 正确。CPU 执行陷阱指令后，会自动地根据不同陷阱类型进行相应的处理，然后返回到陷阱指令的下一条指令执行，选项 D 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-5-4_13",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.5.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2021 统考真题】异常事件在当前指令执行过程中进行检测，中断请求则在当前指令执行后进行检测。下列事件中，相应处理程序执行后，必须回到当前指令重新执行的是（）。",
      "options": {
        "A": "系统调用",
        "B": "页缺失",
        "C": "DMA 传送结束",
        "D": "打印机缺纸"
      },
      "answer": [
        "B"
      ],
      "explanation": "系统调用属于自陷，“断点”为自陷指令的下一条指令地址。DMA传送结束后，DMA控制器需要向CPU发送中断请求，属于外中断，外中断的“断点”为下一条指令地址。打印机缺纸同样属于外中断。页缺失属于内部异常中的故障，“断点”为发生故障的指令地址，执行完缺页异常处理程序之后必须返回发生故障的指令重新执行。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_04",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "设指令由取指、分析、执行 3 个子部件完成，并且每个子部件的时间均为 $\\Delta t$ ，若采用度为 4 的超标量流水线处理机，连续执行 20 条指令，只需（）。",
      "options": {
        "A": "$3 \\Delta t$",
        "B": "$5 \\Delta t$",
        "C": "$7 \\Delta t$",
        "D": "$9 \\Delta t$"
      },
      "answer": [
        "D"
      ],
      "explanation": "MIMD 同时执行多条指令，分别处理多个不同的数据流，是目前主流的并行计算模型。MIMD 可分为两类：① 多计算机系统，每个节点拥有私有存储器和独立的地址空间，无法通过普通的访存指令直接访问其他节点的内存，需依赖消息传递进行通信，也称消息传递型 MIMD；② 多处理器系统，通常指共享存储多处理器系统（见 5.7.4 节），具有统一的全局地址空间，所有处理器可通过普通的访存指令访问系统中的任意存储单元，也称共享存储型 MIMD。\n\n总体而言，SIMD属于数据级并行，适用于规则、同构的数据处理；而MIMD支持线程级或任务级并行，并行程度更高，适用范围更广。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_06",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列关于指令流水线设计的叙述中，错误的是（）。",
      "options": {
        "A": "指令执行过程中的各个子功能都需要包含在某个流水段中",
        "B": "所有子功能都必须按一定的顺序经过流水段",
        "C": "虽然各个子功能所用实际时间可能不同，但经过每个流水段的时间都一样",
        "D": "任何时候各个流水段的功能部件都不可能执行空操作"
      },
      "answer": [
        "D"
      ],
      "explanation": "指令执行过程中的各个子功能都需要包含在某个流水段中，每条指令都会依次进入所有流水段进行处理。不同指令的复杂度不同，所需的功能段不同，但为了保证指令流水线正常运行，流水段个数以最复杂指令所用的功能段个数为准，流水段长度以最复杂的操作所花的时间为准。因此，其他指令可以通过加入“空操作”功能段向最复杂的指令靠齐。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_07",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列关于流水段寄存器的叙述中，正确的是（）。",
      "options": {
        "A": "指令译码得到的控制信号需通过流水段寄存器传递到下一个流水段",
        "B": "每个流水段之间的流水段寄存器位数一定相同",
        "C": "每个流水段之间的流水段寄存器存放的信息一定相同",
        "D": "用户程序可以通过指令指定访问哪个流水段寄存器"
      },
      "answer": [
        "A"
      ],
      "explanation": "在某个时钟周期内，不同的流水段受不同指令的控制信号控制，执行不同指令的不同功能段，在指令译码阶段由控制器产生指令各流水段的所有控制信号，分别在随后的各个时钟周期内被使用，因此随后各流水段寄存器都要保存相应的控制信号，并通过流水段寄存器传递到下一个流水段，选项 A 正确。不同流水段寄存器存放的信息不同，因此流水段寄存器位数不一定相同，流水段寄存器对用户程序是透明的，用户程序不能通过指令指定访问哪个流水段寄存器。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_08",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列关于流水线数据通路的描述中，错误的是（）。",
      "options": {
        "A": "每个流水段由执行指令子功能的功能部件和流水段寄存器组成",
        "B": "控制信号仅作用在功能部件上，时钟信号仅作用在流水段寄存器上",
        "C": "在没有阻塞的情况下，PC 的值在每个时钟周期都会改变",
        "D": "取指令阶段和指令译码阶段不需要控制信号的控制"
      },
      "answer": [
        "B"
      ],
      "explanation": "在流水线数据通路中，时钟信号不仅作用在流水段寄存器上，还要作用在 PC、各类寄存器、存储器等状态元件上。每条指令的取指令阶段和指令译码阶段的功能都相同，是公共流水段，且控制信号是指令译码之后才产生的，因此这两个阶段不需要控制信号。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_09",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于结构冒险的叙述中，正确的是（）。 I. 结构冒险是指多条指令在同一时钟周期争用同一个硬件资源 II. 规定每条指令只能在指定流水段访问特定功能部件，可减少结构冒险 III. 通过重复设置功能部件（如多个 ALU）可以避免结构冒险 IV. 将数据 Cache 与指令 Cache 分离，可解决取指和取数同时访存引起的结构冒险",
      "options": {
        "A": "I、II、IV",
        "B": "I、II、III",
        "C": "I、III、IV",
        "D": "I、II、III 和 IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "结构冒险是指多条指令在同一时钟周期争用同一硬件资源。规定每条指令仅在指定流水段访问特定功能部件，可使资源使用有序化，从而减少结构冒险；通过重复设置功能部件（如多个ALU）能支持多指令并行访问，直接避免资源冲突；将指令 Cache 与数据 Cache 分离，可解决取指（IF 阶段）与访存（MEM 阶段）同时访问存储器引起的结构冒险。因此，四个说法均正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_10",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "指令流水线中出现数据相关时流水线将受阻，（）可部分解决数据相关问题。",
      "options": {
        "A": "增加硬件资源",
        "B": "采用旁路技术",
        "C": "采用分支预测技术",
        "D": "以上都可以"
      },
      "answer": [
        "B"
      ],
      "explanation": "处理数据相关问题有两种方法：一种是暂停相关指令的执行，即暂停流水线，直到能够正确读出寄存器操作数为止；另一种是采用专门的数据通路，直接把结果送到 ALU 的输入端，这种方法称为旁路技术。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_11",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列关于数据冒险和转发技术的叙述中，正确的是（）。 I. 并非所有数据冒险都能通过转发技术解决 II. 五段流水线中 load-use 数据冒险会引起至少一个时钟周期的阻塞 III. 前面的分支指令和后面的 ALU 运算指令之间肯定不会发生数据冒险",
      "options": {
        "A": "I、II",
        "B": "I、III",
        "C": "II、III",
        "D": "I、II、III"
      },
      "answer": [
        "A"
      ],
      "explanation": "部分数据冒险可以通过转发技术解决，但有些数据冒险不行，例如 load-use 类型的数据冒险（当下一条指令需要用到本条指令的访存结果时）。load-use 类型的数据冒险会引起一个或多个时钟周期的阻塞，需要添加空操作指令解决。若 ALU 运算指令的某个操作数是分支指令转移后的执行结果，就会发生数据冒险。例如，分支指令 “slt r1, r2, r3”，其含义是 若(r2) < (r3)，则 r1 = 1；否则 r1 = 0。若紧挨着一条 ALU 运算指令要用到 r1 的值，则会发生数据冒险。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_12",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "下列关于数据冒险的叙述中，正确的是（）。 I. 数据冒险是指后面指令用到的数据还未来得及由前面的指令产生 II. 在发生数据冒险的指令之间插入空操作指令能避免数据冒险 III. 采用转发（旁路）技术可以解决一部分数据冒险现象 IV. 通过编译器调整指令顺序可解决部分数据冒险",
      "options": {
        "A": "I、II、IV",
        "B": "I、II、III",
        "C": "I、III、IV",
        "D": "I、II、III 和 IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "插入空操作指令，使相关指令延迟执行，可以避免数据冒险。采用转发技术，将数据通路中生成的中间数据直接转发到 ALU 的输入端，可以解决部分数据冒险，但不能解决 load-use 类型的数据冒险。通过编译器调整相关指令的顺序，也可以解决部分数据冒险。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_13",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "下列指令序列中，指令 I1 和 I3、I2 和 I3 之间发生数据相关。假定采用 “取指、译码/取数、执行、访存、写回” 五段流水线方式，那么在采用转发技术时，需要在指令 I3 之前加入（）条空操作指令才能使这段程序不发生数据冒险。 I1: add r1, r0, 1 $\\#(r1) \\leftarrow (r0) + 1$ I2: load r3, 12(r2) \\# (r3) ← M[(r2) + 12] I3: add r5, r3, r1 $\\#(r5) \\leftarrow (r3) + (r1)$",
      "options": {
        "A": "3",
        "B": "2",
        "C": "0",
        "D": "1"
      },
      "answer": [
        "D"
      ],
      "explanation": "转发技术可以解决部分数据冒险，但不能解决 load-use 类型的数据冒险。分析上述指令序列，指令 I1 在 EX 段结束时已得到 r1 的新值，采用转发技术后，指令 I3 在 ALU 中用到的 r1 值可以直接从 EX/MEM 流水段寄存器中取，可以解决指令 I1 和 I3 的数据冒险。指令 I2 和 I3 是 load-use 类型的数据冒险，load 指令只在 MEM 段结束时才能取到主存中的数据，然后送 MEM/WB 流水段寄存器，在 WB 段的前半个时钟周期才能将新值写入 r3，但随后的 add 指令在 EX 段就要取 r3 的值，因此会发生数据冒险。需要在 add 指令之前插入一条空操作指令，这样在 add 指令的 EX 段就可从 MEM/WB 流水段寄存器中取出 load 指令的最新结果。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_14",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下面关于控制冒险的描述中，错误的是（）。 I. 无条件转移指令不会发生控制冒险 II. 在分支指令加入若干空操作指令可以避免控制冒险 III. 采用转发（旁路）技术，可以解决部分控制冒险 IV. 中断或异常也会引起控制冒险 V. 流水段的数量与控制冒险引发的开销无关",
      "options": {
        "A": "I、IV、V",
        "B": "III、V",
        "C": "I、III、IV",
        "D": "I、III、V"
      },
      "answer": [
        "D"
      ],
      "explanation": "直接转移指令的转移目标地址在执行阶段才确定，会发生控制冒险，说法 I 错误。插入空操作指令可使条件转移指令的结果在取下一条有效指令之前确定，从而避免控制冒险，说法 II 正确。采用转发技术，可以解决的是数据冒险，说法 III 错误。中断或异常会改变程序的执行流程，也会引起控制冒险，说法 IV 正确。流水段的数量越多，意味着在转移结果确定之前，可能取出更多的错误指令，从而需要更多的时间和资源来处理这些错误指令，说法 V 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_15",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "下列关于分支预测的叙述中，正确的是（）。 I. 分支预测技术可用于处理控制冒险和数据冒险 II. 使用静态预测技术时，每次的预测结果是一样的 III. 动态预测技术通常比静态预测技术的预测成功率高 IV. 若预测错误，已被错误放入流水线执行的指令必须被舍弃",
      "options": {
        "A": "I、II、III",
        "B": "I、II、IV",
        "C": "II、III、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "分支预测技术用于处理控制冒险。静态预测技术假定分支总是不发生或者总是发生，每次预测结果是一样的。动态预测技术根据之前条件转移的比较结果来预测，根据局部性原理，其预测成功率通常比静态预测技术高。预测错误时，已被错误放入流水线执行的指令必须被舍弃。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_16",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "下列关于指令流水线和指令执行效率的叙述中，错误的是（）。",
      "options": {
        "A": "加倍增加流水段个数不能成倍提高指令执行效率",
        "B": "为了提高指令吞吐率，流水段个数应无限制地增加",
        "C": "增加流水段个数，可以提高处理器的时钟频率",
        "D": "随着流水段个数的增加，流水段之间缓存开销的比例增大"
      },
      "answer": [
        "B"
      ],
      "explanation": "适当增加流水段的个数，会使得每个流水段内的操作更简单，流水段的延迟更小，缩短了时钟周期，从而可以提高时钟频率。但是，流水段之间的流水段寄存器也随之增多，增加了流水段之间的额外缓存开销，因此加倍增加流水段个数不能成倍提高指令执行效率，且流水段个数也不能无限制地增加。此外，随着流水段个数的增加，也将导致流水段的控制逻辑更复杂。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_17",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "下列关于超标量流水线的描述中，不正确的是（）。",
      "options": {
        "A": "在一个时钟周期内一条流水线可执行一条以上的指令",
        "B": "一条指令分为多段指令由不同电路单元完成",
        "C": "超标量通过内置多条流水线来同时执行多个处理器，其实质是以空间换取时间",
        "D": "超标量流水线仅仅是指运算操作并行"
      },
      "answer": [
        "D"
      ],
      "explanation": "超标量流水线不仅指运算操作并行，还包括取指、译码、访存、写回等其他操作，超标量技术使 CPU 在同一时间内执行多条指令，从而发挥更大的效率，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_18",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "关于流水线技术的说法中，错误的是（）。",
      "options": {
        "A": "超标量技术需要配置多个功能部件和指令译码电路等",
        "B": "与超标量技术和超流水线技术相比，超长指令字技术对优化编译器要求更高，而无其他硬件要求",
        "C": "在按序流动的流水线中，只可能出现 RAW 相关",
        "D": "超流水线技术相当于将流水线再分段，从而提高每个周期内功能部件的使用次数"
      },
      "answer": [
        "B"
      ],
      "explanation": "要实现超标量技术，要求 CPU 中配置多个功能部件和指令译码电路，以及多个寄存器和总线，以便实现同时执行多个操作，选项 A 正确。超长指令字技术不仅对优化编译器要求更高，还需要更多的硬件资源，如寄存器、功能部件、指令译码电路等，选项 B 错误。流水线按序流动，肯定不会出现读后写（WAR）相关和写后写（WAW）相关；只可能出现没等到上一条指令写入而当前指令就读寄存器的错误，选项 C 正确。由超流水线技术的定义可知选项 D 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_19",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2009 统考真题】某计算机的指令流水线由 4 个功能段组成，指令流经各功能段的时间（忽略各功能段之间的缓存时间）分别为 90ns、80ns、70ns 和 60ns，则该计算机的 CPU 周期至少是（）。",
      "options": {
        "A": "90ns",
        "B": "80ns",
        "C": "70ns",
        "D": "60ns"
      },
      "answer": [
        "A"
      ],
      "explanation": "时钟周期应以各功能段的最长执行时间为准，否则用时长的流水段将不能正确完成。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_20",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2010 统考真题】下列不会引起指令流水线阻塞的是（）。",
      "options": {
        "A": "数据旁路",
        "B": "数据相关",
        "C": "条件转移",
        "D": "资源冲突"
      },
      "answer": [
        "A"
      ],
      "explanation": "采用流水线方式，相邻或相近的两条指令可能因为存在某种关联，后一条指令不能按照原指定的时钟周期运行，从而使流水线断流。有三种相关可能引起指令流水线阻塞：① 结构相关，也称资源相关；② 数据相关；③ 控制相关，主要由转移指令引起。\n\n数据旁路技术的主要思想是，不必等某条指令的执行结果送回到寄存器，再从寄存器中取出该结果，而是直接将执行结果送到其他指令所需的地方，这样可以使流水线不发生停顿。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_21",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2011 统考真题】下列指令系统的特点中，有利于实现指令流水线的是（）。 I. 指令格式规整且长度一致 II. 指令和数据按边界对齐存放 III. 只有 LOAD/STORE 指令才能对操作数进行存储访问",
      "options": {
        "A": "仅 I、II",
        "B": "仅 II、III",
        "C": "仅 I、III",
        "D": "I、II、III"
      },
      "answer": [
        "D"
      ],
      "explanation": "指令长度一致、按边界对齐存放、仅 Load/Store 指令访存，这些都是 RISC 的特征，它们使取指令、取操作数的操作简化且时间长度固定，能够有效地简化流水线的复杂度。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_22",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2013 统考真题】某 CPU 主频为 1.03GHz，采用 4 级指令流水线，每个流水段的执行需要 1 个时钟周期。假定 CPU 执行了 100 条指令，在其执行过程中，没有发生任何流水线阻塞，此时流水线的吞吐率为（）。",
      "options": {
        "A": "$0.25 \\times 10^{9}$ 条指令/秒",
        "B": "$0.97 \\times 10^{9}$ 条指令/秒",
        "C": "$1.0 \\times 10^{9}$ 条指令/秒",
        "D": "$1.03 \\times 10^{9}$ 条指令/秒"
      },
      "answer": [
        "C"
      ],
      "explanation": "采用4级流水执行100条指令，在执行过程中共使用 $4 + (100 - 1) = 103$ 个时钟周期，如下图所示。CPU的主频是 $1.03\\mathrm{GHz}$ ，即每秒有1.03G个时钟周期。流水线的吞吐率为 $1.03\\mathrm{G} \\times 100 / 103 = 1.0 \\times 10^{9}$ 条指令/秒。\n\n![](images/05679ff09463f67991a46f44a0c72fffbb790d43df74011ac340bc488e0d9ef3.jpg)\n\n<details>\n<summary>other</summary>\n\n| 时钟 | 1   | 2   | 3   | ... | 99  | 100 |\n|------|-----|-----|-----|-----|-----|-----|\n| 时钟4 |     |     | 1   | 2   | 3   | ... |\n| 时钟3 |     | 1   | 2   | 3   | ... | 99  |\n| 时钟2 |     |     | 3   | ... | ... | 99  |\n| 时钟1 | 1   | 2   | 3   | ... | 99  | 100 |\n</details>",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_23",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2014 统考真题】采用指令 Cache 与数据 Cache 分离的主要目的是（）。",
      "options": {
        "A": "降低 Cache 的缺失损失",
        "B": "提高 Cache 的命中率",
        "C": "降低 CPU 平均访存时间",
        "D": "减少指令流水线资源冲突"
      },
      "answer": [
        "D"
      ],
      "explanation": "把指令 Cache 与数据 Cache 分离后，取指和取数分别到不同的 Cache 中寻找，则指令流水线中取指部分和取数部分就可以很好地避免冲突，即减少了指令流水线的冲突。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_24",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2016 统考真题】在无转发机制的五段基本流水线（取指、译码/读寄存器、运算、访存、写回寄存器）中，下列指令序列存在数据冒险的指令对是（）。 I1: add R1, R2, R3; (R2) + (R3) → R1 I2: add R5, R2, R4; (R2) + (R4) → R5 I3: add R4, R5, R3; (R5) + (R3) → R4 I4: add R5, R2, R6; (R2) + (R6) → R5",
      "options": {
        "A": "I1 和 I2",
        "B": "I2 和 I3",
        "C": "I2 和 I4",
        "D": "I3 和 I4"
      },
      "answer": [
        "B"
      ],
      "explanation": "数据冒险即数据相关，指在一个程序中存在必须等前一条指令执行完才能执行后一条指令的情况，此时这两条指令即为数据相关。当多条指令重叠处理时就会发生冲突。首先这两条指令发生写后读相关，且两条指令在流水线中的执行情况（发生数据冒险）如下表所示。\n\n<table><tr><td rowspan=\"2\">指令</td><td colspan=\"7\">时钟</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><td>I2</td><td>取指</td><td>译码/读寄存器</td><td>运算</td><td>访存</td><td>写回</td><td></td><td></td></tr><tr><td>I3</td><td></td><td>取指</td><td>译码/读寄存器</td><td>运算</td><td>访存</td><td>写回</td><td></td></tr></table>\n\n指令 I2 在时钟 5 时将结果写入寄存器 R5，但指令 I3 在时钟 3 时读 R5。本来指令 I2 应先写入 R5，指令 I3 后读 R5，结果变成指令 I3 先读 R5，指令 I2 后写入 R5，因此发生数据冲突。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_25",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2017 统考真题】下列关于超标量流水线特性的叙述中，正确的是（）。 I. 能缩短流水线功能段的处理时间 II. 能在一个时钟周期内同时发射多条指令 III. 能结合动态调度技术提高指令执行并行性",
      "options": {
        "A": "仅 II",
        "B": "仅 I、III",
        "C": "仅 II、III",
        "D": "I、II 和 III"
      },
      "answer": [
        "C"
      ],
      "explanation": "超标量是指在 CPU 中有一条以上的流水线，并且每个时钟周期内可以完成一条以上的指令，其实质是以空间换时间。说法 I 错误，它不影响流水线功能段的处理时间；说法 II、III 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_26",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2017 统考真题】下列关于指令流水线数据通路的叙述中，错误的是（）。",
      "options": {
        "A": "包含生成控制信号的控制部件",
        "B": "包含算术逻辑运算部件（ALU）",
        "C": "包含通用寄存器组和取指部件",
        "D": "由组合逻辑电路和时序逻辑电路组合而成"
      },
      "answer": [
        "A"
      ],
      "explanation": "数据在功能部件之间传送的路径称为数据通路，包括数据通路上流经的部件，如程序计数器、ALU、通用寄存器、状态寄存器、异常和中断处理逻辑等。数据通路由控制部件控制，控制部件根据每条指令功能的不同生成对数据通路的控制信号。因此，不包括控制部件。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_27",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2018 统考真题】若某计算机最复杂指令的执行需要完成 5 个子功能，分别由功能部件 A \\~ E 实现，各功能部件所需时间分别为 80ps、50ps、50ps、70ps 和 50ps，采用流水线方式执行指令，流水段寄存器延时为 20ps，则 CPU 时钟周期至少为（）。",
      "options": {
        "A": "60ps",
        "B": "70ps",
        "C": "80ps",
        "D": "100ps"
      },
      "answer": [
        "D"
      ],
      "explanation": "指令流水线中每个流水段的时间单位为一个时钟周期，题中指令流水线的指令需要用到 A～E 五个部件，所以每个流水段时间应取最大部件时间 80ps，此外还有流水段寄存器延时 20ps，因此 CPU 时钟周期至少是 100ps。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_28",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2019 统考真题】在采用 “取指、译码/取数、执行、访存、写回” 5 段流水线的处理器中，执行如下指令序列，其中 s0、s1、s2、s3 和 t2 表示寄存器编号。 <table><tr><td>I1: add s2, s1, s0</td><td>//R[s2]← R[s1] + R[s0]</td></tr><tr><td>I2: load s3, 0(t2)</td><td>//R[s3]← M[R[t2] + 0]</td></tr><tr><td>I3: add s2, s2, s3</td><td>//R[s2]← R[s2] + R[s3]</td></tr><tr><td>I4: store s2, 0(t2)</td><td>//M[R[t2] + 0]← R[s2]</td></tr></table> 下列指令对中，不存在数据冒险的是（）。",
      "options": {
        "A": "I1 和 I3",
        "B": "I2 和 I3",
        "C": "I2 和 I4",
        "D": "I3 和 I4"
      },
      "answer": [
        "C"
      ],
      "explanation": "画出这四条指令在流水线中执行的过程如下图所示。\n\n<table><tr><td>指令</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr><tr><td>add s2, s1, s0</td><td>取指</td><td>译码/取数</td><td>执行</td><td>访存</td><td>写回</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>load s3, 0(t2)</td><td></td><td>取指</td><td>译码/取数</td><td>执行</td><td>访存</td><td>写回</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>add s2, s2, s3</td><td></td><td></td><td>取指</td><td></td><td></td><td></td><td>译码/取数</td><td>执行</td><td>访存</td><td>写回</td><td></td><td></td><td></td><td></td></tr><tr><td>store s2, 0(t2)</td><td></td><td></td><td></td><td></td><td></td><td></td><td>取指</td><td></td><td></td><td></td><td>译码/取数</td><td>执行</td><td>访存</td><td>写回</td></tr></table>\n\n数据冒险即数据相关，指在程序中存在必须等前一条指令执行完才能执行后一条指令的情况，此时这两条指令即为数据相关。其中 I1 和 I3、I2 和 I3、I3 和 I4 均发生了写后读相关，因此必须等相关的前一条指令执行完才能执行后一条指令。只有 I2 和 I4 不存在数据冒险。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_29",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2020 统考真题】下列给出的处理器类型中，理想情况下，CPI 为 1 的是（）。 I. 单周期 CPU II. 多周期 CPU III. 基本流水线 CPU IV. 超标量流水线 CPU",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III",
        "C": "仅 II、IV",
        "D": "仅 III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "CPI 表示执行指令所需的时钟周期数。对于一个程序或一台机器来说，其 CPI 是指执行该程序或机器指令集中的所有指令所需的平均时钟周期数。对于单周期 CPU，令指令周期 = 时钟周期，CPI = 1，说法 I 正确。对于多周期 CPU，CPU 的执行过程分成几个阶段，每个阶段用一个时钟完成，每种指令所用的时钟数可以不同，CPI > 1，说法 II 错误。对于基本流水线 CPU，让每个时钟周期流出一条指令，CPI = 1，说法 III 正确。超标量流水线 CPU 在每个时钟周期内并发执行多条独立的指令，每个时钟周期流出多条指令，CPI < 1，说法 IV 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_30",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2023 统考真题】在采用 “取指、译码/取数、执行、访存、写回” 5 段流水线的 RISC 处理器中，执行如下指令序列（第一列为指令序号），其中 s0、s1、s2、s3 和 t2 表示寄存器编号。 <table><tr><td>I1</td><td>add s2, s1, s0</td><td>// R[s2]←R[s1] + R[s0]</td></tr><tr><td>I2</td><td>load s3, 0(s2)</td><td>// R[s3]←M[R[s2] + 0]</td></tr><tr><td>I3</td><td>beq t2, s3, L1</td><td>// if R[t2] = R[s3] jump to L1</td></tr><tr><td>I4</td><td>addi t2, t2, 20</td><td>// R[t2]←R[t2] + 20</td></tr></table> I5 L1: ..... 若采用转发(旁路)技术处理数据冒险, 采用硬件阻塞方式处理控制冒险, 则在指令 I1 \\~ I4 的执行过程中, 发生流水线阻塞的指令有（）。",
      "options": {
        "A": "仅 I3",
        "B": "仅 I2、I4",
        "C": "仅 I3、I4",
        "D": "仅 I2、I3、I4"
      },
      "answer": [
        "C"
      ],
      "explanation": "I2 和 I1 之间存在数据冒险，I1 在 WB 段才将新值写回寄存器 R[s2]，但 I2 的 EX 段就要读 R[s2] 以计算访存的有效地址，I1 在 EX 段结束时就已生成 R[s2] 的新值，被存放在 EX/MEM 流水段寄存器中，采用转发技术后，可直接从该寄存器中取出数据送到 ALU 的输入端，这样 I2 执行时 ALU 用的是 R[s2] 的新值，解决了 I2 和 I1 之间的数据冒险。I3 和 I2 之间存在数据冒险，属于 load-use 数据冒险，用转发技术无法解决 I3 和 I2 的数据相关问题，原因在于 I2 的功能是从内存中取数，只有在 MEM 段结束时才能从主存中得到 R[s3] 的新值，但 I3 的 EX 段就要用到 R[s3]，因此无法用转发技术解决，I3 仍需阻塞一个时钟周期，等到 I2 的 MEM 段结束后，从 I2 的 MEM/WB 流水段寄存器中取到 R[s3] 的新值。I4 和 I3 之间存在控制冒险，beq 指令在 EX 段设置条件码，在 MEM 段控制是否将转移地址送到 PC，这之后才能开始根据 PC 内容取指令，因此 I4 需要进行硬件阻塞。综上所述，I3 和 I4 的执行需要被阻塞，指令执行过程如下。\n\n<table><tr><td>I1</td><td>IF</td><td>ID</td><td>EX</td><td>MEM</td><td>WB</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>I2</td><td></td><td>IF</td><td>ID</td><td>EX</td><td>MEM</td><td>WB</td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>I3</td><td></td><td></td><td>IF</td><td>ID</td><td>阻塞</td><td>EX</td><td>MEM</td><td>WB</td><td></td><td></td><td></td><td></td></tr><tr><td>I4/I5</td><td></td><td></td><td></td><td>阻塞</td><td>阻塞</td><td>阻塞</td><td>阻塞</td><td>IF</td><td>ID</td><td>EX</td><td>MEM</td><td>WB</td></tr></table>",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_31",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2024 统考真题】对于采用 “取指、译码/取数、执行、访存、写回” 5 段流水线的 RISC 数据通路，下列关于指令流水线数据冒险处理的叙述中，错误的是（）。",
      "options": {
        "A": "相邻两条指令中的操作数相关可能引起数据冒险",
        "B": "在数据相关的指令间插入“气泡”能避免数据冒险",
        "C": "所有数据冒险都可以通过加入转发（旁路）电路解决",
        "D": "所有数据冒险都能通过调整指令顺序和插入 nop 指令解决"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于 load-use 数据冒险，即后一条指令 y 需要使用前一条访存指令 x 从主存中取出的数据，由于指令 y 中所需的数据在指令 x 的访存阶段（MEM）结束时才可使用，即使有转发电路，指令 y 在执行阶段也无法获得所需的数据，只能通过插入 nop 指令或调整指令顺序解决。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_32",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2025 统考真题】下列关于 CPI 和 CPU 时钟周期的叙述中，错误的是（）。",
      "options": {
        "A": "不同类型指令的 CPI 可能不一样",
        "B": "程序的 CPI 与 Cache 缺失率无关",
        "C": "单周期 CPU 的时钟周期以最耗时指令所用时间为准",
        "D": "流水线 CPU 的时钟周期以最长流水段所用时间为准"
      },
      "answer": [
        "B"
      ],
      "explanation": "CPI（每条指令平均时钟周期数）受多种因素影响。发生 Cache 缺失时，CPU 可能需要等待从主存读取数据，这会插入多个空闲周期，从而显著提高程序的平均 CPI。因此 CPI 与 Cache 缺失率密切相关。选项 A、C 和 D 均正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-6-6_33",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.6.6",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2025 统考真题】下列关于 CPU 中的数据通路和控制器的叙述中，错误的是（）。",
      "options": {
        "A": "通用寄存器组中应该包含程序计数器",
        "B": "控制器中一定包含指令操作码的译码电路",
        "C": "单周期 CPU 中的控制器比多周期 CPU 中的更简单",
        "D": "流水线 CPU 需解决数据相关和控制相关等冒险问题"
      },
      "answer": [
        "A"
      ],
      "explanation": "程序计数器（PC）是专用寄存器，用于存放下一条指令的地址，不属于通用寄存器组，后者由程序员或编译器用于临时数据存储，选项 A 错误。选项 C 具有一定的迷惑性：单周期 CPU 在一个时钟周期内完成整条指令，控制器只需根据操作码一次性生成全部控制信号，逻辑相对简单；而多周期 CPU 需分多个周期执行指令，控制器要在不同阶段动态产生控制信号，设计更复杂——尽管单周期性能较差（受限于最慢指令），但其控制器确实更简单。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-7-5_08",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.7.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列关于双核技术的叙述中，正确的是（）。",
      "options": {
        "A": "双核是指主板上有两个 CPU",
        "B": "双核是利用超线程技术实现的",
        "C": "双核是指在 CPU 上集成两个运算核心",
        "D": "双核 CPU 是时间并行的并行计算"
      },
      "answer": [
        "C"
      ],
      "explanation": "双核是指将两个 CPU 核心集成到一个封装中，核心也称内核，是 CPU 最重要的组成部分，选项 C 正确。主板上有两个 CPU 属于多处理器。超线程技术是模拟实体双核，不能算作真正意义上的双核。时间并行是指流水线技术，空间并行则是指硬件资源的重复，空间并行导致了两类并行机的产生，按 Flynn 分类法分为 SIMD 和 MIMD。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-7-5_09",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.7.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列有关多核 CPU 和单核 CPU 的描述中，错误的是（）。",
      "options": {
        "A": "双核的频率为 2.4GHz，那么其中每个核心的频率也是 2.4GHz",
        "B": "同等性能下，采用双核 CPU 可以降低计算机系统的功耗和体积",
        "C": "多核 CPU 共用一组内存，数据共享",
        "D": "所有程序在多核 CPU 上运行速度都快"
      },
      "answer": [
        "D"
      ],
      "explanation": "多核 CPU 的核心通常都是对称的，因此 2.4GHz 双核 CPU 中两个核的主频也是 2.4GHz。早期 CPU 性能提升主要靠提高主频，导致功耗增大，发热量大，而且当主频提高到一定程度后，CPU 性能的提升不再明显，后来转到增加 CPU 核心的方向，将 2 个核心集成到一个芯片内，提供等同双 CPU 的性能，这显然也降低了 CPU 的体积。选项 C 显然正确。在多核 CPU 上运行一个不支持多线程的程序，显然不能发挥多核 CPU 的优势，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-7-5_10",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.7.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于多核 CPU 的描述中，正确的是（）。",
      "options": {
        "A": "各核心完全对称，拥有各自的 Cache",
        "B": "任何程序都可以同时在多个核心上运行",
        "C": "一颗 CPU 中集成了多个完整的执行内核，可同时进行多个运算",
        "D": "只有使用了多核 CPU 的计算机，才支持多任务操作系统"
      },
      "answer": [
        "C"
      ],
      "explanation": "多核 CPU 的各核心既可以有独自的 Cache，又可以共享同一个 Cache。只有支持多线程的并行处理程序才能同时在多个核心上运行，发挥多核的优势。选项 C 正确。多任务系统也称多道程序系统，可以运行在单核 CPU 上，宏观上并行，微观上串行。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-7-5_11",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.7.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列关于多核处理器的说法中，不正确的是（）。",
      "options": {
        "A": "多核处理器并不能使单线程程序的执行速度加快",
        "B": "多核处理器在 Flynn 分类法中属于 MIMD 系统",
        "C": "多核处理器实际上就是在一个 CPU 上集成了多个控制核心",
        "D": "多核处理器通常比单核处理器的能耗更高"
      },
      "answer": [
        "C"
      ],
      "explanation": "单线程程序只有一个执行流，因此多核处理器并不能使其执行速度加快。多核处理器属于Flynn分类法的MIMD系统。多核处理器是在一个CPU上集成了多个执行内核而非控制核心的处理器，选项C错误。多核处理器可在一个时钟周期内处理多个并行任务，因此能耗通常更高。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_5-7-5_12",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "中央处理器",
      "section": "5.7.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2022 统考真题】下列关于并行处理技术的叙述中，不正确的是（）。",
      "options": {
        "A": "多核处理器属于 MIMD 结构",
        "B": "向量处理器属于 SIMD 结构",
        "C": "硬件多线程技术只可用于多核处理器",
        "D": "SMP 中所有处理器共享单一物理地址空间"
      },
      "answer": [
        "C"
      ],
      "explanation": "MIMD 结构分为多计算机系统和多处理器系统。向量处理器是 SIMD 的变体，属于 SIMD 结构。硬件多线程技术在一个核中处理多个线程，可用于单核处理器，选项 C 错误。共享内存多处理器（SMP）具有共享的单一物理地址空间，所有核都可通过存取指令来访问同一片主存地址空间。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch05-第5章-中央处理器.md"
    },
    {
      "id": "计算机组成原理_6-1-5_05",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "间址寻址第一次访问内存所得到的信息经系统总线的（）传送到 CPU。",
      "options": {
        "A": "数据总线",
        "B": "地址总线",
        "C": "控制总线",
        "D": "总线控制器"
      },
      "answer": [
        "A"
      ],
      "explanation": "间址寻址首次访问内存所得到的信息是操作数的有效地址，该地址作为数据通过数据总线传送至 CPU，地址总线是用于 CPU 选择主存单元地址和 I/O 端口地址的单向总线，不能回传。\n\n地址总线由单向的多根信号线组成，可用于 CPU 向主存、外设传送地址信息；数据总线由双向的多根信号线组成，CPU 既可以沿着这些线从主存或外设读入数据，又可以发送数据；控制总线上传输控制信息，包括控制命令和反馈信号等。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_07",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "系统总线中控制线的主要功能是（）。",
      "options": {
        "A": "提供时序信号",
        "B": "提供主存和 I/O 模块的回答信号",
        "C": "提供定时信号、操作命令和各种请求/回答信号等",
        "D": "提供数据信息"
      },
      "answer": [
        "C"
      ],
      "explanation": "系统总线中控制线的主要功能是提供定时信号、操作命令和各种请求/回答信号等。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_08",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "不同信号在同一条信号线上分时传输的方式称为（）。",
      "options": {
        "A": "总线复用方式",
        "B": "并串行传输方式",
        "C": "并行传输方式",
        "D": "串行传输方式"
      },
      "answer": [
        "A"
      ],
      "explanation": "串行传输是指数据的传输在一条线路上按位进行，并行传输是指每个数据位有一条单独的传输线，所有数据位同时传输。不同信号在同一条信号线上分时传输的方式，称为总线复用。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_09",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "主存通过（）来识别信息是地址还是数据。",
      "options": {
        "A": "总线的类型",
        "B": "存储器数据寄存器（MDR）",
        "C": "存储器地址寄存器（MAR）",
        "D": "控制单元 (CU)"
      },
      "answer": [
        "A"
      ],
      "explanation": "地址和数据在不同的总线上传输，根据总线传输信息的内容进行区分，地址在地址总线上传输，数据在数据总线上传输。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_10",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "在 32 位总线系统中，若时钟频率为 500MHz，传送一个 32 位字需要 5 个时钟周期，则该总线的数据传输速率是（）。",
      "options": {
        "A": "200MB/s",
        "B": "400MB/s",
        "C": "600MB/s",
        "D": "800MB/s"
      },
      "answer": [
        "B"
      ],
      "explanation": "总线带宽 = 总线宽度×总线频率，本题中的总线宽度为 32 位，即 4B，总线频率为 500MHz/5 = 100MHz，因此总线的数据传输速率为 $4\\mathrm{B}\\times(500\\mathrm{MHz}/5)=400\\mathrm{MB/s}$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_11",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "传输一幅分辨率为640像素 $\\times 480$ 像素、颜色数量为65536的照片（采用无压缩方式），假设有效数据的传输速率为 $56\\mathrm{kb / s}$ ，则大约需要的时间是（）。",
      "options": {
        "A": "34.82s",
        "B": "43.86s",
        "C": "85.71s",
        "D": "87.77s"
      },
      "answer": [
        "D"
      ],
      "explanation": "$65536 = 2^{16}$ 色，因此颜色深度为 16 位，占据的存储空间为 $640 \\times 480 \\times 16 = 4915200$ 位。有效传输时间 $= 4915200 \\div (56 \\times 10^{3}) \\mathrm{s} \\approx 87.77 \\mathrm{s}$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_12",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "某总线有 104 根信号线，其中数据线（DB）为 32 根，若总线工作频率为 33MHz，则其理论最大传输速率为（）。",
      "options": {
        "A": "33MB/s",
        "B": "64MB/s",
        "C": "132MB/s",
        "D": "164MB/s"
      },
      "answer": [
        "C"
      ],
      "explanation": "数据总线 32 根，因此每次传输 32 位，即 4B 数据，总线工作频率为 33MHz，因此理论最大传输速率为 $33 \\times 4 = 132MB/s$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_13",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "在一个 16 位的总线系统中，若时钟频率为 100MHz，总线周期为 5 个时钟周期传输一个字，则总线带宽是（）。",
      "options": {
        "A": "4MB/s",
        "B": "40MB/s",
        "C": "16MB/s",
        "D": "64MB/s"
      },
      "answer": [
        "B"
      ],
      "explanation": "时钟频率为 100MHz，因此时钟周期 = 1/100MHz = 0.01μs，总线周期 = 5 个时钟周期 = 5×0.01μs = 0.05μs，总线工作频率 = 1/0.05 = 20MHz，因总线是 16 位的，即 2B，因此总线带宽 = 20×(16/8) = 40MB/s。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_14",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下列信号中，可在系统总线中的控制总线上传输的有（）。 I. 存储器和 I/O 设备的地址信息 II. 存储器和 I/O 设备的时序信号、控制信号 III. 存储器和 I/O 设备的响应信号 IV. 存储器中存放的数据",
      "options": {
        "A": "I 和 IV",
        "B": "II 和 III",
        "C": "I、II 和 III",
        "D": "II、III 和 IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "控制总线主要用来传输计算机内各种控制信号，控制信号包括存储器和 I/O 设备的时序信号和响应信号，说法 II、III 正确。存储器和 I/O 设备的地址信息通过地址总线传输，说法 I 错误。存储器中存放的数据通过数据总线传输，说法 IV 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_15",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "总线中，有些信息是单向传输的，有些信息是双向传输的，下列说法中正确的是（）。",
      "options": {
        "A": "数据信息是单向传输的，由内存或外设传送至 CPU",
        "B": "地址信息是单向传输的，由 CPU 发送至内存或外设",
        "C": "控制信息是双向传输的，由 CPU 发送至内存或外设，也可反向",
        "D": "状态信息是双向传输的，由 CPU 发送至内存或外设，也可反向"
      },
      "answer": [
        "B"
      ],
      "explanation": "总线中，数据总线是双向传输的，数据信息既可由 CPU 传送至内存或外设，又可由内存、外设传送至 CPU，选项 A 错误。地址总线是单向传输的，地址信息只能由 CPU 发送至内存或外设，选项 B 正确。控制信息和状态信息也是单向传输的，它们的传输方向正好相反，控制信息通过控制总线由 CPU 发送至内存或外设，而状态信息则通过状态总线由内存或外设发送至 CPU。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_16",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2009 统考真题】假设某系统总线在一个总线周期中并行传输 4 字节信息，一个总线周期占用 2 个时钟周期，总线时钟频率为 10MHz，则总线带宽是（）。",
      "options": {
        "A": "10MB/s",
        "B": "20MB/s",
        "C": "40MB/s",
        "D": "80MB/s"
      },
      "answer": [
        "B"
      ],
      "explanation": "总线带宽是指单位时间内总线上传输数据的位数，通常用每秒传送信息的字节数来衡量，单位为 B/s。由题意可知，在 1 个总线周期（=2 个时钟周期）内传输了 4 字节信息，时钟周期 = 1/10MHz = 0.1μs，因此总线带宽为 $4\\mathrm{B}\\div(2\\times0.1\\mu\\mathrm{s})=4\\mathrm{B}\\div(0.2\\times10^{-6}\\mathrm{s})=20\\mathrm{MB}/\\mathrm{s}$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_17",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2010 统考真题】\\*下列选项中的英文缩写均为总线标准的是（）。",
      "options": {
        "A": "PCI、CRT、USB、EISA",
        "B": "ISA、CPI、VESA、EISA",
        "C": "ISA、SCSI、RAM、MIPS",
        "D": "ISA、EISA、PCI、PCI-Express"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项 A 中的 CRT 表示阴极射线管显示器；选项 B 中的 CPI 表示每条指令的时钟周期数；选项 C 中的 RAM 表示半导体随机存储器、MIPS 表示每秒执行多少百万条指令数。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_18",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2011 统考真题】在系统总线的数据线上，不可能传输的是（）。",
      "options": {
        "A": "指令",
        "B": "操作数",
        "C": "握手（应答）信号",
        "D": "中断类型号"
      },
      "answer": [
        "C"
      ],
      "explanation": "取指令时，指令便是在数据线上传输的。操作数显然在数据线上传输。中断类型号用于指出中断向量（中断服务程序的入口地址）的地址，CPU响应某一外部中断后，就会从数据总线上获取该中断源的中断类型号，然后据此计算对应中断向量在中断向量表（存放在内存中）的位置。而握手（应答）信号属于总线定时的控制信号，应在控制总线上传输。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_19",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2012 统考真题】\\*下列关于 USB 总线特性的描述中，错误的是（）。",
      "options": {
        "A": "可实现外设的即插即用和热拔插",
        "B": "可通过级联方式连接多台外设",
        "C": "是一种通信总线，连接不同外设",
        "D": "同时可传输 2 位数据，数据传输速率高"
      },
      "answer": [
        "D"
      ],
      "explanation": "USB 的特点有：① 即插即用；② 热插拔；③ 有很强的连接能力，采用菊花链形式将众多外设连接起来；④ 有很好的可扩充性，一个 USB 控制器可扩充高达 127 个外部 USB 设备；⑤ 高速传输，速率可达 480Mb/s。USB 是串行总线，不能同时传输 2 位数据，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_20",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2013 统考真题】\\*下列选项中，用于设备和设备控制器之间互连的接口标准是（）。",
      "options": {
        "A": "PCI",
        "B": "USB",
        "C": "AGP",
        "D": "PCI-Express"
      },
      "answer": [
        "B"
      ],
      "explanation": "USB 是一种连接外部设备的 I/O 总线标准，属于设备总线，是设备和设备控制器之间的接口。而 PCI、AGP、PCI-E 作为计算机系统的局部总线标准，通常用来连接主存、网卡、视频卡等。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_21",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2014 统考真题】某同步总线采用数据线和地址线复用方式，其中地址/数据线有 32 根，总线时钟频率为 66MHz，每个时钟周期传送两次数据（上升沿和下降沿各传送一次数据），该总线的最大数据传输速率（总线带宽）是（）。",
      "options": {
        "A": "132MB/s",
        "B": "264MB/s",
        "C": "528MB/s",
        "D": "1056MB/s"
      },
      "answer": [
        "C"
      ],
      "explanation": "数据线有 32 根, 也就是一次可以传送 $32 \\, b/8 = 4 \\, B$ 的数据, 66MHz 意味着有 66M 个时钟周期, 而每个时钟周期传送两次数据, 可知总线每秒传送的最大数据量为 $66M \\times 2 \\times 4B = 528MB$ , 所以总线的最大数据传输速率为 528MB/s。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_22",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2019 统考真题】某计算机采用 3 通道存储器总线，配套的内存条型号为 DDR3-1333，即内存条所接插的存储器总线的工作频率为 1333MHz，总线宽度为 64 位，则存储器总线的总带宽大约是（）。",
      "options": {
        "A": "10.66GB/s",
        "B": "32GB/s",
        "C": "64GB/s",
        "D": "96GB/s"
      },
      "answer": [
        "B"
      ],
      "explanation": "由题目可知，计算机采用 3 通道存储器总线，存储器总线的工作频率为 1333MHz，即 1s 内传送 1333M 次数据，总线宽度为 64 位即单条总线工作一次可传输 8 字节，因此存储器总线的总带宽为 $3 \\times 8 \\times 1333MB/s$ ，约为 32GB/s。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_23",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2020 统考真题】QPI 总线是一种点对点全双工同步串行总线，总线上的设备可同时接收和发送信息，每个方向可同时传输 20 位信息（16 位数据 + 4 位校验位），每个 QPI 数据包有 80 位信息，分 2 个时钟周期传送，每个时钟周期传递 2 次。因此，QPI 总线带宽为：每秒传送次数×2B×2。若 QPI 时钟频率为 2.4GHz，则总线带宽为（）。",
      "options": {
        "A": "4.8GB/s",
        "B": "9.6GB/s",
        "C": "19.2GB/s",
        "D": "38.4GB/s"
      },
      "answer": [
        "C"
      ],
      "explanation": "每个时钟周期传送 2 次，所以每秒传送的次数 = 时钟频率×2 = 2.4G×2/s。\n\n总线带宽 = 每秒传送次数×2B×2 = 2.4G×2×2B×2/s = 19.2GB/s。\n\n题中已给出总线带宽公式，降低了难度。公式中的“×2B”是因为每次传输16位数据。\n\n注意，计算总线带宽或数据传输速率时，是否包含校验位、控制位等开销并无统一标准，要以题干为准。尽管 QPI 每周期实际传输 20 位（含 4 位校验），但本题明确按 16 位有效数据计算带宽。无特别说明时，通常默认仅计入有效用户数据，不含额外开销。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_24",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2024 统考真题】某存储器总线的时钟频率为 420MHz，总线宽度为 64 位，每个时钟周期传送 2 次数据；其总线事务支持突发传送方式，最多传送 8 次数据，第 1 个时钟周期传送地址和读/写命令，从第 4 个至第 7 个时钟周期连续传送 8 次数据。该总线的总线带宽（最大数据传输率）为（）。",
      "options": {
        "A": "3.84GB/s",
        "B": "6.72GB/s",
        "C": "30.72GB/s",
        "D": "53.76GB/s"
      },
      "answer": [
        "B"
      ],
      "explanation": "总线带宽（最大数据传输率）是理想情况（所有总线周期都在传送数据）下，不需考虑每个总线事务的具体情况，而计算（平均）数据传输率才需考虑每个总线事务的具体情况。因此，题中“其总线事务支持……连续传送8次数据。”这句话属于干扰条件。根据定义，总线带宽 = 总线宽度 × 总线时钟频率 × 每个时钟周期传送数据的次数 = 64bit×420MHz×2 = 6.72GB/s。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-1-5_25",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.1.5",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2025 统考真题】某处理器总线采用同步、并行传输方式，每个总线时钟周期传送 4 次数据（quadpumped 技术）。若该总线的工作频率为 1333MHz（实际单位是 MT/s，表示每秒传送 1333M 次），总线宽度为 64 位，则总线带宽约为（）。",
      "options": {
        "A": "10.66GB/s",
        "B": "42.66GB/s",
        "C": "85.31GB/s",
        "D": "341.25GB/s"
      },
      "answer": [
        "A"
      ],
      "explanation": "总线带宽 = 每秒传输次数×每次传输的数据量。题中每秒传输 1333M 次，每次传输 64 位（8 字节）。因此，带宽 = 1333M×8B/s = 10664MB/s，约为 10.66GB/s。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_01",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列有关同步总线事务的描述中，错误的是（）。",
      "options": {
        "A": "一个总线事务需多个总线时钟周期完成",
        "B": "总线事务开始时，先将地址和读/写命令发送到总线",
        "C": "“存储器读”总线事务中，地址与数据通常分时传输",
        "D": "一次总线事务只能完成一次数据交换"
      },
      "answer": [
        "D"
      ],
      "explanation": "同步总线事务通常包括地址/命令阶段和数据阶段，需要多个时钟周期完成；事务开始时，主设备先将地址和读/写命令发送到总线；地址与数据一般分时传输，不会同时出现在总线上。现代同步总线支持突发传输，允许一次总线事务连续传输多个数据单元，因此选项D错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_02",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "在不同速度的设备之间传送数据，（）。",
      "options": {
        "A": "必须采用同步控制方式",
        "B": "必须采用异步控制方式",
        "C": "可以选用同步控制方式，也可选用异步控制方式",
        "D": "必须采用应答方式"
      },
      "answer": [
        "C"
      ],
      "explanation": "在不同速度的设备之间传送数据时，既可采用同步方式，又可采用异步方式。异步方式主要用于在不同的设备间进行通信，两种速度不同的设备使用同一时钟进行控制时，采用同步控制方式同样可以进行数据的传送，但不能发挥快速设备的高速性能。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_03",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "同步控制方式是（）。",
      "options": {
        "A": "只适用于 CPU 控制的方式",
        "B": "只适用于外部设备控制的方式",
        "C": "由统一的时序信号控制的方式",
        "D": "所有指令执行时间都相同的方式"
      },
      "answer": [
        "C"
      ],
      "explanation": "同步控制是指由统一时序控制的通信方式，同步通信采用公共时钟，有统一的时钟周期。同步控制既可用于 CPU 控制，又可用于高速的外部设备控制。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_04",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "同步通信之所以比异步通信具有较高的传输速率，是因为（）。",
      "options": {
        "A": "同步通信不需要应答信号且总线长度较短",
        "B": "同步通信用一个公共的时钟信号进行同步",
        "C": "同步通信中，各部件的存取时间较接近",
        "D": "以上各项因素的综合结果"
      },
      "answer": [
        "D"
      ],
      "explanation": "同步通信采用统一的时钟，每个部件发送或接收信息都在固定的总线传送周期中，一个总线传送周期结束，开始下一个总线传送周期。它适用于总线长度较短且各部件的存取时间较接近的情况，因此具有较高的传输速率。选项 A、B、C 都是正确原因。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_05",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列选项中，属于同步传输特点的是（）。",
      "options": {
        "A": "需要应答信号",
        "B": "各部件的存取时间比较接近",
        "C": "总线长度较长",
        "D": "总线周期长度可变"
      },
      "answer": [
        "B"
      ],
      "explanation": "各部件的存取时间比较接近时，最适合采用同步传输，以发挥其优势。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_07",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "总线的异步通信方式是（）。",
      "options": {
        "A": "既不采用时钟信号，又不采用“握手”信号",
        "B": "只采用时钟信号，不采用“握手”信号",
        "C": "不采用时钟信号，只采用“握手”信号",
        "D": "既采用时钟信号，又采用“握手”信号"
      },
      "answer": [
        "C"
      ],
      "explanation": "异步通信方式也称应答方式，没有公用的时钟信号，也没有固定的时间间隔，完全依靠传送双方相互制约的“握手”信号来实现定时控制。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_08",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "在各种异步通信方式中，（）的速度最快。",
      "options": {
        "A": "全互锁",
        "B": "半互锁",
        "C": "不互锁",
        "D": "速度均相等"
      },
      "answer": [
        "C"
      ],
      "explanation": "在全互锁、半互锁和不互锁三种 “握手” 方式中，只有不互锁方式的请求信号和回答信号没有相互的制约关系，主设备发出请求信号后，不必等待回答信号的到来，便自己撤销了请求信号，所以速度最快。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_09",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "在下列各种情况下，最应采用异步传输方式的是（）。",
      "options": {
        "A": "I/O 接口与打印机交换信息",
        "B": "CPU 与主存交换信息",
        "C": "CPU 和 PCI 总线交换信息",
        "D": "由统一时序信号控制方式下的设备"
      },
      "answer": [
        "A"
      ],
      "explanation": "异步通信方式依靠 “握手” 信号来实现定时控制，能保证两个工作速度相差很大的部件或设\n\n备之间可靠地进行信息交换。I/O 接口与打印机的速度差异较大，应采用异步传输方式。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_10",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "假设某存储器总线采用同步通信方式, 时钟频率为 $50 \\mathrm{MHz}$ , 总线以突发方式传输 8 个字, 以支持块长为 8 个字 (每个字 4B) 的 Cache 行的读/写。若全部访问都为读操作, 访问顺序是 1 个时钟周期接收地址, 3 个时钟周期等待存储器读数, 8 个时钟周期用于传输 8 个字。则该存储器的数据传输速率为 ( )。",
      "options": {
        "A": "114.3MB/s",
        "B": "126MB/s",
        "C": "133.3MB/s",
        "D": "144.3MB/s"
      },
      "answer": [
        "C"
      ],
      "explanation": "一次总线事务传输的数据量为 $8 \\times 4B = 32B$ ，所需时钟周期数为 $1 + 3 + 8 = 12$ ，每个时钟周期为 1/50MHz，总时间为 $12 \\times (1/50MHz) = 0.24\\mu s$ 。数据传输速率为 $32B \\div [(12 \\times (1/50MHz))s] = 133.3MB/s$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_11",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "某I/O设备采用异步串行通信方式向主机传送7位ASCII字符。通信规程要求每个字符后附加1位奇校验位。若要求每秒传送480个字符，则该设备在异步串行线路上每秒传输的比特数为（）。",
      "options": {
        "A": "3360",
        "B": "38400",
        "C": "3840",
        "D": "4800"
      },
      "answer": [
        "D"
      ],
      "explanation": "异步串行通信规范规定，一个完整字符帧包含1位起始位、数据位（本题为7位ASCII码）、1位校验位（可选，本题指定为奇校验）和1位停止位，其中起始位与停止位为必需的控制信号。因此，每个字符帧共占用 $1+7+1+1=10$ 位，每秒传输的比特数为 $10\\times480=4800$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_12",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "下列关于计算机总线的叙述中，正确的是（）。",
      "options": {
        "A": "现代高速总线普遍采用并行同步方式以提高带宽",
        "B": "突发传输过程中，CPU 需在每个时钟周期通过地址线发送待访问字的完整地址",
        "C": "计算机系统中的所有总线共享同一时钟信号与控制协议",
        "D": "采用总线事务分离技术可避免总线空闲等待，提升总线利用率"
      },
      "answer": [
        "D"
      ],
      "explanation": "现代高速总线（如 PCIe、USB、SATA）普遍采用串行差分传输，而非并行同步方式。突发传输只需提供首地址，后续地址由设备自动递增，无须 CPU 逐周期发送完整地址。不同总线（如处理器总线、内存总线、PCIe）通常采用不同的时钟信号，且控制协议各不相同。总线事务分离技术解耦请求与数据响应，使总线在等待期间处理其他事务，减少空闲，提升利用率。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_13",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2012 统考真题】某同步总线的时钟频率为 100MHz，宽度为 32 位，地址/数据线复用，每传输一个地址或数据占用一个时钟周期。若该总线支持突发（猝发）传输方式，则一次“主存写”总线事务传输 128 位数据所需要的时间至少是（）。",
      "options": {
        "A": "20ns",
        "B": "40ns",
        "C": "50ns",
        "D": "80ns"
      },
      "answer": [
        "C"
      ],
      "explanation": "因为总线频率为 100MHz，所以时钟周期为 10ns。总线位宽与存储字长都是 32 位，因此每个时钟周期可传送一个 32 位存储字。猝发传输可以连续传送地址连续的数据，因此总传送时间为：传送地址 10ns，传送 128 位数据 40ns，共需 50ns。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_14",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2014 统考真题】一次总线事务中，主设备只需给出一个首地址，从设备就能从首地址开始的若干连续单元读出或写入多个数据。这种总线事务方式称为（）。",
      "options": {
        "A": "并行传输",
        "B": "串行传输",
        "C": "突发传输",
        "D": "同步传输"
      },
      "answer": [
        "C"
      ],
      "explanation": "猝发（突发）传输是在一个总线周期中，可以传输多个存储地址连续的数据，即一次传输一个地址和一批地址连续的数据，并行传输是在传输中有多个数据位同时在设备之间进行的传输，串行传输是指数据的二进制代码在一条物理信道上以位为单位按时间顺序逐位传输的方式，同步传输是指传输过程由统一的时钟控制。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_15",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2015 统考真题】下列有关总线定时的叙述中，错误的是（）。",
      "options": {
        "A": "异步通信方式中，全互锁协议最慢",
        "B": "异步通信方式中，不互锁协议的可靠性最差",
        "C": "同步通信方式中，同步时钟信号可由各设备提供",
        "D": "半同步通信方式中，握手信号的采样由同步时钟控制"
      },
      "answer": [
        "C"
      ],
      "explanation": "同步通信方式采用系统统一的时钟信号，而不是由各设备提供，否则无法实现统一的时钟。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_16",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2016 统考真题】下列关于总线设计的叙述中，错误的是（）。",
      "options": {
        "A": "并行总线传输比串行总线传输速度快",
        "B": "采用信号线复用技术可减少信号线数量",
        "C": "采用突发传输方式可提高总线数据传输速率",
        "D": "采用分离事务通信方式可提高总线利用率"
      },
      "answer": [
        "A"
      ],
      "explanation": "并行总线通常比串行总线传输速率快，但这不是绝对的。在时钟频率较低的情况下，并行总线因为可以同时传输若干比特，速率确实比串行总线快。但是，随着技术的发展，时钟频率越来越高，并行总线之间的相互干扰越来越严重，当时钟频率提高到一定程度时，传输的数据已无法恢复。而串行总线因为线少，线间干扰容易控制，反而可通过不断提高时钟频率来提高传输速率，选项A错误。总线复用是指一种信号线在不同的时间传输不同的信息，它可使用较少的线路传输更多的信息，从而节省空间和成本，选项B正确。突发传输是指在一个总线周期中，可以传输多个存储地址连续的数据，即一次传输一个地址和一批地址连续的数据，选项C正确。分离事务通信是总线复用的一种，相比单一的传输线路可以提高总线的利用率，选项D正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_17",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2017 统考真题】下列关于多总线结构的叙述中，错误的是（）。",
      "options": {
        "A": "靠近 CPU 的总线速度较快",
        "B": "存储器总线可支持突发传送方式",
        "C": "总线之间须通过桥接器相连",
        "D": "PCI-Express×16 采用并行传输方式"
      },
      "answer": [
        "D"
      ],
      "explanation": "多总线结构用速率高的总线连接高速设备，用速率低的总线连接低速设备。一般来说，CPU 是计算机的核心，是计算机中速度最快的设备之一，选项 A 正确。突发传送方式把多个数据单元作为一个独立传输处理，从而最大化设备的吞吐量。现实中一般用支持突发传送方式的总线来提高存储器的读/写效率，选项 B 正确。各总线通过桥接器相连，后者起流量交换作用。PCI-Express 总线都采用串行数据包传输数据。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_18",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2018 统考真题】下列选项中，可提高同步总线数据传输速率的是（）。 I. 增加总线宽度 II. 提高总线工作频率 III. 支持突发传输 IV. 采用地址/数据线复用",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、II、III",
        "C": "仅 III、IV",
        "D": "I、II、III 和 IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "总线数据传输速率 $=$ 总线工作频率 $\\times$ 总线宽度，说法I和II会影响总线数据传输速率。采用突发（猝发）传输方式，可在一个总线周期内传输存储地址连续的多个数据字，因此能提高传输速率。采用地址/数据线复用只是减少了线的数量，节省了成本，并不能提高传输速率。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_19",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2021 统考真题】下列关于总线的叙述中，错误的是（）。",
      "options": {
        "A": "总线是在两个或多个部件之间进行数据交换的传输介质",
        "B": "同步总线由时钟信号定时，时钟频率不一定等于工作频率",
        "C": "异步总线由握手信号定时，一次握手过程完成一位数据交换",
        "D": "突发（Burst）传送总线事务可以在总线上连续传送多个数据"
      },
      "answer": [
        "C"
      ],
      "explanation": "总线是在两个或多个设备之间进行通信的传输介质，选项 A 正确。同步总线是指总线通信的双方采用同一个时钟信号，但是一次总线事务不一定在一个时钟周期内完成，即时钟频率不一定等于工作频率，选项 B 正确。异步总线采用握手的方式进行通信，每次握手的过程完成一次通信，但是一次通信往往会交换多位而非一位数据，选项 C 错误。突发传送总线事务是指发送方在传输完地址后，连续进行若干次数据的发送，选项 D 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_6-2-3_20",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "总线",
      "section": "6.2.3",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2023 统考真题】某存储器总线宽度为 64 位，总线时钟频率为 1GHz，在总线上传输一个数据或地址需要一个时钟周期，不支持突发传送方式。若通过该总线连接 CPU 和主存，主存每次准备一个 64 位数据需要 6ns，主存块大小为 32B，则读取一个主存块所需的时间是（）。",
      "options": {
        "A": "8ns",
        "B": "11ns",
        "C": "26ns",
        "D": "32ns"
      },
      "answer": [
        "D"
      ],
      "explanation": "每次传输需经过传输地址、准备数据和传输数据三个过程，分别需要 1ns（时钟频率为 1GHz，因此时钟周期为 1ns）、6ns 和 1ns，共 8ns。总线宽度为 64 位，所以每次传输的数据为 64 位，主存块大小为 32B，所以读取一个主存块需要传输 4 次，即 $8ns \\times 4 = 32ns$ 。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch06-第6章-总线.md"
    },
    {
      "id": "计算机组成原理_7-2-5_01",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "multiple_choice",
      "question": "在统一编址的方式下，区分存储单元和 I/O 设备是靠（）。",
      "options": {
        "A": "不同的地址码",
        "B": "不同的地址线",
        "C": "不同的控制线",
        "D": "不同的数据线"
      },
      "answer": [
        "D",
        "A"
      ],
      "explanation": "DMA 机制在主存与 DMA 控制器之间建立了一条直接的数据通路。由于数据传输不经过 CPU，因此无须中断现行程序，从而实现 I/O 操作与 CPU 计算的并行执行。\n\nDMA 方式的主要特性包括:\n\n1）打破主存与 CPU 的固定关联，主存既可被 CPU 访问，又可被外设直接访问。  \n2）在块数据传输过程中，主存地址的生成与传送字数的计数均由硬件电路自动完成。  \n3）主存中需设置专用缓冲区，以支持高效的数据交换。  \n4）支持高速数据传输，且 CPU 与外设可并行工作，显著提升系统效率。  \n5）传输开始前需由软件进行预处理，结束后则通过中断机制完成后处理。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_02",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "multiple_choice",
      "question": "下列功能中，属于 I/O 接口的功能的是（）。 I. 数据格式的转换 II. I/O 过程中错误与状态检测 III. I/O 操作的控制与定时 IV. 与主机和外设通信",
      "options": {
        "A": "I 和 IV",
        "B": "I、III 和 IV",
        "C": "I、II 和 IV",
        "D": "I、II、III 和 IV"
      },
      "answer": [
        "D",
        "A"
      ],
      "explanation": "在 DMA 方式中，对数据传送过程进行控制的硬件称为 DMA 控制器（DMA 接口）。当 I/O 设备需要进行数据传送时，通过 DMA 控制器向 CPU 提出 DMA 请求，CPU 响应后即让出系统总线，由 DMA 控制器接管总线并执行数据传送。其主要功能如下：\n\n1）接收外设发出的 DMA 请求，并向 CPU 发出总线请求信号。  \n2）在 CPU 发出总线响应信号后，DMA 控制器接管总线控制权，进入 DMA 操作周期。  \n3）确定数据传送的主存起始地址及长度，并自动更新主存地址计数器和传送长度计数器。  \n4）指定数据在主存与外设间的传送方向，发出读/写等控制信号，完成数据传送。  \n5）在 DMA 操作结束后，向 CPU 报告传送完成。\n\n图 7.8 给出了一个简单的 DMA 控制器。  \n![](images/f215f3d4ec318db77dfc7af1193794d313d39e35fe754cc9bb8616c7b84a43c8.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"主存\"] --> B[\"CPU\"]\n    B --> C[\"控制线\"]\n    C --> D[\"中断请求\"]\n    D --> E[\"中断机构\"]\n    E --> F[\"溢出信号\"]\n    F --> G[\"控制/状态逻辑\"]\n    G --> H[\"DMA请求触发器\"]\n    H --> I[\"数据缓冲寄存器\"]\n    I --> J[\"设备选择\"]\n    J --> K[\"DMAC\"]\n    K --> L[\"地址线\"]\n    L --> M[\"主存地址计数器\"]\n    M --> N[\"传送长度计数器\"]\n    N --> O[\"+1\"]\n    O --> P[\"数据线\"]\n    P --> Q[\"控制线\"]\n    Q --> R[\"主存\"]\n    R --> S[\"HLDA\"]\n    S --> T[\"HRQ\"]\n    T --> U[\"控制线\"]\n    U --> V[\"系统总线\"]\n```\n</details>\n\n图 7.8 一个简单的 DMA 控制器\n\n- 主存地址计数器：存放待传送数据的主存地址。传送前，保存整批数据的起始地址；每传送一个字，其内容自动加1，直至该批数据传送完毕。  \n- 传送长度计数器：记录待传送数据的总长度。传送前，存入整批数据的总字数；每传送一个字，计数值减1，当计数器为0时，表示传送结束。  \n- 数据缓冲寄存器：暂存每次传送的数据。通常，DMA控制器与主存之间以字为单位传送，而与外设之间可能以字节或字为单位。  \n- DMA 请求触发器：当 I/O 设备准备好数据时，发出 DMA 请求信号，使其置位。  \n- 控制/状态逻辑：用于设定传送方向、更新传送参数，并协调 DMA 请求与 CPU 响应信号。  \n- 中断机构：当一批数据传送完毕后，触发中断并向 CPU 发出中断请求。\n\n在 DMA 传送过程中，DMA 控制器接管系统总线；传送结束后，将总线控制权交还给 CPU，由 CPU 继续执行后续操作。因此，DMA 控制器必须具备控制系统总线的能力。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_03",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "multiple_choice",
      "question": "下列关于 I/O 端口和接口的说法中，正确的是（）。",
      "options": {
        "A": "在统一编址方式下，对主存单元和 I/O 端口的存储保存措施是独立的",
        "B": "在统一编址方式下，主存单元和 I/O 端口是靠不同的地址线来区分的",
        "C": "在独立编址方式下，主存单元和 I/O 端口是靠不同的地址线来区分的",
        "D": "在独立编址方式下，CPU 需要设置专门的输入/输出指令访问 I/O 端口"
      },
      "answer": [
        "D",
        "A"
      ],
      "explanation": "主存与 I/O 设备之间交换信息时不经过 CPU。然而，当 I/O 设备和 CPU 同时访问主存时，可能发生冲突。为高效利用主存，DMA 与 CPU 通常采用以下三种方式共享主存。\n\n# (1) 停止 CPU 访存\n\n当 I/O 设备发出 DMA 请求时，DMA 控制器向 CPU 发送停止信号，使 CPU 放弃总线控制权并暂停访存，直至 DMA 完成整块数据的传送（见图 7.9）。数据传送结束后，DMA 控制器通知 CPU 恢复主存访问，并交还总线控制权。\n\n![](images/7eb7b1c912f9337854068c151f97c3fb6bc0a20ed7bf8ff7b7217eb65e22a22e.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph LR\n    A[\"主存工作时间\"] --> B[\"DMA不工作\"]\n    B --> C[\"DMA工作\"]\n    C --> D[\"DMA不工作\"]\n    D --> E[\"CPU不执行程序\"]\n    E --> F[\"CPU控制并使用主存\"]\n    style A fill:#f9f,stroke:#333\n    style B fill:#ccf,stroke:#333\n    style C fill:#cfc,stroke:#333\n    style D fill:#fcc,stroke:#333\n    style E fill:#ffc,stroke:#333\n    style F fill:#cff,stroke:#333\n```\n</details>\n\n图 7.9 停止 CPU 访存\n\n优点：控制逻辑简单，适用于数据传输速率很高的 I/O 设备进行成组数据传送。\n\n缺点：DMA 访存期间，CPU 基本处于空闲状态，资源利用率较低。\n\n# (2) 周期挪用\n\n考点追踪 周期挪用的特点及挪用次数分析（2012、2020、2022）\n\n对于高速 I/O 设备，若不及时访存可能导致数据丢失，因此其访存请求具有较高优先级。周期挪用允许 I/O 设备挪用一个主存存储周期，传送完一个数据字后立即释放总线（见图 7.10），属于单字传送方式。当 I/O 设备发起 DMA 请求时，可能出现以下三种情况：① CPU 当前不在访存，I/O 请求无冲突，可直接使用总线；② CPU 正在访存，则需等待当前存储周期结束，再释放总线控制权；③ I/O 与 CPU 同时请求访存，发生冲突，此时 CPU 暂时放弃总线控制权。\n\n![](images/0bcf3bb924c8acfd0d5b5660f454a811b60c6693024e8b4c72aadb2b23e8a404.jpg)\n\n<details>\n<summary>text_image</summary>\n\nCPU控制\n并使用主存\nDMA控制\n并使用主存\n主存工作时间\nt\n</details>\n\n图 7.10 周期挪用\n\n优点：既满足了 I/O 数据传送需求，又较好地发挥了 CPU 与主存的效率。\n\n缺点：每次挪用均需申请并释放总线控制权，带来一定开销。\n\n# (3) DMA 与 CPU 交替访存\n\n将 CPU 工作周期划分为两个子周期：一个供 CPU 访存，另一个供 DMA 访存。这样，在每个 CPU 周期内，两者可以轮流访问主存（见图 7.11）。该方式适用于 CPU 工作周期长于主存存储周期的场景。例如，若 CPU 工作周期为 $1.2 \\mu s$ ，主存存储周期小于 $0.6 \\mu s$ ，则可将其分为 $C_{1}$ 和 $C_{2}$ 两个子周期，其中 $C_{1}$ 专供 DMA 访存， $C_{2}$ 专供 CPU 访存。总线控制权通过 $C_{1}$ 和 $C_{2}$ 分时固定分配，无须动态申请或释放。\n\n优点：无须总线控制权的申请与释放过程，数据传送速率高。\n\n缺点：硬件控制逻辑较为复杂。\n\n![](images/d73089c12a48a8818ef6843e06287c36ef572c59505274837e443a5293f3394c.jpg)\n\n<details>\n<summary>text_image</summary>\n\nCPU控制\n并使用主存\nDMA控制\n并使用主存\n主存工作时间\nt\n</details>\n\n图 7.11 DMA 与 CPU 交替访存\n\n考点追踪 DMA 方式的效率分析及相关计算（2011、2018）\n\n【例 7.4】假定计算机的主频为 500MHz，CPI 为 4，某外设的数据率为 40MB/s，I/O 接口中的数据端口为 32 位，采用 DMA 方式，每次 DMA 传送块大小为 1000B，且 DMA 预处理和后处理的总时钟周期数为 500，则 CPU 用于该外设 I/O 的时间占 CPU 总时间的百分比是多少？\n\n解:\n\nDMA 每秒次数为 $40MB/s \\div 1000B = 40000$ ，在 DMA 方式中，只有预处理和后处理需要 CPU 处理，数据传送全程由 DMA 控制。CPU 用于外设 I/O 的总时间为 $40000 \\times 500 = 2 \\times 10^{7}$ 个时钟周期，占 CPU 总时间的百分比为 $2 \\times 10^{7} \\div 500M = 4\\%$ .",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_04",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "multiple_choice",
      "question": "下列属于 I/O 接口中寄存器的有（）。 I. 指令寄存器 II. 控制寄存器 III. 状态寄存器 V. 数据缓冲寄存器 IV. 存储器地址寄存器",
      "options": {
        "A": "I、II、III 和 V",
        "B": "II、III 和 IV",
        "C": "II、III 和 V",
        "D": "II、III、IV 和 V"
      },
      "answer": [
        "D",
        "A"
      ],
      "explanation": "考点追踪 DMA 方式的传送过程（2019）\n\n图 7.12 所示为 DMA 的数据传送流程，分为预处理、数据传送和后处理三个阶段。\n\n![](images/83ee7372964ba08cce4f29791360e8d080aaafcf667cb9ba2ca268cf39f0db9d.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"预处理: 主存起始地址→AR I/O设备地址→DAR 传送数据个数→WC 启动I/O设备\"] --> B[\"数据传送: 继续执行主程序 同时完成一批数据的传送\"]\n    B --> C[\"后处理: 中断服务程序 做DMA结束处理\"]\n    C --> D[\"继续执行主程序\"]\n    E[\"数据传送阶段的细化\"] --> F{允许传送?}\n    F -->|Y| G[\"主存起始地址送总线 数据送I/O设备（或主存） 修改主存地址 修改字计数器\"]\n    G --> H{数据块传送结束?}\n    H -->|N| C\n    H -->|Y| I[\"向CPU申请程序中断\"]\n    F -->|N| J[\"DMA请求\"]\n    J --> K[\"数据传送阶段的细化\"]\n```\n</details>\n\n图 7.12 DMA 的数据传送流程\n\n# (1) 预处理\n\n由 CPU 完成必要的初始化工作，包括设置 DMA 控制器中的主存起始地址、传送方向、传送数据个数，并启动 I/O 设备。随后，CPU 继续执行原程序。当 I/O 设备准备好待发送（输入）或接收（输出）的数据时，会向 DMA 控制器发出 DMA 请求；DMA 控制器随即向 CPU 发出总线请求，申请总线控制权。\n\n# (2) 数据传送\n\nDMA 以数据块为单位进行传送。一旦获得总线控制权，DMA 控制器便通过硬件循环自动完成数据的输入或输出操作，整个过程无须 CPU 干预。\n\n# (3) 后处理\n\n考点追踪 DMA传送结束时的处理（2025）\n\n数据块传送完成后，DMA 控制器向 CPU 发出中断请求。CPU 响应后执行中断服务程序，进行后处理工作，如校验数据完整性，若出错则转入诊断程序等。\n\n在 DMA 方式下, 整个数据块的传送过程均由硬件完成, CPU 仅在预处理阶段进行初始化, 在后处理阶段响应中断, 因此用于 I/O 的开销极小。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_05",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "multiple_choice",
      "question": "I/O 的编址方式采用统一编址方式时，进行输入/输出的操作的指令是（）。",
      "options": {
        "A": "控制指令",
        "B": "访存指令",
        "C": "输入/输出指令",
        "D": "都不对"
      },
      "answer": [
        "D",
        "A"
      ],
      "explanation": "考点追踪 DMA与中断方式的对比（2013、2023）\n\nDMA 方式和中断方式的主要区别如下:\n\n① 中断方式涉及程序切换，需保存和恢复 CPU 现场；而 DMA 方式不中断现行程序，无须保存现场，除预处理和后处理外，完全不占用 CPU 资源。  \n② 中断请求只能在每条指令执行结束后被响应；而 DMA 请求可在当前总线周期结束后立即获得响应，无须等待指令完成。  \n③ 中断方式的数据传送依赖 CPU 执行指令完成；DMA 方式则由专用硬件直接在主存与外设间传送数据，传输速率高，适用于高速外设的成组数据传输。  \n④ 当 CPU 和 DMA 控制器同时访问主存时，DMA 请求的优先级通常更高。  \n⑤ 中断方式具备处理异常事件的能力，而 DMA 方式仅用于大批量数据的高效传输。  \n⑥ 从数据传送来看，中断方式由软件控制传送，DMA 方式由硬件直接完成。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_06",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列关于 I/O 指令的说法中，错误的是（）。",
      "options": {
        "A": "I/O 指令是 CPU 系统指令的一部分",
        "B": "I/O 指令是机器指令的一类",
        "C": "I/O 指令反映 CPU 和 I/O 设备交换信息的特点",
        "D": "I/O 指令的格式和通用指令的格式相同"
      },
      "answer": [
        "D"
      ],
      "explanation": "I/O 指令是指令系统的一部分，是机器指令的一类，但其为了反映与 I/O 设备交互的特点，\n\n格式和其他通用指令相比有所不同。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_07",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "multiple_choice",
      "question": "下列叙述中，正确的是（）。",
      "options": {
        "A": "只有 I/O 指令可以访问 I/O 设备",
        "B": "在统一编址下，不能直接访问 I/O 设备",
        "C": "访问存储器的指令一定不能访问 I/O 设备",
        "D": "只有在具有专门 I/O 指令的计算机中，I/O 设备才可以单独编址"
      },
      "answer": [
        "D",
        "A"
      ],
      "explanation": "DMA 方式是一种完全由硬件控制的数据传输方法，它具有程序中断方式的优点，即在数据准备阶段，CPU 与外设可并行工作。DMA 在外设与内存之间建立了一条直接的数据通路，使得信息传送无须经过 CPU，从而显著降低 CPU 在数据传输过程中的负担。正因如此，该方式被称为直接存储器存取，并避免了保存与恢复 CPU 现场等复杂操作。\n\n考点追踪 DMA 方式的使用场景（2025）\n\nDMA 特别适用于磁盘、显卡、声卡、网卡等高速设备的大批量数据传输，但其硬件实现开销较高。在 DMA 方式中，中断的作用仅限于处理故障和正常传输完成的通知。\n\n考点追踪 DMA方式中的数据传输通路（2024）",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_08",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "在内存地址空间与接口地址空间统一编址的计算机中，不需要的指令是（）。",
      "options": {
        "A": "数据传送类（如 MOV 指令）",
        "B": "算术、逻辑运算类（如 ADD、SUB、AND 和 OR 指令）",
        "C": "输入/输出类（如 IN 和 OUT 指令）",
        "D": "程序控制类（如条件转移指令和子程序调用指令）"
      },
      "answer": [
        "C"
      ],
      "explanation": "统一编址方式把 I/O 端口当作存储器的单元进行地址分配，CPU 不需要设置专门的 I/O 指令（输入/输出类指令），用统一的访存指令就可以访问 I/O 端口。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_09",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "在统一编址的情况下，就 I/O 设备而言，其对应的 I/O 地址不可取的是（）。",
      "options": {
        "A": "要求固定在地址高端",
        "B": "要求固定在地址低端",
        "C": "要求相对固定在地址的某部分",
        "D": "可以随意在地址的任何地方"
      },
      "answer": [
        "D"
      ],
      "explanation": "在统一编址方式下，指令靠地址码区分内存和 I/O 设备，若随意在地址的任何地方编址，则会给编程造成极大的混乱，选项 D 错误。选项 A、B、C 的做法都是可取的。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_10",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "磁盘驱动器向盘片磁道记录数据时采用（）方式写入。",
      "options": {
        "A": "并行",
        "B": "串行",
        "C": "并行-串行",
        "D": "串行-并行"
      },
      "answer": [
        "B"
      ],
      "explanation": "磁盘驱动器向盘片磁道记录数据时采用串行方式写入。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_11",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "采用中断方式进行打印控制时，在打印控制接口和打印机之间交换的信息不包括（）。",
      "options": {
        "A": "打印字符点阵信息",
        "B": "打印控制信息",
        "C": "打印机状态信息",
        "D": "中断请求信息"
      },
      "answer": [
        "D"
      ],
      "explanation": "打印机的中断控制过程通常是：CPU 先将需要打印的字符送到打印控制接口（也称打印适配器）中，打印控制接口再将字符转换为点阵信息，然后通过电缆传送到打印机，以控制打印针头在何处进行打印。同时，打印控制接口需要将“初始化”“选通”“自动走纸”等打印控制信息通过电缆传送到打印机，并通过电缆把打印机的“联机”“忙”“缺纸”等状态信号取到打印控制接口，以供 CPU 读取。中断请求信号是打印控制接口通过中断控制器发送给 CPU 的，因此不在打印控制接口和打印机之间进行交换，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_12",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "主机和外设之间的正确连接通路是（）。",
      "options": {
        "A": "CPU 和主存—I/O 总线—通信总线（电缆）—I/O 接口—外设",
        "B": "CPU 和主存—I/O 总线—I/O 接口—通信总线（电缆）—外设",
        "C": "CPU 和主存—I/O 接口—I/O 总线—通信总线（电缆）—外设",
        "D": "CPU 和主存—I/O 接口—通信总线（电缆）—I/O 总线—外设"
      },
      "answer": [
        "B"
      ],
      "explanation": "CPU 和主存通过 I/O 总线和 I/O 接口连接，I/O 接口通过通信总线和外设相连。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_13",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "下列有关 I/O 接口功能和结构的叙述中，错误的是（）。",
      "options": {
        "A": "I/O 接口中主机侧数据宽度与设备侧数据宽度总是一样的",
        "B": "I/O 接口是像显卡或网卡之类的一种外设控制逻辑",
        "C": "CPU 可以从 I/O 接口读取状态信息，以了解接口和外设的状态",
        "D": "CPU 可以向 I/O 接口传送用来对设备进行控制的命令"
      },
      "answer": [
        "A"
      ],
      "explanation": "I/O 接口中主机侧通过 I/O 总线与主机相连，设备侧通过通信总线（电缆）与外设相连。显然，I/O 总线中的数据线宽度和连接设备的电缆中的数据线宽度不一定相同。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_14",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2012 统考真题】下列选项中，在 I/O 总线的数据线上传输的信息包括（）。 I. I/O 接口中的命令字 II. I/O 接口中的状态字 III. 中断类型号",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III",
        "C": "仅 II、III",
        "D": "I、II、III"
      },
      "answer": [
        "D"
      ],
      "explanation": "I/O 总线分为三类：数据线、控制线和地址线。数据缓冲寄存器和命令/状态寄存器的内容都是通过数据线来传送的；地址线用以传送与 CPU 交换数据的端口地址；而控制线用于给 I/O 端口发送读/写信号，仅用于对端口进行读/写控制。中断类型号用于指出中断向量的地址，CPU 响应某一外部中断后，就从数据总线上获取该中断源的中断类型号，然后据此计算对应中断向量在中断向量表（存放在内存中）的位置。因此说法 I、II 和 III 均正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_15",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2014 统考真题】下列有关 I/O 接口的叙述中，错误的是（）。",
      "options": {
        "A": "状态端口和控制端口可以合用同一个寄存器",
        "B": "I/O 接口中 CPU 可访问的寄存器称为 I/O 端口",
        "C": "采用独立编址方式时，I/O 端口地址和主存地址可能相同",
        "D": "采用统一编址方式时，CPU 不能用访存指令访问 I/O 端口"
      },
      "answer": [
        "D"
      ],
      "explanation": "采用统一编址时，CPU 访存和访问 I/O 端口用的是一样的指令，所以访存指令可访问 I/O 端口，选项 D 错误。其他三个选项均为正确陈述。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_16",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2017 统考真题】I/O 指令实现的数据传送通常发生在（）。",
      "options": {
        "A": "I/O 设备和 I/O 端口之间",
        "C": "I/O 端口和 I/O 端口之间",
        "B": "通用寄存器和 I/O 设备之间",
        "D": "通用寄存器和 I/O 端口之间"
      },
      "answer": [
        "D"
      ],
      "explanation": "I/O 端口是指 I/O 接口中用于缓冲信息的寄存器，由于主机和 I/O 设备的工作方式和工作速度有很大差异，I/O 端口应运而生。在执行一条指令时，CPU 使用地址总线选择所请求的 I/O 端口，使用数据总线在 CPU 寄存器和端口之间传输数据。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-2-5_17",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.2.5",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2021 统考真题】下列选项中，不属于 I/O 接口的是（）。",
      "options": {
        "A": "磁盘驱动器",
        "B": "打印机适配器",
        "C": "网络控制器",
        "D": "可编程中断控制器"
      },
      "answer": [
        "A"
      ],
      "explanation": "I/O 接口即 I/O 控制器，其功能是接收主机发送的 I/O 控制信号，并实现主机和外部设备之间的信息交换。磁盘驱动器是由磁头、磁盘和读/写电路等组成的，也就是我们平常所说的磁盘本身，选项 A 错误。选项 B、C 和 D 均为 I/O 控制器。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_12",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "下列关于中断 I/O 方式的叙述中，错误的是（）。",
      "options": {
        "A": "CPU 对外部中断的响应不可能发生在一条指令的执行过程中",
        "B": "在中断 I/O 方式下，外设接口中的寄存器和 CPU 中的寄存器直接交换数据",
        "C": "中断请求的是 CPU 时间，要求 CPU 执行程序来处理发生的相关事件",
        "D": "只要有中断请求发生，一条指令执行结束后 CPU 就进入中断响应周期"
      },
      "answer": [
        "D"
      ],
      "explanation": "CPU 总是在一条指令结束时检查外中断请求，因此对外中断的响应只可能发生在一条指令结束时。中断 I/O 方式下，CPU 执行中断服务程序时会执行相应的 I/O 指令，实现 CPU 的通用寄存器和外设接口中的寄存器之间的直接数据交换。中断请求就是要求 CPU 执行程序来处理发生的相关事件。选项 D 在下列两种情况下错误：① 关中断时，CPU 检测不到中断请求，因此不会进入中断响应周期；② 当有中断请求的请求源被中断屏蔽字屏蔽时，也不会进入中断响应周期。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_13",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "当 CPU 响应中断时，进入 “中断响应周期”，采用硬件方法保存并更新程序计数器（PC）内容，而不是由软件完成的，主要是为了（）。",
      "options": {
        "A": "能进入中断处理程序，并能正确返回源程序",
        "B": "节省主存空间",
        "C": "提高处理机速度",
        "D": "易于编制中断处理程序"
      },
      "answer": [
        "A"
      ],
      "explanation": "在中断响应周期中，采用硬件方法保存并更新 PC 内容，而不由软件完成，这样可以避免因为软件保存和恢复 PC 内容而造成的时间开销和错误风险，提高中断处理的效率和正确性。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_14",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "在 I/O 接口中设置中断触发器保存外设发出的中断请求，是因为（）。",
      "options": {
        "A": "中断不需要立即处理",
        "B": "中断设备的处理速度比 CPU 快",
        "C": "CPU 无法对发生的中断请求立即进行处理",
        "D": "可能有多个中断同时发生"
      },
      "answer": [
        "C"
      ],
      "explanation": "因为 CPU 无法对发生的中断请求立即进行处理，因此需要在 I/O 接口中设置中断触发器，以保存是哪些外设发出了中断请求，等 CPU 当前的指令周期结束后，响应中断并进行处理。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_15",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "在中断响应周期中，由（）将允许中断触发器置0。",
      "options": {
        "A": "关中断指令",
        "B": "中断隐指令",
        "C": "开中断指令",
        "D": "中断服务程序"
      },
      "answer": [
        "B"
      ],
      "explanation": "允许中断触发器置 0 表示关中断，在中断响应周期由硬件自动完成，即中断隐指令完成。虽然关中断指令也能实现关中断的功能，但在中断响应周期，关中断是由中断隐指令完成的。在恢复现场和屏蔽字的时候，也需要关中断的操作，此时是由关中断指令来完成的。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_16",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "CPU 响应中断时最先完成的步骤是（）。",
      "options": {
        "A": "开中断",
        "B": "保存断点",
        "C": "关中断",
        "D": "转入中断服务程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "只有先关中断，才可以保存断点。若先不保存断点，则可能丢失当前程序的断点。同理，在恢复现场前也要关中断。这个过程和操作系统中的信号量 PV 操作类似，都是将内部过程变为不可打断的原子操作。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_17",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "设置中断屏蔽标志可以改变（）。",
      "options": {
        "A": "多个中断源的中断请求优先级",
        "B": "CPU 对多个中断请求响应的优先次序",
        "C": "多个中断服务程序开始执行的顺序",
        "D": "多个中断服务程序执行完的次序"
      },
      "answer": [
        "D"
      ],
      "explanation": "中断优先级包括响应优先级和处理优先级，中断屏蔽标志改变的是处理优先级。中断响应优先级是由中断查询程序或中断判优电路决定的，它反映的是多个中断同时请求时哪个先被响应，即中断服务程序开始执行的顺序。在多重中断系统中，中断处理优先级决定了本中断是否能打断正在执行的中断服务程序，决定了多个中断服务程序执行完的次序。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_18",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "在 CPU 响应中断时，保存两个关键的硬件状态是（）。",
      "options": {
        "A": "PC 和 IR",
        "B": "PC 和 PSW",
        "C": "AR 和 IR",
        "D": "AR 和 PSW"
      },
      "answer": [
        "B"
      ],
      "explanation": "PC 的内容是被中断程序尚未执行的第一条指令地址，PSW 寄存器保存各种状态信息。CPU 响应中断后，需要保存中断的 CPU 现场，将 PC 和 PSW 压入堆栈，这样等到中断结束后，就可以将压入堆栈的原 PC 和 PSW 的内容恢复到相应的寄存器，原程序从断点开始继续执行。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_19",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "multiple_choice",
      "question": "在各种 I/O 方式中，中断方式的特点是（），DMA 方式的特点是（）。",
      "options": {
        "A": "CPU 与外设串行工作，传送与主程序串行工作",
        "B": "CPU 与外设并行工作，传送与主程序串行工作",
        "C": "CPU 与外设串行工作，传送与主程序并行工作",
        "D": "CPU 与外设并行工作，传送与主程序并行工作"
      },
      "answer": [
        "B",
        "D"
      ],
      "explanation": "在程序查询方式中，CPU 与外设串行工作，传送与主程序串行工作。在中断方式中，CPU 与外设并行工作，当数据准备好时仍需中断主程序以执行数据传送，因此传送与主程序仍是串行的。在 DMA 方式中，CPU 与外设、传送与主程序都是并行的。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_20",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "下列关于程序查询方式及其工作过程的叙述中，正确的是（）。",
      "options": {
        "A": "按启动查询方式的不同，可分为软件查询方式和硬件查询方式",
        "B": "CPU 主要负责启动外设和查询其状态，不参与数据传送",
        "C": "每完成一次数据传送后，会修改主存地址和计数值",
        "D": "CPU 需要一直查询外设的状态，直到外设准备就绪时才可去执行其他程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "按启动查询方式的不同，程序查询方式可分为定时查询方式和独占查询方式。在程序查询方式中，由 CPU 负责数据的传送。每完成一次数据传送后，将主存地址加 1，计数值减 1。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_21",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "在 DMA 传送方式中，由（）发出 DMA 请求，在传送期间总线控制权由（）掌握。",
      "options": {
        "A": "外部设备、CPU",
        "B": "DMA 控制器、DMA 控制器",
        "C": "外部设备、DMA 控制器",
        "D": "DMA 控制器、内存"
      },
      "answer": [
        "C"
      ],
      "explanation": "在 DMA 方式中，由外部设备向 DMA 控制器发出 DMA 请求信号，然后由 DMA 控制器向 CPU 发出总线请求信号。DMA 控制器在传送期间有总线控制权，此时 CPU 不能响应 I/O 中断。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_22",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "下列叙述中，（）是正确的。",
      "options": {
        "A": "程序中断方式和 DMA 方式中实现数据传送都需要中断请求",
        "B": "程序中断方式中有中断请求，DMA 方式中没有中断请求",
        "C": "程序中断方式和 DMA 方式中都有中断请求，但目的不同",
        "D": "DMA 要等指令周期结束时才可以进行周期窃取"
      },
      "answer": [
        "C"
      ],
      "explanation": "程序中断方式在数据传输时，首先要发出中断请求，此时 CPU 中断正在进行的操作，转而进行数据传输，直到数据传送结束，CPU 才返回中断前执行的操作。DMA 方式只是在后处理阶段需要用中断方式请求 CPU 做结束处理，但在整个数据传送过程，并不需要中断请求，选项 A 错误。DMA 方式和程序中断方式都有中断请求，但目的不同，程序中断方式的中断请求是为了进行数据传送，而 DMA 方式的中断请求是在 DMA 传送结束后请求 CPU 做 DMA 结束处理，选项 B 错误、选项 C 正确。CPU 对 DMA 的响应可在指令执行过程中的任何两个存储周期之间，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_23",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "以下关于 DMA 方式进行 I/O 的描述中，正确的是（）。",
      "options": {
        "A": "一个完整的 DMA 过程，部分由 DMA 控制器控制，部分由 CPU 控制",
        "B": "一个完整的 DMA 过程，完全由 CPU 控制",
        "C": "一个完整的 DMA 过程，完全由 DMA 控制器控制，CPU 不介入任何控制",
        "D": "一个完整的 DMA 过程，完全由 CPU 采用周期挪用法控制"
      },
      "answer": [
        "A"
      ],
      "explanation": "一个完整的 DMA 过程主要由 DMA 控制器控制，但也需要 CPU 参与控制，只是 CPU 干预比较少，只需在数据传输开始和结束时干预，从而提高了 CPU 的效率。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_24",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "当某五级流水线 CPU 正在执行某条指令的第二级流水段时，外部设备产生了一个 DMA 请求，则 CPU 对该 DMA 请求响应的时机是（）。",
      "options": {
        "A": "立即响应",
        "B": "在该指令的第二级流水段执行完毕后响应",
        "C": "在该指令的第三级流水段执行完毕后响应",
        "D": "在该指令执行结束后响应"
      },
      "answer": [
        "B"
      ],
      "explanation": "DMA 请求的是总线的使用权，因此 CPU 对 DMA 请求的响应时机是一个总线周期结束时。在流水线 CPU 中，流水段的长度以最复杂的操作所花的时间为准，总线周期（访存时间）通常是耗时最长的，因此通常可认为总线周期、存储周期和流水段长度是等价的。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_25",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "关于外中断（故障除外）和 DMA，下列说法中正确的是（）。",
      "options": {
        "A": "DMA 请求和中断请求同时发生时，响应 DMA 请求",
        "B": "DMA 请求、非屏蔽中断、可屏蔽中断都要在当前指令结束之后才能被响应",
        "C": "非屏蔽中断请求优先级最高，可屏蔽中断请求优先级最低",
        "D": "若不开中断，所有中断请求就不能响应"
      },
      "answer": [
        "A"
      ],
      "explanation": "DMA 连接的是高速设备，其优先级高于中断请求，以防止高速设备数据丢失，选项 A 正确。DMA 请求的响应时间可以发生在每个总线周期结束时，只要 CPU 不占用总线；中断请求的响应时间只能发生在每条指令执行完毕，选项 B 错误。DMA 的优先级要比外中断（非屏蔽中断、可屏蔽中断）高，选项 C 错误。若不开中断，则内中断和非屏蔽中断仍可响应，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_26",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "磁盘和主存进行数据交换时，大致可分为四个过程：① 寻道；② 旋转；③ 连续读/写磁盘块；④ 结束、校验。则下列关于磁盘读/写过程的叙述中，错误的是（）。",
      "options": {
        "A": "在①②④三个阶段都用到了中断处理",
        "B": "在第③阶段，DMA 控制器向 CPU 请求的是总线使用权",
        "C": "在第③阶段，DMA 控制器使用总线的优先级比 CPU 低",
        "D": "在第③阶段，磁盘的读/写和 CPU 执行其他任务是可以并行执行的"
      },
      "answer": [
        "C"
      ],
      "explanation": "寻道结束后会通过中断方式通知 CPU 寻道已结束，可进行下一步操作。通过旋转定位到某个扇区后，也会通过中断方式来通知 CPU 磁盘已准备好，可进行数据读取或写入操作。DMA 传输结束后的校验是由中断服务程序完成的。综上所述，①②④都用到了中断处理，选项 A 正确。DMA 控制器中数据缓冲寄存器的个数是有限的，为避免后续到来的数据覆盖掉原有的数据，必须保证已到的数据能被及时送到主存，因此 DMA 控制器使用总线的优先级比 CPU 高，选项 B 正确，选项 C 错误。DMA 的数据传输过程是完全由 DMA 控制器控制的，可以和 CPU 完全并行，选项 D 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_27",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "中断发生时，程序计数器内容的保存和更新是由（）完成的。",
      "options": {
        "A": "硬件自动",
        "B": "进栈指令和转移指令",
        "C": "访存指令",
        "D": "中断服务程序"
      },
      "answer": [
        "A"
      ],
      "explanation": "中断发生时，程序计数器内容的保存和更新是由硬件自动完成的，即由中断隐指令完成。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_28",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "在 DMA 方式传送数据的过程中，因为没有破坏（）的内容，所以 CPU 可以正常工作（访存除外）。",
      "options": {
        "A": "程序计数器",
        "B": "程序计数器和寄存器",
        "C": "指令寄存器",
        "D": "堆栈寄存器"
      },
      "answer": [
        "B"
      ],
      "explanation": "DMA 传送数据时，挪用周期不会改变 CPU 现场，因此无须占用 CPU 的 PC 和寄存器。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_29",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "在 DMA 方式下，数据从内存传送到外设经过的路径是（）。",
      "options": {
        "A": "内存→数据总线→数据通路→外设",
        "B": "内存→数据总线→DMAC→外设",
        "C": "内存→数据通路→数据总线→外设",
        "D": "内存 $\\rightarrow$ CPU $\\rightarrow$ 外设"
      },
      "answer": [
        "B"
      ],
      "explanation": "DMA 方式的数据传送不经过 CPU，但需要经过 DMA 控制器中的数据缓冲寄存器。输入时，数据由外设（如磁盘）先送往 DMA 的数据缓冲寄存器，再通过数据总线送到主存。反之，输出时，数据由主存通过数据总线送到 DMA 的数据缓冲寄存器，然后送到外设。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_32",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "在磁盘存储器进行读/写操作之前，CPU 需要对磁盘控制器或 DMA 控制器进行初始化。在下列选项中，不包含在初始化信息中的是（）。",
      "options": {
        "A": "传送信息所在的主存起始地址",
        "B": "传送方向（是读磁盘还是写磁盘）",
        "C": "传送信息所在的通用寄存器编号",
        "D": "传送数据的字数或字节数"
      },
      "answer": [
        "C"
      ],
      "explanation": "传送信息所在的通用寄存器编号不包含在初始化信息中，因为数据不是通过 CPU 中的通用寄存器来传输的，而是直接通过 DMA 控制器进行数据传输的。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_34",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2010 统考真题】单重中断系统中，中断服务程序内的执行顺序是（）。 I. 保存现场 II. 开中断 III. 关中断 IV. 保存断点 V. 中断事件处理 VI. 恢复现场 VII. 中断返回",
      "options": {
        "A": "I→V→VI→II→VII",
        "B": "III→I→V→VII",
        "C": "III→IV→V→VI→VII",
        "D": "IV→I→V→VI→VII"
      },
      "answer": [
        "A"
      ],
      "explanation": "在单级（或单重）中断系统中不允许中断嵌套。中断处理过程为：① 关中断；② 保存断点；③ 识别中断源；④ 保存现场；⑤ 中断事件处理；⑥ 恢复现场；⑦ 开中断；⑧ 中断返回。其中①～③由硬件完成，④～⑧由中断服务程序完成。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_37",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "【2012 统考真题】响应外部中断的过程中，中断隐指令完成的操作，除保存断点外，还包括（）。 I. 关中断 II. 保存通用寄存器的内容 III. 形成中断服务程序入口地址并送 PC",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III",
        "C": "仅 II、III",
        "D": "I、II、III"
      },
      "answer": [
        "B"
      ],
      "explanation": "在响应外部中断的过程中，中断隐指令完成的操作包括：① 关中断；② 保存断点；③ 引出中断服务程序（形成中断服务程序入口地址并送 PC），所以只有说法 I、III 正确。说法 II 中保存通用寄存器的内容是在进入中断服务程序后首先进行的操作。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_38",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "【2013 统考真题】下列关于中断 I/O 方式和 DMA 方式比较的叙述中，错误的是（）。",
      "options": {
        "A": "中断 I/O 方式请求的是 CPU 处理时间，DMA 方式请求的是总线使用权",
        "B": "中断响应发生在一条指令执行结束后，DMA 响应发生在一个总线事务完成后",
        "C": "中断 I/O 方式下数据传送通过软件完成，DMA 方式下数据传送由硬件完成",
        "D": "中断 I/O 方式适用于所有外部设备，DMA 方式仅适用于快速外部设备"
      },
      "answer": [
        "D"
      ],
      "explanation": "中断 I/O 方式：在 I/O 设备输入每个数据的过程中，由于无须 CPU 干预，因此可使 CPU 与 I/O 设备并行工作。仅当输完一个数据时，才需要 CPU 花费极短的时间去做一些中断处理。因此中断申请使用的是 CPU 处理时间，发生的时间是在一条指令执行结束之后，数据在软件的控制下完成传送。而 DMA 方式与之不同。DMA 方式：数据传输的基本单位是数据块，即在 CPU 与 I/O 设备之间，每次传送至少一个数据块；DMA 方式每次申请的是总线的使用权，所传送的数据是从设备直接送入内存的，或者相反；仅在传送一个或多个数据块的开始和结束时，才需要 CPU 干预，整块数据的传送是在控制器的控制下完成的。中断 I/O 方式不适合高速外设；多路型 DMA 控制器也适合同时为多个慢速外设服务，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_39",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "【2014 统考真题】若某设备中断请求的响应和处理时间为 100ns，每 400ns 发出一次中断请求，中断响应所允许的最长延迟时间为 50ns，则在该设备持续工作过程中，CPU 用于该设备的 I/O 时间占整个 CPU 时间的百分比至少是（）。",
      "options": {
        "A": "12.5%",
        "B": "25%",
        "C": "37.5%",
        "D": "50%"
      },
      "answer": [
        "B"
      ],
      "explanation": "每 400ns 发出一次中断请求，而响应和处理时间为 100ns，其中允许的延迟为干扰信息，因为在 50ns 内，无论怎么延迟，每 400ns 仍要花费 100ns 处理中断，所以该设备的 I/O 时间占整个 CPU 时间的百分比为 100ns/400ns = 25%。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_40",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "【2015 统考真题】在采用中断 I/O 方式控制打印输出的情况下，CPU 和打印控制接口中的 I/O 端口之间交换的信息不可能是（）。",
      "options": {
        "A": "打印字符",
        "B": "主存地址",
        "C": "设备状态",
        "D": "控制命令"
      },
      "answer": [
        "B"
      ],
      "explanation": "在程序中断 I/O 方式中，CPU 和打印机直接交换，打印字符直接传输到打印机的 I/O 端口，不会涉及主存地址。而 CPU 和打印机通过 I/O 端口中的状态口和控制口来实现交互。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_41",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "【2017 统考真题】下列关于多重中断系统的叙述中，错误的是（）。",
      "options": {
        "A": "在一条指令执行结束时响应中断",
        "B": "中断处理期间 CPU 处于关中断状态",
        "C": "中断请求的产生与当前指令的执行无关",
        "D": "CPU 通过采样中断请求信号检测中断请求"
      },
      "answer": [
        "B"
      ],
      "explanation": "多重中断在保存被中断进程现场时关中断，执行中断处理程序时开中断，选项 B 错误。CPU 一般在一条指令执行结束的阶段采样中断请求信号，查看是否存在中断请求，然后决定是否响应中断，选项 A、D 正确。中断是指来自 CPU 执行指令以外的事件，选项 C 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_42",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "【2018 统考真题】下列关于外部 I/O 中断的叙述中，正确的是（）。",
      "options": {
        "A": "中断控制器按所接收中断请求的先后次序进行中断优先级排队",
        "B": "CPU 响应中断时，通过执行中断隐指令完成通用寄存器的保存",
        "C": "CPU 只有在处于中断允许状态时，才能响应外部设备的中断请求",
        "D": "有中断请求时，CPU 立即暂停当前指令执行，转去执行中断服务程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "中断优先级分为响应优先级和处理优先级，响应优先级由硬件排队器（或中断查询程序）决定，处理优先级由屏蔽字决定，而非请求的先后次序决定。中断隐指令完成的工作有：① 关中断；② 保存断点；③ 引出中断服务程序，通用寄存器的保存由中断服务程序完成。中断允许状态（开中断后），才能响应外部设备的中断请求，外部设备通常不能发出不可屏蔽中断，外部设备的中断请求通常是为了输入/输出，这些事件并不是系统级的紧急事件，可以被屏蔽或延迟处理，若允许外部设备发出不可屏蔽中断，则可能影响系统的稳定性和安全性。有中断请求时，若是关中断的状态，或新中断请求的优先级较低，则不能响应新的中断请求。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_43",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "【2019 统考真题】某设备以中断方式与 CPU 进行数据交换，CPU 主频为 1GHz，设备接口中的数据缓冲寄存器为 32 位，设备的数据传输速率为 50kB/s。若每次中断开销（包括中断响应和中断处理）为 1000 个时钟周期，则 CPU 用于该设备输入/输出的时间占整个 CPU 时间的百分比最多是（）。",
      "options": {
        "A": "1.25%",
        "B": "2.5%",
        "C": "5%",
        "D": "12.5%"
      },
      "answer": [
        "A"
      ],
      "explanation": "设备接口中的数据缓冲寄存器为32位，即一次中断可以传输4B数据，设备数据传输速率为50kB/s，共需要12.5k次中断，每次中断开销为1000个时钟周期，CPU主频为1GHz，则CPU用于该设备输入/输出的时间占整个CPU时间的百分比最多是 $(12.5\\mathrm{k}\\times1000)\\div1\\mathrm{G}=1.25\\%$ .",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_44",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "【2019 统考真题】下列关于 DMA 方式的叙述中，正确的是（）。 I. DMA 传送前由设备驱动程序设置传送参数 II. 数据传送前由 DMA 控制器请求总线使用权 III. 数据传送由 DMA 控制器直接控制总线完成 IV. DMA 传送结束后的处理由中断服务程序完成",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III、IV",
        "C": "仅 II、III、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "每类设备都配置一个设备驱动程序，设备驱动程序向上层用户程序提供一组标准接口，负责实现对设备发出各种具体操作指令，用户程序不能直接和 DMA 打交道。DMA 的数据传送过程分为预处理、数据传送和后处理 3 个阶段。预处理阶段由 CPU 完成必要的准备工作，数据传送前由 DMA 控制器请求总线使用权；数据传送由 DMA 控制器直接控制总线完成；传送结束后，DMA 控制器向 CPU 发送中断请求，CPU 执行中断服务程序做 DMA 结束处理。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_45",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "【2020 统考真题】下列事件中，属于外部中断事件的是（）。 I. 访存时缺页 II. 定时器到时 III. 网络数据包到达",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、III",
        "C": "仅 II、III",
        "D": "I、II 和 III"
      },
      "answer": [
        "C"
      ],
      "explanation": "访存时缺页属于内部异常，说法 I 错误；定时器到时描述的是时钟中断，属于外部中断，说法 II 正确；网络数据包到达描述的是 CPU 执行指令以外的事件，属于外部中断，说法 III 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_46",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 46,
      "type": "single_choice",
      "question": "【2020 统考真题】外部中断包括不可屏蔽中断（NMI）和可屏蔽中断，下列关于外部中断的叙述中，错误的是（）。",
      "options": {
        "A": "CPU 处于关中断状态时，也能响应 NMI 请求",
        "B": "一旦可屏蔽中断请求信号有效，CPU 就立即响应",
        "C": "不可屏蔽中断的优先级比可屏蔽中断的优先级高",
        "D": "可通过中断屏蔽字改变可屏蔽中断的处理优先级"
      },
      "answer": [
        "B"
      ],
      "explanation": "由 CPU 内部产生的异常称为内中断，内中断是不可屏蔽中断。通过中断请求线 INTR 和 NMI，从 CPU 外部发出的中断请求称为外中断，通过 INTR 信号线发出的外中断是可屏蔽中断，而通过 NMI 信号线发出的是不可屏蔽中断。不可屏蔽中断即使在关中断（IF = 0）情况下也被响应，选项 A 正确。不可屏蔽中断的优先级最高，任何时候只要发生不可屏蔽中断，都要中止现行程序的执行，转到不可屏蔽中断处理程序执行，选项 C 正确。CPU 响应中断需要满足 3 个条件：① 中断源有中断请求；② CPU 允许中断及开中断；③ 一条指令执行完毕，且没有更紧迫的任务。选项 B 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_47",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 47,
      "type": "single_choice",
      "question": "【2020 统考真题】若设备采用周期挪用 DMA 方式进行输入和输出，每次 DMA 传送的数据块大小为 512 字节，相应的 I/O 接口中有一个 32 位数据缓冲寄存器。对于数据输入过程，下列叙述中，错误的是（）。",
      "options": {
        "A": "每准备好 32 位数据，DMA 控制器就发出一次总线请求",
        "B": "相对于 CPU, DMA 控制器的总线使用权的优先级更高",
        "C": "在整个数据块的传送过程中，CPU 不可以访问主存储器",
        "D": "数据块传送结束时，会产生 “DMA 传送结束” 中断请求"
      },
      "answer": [
        "C"
      ],
      "explanation": "周期挪用法由 DMA 控制器挪用一个或几个主存周期来访问主存，传送完一个数据字后立即释放总线，是一种单字传送方式，每个字传送完后 CPU 可以访问主存，选项 C 错误。停止 CPU 访存法则是指在整个数据块的传送过程中，使 CPU 脱离总线，停止访问主存。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_48",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 48,
      "type": "single_choice",
      "question": "【2021 统考真题】下列是关于多重中断系统中 CPU 响应中断的叙述，错误的是（）。",
      "options": {
        "A": "仅在用户态（执行用户程序）下，CPU 才能检测和响应中断",
        "B": "CPU 只有在检测到中断请求信号后，才会进入中断响应周期",
        "C": "进入中断响应周期时，CPU 一定处于中断允许（开中断）状态",
        "D": "若 CPU 检测到中断请求信号，则一定存在未被屏蔽的中断源请求信号"
      },
      "answer": [
        "A"
      ],
      "explanation": "中断服务程序在内核态下执行，若只能在用户态下检测和响应中断，则显然无法实现多重中断（中断嵌套），选项 A 错误。在多重中断中，CPU 只有在检测到中断请求信号后（中断处理优先级更低的中断请求信号是检测不到的），才会进入中断响应周期。进入中断响应周期时，说明此时 CPU 一定处于中断允许状态，否则无法响应该中断。若所有中断源都被屏蔽（说明该中断的处理优先级最高），则 CPU 不会检测到任何中断请求信号。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_49",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 49,
      "type": "single_choice",
      "question": "【2022 统考真题】下列关于中断 I/O 方式的叙述中，不正确的是（）。",
      "options": {
        "A": "适用于键盘、针式打印机等字符型设备",
        "B": "外设和主机之间的数据传送通过软件完成",
        "C": "外设准备数据的时间应小于中断处理时间",
        "D": "外设为某进程准备数据时 CPU 可运行其他进程"
      },
      "answer": [
        "C"
      ],
      "explanation": "中断 I/O 方式适用于字符型设备，此类设备的特点是数据传输速率慢，以字符或字为单位进行传输，选项 A 正确。若采用中断 I/O 方式，当外设准备好数据后，向 CPU 发出中断请求，CPU 暂时中止现行程序，转去运行中断服务程序，由中断服务程序完成数据传送，选项 B 正确。若外设准备数据的时间小于中断处理时间，则可能导致数据丢失，以输入设备为例，设备为进程准备的数据会先写入设备控制器的缓冲区（缓冲区大小有限），缓冲区每写满一次，就向 CPU 发出一次中断请求，CPU 响应并处理中断的过程，就是将缓冲区中的数据“取走”的过程，因此若外设准备数据的时间小于中断处理时间，则可能导致外设往缓冲区写入数据的速度快于 CPU 从缓冲区取走数据的速度，从而导致缓冲区的数据被覆盖，进而导致数据丢失，选项 C 错误。若采用中断 I/O 方式，则外设为某进程准备数据时，可令该进程阻塞，CPU 运行其他进程，选项 D 正确。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_50",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 50,
      "type": "single_choice",
      "question": "【2023 统考真题】下列关于硬件和异常/中断关系的叙述中，错误的是（）。",
      "options": {
        "A": "CPU 在执行一条指令的过程中检测异常事件",
        "B": "CPU 在执行完一条指令时检测中断请求信号",
        "C": "开中断时 CPU 检测到中断请求后就进行中断响应",
        "D": "外部设备通过中断控制器向 CPU 发中断结束信号"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项 A 和 B 显然正确。开中断时，CPU 在执行完一条指令时检测中断请求信号，若检测到中断请求信号，就立即响应；即便是多重中断，CPU 正在处理某个中断的过程中，因为中断屏蔽字的存在，所以 CPU 检测不到处理优先级更低的中断请求信号，若检测到中断请求信号，则说明其处理优先级更高，同样也立即响应，选项 C 正确。外设通过中断控制器向 CPU 发中断请求信号，CPU 响应中断请求后开始执行中断服务程序，中断服务程序执行结束后 CPU 自行返回（中断服务程序的最后一条指令是返回指令），无须外设发中断结束信号，选项 D 错误。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_51",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 51,
      "type": "single_choice",
      "question": "【2023 统考真题】下列关于 I/O 控制方式的叙述中，错误的是（）。",
      "options": {
        "A": "查询方式下，通过 CPU 执行查询程序进行 I/O 操作",
        "B": "中断方式下，通过 CPU 执行中断服务程序进行 I/O 操作",
        "C": "DMA 方式下，通过 CPU 执行 DMA 传送程序进行 I/O 操作",
        "D": "对于 SSD、网络适配器等高速设备，采用 DMA 方式输入/输出"
      },
      "answer": [
        "C"
      ],
      "explanation": "DMA 在预处理和后处理阶段需要 CPU 来处理，而数据传输阶段由 DMA 控制器完成。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_52",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 52,
      "type": "single_choice",
      "question": "【2024 统考真题】下列关于中断 I/O 方式的叙述中，错误的是（）。",
      "options": {
        "A": "中断屏蔽字用于确定中断响应的优先级",
        "B": "保存断点和程序状态字在中断响应阶段完成",
        "C": "保存通用寄存器和设置新中断屏蔽字由软件实现",
        "D": "单重中断方式下中断处理时 CPU 处于关中断状态"
      },
      "answer": [
        "A"
      ],
      "explanation": "中断优先级包括响应优先级和处理优先级。响应优先级由硬件线路或查询程序的查询顺序确\n\n定，不可动态改变；处理优先级由中断屏蔽字确定，可灵活改变。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_53",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 53,
      "type": "single_choice",
      "question": "【2024 统考真题】DMA 控制 I/O 方式下，设备的输入/输出由 DMA 控制器控制完成，此时，DMA 控制器控制的数据传输通路位于（）。",
      "options": {
        "A": "CPU 和主存之间",
        "B": "CPU 和 DMA 控制器之间",
        "C": "设备接口和主存之间",
        "D": "设备接口和 DMA 控制器之间"
      },
      "answer": [
        "C"
      ],
      "explanation": "DMA 的传送过程：① 预处理：CPU 完成一些必要的准备工作，由 DMA 控制器向 CPU 发总线请求。② 数据传送：DMA 控制器接管总线后，在设备接口和主存之间进行数据传送，此阶段由 DMA 控制器控制。③ 后处理：传送结束后，DMA 控制器向 CPU 发送中断信号，做结束处理。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_54",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 54,
      "type": "single_choice",
      "question": "【2025 统考真题】下列设备中，适合采用 DMA 输入/输出方式的是（）。 I. 键盘 II. 网卡 III. 固态硬盘 IV. 针式打印机",
      "options": {
        "A": "仅 I、II",
        "B": "仅 II、III",
        "C": "仅 II、IV",
        "D": "仅 III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "DMA（直接内存访问）适用于高速、大块数据传输的设备，因其可在不占用 CPU 的情况下直接与内存交换数据。网卡和固态硬盘均属于高带宽的块设备，适合采用 DMA 方式。而键盘和针式打印机是典型的低速字符设备，采用中断或程序查询方式通常更高效。",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机组成原理_7-3-4_55",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "输入输出系统",
      "section": "7.3.4",
      "section_title": "本节试题精选",
      "num": 55,
      "type": "single_choice",
      "question": "【2025 统考真题】下列选项中，会触发外部中断请求的事件是（）。",
      "options": {
        "A": "DMA 传送结束",
        "B": "总线事务结束",
        "C": "页故障处理结束",
        "D": "执行断点指令"
      },
      "answer": [
        "A"
      ],
      "explanation": "外部中断由 CPU 外部事件触发。DMA 控制器完成数据传输后，会向 CPU 发出中断请求，这是由外部设备发起的硬件中断，属于典型的外部中断。而页故障（缺页异常）和执行断点指令均在指令执行过程中由 CPU 内部检测并触发，属于内部中断（异常）。总线事务（如一次读/写操作）的完成通常是 CPU 或主控设备主动发起并等待的结果，一般不会产生中断。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机组成原理/chapters/ch07-第7章-输入输出系统.md"
    },
    {
      "id": "计算机网络_1-1-7_02",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列不属于计算机网络功能的是（）。",
      "options": {
        "A": "提高系统可靠性",
        "B": "提高工作效率",
        "C": "分散数据的综合处理",
        "D": "使各计算机相对独立"
      },
      "answer": [
        "C"
      ],
      "explanation": "考点追踪 ▶ TCP/IP 模型的层次结构（2021）\n\nTCP/IP 模型从低到高依次为：网络接口层（对应 OSI 参考模型的物理层和数据链路层）、网际层、传输层和应用层（对应 OSI 参考模型的会话层、表示层和应用层）。因其广泛应用，TCP/IP 模型已成为事实上的国际标准。其层次结构及各层的主要协议如图 1.15 所示。\n\n![](images/9e80639eb8186ab3058711204485fe94bfd671fa2ac6766c7873584aec505411.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"网络接口层\"] --> B[\"网络接口1\"]\n    A --> C[\"网络接口2\"]\n    A --> D[\"网络接口3\"]\n    E[\"网际层\"] --> F[\"网络接口1\"]\n    E --> G[\"网络接口2\"]\n    E --> H[\"网络接口3\"]\n    I[\"传输层\"] --> J[\"TCP\"]\n    K[\"应用层\"] --> L[\"HTTP ... SMTP DNS RTP\"]\n    M[\"IP\"] --> N[\"UDP\"]\n    L --> N\n    M --> N\n    N --> O[\"...\"]\n    N --> P[\"...\"]\n```\n</details>\n\n图 1.15 TCP/IP 模型的层次结构及各层的主要协议\n\n网络接口层的功能类似于 OSI 参考模型的物理层和数据链路层，其作用是从主机或节点接收 IP 分组，并将其发送到指定的物理网络上。TCP/IP 模型并未规定该层的具体功能或协议细节，仅要求主机能通过某种底层协议接入网络以传送 IP 分组。实际使用的物理网络可以是各类局域网（如以太\n\n网、无线局域网等），也可以是电话网、广域网等。\n\n考点追踪 ▶ TCP/IP 模型中网际层的功能（2011、2021）\n\n网际层是 TCP/IP 体系结构的核心部分，功能上与 OSI 参考模型的网络层非常相似。它负责将分组发往任意网络，并为每个分组独立选择路由，但不保证分组有序到达，分组的有序性和可靠性由高层（如传输层）负责。网际层的核心协议是网际协议（IP），提供无连接、不可靠的服务，其传输单位为 IP 数据报。当前广泛使用的版本是 IPv4，其下一个版本是 IPv6。网际层还包括地址解析协议（ARP）、网际控制报文协议（ICMP）和网际组管理协议（IGMP）等辅助协议。\n\n传输层的功能同样与 OSI 参考模型的传输层类似，旨在实现发送端与接收端主机上对等进程之间的逻辑通信。传输层主要采用两种协议：\n\n1）传输控制协议（Transmission Control Protocol，TCP）。它是面向连接的，传输之前需先建立连接，提供可靠交付，数据传输的单位为报文段。  \n2）用户数据报协议（User Datagram Protocol，UDP）。它是无连接的，不保证可靠性，仅提供“尽最大努力交付”，数据传输的单位为用户数据报。\n\n应用层（用户-用户）集成了 OSI 参考模型中会话层、表示层和应用层的功能，包含所有高层协议，例如，文件传输协议（FTP）、域名解析服务（DNS）和超文本传输协议（HTTP）等。\n\n由图 1.15 可见，IP 是互联网的核心协议。TCP/IP 体系体现了两大设计哲学：Everything over\n\nIP，即各种应用均可构建于 IP 之上；IP over Everything，即 IP 可运行于任意底层网络之上。正是这种高度的通用性与灵活性，推动了互联网发展至今日的规模。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_03",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列关于网络中的计算机的描述，正确的是（）。",
      "options": {
        "A": "各自独立，没有联系",
        "B": "拥有独立的操作系统",
        "C": "互相干扰",
        "D": "拥有共同的操作系统"
      },
      "answer": [
        "C"
      ],
      "explanation": "TCP/IP 模型与 OSI 参考模型有许多相似之处。\n\n首先，二者均采用分层体系结构，且各层功能大体相似。\n\n其次，二者均基于独立协议栈的概念。\n\n最后，二者均可解决异构网络互联问题，实现不同厂商生产的计算机之间的通信。\n\nTCP/IP 模型与 OSI 参考模型的层次对应关系如图 1.16 所示。\n\n![](images/b30f8e48fe48fd3dbf409d603ec1dc69418e6bd4e07a39c2080eadec02f02c5a.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"ISO/OSI\"] --> B[\"应用层\"]\n    A --> C[\"表示层\"]\n    A --> D[\"会话层\"]\n    A --> E[\"传输层\"]\n    A --> F[\"网络层\"]\n    A --> G[\"数据链路层\"]\n    A --> H[\"物理层\"]\n    I[\"TCP/IP\"] --> J[\"应用层\"]\n    I --> K[\"传输层\"]\n    I --> L[\"网际层\"]\n    I --> M[\"网络接口层\"]\n    M --> N[\"网络接口\"]\n    M --> O[\"物理网络\"]\n```\n</details>\n\n图 1.16 TCP/IP 模型与 OSI 参考模型的层次对应关系\n\n尽管有这些相似之处，两个模型在设计理念与结构上仍有显著差异。\n\n第一，OSI 参考模型的最大贡献在于精确定义了 “服务” “协议” “接口” 这三个核心概念，其分层思想与现代面向对象程序设计高度契合；而 TCP/IP 模型对这三者未做明确区分。\n\n第二，OSI 参考模型是一个 7 层模型，而 TCP/IP 模型采用 4 层结构：它将 OSI 参考模型中的表示层和会话层功能合并为应用层，同时将物理层与数据链路层合并为网络接口层。\n\n第三，OSI 参考模型先有模型，后制定具体协议，通用性良好，适合描述各类网络。TCP/IP 模型正好相反，即先有协议栈，后归纳出模型，因此不适用于任何其他的非 TCP/IP 模型。\n\n第四，OSI 参考模型在网络层同时支持无连接和面向连接的通信模式，但在传输层仅提供面向连接的服务；而 TCP/IP 模型认为可靠性应由端到端机制保障，因此其网际层仅提供无连接服务，而传输层则同时支持无连接（UDP）和面向连接（TCP）两种模式。\n\nOSI 参考模型与 TCP/IP 模型均非完美，二者都曾受到诸多批评。OSI 参考模型的设计者从一开始就致力于构建一个全球统一的计算机网络标准。从技术角度看，这种对理想化架构的追求，导致其软件实现结构复杂、运行效率低下。加之缺乏市场与商业驱动力，最终使其未能实现预期目标。相比之下，TCP/IP 模型凭借简洁高效的设计，在实际应用中占据了主导地位。\n\n为了兼顾理论与实践，学习计算机网络时，通常采用一种 5 层协议体系结构，如图 1.17 所示，该结构融合了 OSI 参考模型和 TCP/IP 模型的优点。本书也将采用此结构进行讨论。\n\n![](images/3793b86eb34db4d6d4b5789d14f51df9dcefc9067bcc34897063d28ad02786b6.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"应用层\"] -->|①客户发起连接建立请求| B[\"服务器\"]\n    C[\"客户\"] -->|②服务器接受连接建立请求| B\n    D[\"传输层\"] -->|以后就逐级使用下层提供的服务 (使用TCP和IP)| B\n    E[\"网络层\"] -->|以后就逐级使用下层提供的服务 (使用TCP和IP)| B\n    F[\"数据链路层\"] -->|以后就逐级使用下层提供的服务 (使用TCP和IP)| B\n    G[\"物理层\"] -->|以后就逐级使用下层提供的服务 (使用TCP和IP)| B\n    H[\"因特网\"] --> B\n    B --> I[\"应用层服务器\"]\n    I --> J[\"传输层\"]\n    I --> K[\"网络层\"]\n    I --> L[\"数据链路层\"]\n    I --> M[\"物理层\"]\n```\n</details>\n\n图 1.17 网络 5 层协议的体系结构模型\n\n考点追踪 ▶ 应用层数据的逐层封装过程（2021）\n\n最后，简单介绍使用协议栈进行通信的过程，如图 1.18 所示。每个协议栈的顶端是一个面向用户的接口。用户首先将数据交给本主机的应用层，应用层加上必要的控制信息，组成应用层的 PDU；然后下放到传输层，作为传输层的 SDU，加上传输层的 PCI，组成传输层的 PDU；接着下放到网络层，组成网络层的 SDU，加上网络层的 PCI，再次组成网络层的 PDU；继续下放到数据链路层……如此层层下放，层层封装，最终形成的数据帧（或数据包）经过物理链路传输。到达接收方节点后，协议栈逆向逐层拆开“包裹”，并将收到的数据递交给用户。\n\n![](images/0d9ea569646d460dd578f541185cfcd1b445558b1f323ba40c25ac57e301b9af.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    subgraph 主机A\n        A1[\"应用层 首部\"] --> A2[\"数据\"]\n        A3[\"传输层 首部\"] --> A4[\"H5 数据\"]\n        A5[\"网络层 首部\"] --> A6[\"H4 H5 数据\"]\n        A7[\"链路层 首部\"] --> A8[\"H3 H4 H5 数据\"]\n        A9[\"链路层 尾部\"] --> A10[\"H2 H3 H4 H5 数据 T2\"]\n        A10 --> A11[\"10100比特流110100\"]\n    end\n\n    subgraph 主机B\n        B1[\"应用层 首部\"] --> B2[\"数据\"]\n        B3[\"传输层 首部\"] --> B4[\"H5 数据\"]\n        B5[\"网络层 首部\"] --> B6[\"H4 H5 数据\"]\n        B7[\"链路层 首部\"] --> B8[\"H3 H4 H5 数据\"]\n        B9[\"链路层 尾部\"] --> B10[\"H2 H3 H4 H5 数据 T2\"]\n        B10 --> B11[\"10100比特流110100\"]\n    end\n\n    A1 --> A2\n    A2 --> A3\n    A3 --> A4\n    A4 --> A5\n    A5 --> A6\n    A6 --> A7\n    A7 --> A8\n    A8 --> A9\n    A9 --> A10\n    A10 --> A11\n\n    B1 --> B2\n    B2 --> B3\n    B3 --> B4\n    B4 --> B5\n    B5 --> B6\n    B6 --> B7\n    B7 --> B8\n    B8 --> B9\n    B9 --> B10\n\n    style 主机A fill:#f9f,stroke:#333\n    style 主机B fill:#f9f,stroke:#333\n```\n</details>\n\n图 1.18 协议栈的通信过程示例",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_04",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "分组交换相比报文交换的主要改进是（）。",
      "options": {
        "A": "差错控制更加完善",
        "B": "路由算法更加简单",
        "C": "传输单位更小且有固定的最大长度",
        "D": "传输单位更大且有固定的最大长度"
      },
      "answer": [
        "C"
      ],
      "explanation": "相对于报文交换而言，分组交换将报文划分为一个个具有固定最大长度的分组，以分组为单位进行传输。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_05",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列（）是分组交换网络的缺点。",
      "options": {
        "A": "信道利用率低",
        "B": "附加信息开销大",
        "C": "传播时延大",
        "D": "不同规格的终端很难相互通信"
      },
      "answer": [
        "B"
      ],
      "explanation": "分组交换要求将数据分成等长的小数据段，每段都要加上控制信息（如目的地址），因此传送数据的总开销较大。相比其他交换方式，分组交换信道利用率高。传播时延取决于传播介质及收发双方的距离。对各种交换方式，不同规格的终端都很难相互通信，因此不是分组交换的缺点。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_07",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列说法中，（）是数据报方式的特点。",
      "options": {
        "A": "同一报文的不同分组可以经过不同的传输路径通过通信子网",
        "B": "同一报文的不同分组到达目的节点时顺序是确定的",
        "C": "适合于短报文的通信",
        "D": "同一报文的不同分组在路由选择时只需要进行一次"
      },
      "answer": [
        "A"
      ],
      "explanation": "数据报方式是一种无连接的分组交换技术，它先将报文拆分成若干较小的数据段，加上地址等控制信息后构成分组，这样做虽然会增加一些控制开销，但并不意味着数据报方式只适合于短报文的通信。数据报方式尽最大努力交付，不保证可靠性，分组可能出错或丢失，网络为每个分组独立地选择路由，转发的路径可能不同，因此分组不一定按序到达目的节点。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_08",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "计算机网络分为广域网、城域网和局域网，其划分的主要依据是（）。",
      "options": {
        "A": "网络的作用范围",
        "B": "网络的拓扑结构",
        "C": "网络的通信方式",
        "D": "网络的传输介质"
      },
      "answer": [
        "A"
      ],
      "explanation": "按分布范围分类：广域网、城域网、局域网、个人区域网。\n\n按拓扑结构分类：星形网络、总线形网络、环形网络、网状网络。\n\n按传输技术分类：广播式网络、点对点网络。\n\n按使用者分类：公用网、专用网。\n\n按数据交换技术分类：电路交换网、报文交换网、分组交换网。\n\n因此，根据网络的覆盖范围可将网络主要分为广域网、城域网和局域网。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_09",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "假设主机 A 和 B 之间的链路带宽为 100Mb/s，主机 A 的网卡速率为 1Gb/s，主机 B 的网卡速率为 10Mb/s，主机 A 给主机 B 发送数据的最高理论速率为（）。",
      "options": {
        "A": "1Mb/s",
        "B": "10Mb/s",
        "C": "100Mb/s",
        "D": "1Gb/s"
      },
      "answer": [
        "B"
      ],
      "explanation": "主机 A 给主机 B 发送数据的最高理论速率取决于链路带宽及主机 A、主机 B 的网卡速率中最小者，因为它是数据传输的瓶颈。因此，最高理论速率为 10Mb/s。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_10",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "某点对点链路的长度为 100km，若数据在该链路上的传输速率为 $10^{8}$ m/s，链路带宽为 20Mb/s，已知一个已发送的分组的发送时延和传播时延相等，则该分组的大小为（）。",
      "options": {
        "A": "20Kb",
        "B": "30Kb",
        "C": "40Kb",
        "D": "50Kb"
      },
      "answer": [
        "A"
      ],
      "explanation": "链路的传播时延 = $100km \\div 10^{8}m/s = 1ms$ ，发送时延等于传播时延，因此发送时延也为 1ms，所以分组的大小应为 $20Mb/s \\times 1ms = 20Kb$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_11",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "在下图所示的采用存储转发方式的分组交换网中，主机 A 向 B 发送两个长度为 1000B 的分组，路由器处理单个分组的时延为 10ms（假设路由器同时最多只能处理一个分组，若在处理某个分组时有新的分组到达，则存入缓存区），忽略链路的传播时延，所有链路的数据传输速率为 1Mb/s，则分组从 A 发送开始到 B 接收完为止，需要的时间至少是（）。 ![](images/50cf0f59249ba83f5e771f0e80dcb8d16e0ce764237b8ab5a0031e526f6a1d21.jpg) <details> <summary>natural_image</summary> Two connected devices labeled A and B, each with a router icon (no text or symbols beyond labels) </details>",
      "options": {
        "A": "34ms",
        "B": "36ms",
        "C": "38ms",
        "D": "52ms"
      },
      "answer": [
        "B"
      ],
      "explanation": "分组长度为 1000B，所有链路的数据传输速率为 1Mb/s，因此，每段链路的发送时延为 $1000B \\div 1Mb/s = 8ms$ ，第一个分组从 A 到达 B 的时间为 $8 + 10 + 8 = 26ms$ ，此后又经过 10ms，第二个分组才到达 B，所以总时间为 $26 + 10 = 36ms$ ，下图是传送过程的时空图。\n\n注意，此题还可扩展为发送更多分组的情况，请读者自行分析。\n\n![](images/006f70899fd6d9a5795f9b83fbc492bb2b1c7c730b40bca1b95b2a379a63342b.jpg)\n\n<details>\n<summary>text_image</summary>\n\n在缓冲区排队等待处理的时间\n分组2 8ms 10ms 8ms\n分组1 8ms 10ms 8ms\nt\n</details>",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_12",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "如下图所示，主机 H1 和 H2 之间有三种可选的交换方式——电路交换、报文交换和分组交换，其中电路交换建立电路连接的时间为 2s，报文交换和分组交换都要经过由一个路由器连接的链路，分组大小为 5kb。三种交换方式的数据传输速率均为 2.5kb/s，忽略所有的传播时延、分组开销和不可预料的线路延迟，下列说法中正确的是（）。 ![](images/b7489c809fd4293d7b34ee3ff28ef845f0f65f796a6449a9542556bf9d490677.jpg) <details> <summary>natural_image</summary> Two connected devices labeled H1 and H2, shown with no text or symbols on the devices themselves. </details> 电路交换 ![](images/48c27ca16bc343cbd6dd9ba8c90d398937a4a6725037581b2ff65c0fee103b1e.jpg) <details> <summary>text_image</summary> H1 路由器 H2 </details> 报文交换和分组交换",
      "options": {
        "A": "若 H1 向 H2 发送 5kb 的数据，则电路交换最节省时间",
        "B": "若 H1 向 H2 发送 500kb 的数据，则电路交换和分组交换的时间相同",
        "C": "若 H1 向 H2 发送 10kb 的数据，则报文交换比分组交换更节省时间",
        "D": "若 H1 向 H2 发送 15kb 的数据，则报文交换比电路交换更节省时间"
      },
      "answer": [
        "B"
      ],
      "explanation": "若 H1 向 H2 发送 5kb 的数据，电路交换的时间为 $2 + 5kb \\div 2.5kb/s = 4s$ ，分组交换和报文交换的时间均为 $5kb \\div 2.5kb/s + 5kb \\div 2.5kb/s = 4s$ ，选项 A 错误。若 H1 向 H2 发送 500kb 的数据，电路交换的时间为 $2 + 500kb \\div 2.5kb/s = 202s$ ，分组交换的时间为 $500kb \\div 2.5kb/s + 5kb \\div 2.5kb/s = 202s$ ，选项 B 正确。若 H1 向 H2 发送 10kb 的数据，报文交换的时间为 $10kb \\div 2.5kb/s + 10kb \\div 2.5kb/s = 8s$ ，分组交换的时间为 $10kb \\div 2.5kb/s + 5kb \\div 2.5kb/s = 6s$ ，选项 C 错误。若 H1 向 H2 发送 15kb 的数据，电路交换的时间为 $2 + 15kb \\div 2.5kb/s = 8s$ ，报文交换的时间为 $15kb \\div 2.5kb/s + 15kb \\div 2.5kb/s = 12s$ ，选项 D 错误。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_13",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2010 统考真题】在下图所示的采用 “存储-转发” 方式的分组交换网络中，所有链路的数据传输速率为 100Mb/s，分组大小为 1000B，其中分组头大小为 20B。若主机 H1 向主机 H2 发送一个大小为 980000B 的文件，则在不考虑分组拆装时间和传播延迟的情况下，从 H1 发送开始到 H2 接收完为止，需要的时间至少是（）。 ![](images/00aea806e4dd3982ffeb66c6e70e5f8e0067cbaaa32b2db15933c5f291c3ce8a.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD H1[\"Computer H1\"] --> Server[\"Server\"] Server --> H2[\"Computer H2\"] Server --> Database[\"Database\"] Database --> Server ``` </details>",
      "options": {
        "A": "80ms",
        "B": "80.08ms",
        "C": "80.16ms",
        "D": "80.24ms"
      },
      "answer": [
        "C"
      ],
      "explanation": "分组大小为 1000B，其中首部占 20B，故每个分组携带的有效数据为 980B。文件总长为 980000B，需划分为 1000 个分组；每个分组含首部共 1000B，因此共需传输的数据量为 $10^{6}$ B。由于所有链路的传输速率相同，沿最短路径传输时延最小，而最短路径经过 2 个交换机（共 3 段链路）。H1 发送完所有分组的时间为 $10^{6} \\times 8b \\div 100Mb/s = 80ms$ ，此时最后一个分组刚离开 H1，该分组还需依次经过 2 个交换机（再通过 2 段链路）才能到达 H2，每段链路的传输时延为 $r = 1000 \\times 8b \\div 100Mb/s = 0.08ms$ 。因此，H2 接收完全部数据的时间为 $80ms + 2r = 80.16ms$ 。\n\n【另解】分组交换的传输过程类似于流水线。在连续传输过程中，各存储转发设备可同时处理不同的分组，就如同流水线中的各段并行工作。由于所有链路的速率相同，每段链路的传输时延 $r = 1000 \\times 8\\mathrm{b} \\div 100\\mathrm{Mb/s} = 0.08\\mathrm{ms}$ ，最短路径有3段链路。H2接收完全部数据的时间为 $3r + (m - 1)r = 3 \\times 0.08\\mathrm{ms} + (1000 - 1) \\times 0.08\\mathrm{ms} = 80.16\\mathrm{ms}$ 。也就是说，第一个分组从流水线中流出所需的时间为 $3r$ ，此后每隔 $r$ 时间就有一个分组流出。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_14",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2013 统考真题】主机甲通过一个路由器（存储转发方式）与主机乙互连，两段链路的数据传输速率均为 10Mb/s，主机甲分别采用报文交换和分组大小为 10kb 的分组交换向主机乙发送一个大小为 8Mb（ $1M=10^{6}$ ）的报文。若忽略链路传播延迟、分组头开销和分组拆装时间，则两种交换方式完成该报文传输所需的总时间分别为（）。",
      "options": {
        "A": "800ms、1600ms",
        "B": "801ms、1600ms",
        "C": "1600ms、800ms",
        "D": "1600ms、801ms"
      },
      "answer": [
        "D"
      ],
      "explanation": "传输路径为：甲—路由器—乙。\n\n在题中未明确说明的情况下，不考虑排队时延和处理时延，只考虑发送时延和传播时延；本题已忽略传播时延，因此只需计算报文交换和分组交换的发送时延。\n\n报文交换：采用整报文传输，报文大小为 $8\\mathrm{Mb}$ （ $1\\mathrm{M} = 10^{6}$ ）。每个节点（包括主机甲和路由器）\n\n在转发该报文前需要完整接收，因此需经历两次发送过程：甲向路由器发送报文，发送时延 $T = 8Mb \\div 10Mb/s = 0.8s$ ；路由器向乙转发该报文，同样需 0.8s。总时延为 1.6s，即 1600ms。\n\n分组交换：分组大小为 10kb（1k = 10³），忽略分组头开销，每个分组携带 10kb 数据。报文总长为 8Mb，分组数 $m = 8Mb \\div 10kb = 800$ 。参考 2010 年真题的流水线思路：甲与乙通过一个路由器相连，构成 2 段链路（2 个流水段），每段链路的发送时延 $r = 10kb \\div 10Mb/s = 1ms$ 。第一个分组从甲发出后，需经过 2 段链路才能到达乙，耗时 2r；此后，流水线满载，每隔 r 时间就有一个分组到达乙。因此，传输 m = 800 个分组所需的总时间为 $t = 2r + (m - 1)r = 2 + (800 - 1) \\times 1 = 801ms$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_15",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2023 统考真题】在下图所示的分组交换网络中，主机 H1 和 H2 通过路由器互连，2 段链路的带宽均为 100Mb/s，时延带宽积（单向传播时延×带宽）均为 1000b。若 H1 向 H2 发送一个大小为 1MB 的文件，分组长度为 1000B，则从 H1 开始发送的时刻起到 H2 收到文件全部数据时刻止，所需的时间至少是（）。 （注： $1M = 10^{6}$ 。） ![](images/af444562f3c10964de24190d5ef69ec4d93f5f93d7f527e5420556e4a4d1cea0.jpg) <details> <summary>flowchart</summary> ```mermaid graph LR H1[\"电脑 H1\"] --> 路由器[\"路由器\"] 路由器 --> H2[\"电脑 H2\"] ``` </details>",
      "options": {
        "A": "80.02ms",
        "B": "80.08ms",
        "C": "80.09ms",
        "D": "80.10ms"
      },
      "answer": [
        "D"
      ],
      "explanation": "文件大小为 1MB，分组长度为 1000B，分组数量为 $1MB \\div 1000B = 1000$ 。一个分组从 H1 到 H2 所需的时间 = H1 的发送时延 $t_{1} + H1$ 到路由器的传播时延 $t_{2} + t_{3}$ 路由器的发送时延 $t_{3} + t_{4}$ 路由器到 H2 的传播时延 $t_{4}$ ，其中 $t_{1} = t_{3} = 1000B \\div 100Mb/s = 0.08ms$ ， $t_{2} = t_{4} = 1000b \\div 100Mb/s = 0.01ms$ 。因此，一个分组从 H1 到 H2 的端到端时延为 $(0.08 + 0.01) \\times 2 = 0.18ms$ 。H1 发送前 999 个分组所需的时间为 $999t_{1} = 79.92ms$ ，此时，第 1000 个分组刚刚开始发送，它还需 0.18ms 才能到达 H2。因此，从 H1 开始发送到 H2 收到全部数据所需的最短时间为 $79.92 + 0.18 = 80.10ms$ 。\n\n读者可以思考：若H1和H2之间有2个路由器，则所需的时间至少是多少？",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_16",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2024 统考真题】某分组交换网络及每段链路的带宽如下图所示，H1 到 H2 的最大吞吐量约为（）。",
      "options": {
        "A": "1Mb/s",
        "B": "10Mb/s",
        "C": "100Mb/s",
        "D": "1000Mb/s"
      },
      "answer": [
        "B"
      ],
      "explanation": "H1 到 H2 有三条路径。H1 和 H2 各自连接路由器的链路带宽均为 10Mb/s，这是所有路径共有的端侧链路。现在假设每个数据段为 10Mb，分别分析各路径的吞吐量。\n\n路径一：中间两段链路带宽均为 1000Mb/s，受限于 H1、H2 直连路由器的链路带宽 10Mb/s，无论中间链路有多快，数据从 H1 发出需 1s（10Mb÷10Mb/s，受限于自身的 10Mb/s 出口），到达 H2 前最后一跳也需 1s。吞吐量约为 10Mb/s。\n\n路径二：中间一段链路带宽为 1Mb/s，H1 发送一个数据段需 1s，但经过中间 1Mb/s 链路时，转发时延为 $10Mb \\div 1Mb/s = 10s$ （成为瓶颈），因此 H2 每隔 10s 收到一个数据段，吞吐量约为 1Mb/s。\n\n路径三：中间两段链路带宽均为 100Mb/s，与路径一的分析类似，吞吐量约为 10Mb/s。由此可见，端到端的吞吐量由路径中带宽最小的链路（瓶颈）决定。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-1-7_17",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.1.7",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2025 统考真题】某网络拓扑及各链路带宽如下图所示。网络按电路交换方式运行时，主机 H1 与 H2 建立一条带宽为 10Mb/s 的电路，建立电路时间为 32μs；按分组交换方式运行时，分组长度为 400B，忽略分组首部开销。现 H1 向 H2 发送一个 2MB（1M = 10⁶）的文件，分别采用电路交换、报文交换、分组交换方式时，H2 至少需要 TCS、TMS、TPS 时间才能接收到全部文件内容，则 TCS、TMS、TPS 满足的关系是（）。 ![](images/c8a1ffd80c02e8fb12c72486b3e9860015265136f1bd5335cced2a701dc37eea.jpg) <details> <summary>flowchart</summary> ```mermaid graph LR H1[\"H1\"] -->|10Mb/s| R1[\"R1\"] R1 -->|100Mb/s| R2[\"R2\"] R2 -->|1000Mb/s| H2[\"H2\"] ``` </details>",
      "options": {
        "A": "$T_{CS} > T_{MS} > T_{PS}$",
        "B": "$T_{\\mathrm{MS}} > T_{\\mathrm{PS}} > T_{\\mathrm{CS}}$",
        "C": "$T_{\\mathrm{MS}} > T_{\\mathrm{CS}} > T_{\\mathrm{PS}}$",
        "D": "$T_{\\mathrm{PS}} > T_{\\mathrm{MS}} > T_{\\mathrm{CS}}$"
      },
      "answer": [
        "B"
      ],
      "explanation": "采用电路交换时， $T_{CS} =$ 电路建立时间 $32\\mu s +$ 文件传输时间 $2MB \\div 10Mb/s = 32\\mu s + 1.6s$ 。采用报文交换时，整个报文需要逐跳存储转发， $T_{MS} = 2MB \\div 10Mb/s + 2MB \\div 100Mb/s + 2MB \\div 1000Mb/s = 1.776s$ 。采用分组交换时，分组数为 $2MB/400B = 5000$ ，第一个分组从 H1 到 H2 的传输时延 = $400B \\div 10Mb/s + 400B \\div 100Mb/s + 400B \\div 1000Mb/s = 355.2\\mu s$ ；之后，每 $320\\mu s$ 到达一个分组，故 $T_{PS} = 355.2\\mu s + 320 \\times 4999\\mu s = 1.6s + 35.2\\mu s$ 。因此 $T_{MS} > T_{PS} > T_{CS}$ 。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_05",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "在 OSI 参考模型中，第 n 层与它之上的第 $n+1$ 层的关系是（）。",
      "options": {
        "A": "第 n 层为第 $n+1$ 层提供服务",
        "B": "第 $n+1$ 层为从第 n 层接收的报文添加一个报头",
        "C": "第 n 层使用第 $n+1$ 层提供的服务",
        "D": "第 n 层和第 $n+1$ 层相互没有影响"
      },
      "answer": [
        "A"
      ],
      "explanation": "服务是指下层为紧邻的上层提供的功能调用，每层只能调用紧邻下层提供的服务（通过服务访问点），而不能跨层调用。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_06",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列关于计算机网络及其结构模型的说法中，错误的是（）。",
      "options": {
        "A": "世界上第一个计算机网络是 ARPAnet",
        "B": "Internet 最早起源于 ARPAnet",
        "C": "国际标准化组织（ISO）设计出了 OSI/RM 参考模型，即实际执行的标准",
        "D": "TCP/IP 模型分为 4 个层次"
      },
      "answer": [
        "C"
      ],
      "explanation": "ISO 设计了开放系统互连参考模型（OSI/RM），但实际执行的通用标准是 TCP/IP 标准。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_07",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "（）是计算机网络中 OSI 参考模型的 3 个主要概念。",
      "options": {
        "A": "服务、接口、协议",
        "B": "结构、模型、交换",
        "C": "子网、层次、端口",
        "D": "广域网、城域网、局域网"
      },
      "answer": [
        "A"
      ],
      "explanation": "计算机网络要做到有条不紊地交换数据，就必须遵守一些事先约定的原则，这些原则就是协议。在协议的控制下，两个对等实体之间的通信使得本层能够向上一层提供服务。要实现本层协议，还要使用下一层提供的服务，而提供服务就是交换信息，交换信息就需要通过接口，所以说服务、接口、协议是 OSI 参考模型的 3 个主要概念。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_08",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列关于网络协议三要素的描述中，正确的是（）。",
      "options": {
        "A": "数据格式、编码、信号电平",
        "B": "数据格式、控制信息、速度匹配",
        "C": "语法、语义、同步",
        "D": "编码、控制信息、同步"
      },
      "answer": [
        "C"
      ],
      "explanation": "描述网络协议的三要素是语法、语义和同步。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_09",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "释放 TCP 连接的四次挥手报文的先后关系，属于网络协议三要素中的（）。",
      "options": {
        "A": "语法",
        "B": "时序",
        "C": "语义",
        "D": "服务"
      },
      "answer": [
        "B"
      ],
      "explanation": "网络协议三要素中的时序（或称同步）定义了通信双方的时序关系，TCP 通信双方通过 “四次挥手” 释放连接，它规定发送 FIN、ACK、FIN 和 ACK 报文的先后顺序。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_10",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下图是 TCP 报文段的首部格式，它描述的是网络协议三要素中的（）。 ![](images/dabf23beb609e0ebc9a604ca8a826990670cc4a28b1b9a76a3f422044c480438.jpg) <details> <summary>text_image</summary> 32位 0\t8\t16\t24\t31 TCP 首部 源端口\t目的端口 序号 确认号 数据 偏移\t保留\tU\tR\tA\tP\tR\tS\tF\t窗口 检验和\t紧急指针 选项（长度可变）\t填充 </details> I. 语法 II. 语义 III. 时序（同步）",
      "options": {
        "A": "仅 I",
        "B": "仅 II",
        "C": "仅 III",
        "D": "I、II 和 III"
      },
      "answer": [
        "A"
      ],
      "explanation": "网络协议三要素中的语法定义所交换信息的格式，因此 TCP 首部格式体现了语法的要素。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_11",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列关于 OSI 参考模型的描述中，错误的是（）。",
      "options": {
        "A": "OSI 参考模型定义了开放系统的层次结构",
        "B": "OSI 参考模型定义了各层所包括的可能的服务",
        "C": "OSI 参考模型作为一个框架协调组织各层协议的制定",
        "D": "OSI 参考模型定义了各层接口的实现方法"
      },
      "answer": [
        "D"
      ],
      "explanation": "OSI 参考模型不仅划分了层次结构，还定义了各层可能提供的服务，但并未规定协议的具体实现，而是描述了一些概念和原则，用来协调和组织各层所用的协议。OSI 参考模型并未定义各层接口的实现方法，而把具体的实现细节留给了各个协议和标准，选项 D 错误。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_12",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "负责将比特转换成电信号进行传输的层是（）。",
      "options": {
        "A": "应用层",
        "B": "网络层",
        "C": "数据链路层",
        "D": "物理层"
      },
      "answer": [
        "D"
      ],
      "explanation": "物理层为数据链路层提供二进制流的传输服务，涉及信号的编码、解码和同步等，选项 D 正确。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_13",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "下列关于 OSI 参考模型的物理层功能的描述中，错误的是（）。",
      "options": {
        "A": "比特 0 和 1 使用何种电信号表示",
        "B": "传输能否在两个方向上同时进行",
        "C": "1个比特持续多长时间",
        "D": "避免快速发送方“淹没”慢速接收方"
      },
      "answer": [
        "D"
      ],
      "explanation": "避免快速发送方 “淹没” 慢速接收方，描述的是流量控制的作用，属于数据链路层或传输层的功能。物理层只负责透明地传送比特流，不涉及流量控制的功能，选项 D 错误。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_14",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "OSI 参考模型中的数据链路层不具有（）功能。",
      "options": {
        "A": "物理寻址",
        "B": "流量控制",
        "C": "差错检验",
        "D": "拥塞控制"
      },
      "answer": [
        "D"
      ],
      "explanation": "数据链路层在不可靠的物理介质上提供可靠的传输，作用包括物理寻址、组帧、流量控制、差错检验、数据重发等。网络层和传输层才具有拥塞控制的功能。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_15",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "下列能够最好地描述 OSI 参考模型的数据链路层功能的是（）。",
      "options": {
        "A": "提供用户和网络的接口",
        "B": "处理信号通过介质的传输",
        "C": "控制报文通过网络的路由选择",
        "D": "保证数据正确的顺序和完整性"
      },
      "answer": [
        "D"
      ],
      "explanation": "OSI 参考模型的数据链路层向上提供可靠的传输服务，在差错检测的基础上，增加了帧编号、确认和重传机制，因此保证了数据正确的顺序和完整性。选项 A 是应用层的功能，选项 B 是物理层的功能，选项 C 是网络层的功能。学习 3.1 节后，对本题的理解将更深刻。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_16",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "当数据由端系统 A 传送至端系统 B 时，不参与数据封装工作的是（）。",
      "options": {
        "A": "物理层",
        "B": "数据链路层",
        "C": "网络层",
        "D": "表示层"
      },
      "answer": [
        "A"
      ],
      "explanation": "物理层以 0、1 比特流的形式透明地传输数据链路层提交的帧。网络层和表示层都为上层提交的数据加上首部，数据链路层为上层提交的数据加上首部和尾部，然后提交给下一层。物理层不存在下一层，自然也就不用封装。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_17",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "在 OSI 参考模型中，实现端到端的应答、分组排序和流量控制功能的协议层是（）。",
      "options": {
        "A": "会话层",
        "B": "网络层",
        "C": "传输层",
        "D": "数据链路层"
      },
      "answer": [
        "C"
      ],
      "explanation": "只有传输层及以上各层的通信才能称为端到端，选项 B、D 错。会话层管理不同主机间进程的对话，而传输层实现应答、分组排序和流量控制功能。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_18",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "在 ISO/OSI 参考模型中，可同时提供无连接服务和面向连接服务的是（）。",
      "options": {
        "A": "物理层",
        "B": "数据链路层",
        "C": "网络层",
        "D": "传输层"
      },
      "answer": [
        "C"
      ],
      "explanation": "本题容易误选选项 D。ISO/OSI 参考模型在网络层支持无连接和面向连接的通信，但在传输层仅支持面向连接的通信；TCP/IP 模型在网络层仅有无连接的通信，而在传输层支持无连接和面向连接的通信。两类协议栈的区别是联考的考点，而这个区别是常考点。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_19",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "在 OSI 参考模型中，当两台计算机进行文件传输时，为防止中间出现网络故障而重传整个文件的情况，可通过在文件中插入同步点来解决，这个动作发生在（）。",
      "options": {
        "A": "表示层",
        "B": "会话层",
        "C": "网络层",
        "D": "应用层"
      },
      "answer": [
        "B"
      ],
      "explanation": "在 OSI 参考模型中，会话层的两个主要服务是会话管理和同步。会话层使用检验点使通信会话在通信失效时从检验点继续恢复通信，实现数据同步。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_20",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "数据的格式转换及压缩属于 OSI 参考模型中（）的功能。",
      "options": {
        "A": "应用层",
        "B": "表示层",
        "C": "会话层",
        "D": "传输层"
      },
      "answer": [
        "B"
      ],
      "explanation": "OSI 参考模型表示层的功能有数据解密与加密、压缩、格式转换等。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_21",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "OSI 参考模型中（）通过设置检验点，使通信双方在通信失效时可从检验点恢复通信。",
      "options": {
        "A": "传输层",
        "B": "网络层",
        "C": "表示层",
        "D": "会话层"
      },
      "answer": [
        "D"
      ],
      "explanation": "会话层的主要功能是建立、管理和终止进程间的会话，以及使用检查点（或称检验点）使会话在通信失效时从检验点继续恢复通信，实现数据同步。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_22",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "下列说法中正确描述了 OSI 参考模型中数据的封装过程的是（）。",
      "options": {
        "A": "数据链路层在分组上仅增加了源物理地址和目的物理地址",
        "B": "网络层将高层协议产生的数据封装成分组，并增加第三层的地址和控制信息",
        "C": "传输层将数据流封装成数据帧，并增加可靠性和流控制信息",
        "D": "表示层将高层协议产生的数据分割成数据段，并增加相应的源和目的端口信息"
      },
      "answer": [
        "B"
      ],
      "explanation": "数据链路层在分组上除增加源和目的物理地址外，也增加控制信息；传输层的 PDU 不称为帧；表示层不负责将高层协议产生的数据分割成数据段，负责增加相应源和目的端口信息的应是传输层。选项 B 正确描述了 OSI 参考模型中数据的封装过程，数据经过网络层后，只是增加了第三层 PCI。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_24",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "在 OSI 参考模型中，（）利用通信子网提供的服务实现两个进程之间的端到端通信。",
      "options": {
        "A": "网络层",
        "B": "传输层",
        "C": "会话层",
        "D": "表示层"
      },
      "answer": [
        "B"
      ],
      "explanation": "在 OSI 参考模型中，数据链路层提供链路上相邻节点之间的逻辑通信，网络层提供主机之间的逻辑通信，传输层在运行于不同主机上的进程之间（端到端）提供逻辑通信。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_25",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "互联网采用的核心技术是（）。",
      "options": {
        "A": "TCP/IP",
        "B": "局域网技术",
        "C": "远程通信技术",
        "D": "光纤技术"
      },
      "answer": [
        "A"
      ],
      "explanation": "协议是网络上计算机之间进行信息交换和资源共享时共同遵守的约定，没有协议的存在，网络的作用也就无从谈起。在互联网中应用的网络协议是采用分组交换技术的 TCP/IP，它是互联网的核心技术。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_26",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "在 TCP/IP 模型中，（）处理关于可靠性、流量控制和错误校正等问题。",
      "options": {
        "A": "网络接口层",
        "B": "网际层",
        "C": "传输层",
        "D": "应用层"
      },
      "answer": [
        "C"
      ],
      "explanation": "TCP/IP 模型的传输层提供端到端的通信，并且负责差错控制和流量控制，可以提供可靠的面向连接服务或不可靠的无连接服务。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_27",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "上下相邻层实体之间的接口称为服务访问点，应用层的服务访问点也称（）。",
      "options": {
        "A": "用户接口",
        "B": "网卡接口",
        "C": "IP 地址",
        "D": "MAC 地址"
      },
      "answer": [
        "A"
      ],
      "explanation": "在同一系统中，相邻两层的实体交换信息的逻辑接口称为服务访问点（SAP），N 层的 SAP 是 $N+1$ 层可以访问 N 层服务的地方。SAP 用于区分不同的服务类型。在 5 层体系结构中，数据链路层的服务访问点为帧的 “类型” 字段，网络层的服务访问点为 IP 数据报的 “协议” 字段，传输层的服务访问点为 “端口号” 字段，应用层的服务访问点为 “用户接口”。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_29",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2009 统考真题】在 OSI 参考模型中，自下而上第一个提供端到端服务的层是（）。",
      "options": {
        "A": "数据链路层",
        "B": "传输层",
        "C": "会话层",
        "D": "应用层"
      },
      "answer": [
        "B"
      ],
      "explanation": "在 OSI 参考模型中，传输层是自下而上第一个提供端到端服务的层，通过端口号实现应用进程间的逻辑通信。数据链路层仅负责相邻节点（如交换机、路由器等中间设备）之间的通信，而网络层提供主机到主机的通信，不提供面向应用进程的服务。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_30",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2010 统考真题】下列选项中不属于网络体系结构所描述的内容是（）。",
      "options": {
        "A": "网络的层次",
        "B": "每层使用的协议",
        "C": "协议的内部实现细节",
        "D": "每层必须完成的功能"
      },
      "answer": [
        "C"
      ],
      "explanation": "网络体系结构是指各层及其协议的集合，涵盖网络的层次划分、每层的功能及所用的协议，因此选项 A、B、D 均属于描述内容。而协议的内部实现细节属于实现问题，不由体系结构规定。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_31",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2013 统考真题】在 OSI 参考模型中，功能需由应用层的相邻层实现的是（）。",
      "options": {
        "A": "对话管理",
        "B": "数据格式转换",
        "C": "路由选择",
        "D": "可靠数据传输"
      },
      "answer": [
        "B"
      ],
      "explanation": "在 OSI 参考模型中，应用层的相邻下层是表示层（第 6 层），负责处理与数据表示相关的问题。其主要功能包括数据字符集转换、数据格式转换、文本压缩以及加密与解密等。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_32",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "【2014 统考真题】在 OSI 参考模型中，直接为会话层提供服务的是（）。",
      "options": {
        "A": "应用层",
        "B": "表示层",
        "C": "传输层",
        "D": "网络层"
      },
      "answer": [
        "C"
      ],
      "explanation": "在 OSI 参考模型中，各层直接为其上一层提供服务，而会话层的下一层是传输层。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_33",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2016 统考真题】在 OSI 参考模型中，路由器、交换机（Switch）、集线器（Hub）实现的最高功能层分别是（）。",
      "options": {
        "A": "2、2、1",
        "B": "2、2、2",
        "C": "3、2、1",
        "D": "3、2、2"
      },
      "answer": [
        "C"
      ],
      "explanation": "集线器（Hub）是多端口中继器，工作在物理层（第1层）；以太网交换机（Switch）是多端口网桥，工作在数据链路层（第2层）；路由器是网络层设备，最高工作在第3层。因此，三者实现的最高功能层分别为网络层、数据链路层和物理层。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_34",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2017 统考真题】假设 OSI 参考模型的应用层欲发送 400B 的数据（无拆分），除物理层和应用层外，其他各层在封装 PDU 时均引入 20B 的额外开销，则应用层的数据传输效率约为（）。",
      "options": {
        "A": "80%",
        "B": "83%",
        "C": "87%",
        "D": "91%"
      },
      "answer": [
        "A"
      ],
      "explanation": "OSI 参考模型共 7 层，除了物理层和应用层，中间 5 层每层引入 20B 开销，共增加 100B 开销。原始数据为 400B，总传输量为 500B，故传输效率为 $400B \\div 500B = 80\\%$ .",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_35",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "【2019 统考真题】OSI 参考模型的第 5 层（自下而上）完成的主要功能是（）。",
      "options": {
        "A": "差错控制",
        "B": "路由选择",
        "C": "会话管理",
        "D": "数据表示转换"
      },
      "answer": [
        "C"
      ],
      "explanation": "OSI 参考模型自下而上的第 5 层为会话层，主要功能是管理和协调不同主机上各种进程之间的通信（对话），即负责建立、管理和终止应用程序间的会话。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_36",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "【2020 统考真题】右图描述的协议要素是（）。 I. 语法 II. 语义 III. 时序",
      "options": {
        "A": "仅 I",
        "B": "仅 II",
        "C": "仅 III",
        "D": "I、II 和 III"
      },
      "answer": [
        "C"
      ],
      "explanation": "协议由语法、语义和时序三要素组成：语法规定数据格式，语义定义控制信息含义，时序规定交互顺序。题图中发送方与接收方按特定顺序交互，体现了协议的时序要素。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_37",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "【2021 统考真题】在 TCP/IP 模型中，由传输层相邻的下一层实现的主要功能是（）。 ![](images/4949462a87f370d58f726c5689d67c0d8181f80146d7808edb9ff9fb8ffa4cb5.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"发送方\"] --> B[\"接收方\"] B --> C[\"时间\"] C --> A A --> D[\"接收方\"] D --> E[\"时间\"] ``` </details>",
      "options": {
        "A": "对话管理",
        "B": "路由选择",
        "C": "端到端报文段传输",
        "D": "节点到节点流量控制"
      },
      "answer": [
        "B"
      ],
      "explanation": "在 TCP/IP 模型中，传输层的下一层是网际层，其主要功能是为分组选择路由并转发，即实现路由选择；它提供无连接、不可靠的尽力而为的服务，不保证有序交付。端到端报文段传输属于传输层功能，对话管理由应用层处理。TCP/IP 网际层不提供节点到节点的流量控制功能。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_1-2-4_38",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "计算机网络体系结构",
      "section": "1.2.4",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "【2022 统考真题】在 ISO/OSI 参考模型中，实现两个相邻节点间流量控制功能的是（）。",
      "options": {
        "A": "物理层",
        "B": "数据链路层",
        "C": "网络层",
        "D": "传输层"
      },
      "answer": [
        "B"
      ],
      "explanation": "在 OSI 参考模型中，流量控制功能在多个层次存在：数据链路层实现相邻节点之间的流量控制，网络层关注整个网络中的拥塞与流量调节，传输层则提供端到端的流量控制。本题明确要求“两个相邻节点间”的流量控制，因此由数据链路层实现。",
      "source_file": "wiki/sources/计算机网络/chapters/ch01-第1章-计算机网络体系结构.md"
    },
    {
      "id": "计算机网络_2-1-4_05",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "在数据通信中使用曼彻斯特编码的主要原因是（）。",
      "options": {
        "A": "实现对通信过程中传输错误的恢复",
        "B": "实现对通信过程中收发双方的数据同步",
        "C": "提高对数据的有效传输速率",
        "D": "提高传输信号的抗干扰能力"
      },
      "answer": [
        "B"
      ],
      "explanation": "曼彻斯特编码用码元中间的电平跳变来表示每个比特，可方便收发双方根据跳变来同步时钟，而不需要额外的时钟信号，选项 B 正确。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_06",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "不含同步信息的编码是（）。 I. 非归零编码 II. 曼彻斯特编码 III. 差分曼彻斯特编码",
      "options": {
        "A": "仅 I",
        "B": "仅 II",
        "C": "仅 II、III",
        "D": "I、II、III"
      },
      "answer": [
        "A"
      ],
      "explanation": "非归零编码是最简单的一种编码方式，它用低电平表示 0，用高电平表示 1，或者采用相反的表示方式。因为各个码元之间并没有间隔标志，所以不包含同步信息。曼彻斯特编码和差分曼彻斯特编码都将每个码元分成两个相等的时间间隔，码元的中间跳变也作为收发双方的同步信息，因此不需要额外的同步信息，实际应用较多，但它们所占的频带宽度是原始基带宽度的 2 倍。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_07",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "某信道的波特率为 1000Baud，若令其数据传输速率达到 4kb/s，则一个信号码元所取的有效离散值个数为（）。",
      "options": {
        "A": "2",
        "B": "4",
        "C": "8",
        "D": "16"
      },
      "answer": [
        "D"
      ],
      "explanation": "比特率 = 波特率 $\\times \\log_{2} n$ ，若一个码元含有 k 比特的信息量，则表示该码元所需的不同离散值为 $n = 2^{k}$ 个。波特率数值上等于比特率/每符号所含的比特数，因此每码元所含比特数 = 4000/1000 = 4，有效离散值的个数为 $2^{4} = 16$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_08",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下图是某比特串的曼彻斯特编码信号波形，则该比特串为（）。 ![](images/38dc01bd70ab923c4ed9f15215496f930051636a1ded93687f29124064e86d1b.jpg) <details> <summary>natural_image</summary> Pure electrical circuit lines without any symbols </details>",
      "options": {
        "A": "0011 0110",
        "B": "1010 1101",
        "C": "0101 0010",
        "D": "1100 0101"
      },
      "answer": [
        "A"
      ],
      "explanation": "在曼彻斯特编码中，可用向下跳变表示 1，向上跳变表示 0，或者采用相反的表示。因此，该比特串可能是 0011 0110 或 1100 1001，因此选择选项 A。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_09",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "已知某信道的信息传输速率为 $64\\mathrm{kb / s}$ ，一个载波信号码元有4个有效离散值，则该信道的波特率为（）。",
      "options": {
        "A": "16kBaud",
        "B": "32kBaud",
        "C": "64kBaud",
        "D": "128kBaud"
      },
      "answer": [
        "B"
      ],
      "explanation": "一个码元若取 $2^{n}$ 个不同的离散值，则含有 $n$ 比特的信息量。本题中，一个码元所含的信息量为2比特，因为数值上波特率 $=$ 比特率/每符号所含的比特数，所以波特率为 $(64 / 2)\\mathrm{k} = 32\\mathrm{kBaud}$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_10",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "有一个无噪声的 8kHz 信道，每个信号包含 8 级，每秒采样 24k 次，那么可以获得的最大传输速率是（）。",
      "options": {
        "A": "24kb/s",
        "B": "32kb/s",
        "C": "48kb/s",
        "D": "72kb/s"
      },
      "answer": [
        "C"
      ],
      "explanation": "无噪声的信号应该满足奈奎斯特定理，即最大数据传输速率 $=2W\\log_{2}V$ 比特/秒。将题中的数据代入，得到答案是48kb/s。注意题中给出的每秒采样24kHz是无意义的，因为超过了波特率的上限 $2W=16kBaud$ ，所以选项D是错误答案。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_11",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "对于某带宽为 4000Hz 的低通信道，采用 16 种不同的物理状态来表示数据。按照奈奎斯特定理，信道的最大传输速率是（）。",
      "options": {
        "A": "4kb/s",
        "B": "8kb/s",
        "C": "16kb/s",
        "D": "32kb/s"
      },
      "answer": [
        "D"
      ],
      "explanation": "根据奈奎斯特定理，题中 $W = 4000\\mathrm{Hz}$ ，最大码元传输速率 $= 2W = 8000\\mathrm{Baud}$ ，16种不同的物理状态可以表示 $\\log_216 = 4$ 比特的数据，因此信道的最大传输速率 $= 8000\\times 4 = 32\\mathrm{kb / s}$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_12",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "二进制信号在信噪比为 127:1 的 4kHz 信道上传输，最大数据传输速率可以达到（）。",
      "options": {
        "A": "28000b/s",
        "B": "8000b/s",
        "C": "4000b/s",
        "D": "无限大"
      },
      "answer": [
        "B"
      ],
      "explanation": "根据香农定理，最大数据率 $= W\\log_2(1 + S / N) = 4000\\times \\log_2(1 + 127) = 28000\\mathrm{b / s}$ ，容易误选A。注意题中“二进制信号”的限制后，依据奈奎斯特定理，最大数据传输速率 $= 2H\\log_2V = 2\\times 4000\\times \\log_22 =$ $8000\\mathrm{b / s}$ ，两个上限中取小者，因此答案为B。\n\n# 注意\n\n若给出了码元与比特数之间的关系，则需受两个公式的共同限制。关于香农定理和奈奎斯特定理的比较，请参考本章中的疑难点。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_13",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "电话系统的典型参数是信道带宽为 3000Hz，信噪比为 30dB，该系统的最大数据传输速率为（）。",
      "options": {
        "A": "3kb/s",
        "B": "6kb/s",
        "C": "30kb/s",
        "D": "64kb/s"
      },
      "answer": [
        "C"
      ],
      "explanation": "信噪比 S/N 常用分贝（dB）表示，数值上等于 $10\\log_{10}(S/N)\\mathrm{dB}$ 。依题意有 $30=10\\log_{10}(S/N)$ ，解出 S/N=1000。根据香农定理，最大数据传输速率 $=3000\\log_{2}(1+S/N)\\approx30\\mathrm{kb/s}$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_14",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "一个信道的信号功率是 $0.14\\mathrm{W}$ ，噪声功率是 $0.02\\mathrm{W}$ ，频率范围为 $3.5 \\sim 3.9\\mathrm{MHz}$ ，则该信道的最高数据传输速率是（）。",
      "options": {
        "A": "1.2Mb/s",
        "B": "2.4Mb/s",
        "C": "11.7Mb/s",
        "D": "23.4Mb/s"
      },
      "answer": [
        "A"
      ],
      "explanation": "带宽受限且有噪声的信道应使用香农定理。最高数据传输速率 $= W\\log_2(1 + S / N)$ ，其中，信道带\n\n宽 W = 3.9 - 3.5 = 0.4MHz，信号功率 S = 0.14W，噪声功率 N = 0.02W，代入得 1.2Mb/s。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_15",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "采用 8 种相位，每种相位各有两种幅度的 QAM 调制方法，在 1200Baud 的信息传输速率下能达到的数据传输速率为（）。",
      "options": {
        "A": "2400b/s",
        "B": "3600b/s",
        "C": "9600b/s",
        "D": "4800b/s"
      },
      "answer": [
        "D"
      ],
      "explanation": "每个信号有 $8 \\times 2 = 16$ 种变化，每个码元携带 $\\log_{2}16 = 4$ 比特信息，则信息传输速率为 $1200 \\times 4 = 4800b/s$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_16",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "一个信道每 $1 / 8\\mathrm{s}$ 采样一次，传输信号共有16种变化状态，最大数据传输速率是（）。",
      "options": {
        "A": "16b/s",
        "B": "32b/s",
        "C": "48b/s",
        "D": "64b/s"
      },
      "answer": [
        "B"
      ],
      "explanation": "由题意知采样率为 $8\\mathrm{Hz}$ 。有16种变化状态的信号可携带4比特的数据，因此最大数据传输速率为 $8\\times 4 = 32\\mathrm{b / s}$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_17",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "某信道的带宽为 $10\\mathrm{MHz}$ ，信噪比为 $30\\mathrm{dB}$ ，采用 QAM-32 调制方案。若将带宽提高到 $20\\mathrm{MHz}$ ，信噪比提高到 $40\\mathrm{dB}$ ，则信道的极限数据传输速率大约提高到原来的（）倍。",
      "options": {
        "A": "2",
        "B": "2.2",
        "C": "2.4",
        "D": "2.6"
      },
      "answer": [
        "A"
      ],
      "explanation": "本题给出了信道带宽、信噪比和编码方式，需要综合奈氏准则与香农定理的限制。在原始条件下：香农定理的极限速率为 $10 \\times \\log_2 1001 \\approx 100\\mathrm{Mb/s}$ （注意，这里的信噪比应使用无单位记法），奈式准则的极限速率为 $2 \\times 10 \\times \\log_2 32 = 100\\mathrm{Mb/s}$ 。带宽和信噪比提升后：香农定理的极限速率为 $20 \\times \\log_2 10001 \\approx 260\\mathrm{Mb/s}$ ，奈式准则的极限速率为 $2 \\times 20 \\times \\log_2 32 = 200\\mathrm{Mb/s}$ 。由于实际速率受限于二者中的较小值，故提升后的极限速率为 $200\\mathrm{Mb/s}$ ，约为原来的2倍。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_18",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2009 统考真题】在无噪声的情况下，若某个通信链路的带宽为 3kHz，采用 4 个相位，每个相位具有 4 种幅度的 QAM 调制技术，则该通信链路的最大数据传输速率是（）。",
      "options": {
        "A": "12kb/s",
        "B": "24kb/s",
        "C": "48kb/s",
        "D": "96kb/s"
      },
      "answer": [
        "B"
      ],
      "explanation": "采用 4 个相位，每个相位有 4 种幅度的 QAM 调制，共有 16 种信号状态，每个码元可携带 $\\log_{2}16 = 4$ 比特信息。根据奈奎斯特定理，最大传输速率为 $2W \\times \\log_{2}V = 2 \\times 3k \\times 4 = 24kb/s$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_19",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2011 统考真题】若某个通信链路的数据传输速率为 2400b/s，采用 4 个相位调制，则该链路的波特率是（）。",
      "options": {
        "A": "600Baud",
        "B": "1200Baud",
        "C": "4800Baud",
        "D": "9600Baud"
      },
      "answer": [
        "B"
      ],
      "explanation": "波特率（B）与数据传输速率（C）的关系为 $C=B\\times\\log_{2}V$ ，其中 V 为码元可取的离散值个数。采用 4 种相位调制，即 V=4，每个码元携带 $\\log_{2}V=\\log_{2}4=2$ 比特信息。因此，波特率 = 数据传输速率/每个码元所含的比特数 = 2400/2 = 1200 波特。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_20",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2013 统考真题】下图为 10Base-T 网卡接收到的信号波形，则该网卡收到的比特串是（）。 ![](images/dcf7af49029764a02e5aed0779e120d44acb7a11aa491f1fe4caa1fedb9624bc.jpg) <details> <summary>natural_image</summary> Pure electrical circuit lines without any symbols </details>",
      "options": {
        "A": "0011 0110",
        "B": "1010 1101",
        "C": "0101 0010",
        "D": "1100 0101"
      },
      "answer": [
        "A"
      ],
      "explanation": "10Base-T 以太网采用曼彻斯特编码：每个码元中间有一次跳变，从低到高表示 0，从高到低表示 1（或采用相反的约定，但需保持一致）。图示波形对应的比特串可为 0011 0110 或 1100 1001。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_21",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2014 统考真题】在下列因素中，不影响信道数据传输速率的是（）。",
      "options": {
        "A": "信噪比",
        "B": "频率带宽",
        "C": "调制速率",
        "D": "信号传播速度"
      },
      "answer": [
        "D"
      ],
      "explanation": "由香农定理可知，信道极限数据传输速率受信噪比和频率带宽限制；调制速率（波特率）也直接影响数据速率。而信号传播速率仅决定传播时延，与传输速率无关，不影响信道数据传输速率。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_22",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2015 统考真题】使用两种编码方案对比特流 01100111 进行编码的结果如下图所示，编码 1 和编码 2 分别是（）。 ![](images/b88a38f4336b70a39b0ec519654ffe50ca2cd309c570ed679c186a682d387a33.jpg) <details> <summary>text_image</summary> 比特流 0 1 1 0 0 1 1 1 编码1 编码2 </details>",
      "options": {
        "A": "NRZ 编码和曼彻斯特编码",
        "B": "NRZ 编码和差分曼彻斯特编码",
        "C": "NRZI 编码和曼彻斯特编码",
        "D": "NRZI 编码和差分曼彻斯特编码"
      },
      "answer": [
        "A"
      ],
      "explanation": "编码 1 为典型的 NRZ 编码：高电平表示 1，低电平表示 0，无跳变。编码 2 在每个比特周期中间均有跳变，高-低表示 1，低-高表示 0，符合曼彻斯特编码特征。差分曼彻斯特编码在比特周期起始处有跳变表示 0，无跳变表示 1，与图不符。因此，编码 1 和编码 2 分别为 NRZ 编码和曼彻斯特编码。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_23",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2016 统考真题】如下图所示, 若连接 R2 和 R3 链路的频带宽度为 8kHz, 信噪比为 30dB, 该链路实际数据传输速率约为理论最大数据传输速率的 50%, 则该链路的实际数据传输速率约为 ( )。 ![](images/2c103e7fd1e27750a78cfb9de86010ebea7ce251c4d74c48c33a920169c63c8e.jpg)",
      "options": {
        "A": "8kb/s",
        "B": "20kb/s",
        "C": "40kb/s",
        "D": "80kb/s"
      },
      "answer": [
        "C"
      ],
      "explanation": "采用分贝（dB）记法时，信噪比 $= 10\\log_{10}(S / N) = 30$ ，解得 $S / N = 1000$ 。由香农定理可知，理论极限速率 $= W\\times \\log_2(1 + S / N) = 8k\\times \\log_2(1 + 1000)$ 。由于 $2^{10} = 1024\\approx 1001$ ，故 $\\log_2(1001)\\approx 10$ 理论速率 $\\approx 8\\times 10 = 80\\mathrm{kb / s}$ 。实际速率为理论值的 $50\\%$ ，即 $80\\times 50\\% = 40\\mathrm{kb / s}$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_24",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2017 统考真题】若信道在无噪声情况下的极限数据传输速率不小于信噪比为 30dB 条件下的极限数据传输速率，则信号状态数至少是（）。",
      "options": {
        "A": "4",
        "B": "8",
        "C": "16",
        "D": "32"
      },
      "answer": [
        "D"
      ],
      "explanation": "设信号状态数为 V。无噪声信道的极限速率（奈奎斯特定理）为 $2W\\log_{2}V$ ；有噪声信道的极限速率（香农定理）为 $W\\log_{2}(1+S/N)$ 。已知信噪比为 30dB，可得 S/N=1000，要求： $2W\\log_{2}V \\geqslant W\\log_{2}(1001) \\approx W \\times 10$ ，化简得 $\\log_{2}V \\geqslant 5$ ，求得 $V \\geqslant 32$ 。因此，信号状态数至少为 32。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_25",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2021 统考真题】下图为一段差分曼彻斯特编码信号波形，该编码的二进制串是（）。 ![](images/a9a1cea2af96339a60fb3502ea3e90dd730e5a3ce3390ba0a395f33d249bdcb6.jpg) <details> <summary>natural_image</summary> Pure electrical circuit lines without any symbols </details>",
      "options": {
        "A": "1011 1001",
        "B": "1101 0001",
        "C": "0010 1110",
        "D": "1011 0110"
      },
      "answer": [
        "A"
      ],
      "explanation": "差分曼彻斯特编码规则：每个比特周期起始处有电平跳变表示0，无电平跳变表示1。第1位无跳变（1），第2位有跳变（0），第3位无跳变（1），第4位无跳变（1），第5位有跳变（0），第6位有跳变（0），第7位有跳变（0），第8位无跳变（1），得到比特串为1011 1001。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_26",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2022 统考真题】在一条带宽为 200kHz 的无噪声信道上，若采用 4 个幅值的 ASK 调制，则该信道的最大数据传输速率是（）。",
      "options": {
        "A": "200kb/s",
        "B": "400kb/s",
        "C": "800kb/s",
        "D": "1600kb/s"
      },
      "answer": [
        "C"
      ],
      "explanation": "在 ASK 调制中，4 个幅值表示 4 种信号状态（V=4），每个码元携带 $\\log_{2}4=2$ 比特。根据奈奎斯特定理，最大数据传输速率 $=2W\\log_{2}V$ ，已知带宽 W=200kHz，代入得 800kb/s。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_27",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2023 统考真题】某个无噪声理想信道带宽为 4MHz，采用 QAM 调制，若该信道的最大数据传输速率是 48Mb/s，则该信道采用的 QAM 调制方案是（）。",
      "options": {
        "A": "QAM-16",
        "B": "QAM-32",
        "C": "QAM-64",
        "D": "QAM-128"
      },
      "answer": [
        "C"
      ],
      "explanation": "由奈奎斯特定理：最大数据传输速率 $=2W\\log_{2}V$ ，V 表示码元的信号状态数。已知带宽 W=4MHz，最大速率为 48Mb/s，代入得 $\\log_{2}V=6$ ，求得 $V=2^{6}=64$ ，即采用 QAM-64 调制。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-1-4_28",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.1.4",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2024 统考真题】在下列二进制数字调制方法中，需要 2 个不同频率载波的是（）。",
      "options": {
        "A": "ASK",
        "B": "PSK",
        "C": "FSK",
        "D": "DPSK"
      },
      "answer": [
        "C"
      ],
      "explanation": "FSK（Frequency Shift Keying，频移键控）使用两个不同频率的载波分别表示0和1，是唯一需要两个载波频率的二进制调制方式。ASK（Amplitude Shift Keying，幅移键控）改变幅度，PSK（Phase Shift Keying，相移键控）和DPSK（差分相移键控）改变相位，均使用单一频率载波。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-2-3_11",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2012统考真题】在物理层接口特性中，用于描述完成每种功能的事件发生顺序的是（）。",
      "options": {
        "A": "机械特性",
        "B": "功能特性",
        "C": "过程特性",
        "D": "电气特性"
      },
      "answer": [
        "C"
      ],
      "explanation": "物理层的接口特性包括机械、电气、功能和过程四类。其中，过程特性用于描述完成各种功能时事件发生的先后顺序，即规定各操作（如建立连接、传输数据、释放线路等）的时序关系。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-2-3_12",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2018 统考真题】下列选项中，不属于物理层接口规范定义范畴的是（）。",
      "options": {
        "A": "接口形状",
        "B": "引脚功能",
        "C": "物理地址",
        "D": "信号电平"
      },
      "answer": [
        "C"
      ],
      "explanation": "物理层接口规范涵盖四类特性：机械特性（如接口形状、尺寸）、电气特性（如信号电平、电压范围）、功能特性（如引脚功能、电平含义）和过程特性（事件发生顺序）。而物理地址（MAC 地址）用于标识数据链路层的设备，属于数据链路层的范畴，不在物理层定义范围内。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-3-3_05",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.3.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "用集线器连接的工作站集合（）。",
      "options": {
        "A": "同属一个冲突域，也同属一个广播域",
        "B": "不同属一个冲突域，但同属一个广播域",
        "C": "不同属一个冲突域，也不同属一个广播域",
        "D": "同属一个冲突域，但不同属一个广播域"
      },
      "answer": [
        "A"
      ],
      "explanation": "集线器的功能是将从一个端口收到的数据通过所有其他端口转发出去。集线器在物理层上扩大了网络的覆盖范围，但无法解决冲突域（第二层交换机可解决）与广播域（第三层交换机可解决）的问题，而且增大了冲突的范围。注意，冲突域和广播域的概念涉及后面章节的内容。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-3-3_06",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.3.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "中继器可以用来连接（）。",
      "options": {
        "A": "不同类型的局域网",
        "B": "广域网和局域网",
        "C": "不同介质的局域网",
        "D": "不同协议的局域网"
      },
      "answer": [
        "C"
      ],
      "explanation": "中继器工作在物理层，无法对帧进行解封与重新封装（无法实现协议转换），其功能仅限于对接收到的帧对应的二进制串进行无差别转发，因此无法连接不同链路层协议的网段。中继器可以连接不同介质的局域网，如光纤和双绞线，只要它们具有相同协议。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-3-3_07",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.3.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "若有 5 台计算机连接到 $10\\mathrm{Mb / s}$ 的集线器上，则每台计算机分得的平均带宽至多为（）。",
      "options": {
        "A": "2Mb/s",
        "B": "5Mb/s",
        "C": "10Mb/s",
        "D": "50Mb/s"
      },
      "answer": [
        "A"
      ],
      "explanation": "集线器以广播的方式将信号从除输入端口外的所有端口输出，因此任意时刻只能有一个端口的有效数据输入。理想情况（无冲突）下，每秒通过集线器的数据量都是 10Mb，假设 5 台计算机占用相同大小的时间片来收发数据，则平均带宽的上限为 $10Mb/s \\div 5 = 2Mb/s$ 。若有多台计算机同时发送数据，则会导致每台计算机实际获得的平均带宽低于 2Mb/s。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-3-3_08",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.3.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "当集线器的一个端口收到数据后，将其（）。",
      "options": {
        "A": "从所有端口广播出去",
        "B": "从除输入端口外的所有端口广播出去",
        "C": "根据目的地址从合适的端口转发出去",
        "D": "随机选择一个端口转发出去"
      },
      "answer": [
        "B"
      ],
      "explanation": "集线器没有寻址功能，一个端口接收到数据信号后，从其他所有端口转发出去。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_2-3-3_09",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "物理层",
      "section": "2.3.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于中继器和集线器的说法中，不正确的是（）。",
      "options": {
        "A": "二者都工作在 OSI 参考模型的物理层",
        "B": "二者都可以对信号进行放大和整形",
        "C": "通过中继器或集线器互连的网段数量不受限制",
        "D": "中继器通常只有 2 个端口，而集线器通常有 4 个或更多端口"
      },
      "answer": [
        "C"
      ],
      "explanation": "中继器和集线器均工作在物理层，集线器本质上是一个多端口中继器，它们都能对信号进行放大和整形（再生=放大+整形）。因为中继器不仅传送有用信号，还传送噪声和冲突信号，因此互相串联的个数只能在规定的范围内进行，否则网络将不可用。注意“5-4-3规则”。",
      "source_file": "wiki/sources/计算机网络/chapters/ch02-第2章-物理层.md"
    },
    {
      "id": "计算机网络_3-3-3_02",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于奇偶检验码特征的描述中，正确的是（）。",
      "options": {
        "A": "只能检查出奇数个比特的错误",
        "B": "能检查出任意比特的错误",
        "C": "比 CRC 检验更可靠",
        "D": "只能检查出偶数个比特的错误"
      },
      "answer": [
        "B"
      ],
      "explanation": "考点追踪 GBN协议的工作原理（2009）\n\n在后退 N 帧协议中，发送方可在未收到确认帧的情况下，连续发送多个序号落在发送窗口内的数据帧。后退 N 帧的含义是：若某个已发送的数据帧因超时未收到确认而被判定为丢失或出错，则发送方不仅需要重传该帧，还需重传其后所有已发送但未被确认的帧。这一机制的前提是：接收方仅按序接收数据帧，任何失序到达的帧都将被丢弃。\n\n考点追踪 ▶ GBN 协议的累积确认机制（2017）\n\n如图 3.11 所示，发送方向接收方连续发送数据帧，发送完 0 号帧后，可继续发送 1 号、2 号等后续帧。其通常仅为最早未确认的帧维护一个超时计时器，当该帧被确认后，计时器移至下一个未确认帧。由于连续发送了多个帧，确认帧必须明确指示所确认的帧序号。为降低开销，GBN 协议采用累积确认机制：接收方无须对每个正确接收的帧立即返回确认，而可在连续收到多个正确帧后，仅对其中序号最大的帧发送一个确认。具体而言，ACKn 表示接收方已正确收到 n 号帧及之前的所有帧，下一次期望接收的是 $n+1$ 号帧（若序号回绕，则可能是 0 号帧）。\n\n由于接收方仅按序接收帧，当某帧出错或丢失时，其后所有正确到达的帧即使无误，也会被丢弃。例如，在图3.11中，尽管在出错的2号帧之后又收到了6个正确的数据帧，接收方仍必须将它们全部丢弃。此外，为了防止确认帧丢失，接收方可以重复发送最近一次的确认帧（如ACK1），促使发送方尽快感知当前的接收状态。2号帧的计时器超时后，发送方将从该帧开始，重传窗口内所有未被确认的帧（2号及之后的帧）。\n\n![](images/73917edb39e0c325592187c5ad6a9e95e1ec2126fbdbe758f85dd7661ded0dd2.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"发送方 0\"] -->|ACK0| B[\"接收方 0\"]\n    C[\"发送方 1\"] -->|ACK1| D[\"接收方 1\"]\n    E[\"发送方 2\"] -->|ACK1| F[\"接收方 E\"]\n    G[\"发送方 3\"] -->|ACK1| H[\"接收方 D\"]\n    I[\"发送方 4\"] -->|ACK1| J[\"接收方 D\"]\n    K[\"发送方 5\"] -->|ACK1| L[\"接收方 D\"]\n    M[\"发送方 6\"] -->|ACK1| N[\"接收方 D\"]\n    O[\"发送方 7\"] -->|ACK1| P[\"接收方 D\"]\n    Q[\"发送方 8\"] -->|ACK1| R[\"接收方 D\"]\n    S[\"超时间隔\"] --> T[\"被数据链路层丢弃的帧\"]\n    U[\"出错\"] --> V[\"被数据链路层丢弃的帧\"]\n    W[\"ACK2\"] --> X[\"ACK3\"] --> Y[\"ACK4\"] --> Z[\"ACK5\"] --> AA[\"ACK6\"] --> AB[\"ACK7\"]\n```\n</details>\n\n图 3.11 GBN 协议的工作原理：对出错数据帧的处理\n\n考点追踪 ▶ GBN 协议的滑动窗口机制（2012、2015、2017）\n\n若采用 n 比特对帧编号，则发送窗口 $W_{T}$ 应满足 $1 < W_{T} \\leqslant 2^{n} - 1$ 。若 $W_{T} > 2^{n} - 1$ ，而这可能导致接收方无法区分新发送的帧与因序号回绕而重复出现的旧帧（参见章末的疑难点 1）。\n\nGBN 协议的接收窗口大小固定为 $W_{R}=1$ ，这保证了帧的严格按序接收。\n\n不难看出，GBN 协议一方面通过连续发送多个帧显著提高了信道利用率；另一方面，在发生差错时却必须重传大量已正确到达的帧（仅因这些帧前面有一帧出错），从而造成带宽浪费。因此，当信道误码率较高时，GBN 协议的性能可能反而不如停止-等待协议。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-3-3_07",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "要发送的数据是 1101 0110 11，采用 CRC 检验，生成多项式是 10011，那么最终发送的数据应是（）。",
      "options": {
        "A": "1101 0110 1110 10",
        "B": "1101 0110 1101 10",
        "C": "1101 0110 1111 10",
        "D": "1111 0011 0111 00"
      },
      "answer": [
        "C"
      ],
      "explanation": "假设一个帧有 m 位，其对应的多项式为 $G(x)$ ，则计算冗余码的步骤如下：\n\n① 加 0。假设 $G(x)$ 的阶为 r，在帧的低位端加上 r 个 0。  \n② 模 2 除。利用模 2 除法，用 $G(x)$ 对应的数据串除①中计算出的数据串，得到的余数即为冗余码（共 $r$ 位，前面的 0 不可省略）。\n\n多项式以 2 为模运算。按照模 2 运算规则，加法不进位，减法不借位，它刚好是异或操作。乘除法类似于二进制运算，只是在做加减法时按模 2 规则进行。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-3-3_08",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "【2023 统考真题】若甲向乙发送数据时采用 CRC 检验，生成多项式为 $G(X)=X^{4}+X+1$ （G=10011），则乙方接收到比特串（）时，可以断定其在传输过程中未发生错误。",
      "options": {
        "A": "10111 0000",
        "B": "10111 0100",
        "C": "10111 1000",
        "D": "10111 1100"
      },
      "answer": [
        "D"
      ],
      "explanation": "观察选项：除后4位外，前5位都为10111，可知发送方发送的数据部分为10111，列式求得余数部分为1100，因此发送方发送的帧串为10111 1100。\n\n$$\n\\begin{array}{r l} & 1 0 0 1 1 \\sqrt {\\frac {1 0 1 0 0}{1 0 1 1 1 0 0 0 0}} \\\\ & \\quad \\frac {1 0 0 1 1}{1 0 0 0 0} \\\\ & \\quad \\frac {1 0 0 1 1}1 1 0 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \\\\ & \\end{array}\n$$",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-3-3_09",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.3.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "【2025 统考真题】某差错编码的编码集为{1001 1010, 0101 1100, 1111 0000, 0000 1111}，该差错编码的检错和纠错能力是（）。",
      "options": {
        "A": "不超过 2 位错的 100% 检错、不超过 1 位错的纠错",
        "B": "不超过 2 位错的 100% 检错、不超过 2 位错的纠错",
        "C": "不超过 3 位错的 100% 检错、不超过 1 位错的纠错",
        "D": "不超过 3 位错的 100% 检错、不超过 2 位错的纠错"
      },
      "answer": [
        "C"
      ],
      "explanation": "首先计算该编码集的码距：对四个码字两两比较，任意两个码字的码距至少为4，故该编码集的码距 $d_{\\mathrm{min}} = 4$ 。根据差错控制理论，若编码集的码距为 $d$ ，则可检测不超过 $d - 1$ 位错误，能纠正不超过 $(d - 1)/2$ 位错误。因此该编码集最多能检测3位错误、纠正1位错误。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_01",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "multiple_choice",
      "question": "下列关于停止-等待协议的描述中，正确的是（）。",
      "options": {
        "A": "发送窗口和接收窗口的尺寸都为 1",
        "B": "最大的信道利用率有可能达到 100%",
        "C": "适合于往返时间比较长的信道",
        "D": "接收方可以不按序接收"
      },
      "answer": [
        "A",
        "A"
      ],
      "explanation": "ALOHA 协议分为纯 ALOHA 协议和时隙 ALOHA 协议两种。\n\n# （1）纯 ALOHA 协议\n\n纯 ALOHA 协议的基本思想：当总线形网络中的任一站点需要发送数据时，可立即发送，无须事先检测信道状态。若在一段时间内未收到确认，则认为传输过程中发生了冲突。此时，该站点需等待一段随机时间后重传，直至发送成功。\n\n图3.19展示了纯ALOHA协议的工作原理。假设所有帧长度固定，帧长不用比特数表示，而用发送该帧所需的时间表示，图中以 $T_{0}$ 表示这一时间。\n\n![](images/b82b0a4d349652455a80d6baf47eea1dc01152b35b90ae454b73987cdc7bdc8a.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph LR\n    A[\"站1 发送成功\"] --> B[\"站2 冲突重发\"]\n    B --> C[\"站N-1 冲突重发\"]\n    C --> D[\"站N 发送成功\"]\n    D --> E[\"帧到达\"]\n    \n    subgraph 时间轴\n        F[\" t \"] --> G[\" t \"]\n        H[\" T₀ \"] --> I[\" T₀ \"]\n        J[\" T₀ \"] --> K[\" T₀ \"]\n        L[\" T₀ \"] --> M[\" T₀ \"]\n        N[\" T₀ \"] --> O[\" T₀ \"]\n        P[\" t \"] --> Q[\" t \"]\n    end\n    \n    style A fill:#f9f,stroke:#333\n    style B fill:#f9f,stroke:#333\n    style C fill:#f9f,stroke:#333\n    style D fill:#f9f,stroke:#333\n    style E fill:#f9f,stroke:#333\n    style F fill:#ccf,stroke:#333\n    style G fill:#ccf,stroke:#333\n    style H fill:#ccf,stroke:#333\n    style I fill:#ccf,stroke:#333\n    style J fill:#ccf,stroke:#333\n    style K fill:#ccf,stroke:#333\n    style L fill:#ccf,stroke:#333\n    style M fill:#ccf,stroke:#333\n    style N fill:#ccf,stroke:#333\n    style O fill:#ccf,stroke:#333\n    style P fill:#ccf,stroke:#333\n    style Q fill:#ccf,stroke:#333\n    style R fill:#ccf,stroke:#333\n    style S fill:#ccf,stroke:#333\n    style T fill:#ccf,stroke:#333\n    style U fill:#ccf,stroke:#333\n    style V fill:#ccf,stroke:#333\n    style W fill:#ccf,stroke:#333\n    style X fill:#ccf,stroke:#333\n    style Y fill:#ccf,stroke:#333\n    style Z fill:#ccf,stroke:#333\n```\n</details>\n\n图 3.19 一个纯 ALOHA 协议的工作原理\n\n在图 3.19 的示例中，站 1 发送帧 1 时，其他站点均未发送数据，因此帧 1 成功传输。但随后站 2 和站 N-1 发送的帧 2 与帧 3 在时间上部分重叠，发生冲突。发生冲突的各站必须重传，但不能立即重传（否则会再次冲突），而是等待一段随机时间后再尝试。若重传仍冲突，则重复此过程，直至成功。图中其他帧的发送情况为：帧 4 成功，帧 5 与帧 6 发生冲突。\n\n由于冲突概率较高，该协议的吞吐量很低。为克服这一缺点，提出了时隙 ALOHA 协议。\n\n# (2) 时隙 ALOHA 协议\n\n时隙 ALOHA 协议将时间划分为等长的时隙（Slot），并要求所有站点同步时钟。站点只能在每个时隙的起始时刻发送帧，且一帧的发送时间必须小于或等于一个时隙长度。这种约束减少了发送的随意性，从而降低了冲突概率，提高了信道利用率。\n\n图 3.20 展示了两个站点的时隙 ALOHA 协议工作原理。每个帧到达后，通常需在缓存中等待不足一个时隙的时间，才能在下一个时隙开始时发送。若在一个时隙内有两个或更多帧待发，则它们将在下一可用时隙同时发送，导致冲突。冲突后的重传策略与纯 ALOHA 协议类似。\n\n![](images/07271d0c9596d781d8e7dc0be7bd91368617612e6f9301f55bff670be99c37fa.jpg)\n\n<details>\n<summary>text_image</summary>\n\n站 1\n帧到达\nT₀\n站 2\n帧到达\nT₀\n时隙\n冲突重传\n帧到达\n冲突重传\nt\nt\n</details>\n\n图 3.20 两个站的时隙 ALOHA 协议的工作原理",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md",
      "hidden": true,
      "hidden_reason": "duplicated_answer_and_mismatched_explanation"
    },
    {
      "id": "计算机网络_3-4-3_02",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "multiple_choice",
      "question": "下列情况中，会使停止-等待协议的效率变得很低的是（）。",
      "options": {
        "A": "当源主机和目的主机之间的距离很近而且数据传输速率很高时",
        "B": "当源主机和目的主机之间的距离很远而且数据传输速率很高时",
        "C": "当源主机和目的主机之间的距离很近而且数据传输速率很低时",
        "D": "当源主机和目的主机之间的距离很远而且数据传输速率很低时"
      },
      "answer": [
        "C",
        "A"
      ],
      "explanation": "考点追踪 基本CSMA协议的概念（2013）\n\nALOHA 协议网络的冲突概率较高。若每个站点在发送前先监听信道，仅在信道空闲时才发送，则可显著降低冲突概率，提高信道利用率。载波监听多路访问（Carrier Sense Multiple Access, CSMA）协议正是基于这一思想，在 ALOHA 协议基础上引入了载波监听机制。\n\n根据监听策略及信道忙时的处理方式不同，CSMA协议可分为以下三种类型。\n\n# （1）1-坚持 CSMA 协议\n\n1-坚持 CSMA 协议的基本思想：站点欲发送数据时，先监听信道；若信道空闲，则立即发送；若信道忙，则持续监听，直至信道变为空闲。“1-坚持”中的“1”表示信道空闲时，以概率 1 立即发送，“坚持”指信道忙时持续监听。\n\n# (2) 非坚持 CSMA 协议\n\n非坚持 CSMA 协议的基本思想：站点欲发送数据时，先监听信道；若信道空闲，则立即发送；若信道忙，则不再监听，而是等待一段随机时间后重新尝试监听。该策略避免了多个站点在信道刚空闲时同时发送而导致的冲突，但因随机等待增加了平均传输时延。\n\n# (3) p-坚持 CSMA 协议\n\np-坚持 CSMA 协议适用于时隙化信道，基本思想：站点在时隙开始时监听信道；若信道忙，则等到下一时隙再监听；若信道空闲，则以概率 p 发送数据，以概率 1-p 推迟到下一时隙再尝试。\n\n该机制通过概率延迟, 降低了多个站点同时发送的冲突概率; 通过持续监听(而非随机退避), 又避免了非坚持 CSMA 协议的过长延迟。因此, p-坚持 CSMA 协议是 1-坚持与非坚持 CSMA 协议的折中。\n\n三种不同类型的 CSMA 协议比较如表 3.1 所示。\n\n表 3.1 三种不同类型的 CSMA 协议比较\n\n<table><tr><td>信道状态</td><td>1-坚持</td><td>非坚持</td><td>p-坚持</td></tr><tr><td>空闲</td><td>立即发送</td><td>立即发送</td><td>以概率p发送,以概率1-p推迟到下一个时隙</td></tr><tr><td>忙</td><td>持续监听</td><td>放弃监听,等待随机时间后再监听</td><td>持续监听(等到下一时隙)</td></tr></table>\n\n介绍 ALOHA 协议和基本 CSMA 协议后，自然会引出两种重要的改进方案：CSMA/CD（载波监听多路访问/冲突检测）协议和 CSMA/CA（载波监听多路访问/冲突避免）协议。二者均在 CSMA 协议的基础上引入了冲突处理机制，但针对不同物理介质的特点采用了差异化策略：CSMA/CD 协议适用于有线总线形以太网，通过实时检测冲突并在发生后立即中止发送、执行退避重传，有效提升了通信效率；而 CSMA/CA 协议则专为无线局域网设计，由于无线环境难以有效检测冲突，因此转而采用主动避免机制来降低冲突概率。这两种协议将分别在 3.6.2 节和 3.6.3 节中展开介绍。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_04",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "multiple_choice",
      "question": "在停止-等待协议中，为了让接收方能判断所收到的数据帧是否重复，采用（）的方法。",
      "options": {
        "A": "帧编号",
        "B": "检错码",
        "C": "重传计时器",
        "D": "NAK 帧"
      },
      "answer": [
        "C",
        "D"
      ],
      "explanation": "# 考点追踪 ▶ 码分复用的概念（2013）\n\n码分复用（Code Division Multiplexing，CDM）是一种采用不同编码来区分各路原始信号的复用方式。与 FDM 和 TDM 不同，CDM 既共享信道的频率，又共享时间。\n\n实际上，更常用的名词是码分多址（Code Division Multiple Access，CDMA），其原理是将每个比特时间进一步划分为 m 个短的时间槽，称为码片（Chip），通常 m 的值为 64 或 128，为了简化说明，下例中设 m = 8。每个站点指派一个唯一的 m 位码片序列。发送 1 时，站点发送其码片序列；发送 0 时，站点发送该码片序列的反码。当两个或多个站点同时发送时，各路数据在信道中线性相加。为了从信道中分离出各路信号，各个站点的码片序列应相互正交。\n\n简单理解就是，A 站向 C 站发出的信号用一个向量表示，B 站向 C 站发出的信号用另一个向量表示，这两个向量要求相互正交。向量中的分量即所谓的码片。\n\n下面举例说明 CDMA 的原理。\n\n令向量 S 表示 A 站的码片向量，T 表示 B 站的码片向量。假设 A 站的码片序列被指派为 00011011，则 A 站发送 00011011 表示发送比特 1，发送 11100100 表示发送比特 0。为便于计算，将码片中的 0 写为 -1，1 写为 +1，因此 A 站的码片序列是 $(-1 - 1 - 1 + 1 + 1 - 1 + 1 + 1)$ 。\n\n不同站点的码片序列相互正交，即向量 S 和 T 的规格化内积为 0:\n\n$$\n\\boldsymbol {S} \\cdot \\boldsymbol {T} = \\frac {1}{m} \\sum_ {i = 1} ^ {m} S _ {i} T _ {i} = 0\n$$\n\n任何站点的码片向量和该码片向量自身的规格化内积都是 1:\n\n$$\n\\boldsymbol {S} \\cdot \\boldsymbol {S} = \\frac {1}{m} \\sum_ {i = 1} ^ {m} S _ {i} S _ {i} = \\frac {1}{m} \\sum_ {i = 1} ^ {m} S _ {i} ^ {2} = \\frac {1}{m} \\sum_ {i = 1} ^ {m} (\\pm 1) ^ {2} = 1\n$$\n\n任何站点的码片向量和该码片反码的向量的规格化内积都是-1:\n\n$$\n\\boldsymbol {S} \\cdot \\overline {{\\boldsymbol {S}}} = \\frac {1}{m} \\sum_ {i = 1} ^ {m} S _ {i} \\overline {{S _ {i}}} = - \\frac {1}{m} \\sum_ {i = 1} ^ {m} S _ {i} ^ {2} = - 1\n$$\n\n令向量 T 为 $(-1-1+1-1+1+1+1-1)$ 。\n\n当 A 站向 C 站发送数据 1 时，就发送了向量 $(-1 - 1 - 1 + 1 + 1 - 1 + 1 + 1)$ 。\n\n当 B 站向 C 站发送数据 0 时，就发送了向量 $(+1 + 1 - 1 + 1 - 1 - 1 - 1 + 1)$ 。\n\n两个向量在公共信道上叠加，实际上是线性相加，得到\n\n$$\n\\boldsymbol {S} + \\overline {{\\boldsymbol {T}}} = (0 0 - 2 2 0 - 2 0 2)\n$$\n\n考点追踪 CDMA 中的数据恢复计算（2014）\n\n到达 C 站后，进行数据分离。若要提取来自 A 站的数据，则 C 站需知道 A 站的码片向量 S，并计算 S 与 $S + \\overline{T}$ 的规格化内积。根据叠加原理，其他站点的信号都在内积结果中被过滤掉，内积的相关项都是 0，而保留 A 站发送的信号，得到\n\n$$\n\\boldsymbol {S} \\cdot (\\boldsymbol {S} + \\overline {{\\boldsymbol {T}}}) = 1\n$$\n\n因此，A 站发出的数据是 1。同理，若要提取来自 B 站的数据，则\n\n$$\n\\boldsymbol {T} \\cdot (\\boldsymbol {S} + \\overline {{\\boldsymbol {T}}}) = - 1\n$$\n\n因此，从 B 站发送过来的信号向量是一个反码向量，代表 0。\n\n规格化内积是线性代数的内容，它在计算两个向量的内积后，再除以向量的分量个数。\n\n下面举一个直观的例子来理解频分复用、时分复用和码分复用。\n\n假设 A 站要向 C 站运送黄豆，B 站要向 C 站运送绿豆，A 站、B 站与 C 站之间有一条公共道路，可类比为广播信道。在频分复用方式下，公共道路被划分为两个车道，分别供 A 站到 C 站、B 站到 C 站的车通行，两类车可以同时通行，但都只使用了一半的道路，因此频分复用（波分复用也类似）共享时间而不共享空间。在时分复用方式下，先让 A 站到 C 站的车走一趟，再让 B 站到 C 站的车走一趟，两类车交替使用道路，因此时分复用共享空间，但不共享时间。码分复用与另外两种信道划分方式极为不同，在这种方式下，黄豆与绿豆放在同一辆车上运送，到达 C 站后，由 C 站负责把车上的黄豆和绿豆分开，因此码分复用既共享空间，又共享时间。\n\n码分复用技术具有频谱利用率高、抗干扰能力强、保密性好、语音质量好等优点，还可以减少投资及降低运行成本，广泛应用于无线通信系统，特别是移动通信系统。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_08",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列关于连续 ARQ 的说法中，错误的是（）。",
      "options": {
        "A": "发送方可以连续发送若干数据帧，而不是发完一个数据帧就停下来等待确认帧",
        "B": "发送方收到了接收方发来的确认帧，还可以接着发送数据帧",
        "C": "相比停止-等待协议，连续 ARQ 因为减少了等待时间，所以提高了信道利用率",
        "D": "接收方可以不按序接收数据帧"
      },
      "answer": [
        "D"
      ],
      "explanation": "连续 ARQ 协议分为 GBN 协议和 SR 协议。SR 的接收窗口大于 1，接收方可以先收下失序但序号仍落在接收窗口内的那些数据帧。GBN 的接收窗口等于 1，接收方必须按序接收数据帧。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_09",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "数据链路层采用后退 $N$ 帧协议进行流量控制，发送方已发送编号为 $0 \\sim 6$ 的帧，之后收到5号数据帧的确认，发送方的滑动窗口向后移动后，发送方可发送的数据帧数量为6个，假设整个过程未发生超时，则应采用（）位给数据帧编号。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "A"
      ],
      "explanation": "发送方收到 5 号帧的确认后，表示 5 号帧及之前的所有帧都被接收方正确接收，因此滑动窗口右移后，新窗口内的第一个帧就是 6 号帧，又因为此时可发送的数据帧数为 6，因此发送窗口的总大小为 7。在 GBN 协议中，若采用 n 位给帧编号，则发送窗口大小为 $2^{n}-1$ ，因此 n=3。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_10",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "数据链路层采用后退 N 帧协议，发送方已经发送了编号从 0 到 6 的帧。当计时器超时的时候，只收到对 1、2、4 号帧的确认，发送方需要重传的帧的数量是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "B"
      ],
      "explanation": "后退 N 帧协议采用累积确认，确认的最后一个帧是 4 号帧，表示 4 号帧及 4 号帧之前的数据帧都已被正确接收，所以只需重传 5 号帧和 6 号帧这两个数据帧。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_11",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "数据链路层采用了后退 $N$ 帧协议（GBN），若发送窗口的大小是32，则至少需要（）位的序列号才能保证协议不出错。",
      "options": {
        "A": "4",
        "B": "5",
        "C": "6",
        "D": "7"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于滑动窗口协议，序列号个数要大于或等于窗口数（发送窗口大小 + 接收窗口大小），所以在后退 N 帧的协议中，序列号个数不小于 “发送窗口大小 + 1”，题中发送窗口大小是 32，那么序列号个数最少应该是 33 个。所以最少需要 6 位的序列号才能达到要求。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_12",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "若采用后退 N 帧的 ARQ 协议进行流量控制，帧编号字段为 7 位，则发送窗口的最大长度为（）。",
      "options": {
        "A": "7",
        "B": "8",
        "C": "127",
        "D": "128"
      },
      "answer": [
        "C"
      ],
      "explanation": "接收窗口整体向前移动时，新窗口中的序列号和旧窗口的序列号产生重叠，致使接收方无法区别发送方发送的帧是重发帧还是新帧，因此在后退 N 帧的 ARQ 协议中，发送窗口 $W_{T} \\leqslant 2^{n} - 1$ 。本题中 n = 7，因此发送窗口的最大长度是 127。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_13",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "一个使用选择重传协议的数据链路层，若采用 5 位的帧序列号，则可以选用的最大接收窗口是（）。",
      "options": {
        "A": "15",
        "B": "16",
        "C": "31",
        "D": "32"
      },
      "answer": [
        "B"
      ],
      "explanation": "在选择重传协议中, 若用 n 比特对帧编号, 则发送窗口和接收窗口的大小关系为 $1 < W_{R} \\leqslant W_{T}$ , 还需满足 $W_{R} + W_{T} \\leqslant 2^{n}$ , 所以接收窗口的最大尺寸不超过序号范围的一半, 即 $W_{R} \\leqslant 2^{n-1}$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_14",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "对于窗口总大小为 $n$ 的滑动窗口，最多可以有（）帧已发送但没有确认。",
      "options": {
        "A": "0",
        "B": "n - 1",
        "C": "n",
        "D": "n/2"
      },
      "answer": [
        "B"
      ],
      "explanation": "在连续 ARQ 协议中，发送窗口大小 $\\leqslant$ 窗口总数 -1。例如，窗口总数为 8，编号为 0～7，假设这 8 个帧都已发出，下一轮又发出编号 0～7 的 8 个帧，接收方将无法判断第二轮发的 8 个帧到底是重传帧还是新帧，因为它们的序号完全相同。另一方面，对于后退 N 帧协议，发送窗口大小可以等于窗口总数 -1，因为它的接收窗口大小为 1，所有的帧保证按序接收。因此对于窗口大小为 n 的滑动窗口，其发送窗口大小最大为 n-1，即最多可以有 n-1 帧已发送但没有确认。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_15",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "数据链路层采用选择重传协议（SR）传输数据，若帧序号采用4比特编号，接收窗口大小为7，则发送窗口最大是（）。",
      "options": {
        "A": "17",
        "B": "8",
        "C": "9",
        "D": "10"
      },
      "answer": [
        "C"
      ],
      "explanation": "在选择重传协议中, 若用 n 比特对帧编号, 则发送窗口和接收窗口的大小关系为 $1 < W_{R} \\leqslant W_{T}$ , 此外, 还要满足 $W_{R} + W_{T} \\leqslant 2^{n}$ , 因此发送窗口的最大尺寸为 $2^{4} - 7 = 16 - 7 = 9$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_16",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "对无序接收的滑动窗口协议，若序号位数为 n，则接收窗口最大尺寸为（）。",
      "options": {
        "A": "$2^{n} - 1$",
        "B": "$2n$",
        "C": "2n - 1",
        "D": "$2^{n-1}$"
      },
      "answer": [
        "D"
      ],
      "explanation": "本题未直接告知使用的是选择重传协议，而是通过间接方式给出的。题目称无序接收的滑动窗口协议，表示接收窗口大于1，所以使用的是选择重传协议，接收窗口最大尺寸为 $2^{n-1}$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_17",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "采用滑动窗口机制对两个相邻节点 A 和 B 的通信过程进行流量控制。A 和 B 之间的数据传输速率为 20kb/s，数据帧和确认帧的长度都为 2000B，往返传播时延为 1400ms，采用 3 比特给数据帧编号，测得在 A 和 B 的通信过程中信道利用率大于 80%，则（）。（注：在 SR 协议中，默认发送窗口大小等于接收窗口大小。）",
      "options": {
        "A": "节点 A、B 之间只能采用停止等待协议",
        "B": "节点 A、B 之间只能采用 GBN 协议",
        "C": "节点 A、B 之间只能采用 SR 协议",
        "D": "节点 A、B 之间可以采用 GBN 协议或 SR 协议"
      },
      "answer": [
        "D"
      ],
      "explanation": "无论采用哪种滑动窗口协议，信道利用率的计算方法都是：发送窗口内所有数据帧的发送时延/（一个数据帧的发送时延 + RTT + 一个确认帧的发送时延）。分母记为 T = 一个数据帧的发送时延 + RTT + 一个确认帧的发送时延，其中数据帧或确认帧的发送时延 = 2000B/(20kb/s) = 800ms，RTT = 1400ms，即 $T = 800 + 800 + 1400 = 3000ms$ 。假设发送窗口大小为 x，则 800x/3000 > 0.8，即发送窗口大小 x 要大于 3，GBN 协议的发送窗口为 $2^{3} - 1 = 7$ ，满足要求；SR 协议的发送窗口为 $2^{2} = 4$ ，也满足要求。因此，A 和 B 之间可以采用 GBN 协议或 SR 协议。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_18",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "流量控制是实现发送方和接收方速度一致的机制，实现这种机制所采取的措施是（）。",
      "options": {
        "A": "增大接收方接收速度",
        "B": "减小发送方发送速度",
        "C": "接收方向发送方反馈信息",
        "D": "增加双方的缓冲区"
      },
      "answer": [
        "C"
      ],
      "explanation": "实现流量控制的常用方法是滑动窗口协议，它让接收方把自己的接收窗口大小反馈给发送方，以调节发送方的发送窗口大小，避免发送方因发送速度过快而导致接收方来不及接收。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_19",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "假设两台主机之间采用后退 N 帧协议传输数据，数据传输速率为 16kb/s，单向传播时延为 250ms，数据帧的长度是 128B，确认帧的长度也是 128B，为使信道利用率达到最高，则帧序号的比特数至少为（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "C"
      ],
      "explanation": "为使信道利用率最高（100%），要让发送方在一个发送周期内持续发送帧，不能出现发送窗口内的帧发完但还未收到第一个帧的确认帧的情况。发送周期 = 发送一个数据帧的时间 + 往返时延 + 发送一个确认帧的时间，发送一个数据帧或确认帧的时间均为 $128B \\div 16kb/s = 64ms$ ，发送周期 = $64ms + 250ms \\times 2 + 64ms = 628ms$ 。为保证发送方持续发送帧，在一个发送周期内至少要发送的帧数为 $628ms/64ms \\approx 10$ ，即发送窗口大小至少为 10，所以帧序号至少采用 4 比特。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_20",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "在下列滑动窗口机制中，理论上可以达到 $100\\%$ 信道利用率的是（）。 I. 停止-等待协议 II. 后退 $N$ 帧协议 III. 选择重传协议",
      "options": {
        "A": "I",
        "B": "II",
        "C": "III",
        "D": "II 和 III"
      },
      "answer": [
        "D"
      ],
      "explanation": "信道利用率 = 发送周期内用于发送数据帧的时间/发送周期，其中发送周期 = 发送一个数据帧的时间 + 往返时延 + 发送一个确认帧的时间。停止-等待协议的发送窗口为 1，不可能达到 100% 的信道利用率；只要发送窗口够大，后退 N 帧协议和选择重传协议都有可能达到 100% 的信道利用率。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_21",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "数据链路层采用选择重传协议进行流量控制，发送方在收到 0\\~3 号帧的确认后，又收到了 5 号帧的确认，发送窗口内还有其他帧未发送，且未发生超时，则发送方将（）。",
      "options": {
        "A": "重传 4 号帧",
        "B": "重传 5 号帧",
        "C": "接收该确认帧并继续发送剩下的帧",
        "D": "停止发送并等待超时"
      },
      "answer": [
        "C"
      ],
      "explanation": "在选择重传协议中，接收方对正确收到的每个数据帧单独进行确认，不要求收到的数据帧是有序的。依题意，接收方已正确收到0～3号和5号数据帧，但不确定4号数据帧是否收到。因为没有发生超时，发送方不进行重传，所以接收该确认帧并继续发送剩下的数据帧。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_22",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2009 统考真题】数据链路层采用了后退 N 帧（GBN）协议，发送方已经发送了编号为 0～7 的帧。当计时器超时的时候，若发送方只收到 0、2、3 号帧的确认，则发送方需要重发的帧数是（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "C"
      ],
      "explanation": "在 GBN 协议中，当接收方检测到某帧出错时，会简单地丢弃该帧及所有的后续帧，发送方超时后需重传该数据帧及所有的后续帧。注意，在 GBN 协议中，接收方一般采用累积确认的方式，即接收方对按序到达的最后一个分组发送确认，因此本题中收到 3 号帧的确认就表示编号为 0、1、2、3 的帧已接收，而此时发送方未收到 1 号帧的确认只能代表确认帧在返回的过程中丢失，而不代表 1 号帧未到达接收方。因此需要重传的帧为编号是 4、5、6、7 的帧。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_23",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2011 统考真题】数据链路层采用选择重传协议（SR）传输数据，发送方已发送 0～3 号数据帧，现已收到 1 号帧的确认，而 0、2 号帧依次超时，则此时需要重传的帧数是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "B"
      ],
      "explanation": "在选择重传协议中，接收方逐个确认正确接收的分组，不管接收到的分组是否有序，只要正确接收就发送选择 ACK 分组进行确认，因此 ACK 分组不再具有累积确认的作用。对于这一点，要特别注意与 GBN 协议的区别。此题中只收到 1 号帧的确认，0、2 号帧超时，因为对 1 号帧的确认不具有累积确认的作用，所以发送方认为接收方未收到 0、2 号帧，于是重传这两帧。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_24",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2012 统考真题】两台主机之间的数据链路层采用后退 N 帧协议（GBN）传输数据，数据传输速率为 16kb/s，单向传播时延为 270ms，数据帧长范围是 128～512B，接收方总是以与数据帧等长的帧进行确认。为使信道利用率达到最高，帧序号的比特数至少为（）。",
      "options": {
        "A": "5",
        "B": "4",
        "C": "3",
        "D": "2"
      },
      "answer": [
        "B"
      ],
      "explanation": "连续 ARQ 的信道利用率:\n\n$$\n\\frac {\\text {发送窗口大小} \\times \\text {数据帧长} / \\text {数据传输速率}}{(\\text {数据帧长} / \\text {数据传输速率}) \\times 2 + \\mathrm{RTT}} = \\frac {\\text {发送窗口大小} / \\text {数据传输速率}}{2 / \\text {数据传输速率} + \\mathrm{RTT} / \\text {数据帧长}}\n$$\n\n从上述公式可知，数据帧长越大，信道利用率就越高。数据帧长是不确定的，范围为 128～512B，在计算最小窗口数时，为了保证无论数据帧长如何变化，信道利用率都能达到 100%，应以 128B 的帧长计算。因此，当最短的帧长都能达到 100% 的信道利用率时，发送更长的数据帧也都能达到 100% 的信道利用率。若以 512B 的帧长计算，则求得的最小窗口数在 128B 的帧长下，达不到 100% 的信道利用率。首先计算出发送一个帧的时间： $128 \\times 8/(16 \\times 10^{3}) = 64$ ms；发送一个帧到收到确认帧为止的总时间： $64 + 270 \\times 2 + 64 = 668$ ms；这段时间总共可发送 668/64 = 10.4 帧，即发送窗口≥11，而接收窗口 = 1，所以至少需要用 4 位比特进行编号。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_25",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2014 统考真题】主机甲与主机乙之间使用后退 N 帧协议（GBN）传输数据，主机甲的发送窗口尺寸为 1000，数据帧长为 1000B，信道带宽为 100Mb/s，主机乙每收到一个数据帧，就立即利用一个短帧（忽略其传输延迟）进行确认，若主机甲和主机乙之间的单向传播时延是 50ms，则主机甲可以达到的最大平均数据传输速率约为（）。",
      "options": {
        "A": "10Mb/s",
        "B": "20Mb/s",
        "C": "80Mb/s",
        "D": "100Mb/s"
      },
      "answer": [
        "C"
      ],
      "explanation": "考虑制约甲方的数据传输速率的因素。首先，信道带宽能直接制约数据的传输速率，传输速率一定是小于或等于信道带宽的。其次，因为甲方和乙方之间采用后退 $N$ 帧协议传输数据，要考虑发送一个数据到接收到它的确认之前，最多能发送多少数据，甲方的最大传输速率受这两个条件的约束，所以甲方的最大传输速率是这两个值中的小者。甲方的发送窗口尺寸为1000，即收到第一个数据的确认前，最多能发送1000个数据帧，即 $1000 \\times 1000\\mathrm{B} = 1\\mathrm{MB}$ 的内容，而从发送第一个帧到接收到它的确认的时间是一个帧的发送时间加上往返时间，即 $1000\\mathrm{B} \\div 100\\mathrm{Mb/s} + 50\\mathrm{ms} + 50\\mathrm{ms} = 0.10008\\mathrm{s}$ ，此时的最大传输速率为 $1\\mathrm{MB}/0.10008\\mathrm{s} \\approx 10\\mathrm{MB/s} = 80\\mathrm{Mb/s}$ 。信道带宽为 $100\\mathrm{Mb/s}$ ，因此答案为 $\\min(80\\mathrm{Mb/s}, 100\\mathrm{Mb/s}) = 80\\mathrm{Mb/s}$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_26",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2015 统考真题】主机甲通过 128kb/s 卫星链路，采用滑动窗口协议向主机乙发送数据，链路单向传播时延为 250ms，帧长为 1000B。不考虑确认帧的开销，为使链路利用率不小于 80%，帧序号的比特数至少是（）。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "7",
        "D": "8"
      },
      "answer": [
        "B"
      ],
      "explanation": "按发送周期思考，从开始发送帧到收到第一个确认帧为止，用时为 T = 第一个帧的发送时延 + 第一个帧的传播时延 + 确认帧的发送时延 + 确认帧的传播时延，这里忽略确认帧的发送时延。因此 $T = 1000B \\div 128kb/s + RTT = 0.5625s$ ，接着计算在 T 内需要发送多少数据才能满足利用率不小于 80%。设数据大小为 L 字节，则 $(L \\div 128kb/s)/T \\geqslant 0.8$ ，得到 $L \\geqslant 7200B$ ，即在一个发送周期内至少要发 7.2 个帧才能满足要求，设需要编号的比特数为 n，则 $2^{n} - 1 \\geqslant 7.2$ ，n 至少为 4。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_27",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2018 统考真题】主机甲采用停止-等待协议向主机乙发送数据，数据传输速率是 3kb/s，单向传播时延是 200ms，忽略确认帧的传输时延。当信道利用率等于 40% 时，数据帧的长度为（）。",
      "options": {
        "A": "240 比特",
        "B": "400 比特",
        "C": "480 比特",
        "D": "800 比特"
      },
      "answer": [
        "D"
      ],
      "explanation": "信道利用率 $=$ 传输帧的有效时间/传输帧的周期。假设帧的长度为 $x$ 比特。对于有效时间，应该用帧的大小除以数据传输速率，即 $x \\div 3\\mathrm{kb / s}$ 。对于帧的传输周期，应包含4部分：帧在发送方的发送时延、帧从发送方到接收方的单程传播时延、确认帧在接收方的发送时延、确认帧从接收方到发送方的单程传播时延。这4个时延中，因为题目中说“忽略确认帧的传输时延”，所以不计算确认帧的传输时延（传输时延也称发送时延，注意与传播时延区分）。所以帧的传输周期由三部分组成：首先是帧在发送方的发送时延 $x \\div 3\\mathrm{kb / s}$ ，其次是帧从发送方到接收方的单程传播时延 $200\\mathrm{ms}$ ，最后是确认帧从接收方到发送方的单程传播时延 $200\\mathrm{ms}$ ，三者相加得周期为 $x \\div 3\\mathrm{kb / s} + 400\\mathrm{ms}$ 。代入信道利用率的公式得 $x = 800\\mathrm{bit}$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_28",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "【2019 统考真题】对于滑动窗口协议，若分组序号采用 3 比特编号，发送窗口大小为 5，则接收窗口最大是（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "B"
      ],
      "explanation": "从滑动窗口的概念来看，停止-等待协议：发送窗口大小=1，接收窗口大小=1；后退N帧协议：发送窗口大小>1，接收窗口大小=1；选择重传协议：发送窗口大小>1，接收窗口大小>1。在选择重传协议中，还需满足：接收窗口大小 $\\leqslant$ 发送窗口大小；发送窗口大小+接收窗口大小 $\\leqslant2^{n}$ 。根据以上规则，采用3比特编号，发送窗口大小为5，接收窗口大小 $\\leqslant3$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_29",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2020 统考真题】假设主机甲采用停止-等待协议向主机乙发送数据帧，数据帧长与确认帧长均为 1000B，数据传输速率是 10kb/s，单向传播时延是 200ms。则主机甲的最大信道利用率为（）。",
      "options": {
        "A": "80%",
        "B": "66.7%",
        "C": "44.4%",
        "D": "40%"
      },
      "answer": [
        "D"
      ],
      "explanation": "发送数据帧和确认帧的时间均为 $t=1000\\times8b\\div10kb/s=800ms$ 。\n\n发送周期为 $T = 800 \\, ms + 200 \\, ms + 800 \\, ms + 200 \\, ms = 2000 \\, ms$ 。\n\n信道利用率为 $t/T \\times 100\\% = 800/2000 = 40\\%$ .",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_30",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "【2023 统考真题】假设通过同一条信道，数据链路层分别采用停止-等待协议、GBN 协议和 SR 协议（发送窗口和接收窗口相等）传输数据，三个协议的数据帧长相同，忽略确认帧长，帧序号位数为 3 比特。若对应三个协议的发送方最大信道利用率分别是 $U_1$ 、 $U_2$ 和 $U_3$ ，则 $U_1$ 、 $U_2$ 和 $U_3$ 满足的关系是（）。",
      "options": {
        "A": "$U_{1} \\leqslant U_{2} \\leqslant U_{3}$",
        "B": "$U_{1} \\leqslant U_{3} \\leqslant U_{2}$",
        "C": "$U_{2} \\leqslant U_{3} \\leqslant U_{1}$",
        "D": "$U_{3} \\leqslant U_{2} \\leqslant U_{1}$"
      },
      "answer": [
        "B"
      ],
      "explanation": "信道利用率 $U = nT_{\\mathrm{D}} / T$ ，其中 $n$ 是发送窗口的大小， $T_{\\mathrm{D}}$ 是发送一个数据帧的时间， $T$ 是一个数据帧的发送周期。在 $T_{\\mathrm{D}}$ 和 $T$ 确定的情况下， $n$ 越大，信道利用率就越大。设帧序号的比特数为 $k$ ，则停止-等待协议的发送窗口 $W_{\\mathrm{T1}} = 1$ ；GBN 协议的发送窗口 $W_{\\mathrm{T2}} = 2^k - 1$ ；SR 协议的发送窗口 $W_{\\mathrm{T3}} \\leqslant 2^k - 1$ ，通常取 $2^{k-1}$ ， $W_{\\mathrm{T1}} \\leqslant W_{\\mathrm{T3}} \\leqslant W_{\\mathrm{T2}}$ ，因此 $U_1 \\leqslant U_3 \\leqslant U_2$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-4-3_31",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.4.3",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2024 统考真题】主机甲通过选择重传（SR）滑动窗口协议向主机乙发送帧的部分过程如下图所示， $Fx$ 为数据帧，ACKx 为确认帧， $x$ 是位数为 3 比特的序号。主机乙只对正确接收的数据帧进行独立确认，发送窗口与接收窗口大小相同且均为最大值。主机甲在 $t_1$ 时刻和 $t_2$ 时刻发送的数据帧分别是（）。 ![](images/8061348abb14c4d613245083797bac127765be0fe039d9fc7d1578a394918536.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD 甲[\"甲\"] -->|F0| A[\"ACK0\"] 甲 -->|F1| B[\"ACK0\"] 甲 -->|F2| C[\"ACK0\"] 甲 -->|F3| D[\"ACK0\"] 乙[\"乙\"] -->|ACK0| A 乙 -->|ACK1| B 乙 -->|ACK2| C 乙 -->|ACK3| D F1超时[\"F1超时\"] -->|t1| A F1超时 -->|t2 时间| D A -->|丢失| B B -->|丢失| C C -->|丢失| D D -->|丢失| A A -->|?| C C -->|?| D ``` </details>",
      "options": {
        "A": "F1, F3",
        "B": "F1, F4",
        "C": "F3, F1",
        "D": "F4, F1"
      },
      "answer": [
        "D"
      ],
      "explanation": "数据帧编号的范围是 $0 \\sim 7$ ，发送窗口与接收窗口大小相等且均为最大值，因此发送窗口大小 $=$ 接收窗口大小 $= 2^{3-1} = 4$ 。甲发送 F0、F1、F2 和 F3 四个数据帧后，收到 F0 的确认，因此在 $t_1$ 时刻，发送窗口向右滑动，可以继续发送 F4，之后收到 F2 的确认，但由于 F1 丢失，甲无法收到 F1 的确认，发送窗口无法继续向右滑动，直到 $t_2$ 时刻，F1 超时，重传 F1，选项 D 正确。\n\n![](images/2ebcfaaa21d1e8756cdab4045390bd98b9f3143b166103652af2cc40ef09b1c1.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"初始发送窗口\"] --> B{已收到确认的帧}\n    B --> C[\"0 1 2 3 4 5 6 7 0 1\"]\n    B --> D[\"t₁时刻的发送窗口\"]\n    B --> E[\"t₂时刻的发送窗口\"]\n```\n</details>\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_02",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "multiple_choice",
      "question": "介质访问控制（MAC）子层的主要功能是（）。",
      "options": {
        "A": "提供可靠的数据传输",
        "B": "控制和协调所有站点对共享介质的访问",
        "C": "实现数据链路层和物理层之间的接口",
        "D": "为上层协议提供服务"
      },
      "answer": [
        "C",
        "A",
        "C",
        "A"
      ],
      "explanation": "CSMA/CD 协议已成功用于有线局域网，但无线局域网不能简单照搬 CSMA/CD 协议。无线局域网仍使用 CSMA 协议，但无法实现冲突检测，主要有两个原因：\n\n1）适配器接收到的信号强度通常远小于其发送信号的强度，且无线信道中信号强度的动态范围极大，若要实现冲突检测，硬件上的成本将会过高。  \n2）在无线通信中，并非所有站点都能互相侦听到对方（却可能产生冲突），即存在隐蔽站问题，导致冲突检测机制无法发现所有冲突。\n\n在图 3.26 中，A 站和 B 站均在 AP 的覆盖范围内，但彼此距离较远，无法侦听到对方。当 A 站和 B 站同时检测到信道空闲时，都向 AP 发送数据，导致发生冲突，而双方均无法察觉，这就是隐蔽站问题。这里 A 站和 B 站互为隐蔽站，它们检测不到彼此的信号，却能产生冲突。\n\n![](images/9f9804219993f830dd5599be0cfa30f4296ce69712d1e8af4fe5df80a20bf5c6.jpg)\n\n<details>\n<summary>text_image</summary>\n\nA的作用范围\nAP\nB\nA的作用范围\nB的作用范围\n</details>\n\n图 3.26 A 站和 B 站同时向 AP 发送数据，发生冲突\n\n为此，802.11 协议定义了广泛应用于无线局域网的 CSMA/CA 协议。它对 CSMA/CD 协议进行改进，将 “冲突检测” 改为 “冲突避免” （Collision Avoidance，CA）。“冲突避免” 并不是指协议可以完全避免冲突，而是要尽量降低冲突发生的概率。由于 802.11 协议不支持冲突检测，一旦站点开始发送帧，就必须完整发送该帧；若在冲突存在时，仍发送整个帧（尤其是长数据帧），将严重降低网络效率，因此必须采用冲突避免技术来降低冲突概率。\n\n考点追踪 CSMA/CA协议的确认机制（2011）\n\n鉴于无线信道的通信质量远不如有线信道，802.11协议在数据链路层引入确认/重传（ARQ）机制：站点每发送完一帧后，必须收到接收方的确认帧（ACK），才能继续发送下一帧。因此，802.11无线局域网采用的是一种停止-等待式可靠传输协议。\n\n802.11 协议在 MAC 子层定义了两种介质访问控制方式。\n\n1）分布式协调功能（DCF）。不采用任何中心控制，各站通过争用信道获得发送权。这是802.11协议必须实现的方式，也是目前广泛使用的方式。\n\n2）点协调功能（PCF）。使用 AP 集中控制，用类似于探询的方法将发送权轮流分配给各站，从而避免冲突。它是 802.11 协议的可选方式，实际很少使用。\n\n802.11 协议规定，各站在发送数据前必须检测信道，若信道忙，则禁止发送。为进一步减少冲突，802.11 协议还要求：即使检测到信道空闲，也需再等待一段短暂时间（确保信道持续空闲），方可发送帧。该时间称为帧间间隔（InterFrame Space, IFS），其长度取决于帧的类型。\n\n# 考点追踪 CSMA/CA协议的帧间间隔类型与功能（2020）\n\n1）DIFS（分布式协调 IFS）：最长的 IFS，在 DCF 方式下用来发送数据帧和管理帧。  \n2）PIFS（点协调 IFS）：中等长度的 IFS，在 PCF 方式中使用。  \n3）SIFS（短 IFS）：最短的 IFS，用于分隔同一对话中的连续帧，如 ACK 帧、CTS 帧、分片后的数据帧，以及对 AP 探询的响应帧等。\n\n当信道由忙变为空闲时，在有多个站点同时等待发送的情况下，若它们都在时间 DIFS 后立即发送数据，则必然导致冲突。因此，CSMA/CA 协议规定：当检测到信道从忙变为空闲时，任何站点要发送数据，必须先等待时间 DIFS，再进入争用期，并执行随机退避，即随机选择一个退避时隙数，并在每个空闲时隙将其减 1，直至减为 0 后才发送。当且仅当检测到信道空闲且这个数据帧是要发送的第一个数据帧时，才不使用退避算法，其他所有情况都必须使用退避算法，具体为：① 要发送第一个数据帧之前检测到信道忙；② 未收到确认，要重传数据帧；③ 每次确认成功后要发送下一个数据帧。CSMA/CA 协议的退避算法与 CSMA/CD 协议类似，第 i 次退避在 $[0,\\cdots,(2^{4+k}-1)]$ 个时隙中随机选择一个，当时隙范围最大达到 1023 时（对应第 6 次重传），就不再增加。\n\nCSMA/CA 协议算法归纳如下:\n\n1）若站点首次尝试发送数据（非因重传而发送），且检测到信道空闲，则在等待时间 DIFS 后（信道持续空闲），立即发送整个数据帧。否则执行步骤 2）。  \n2）站点选取一个随机数，设置退避计时器。计时器运行的规则是：若信道忙，则冻结计时器（暂停递减），并继续等待，直至信道变为空闲（称为推迟接入）；若信道空闲，且在时间DIFS内持续空闲，则开始争用信道，进行倒计时。当计时器减至0时（仅可能发生在信道持续空闲期间），站点立即发送整个数据帧并等待确认。  \n3）发送站收到确认后，若仍有后续帧待发送，则转到步骤2）。若在规定时间（由重传计时器控制）内未收到确认，则按二进制指数退避规则增大竞争窗口，再转到步骤2）重新尝试。\n\n# 注意\n\n推迟接入和退避的区别。推迟接入发生在信道忙时，为的是等待争用期的到来，此时退避计时器处于冻结状态。而退避是争用期各站点执行的算法，此时信道是空闲的，退避总出现在DIFS之后。\n\n802.11 协议还规定各站采用虚拟载波监听机制：源站在发送数据前，通过帧首部的持续期字段，向所有能接收到该帧的站点通告其将占用信道的总时长（包括目的站回复 ACK 所需的时间）。其他站点收到后，将据此设置自身的网络分配向量（Network Allocation Vector，NAV），并在 NAV 计时期间暂停发送，进而显著降低冲突概率。所谓虚拟载波监听，是指这些站点并未实际监听物理信道，而基于接收到的通知主动避让，效果等同于持续监听信道。\n\n# 考点追踪 CSMA/CA 协议的信道预约机制（2018）\n\n为了缓解隐蔽站的问题，802.11 协议允许发送站对信道进行预约。在图 3.26 中，A 站和 B 站互为隐蔽站，下面以 A 站和 AP 通信为例，介绍信道预约的方法（见图 3.27）。\n\n1）在 A 站向 AP 发送数据帧 DATA 前，先检测信道。若信道空闲，则等待时间 DIFS 后，广播一个请求发送 RTS（Request To Send）控制帧，目的是告诉所有能够收到 RTS 帧的站：“我要占用信道一段时间[SIFS+ CTS+ SIFS+ DATA + SIFS+ACK]”，即从成功收到 RTS 帧起，到 AP 完成 ACK 发送为止的时间。这个时间被写入 RTS 帧首部。  \n2) 若 AP 正确收到 RTS 帧且信道空闲，则等待时间 SIFS 后，广播一个允许发送 CTS（Clear To Send）控制帧。目的不仅是告诉源站“可以发送数据了”，同时也是告诉所有能收到 CTS 帧的站“我要占用信道一段时间[SIFS+DATA + SIFS+ACK]”，即从成功收到 CTS 帧起，到 AP 完成 ACK 发送为止的时间。该时间同样被写入 CTS 帧首部。  \n3）A站收到CTS帧后，再等待时间SIFS，即可发送数据帧。其首部写入时间[DATA+SIFS+ACK]，即从开始接收数据帧起①，到AP完成ACK发送为止的时间。\n\n考点追踪 ▶ NAV 的工作原理（2024）\n\n任何站点只要收到 RTS 帧、CTS 帧或数据帧之一，就会根据其首部的持续期字段设置自己的 NAV，如图 3.27 所示。虽然 B 站收不到 A 站发送给 AP 的 RTS 帧，但能收到 AP 广播的 CTS 帧，B 站根据 CTS 帧首部的内容设置自己的 NAV，因此在这段时间内不会发送数据、干扰信道。因此，虚拟载波监听机制能够有效减少由隐蔽站引发的冲突问题。\n\n![](images/9bd6b12b4dea7faccf77aadcfb1055c71d708f0ac4761e68bb344c12b6c45d3f.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph LR\n    A[\"AP\"] --> B[\"AP (隐藏站)\"]\n    B --> C[\"B\"]\n    C --> D[\"CW\"]\n    D --> E[\"DIFS\"]\n    E --> F[\"ACK\"]\n    F --> G[\"DATA\"]\n    G --> H[\"CTS\"]\n    H --> I[\"CTS\"]\n    I --> J[\"RTS\"]\n    J --> K[\"DIFS\"]\n    K --> L[\"开始争用\"]\n    style A fill:#f9f,stroke:#333\n    style B fill:#ccf,stroke:#333\n    style C fill:#cfc,stroke:#333\n    style D fill:#fcc,stroke:#333\n    style E fill:#ffc,stroke:#333\n    style F fill:#fcc,stroke:#333\n    style G fill:#cff,stroke:#333\n    style H fill:#ffc,stroke:#333\n    style I fill:#fcc,stroke:#333\n    style J fill:#ffc,stroke:#333\n    style K fill:#fcc,stroke:#333\n    style L fill:#ffc,stroke:#333\n```\n</details>\n\n图 3.27 使用 RTS 和 CTS 帧的冲突避免\n\n显然，使用 RTS/CTS 帧会使网络的通信效率有所下降，但这两种控制帧都很短，与数据帧相比开销不算大。相反，若不使用这种控制帧，则一旦发生冲突而导致数据帧重传，浪费的时间往往更多。信道预约并非强制要求，各站点可自行决定是否启用。或仅当待发送的数据帧长度超过某一阈值时才使用 RTS/CTS 帧，从而在可靠与效率之间取得平衡。\n\nCSMA/CD 协议与 CSMA/CA 协议的主要区别如下:\n\n1）冲突处理机制不同。CSMA/CD 协议能在发送过程中检测冲突，但无法避免冲突；CSMA/CA 协议无法在发送时检测冲突（尤其是发生在接收端的冲突），因此只能尽量避免冲突。  \n2）传输介质不同。CSMA/CD 协议用于总线形有线以太网，CSMA/CA 协议则用于无线局域网。  \n3）检测方式不同。CSMA/CD 协议通过检测线路中的电压变化来判断是否冲突；而 CSMA/CA 协议只能在发送前通过能量检测、载波侦听或两者的混合方式，综合判断信道是否空闲。\n\n总结：CSMA/CA 协议的思想是“先打招呼，再发数据”，发送前先广播通知其他站点，在其指定的时段内暂时发送，以预防冲突；而 CSMA/CD 协议则是 “边发边听，撞了就停”，发送前先监听信道，发送过程中持续检测信号，一旦发现冲突，就立即停发，并启动退避重传机制。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md",
      "hidden": true,
      "hidden_reason": "duplicated_answer_and_mismatched_explanation"
    },
    {
      "id": "计算机网络_3-5-4_04",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "multiple_choice",
      "question": "TDM 所用传输介质的性质是（）。 （注，本题选项中的带宽是指信号的频率范围。）",
      "options": {
        "A": "介质的带宽大于结合信号的位速率",
        "B": "介质的带宽小于单个信号的带宽",
        "C": "介质的位速率小于最小信号的带宽",
        "D": "介质的位速率大于单个信号的位速率"
      },
      "answer": [
        "A",
        "C"
      ],
      "explanation": "以太网MAC帧格式有两种标准：DIX Ethernet V2标准（以太网V2）和IEEE802.3标准。此处仅介绍最常用的以太网V2标准的帧格式，如图3.23所示。\n\n![](images/17ab89104085ba83453744889667e756c67cc259b18206fe438bc6c187dfcea8.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"IP 数据报\"] --> B[\"46~1500\"]\n    B --> C[\"目的地址\"]\n    B --> D[\"源地址\"]\n    B --> E[\"类型\"]\n    B --> F[\"数据\"]\n    B --> G[\"FCS\"]\n    H[\"物理层\"] --> I[\"以太网MAC帧\"]\n    I --> J[\"7B\"]\n    I --> K[\"1B\"]\n    L[\"插入\"] --> M[\"8B\"]\n    M --> N[\"10101010101010 ... 101010101010\"]\n    N --> O[\"帧开始定界符\"]\n    P[\"发送在前\"] --> Q[\"前同步码\"]\n```\n</details>\n\n图 3.23 以太网 V2 标准的 MAC 帧格式\n\n# 考点追踪 ▶ 以太网 MAC 帧的格式（2010、2011）\n\n1）帧前插入的 8B 前导码分为两个字段：第一个字段是 7B 的前同步码，用于实现比特同步；第二个字段是 1B 的帧开始定界符，标志 MAC 帧的开始。\n\n# 注意\n\n以太网帧不需要帧结束定界符。因为当以太网传送帧时，各帧之间必须保持至少96比特时间的间隙，因此，接收方只要找到帧开始定界符，其后连续到达的比特流即属于同一帧。此外，以太网采用了违规编码法的思想，这种编码（曼彻斯特编码）的特点是在每个码元中间都有一次电压跳变。当发送方把一个帧发送完毕后，就不再发送其他码元，因此发送方网络接口上的电压也不再变化，这样接收方就能很容易地找到帧的结束位置，这个位置往前数4B就是FCS字段，从而确定数据字段的结束位置。。\n\n# 考点追踪 ▶ 以太网帧中地址字段的功能（2018）\n\n2）目的地址：6B，帧在局域网中的目的适配器的 MAC 地址。\n\n3）源地址：6B，发送该帧的源适配器的 MAC 地址。  \n4）类型：2B，标识上一层使用的是什么协议，以便将收到的 MAC 帧的数据交给相应的上层协议。例如，当类型字段的值是 0x0800 时，表示上层使用的是 IP。\n\n# 考点追踪 ▶ 以太网帧填充与最小帧长的关系（2012）\n\n5）数据：46～1500B，承载上层的协议数据单元（如 IP 数据报）。以太网的最大传输单元为 1500B，若 IP 数据报超过此长度，则需在网络层进行分片。此外，由于 CSMA/CD 协议算法限制，以太网帧必须满足最小长度为 64B，当 IP 数据报不足 46B 时，MAC 子层会在数据字段后面添加整数字节的填充字段，以确保帧长达到 64B。\n\n# 注意\n\n“46是怎么来的？”——由CSMA/CD协议可知，以太网帧的最短帧长为64B，而MAC帧的首部和尾部的长度为18B，因此数据字段最少为 $64 - 18 = 46\\mathrm{B}$ 。\n\n6）检验码（FCS）：4B，采用32位CRC码，检验范围从目的地址到数据字段（含目的地址、源地址、类型和数据），但不检验前导码。\n\nIEEE 802.3 帧格式与以太网 V2 帧格式的区别在于：用长度字段替代了 V2 帧中的类型字段，指示数据字段的长度。在实践中，这两种机制可以并存，由于 IEEE 802.3 数据字段的最大长度为 1500B，故长度字段的值 ≤ 1500；从而 1501 到 65535 的值则被解释为类型标识符。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_09",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列几种 CSMA 协议中，（）协议在监听到信道空闲时仍可能不发送。",
      "options": {
        "A": "1-坚持 CSMA",
        "B": "非坚持 CSMA",
        "C": "p-坚持 CSMA",
        "D": "以上都不是"
      },
      "answer": [
        "C"
      ],
      "explanation": "p-坚持 CSMA 协议是 1-坚持 CSMA 协议和非坚持 CSMA 协议的折中。p-坚持 CSMA 协议检测到信道空闲后，以概率 p 发送数据，以概率 1-p 推迟到下一个时隙，目的是降低 1-坚持 CSMA 协议中多个节点检测到信道空闲后同时发送数据的冲突概率；采用坚持 “监听” 的目的，是克服非坚持 CSMA 协议中因随机等待造成延迟时间较长的缺点。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_10",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "在 CSMA 的非坚持协议中，当信号忙时，则（）直到介质空闲。",
      "options": {
        "A": "延迟一个固定的时间单位再监听",
        "B": "继续监听",
        "C": "延迟一个随机的时间单位再监听",
        "D": "放弃监听"
      },
      "answer": [
        "C"
      ],
      "explanation": "非坚持 CSMA 协议：站点在发送数据前先监听信道，若信道忙则放弃监听，等待一个随机时间后再监听，若信道空闲，则发送数据。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_11",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "在 CSMA 的非坚持协议中，当站点监听到总线信道空闲时，它（）。",
      "options": {
        "A": "以概率 $p$ 传送",
        "B": "马上传送",
        "C": "以概率 $1 - p$ 传送",
        "D": "以概率 $p$ 延迟一个时间单位后传送"
      },
      "answer": [
        "B"
      ],
      "explanation": "解析同上。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_12",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "与采用 CSMA/CD 协议的网络相比，令牌环网络更适合的环境是（）。",
      "options": {
        "A": "负载轻",
        "B": "负载重",
        "C": "距离远",
        "D": "距离近"
      },
      "answer": [
        "B"
      ],
      "explanation": "CSMA/CD 协议网络中各站随机发送数据，有冲突产生。当负载很多时，冲突加剧。而令牌环网络各站轮流使用令牌发送数据，无论网络负载如何，都无冲突产生，这是它的突出优点。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_13",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "下列关于令牌环网络的描述中，错误的是（）。",
      "options": {
        "A": "令牌环网络存在冲突的可能",
        "B": "同一时刻，环上只有一个节点的数据在传输",
        "C": "网上所有节点共享网络带宽",
        "D": "数据从一个节点到另一节点的时间可以计算"
      },
      "answer": [
        "A"
      ],
      "explanation": "令牌环网络的拓扑结构为环状，有一个令牌不停地在环中流动，只有获得了令牌的节点才能发送数据，因此不存在冲突，选项 A 错误。令牌环网络是一种半双工通信方式，同一时刻只能有一个节点发送数据，其他节点只能接收或转发数据，选项 B 正确。令牌环网络中的所有节点都连接到同一个信道上，共享整个信道的带宽，选项 C 正确。在令牌环网络中，数据从一个节点到另一节点的时间可根据环上经过的节点数、传输速率和数据帧长来计算，选项 D 正确。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_14",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下列关于令牌环网络的说法中，错误的是（）。 I. 信道的利用率比较公平 II. 重负载下信道利用率高 III. 节点可以一直持有令牌，直至所要发送的数据传输完毕 IV. 节点只能持有令牌一段固定的时间，对于没有数据要发送的节点也是如此",
      "options": {
        "A": "I、II 和 III",
        "B": "III",
        "C": "III 和 IV",
        "D": "IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "令牌环网络使用令牌在各个节点之间传递来分配信道的使用权，每个节点都可在一定的时间内（令牌持有时间）获得发送数据的权限，而并非无限制地持有令牌。在令牌传递过程中，没有数据要发送的节点收到令牌后将立刻传递下去而不能持有。选项Ⅰ和Ⅱ均为令牌环网络的特点。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_15",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "在令牌环网络中，当网络空闲时，环路中（）。",
      "options": {
        "A": "只有令牌帧在循环传递",
        "B": "只有数据帧在循环传递",
        "C": "令牌帧和数据帧都在循环传递",
        "D": "令牌帧和数据帧都不在循环传递"
      },
      "answer": [
        "A"
      ],
      "explanation": "在令牌环网络中，当网络空闲时，环路中只有令牌帧在循环传递。当某个站点要发送数据时，必须等待令牌到达，然后修改令牌中的标志位，并附加数据，将令牌变成一个数据帧。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_16",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "在令牌环网络中，当一个站点收到自己发出去的数据帧后，它将（）。",
      "options": {
        "A": "不再转发该帧，并重新产生一个令牌",
        "B": "不再转发该帧，并等待下一个令牌",
        "C": "继续转发该帧，并重新产生一个令牌",
        "D": "继续转发该帧，并等待下一个令牌"
      },
      "answer": [
        "A"
      ],
      "explanation": "在令牌环网络中，一个站点收到自己发出去的数据帧后，不再转发该帧，而重新产生一个令牌，然后将该令牌发送给下一个站点。这样可以回收数据帧，避免环路上的冗余，并释放传输权限。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_17",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "在令牌环网络中，当所有站点都有数据帧要发送时，一个站点在最坏情况下等待获得令牌和发送数据帧的时间等于（）。",
      "options": {
        "A": "所有站点传送令牌的时间总和",
        "B": "所有站点传送令牌和发送帧的时间总和",
        "C": "所有站点传送令牌的时间总和的一半",
        "D": "所有站点传送令牌和发送帧的时间总和的一半"
      },
      "answer": [
        "B"
      ],
      "explanation": "令牌环网络在逻辑上采用环状控制结构。因为令牌总沿逻辑环单向逐站传送，所以节点总可在确定的时间内获得令牌并发送数据。在最坏情况下，即在所有节点都要发送数据的情况下，一个节点获得令牌的等待时间等于逻辑环上所有其他节点依次获得令牌，并在令牌持有时间内发送数据的时间之和。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_18",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "一条广播信道上连有 4 个站点 a、b、c、d，采用码分复用技术，当 a、b、c 要向 d 发送数据时，设 a 的码片序列为 $(1, -1, 1, -1)$ ，则 b 和 c 的码片序列可以为（）。",
      "options": {
        "A": "$(-1,1,1,1)$ 和 $(-1,-1,-1,1)$",
        "B": "$(-1,-1,1,1)$ 和 $(-1,1,-1,1)$",
        "C": "$(-1,1,1,-1)$ 和 $(1,1,-1,-1)$",
        "D": "$(-1, - 1, - 1, - 1)$ 和 $(1,1,1,1)$"
      },
      "answer": [
        "C"
      ],
      "explanation": "要实现码分复用，a、b、c 三个站点的码片序列必须满足正交性，即两两之间的规格化内积等于 0，分别计算各选项与（1, -1, 1, -1）两两之间的规格化内积，只有选项 C 满足要求。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_19",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "站 A、B、C、D 通过 CDMA 共享链路，A、B、C 要向 D 发送数据，A、B、C 的码片序列分别是 $(+1,-1,-1,+1)$ 、 $(-1,+1,-1,+1)$ 和 $(+1,+1,+1,+1)$ 。若D从链路上收到的序列是 $(3,-1,1,1)$ ，则A、B、C发送的数据分别是（）。",
      "options": {
        "A": "1,0,1",
        "B": "0, 0, 1",
        "C": "1,0,0",
        "D": "0, 1, 0"
      },
      "answer": [
        "A"
      ],
      "explanation": "将收到的序列和各站点的码片序列进行规格化内积，得到 A 站的规格化内积为 1，B 站的规格化内积为 -1，C 站的规格化内积为 1，故 A 站、B 站、C 站发送的数据分别是 1, 0, 1。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_20",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2013 统考真题】下列介质访问控制方法中，可能发生冲突的是（）。",
      "options": {
        "A": "CDMA",
        "B": "CSMA",
        "C": "TDMA",
        "D": "FDMA"
      },
      "answer": [
        "B"
      ],
      "explanation": "选项 A、C 和 D 都是信道划分协议，信道划分协议是静态划分信道的方法，肯定不会发生冲突。CSMA 协议的全称是载波监听多路访问协议，其原理是站点在发送数据前先监听信道，发现信道空闲后再发送数据，但在发送过程中可能会发生冲突。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-5-4_21",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.5.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2014 统考真题】站 A、B、C 通过 CDMA 共享链路，A、B、C 的码片序列分别是(1,1,1,1)、(1,-1,1,-1)和(1,1,-1,-1)。若 C 从链路上收到的序列是(2,0,2,0,0,-2,0,-2,0,2,0,2)，则 C 收到 A 发送的数据是（）。",
      "options": {
        "A": "000",
        "B": "101",
        "C": "110",
        "D": "111"
      },
      "answer": [
        "B"
      ],
      "explanation": "将收到的序列每4个数分成一组，即 $(2,0,2,0)$ ， $(0,-2,0,-2)$ ， $(0,2,0,2)$ ，因为题目求的是A站发送的数据，因此将这三组数据与A站的码片序列 $(1,1,1,1)$ 做内积运算，结果分别是 $(2,0,2,0)\\cdot(1,1,1,1)/4=1$ ， $(0,-2,0,-2)\\cdot(1,1,1,1)/4=-1$ ， $(0,2,0,2)\\cdot(1,1,1,1)/4=1$ ，所以C站接收到的A站发送的数据是101。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_06",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "以下关于以太网地址的描述，错误的是（）。",
      "options": {
        "A": "以太网地址就是通常所说的 MAC 地址",
        "B": "MAC 地址也称局域网硬件地址",
        "C": "MAC 地址是通过域名解析查得的",
        "D": "以太网地址通常存储在网卡中"
      },
      "answer": [
        "C"
      ],
      "explanation": "域名解析用于将主机名解析成对应的 IP 地址，它不涉及 MAC 地址。实际上，MAC 地址通常是通过 ARP 查得的。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_07",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列关于用光纤连接的以太网和用双绞线连接的以太网的说法中，错误的是（）。",
      "options": {
        "A": "用集线器连接的双绞线以太网一定工作在半双工状态",
        "B": "用交换机连接的双绞线以太网可以工作在全双工状态",
        "C": "光纤以太网主要用于支持点对点通信，目的是扩大以太网的覆盖范围",
        "D": "光纤以太网也可以选用 CSMA/CD 协议"
      },
      "answer": [
        "D"
      ],
      "explanation": "用集线器连接的以太网一定工作在半双工状态，用交换机连接的以太网既可以工作在半双工状态，又可以工作在全双工状态，选项 A、B 正确。光纤主要是为了扩大以太网的覆盖范围，用于支持点对点通信（中继设备之间的传输），通常不会直接连接终端设备，选项 C 正确。一根光纤线内部至少包含两条光纤，用以实现全双工通信，因此用光纤连接的以太网不采用 CSMA/CD 协议，选项 D 错误。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_08",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "一个长度为 40B 的 IP 数据报需要封装成 802.1Q 帧进行传输，则此 802.1Q 帧的数据载荷部分需要填充的字节数是（）。",
      "options": {
        "A": "2",
        "B": "4",
        "C": "6",
        "D": "8"
      },
      "answer": [
        "A"
      ],
      "explanation": "以太网 MAC 帧的最小帧长为 64B，数据字段的长度至少为 46B，但 802.1Q 帧会额外插入 4B 的 VLAN 标签，所以 802.1Q 帧的数据字段的长度至少为 42B，因此需要额外填充 2 字节。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_09",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "在以太网中，若网卡发现某个帧的目的 MAC 地址不是自己的，则（）。",
      "options": {
        "A": "它将该帧递交给网络层，由网络层决定如何处理",
        "B": "它将丢弃该帧，并向网络层报告错误消息",
        "C": "它将丢弃该帧，不向网络层报告错误消息",
        "D": "它将向发送主机发回一个 NAK 帧"
      },
      "answer": [
        "C"
      ],
      "explanation": "当网卡收到一个帧时，首先检查该帧的目的 MAC 地址是否与当前网卡的物理地址相同，若相同，则做下一步处理；若不同，则直接丢弃，并不需要向网络层报告错误消息。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_10",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "在 CSMA/CD 以太网中，站点（）进行全双工通信，（）进行半双工通信。",
      "options": {
        "A": "可以，不可以",
        "B": "可以，可以",
        "C": "不可以，可以",
        "D": "不可以，不可以"
      },
      "answer": [
        "C"
      ],
      "explanation": "CSMA/CD 协议是一种用于解决共享介质上的冲突问题的方法，它在半双工通信中使用，而在全双工通信中无须用到 CSMA/CD 协议。因此站点可以进行半双工通信，不可以进行全双工通信。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_11",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "在 CSMA/CD 协议的定义中，“争用期”指的是（）。",
      "options": {
        "A": "信号在最远两个端点之间往返传输的时间",
        "B": "信号从线路一端传输到另一端的时间",
        "C": "从发送开始到收到应答的时间",
        "D": "从发送完毕到收到应答的时间"
      },
      "answer": [
        "A"
      ],
      "explanation": "CSMA/CD 协议中定义的争用期是指信号在最远两个端点之间往返传输的时间。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_12",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "在 CSMA/CD 协议中，若不对帧的长度加以限制，当一个站在发送完毕之前没有检测到冲突，则该站所发送的帧（）和其他站发送的帧发生冲突。",
      "options": {
        "A": "肯定不会",
        "B": "可能会",
        "C": "肯定会",
        "D": "无法判断"
      },
      "answer": [
        "B"
      ],
      "explanation": "即使一个站在发送完帧之前没有检测到冲突，也不能肯定该站所发送的帧不会和其他站发送的帧发生冲突。因为存在这样的可能：当一个站发送完后，另一个站刚好开始发送，而两个站之间的往返传播时延大于帧的发送时间，使得第一个站无法及时检测到冲突。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_13",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "在以太网中，当数据传输速率提高时，帧的发送时间相应地缩短，这样可能会影响到冲突的检测。为了能有效地检测冲突，可以使用的解决方案有（）。",
      "options": {
        "A": "减少电缆介质的长度或减少最短帧长",
        "B": "减少电缆介质的长度或增加最短帧长",
        "C": "增加电缆介质的长度或减少最短帧长",
        "D": "增加电缆介质的长度或增加最短帧长"
      },
      "answer": [
        "B"
      ],
      "explanation": "CSMA/CD 协议要求：发送帧的时间≥争用期的时间（信号在最远两个端点之间往返传输的时间）。因此，当数据传输速率提高时，发送帧的时间就缩短，此时可通过增加最短帧长来增加发送帧的时间，或缩短电缆的长度来减少争用期的时间，以便仍然满足“发送帧的时间≥争用期的时间”这个要求。掌握 CSMA/CD 协议最短帧长的原理是解决这类问题的关键。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_14",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "长度为 $10\\mathrm{km}$ 、数据传输速率为 $10\\mathrm{Mb / s}$ 的CSMA/CD以太网，信号传播速率为 $200\\mathrm{m} / \\mu \\mathrm{s}$ 。那么该网络的最小帧长为（）。",
      "options": {
        "A": "20bit",
        "B": "200bit",
        "C": "100bit",
        "D": "1000bit"
      },
      "answer": [
        "D"
      ],
      "explanation": "来回路程=10000×2m，RTT=10000×2÷(200×10 $^{6}$ )=10 $^{-4}$ s，最小帧长=WRTT=1000bit。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_15",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "以太网中若发生信道访问冲突，则按照二进制指数退避算法决定下一次重发的时间。使用二进制指数退避算法的理由是（）。",
      "options": {
        "A": "这种算法简单",
        "B": "这种算法执行速度快",
        "C": "这种算法考虑了网络负载对冲突的影响",
        "D": "这种算法与网络的规模大小无关"
      },
      "answer": [
        "C"
      ],
      "explanation": "以太网采用 CSMA/CD 协议技术，网络上的流量越大、负载越多时，发生冲突的概率也越大。当工作站发送的数据帧因冲突而传输失败时，将采用二进制指数退避算法后退一段时间再重新发送数据帧。二进制指数退避算法可以动态地适应发送站点的数量，后退时延的取值范围与重发次数 n 形成二进制指数关系。当网络负载小时，后退时延的取值范围也小；当网络负载大时，后退时延的取值范围也随着增大。二进制指数退避算法的优点是，它将后退时延的平均取值与负载的大小联系起来了。因此，二进制指数退避算法考虑了负载对冲突的影响。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_16",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "以太网中采用二进制指数退避算法处理冲突问题。下列数据帧重传时再次发生冲突的概率最低的是（）。",
      "options": {
        "A": "首次重传的帧",
        "B": "发生两次冲突的帧",
        "C": "发生三次重传的帧",
        "D": "发生四次重传的帧"
      },
      "answer": [
        "D"
      ],
      "explanation": "根据 IEEE 802.3 标准的规定，以太网采用二进制指数退避算法处理冲突问题。当检测到冲突而停止发送后，一个站必须等待一个随机时间段才能重新尝试发送。这一随机等待时间的目的是减少再次发生冲突的可能性。等待的时间长度按下列步骤计算：\n\n1）取均匀分布在0至 $2^{\\min(k,10)}-1$ 之间的一个随机整数r，k是冲突发生的次数。  \n2）发送站等待 $r \\times 2t$ 长度的时间后才能尝试重新发送，其中 t 为以太网的端到端延迟。\n\n从这个计算步骤可以看出，k 越大，帧重传时再次发生冲突的概率越低。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_17",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "某 100Mb/s 以太网使用 CSMA/CD 协议，该以太网中的某个站在发送帧时检测到冲突，并准备进行第二次重传，则所需等待的最大退避时间是（）。",
      "options": {
        "A": "$5.12\\mu s$",
        "B": "15.36μs",
        "C": "25.6μs",
        "D": "51.2μs"
      },
      "answer": [
        "B"
      ],
      "explanation": "与 10Mb/s 以太网相同，100Mb/s 以太网的争用期仍是 512bit 的发送时间，即 $512b \\div 100Mb/s = 5.12\\mu s$ 。根据 CSMA/CD 协议的退避算法，第 k 次重传需要退避的时间为：从整数集合 $\\{0, 1, \\cdots, 2^{k} - 1\\}$ 中随机取出一个数 r，退避时间就是 r 倍的争用期。当重传次数大于 10 时，k 不再增大，而是一直等于 10。本题中 k = 2，问的是最大退避时间，所以取 r = 3，最大退避时间为 $15.36\\mu s$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_18",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "在以太网的二进制指数退避算法中，在 11 次冲突之后，站点会在 0～（）之间选择一个随机数。",
      "options": {
        "A": "255",
        "B": "511",
        "C": "1023",
        "D": "2047"
      },
      "answer": [
        "C"
      ],
      "explanation": "一般来说，在第 $i$ （ $i < 10$ ）次冲突后，站点会在0到 $2^{i} - 1$ 之间随机选择一个数 $M$ ，然后等待 $M$ 倍的争用期再发送数据。达到10次冲突后，随机数的区间固定在最大值1023上，以后不再增加。若连续超过16次冲突，则丢弃相应的数据帧。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_19",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "根据 CSMA/CD 协议的工作原理，需要提高最短帧长的是（）。",
      "options": {
        "A": "网络传输速率不变，冲突域的最大距离变短",
        "B": "冲突域的最大距离不变，网络传输速率提高",
        "C": "上层协议使用 TCP 的概率增加",
        "D": "在冲突域不变的情况下减少线路中的中继器数量"
      },
      "answer": [
        "B"
      ],
      "explanation": "CSMA/CD 协议要求：发送帧的时间 $\\geqslant$ 争用期的时间，当等号成立时，即最短帧长 $=$ 数据传输速率 $\\times$ 争用期。对于选项 A，最大距离变短会使争用期（最大距离的往返时间）变短，最短帧长变短。对于选项 B，数据传输速率提高，最短帧长变长。选项 C 对最短帧长没有影响。对于选项 D，在冲突域不变的情况下减少线路中的中继器数量会降低传播时延，争用期变短，最短帧长变短。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_20",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "在某 CSMA/CD 局域网中，使用一个 Hub 连接所有站点，且限定站点到 Hub 的最长距离为 100m，信号的传播速率为 200000km/s，则站点的最长冲突检测时间是（）。",
      "options": {
        "A": "$2\\mu s$",
        "B": "2ms",
        "C": "1μs",
        "D": "1ms"
      },
      "answer": [
        "A"
      ],
      "explanation": "限定站点到集线器（Hub）的最长距离为 100m，则两个站点之间的最长距离为 200m，最长冲突检测时间等于信号在两个最远站点之间的往返传输时间，即 $2 \\times 200m \\div 200000km/s = 2\\mu s$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_21",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "IEEE 802.3 标准规定，若采用同轴电缆作为传输介质，在无中继的情况下，传输介质的最大长度不能超过（）。",
      "options": {
        "A": "500m",
        "B": "200m",
        "C": "100m",
        "D": "50m"
      },
      "answer": [
        "A"
      ],
      "explanation": "以太网常用的传输介质有4种：粗缆、细缆、双绞线和光纤。同轴电缆分为 $50\\Omega$ 基带电缆和 $75\\Omega$ 宽带电缆两类。基带电缆又分细同轴电缆和粗同轴电缆。\n\n10Base-5：粗缆以太网，数据率为 10Mb/s，每段电缆最大长度为 500m；使用特殊的收发器连接到电缆上，收发器完成载波监听和冲突检测的功能。  \n10Base-2：细缆以太网，数据率为 10Mb/s，每段电缆最大长度为 185m；使用 BNC 连接器形成 T 形连接，无源部件。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_22",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "下列几种以太网中，只能工作在全双工模式下的是（）。",
      "options": {
        "A": "10Base-T 以太网",
        "B": "100Base-T 以太网",
        "C": "吉比特以太网",
        "D": "10 吉比特以太网"
      },
      "answer": [
        "D"
      ],
      "explanation": "10Base-T 以太网、100Base-T 以太网、吉比特以太网都使用 CSMA/CD 协议，因此可以工作在半双工模式。10 吉比特以太网只工作在全双工方式，没有争用问题，也不使用 CSMA/CD 协议，使用光纤或双绞线作为传输介质。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_23",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "IEEE 802 局域网标准对应 OSI 参考模型的（）。",
      "options": {
        "A": "数据链路层和网络层",
        "B": "物理层和数据链路层",
        "C": "物理层",
        "D": "数据链路层"
      },
      "answer": [
        "B"
      ],
      "explanation": "IEEE 802 为局域网制定的标准相当于 OSI 参考模型的数据链路层和物理层, 其中的数据链路层又被进一步分为逻辑链路控制（LLC）和介质访问控制（MAC）两个子层。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_24",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "高速以太网使用的 MAC 帧格式与标准以太网的帧格式（）。",
      "options": {
        "A": "完全相同",
        "B": "完全不同",
        "C": "部分相同",
        "D": "不确定"
      },
      "answer": [
        "A"
      ],
      "explanation": "高速以太网的 MAC 帧格式与标准以太网的帧格式完全相同，以便升级和向后兼容。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_25",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "下列关于吉比特以太网的说法中，错误的是（）。",
      "options": {
        "A": "支持流量控制机制",
        "B": "采用曼彻斯特编码，利用光纤进行数据传输",
        "C": "数据的传输时间主要受线路传输延迟的制约",
        "D": "同时支持全双工模式和半双工模式"
      },
      "answer": [
        "B"
      ],
      "explanation": "吉比特以太网的物理层有两个标准：IEEE 802.3z 和 IEEE 802.3ab，前者采用光纤通道，后者采用 4 对 UTP5 类线。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_26",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "无线局域网不使用 CSMA/CD 协议而使用 CSMA/CA 协议的原因是，无线局域网（）。",
      "options": {
        "A": "不能同时收发，无法在发送时接收信号",
        "B": "难以实现冲突检测，存在隐蔽站和暴露站问题",
        "C": "由于广播特性，不会出现冲突",
        "D": "覆盖范围很小，不进行冲突检测，不影响正确性"
      },
      "answer": [
        "B"
      ],
      "explanation": "无线局域网不能简单地使用 CSMA/CD 协议，特别是冲突检测部分，原因如下：第一，在无线局域网的适配器上，接收信号的强度往往远小于发送信号的强度，因此要实现冲突检测，硬件费用就会过大；第二，在无线局域网中，并非所有站点都能听见对方，即存在隐蔽站和暴露站问题（暴露站问题举例：在下图中，假设 B 站向 A 站发送数据，而 C 站又想和 D 站通信，但 C 站检测到信道忙，于是就不向 D 站发送数据，其实 B 站向 A 站发送数据并不影响 C 站向 D 站发送数据。在无线局域网中，在不发生干扰的情况下，允许同时有多个移动站进行通信，这一点与有线局域网有很大的差别）。而 “所有站点都能听见对方” 正是实现 CSMA/CD 协议的前提。选项 A 是 CSMA/CD 协议和 CSMA/CA 协议的特点，但不是无线局域网使用 CSMA/CA 协议的原因。\n\n![](images/bdbc40bafd118d5fe4bd7f2acffcc6d852de2920bd847e1c6207fa6b509094f8.jpg)\n\n<details>\n<summary>text_image</summary>\n\nB站的作用范围\nC站的作用范围\nA站\nB站\nC站\nD站\n</details>",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_27",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "下列关于 CSMA/CA 协议的叙述中，正确的是（）。",
      "options": {
        "A": "接收方收到数据帧后，需要向发送方返回确认帧",
        "B": "CA 表示 Collision Avoidance，即冲突避免，因而此类网络中不会出现冲突",
        "C": "按照载波监听的工作原理，发送站点在检测到信道空闲后立即启动发送",
        "D": "CSMA/CA 协议和 CSMA/CD 协议的区别之一是前者不需要使用退避算法"
      },
      "answer": [
        "A"
      ],
      "explanation": "CSMA/CA 协议只能尽量降低冲突发生的概率，在无线信道中冲突是无法完全避免的。检测到信道空闲后，CSMA/CA 协议规定还必须等待 DIFS 的时间才能开始发送。无线信道中可能发生冲突，所以 CSMA/CA 协议也需要退避算法，但是和 CSMA/CD 协议的退避算法有一定的区别。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_28",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "CSMA/CA 协议的主要特点是（）。",
      "options": {
        "A": "发送前先检测信道，信道空闲就立即发送，信道忙就随机推迟发送",
        "B": "边发送边检测信道，一旦发现冲突就立即停止发送",
        "C": "发送前先预约信道，获得信道授权后再发送",
        "D": "发送后等待确认帧，在规定时间内未收到确认帧就重传"
      },
      "answer": [
        "D"
      ],
      "explanation": "若检测到信道空闲，则 CSMA/CA 协议规定还必须等待 DIFS 的时间才能开始发送。CSMA/CA 协议不会进行冲突检测。预约信道并不是 CSMA/CA 协议的强制规定，在普通模式下不进行预约信道。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_29",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "在 CSMA/CA 协议中，有三种不同的时间参数：短帧间间隔 SIFS、分布式协调帧间间隔 DIFS 和点协调帧间间隔 PIFS。它们之间的长度关系是（）。",
      "options": {
        "A": "SIFS < PIFS < DIFS",
        "B": "SIFS < DIFS < PIFS",
        "C": "PIFS < SIFS < DIFS",
        "D": "PIFS < DIFS < SIFS"
      },
      "answer": [
        "A"
      ],
      "explanation": "SIFS 最短，网络中的控制帧和确认帧都采用 SIFS 作为发送之前的等待时延。DIFS 最长，所有的数据帧都采用 DIFS 作为等待时延。PIFS 中等，用于 AP 发送管理帧或探测帧的等待时延。当源站要发送数据时，先检测信道，在持续检测到信道空闲达到 DIFS 时间后就开始发送。目的站正确收到数据帧后，等待 SIFS 时间后发出对应的确认帧。若源站在规定时间内未收到确认帧，就必须重传此帧，直到收到确认帧为止，或经过若干重传失败后，放弃发送。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_30",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "在 802.11 协议中，MAC 帧首部中的地址字段的含义和作用取决于（）。",
      "options": {
        "A": "帧的类型和子类型",
        "B": "帧的源和目的站点",
        "C": "帧的去往 AP 和来自 AP 位",
        "D": "帧的 BSSID 和 SSID 位"
      },
      "answer": [
        "C"
      ],
      "explanation": "802.11 帧首部中的地址字段的含义和作用取决于帧的去往 DS 位和来自 DS 位。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_31",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "在下图所示的网络中，假定主机 A 给主机 B 发送数据，在 MAC 帧从接入点 AP2 转发到目的主机 B 的这段链路上，MAC 帧的地址 1、地址 2 和地址 3 分别是（）。 ![](images/50eedc88d3623a176cdaaec57c21ec036244cbf3b11819807ff78d4e1c0295bd.jpg) <details> <summary>flowchart</summary> ```mermaid graph LR A[\"地址MAC_A\"] -->|AP1| B[\"地址BSSID1\"] B -->|MAC1| C[\"地址BSSID2\"] C -->|AP2| D[\"地址MAC_B\"] C -->|MAC2| E[\"接地\"] ``` </details>",
      "options": {
        "A": "BSSID2, BSSID1, MAC $_{B}$",
        "B": "MAC $_{B}$ , BSSID2, BSSID1",
        "C": "BSSID2, MAC $_{B}$ , MAC $_{A}$",
        "D": "MAC $_{B}$ , BSSID2, MAC $_{2}$"
      },
      "answer": [
        "D"
      ],
      "explanation": "MAC 帧是从 AP 发送到主机 B 的，即 “去往 AP=0” 而 “来自 AP=1”。因此，地址 1 是 B 的 MAC 地址，即 MAC $_{B}$ ；地址 2 是 AP2 的 BSSID，即 BSSID $_{2}$ ；地址 3 是源地址，是路由器的接口 2 的 MAC 地址，即 MAC $_{2}$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_32",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "下列关于 802.1Q 帧的描述中，错误的是（）。",
      "options": {
        "A": "在原始的以太网帧中加入一个 4B 的标签字段，就构成 802.1Q 帧",
        "B": "插入 VLAN 标签后，以太网的最大帧长也需要保持不变",
        "C": "VLAN 标签中有标识符字段，称为 VID，标志该帧属于哪个 VLAN",
        "D": "设置 VLAN 后，两台主机之间通信也不一定使用 802.1Q 帧"
      },
      "answer": [
        "B"
      ],
      "explanation": "A 和 C 是 VLAN 的规定。插入 VLAN 标签后，以太网的最大帧长变为 1522 字节。802.1Q 帧用于干线链路，若同一个交换机下的同一个 VLAN 的两台主机通信，则不使用 802.1Q 帧。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_33",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "下列关于虚拟局域网的叙述中，错误的是（）。",
      "options": {
        "A": "VLAN 使用的 802.1Q 帧的最大长度为 1522B",
        "B": "属于不同 VLAN 的主机，若连在同一台交换机上，则可进行数据链路层的通信",
        "C": "VLAN 是为局域网用户提供的一种服务，而不是一种新型的局域网",
        "D": "同一个 VLAN 的主机可以处于不同的局域网中"
      },
      "answer": [
        "B"
      ],
      "explanation": "802.1Q 帧在以太网帧的基础上增加了 4B 的 VLAN 标签，因此最大长度也增加了 4B。属于同一 VLAN 的主机无论是否连接到同一台交换机上，都能互相通信。而属于不同 VLAN 的主机即使连接到同一台交换机上，也不能直接在数据链路层进行通信。交换机会使用 VLAN 标签来区分不同的 VLAN。同一个 VLAN 的主机不一定连接到相同的局域网，它们可以连接到相同的交换机，也可以连接到不同的交换机，只要这些交换机互连即可。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_34",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "下列关于虚拟局域网（VLAN）的说法中，错误的是（）。",
      "options": {
        "A": "虚拟局域网建立在交换技术的基础上",
        "B": "虚拟局域网通过硬件方式实现逻辑分组与管理",
        "C": "虚拟网的划分与计算机的实际物理位置无关",
        "D": "不同虚拟局域网的主机之间无法直接进行数据链路层的通信"
      },
      "answer": [
        "B"
      ],
      "explanation": "VLAN 建立在交换技术的基础上，以软件方式实现逻辑分组与管理，VLAN 中的计算机不受物理位置的限制。当计算机从一个 VLAN 转移到另一个 VLAN 时，只需简单地通过软件设定，而无须改变它在网络中的物理位置。要进行跨 VLAN 的通信，必须通过上层的路由器解决，不同 VLAN 的主机处于不同的广播域，因此不能直接在数据链路层进行通信。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_35",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "划分虚拟局域网（VLAN）有多种方式，（）不是正确的划分方式。",
      "options": {
        "A": "基于交换机接口划分",
        "B": "基于网卡地址划分",
        "C": "基于用户名划分",
        "D": "基于网络层地址划分"
      },
      "answer": [
        "C"
      ],
      "explanation": "一般有三种划分 VLAN 的方法：① 基于接口；② 基于 MAC 地址；③ 基于 IP 地址。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_36",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "下列选项中，（）不是虚拟局域网（VLAN）的优点。",
      "options": {
        "A": "有效共享网络资源",
        "B": "简化网络管理",
        "C": "链路聚合",
        "D": "提高网络安全性"
      },
      "answer": [
        "C"
      ],
      "explanation": "带 “虚拟” 两个字的基本上都有一个优点，即有效共享资源。通过虚拟局域网，可将一个较大的局域网分割成一些较小的与地理位置无关的逻辑上的虚拟局域网，而每个虚拟局域网都是一个较小的局域网，因此简化了网络管理，提高了信息的保密性和网络的安全性。链路聚合是解决交换机之间的宽带瓶颈问题的技术，而不是虚拟局域网的技术。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_37",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "【2009 统考真题】在一个采用 CSMA/CD 协议的网络中，传输介质是一根完整的电缆，传输速率为 1Gb/s，电缆中的信号传播速率是 200000km/s。若最小数据帧长减少 800 比特，则最远的两个站点之间的距离至少需要（）。",
      "options": {
        "A": "增加 160m",
        "B": "增加 80m",
        "C": "减少 160m",
        "D": "减少 80m"
      },
      "answer": [
        "D"
      ],
      "explanation": "有关最短帧长的题要抓住两个公式来分析：① 发送帧的时间≥争用期的时间；② 最短帧长=数据传输速率×争用期的时间。题中，最短帧长减少800比特，则发送帧的时间减少0.8μs，要使①和②依然成立，就需要至少将争用期（信号的往返时间）的时间减少0.8μs，所以往返传播的总距离至少需要减少200000km/s×0.8μs=160m，即单程距离至少需要减少80m。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_38",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "【2011 统考真题】下列选项中，对正确接收到的数据帧进行确认的 MAC 协议是（）。",
      "options": {
        "A": "CSMA",
        "B": "CDMA",
        "C": "CSMA/CD",
        "D": "CSMA/CA"
      },
      "answer": [
        "D"
      ],
      "explanation": "CSMA/CA 协议是无线局域网标准 802.11 中的协议, 它在 CSMA 协议的基础上增加了冲突避免的功能。ACK 帧是 CSMA/CA 协议避免冲突的机制之一, 也就是说, 只有当发送方收到接收方发回的 ACK 帧时, 才确认发出的数据帧已正确到达目的地。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_39",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "【2012 统考真题】以太网的 MAC 协议提供的是（）。",
      "options": {
        "A": "无连接的不可靠服务",
        "B": "无连接的可靠服务",
        "C": "有连接的可靠服务",
        "D": "有连接的不可靠服务"
      },
      "answer": [
        "A"
      ],
      "explanation": "考虑到局域网信道质量好，以太网采取了两项重要的措施来使通信更简单：① 采用无连接的工作方式；② 不对发送的数据帧进行编号，也不要求对方发回确认。因此，以太网提供的服务是不可靠的服务，即尽最大努力的交付。差错的纠正由高层完成。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_40",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "【2015 统考真题】下列关于 CSMA/CD 协议的叙述中，错误的是（）。",
      "options": {
        "A": "边发送数据帧，边检测是否发生冲突",
        "B": "适用于无线网络，以实现无线链路共享",
        "C": "需要根据网络跨距和数据传输速率限定最小帧长",
        "D": "当信号传播延迟趋近 0 时，信道利用率趋近 100%"
      },
      "answer": [
        "B"
      ],
      "explanation": "CSMA/CD 协议适用于有线网络，CSMA/CA 协议广泛应用于无线局域网。选项 A、C 关于 CSMA/CD 协议专业词库的描述都是正确的。对于选项 D，因为在 CSMA/CD 协议中，信号传播时延会影响冲突检测的效率，若信号传播时延趋于零，则冲突检测就会非常及时，从而减少重传的时间和次数，提高信道利用率。当信号传播时延趋于零时，信道利用率也趋于 100%。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_41",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "【2016 统考真题】如下图所示，在 Hub 再生比特流的过程中会产生 $1.535 \\mu s$ 的时延（Switch 和 Hub 均为 100Base-T 设备），信号传播速率为 $200 ~m/ \\mu s$ ，不考虑以太网帧的前导码，则 H3 和 H4 之间理论上可以相距的最远距离是（）。",
      "options": {
        "A": "200m",
        "B": "205m",
        "C": "359m",
        "D": "512m"
      },
      "answer": [
        "B"
      ],
      "explanation": "有关最短帧长的题，要抓住两个公式来分析：① 发送帧的时间≥争用期的时间；② 最短帧长 = 数据传输速率×争用期时间。要使公式①恒成立，就要考虑在最短帧长的情况下公式①仍成立。对于本题，发送最短帧的时间为 $64B \\div 100Mb/s = 5.12\\mu s$ ，根据公式①可知，该时间即为争用期时间（往返时延）的最大值。本题的特点在于往返时延由两部分组成，即传播时延和 Hub 产生的转发时延。单程总时延为 $2.56\\mu s$ ，Hub 产生的转发时延为 $1.535\\mu s$ ，所以传播时延为 $2.56 - 1.535 = 1.025\\mu s$ ，从而 H3 与 H4 之间理论上可以相距的最大距离为 $200m/\\mu s \\times 1.025\\mu s = 205m$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_42",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "【2017 统考真题】在下图所示的网络中，若主机 H 发送一个封装访问 Internet 的 IP 分组的 IEEE 802.11 帧 F，则帧 F 的地址 1、地址 2 和地址 3 分别是（）。 ![](images/d04d295122202e0b73361faf07f558605684e4bdca71657185568f0cb99b9112.jpg) <details> <summary>flowchart</summary> ```mermaid graph LR H[\"00-12-34-56-78-9a\"] -->|F| AP[\"00-12-34-56-78-9b\"] AP -->|00-12-34-56-78-9c| R[\"R\"] R --> Internet ``` </details>",
      "options": {
        "A": "00-12-34-56-78-9a, 00-12-34-56-78-9b, 00-12-34-56-78-9c",
        "B": "00-12-34-56-78-9b, 00-12-34-56-78-9a, 00-12-34-56-78-9c",
        "C": "00-12-34-56-78-9b, 00-12-34-56-78-9c, 00-12-34-56-78-9a",
        "D": "00-12-34-56-78-9a, 00-12-34-56-78-9c, 00-12-34-56-78-9b"
      },
      "answer": [
        "B"
      ],
      "explanation": "802.11 帧首部的地址字段最常用的两种情况如下表所示。\n\n<table><tr><td>去往 AP</td><td>来自 AP</td><td>地址 1</td><td>地址 2</td><td>地址 3</td><td>地址 4</td></tr><tr><td>0</td><td>1</td><td>接收地址 = 目的地址</td><td>发送地址 = AP 地址</td><td>源地址</td><td>—</td></tr><tr><td>1</td><td>0</td><td>接收地址 = AP 地址</td><td>发送地址 = 源地址</td><td>目的地址</td><td>—</td></tr></table>\n\n帧 F 是由 H 站发送到 AP 的，即 “去往 AP=1” 而 “来自 AP=0”。因此，地址 1 是 AP 的 MAC 地址，地址 2 是 H 站的 MAC 地址，地址 3 是 R 站的 MAC 地址。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_43",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "【2018 统考真题】IEEE 802.11 无线局域网的 MAC 协议 CSMA/CA 进行信道预约的方法是（）。",
      "options": {
        "A": "发送确认帧",
        "B": "采用二进制指数退避",
        "C": "使用多个 MAC 地址",
        "D": "交换 RTS 与 CTS 帧"
      },
      "answer": [
        "D"
      ],
      "explanation": "当 CSMA/CA 协议进行信道预约时，主要使用的是请求发送 RTS 帧和清除发送 CTS 帧。当一台主机想要发送信息时，先向无线站点发送一个 RTS 帧，说明要传输的数据及相应的时间。无线站点收到 RTS 帧后，将广播一个 CTS 帧作为对此的响应，既给发送方发送许可，又指示其他主机不要在这个时间内发送数据，从而预约信道，避免冲突。发送确认帧的目的主要是保证信息的可靠传输。二进制指数退避算法是 CSMA/CD 协议中的一种冲突处理方法。选项 C 与预约信道无关。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_44",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "【2019 统考真题】假设一个采用 CSMA/CD 协议的 100Mb/s 局域网，最小帧长是 128B，则在一个冲突域内，两个站点之间的单向传播时延最多是（）。",
      "options": {
        "A": "2.56μs",
        "B": "$5.12\\mu s$",
        "C": "$10.24\\mu s$",
        "D": "20.48μs"
      },
      "answer": [
        "B"
      ],
      "explanation": "有关最短帧长的题，要抓住两个公式来分析：① 发送帧的时间≥争用期的时间；② 最短帧长 = 数据传输速率×争用期时间。对于本题，数据传输速率为 100Mb/s，最短帧长为 128B，根据公式②可得争用期时间（往返时延）为 $128B \\div 100Mb/s = 10.24 \\times 10^{-6}s$ ，所以单向传播时延为 $5.12\\mu s$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_45",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "【2019 统考真题】100Base-T 快速以太网使用的导向传输介质是（）。",
      "options": {
        "A": "双绞线",
        "B": "单模光纤",
        "C": "多模光纤",
        "D": "同轴电缆"
      },
      "answer": [
        "A"
      ],
      "explanation": "100Base-T 是一种以速率 100Mb/s 工作的快速以太网标准，且使用 UTP（非屏蔽双绞线）铜质电缆。100Base-T：100 标识传输速率为 100Mb/s；Base 标识采用基带传输；T 表示传输介质为双绞线（包括 5 类 UTP 或 1 类 STP），为 F 时表示光纤。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_46",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 46,
      "type": "single_choice",
      "question": "【2020 统考真题】在某个 IEEE 802.11 无线局域网中，主机 H 与 AP 之间发送或接收 CSMA/CA 帧的过程如下图所示。在 H 或 AP 发送帧前等待的帧间间隔时间（IFS）中，最长的是（）。 ![](images/e5b47f8efb121d5f6cdcbeed3828d5788ddc77579405235ec064aac57a4c9881.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD H[\"手机 H\"] --> IFS1[\"IFS1\"] IFS1 --> RTS[\"RTS →\"] RTS --> IFS2[\"IFS2\"] IFS2 --> CTS[\"CTS ←\"] CTS --> IFS3[\"IFS3\"] IFS3 --> DATA[\"DATA →\"] DATA --> IFS4[\"IFS4\"] IFS4 --> ACK[\"ACK ←\"] ACK --> 时间[\"时间\"] AP[\"AP (●)\"] --> IFS2 ``` </details>",
      "options": {
        "A": "IFS1",
        "B": "IFS2",
        "C": "IFS3",
        "D": "IFS4"
      },
      "answer": [
        "A"
      ],
      "explanation": "为了尽量避免冲突，IEEE 802.11 规定，所有站完成发送后，必须再等待一段很短的时间（继续监听）才能发送下一帧，该时间称为帧间间隔（IFS），有三种 IFS：DIFS、PIFS 和 SIFS。帧间间隔的长短取决于该站要发送的帧的类型。网络中的控制帧以及对所接收数据的确认帧都采用 SIFS 作为发送之前的等待时延。当站点要发送数据时，若载波监听到信道空闲，则需等待 DIFS 后发送 RTS 预约信道，图中 IFS1 对应 DIFS，时间最长，图中 IFS2、IFS3、IFS4 对应 SIFS。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_47",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 47,
      "type": "single_choice",
      "question": "【2023 统考真题】已知 10Base-T 以太网的争用时间片为 $51.2\\mu \\mathrm{s}$ 。若网卡在发送某帧时发生了连续 4 次冲突，则基于二进制指数退避算法确定的再次尝试重发该帧前等待的最长时间是（）。",
      "options": {
        "A": "$51.2\\mu s$",
        "B": "204.8μs",
        "C": "$768\\mu s$",
        "D": "819.2μs"
      },
      "answer": [
        "C"
      ],
      "explanation": "10Base-T 以太网采用 CSMA/CD 协议，CSMA/CD 协议采用截断二进制指数退避算法来确定冲突后重传的时机。从整数集合 $[0,1,\\cdots,2^{k}-1]$ 中随机取出一个数 r，参数 k=min[重传次数,10]，站点重传所需等待的时间 =r×争用期，因此等待的最长时间为 $(2^{4}-1)\\times51.2\\mu s\\approx768\\mu s$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_48",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 48,
      "type": "single_choice",
      "question": "【2024 统考真题】在采用 CSMA/CA 协议的 802.11 无线局域网中，DIFS = 128μs，SIFS = 28μs，RTS 帧、CTS 帧和 ACK 帧的传输时延分别是 3μs、2μs 和 2μs，忽略信号传播时延。若主机 A 要向 AP 发送一个总长度为 1998B 的数据帧，无线链路带宽为 54Mb/s，则隐藏站 B 收到 AP 发送的 CTS 帧时，设置的网络分配向量 NAV 的值是（）。",
      "options": {
        "A": "$326\\mu s$",
        "B": "$354\\mu s$",
        "C": "$385\\mu s$",
        "D": "513μs"
      },
      "answer": [
        "B"
      ],
      "explanation": "数据帧的长度为 1998B，链路带宽为 54Mb/s，因此数据帧的发送时延为 $1998B \\div 54Mb/s = 296\\mu s$ 。网络分配向量（NAV）指出了信道忙的持续时间，含义是“正在通信的两个站点以外的站点都不能在这段时间内发送数据”。CSMA/CA 协议中的 RTS 帧、CTS 帧和数据帧都携带占用信道的持续时间，当 A 站广播一个 RTS 帧时，将占用信道的持续时间（SIFS + CTS + SIFS + DATA + SIFS + ACK）写入 RTS 帧的首部；当 AP 收到 RTS 帧后，广播一个 CTS 帧，将占用信道的持续时间（SIFS + DATA + SIFS + ACK）写入 CTS 帧的首部；之后传送的数据帧的首部也携带本次通信所需的持续时间。其他站收到这些帧后，根据帧中的持续时间设置自己的 NAV 值，因此隐蔽站 B 收到 AP 发送的 CTS 帧时，设置自己的 NAV 值为 SIFS + DATA + SIFS + ACK = $28\\mu s + 296\\mu s + 28\\mu s + 2\\mu s = 354\\mu s$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-6-5_49",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.6.5",
      "section_title": "本节试题精选",
      "num": 49,
      "type": "single_choice",
      "question": "【2025 统考真题】在某个 10Base-T 以太网的冲突域内，若主机甲向主机乙发送数据帧时发生了连续 11 次冲突，则甲再次尝试发送该数据帧的最大间隔时间是（）。",
      "options": {
        "A": "0.512ms",
        "B": "0.5632ms",
        "C": "52.3776ms",
        "D": "104.8064ms"
      },
      "answer": [
        "C"
      ],
      "explanation": "以太网采用二进制指数退避算法：在前10次冲突（第 $1\\sim 10$ 次重传）中，第 $i$ 次冲突后在 $[0,2^i -1]$ 个争用期（ $51.2\\mu \\mathrm{s}$ ）内随机退避；在第11次冲突后，退避窗口上限固定为1023。因此，第11次冲突后可能的最大退避时间为 $1023\\times 51.2\\mu \\mathrm{s} = 52.3776\\mathrm{ms}$ 。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-7-3_04",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.7.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "广域网的拓扑结构通常采用（）。",
      "options": {
        "A": "星形",
        "B": "总线形",
        "C": "网状",
        "D": "环形"
      },
      "answer": [
        "C"
      ],
      "explanation": "广域网覆盖范围较广、节点较多，为了保证可靠性和可扩展性，通常需采用网状结构。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-7-3_05",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.7.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "现在大量的计算机是通过诸如以太网这样的局域网连入广域网的，而局域网与广域网的互联是通过（）实现的。",
      "options": {
        "A": "路由器",
        "B": "资源子网",
        "C": "桥接器",
        "D": "中继器"
      },
      "answer": [
        "A"
      ],
      "explanation": "中继器和桥接器通常是指用于局域网的物理层和数据链路层的联网设备。目前局域网接入广域网主要是通过称为路由器的互联设备实现的。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-7-3_06",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.7.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列协议中不属于 TCP/IP 族的是（）。",
      "options": {
        "A": "ICMP",
        "B": "TCP",
        "C": "FTP",
        "D": "HDLC"
      },
      "answer": [
        "D"
      ],
      "explanation": "TCP/IP 族主要包括 TCP、IP、ICMP、IGMP、ARP、RARP、UDP、DNS、FTP、HTTP 等。HDLC 是 ISO 提出的一个面向比特型的数据链路层协议，它不属于 TCP/IP 族。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-7-3_07",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.7.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "为实现透明传输（默认为异步线路），PPP 使用的填充方法是（）。",
      "options": {
        "A": "位填充",
        "B": "字符填充",
        "C": "对字符数据使用字符填充，对非字符数据使用位填充",
        "D": "对字符数据使用位填充，对非字符数据使用字符填充"
      },
      "answer": [
        "B"
      ],
      "explanation": "PPP 是一种面向字节的协议，所有的帧长都是整数个字节。在异步线路中，PPP 采用字节填充法实现透明传输；在同步线路中，PPP 采用零比特填充法实现透明传输。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-7-3_08",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.7.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "以下对 PPP 的描述中，错误的是（）。",
      "options": {
        "A": "具有差错控制能力",
        "B": "仅支持 IP",
        "C": "支持动态分配 IP 地址",
        "D": "支持身份验证"
      },
      "answer": [
        "B"
      ],
      "explanation": "PPP 提供差错检测功能，但不提供纠错功能。PPP 两端的网络层可以运行不同的网络层协议，但仍能使用同一个 PPP 进行通信。PPP 可用于拨号连接，因此支持动态分配 IP 地址。PPP 双方建立 LCP 链路后，接着进入身份鉴别状态（可选）。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-7-3_09",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.7.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "PPP 提供的功能有（）。",
      "options": {
        "A": "一种组帧方法",
        "B": "链路控制协议（LCP）",
        "C": "网络控制协议（NCP）",
        "D": "A、B 和 C 都是"
      },
      "answer": [
        "D"
      ],
      "explanation": "PPP 协议主要由三部分组成：① 链路控制协议（LCP）；② 网络控制协议（NCP）；③ 一个将 IP 数据报封装到串行链路的方法。因此，选项 A、B、C 都正确。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-7-3_10",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.7.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "PPP 中的 LCP 帧的作用是（）。",
      "options": {
        "A": "在建立状态阶段协商数据链路协议的选项",
        "B": "配置网络层协议",
        "C": "检查数据链路层的错误，并通知错误信息",
        "D": "安全控制，保护通信双方的数据安全"
      },
      "answer": [
        "A"
      ],
      "explanation": "PPP 帧在默认配置下，地址和控制域总是常量，所以 LCP 提供了必要的机制，允许双方协商一个选项。在建立状态阶段，LCP 协商数据链路协议中的选项，它并不关心这些选项本身，只提供一个协商选择的机制。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-7-3_11",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.7.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列关于 PPP 的叙述中，正确的是（）。",
      "options": {
        "A": "PPP 是网络层协议",
        "B": "PPP 支持半双工或全双工通信",
        "C": "PPP 两端的网络层必须运行相同的网络层协议",
        "D": "PPP 是面向字节的协议"
      },
      "answer": [
        "D"
      ],
      "explanation": "PPP 是数据链路层协议，A 错误。根据 PPP 的特点可知 B、C 错误，D 正确。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-7-3_12",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.7.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "PPP 提供的是（）。",
      "options": {
        "A": "无连接的不可靠服务",
        "B": "无连接的可靠服务",
        "C": "有连接的不可靠服务",
        "D": "有连接的可靠服务"
      },
      "answer": [
        "C"
      ],
      "explanation": "PPP 是一种面向连接的点对点数据链路层协议, 虽然它在连接建立的过程中使用了确认机制, 但在数据帧的发送过程中只保证无差错接收（CRC 检验）, 检验正确就接收这个帧, 否则丢弃这个帧, 其他什么也不做。因此 PPP 提供的是有连接的不可靠服务。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_05",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "局域网交换机实现的主要功能在（）。",
      "options": {
        "A": "物理层和数据链路层",
        "B": "数据链路层和网络层",
        "C": "物理层和网络层",
        "D": "数据链路层和应用层"
      },
      "answer": [
        "A"
      ],
      "explanation": "局域网交换机是数据链路层设备，能实现数据链路层和物理层的功能。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_06",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "交换机能比集线器提供更好的网络性能的原因是（）。",
      "options": {
        "A": "交换机支持多对用户同时通信",
        "B": "交换机使用差错控制减少出错率",
        "C": "交换机使网络的覆盖范围更大",
        "D": "交换机无须设置，使用更方便"
      },
      "answer": [
        "A"
      ],
      "explanation": "交换机能隔离冲突域，在全双工方式下支持多对节点同时通信，从而提高了网络的效率。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_07",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "通过交换机连接的一组工作站（）。",
      "options": {
        "A": "组成一个冲突域，但不是一个广播域",
        "B": "组成一个广播域，但不是一个冲突域",
        "C": "既是一个冲突域，又是一个广播域",
        "D": "既不是冲突域，又不是广播域"
      },
      "answer": [
        "B"
      ],
      "explanation": "交换机是数据链路层的设备，数据链路层的设备可以隔离冲突域，但不能隔离广播域，因此本题选 B。另外，物理层设备（集线器等）既不能隔离冲突域，又不能隔离广播域；网络层设备（路由器）既可以隔离冲突域，又可以隔离广播域。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_10",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于用集线器连接的共享式以太网的说法中，正确的是（）。",
      "options": {
        "A": "以太网的物理拓扑是总线形结构",
        "B": "以太网提供有确认的无连接服务",
        "C": "以太网参考模型一般只包括物理层和数据链路层",
        "D": "以太网不一定使用 CSMA/CD 协议"
      },
      "answer": [
        "C"
      ],
      "explanation": "用集线器连接的以太网逻辑上是总线形结构，物理上是星形结构，选项 A 错误。以太网设计的原则是简化通信，因此采用的是无确认、无连接的服务，选项 B 错误。以太网属于局域网的一种设计标准，只包括物理层和数据链路层，比如在物理层以太网规定采用曼彻斯特编码，在数据链路层规定采用 CSMA/CD 协议，选项 C 正确。用集线器连接的以太网一定工作在半双工方式下，因此一定要采用 CSMA/CD 协议，选项 D 错误。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_11",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列关于广播式网络的说法中，错误的是（）。",
      "options": {
        "A": "共享广播信道",
        "B": "不存在路由选择问题",
        "C": "可以不要网络层",
        "D": "不需要服务接入点"
      },
      "answer": [
        "D"
      ],
      "explanation": "广播式网络使用共享的广播信道进行通信，通常是局域网的一种通信方式（局域网工作在数据链路层），因此可以不需要网络层，也就不存在路由选择问题。但数据链路层使用物理层的服务必须通过服务接入点，数据链路层向高层提供服务也必须通过服务接入点。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_13",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "如下图所示，某学院的以太网交换机有 3 个接口分别和 3 个系的以太网相连，另外 3 个接口分别和万维网服务器、电子邮件服务器以及一个连接互联网的路由器相连，A、B 和 C 都是 100Mb/s 以太网交换机。假设所有链路的速率都是 100Mb/s，且图中 9 台主机中的任何一台都可以与任何一台服务器或主机通信。这 9 台主机和 2 台服务器产生的总吞吐量最大为（）。若把 3 个系的以太网交换机都换成 100Mb/s 集线器，则这 9 台主机和 2 台服务器产生的总吞吐量最大为（）。若把所有以太网交换机都换成 100Mb/s 集线器，则这 9 台主机和 2 台服务器产生的总吞吐量最大为（）。 ![](images/6b63196f72b62e4d8d976dea37501d3328106ad84fd908d5fcebb4c6589c34b5.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"万维网服务器\"] --> B[\"以太网交换机\"] C[\"电子邮件服务器\"] --> B B --> D[\"路由器\"] D --> E[\"至互联网\"] B --> F[\"A\"] B --> G[\"B\"] B --> H[\"C\"] F --> I[\"电脑1...\"] G --> J[\"电脑2...\"] H --> K[\"电脑3...\"] ``` </details>",
      "options": {
        "A": "1100Mb/s, 500Mb/s, 100Mb/s",
        "B": "500Mb/s, 500Mb/s, 100Mb/s",
        "C": "1100Mb/s, 1100Mb/s, 500Mb/s",
        "D": "500Mb/s, 1100Mb/s, 500Mb/s"
      },
      "answer": [
        "A"
      ],
      "explanation": "9 台主机和 2 台服务器都全速工作时的总吞吐量为 $900 + 200 = 1100 \\, Mb/s$ 。若把 3 个系的以太网交换机都换成 100Mb/s 集线器，则每个系是一个碰撞域，最大吞吐量为 100Mb/s，加上每台服务器 100Mb/s 的吞吐量，得出总吞吐量最大为 500Mb/s。若把所有的以太网交换机都换成 100Mb/s 集线器，则整个网络是一个碰撞域，因此吞吐量最大为 100Mb/s。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_14",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "假设以太网 A 中 80% 的通信量在本局域网内进行，其余 20% 在本局域网与因特网之间进行，而以太网 B 正好相反。在这两个局域网中，一个使用集线器，另一个使用交换机，则交换机应放置的局域网是（）。",
      "options": {
        "A": "以太网 A",
        "B": "以太网 B",
        "C": "任意以太网",
        "D": "都不合适"
      },
      "answer": [
        "A"
      ],
      "explanation": "交换机能将网络分成较小的冲突域，而集线器连接的设备属于同一个冲突域。当一个局域网中 80% 的通信量在本局域网内进行时，若使用集线器，则会增加冲突和延迟，降低整个网络的效率，而若使用交换机将不同网段的通信隔开，则可以提高网络性能。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_15",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "在使用以太网交换机的局域网中，以下（）是正确的。",
      "options": {
        "A": "局域网中只包含一个冲突域",
        "B": "交换机的多个接口可以并行传输",
        "C": "交换机可以隔离广播域",
        "D": "交换机根据 LLC 目的地址转发"
      },
      "answer": [
        "B"
      ],
      "explanation": "交换机可以隔离冲突域, 因此它的每个接口所连接的网段都属于不同的冲突域, 选项 A 错误。交换机可在同一时段内支持多个接口之间的并行通信, 而不会相互干扰, 这是因为交换机内部有一条高带宽的背部总线和一个内部交换矩阵，可以根据帧的目的 MAC 地址快速地将帧转发到相应的接口。交换机不能隔离广播域，选项 C 错误。LLC 是逻辑链路控制，它在 MAC 层上，用于向网络提供一个接口，以隐藏各种 802 网络之间的差异，交换机是按 MAC 地址转发的，选项 D 错误。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_16",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "以太网交换机的自学习功能是指（）。",
      "options": {
        "A": "记录帧的源 MAC 地址与该帧进入交换机的接口号",
        "B": "记录帧的目的 MAC 地址与该帧进入交换机的接口号",
        "C": "记录分组的源 IP 地址与该分组进入交换机的接口号",
        "D": "记录分组的目的 IP 地址与该分组进入交换机的接口号"
      },
      "answer": [
        "A"
      ],
      "explanation": "以太网交换机的自学习功能是指记录帧的源 MAC 地址与该帧进入交换机的接口号，并将这些信息存储在交换机的交换表中，以便于后续的转发决策。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_17",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "当以太网交换机某接口收到帧时，若在交换表中未找到目的 MAC 地址，则（）。",
      "options": {
        "A": "将帧发送到特定接口进行 ARP 查询",
        "B": "丢弃该帧",
        "C": "将帧发送到除本接口外的所有接口",
        "D": "将帧发送给 DHCP 服务器"
      },
      "answer": [
        "C"
      ],
      "explanation": "当以太网交换机的某个接口收到帧时，若在交换表中未找到目的 MAC 地址，则将该帧从除本接口外的所有接口发送出去，这种发送方法也称洪泛法。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_18",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "某以太网如下图所示，假设交换机 1 和交换机 2 的交换表初始为空，各主机之间依次进行以下通信：A→B、H→A、E→X、X→E，则关于上述通信过程叙述错误的是（）。 ![](images/86ed5f4d53a59a1fe755b5c8a778ac9fb29af06214c0bd62aa77ca05ff3116ff.jpg) <details> <summary>flowchart</summary> ```mermaid graph LR subgraph Exchange1 A[\"A\"] -->|1| B[\"B\"] X[\"X\"] -->|2| D[\"D\"] E[\"E\"] -->|3| D A -->|4| C[\"C\"] D -->|5| C B -->|6| J[\"J\"] end subgraph Exchange2 F[\"F\"] -->|1| H[\"H\"] G[\"G\"] -->|2| I[\"I\"] J -->|3| J H -->|4| J I -->|5| J J -->|6| J end style Exchange1 fill:#f9f,stroke:#333 style Exchange2 fill:#bbf,stroke:#333 ``` </details>",
      "options": {
        "A": "当 A→B 时，除 A 外的全部主机都能收到 A 发送的帧",
        "B": "当 $H \\rightarrow A$ 时，仅 A 能收到 H 发送的帧",
        "C": "当 $E \\rightarrow X$ 时，仅 X 能收到 E 发送的帧",
        "D": "当 $X \\rightarrow E$ 时，交换机 2 收不到 X 发送的帧"
      },
      "answer": [
        "C"
      ],
      "explanation": "当 A→B 时，交换表都为空，交换机 1 和交换机 2 都进行洪泛发送，因此除 A 外的全部主机都能收到 A 发送的帧。当 H→A 时，因为交换机 2 已登记 A 所在的接口为 3，所以只向接口 3 转发，交换机 1 收到帧后，因为交换机 1 已登记 A 所在的接口为 1，所以只向接口 1 转发，因此仅 A 能收到 H 发送的帧。当 E→X 时，集线器向除输入接口外的所有接口转发该帧，交换机 1 和交换机 2 也进行洪泛发送，因此除 E 外的全部主机都能收到 A 发送的帧。当 X→E 时，因为交换机 1 已登记 E 所在的接口为 2，所以仅登记 X 所在的接口，并丢弃该帧。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_19",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2009 统考真题】以太网交换机进行转发决策时使用的 PDU 地址是（）。",
      "options": {
        "A": "目的物理地址",
        "B": "目的 IP 地址",
        "C": "源物理地址",
        "D": "源 IP 地址"
      },
      "answer": [
        "A"
      ],
      "explanation": "交换机实质上是一个多接口网桥，工作在数据链路层，数据链路层使用物理地址进行转发，而转发到目的地需要使用目的地址。因此 PDU 地址是目的物理地址。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_20",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2013 统考真题】对于 100Mb/s 的以太网交换机，当输出端口无排队，以直通交换方式 转发一个以太网帧（不包括前导码）时，引入的转发时延至少是（）。",
      "options": {
        "A": "0μs",
        "B": "$0.48\\mu s$",
        "C": "$5.12\\mu s$",
        "D": "121.44μs"
      },
      "answer": [
        "B"
      ],
      "explanation": "直通交换方式的输入接口接收到一个帧时，只检查帧的目的 MAC 地址决定输出接口，引入的转发时延至少为读取目的 MAC 地址所需的时间。目的 MAC 地址共 6B，引入的转发时延至少为 $6 \\times 8 \\, bit \\div 100 \\, Mb/s = 0.48 \\, \\mu s$ 。存储转发方式引入的转发时延则至少为读取整个帧的时间。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_21",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2014 统考真题】某以太网拓扑及交换机的当前转发表如下图所示, 主机 00-e1-d5-00-23-a1 向主机 00-e1-d5-00-23-c1 发送一个数据帧, 主机 00-e1-d5-00-23-c1 收到该帧后, 向主机 00-e1-d5-00-23-a1 发送一个确认帧, 交换机对这两个帧的转发端口分别是（）。 ![](images/c75072fa0fb97c44860ed881603072da9f0ce1542c762d74c68e2070146785f5.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"交换机\"] -->|1| B[\"00-e1-d5-00-23-a1\"] A -->|2| C[\"00-e1-d5-00-23-b1\"] A -->|3| D[\"00-e1-d5-00-23-c1\"] ``` </details> <table><tr><td>目的地址</td><td>端口</td></tr><tr><td>00-e1-d5-00-23-b1</td><td>2</td></tr></table>",
      "options": {
        "A": "$\\{3\\}$ 和 $\\{1\\}$",
        "B": "$\\{2,3\\}$ 和 $\\{1\\}$",
        "C": "$\\{2,3\\}$ 和 $\\{1,2\\}$",
        "D": "$\\{1,2,3\\}$ 和 $\\{1\\}$"
      },
      "answer": [
        "B"
      ],
      "explanation": "当 00-e1-d5-00-23-a1 向 00-e1-d5-00-23-c1 发送数据帧时，交换机转发表中没有 00-e1-d5-00-23-c1 这一项，所以向除接口 1 外的所有接口广播这个帧，即接口 2、3 会转发这个帧，同时交换机会把（目的地址 00-e1-d5-00-23-a1，接口 1）这一项加入转发表。而当 00-e1-d5-00-23-c1 向 00-e1-d5-00-23-a1 发送确认帧时，因为转发表中已有 00-e1-d5-00-23-a1 这一项，所以交换机只向接口 1 转发。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_22",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2015 统考真题】下列关于交换机的叙述中，正确的是（）。",
      "options": {
        "A": "以太网交换机本质上是一种多端口网桥",
        "B": "通过交换机互连的一组工作站构成一个冲突域",
        "C": "交换机每个接口所连的网络构成一个独立的广播域",
        "D": "以太网交换机可实现采用不同网络层协议的网络互连"
      },
      "answer": [
        "A"
      ],
      "explanation": "本质上说，交换机就是一个多接口的网桥（选项 A 正确），工作在数据链路层（因此不能实现不同网络层协议的网络互连，选项 D 错误），交换机能经济地将网络分成小的冲突域（选项 B 错误）。广播域属于网络层概念，只有网络层设备（如路由器）才能分割广播域（选项 C 错误）。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_3-8-4_23",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "数据链路层",
      "section": "3.8.4",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2016 统考真题】若主机 H2 向主机 H4 发送一个数据帧，主机 H4 向主机 H2 立即发送一个确认帧，则除 H4 外，从物理层上能够收到该确认帧的主机还有（）。 ![](images/775c1dcc80032cab7f034a9a63c1b5a1ffd9960a2cb05858ef9e3cf224bce2c2.jpg) <details> <summary>flowchart</summary> ```mermaid graph LR R2[\"Router R2\"] -->|E1 192.168.3.254| Switch[\"Switch\"] Switch --> Hub[\"Hub\"] H1[\"Computer H1\"] -->|192.168.3.2| Switch H2[\"Computer H2\"] -->|192.168.3.3| Switch H3[\"Computer H3\"] -->|192.168.3.251| Hub Hub --> H4[\"Computer H4\"] ``` </details>",
      "options": {
        "A": "仅 H2",
        "B": "仅 H3",
        "C": "仅 H1、H2",
        "D": "仅 H2、H3"
      },
      "answer": [
        "D"
      ],
      "explanation": "交换机（Switch）可以隔离冲突域。若 H2 向 H4 发送数据帧，则 H2 及其对应接口就写入交换表。当 H4 向 H2 发送确认帧时，交换机查找交换表后，将该确认帧从 H2 对应的接口转发出去。集线器（Hub）无法隔离冲突域，因此 Hub 会向所有接口（除输入接口外）广播该确认帧的数据信号。因此，从物理层上能够收到该确认帧的主机有 H2 和 H3。",
      "source_file": "wiki/sources/计算机网络/chapters/ch03-第3章-数据链路层.md"
    },
    {
      "id": "计算机网络_4-1-6_04",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "在互联网中，一个路由器的路由表通常包含（）。",
      "options": {
        "A": "目的网络和到达目的网络的完整路径",
        "B": "所有目的主机和到达该目的主机的完整路径",
        "C": "目的网络和到达该目的网络路径上的下一个路由器的 IP 地址",
        "D": "目的网络和到达该目的网络路径上的下一个路由器的 MAC 地址"
      },
      "answer": [
        "C"
      ],
      "explanation": "考点追踪 ▶ ICMP 使用的下层协议（2012）\n\n为了更有效地转发 IP 数据报并提高交付成功率，网络层使用了网际控制报文协议（Internet Control Message Protocol，ICMP），使主机或路由器能够向源点报告网络中的差错或异常情况。ICMP 报文被封装在 IP 数据报中传送，但它不是高层协议，而是网络层协议。\n\nICMP 报文分为两类：ICMP 差错报告报文和 ICMP 询问报文。\n\n考点追踪 ▶ ICMP 差错报告报文的类型与语义（2022）\n\nICMP差错报告报文用于目标主机或路径上的路由器向源主机报告差错。有5种常用类型：\n\n1）终点不可达。当路由器或主机无法交付数据报时，向源点发送终点不可达报文。  \n2）时间超过。路由器每转发一个数据报，就会将其首部的生存时间（TTL）减1；若TTL减为0，则丢弃该数据报，并向源点发送时间超过报文。此外，若目的主机在规定时间内未能收齐某个数据报的所有分片，则也会丢弃已收到的分片，并向源点发送时间超过报文。  \n3）参数问题。当路由器或目的主机发现数据报首部中某些字段的值不正确（注意并非任意字段）时，丢弃该数据报，并向源点发送参数问题报文。  \n4）改变路由（重定向）。路由器通过改变路由报文通知源点，下次应将数据报发送给另外的路由器（可通过更好的路由），使得路径更短。\n\n5) 源点抑制 $^{①}$ 。当路由器或主机因拥塞而丢弃数据报时，通过此报文请求源点降低发送速率。为了避免无限循环或无意义反馈，以下几种情形不应发送 ICMP 差错报告报文：\n\n1）对 ICMP 差错报告报文本身，不再发送 ICMP 差错报告报文。   \n2）对第一个数据报片之后的所有后续分片，不发送 ICMP 差错报告报文。  \n3）对目的地址为多播或广播地址的数据报，不发送 ICMP 差错报告报文。  \n4）对具有特殊地址（如 127.0.0.0 或 0.0.0.0）的数据报，不发送 ICMP 差错报告报文。\n\n常用的 ICMP 询问报文有两种类型:\n\n1）回送请求和回答报文。用来测试目的主机是否可达，并获取其状态信息。  \n2）时间戳请求和回答报文。通过报文中记录的时间戳，发送方可估算当前的往返时延。\n\nICMP 的两个典型应用是：分组网间探测 PING，利用 ICMP 回送请求与回答报文，测试两台主机之间的连通性；路由跟踪 Traceroute（UNIX）/Tracert（Windows），通过逐步增大 TTL 值，触发沿途路由器返回 ICMP 时间超过报文，从而追踪分组经过的路由路径。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_07",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "在互联网中，IP 分组的传输需要经过源主机和中间路由器到达目的主机，通常（）。",
      "options": {
        "A": "源主机和中间路由器都知道 IP 分组到达目的主机需要经过的完整路径",
        "B": "源主机和中间路由器都不知道 IP 分组到达目的主机需要经过的完整路径",
        "C": "源主机知道 IP 分组到达目的主机需要经过的完整路径，而中间路由器不知道",
        "D": "源主机不知道 IP 分组到达目的主机需要经过的完整路径，而中间路由器知道"
      },
      "answer": [
        "B"
      ],
      "explanation": "每个路由器都根据路由表来选择 IP 分组的下一跳地址，只有到了下一跳路由器，才知道再下一跳应当怎样走。主机仅知道到达本地网络的路径，到达其他网络的 IP 分组均转发到路由器。而源主机也只把 IP 分组发给网关，所以路由器和源主机都不知道 IP 分组要经过的完整路径。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_08",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列协议中，属于网络层协议的是（）。 I. IP II. TCP III. FTP IV. ICMP",
      "options": {
        "A": "I 和 II",
        "B": "II 和 III",
        "C": "III 和 IV",
        "D": "I 和 IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "TCP 属于传输层协议，FTP 属于应用层协议，只有 IP 和 ICMP 属于网络层协议。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_09",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于各种数据交换方式的叙述中，错误的是（）。",
      "options": {
        "A": "电路交换不提供差错控制功能",
        "B": "分组交换的分组有最大长度的限制",
        "C": "虚电路是面向连接的，它提供的是一种可靠的服务",
        "D": "在故障率很高的传输系统中，选择虚电路方式更合适"
      },
      "answer": [
        "D"
      ],
      "explanation": "电路交换不具备差错控制能力，选项 A 正确。分组交换对每个分组的最大长度有规定，超过此长度的分组都被分割成几个长度较小的分组后再发送，选项 B 正确。\n\n分组交换又分为数据报和虚电路两种方式。数据报是无连接的，它提供的是不可靠的服务，分组有可能丢失、失序，也不保证到达的时间，但因每个分组独立选择传送路径，当某个节点发生故障时，后续的分组可另选路径。另外，通过高层协议如 TCP 也可保证其传输的可靠性和有序性。虚电路是面向连接的，它提供的是可靠的服务，能保证数据的可靠性和有序性，但是一旦虚电路中的某个节点出现故障，就必须重新建立一条虚电路，对于故障率高的传输系统，易出现节点故障，这项任务就显得相当艰巨，因此采用数据报方式更合适。选项 C 正确、选项 D 错误。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_10",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于虚电路服务和数据报服务的叙述中，正确的是（）。",
      "options": {
        "A": "虚电路服务和数据报服务都是无连接的服务",
        "B": "数据报服务中，分组在网络中沿同一条路径传输，并且按发出顺序到达",
        "C": "虚电路在建立连接后，分组中需携带虚电路标识",
        "D": "虚电路中的分组到达顺序可能与发出顺序不同"
      },
      "answer": [
        "C"
      ],
      "explanation": "虚电路服务是有连接的，属于同一条虚电路的分组，根据该分组的相同虚电路标识，按照同一路由转发，保证分组的有序到达。在数据报服务中，网络为每个分组独立地选择路由，传输既不保证可靠性，又不保证分组的按序到达。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_11",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "同一报文中的分组可以由不同的传输路径通过通信子网的方法是（）。",
      "options": {
        "A": "分组交换",
        "B": "电路交换",
        "C": "虚电路方式",
        "D": "数据报方式"
      },
      "answer": [
        "D"
      ],
      "explanation": "分组交换有两种方式：虚电路和数据报。在虚电路服务中，属于同一条虚电路的分组按照同一路由转发；在数据报服务中，网络为每个分组独立地选择路由，传输既不保证可靠性，又不保证分组的按序到达。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_12",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "下列有关数据报和虚电路的叙述中，错误的是（）。",
      "options": {
        "A": "数据报方式中，若某个节点因故障而丢失分组，则其他分组仍可正常传输",
        "B": "数据报方式中，每个分组独立地进行路由选择和转发，不同分组之间没有必然联系",
        "C": "虚电路方式中，属于同一条虚电路的分组按照同一路由转发",
        "D": "尽管虚电路方式是面向连接的，但它并不保证分组的有序到达"
      },
      "answer": [
        "D"
      ],
      "explanation": "关于虚电路和数据报的比较，请参考表 4.1。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_13",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "下列关于虚电路和数据报的叙述中，正确的是（）。",
      "options": {
        "A": "虚电路是一种分组交换技术，但不能按照存储转发的方式工作",
        "B": "虚电路的连接是临时性连接，当会话结束时就释放这种连接",
        "C": "数据报服务不提供可靠传输，但可以保证分组的有序到达",
        "D": "数据报服务中，每个分组都必须携带源地址和目的地址"
      },
      "answer": [
        "D"
      ],
      "explanation": "虚电路是一种分组交换技术，它可以采用存储转发的方式工作，选项 A 错误。虚电路不只是临时性的，它提供的服务包括永久性虚电路（PVC）和交换型虚电路（SVC），其中前者是一种提前定义好的、基本上不需要任何建立时间的端点之间的连接，而后者是端点之间的一种临时性连接，这些连接只持续所需的时间，且在会话结束时就取消这种连接，选项 B 错误。数据报服务是无连接的，既不提供可靠性保障，又不保证分组的有序到达，选项 C 错误。在数据报服务中，每个分组都必须携带源地址和目的地址；而虚电路服务中，建立连接后，分组只需携带虚电路标识。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_14",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下列关于虚电路的说法中，正确的是（）。",
      "options": {
        "A": "虚电路依赖其他协议实现差错控制",
        "B": "采用虚电路方式发送分组时，分组首部都必须包含目的地址",
        "C": "虚电路结合了电路交换的思想，适合对实时性要求较高的长时间通信",
        "D": "多站点同时使用一段物理链路实行虚电路交换会产生冲突，无法正常通信"
      },
      "answer": [
        "C"
      ],
      "explanation": "虚电路提供的是可靠的通信服务，本身就可实现差错控制。分组仅在连接建立时才需要使用完整的目的地址，之后每个分组只需携带这条虚电路的编号即可。多站点同时使用一段物理链路实现虚电路交换不会产生冲突，因为每个分组都有一个虚电路号来标识所属的虚电路。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_15",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "下列关于虚电路的说法中，正确的是（）。",
      "options": {
        "A": "虚电路和电路交换一样，在数据传输前要建立物理连接",
        "B": "虚电路中间节点发生故障后，可沿其他路径继续通信，无须重新建立连接",
        "C": "虚电路中只有建立连接的分组需要携带源地址和目的地址",
        "D": "在虚电路上传送的同一个会话的数据分组可以走不同的路径"
      },
      "answer": [
        "C"
      ],
      "explanation": "虚电路是一种分组交换技术，它在数据传输前要建立逻辑连接而非物理连接，选项 A 错误。虚电路的中间节点发生故障后，会导致整条虚电路失效，需要重新建立连接，选项 B 错误。虚电路只有建立连接的分组需要携带目的地址，以进行路由选择，之后传送的分组只需携带虚电路号即可。一个会话的虚电路是事先建立好的，因此它的数据分组所走的路径也是固定的，选项 D 错误。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_16",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "下列 4 种传输方式中，由网络负责差错控制和流量控制，分组按顺序被递交的是（）。",
      "options": {
        "A": "电路交换",
        "C": "虚电路分组交换",
        "B": "报文交换",
        "D": "数据报分组交换"
      },
      "answer": [
        "C"
      ],
      "explanation": "电路交换和报文交换不采用分组交换技术。数据报传输方式没有差错控制和流量控制机制，也不保证分组按序交付。虚电路方式提供面向连接的、可靠的、保证分组按序到达的网络服务。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_17",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "下列各种描述中，（）不是软件定义网络（SDN）的特点。",
      "options": {
        "A": "控制与转发功能分离",
        "C": "接口开放可编程",
        "B": "控制平面集中化",
        "D": "Openflow 取代了路由协议"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项 A、B 和 C 都是 SDN 的特点。Openflow 协议是控制平面和数据平面之间的接口。在 SDN 中，路由器之间不再相互交换路由信息，由远程控制器计算最佳路由。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_18",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "下列关于 SDN（软件定义网络）的描述中，错误的是（）。 I. SDN 是近年来出现的一种新型物理网络结构 II. OpenFlow 交换机基于 “流表” 来转发分组 III. SDN 远程控制器位于 OpenFlow 交换机中 IV. OpenFlow 可视为 SDN 的控制层面与数据层面的通信接口",
      "options": {
        "A": "I 和 III",
        "B": "I 和 IV",
        "C": "II 和 IV",
        "D": "I、III 和 IV"
      },
      "answer": [
        "A"
      ],
      "explanation": "SDN 是一种新型网络体系结构，是一种设计、构建和管理网络的新方法，不是一种新型物理网络结构。在 SDN 中，完成 “匹配+动作” 的设备通常也称 OpenFlow 交换机。相应地，在 SDN 中取代传统路由器中转发表的是流表。SDN 远程控制器是一种控制平面的实现方式，它由一个远程的服务器来计算和分发流表给网络设备，SDN远程控制器不在OpenFlow交换机中。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_19",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2011 统考真题】TCP/IP 模型的网络层提供的是（）。",
      "options": {
        "A": "无连接、不可靠的数据报服务",
        "C": "有连接、不可靠的虚电路服务",
        "B": "无连接、可靠的数据报服务",
        "D": "有连接、可靠的虚电路服务"
      },
      "answer": [
        "A"
      ],
      "explanation": "TCP/IP 的网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。考察 IP 首部，若是面向连接的，则应有用于建立连接的字段，但是首部中没有；若提供可靠的服务，则至少应有序号和检验和两个字段，但是 IP 分组头中也没有（IP 首部中只有首部检验和）。通常，有连接、可靠的应用是由传输层的 TCP 实现的。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_20",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2020 统考真题】下列关于虚电路网络的叙述中，错误的是（）。",
      "options": {
        "A": "可以确保数据分组传输顺序",
        "B": "需要为每条虚电路预分配带宽",
        "C": "建立虚电路时需要进行路由选择",
        "D": "依据虚电路号（VCID）进行数据分组转发"
      },
      "answer": [
        "B"
      ],
      "explanation": "在建立虚电路的阶段，分组才需要携带完整的目的地址，以进行路由器选择。之后，每个分组只需携带短的虚电路号即可，属于同一条虚电路的分组按照同一路由进行转发，分组到达终点的顺序与发送顺序相同，可以保证有序传输。虚电路只是一条逻辑上的连接，并不是一条物理上的连接，因此不需要为每条虚电路预分配带宽。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-1-6_21",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.1.6",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2022 统考真题】在 SDN 网络体系结构中，SDN 控制器向数据平面的 SDN 交换机下发 流表时所使用的接口是（）。",
      "options": {
        "A": "东向接口",
        "B": "南向接口",
        "C": "西向接口",
        "D": "北向接口"
      },
      "answer": [
        "B"
      ],
      "explanation": "SDN 对上层开发者提供的编程接口称为北向接口，而南向接口则负责控制平面和数据平面间的通信，所以 SDN 控制器向数据平面的 SDN 交换机下发流表时使用南向接口。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_19",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "为了提供更多的子网，为一个 B 类地址指定了子网掩码 255.255.240.0，则每个子网最多可以有的主机数是（）。",
      "options": {
        "A": "16",
        "B": "256",
        "C": "4094",
        "D": "4096"
      },
      "answer": [
        "C"
      ],
      "explanation": "因为 $240_{10}=11110000_{2}$ ，所以共有 12 比特位用于主机地址，且主机位全 0 和全 1 不能使用，所以最多可以有的主机数为 $2^{12}-2=4094$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_20",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "不考虑 NAT，在 Internet 中，IP 数据报从源节点到目的节点可能需要经过多个网络和路由器。在整个传输过程中，IP 数据报首部中的（）。",
      "options": {
        "A": "源地址和目的地址都不会发生变化",
        "B": "源地址有可能发生变化而目的地址不会发生变化",
        "C": "源地址不会发生变化而目的地址有可能发生变化",
        "D": "源地址和目的地址都有可能发生变化"
      },
      "answer": [
        "A"
      ],
      "explanation": "在 Internet 中，IP 数据报从源节点到目的节点可能需要经过多个网络和路由器。当一个路由器接收到一个 IP 数据报时，路由器根据 IP 数据报首部的目的 IP 地址进行路由选择，并不改变源 IP 地址的取值。即使 IP 数据报被分片，原 IP 数据报的源 IP 地址和目的 IP 地址也将复制到每个分片的首部，因此在整个传输过程中，IP 数据报首部的源 IP 地址和目的 IP 地址都不发生变化。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_21",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "把 IP 网络划分成子网，这样做的好处是（）。",
      "options": {
        "A": "增加冲突域的大小",
        "B": "增加主机的数量",
        "C": "减少广播域的大小",
        "D": "增加网络的数量"
      },
      "answer": [
        "C"
      ],
      "explanation": "划分子网可以增加子网的数量（把一个大的网络划分成许多小的网络，这是子网划分的结果，并不是目的），子网之间的数据传输需要通过路由器进行，因此减少了广播域的大小，提高了网络的效率和安全性。划分子网后，因为各子网中主机号全0和全1的地址不能使用，所以会减少总的主机数量，但划分子网提高了IP地址的利用率。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_22",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "一个网段的网络号为198.90.10.0/27，最多可以分成（）个子网；此网段划分成若干子网后，每个子网最多具有（）个可分配给主机的IP地址。",
      "options": {
        "A": "8, 30",
        "B": "4, 62",
        "C": "16, 14",
        "D": "32, 6"
      },
      "answer": [
        "A"
      ],
      "explanation": "由题可知，主机号有 5 位，若主机号只占 1 位，则没有有效的 IP 地址可供分配（除去 0 和 1），因此最少 2 位表示主机号，还剩 3 位表示子网号，所以最多可以分成 8 个子网。而当 5 位都表示主机数，即只有 1 个子网时，每个子网最多具有 30 个有效的 IP 地址（除去全 0 和全 1）。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_23",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "一台主机有两个 IP 地址，一个地址是 192.168.11.25，另一个地址可能是（）。",
      "options": {
        "A": "192.168.11.0",
        "B": "192.168.11.26",
        "C": "192.168.13.25",
        "D": "192.168.11.24"
      },
      "answer": [
        "C"
      ],
      "explanation": "在网络中，允许一台主机有两个或两个以上的 IP 地址，若一台主机有两个或两个以上 IP 地址，则说明这台主机属于两个或两个以上的网络。IP 地址 192.168.11.25 属于 C 类 IP 地址，所以与 A、B 和 D 属于同一个网络；只有 C 的网络号不同，表明它属于不同的网络。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_24",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "CIDR 技术的主要作用是（）。",
      "options": {
        "A": "有效分配 IP 地址空间，并减少路由表的数量",
        "B": "把大的网络划分成小的子网",
        "C": "彻底解决 IP 地址资源不足的问题",
        "D": "由多台主机共享同一个网络地址"
      },
      "answer": [
        "A"
      ],
      "explanation": "CIDR 可以更合理地分配 IP 地址空间，缓解 IP 地址消耗的速度，但无法彻底解决 IP 地址耗尽的问题。CIDR 通过路由聚合可减少路由表数量，从而减少路由器之间的信息交换，提高了网络性能。把大的网络划分成小的子网，这是 CIDR 划分子网的结果，并不是作用。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_25",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "某个 CIDR 表示的 IPv4 地址为 126.166.66.99/22，则下面的描述中错误的是（）。",
      "options": {
        "A": "网络前缀占用 22 比特",
        "B": "主机编号占用 10 比特",
        "C": "所在地址块包含的地址数为 $2^{10}$",
        "D": "126.166.66.99 是所在地址块的第一个地址"
      },
      "answer": [
        "D"
      ],
      "explanation": "CIDR 表示法是一种用斜线 “/” 后面加上网络前缀所占的位数来表示 IP 地址的方法。网络前缀所占的位数是网络号部分，剩下的位数是主机号部分。所在地址块包含的地址数是 $2^{10}=1024$ 。令主机号全为 0，所以 126.166.66.99/22 所在地址块的第一个地址是 126.166.64.0。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_26",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "某网络的一台主机的 IP 地址是 200.15.10.6/29，其配置的默认网关地址是 200.15.10.7，这样配置后发现主机无法 PING 通任何远程设备，原因是（）。",
      "options": {
        "A": "默认网关的地址不属于这个子网",
        "B": "默认网关的地址是子网中的广播地址",
        "C": "路由器接口的地址是子网的广播地址",
        "D": "路由器接口的地址是多播地址"
      },
      "answer": [
        "B"
      ],
      "explanation": "200.15.10.7 的最后一个字节展开成二进制为 0000 0111，该地址是 200.15.10.6/29 所在地址块的广播地址，不能使用。若将默认网关设置为广播地址，则导致无法识别网关，而被当作一个广播目标，导致分组无法正确地转发给其他网络，而被分发给本网络上的所有主机。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_28",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "路由表错误和软件故障都可能使得网络中的数据形成传输环路而无限转发环路的分组，IPv4 协议解决该问题的方法是（）。",
      "options": {
        "A": "报文分片",
        "B": "设定生命期",
        "C": "增加检验和",
        "D": "增加选项字段"
      },
      "answer": [
        "B"
      ],
      "explanation": "为每个 IP 分组设定生存时间（TTL），每经过一个路由器，TTL 减 1，TTL 为 0 时，路由器就不再转发该分组。因此可以避免分组在网络中无限循环下去。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_29",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "当下列 IP 地址作为 IP 数据报的目的地址时，互联网上的路由器不会正常转发的是（）。",
      "options": {
        "A": "192.172.56.23",
        "B": "172.15.34.128",
        "C": "192.168.32.17",
        "D": "172.128.45.34"
      },
      "answer": [
        "C"
      ],
      "explanation": "互联网的路由器对目的地址是私有地址的IP数据报一律不进行转发。有3个私有地址段：\n\n10.0.0.0/8，即 10.0.0.0～10.255.255.255，相当于 1 个 A 类网络。\n\n172.16.0.0/12，即 172.16.0.0～172.31.255.255，相当于 16 个连续的 B 类网络。\n\n192.168.0.0/16，即 192.168.0.0～192.168.255.255，相当于 256 个连续的 C 类网络。\n\n所以只有选项 C 是内部地址，不允许出现在互联网（公网）上。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_30",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "为了解决 IP 地址耗尽的问题，可以采用以下措施，其中治本的是（）。",
      "options": {
        "A": "划分子网",
        "B": "采用无类比编址 CIDR",
        "C": "采用网络地址转换 NAT",
        "D": "采用 IPv6"
      },
      "answer": [
        "D"
      ],
      "explanation": "最初设计的分类 IP 地址，因为每类地址所能连接的主机数大大超过一般单位的需求量，所以造成了 IP 地址的浪费。划分子网通过从网络的主机号借用若干比特作为子网号，从而使原来较大规模的网络细分为几个规模较小的网络，提高了 IP 地址的利用率。\n\n与划分子网相比，CIDR 是一种更灵活的手段，它消除了 A、B、C 类地址及划分子网的概念。使用各种长度的网络前缀来代替分类地址中的网络号和子网号，将网络前缀都相同的 IP 地址组成 “CIDR 地址块”。网络前缀越短，地址块越大。互联网服务提供者再根据客户的具体情况，分配合适大小的 CIDR 地址块，从而更加有效地利用 IPv4 的地址空间。\n\n采用网络地址转换（NAT），可以使一些使用本地地址的专用网连接到互联网上，进而使得一些机构的内部主机可以使用专用地址，只需给该机构分配一个 IP 地址即可，并且这些专用地址是可重用的——其他机构也可使用，所以大大节省了 IP 地址的消耗。\n\n尽管以上三种方法可以在一定阶段内有效缓解 IP 地址耗尽的危机，但无论是从计算机本身发展来看还是从互联网的规模和传输速率来看，现在的 IPv4 地址已很不适用，所以治本的方法还是使用 128 比特编址的 IPv6 地址。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_31",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "下列对 IP 分组的分片和重组的描述中，正确的是（）。",
      "options": {
        "A": "IP 分组可以被源主机分片，并在中间路由器进行重组",
        "B": "IP 分组可以被路径中的路由器分片，并在目的主机进行重组",
        "C": "IP 分组可以被路径中的路由器分片，并在中间路由器上进行重组",
        "D": "IP 分组可以被路径中的路由器分片，并在最后一跳的路由器上进行重组"
      },
      "answer": [
        "B"
      ],
      "explanation": "当路由器准备将 IP 分组发送到网络上，而该网络又无法将整个分组一次发送时，路由器必须将该分组分片，使其长度能满足这一网络对分组长度的限制。IP 分片可以独立地通过各个路径发送，而且在传输过程中仍然存在分片的可能（不同网络的 MTU 可能不同），因此不能由中间路由器进行重组。分片后的 IP 分组直至到达目的主机后才能汇集在一起，并且甚至不一定以原先的次序到达。这样，进行接收的主机都要求支持重组能力。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_32",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "一个网络中有几个子网，其中一个已分配了子网号74.178.247.96/29，则下列网络前缀中不能再分配给其他子网的是（）。",
      "options": {
        "A": "74.178.247.120/29",
        "B": "74.178.247.64/29",
        "C": "74.178.247.96/28",
        "D": "74.178.247.104/29"
      },
      "answer": [
        "C"
      ],
      "explanation": "“/29”表明前29位是网络号，4个选项的前3个字节均相同。A中第4个字节120为01111000，前5位为01111；B中第4个字节64为01000000，前5位为01000；C中第4个字节96为01100000，前4位为0110；D中第4个字节104为01101000，前5位为01101。因为已经分配的子网74.178.247.96/29的第4个字节的前5位为01100，这与C中第4个字节的前4位重叠，所以C中的网络前缀不能再分配给其他子网。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_33",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "主机 A 和主机 B 的 IP 地址分别为 216.12.31.20 和 216.13.32.21，要想让 A 和 B 工作在同一个 IP 子网内，应该给它们分配的子网掩码是（）。",
      "options": {
        "A": "255.255.255.0",
        "B": "255.255.0.0",
        "C": "255.255.255.255",
        "D": "255.0.0.0"
      },
      "answer": [
        "D"
      ],
      "explanation": "本题实际上就是要求找一个子网掩码，使得 A 和 B 的 IP 地址与该子网掩码逐位 “与” 之后得到相同的结果。选项 D 与 A、B 相 “与” 的结果均为 216.0.0.0。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_34",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "某单位分配了 1 个 B 类地址，计划将内部网络划分成 35 个子网，将来可能增加 16 个子网，每个子网的主机数量接近 800 台，则可行的掩码方案是（）。",
      "options": {
        "A": "255.255.248.0",
        "B": "255.255.252.0",
        "C": "255.255.254.0",
        "D": "255.255.255.0"
      },
      "answer": [
        "B"
      ],
      "explanation": "未进行子网划分时，B 类地址有 16 位作为主机位。因为共需要划分 51 个子网， $2^{5}<51<2^{6}$ ，所以需要从主机位划出 6 位作为子网号，剩下的 10 位可容纳的主机数为 1022（ $2^{10}-2$ ）台主机，满足题目要求。因此子网掩码为 255.255.252.0。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_35",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "设有 4 条路由 172.18.129.0/24、172.18.130.0/24、172.18.132.0/24 和 172.18.133.0/24，若进行路由聚合，则能覆盖这 4 条路由的地址是（）。",
      "options": {
        "A": "172.18.128.0/21",
        "B": "172.18.128.0/22",
        "C": "172.18.130.0/22",
        "D": "172.18.132.0/23"
      },
      "answer": [
        "A"
      ],
      "explanation": "4 条路由的前 24 位（3 个字节）为网络前缀，前 2 个字节都一样，因此只需要比较第 3 个字节即可，129 = 10000001，130 = 10000010，132 = 10000100，133 = 10000101。前 5 位是完全相同的，因此聚合后的网络的掩码中，1 的数量应该是 $8 + 8 + 5 = 21$ ，聚合后的网络的第 3 个字节应该\n\n是 10000000 = 128，因此答案为 172.18.128.0/21。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_36",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "下列 4 个地址块中，与地址块 192.168.6.192/26 不重叠且与 192.168.6.192/26 聚合后的地址块不会引入多余地址的是（）。",
      "options": {
        "A": "192.168.6.0/25",
        "B": "192.168.6.0/26",
        "C": "192.168.6.128/26",
        "D": "192.168.6.192/27"
      },
      "answer": [
        "C"
      ],
      "explanation": "选项 A 与 192.168.6.192/26 不重叠，聚合后的地址块为 192.168.6.0/24，聚合后的地址块会引入多余地址。选项 B 与 192.168.6.192/26 不重叠，聚合后的地址块为 192.168.6.0/24，聚合后的地址块会引入多余地址；选项 C 与 192.168.6.192/26 不重叠，聚合后的地址块为 192.168.6.128/25，聚合后的地址块未引入多余地址；选项 D 在 192.168.6.192/26 内，有重叠。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_37",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "在一条点对点链路上，为了减少 IP 地址的浪费，子网掩码应指定为（）。",
      "options": {
        "A": "255.255.255.252",
        "B": "255.255.255.248",
        "C": "255.255.255.240",
        "D": "255.255.255.196"
      },
      "answer": [
        "A"
      ],
      "explanation": "在一条点对点链路中，只需要两个主机 IP 地址、一个网络地址和一个广播地址的 4 种组合，主机号只需 2 位，因此子网掩码应指定为 255.255.255.252 或用 CIDR 表示为 “/30”。\n\n注意，在新标准中，该题设的子网掩码可指定为 255.255.255.254，或用 CIDR 表示为 “/31”。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_38",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "某子网的子网掩码为 255.255.255.224，共给 4 台主机分配了 IP 地址，其中一台因 IP 地址分配不当而存在通信故障。这一台主机的 IP 地址是（）。",
      "options": {
        "A": "202.3.1.33",
        "B": "202.3.1.65",
        "C": "202.3.1.44",
        "D": "202.3.1.55"
      },
      "answer": [
        "B"
      ],
      "explanation": "本题中，某主机不能正常通信意味着它与其他三台主机不在同一个子网，只需判断哪个选项和其他选项不在同一个子网即可。子网掩码为255.255.255.224表示前27位是网络号，可以看出选项B属于子网202.3.1.64/27，其他三项属于子网202.3.1.32/27。或者，后5位是主机号，前3个子网的地址范围为 $202.3.1.1\\sim 30,33\\sim 62,65\\sim 94$ （排除全0或全1），据此也能选出答案。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_39",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "某主机的 IP 地址是 166.66.66.66，子网掩码为 255.255.192.0，若该主机向其所在子网发送广播分组，则目的 IP 地址应该是（）。",
      "options": {
        "A": "166.66.66.255",
        "B": "166.66.255.255",
        "C": "166.255.255.255",
        "D": "166.66.127.255"
      },
      "answer": [
        "D"
      ],
      "explanation": "由子网掩码 255.255.192.0，可知网络号占 18 位，主机号占 14 位，置 166.66.66.66 的后 14 位主机号为全 1，目的 IP 地址为 166.66.127.255。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_41",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "位于不同子网的主机之间相互通信时，下列说法中正确的是（）。",
      "options": {
        "A": "路由器在转发 IP 数据报时，重新封装源硬件地址和目的硬件地址",
        "B": "路由器在转发 IP 数据报时，重新封装源 IP 地址和目的 IP 地址",
        "C": "路由器在转发 IP 数据报时，重新封装目的硬件地址和目的 IP 地址",
        "D": "源站点可以直接进行 ARP 广播得到目的站点的硬件地址"
      },
      "answer": [
        "A"
      ],
      "explanation": "IP 数据报的首部既有源 IP 地址，又有目的 IP 地址，但在通信中，路由器只会根据目的 IP 地址进行路由选择。IP 数据报在通信过程中，首部的源 IP 地址和目的 IP 地址在经过路由器时不会发生改变。ARP 广播只在子网中传播，因为相互通信的主机不在同一个子网内，所以不可以直接通过 ARP 广播得到目的站的硬件地址。硬件地址只具有本地意义，因此每当路由器将 IP 数据报转发到一个具体的网络时，都需要重新封装源硬件地址和目的硬件地址。\n\n# 注意\n\n路由器接收到分组后，剥离该分组的数据链路层协议头，然后在分组被转发之前，给分组加上一个新的链路层协议头。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_42",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "路由器收到目的 IP 地址为 255.255.255.255 的分组，则路由器的操作是（）。",
      "options": {
        "A": "丢弃该 IP 分组",
        "B": "从所有其他接口转发该 IP 分组",
        "C": "通过路由表中的默认路由转发该 IP 分组",
        "D": "通过路由表中的特定主机路由转发该 IP 分组"
      },
      "answer": [
        "A"
      ],
      "explanation": "255.255.255.255 是受限的广播地址，仅用于主机配置过程中 IP 分组的目的地址。在任何情况下，路由器都不转发目的地址为受限广播地址的 IP 分组，这种 IP 分组仅出现在本地网络中。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_43",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "某以太网中，甲的 IP 地址为 211.71.136.23，子网掩码为 255.255.240.0，已知网关地址为 211.71.136.1。若甲向乙（IP 地址为 211.71.130.25）发送一个 IP 分组，则（）。",
      "options": {
        "A": "该分组封装成帧后直接发送给乙，帧中目的 MAC 地址为网关的 MAC 地址",
        "B": "该分组封装成帧后直接发送给乙，帧中目的 MAC 地址为乙的 MAC 地址",
        "C": "该分组封装成帧后交由网关转发，帧中目的 MAC 地址为网关的 MAC 地址",
        "D": "该分组封装成帧后交由网关转发，帧中目的 MAC 地址为乙的 MAC 地址"
      },
      "answer": [
        "B"
      ],
      "explanation": "先判断乙和甲是否在同一个子网内，用 IP 地址和子网掩码进行按位 “与” 运算，然后检查它们的网络前缀是否相同。若乙和甲在同一个子网内，则直接交付，无须经过网关，因此将乙的 MAC 地址作为帧的目的 MAC 地址。若乙和甲不在同一个子网内，则要通过网关转发，因此将网关的 MAC 地址作为帧的目的 MAC 地址。经计算，甲的网络前缀为 211.71.128.0/20，乙的网络前缀为 211.71.128.0/20，乙和甲在同一个子网内，因此帧的目的 MAC 地址为乙的 MAC 地址。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_44",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "下列情况需要启动 ARP 请求的是（）。",
      "options": {
        "A": "主机需要接收信息，但 ARP 表中没有源 IP 地址与 MAC 地址的映射关系",
        "B": "主机需要接收信息，但 ARP 表中已有源 IP 地址与 MAC 地址的映射关系",
        "C": "主机需要发送信息，但 ARP 表中没有目的 IP 地址与 MAC 地址的映射关系",
        "D": "主机需要发送信息，但 ARP 表中已有目的 IP 地址与 MAC 地址的映射关系"
      },
      "answer": [
        "C"
      ],
      "explanation": "当源主机向本地局域网上的某主机发送 IP 数据报时，先在其 ARP 高速缓存中查看有无目的 IP 地址与 MAC 地址的映射。若有，就把这个硬件地址写入 MAC 帧，然后通过局域网把该 MAC 帧发往此硬件地址；若没有，则先通过广播 ARP 请求分组，在获得目的主机的 ARP 响应分组后，将目的主机的 IP 地址与硬件地址的映射写入 ARP 高速缓存。若目的主机不在本局域网上，则将 IP 分组发送给本局域网上的路由器，当然要先通过同样的方法获得路由器的 IP 地址和硬件地址的映射关系。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_45",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "某网络拓扑如下图所示，H1 与 H2 的默认网关和子网掩码都分别配置为 192.168.3.1 和 255.255.255.0，H3 和 H4 的默认网关和子网掩码都分别配置为 192.168.3.254 和 255.255.255.128，初始时所有设备的 ARP 缓存均为空。则下列说法中错误的是（）。 ![](images/a51c96d308a6c8b036c797250bcda03f658cf324347580b0ae095a60dc6d81ab.jpg) <details> <summary>flowchart</summary> ```mermaid graph LR R2[\"Router R2\"] -->|E1 192.168.3.254| Switch[\"Switch\"] Switch --> Hub[\"Hub\"] H1[\"H1\"] -->|192.168.3.2| Switch H2[\"H2\"] -->|192.168.3.3| Switch H3[\"H3\"] -->|192.168.3.251| Hub Hub --> H4[\"H4\"] ``` </details>",
      "options": {
        "A": "若 H1 向 H3 发送数据，则 H2、H3、H4 都能收到 H1 发来的 ARP 请求报文",
        "B": "若 H3 向 H1 发送数据，则 H3 能收到 H1 发来的 ARP 响应报文",
        "C": "若 H1 向 H2 发送数据，则 H2、H3、H4 都能收到 H1 发来的 ARP 请求报文",
        "D": "若 H3 向 H4 发送数据，则 H3 能收到 H4 发来的 ARP 响应报文"
      },
      "answer": [
        "B"
      ],
      "explanation": "H3 向 H1 发送数据：① H3 用目的 IP 地址、子网掩码逐位 “与”，192.168.3.2 & 255.255.255.128 = 192.168.3.0，因为与 H3 自身的网络前缀不同，所以判定 H3 和 H1 不属于同一个网络。② H3 使用 ARP 获得默认网关 E1 的 MAC 地址，并将发往 H1 的 IP 数据报封装成 MAC 帧（H3 判定和 H1 不属于同一个网络，因此目的 MAC 地址是默认网关 E1），该帧经过集线器、交换机的转发，最终被默认网关 E1 接收（H1 收不到这个帧），路由器不再向入口 E1 转发 IP 数据报。综上，H3 不会向 H1 发送 ARP 响应报文，选项 B 错误。读者可尝试分析其他选项的通信过程。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_46",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 46,
      "type": "single_choice",
      "question": "可以动态为主机配置 IP 地址的协议是（）。",
      "options": {
        "A": "ARP",
        "B": "RARP",
        "C": "DHCP",
        "D": "NAT"
      },
      "answer": [
        "C"
      ],
      "explanation": "DHCP 提供了一种机制，使得使用 DHCP 可自动获得 IP 的配置信息而无须手工干预。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_47",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 47,
      "type": "single_choice",
      "question": "若某路由器收到一个 TTL 值为 1 的 IP 数据报，则路由器的操作是（）。",
      "options": {
        "A": "转发该 IP 数据报",
        "B": "仅仅丢弃该 IP 数据报",
        "C": "丢弃该 IP 数据报并向源主机发送类型为终点不可达的 ICMP 差错报告报文",
        "D": "丢弃该 IP 数据报并向源主机发送类型为时间超过的 ICMP 差错报告报文"
      },
      "answer": [
        "D"
      ],
      "explanation": "若路由器收到一个TTL值为1的IP数据报，则它先将TTL值减1，然后判断是否为0。若为0，则丢弃该IP数据报并向源主机发送类型为时间超过的ICMP差错报告报文。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_48",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 48,
      "type": "single_choice",
      "question": "下列关于 ICMP 报文的说法中，错误的是（）。",
      "options": {
        "A": "ICMP 报文封装在数据链路层帧中发送",
        "B": "ICMP 报文可以用于报告 IP 数据报发送错误",
        "C": "ICMP 报文封装在 IP 数据报中发送",
        "D": "对于已经携带 ICMP 差错报文的分组，不再产生 ICMP 差错报文"
      },
      "answer": [
        "A"
      ],
      "explanation": "ICMP 属于网络层协议，ICMP 报文被封装在 IP 数据报中发送，但 ICMP 不是高层协议。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_49",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 49,
      "type": "single_choice",
      "question": "下列关于 ICMP 差错报文的描述中，错误的是（）。",
      "options": {
        "A": "ICMP 报文分为差错报告报文和询问报文两类",
        "B": "对于已经分片的分组，只对第一个分片产生 ICMP 差错报文",
        "C": "PING 使用了 ICMP 差错报文",
        "D": "对于多播的分组，不产生 ICMP 差错报文"
      },
      "answer": [
        "C"
      ],
      "explanation": "PING 命令使用了 ICMP 的询问报文中的回送请求和回答报文。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_50",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 50,
      "type": "single_choice",
      "question": "【2010 统考真题】某网络的 IP 地址空间为 192.168.5.0/24，采用定长子网划分，子网掩码为 255.255.255.248，则该网络中的最大子网个数、每个子网内的最大可分配地址个数分别是（）。",
      "options": {
        "A": "32, 8",
        "B": "32, 6",
        "C": "8, 32",
        "D": "8, 30"
      },
      "answer": [
        "B"
      ],
      "explanation": "因为该网络的 IP 地址为 192.168.5.0/24，所以网络号为前 24 位，后 8 位为子网号 + 主机号。子网掩码为 255.255.255.248，第 4 个字节 248 转换成二进制为 11111000，因此后 8 位中，前 5 位用于子网号，在 CIDR 中可以表示 $2^{5}=32$ 个子网；后 3 位用于主机号，除去全 0 和全 1 的情况，可以表示 $2^{3}-2=6$ 台主机地址。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_51",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 51,
      "type": "single_choice",
      "question": "【2010 统考真题】若路由器 R 因为拥塞丢弃 IP 分组，则此时 R 可向发出该 IP 分组的源主机发送的 ICMP 报文类型是（）。",
      "options": {
        "A": "路由重定向",
        "B": "目的不可达",
        "C": "源点抑制",
        "D": "超时"
      },
      "answer": [
        "C"
      ],
      "explanation": "ICMP 差错报告报文有 5 种：终点不可达、源点抑制、时间超过、参数问题、改变路由。其中源点抑制是指当路由器或主机因拥塞而丢弃数据报时，向源点发送源点抑制报文，使源点知道应当把数据报的发送速率放慢。注意，最新的 ICMP 标准已不再使用源点抑制报文。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_52",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 52,
      "type": "single_choice",
      "question": "【2011 统考真题】在子网 192.168.4.0/30 中，能接收目的地址为 192.168.4.3 的 IP 分组的最大主机数是（）。",
      "options": {
        "A": "0",
        "B": "1",
        "C": "2",
        "D": "4"
      },
      "answer": [
        "C"
      ],
      "explanation": "首先分析 192.168.4.0/30 这个网络，主机号占 2 位，地址范围为 192.168.4.0～192.168.4.3，主机号全 1 时是广播地址、全 0 时是本网络地址，因此可容纳 4-2=2 台主机。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_53",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 53,
      "type": "single_choice",
      "question": "【2011 统考真题】某网络拓扑如下图所示，路由器 R1 只有到达子网 192.168.1.0/24 的路由。为使 R1 可以将 IP 分组正确地路由到图中的所有子网，在 R1 中需要增加的一条路由（目的网络，子网掩码，下一跳）是（）。 ![](images/6195ef6bf1077fb4b7696f5cea5d4a9eab698618b887a1866ecb99e5364110c0.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD R1[\"Router R1\"] -->|192.168.1.1| R2[\"Router R2\"] R2 -->|192.168.2.1| R1 R2 -->|192.168.2.130| R2 R2 -->|192.168.2.0/25| R2 R2 -->|192.168.2.0/24| R2 ``` </details>",
      "options": {
        "A": "192.168.2.0",
        "B": "192.168.2.0",
        "C": "192.168.2.0",
        "D": "192.168.2.0"
      },
      "answer": [
        "D"
      ],
      "explanation": "要使 R1 能正确地将分组路由到所有子网，R1 中需要有到 192.168.2.0/25 和 192.168.2.128/25 的路由，分别转换成二进制如下：\n\n192.168.2.0: 11000000 10101000 00000010 00000000\n\n192.168.2.128: 11000000 10101000 00000010 10000000\n\n前 24 位都相同, 于是可以聚合成超网 192.168.2.0/24, 子网掩码为前 24 位, 即 255.255.255.0。下一跳是与 R1 直接相连的 R2 的地址, 因此是 192.168.1.2。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_54",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 54,
      "type": "single_choice",
      "question": "【2012 统考真题】某主机的 IP 地址为 180.80.77.55，子网掩码为 255.255.252.0。若该主机向其所在子网发送广播分组，则目的地址可以是（）。",
      "options": {
        "A": "180.80.76.0",
        "B": "180.80.76.255",
        "C": "180.80.77.255",
        "D": "180.80.79.255"
      },
      "answer": [
        "D"
      ],
      "explanation": "子网掩码的第 3 个字节为 11111100，可知前 22 位为子网号、后 10 位为主机号。IP 地址的第 3 个字节为 01001101（下划线为子网号的一部分），将主机号（后 10 位）全置为 1，可以得到广播地址为 180.80.79.255。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_55",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 55,
      "type": "single_choice",
      "question": "【2012 统考真题】ARP 的功能是（）。",
      "options": {
        "A": "根据 IP 地址查询 MAC 地址",
        "B": "根据 MAC 地址查询 IP 地址",
        "C": "根据域名查询 IP 地址",
        "D": "根据 IP 地址查询域名"
      },
      "answer": [
        "A"
      ],
      "explanation": "在实际网络的数据链路层上传送数据时，最终必须使用硬件地址，ARP 将网络层的 IP 地址解析为数据链路层的 MAC 地址。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_56",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 56,
      "type": "single_choice",
      "question": "【2012 统考真题】在 TCP/IP 体系结构中，直接为 ICMP 提供服务的协议是（）。",
      "options": {
        "A": "PPP",
        "B": "IP",
        "C": "UDP",
        "D": "TCP"
      },
      "answer": [
        "B"
      ],
      "explanation": "ICMP 报文作为数据字段封装在 IP 分组中，因此 IP 直接为 ICMP 提供服务。UDP 和 TCP 都是传输层协议，为应用层提供服务。PPP 是数据链路层协议，为网络层提供服务。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_57",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 57,
      "type": "single_choice",
      "question": "【2015 统考真题】某路由器的路由表如下所示: <table><tr><td>目的网络</td><td>下一跳</td><td>接口</td></tr><tr><td>169.96.40.0/23</td><td>176.1.1.1</td><td>S1</td></tr><tr><td>169.96.40.0/25</td><td>176.2.2.2</td><td>S2</td></tr><tr><td>169.96.40.0/27</td><td>176.3.3.3</td><td>S3</td></tr><tr><td>0.0.0.0/0</td><td>176.4.4.4</td><td>S4</td></tr></table> 若路由器收到一个目的地址为 169.96.40.5 的 IP 分组，则转发该 IP 分组的接口是（）。",
      "options": {
        "A": "S1",
        "B": "S2",
        "C": "S3",
        "D": "S4"
      },
      "answer": [
        "C"
      ],
      "explanation": "根据 “最长前缀匹配原则”，169.96.40.5 与 169.96.40.0 的前 27 位匹配最长，因此选 C。选项 D 为默认路由，只有当前面的所有目的网络都不能和分组的目的 IP 地址匹配时才使用。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_58",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 58,
      "type": "single_choice",
      "question": "【2016 统考真题】如下图所示，假设 H1 与 H2 的默认网关和子网掩码均分别配置为 192.168.3.1 和 255.255.255.128, H3 和 H4 的默认网关和子网掩码均分别配置为 192.168.3.254 和 255.255.255.128，则下列现象中可能发生的是（）。 ![](images/570915be6e7ecb0ed72352c1276ecb86427f1c9bc6b0f472595cacc2196fd15e.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"Internet 130.18.10.1 Web服务器S\"] --> B[\"R1\"] B --> C[\"NAT L0\"] C --> D[\"R2\"] D --> E[\"R3\"] E --> F[\"201.1.2.0/25\"] G[\"DNS服务器 201.1.1.1\"] --> H[\"Switch\"] H --> I[\"H1 192.168.3.2\"] H --> J[\"H2 192.168.3.3\"] H --> K[\"H3 192.168.3.251\"] L[\"图中: R1~R3为路由器; Switch为100Base-T交换机; Hub为100Base-T集线器; 主机H1~H3的默认域名服务器均配置为201.1.1.1。\"] --> M[\"Switch\"] N[\"图中: R1~R3为路由器; Switch为100Base-T交换机; Hub为100Base-T集线器; 主机H1~H3的默认域名服务器均配置为201.1.1.1。\"] --> O[\"Switch\"] ``` </details>",
      "options": {
        "A": "H1 不能与 H2 进行正常 IP 通信",
        "B": "H2 与 H4 均不能访问 Internet",
        "C": "H1 不能与 H3 进行正常 IP 通信",
        "D": "H3 不能与 H4 进行正常 IP 通信"
      },
      "answer": [
        "C"
      ],
      "explanation": "从子网掩码可知 H1 和 H2 处于同一网络，H3 和 H4 处于同一网络，因此 H1 和 H2、H3 和 H4 分别可以进行正常的 IP 通信。H1 和 H2、H3 和 H4 处于不同的网络，因此需要通过路由器才能进行正常的 IP 通信，当 H1 向 H3 发送 IP 分组时，H1 用目的 IP 地址、子网掩码逐位 “与” H1 自身的网络前缀不同，于是判定 H3 与 H1 属于不同的网络，需要将该 IP 分组发送到默认网关，而 H1 配置的默认网关为 192.168.3.1，但 R2 的 E1 接口的 IP 地址为 192.168.3.254，因此 H1 不能与 H3 进行正常的 IP 通信。注意，即使 H1 的默认网关配置正确，但因为路由器不会从分组入口进行转发，所以 H1 和 H3 也无法进行正常的 IP 通信。H2 的默认网关为 192.168.3.1，因此 H2 也不能访问 Internet；H4 的默认网关为 192.168.3.254，因此 H4 可以正常访问 Internet。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_59",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 59,
      "type": "single_choice",
      "question": "【2016 统考真题】在上题的图中，假设连接 R1、R2 和 R3 之间的点对点链路使用地址 201.1.3.x/30，当 H3 访问 Web 服务器 S 时，R2 转发出去的封装 HTTP 请求报文的 IP 分组是源 IP 地址和目的 IP 地址，它们分别是（）。",
      "options": {
        "A": "192.168.3.251, 130.18.10.1",
        "B": "192.168.3.251, 201.1.3.9",
        "C": "201.1.3.8, 130.18.10.1",
        "D": "201.1.3.10, 130.18.10.1"
      },
      "answer": [
        "D"
      ],
      "explanation": "当内网用户向公网发送 IP 分组时，NAT 路由器会更改 IP 分组的源地址，因此下一步就是求 R1 的公网 IP 地址。连接 R1、R2 和 R3 之间的点对点链路使用 201.1.3.x/30 地址，可知该地址块的 IP 地址的后两位为主机号，而主机号全 0 和全 1 的 IP 地址不能分配，因此若已知路由器之间的点对点链路中的一个路由器接口的 IP 地址，就可求出另一路由器接口的 IP 地址。在 R1 和 R2 相连的链路中，已知 R1 端接口的 IP 地址为 201.1.3.9/30，将其后 8 位展开成二进制为 0000 1001，所以可分配给 R2 的 L0 接口的 IP 地址为 201.1.3.10。同理，也可求出 R2 的 L1 接口的 IP 地址为 201.1.3.2。访问 Web 服务器，只能通过 R2 的接口 L0 或 L1 转发，所以经过 R2 转发后，IP 分组的源地址可能为 201.1.3.10 或 201.1.3.2，目的地址为 Web 服务器的 IP 地址 130.18.10.1。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_60",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 60,
      "type": "single_choice",
      "question": "【2017 统考真题】若将网络 21.3.0.0/16 划分为 128 个规模相同的子网，则每个子网可分配的最大 IP 地址个数是（）。",
      "options": {
        "A": "254",
        "B": "256",
        "C": "510",
        "D": "512"
      },
      "answer": [
        "C"
      ],
      "explanation": "这个网络有 16 位的主机号，平均分成 128 个规模相同的子网，每个子网有 7 位的子网号，9 位的主机号。除去一个网络地址和广播地址，可分配的最大 IP 地址个数是 $2^{9}-2=512-2=510$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_61",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 61,
      "type": "single_choice",
      "question": "【2017 统考真题】下列 IP 地址中，只能作为 IP 分组的源 IP 地址但不能作为目的 IP 地址的是（）。",
      "options": {
        "A": "0.0.0.0",
        "B": "127.0.0.1",
        "C": "200.10.10.3",
        "D": "255.255.255.255"
      },
      "answer": [
        "A"
      ],
      "explanation": "0.0.0.0/32 可以作为本主机在本网络上的源地址。127.0.0.1 是回送地址，以它为目的 IP 地址的数据将被立即返回本机。200.10.10.3 是 C 类 IP 地址。255.255.255.255 是广播地址。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_62",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 62,
      "type": "single_choice",
      "question": "【2018 统考真题】某路由表中有转发接口相同的 4 条路由表项，其目的网络地址分别为 35.230.32.0/21、35.230.40.0/21、35.230.48.0/21 和 35.230.56.0/21，将该 4 条路由聚合后的目的网络地址为（）。",
      "options": {
        "A": "35.230.0.0/19",
        "B": "35.230.0.0/20",
        "C": "35.230.32.0/19",
        "D": "35.230.32.0/20"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于此类题目，先分析需要聚合的 IP 地址。观察发现，题中的 4 个路由地址，前 16 位完全相同，不同之处在于第 3 段的 8 位中，将这 8 位展开写成二进制，分别如下：\n\n<table><tr><td></td><td>7</td><td>6</td><td>5</td><td>4</td><td>3</td><td>2</td><td>1</td><td>0</td></tr><tr><td>32</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr><tr><td>40</td><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>0</td></tr><tr><td>48</td><td>0</td><td>0</td><td>1</td><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td></tr><tr><td>56</td><td>0</td><td>0</td><td>1</td><td>1</td><td>1</td><td>0</td><td>0</td><td>0</td></tr></table>\n\n观察发现，在 4 个地址的第 3 段中，从前向后最多有 3 位相同，因此这 3 位是能聚合的最大位数。将这些相同的位都保留，将第 3 段第 3 位后的所有位都置 0，就得到了聚合后的 IP 地址：35.230.32.0，其网络前缀为 16+3，即前 19 位，因此聚合后的网络地址为 35.230.32.0/19。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_70",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 70,
      "type": "single_choice",
      "question": "【2023 统考真题】主机 168.16.84.24/20 所在子网的最小可分配 IP 地址和最大可分配 IP 地址分别是（）。",
      "options": {
        "A": "168.16.80.1, 168.16.84.254",
        "B": "168.16.80.1, 168.16.95.254",
        "C": "168.16.84.1, 168.16.84.254",
        "D": "168.16.84.1, 168.16.95.254"
      },
      "answer": [
        "B"
      ],
      "explanation": "网络号位数为 $20 = 8 \\times 2 + 4$ ，子网掩码为 11111111 11111111 11110000 00000000，将它与主机地址 168.16.84.24 进行逐位“与”，得到网络地址为 168.16.80.0/20，该网段共有 $2^{12} - 2$ 个可供分配的 IP 地址，地址范围是 168.16.80.1～168.16.95.254。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_71",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 71,
      "type": "single_choice",
      "question": "【2024 统考真题】如下图所示的支持 VLAN 划分的交换机，已按端口划分了 3 个 VLAN，部分端口连接主机的 IP 地址和 MAC 地址如图中所示，ARP 表结构为 <IP 地址，MAC 地址，TTL>。下列选项中，不会出现在 H4 的 ARP 表中的是（）。 ![](images/8f7fce97dcaaa330e0c598b1e100868d67ee02ffd303ca98d812fc501de08540.jpg) <details> <summary>text_image</summary> H1 192.168.3.91 00-3E-C2-39-12-B5 H2 192.168.3.81 00-18-A2-3B-36-21 H3 192.168.3.125 00-E5-78-4A-09-B2 H4 192.168.3.12 00-35-6A-B1-4C-92 H5 192.168.3.251 00-1A-39-5B-E4-45 H6 192.168.3.129 00-08-6E-05-A7-82 H7 192.168.3.190 00-51-48-C9-63-A3 VLAN1 13 14 15 16 17 1 2 3 4 5 VLAN2 18 19 20 6 7 8 VLAN3 21 22 23 24 9 10 11 12 交换机 </details>",
      "options": {
        "A": "192.168.3.81, 00-18-A2-3B-36-21, 14:32:00",
        "B": "192.168.3.91, 00-3E-C2-39-12-B5, 14:37:00",
        "C": "192.168.3.125, 00-E5-78-4A-09-B2, 14:45:00",
        "D": "192.168.3.129, 00-08-6E-05-A7-82, 14:52:00"
      },
      "answer": [
        "D"
      ],
      "explanation": "ARP 用于解决局域网上的主机或路由器的 IP 地址和 MAC 地址的映射问题。因此 H4 的 ARP 表中只有和 H4 处于同一虚拟局域网上的主机的 IP 地址和 MAC 地址的映射，H4 位于 VLAN1，H6 位于 VLAN3，因此 D 表示的 H6 的 IP 地址与 MAC 地址的映射不应出现在 H4 的 ARP 表中。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-2-8_72",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.2.8",
      "section_title": "本节试题精选",
      "num": 72,
      "type": "single_choice",
      "question": "【2025 统考真题】一台新接入网络的主机 H 在通过 DHCP 服务器动态请求 IP 地址的过程中，与 DHCP 服务器交换 DHCP 报文的部分过程如下图所示。封装 DHCPREQUEST 报文的 IP 数据报的目的 IP 地址和源 IP 地址分别是（）。 ![](images/b9a5bb1ed0d5af5d4c841a22681ae6ce5bb9d4292916a9a335d0523d9a70b2d9.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD H[\"主机 H\"] -->|DHCP/OFFER yiaddr. 192.168.5.9 ...| DHCP服务器 192.168.5.1 DHCP/OFFER -->|DHCP/OFFER yiaddr. 192.168.5.9 ...| DHCP/OFFER DHCP/OFFER -->|DHCP/OFFER yiaddr. 192.168.5.9 ...| DHCP/OFFER DHCP/OFFER -->|DHCP/OFFER yiaddr. 192.168.5.9 ...| DHCP/OFFER DHCP/OFFER -->|DHCP/OFFER yiaddr. 192.167.5.9 ...| DHCP/OFFER DHCP/OFFER -->|DHCP/OFFER yiaddr. 192.167.5.9 ...| DHCP/OFFER DHCP/OFFER -->|DHCP/OFFER yiaddr. 192.167.5.9 ...| DHCP/OFFER DHCP/OFFER -->|DHCP/OFFER v iaddr. 192.167.5.9 ...| DHCP/OFFER DHCP/OFFER -->|DHCP/OFFER v iaddr. 192.167.5.9 ...| DHCP/OFFER ``` </details>",
      "options": {
        "A": "192.168.5.1, 0.0.0.0",
        "B": "192.168.5.1, 192.168.5.9",
        "C": "255.255.255.255, 0.0.0.0",
        "D": "255.255.255.255, 192.168.5.9"
      },
      "answer": [
        "C"
      ],
      "explanation": "在 DHCP 交互中，主机收到 DHCP Offer 报文后若接受该配置，则会广播 DHCP REQUEST 报文，通知所有 DHCP 服务器：选中的服务器确认分配，未选中的服务器释放预留资源。此时，主机尚未正式获得 IP 地址，因此 IP 数据报的源地址为 0.0.0.0，目的地址为 255.255.255.255。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-3-5_01",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.3.5",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下一代互联网核心协议 IPv6 的地址长度是（）。",
      "options": {
        "A": "32 比特",
        "B": "48 比特",
        "C": "64 比特",
        "D": "128 比特"
      },
      "answer": [
        "B"
      ],
      "explanation": "考点追踪 BGP 的功能（2013）\n\n边界网关协议（Border Gateway Protocol，BGP）是不同自治系统的路由器之间交换路由信息的协议，是一种外部网关协议。BGP 常用于互联网的 AS 之间。而 RIP 和 OSPF 都只能在一个 AS 内工作；若没有 BGP，则全世界数以万计的 AS 都将是一个个彼此孤立的“孤岛”。\n\n内部网关协议主要是设法使分组在一个AS内尽可能有效地从源站传送到目的站。在一个AS内部通常不需要考虑其他方面的策略。然而BGP使用的环境却不同，主要原因如下：\n\n1）互联网的规模太大，使得 AS 之间的路由选择非常困难，每个主干网路由器表中的项目数都非常庞大。对于 AS 之间的路由选择，要寻找最佳路由是很不现实的。\n\n2）AS 之间的路由选择必须考虑政治、安全或经济等有关因素。\n\n考点追踪 BGP 使用的下层协议（2013、2017）\n\n因此，BGP 只能力求寻找一条能够到达目的网络且比较好的路由（不能兜圈子），而并非要寻找一条最佳路由。BGP 采用了路径向量路由选择协议，它与距离向量协议（如 RIP）和链路状态协议（如 OSPF）都有很大的区别。BGP 是应用层协议，基于 TCP 实现。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-3-5_02",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.3.5",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "与 IPv4 相比，IPv6（）。",
      "options": {
        "A": "采用 32 位 IP 地址",
        "B": "增加了首部字段数量",
        "C": "不提供 QoS 保障",
        "D": "没有提供检验和字段"
      },
      "answer": [
        "B"
      ],
      "explanation": "BGP 路由的一般格式如下:\n\n$$\n\\mathrm{BGP} \\text {路由} = <   \\text {前缀}, \\mathrm{BGP} \\text {属性} > = <   \\text {前缀}, \\mathrm{AS-PATH}, \\mathrm{NEXT-HOP} >\n$$\n\nBGP 属性有多种类型。当一个路由器通过 BGP 会话向对等方通告一条 BGP 路由时，最重要的两个属性是 AS-PATH（自治系统路径）和 NEXT-HOP（下一跳）。\n\nAS-PATH 记录了该 BGP 路由所经过的自治系统序列。在 BGP 中，每个自治系统由一个全局唯一的自治系统号（ASN）标识。BGP 路由每经过一个 AS，就向其 ASN 加入 AS-PATH。可见，BGP 路由明确指出了所经过的 AS 路径，但不指明具体经过哪些路由器。\n\nNEXT-HOP 表示接收该 BGP 路由的路由器去往目的网络时应使用的下一跳地址。具体而言，从本 AS 出发时，需将分组发给 NEXT-HOP，其通常是通告此路由的邻居 AS 的边界路由器上与本 AS 直连的接口 IP 地址，即 AS-PATH 中第一个 AS（邻居 AS）对应的入口点。\n\n考点追踪 BGP会话类型（2024）\n\n在一个 AS 中有两类功能不同的路由器：边界路由器和内部路由器。在这些边界路由器之间，以及在 AS 内部的 BGP 路由器之间，均通过端口号为 179 的半永久 TCP 连接（交换信息后仍保持连接）来交换 BGP 路由信息。每对通过 TCP 连接交换 BGP 报文的路由器称为 BGP 对等方，该 TCP 连接称为 BGP 会话。其中，跨越两个 AS 的 BGP 会话称为外部 BGP（eBGP，external）会话，而位于同一 AS 内的 BGP 会话称为内部 BGP（iBGP，internal）会话。可见，BGP 不仅用于 AS 之间的路由交换，还运行于 AS 内部，以确保外部路由信息在整个 AS 中正确传播。\n\n为避免路由信息丢失，BGP 要求在 AS 内的任意两台路由器之间都要建立 iBGP 会话，但不要求物理直连（如图 4.20 中 R2 与 R4、R2 与 R5 之间的 iBGP 会话）。\n\n下面通过一个简单的例子来说明。\n\n在图 4.20 中，位于 AS2 的 R4 收到一条 BGP 路由 “X, AS-PATH = AS1, NEXT-HOP = R1”，表示 “从 R1 出发，经过 AS1，可到达网络 X”，即 “R1→X”。R4 为了构造自己的路由表，需要解析该路由的 NEXT-HOP。由于 R1 位于 AS1，AS2 的内部路由器无法直接将分组发往 R1，因此 R4 必须通过 AS2 中的某个边界路由器来抵达 NEXT-HOP。具体地，R4 知道 R1 是其 eBGP 对等方 R2 的邻居，因此通往 R1 的流量必须先发给 R2，形成的路径为 “R2→R1→X”。由于 R2 在 AS2 中，AS2 内的所有路由器都能将分组转发到 R2，再经过 R1，最终到达 X。\n\n![](images/ae52dfa21e84a1c192dbb5a0b81ef308d653d7a50380da91a12248a5dc8f8dee.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph LR\n    A[\"物理连接\"] --> B[\"iBGP会话\"]\n    B --> C[\"R3\"]\n    C --> D[\"R2\"]\n    D --> E[\"R1\"]\n    E --> F[\"AS1\"]\n    F --> G[\"X\"]\n    H[\"前缀匹配\"] --> I[\"X\"]\n    J[\"下一跳\"] --> K[\"?\"]\n    L[\"收到“X, AS1, R1”\"] --> M[\"R4\"]\n    M --> N[\"iBGP\"]\n    N --> O[\"R5\"]\n    O --> P[\"iBGP\"]\n    P --> Q[\"R2\"]\n    Q --> R[\"eBGP\"]\n    R --> S[\"BGP路由\"]\n    S --> T[\"AS1\"]\n    T --> U[\"X\"]\n    V[\"边界路由器\"] --> W[\"R2\"]\n```\n</details>\n\n图 4.20 BGP 路由的举例\n\n接着，R4 利用内部网关协议（IGP），找到从自身到 R2 的最优路径，假设查得下一跳为 R3。于是，R4 在路由表中添加表项 $<X, R3>$ 。此后，R4 收到目的网络为 X 的分组时，将按路径 R4→R3→R2→R1→X 转发。类似地，R3 也会在其路由表中添加表项 $<X, R2>$ 。每个路由器在收到新的 BGP 路由通告后，都需要执行 NEXT-HOP 解析和 IGP 查找，才能将路由正确写入本地路由表。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md",
      "hidden": true,
      "hidden_reason": "mismatched_explanation"
    },
    {
      "id": "计算机网络_4-3-5_03",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.3.5",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列关于 IPv6 地址 1A22:120D:0000:0000:72A2:0000:0000:00C0 的表示中，错误的是（）。",
      "options": {
        "A": "1A22:120D::72A2:0000:0000:00C0",
        "B": "1A22:120D::72A2:0:0:C0",
        "C": "1A22::120D::72A2::00C0",
        "D": "1A22:120D:0:0:72A2::C0"
      },
      "answer": [
        "B"
      ],
      "explanation": "考点追踪 BGP路由选择的策略（2024）\n\n若从一个 AS 到另一个 AS 中的网络 X 只有一条 BGP 路由，则无须进行 BGP 路由选择，该路由即为唯一路径。然而，如果存在两条或更多的 BGP 路由可供选择，则应根据以下原则，并按下面给定的优先顺序，选择一条较好的 BGP 路由。\n\n# （1）首先选择本地偏好值最高的路由\n\n在 BGP 路由的属性中，有一个称为本地偏好（LOCAL-PREF）的选项，其值可由管理员根据政治或经济上的策略来设置。以图 4.21 为例，从 AS1 到 AS4 共有两条 BGP 路由，管理员设置 LOCAL-PREF 值后，根据该原则，所有发往 AS4 的流量都选择从 R1 离开。然而，即使高速链路过载，BGP 也无法自动将部分流量切换到较空闲的低速链路。\n\n![](images/0b44502cdae7e955c5da7de05a07be9c453e4bd6a2d59b92a9175f3e231cd4aa.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"AS1\"] -->|R1| B[\"iBGP\"]\n    B -->|R2| C[\"AS2\"]\n    C -->|AS4| D[\"AS3\"]\n    D -->|AS3| E[\"AS2\"]\n    F[\"LOCAL-PREF = 300\"] -->|R1| G[\"AS2\"]\n    H[\"LOCAL-PREF = 200\"] -->|R2| I[\"AS3\"]\n    J[\"高速链路\"] --> K[\"AS2\"]\n    L[\"低速链路\"] --> M[\"AS3\"]\n    N[\"优先选择从R1到AS2的BGP路由\"] --> O[\"AS2\"]\n```\n</details>\n\n图 4.21 本地偏好值较高的路由优先\n\n若在几条 BGP 路由中找不出本地偏好值最高的路由，则采用下面的方法。\n\n# (2) 选择 AS 跳数最少（AS-PATH 最短）的路由\n\n假设到达目的 AS 的多条 BGP 路由的本地偏好值都相同，则 BGP 选择 AS 跳数最少的路由。以图 4.22 为例，从 AS1 到 AS5 共有两条 BGP 路由，根据该原则，应选择仅通过 1 个 AS 的 BGP 路由，即 AS1→AS4→AS5。然而，由于 AS4 是个很大的 AS，分组在 AS4 中反而要经过更多次的转发，可能要花费更长的时间。可见，AS 跳数最少的路由未必是最好的。\n\n![](images/426de35b5617448ba7f188c02276aec053868aecd3d31524cee9c05076c25dbd.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    AS1[\"AS1\"] --> AS2[\"AS2\"]\n    AS1 --> AS3[\"AS3\"]\n    AS2 --> AS4[\"AS4\"]\n    AS3 --> AS5[\"AS5\"]\n    AS4 --> AS5\n    AS5 -->|经过2个AS| AS1\n    style AS1 fill:#f9f,stroke:#333\n    style AS2 fill:#ccf,stroke:#333\n    style AS3 fill:#cfc,stroke:#333\n    style AS4 fill:#fcc,stroke:#333\n    style AS5 fill:#cff,stroke:#333\n    note bottom\n        优先选择经过1个AS的BGP路由\n    end\n```\n</details>\n\n图 4.22 根据经过 AS 跳数的多少选择 BGP 路由\n\n# （3）使用热土豆路由选择算法\n\n假设按前两种方法都无法确定最好的路由。以图 4.23 为例，从 AS1 到 AS3 共有两条 BGP 路由，假设这两条路由的本地偏好都相同，所经过的 AS 个数也相同。此时，AS1 中的每个路由器执行热土豆路由选择算法（比喻成烫手的热土豆），使分组经过最少的转发次数离开本 AS。这时要使用内部网关协议（如 RIP 或 OSPF），对于不同的路由器，得出的选择结果是不同的。对于 R1，要使分组尽快离开 AS1，应选择 R4 作为下一跳，因此应选择 BGP 路由 2，最终的转发路径为 R1→R4→BGP 路由 2。同理，对于 R2，要使分组尽快离开 AS1，应选择 R3 作为其下一跳，因此应选择 BGP 路由 1，最终的转发路径为 R2→R3→BGP 路由 1。\n\n![](images/c0a2e4b421ce62c3783d71b45861c937f8825b853efeb95423d264a9f0fe06ef.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    R1 -->|1| R2\n    R1 -->|1| AS1\n    R2 -->|1| R3\n    R3 -->|BPG路由1| AS2\n    R4 -->|BPG路由2| AS3\n    AS1 -->|BPG路由1| AS2\n    AS1 -->|BPG路由2| AS4\n    AS2 --> AS3\n    AS4 --> AS3\n```\n</details>\n\n图 4.23 热土豆路由选择算法的举例\n\n# （4）选择 BGP 标识符数值最小的路由\n\n在BGP报文的首部有一个称为BGP标识符的字段，该字段是运行BGP路由器的唯一标识符。当以上三种方法都无法找出最好的BGP路由时，可使用BGP标识符来选择路由。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md",
      "hidden": true,
      "hidden_reason": "mismatched_explanation"
    },
    {
      "id": "计算机网络_4-3-5_04",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.3.5",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "一个 IPv6 地址的简化写法为 8::D0:123:CDEF:89A，则其完整地址应该是（）。",
      "options": {
        "A": "8000:0000:0000:0000:00D0:1230:CDEF:89A0",
        "B": "0008:0000:0000:0000:00D0:0123:CDEF:89A0",
        "C": "8000:0000:0000:0000:D000:1230:CDEF:89A0",
        "D": "0008:0000:0000:0000:00D0:0123:CDEF:089A"
      },
      "answer": [
        "B"
      ],
      "explanation": "当 BGP 刚启动时，BGP 会话的两端需要交换完整的 BGP 路由表；此后，仅在路由发生变化时发送更新部分。这种方式有助于节省网络带宽并降低路由器的处理开销。\n\n# 考点追踪 BGP 报文类型及作用（2024）\n\nBGP-4 定义了以下四种报文类型。\n\n1）Open（打开）报文。用来与 BGP 会话的对等方建立关系，使通信初始化。  \n2）Update（更新）报文。用来通告某一路由的信息，以及列出要撤销的多条路由。  \n3）Keepalive（保活）报文。用来周期性地证实与对等方的连通性。  \n4）Notification（通知）报文。用来发送检测到的差错。\n\n两个路由器在建立 TCP 连接后，必须首先交换 Open 报文，以相互识别对方，并协商一些协议参数。收到 Open 报文的路由器若接受 BGP 连接请求，则返回 Keepalive 报文。BGP 会话建立后，对等方需要周期性地交换 Keepalive 报文（默认间隔为 60 秒），以维持连接活跃状态。\n\nUpdate 报文是 BGP 的核心，用于撤销它之前通告过的路由，或者宣布增加一条新的路由。撤销路由可以一次撤销多条，但新增路由时，每个更新报文只能增加一条。\n\n为检测对等方是否失效，每个 BGP 路由器都维护一个保持时间计时器。每当收到任意 BGP 报文，计时器就重置为 0 并开始计时，若在约定的保持时间内未收到任何 BGP 报文，则认为对等方已失效，BGP 连接将被关闭。保持时间默认为 180s，而 Keepalive 报文的发送间隔为其 1/3。\n\nRIP、OSPF 与 BGP 的比较如表 4.6 所示。\n\n表 4.6 三种路由协议的比较\n\n<table><tr><td>协 议</td><td>RIP</td><td>OSPF</td><td colspan=\"2\">BGP</td></tr><tr><td>类型</td><td>内部</td><td>内部</td><td colspan=\"2\">外部</td></tr><tr><td>路由算法</td><td>距离向量</td><td>链路状态</td><td colspan=\"2\">路径向量</td></tr><tr><td>传递协议</td><td>UDP</td><td>IP</td><td colspan=\"2\">TCP</td></tr><tr><td>路径选择</td><td>跳数最少</td><td>代价最低</td><td colspan=\"2\">较好,非最佳</td></tr><tr><td>交换节点</td><td>和本节点相邻的路由器</td><td>网络中的所有路由器</td><td colspan=\"2\">和本节点相邻的路由器</td></tr><tr><td rowspan=\"2\">交换内容</td><td rowspan=\"2\">当前本路由器知道的全部信息,即自己的路由表</td><td rowspan=\"2\">与本路由器相邻的所有路由器的链路状态</td><td>首次</td><td>整个路由表</td></tr><tr><td>非首次</td><td>有变化的部分</td></tr></table>",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-3-5_07",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.3.5",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "【2023 统考真题】下列关于 IPv4 和 IPv6 的叙述中，正确的是（）。 I. IPv6 地址空间是 IPv4 地址空间的 96 倍 II. IPv4 首部和 IPv6 基本首部的长度均可变 III. IPv4 向 IPv6 过渡可以采用双协议栈和隧道技术 IV. IPv6 首部的 Hop Limit 字段等价于 IPv4 首部的 TTL 字段",
      "options": {
        "A": "仅 I、II",
        "B": "仅 I、IV",
        "C": "仅 II、III",
        "D": "仅 III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "IPv4 地址占 32 位，地址空间为 $2^{32}$ ；IPv6 地址占 128 位，地址空间为 $2^{128}$ ，IPv6 地址空间是 IPv4 地址空间的 $2^{96}$ 倍，说法 I 错误。IPv4 首部长度是 4B 的倍数，长度可变；IPv6 基本首部长度是 40B，不可变，说法 II 错误。IPv4 向 IPv6 过渡可以采用双协议栈（设备同时支持 IPv4 和 IPv6）和隧道技术（IPv6 数据报封装 IPv4 的数据部分），说法 III 正确。IPv6 首部的 Hop Limit 字段和 IPv4 首部的 TTL 字段都用于限制数据报在网络中经过的路由器数量，说法 IV 正确。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_07",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "在计算机网络中，路由选择协议的功能不包括（）。",
      "options": {
        "A": "交换网络状态或通路信息",
        "B": "选择到达目的地的最佳路径",
        "C": "更新路由表",
        "D": "发现下一跳的物理地址"
      },
      "answer": [
        "D"
      ],
      "explanation": "路由选择协议的功能通常包括：获取网络拓扑信息、构建路由表、在网络中更新路由信息、选择到达每个目的网络的最优路径、识别一个网络的无环通路等。发现下一跳的物理地址一般是通过其他方式（如 ARP）来实现的，不属于路由选择协议的功能。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_08",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "用于域间路由的协议是（）。",
      "options": {
        "A": "RIP",
        "B": "BGP",
        "C": "OSPF",
        "D": "ARP"
      },
      "answer": [
        "B"
      ],
      "explanation": "BGP（边界网关协议）是域间路由协议。RIP 和 OSPF 是域内路由协议，ARP 不是路由协议。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_09",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "在 RIP 中，到某个网络的距离值为 16，其意义是（）。",
      "options": {
        "A": "该网络不可达",
        "B": "存在循环路由",
        "C": "该网络为直接连接网络",
        "D": "到达该网络要经过 15 次转发"
      },
      "answer": [
        "A"
      ],
      "explanation": "RIP 规定的最大跳数为 15，16 表示网络不可达。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_10",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "在 RIP 中，假设路由器 X 和路由器 K 是两个相邻的路由器，X 向 K 说 “我到目的网络 Y 的距离为 N”，则收到此信息的 K 就知道 “若将到网络 Y 的下一个路由器选为 X，则我到网络 Y 的距离为（）”。（假设 N 小于 15）",
      "options": {
        "A": "N",
        "B": "$N - 1$",
        "C": "1",
        "D": "$N + 1$"
      },
      "answer": [
        "D"
      ],
      "explanation": "RIP 规定，每经过一个路由器，距离（跳数）加 1。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_11",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "以下关于 RIP 的描述中，错误的是（）。",
      "options": {
        "A": "RIP 是基于距离-向量路由选择算法的",
        "B": "RIP 要求内部路由器将它关于整个 AS 的路由信息发布出去",
        "C": "RIP 要求内部路由器向整个 AS 的路由器发布路由信息",
        "D": "RIP 要求内部路由器按照一定的时间间隔发布路由信息"
      },
      "answer": [
        "C"
      ],
      "explanation": "RIP 规定一个路由器只向相邻路由器发布路由信息，而不像 OSPF 那样向整个域洪泛。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_12",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "在 RIP 中，当路由器收到相邻路由器发来的路由更新信息时，若发现有更优的路由，则（）。",
      "options": {
        "A": "直接更新自己的路由表",
        "B": "向相邻路由器发送确认信息后再更新自己的路由表",
        "C": "向所有相邻路由器发送确认信息后再更新自己的路由表",
        "D": "不更新自己的路由表"
      },
      "answer": [
        "A"
      ],
      "explanation": "在 RIP 中，当路由器收到相邻路由器发来的路由更新信息时，若发现有更优的路由（跳数更小的路由），则直接更新自己的路由表，并向其他相邻路由器广播自己的新路由。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_13",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "对路由选择协议的一个要求是必须能够快速收敛，所谓“路由收敛”是指（）。",
      "options": {
        "A": "路由器能把分组发送到预定的目标",
        "B": "路由器处理分组的速度足够快",
        "C": "网络设备的路由表与网络拓扑结构保持一致",
        "D": "能把多个子网聚合成一个超网"
      },
      "answer": [
        "C"
      ],
      "explanation": "所谓收敛，是指当路由环境发生变化后，各路由器调整自己的路由表以适应网络拓扑结构的变化，最终达到稳定状态（路由表与网络拓扑状态保持一致）。收敛越快，路由器就能越快适应网络拓扑结构的变化。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_14",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下列关于 RIP 和 OSPF 协议的叙述中，错误的是（）。",
      "options": {
        "A": "RIP 和 OSPF 协议都是网络层协议",
        "B": "在进行路由信息交换时，RIP 中的路由器仅向自己相邻的路由器发送信息，OSPF 协议中的路由器向本自治系统中的所有路由器发送信息",
        "C": "在进行路由信息交换时，RIP 中的路由器发送的信息是整个路由表，OSPF 协议中的路由器发送的信息只是路由表的一部分",
        "D": "RIP 的路由器不知道全网的拓扑结构，OSPF 协议的任何一个路由器都知道自己所在区域的拓扑结构"
      },
      "answer": [
        "A"
      ],
      "explanation": "RIP 是应用层协议，它使用 UDP 传送数据，OSPF 才是网络层协议。选项 A 错误。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_15",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "OSPF 协议使用（）分组来保持与其邻居的连接。",
      "options": {
        "A": "Hello",
        "B": "Keepalive",
        "C": "SPF（最短路径优先）",
        "D": "LSU（链路状态更新）"
      },
      "answer": [
        "A"
      ],
      "explanation": "此题属于记忆性题目，OSPF 协议使用 Hello 分组来保持与其邻居的连接。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_16",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "以下关于 OSPF 协议的描述中，最准确的是（）。",
      "options": {
        "A": "OSPF 协议根据链路状态法计算最佳路由",
        "B": "OSPF 协议是用于自治系统之间的外部网关协议",
        "C": "OSPF 协议不能根据网络通信情况动态地改变路由",
        "D": "OSPF 协议只适用于小型网络"
      },
      "answer": [
        "A"
      ],
      "explanation": "OSPF 协议是一种用于自治系统内的路由协议，选项 B 错误。它是一种基于链路状态路由选择算法的协议，能适用大型全局 IP 网络的扩展，支持可变长子网掩码，所以 OSPF 协议可用于管理一个受限地址域的中大型网络，选项 D 错误。OSPF 协议维护一张它所连接的所有链路状态信息的邻居表和拓扑数据库，使用多播链路状态更新报文实现路由更新，并且只有当网络发生变化时才传送链路状态更新报文，选项 C 错误。OSPF 协议不传送整个路由表，而传送受影响的路由更新报文。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_17",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "在 OSPF 协议中，划分区域的最主要目的是（）。",
      "options": {
        "A": "减少路由表的大小",
        "B": "减少洪泛法交换的通信量",
        "C": "增加路由选择的灵活性",
        "D": "增加网络的安全性"
      },
      "answer": [
        "B"
      ],
      "explanation": "链路状态算法让每个路由器都知道整个自治系统的完整拓扑，从而计算最短路径。若不划分区域，则会导致链路状态数据包的个数和占用空间非常大，占用大量的网络带宽资源，影响网络效率和稳定性。划分区域后，每个路由器只需要知道自己所在区域内的完整拓扑，把交换链路状态信息的范围局限在每个区域，这样就大大减少了链路状态数据包的数量和大小。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_18",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "下列关于 OSPF 协议特征的描述中，错误的是（）。",
      "options": {
        "A": "OSPF 协议将一个自治域划分成若干域，有一种特殊的域称为主干区域",
        "B": "域之间通过区域边界路由器互连",
        "C": "在自治系统中有4类路由器：区域内部路由器、主干路由器、区域边界路由器和自治域边界路由器",
        "D": "主干路由器不能兼作区域边界路由器"
      },
      "answer": [
        "D"
      ],
      "explanation": "主干区域中，用于连接主干区域和其他下层区域的路由器称为区域边界路由器。只要是在主干区域中的路由器，就都称为主干路由器，因此主干路由器可以兼作区域边界路由器。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_19",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "BGP 交换的网络可达性信息是（）。",
      "options": {
        "A": "到达某个网络所经过的路径",
        "B": "到达某个网络的下一跳路由器",
        "C": "到达某个网络的链路状态摘要信息",
        "D": "到达某个网络的最短距离及下一跳路由器"
      },
      "answer": [
        "A"
      ],
      "explanation": "因为 BGP 仅力求寻找一条能够到达目的网络且较好的路由（不能兜圈子），而并非寻找一条最佳路由，所以选项 D 错误。BGP 交换的路由信息是到达某个目的网络所要经过的各个自治系统序列，而不仅仅是下一跳，因此选项 A 正确。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_20",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "RIP、OSPF 协议、BGP 的路由选择过程分别使用（）。",
      "options": {
        "A": "路径向量协议、链路状态协议、距离向量协议",
        "B": "距离向量协议、路径向量协议、链路状态协议",
        "C": "路径向量协议、距离向量协议、链路状态协议",
        "D": "距离向量协议、链路状态协议、路径向量协议"
      },
      "answer": [
        "D"
      ],
      "explanation": "RIP 是一种分布式的基于距离向量的路由选择协议，它使用跳数来度量距离。RIP 选择的路径不一定是时间最短的，但一定是具有最小距离（最少跳数）的路径。\n\nOSPF 协议使用分布式的链路状态协议，通过与相邻路由器频繁交流链路状态信息，来建立全网的拓扑结构图，然后使用 Dijkstra 算法计算从自己到各个目的网络的最优路径。\n\n因为 BGP 仅力求寻找一条能够到达目的网络且较好的路由（不能兜圈子），而并非寻找一条最佳路由，所以它采用的是路径向量路由选择协议。在 BGP 中，每个自治系统选出一个 BGP 发言人，这些发言人通过相互交换自己的路径向量（网络可达性信息）后，就可找出到达各自治系统的较好路由。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_21",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "从数据封装的角度看，下列（）协议属于 TCP/IP 模型的应用层。 I. OSPF II. RIP III. BGP IV. ICMP",
      "options": {
        "A": "I、II",
        "B": "II、III",
        "C": "I、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "RIP 和 BGP 属于应用层，OSPF 和 ICMP 属于网络层。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_22",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "考虑如下图所示的子网，该子网使用了距离-向量算法，下面的向量刚刚到达路由器 C: 来自 B 的向量为 $(5, 0, 8, 12, 6, 2)$ ; 来自 D 的向量为 $(16, 12, 6, 0, 9, 10)$ ; 来自 E 的向量为 $(7, 6, 3, 9, 0, 4)$ 。经过测量，C 到 B、D 和 E 的延迟分别为 6、3 和 5，则 C 到达所有节点的最短路径是（）。 ![](images/ba9dc0839deda5d4c83fa96ab336b3801375e67d9195e389a44381b972543064.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A --> B A --> E B --> C B --> D C --> D E --> F F --> C E --> F ``` </details>",
      "options": {
        "A": "$(5,6,0,9,6,2)$",
        "B": "$(11,6,0,3,5,8)$",
        "C": "(5, 11, 0, 12, 8, 9)",
        "D": "$(11,8,0,7,4,9)$"
      },
      "answer": [
        "B"
      ],
      "explanation": "距离-向量算法要求每个路由器维护一张路由表，该表给出了到达每个目的地址的已知最佳距离（最小代价）和下一步的转发地址。算法要求每个路由器定期与所有相邻路由器交换整个路由表，并更新自己的路由表项。注意，从邻接节点接收到路由表不能直接进行比较，而要加上相邻节点传输消耗后再进行计算。C到B的距离是6，于是从C开始通过B到达各节点的最短距离向量是(11,6,14,18,12,8)。同理，通过D和E的最短距离向量分别是(19,15,9,3,12,13)和(12,11,8,14,5,9)。于是，C到所有节点的最短路径应该是(11,6,0,3,5,8)。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_23",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "某分组交换网络的拓扑如下图所示，各路由器使用 OSPF 协议且均已收敛，各链路的度量已在图中标注。假设各段链路的带宽均为 100Mb/s，分组长度为 1000B，其中分组的首部长度为 20B。若主机 A 向主机 B 发送一个大小为 980000B 的文件，忽略分组的传播时延和封装/解封时间，从 A 发送开始到 B 接收完毕为止，需要的时间是（）。",
      "options": {
        "A": "80.08ms",
        "B": "80.16ms",
        "C": "80.32ms",
        "D": "80.64ms"
      },
      "answer": [
        "C"
      ],
      "explanation": "根据 OSPF 算法，从 A 到 B 转发经过的链路代价依次为 2、3、1、1、2，一共经过 4 个路由器。分组长度为 1000B，首部长度为 20B，数据长度为 980B，所以共有 980000/980 = 1000 个分组，每次存储转发时延为 $1000B \\div 100Mb/s = 0.08ms$ ，第一个分组从 A 到 B 的时间为 $0.08 \\times 5 = 0.4ms$ ，剩下的 999 个分组每经过 0.08ms 就到达一个，所以总时间为 $0.4 + 0.08 \\times 999 = 80.32ms$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_24",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2010 统考真题】某自治系统内采用 RIP，若该自治系统内的路由器 R1 收到其邻居路由器 R2 的距离向量，距离向量中包含信息<Net1, 16>，则能得出的结论是（）。",
      "options": {
        "A": "R2 可以经过 R1 到达 Net1，跳数为 17",
        "B": "R2 可以到达 Net1，跳数为 16",
        "C": "R1 可以经过 R2 到达 Net1，跳数为 17",
        "D": "R1 不能经过 R2 到达 Net1"
      },
      "answer": [
        "D"
      ],
      "explanation": "R1 在收到信息并更新路由表后，若需要经过 R2 到达 Net1，则其跳数为 17，因为距离为 16 表示不可达，所以 R1 不能经过 R2 到达 Net1，R2 也不可能到达 Net1。选项 B、C 错误，选项 D 正确。而题目中并未给出 R1 向 R2 发送的信息，因此选项 A 也不正确。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_25",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2016 统考真题】假设下图中的 R1、R2、R3 采用 RIP 交换路由信息，且均已收敛。若 R3 检测到网络 201.1.2.0/25 不可达，并向 R2 通告一次新的距离向量，则 R2 更新后，其到达该网络的距离是（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "16",
        "D": "17"
      },
      "answer": [
        "B"
      ],
      "explanation": "初始收敛时，R3 到网络（201.1.2.0/25）的距离为 1，R2 到网络的距离为 2，R1 到网络的距离为 2。当 R3 检测到网络不可达时，因为 R3 存有其他邻居到网络的路由信息，所以它利用所有邻居的距离向量，用 Bellman-Ford 公式更新自己的距离向量（易错点：误以为 R3 检测到网络不可达时，就把其到网络的距离设置为 16），R3 重新计算到网络的距离 = min{16, R1 到网络的距离 + 1, R2 到网络的距离 + 1} = {16, 2 + 1, 2 + 1} = 3。然后，R3 向其所有邻居发送更新报文，“告诉它到网络的距离为 3”。R2（及 R1）收到 R3 发来的更新报文后，会利用它保存的所有邻居的距离向量，重新计算自己到网络的距离 = min{R1 到网络的距离 + 1, R3 到网络的距离 + 1} = {2 + 1, 3 + 1} = 3，因此答案为 3。与此同时，R1 也重新计算自己到网络的距离 = min{R2 到网络的距离 + 1, R3 到网络的距离 + 1} = {2 + 1, 3 + 1} = 3。如此反复，直至重新收敛。因为 RIP 的特点“坏消息传得慢”，所以一旦网络出现故障，就要经过较长时间才能将故障消息传送到所有路由器。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_26",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 26,
      "type": "single_choice",
      "question": "【2017 统考真题】直接封装 RIP、OSPF、BGP 报文的协议分别是（）。",
      "options": {
        "A": "TCP、UDP、IP",
        "B": "TCP、IP、UDP",
        "C": "UDP、TCP、IP",
        "D": "UDP、IP、TCP"
      },
      "answer": [
        "D"
      ],
      "explanation": "RIP 是一种分布式的基于距离向量的路由选择协议，它通过广播 UDP 报文来交换路由信息。OSPF 是一个内部网关协议，要交换的信息量较大，应使报文的长度尽量短，所以不使用传输层协议（如 UDP 或 TCP），而直接采用 IP。BGP 是一个外部网关协议，在不同的自治系统之间交换路由信息，因为网络环境复杂，需要保证可靠传输，所以采用 TCP。因此，答案为选项 D。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-4-6_27",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.4.6",
      "section_title": "本节试题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2021 统考真题】某网络中的所有路由器均采用距离-向量算法计算路由。若路由器 E 与邻居路由器 A、B、C 和 D 之间的直接链路距离分别是 8、10、12 和 6，且 E 收到邻居路由器的距离向量如下表所示，则路由器 E 更新后，到达目的网络 Net1 \\~ Net4 的距离分别是（）。 <table><tr><td>目的网络</td><td>A 的距离向量</td><td>B 的距离向量</td><td>C 的距离向量</td><td>D 的距离向量</td></tr><tr><td>Net1</td><td>1</td><td>23</td><td>20</td><td>22</td></tr><tr><td>Net2</td><td>12</td><td>35</td><td>30</td><td>28</td></tr><tr><td>Net3</td><td>24</td><td>18</td><td>16</td><td>36</td></tr><tr><td>Net4</td><td>36</td><td>30</td><td>8</td><td>24</td></tr></table>",
      "options": {
        "A": "9, 10, 12, 6",
        "B": "9, 10, 28, 20",
        "C": "9, 20, 12, 20",
        "D": "9, 20, 28, 20"
      },
      "answer": [
        "D"
      ],
      "explanation": "根据距离-向量算法，E 收到相邻路由器的距离向量后，更新它的路由表：\n\n① 当原路由表中没有目的网络时，把该项目添加到路由表中。  \n② 发来的路由信息中有一条到达某个目的网络的路由，该路由与当前使用的路由相比，有较短的距离，就用经过发送路由信息的节点的新路由替换。\n\n分析题意可知，E 与邻居路由器 A、B、C 和 D 之间的直接链路距离分别是 8、10、12 和 6。到达 Net1～Net4 没有直接链路，需要通过邻居路由器。从上述算法可知，E 到达目的网络一定是经过 A、B、C 和 D 中距离最小的。根据题中所给的距离信息，计算 E 经过邻居路由器到达目的网络 Net1～Net4 的距离，如下表所示，选择到达每个目的网络距离的最短值。\n\n<table><tr><td>目的网络</td><td>经过A需要的距离</td><td>经过B需要的距离</td><td>经过C需要的距离</td><td>经过D需要的距离</td></tr><tr><td>Net1</td><td> $\\underline{9}$ </td><td>33</td><td>32</td><td>28</td></tr><tr><td>Net2</td><td> $\\underline{20}$ </td><td>45</td><td>42</td><td>34</td></tr><tr><td>Net3</td><td>32</td><td> $\\underline{28}$ </td><td> $\\underline{28}$ </td><td>42</td></tr><tr><td>Net4</td><td>44</td><td>40</td><td> $\\underline{20}$ </td><td>30</td></tr></table>\n\n所以距离分别是 9、20、28、20。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-6-3_03",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.6.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "一台主机的 IP 地址为 160.80.40.20/16，当它移动到另一个不属于 160.80/16 子网的网络时，它将（）。（能否通过被访网络的路由器直接发送/接收数据报）",
      "options": {
        "A": "可以直接接收和直接发送数据报，没有任何影响",
        "B": "既不可以直接接收数据报，又不可以直接发送数据报",
        "C": "不可以直接发送数据报，但可以直接接收数据报",
        "D": "可以直接发送数据报，但不可以直接接收数据报"
      },
      "answer": [
        "D"
      ],
      "explanation": "当其他主机向该主机发送数据报时，使用永久地址 160.80.40.20/16 作为数据报的目的地址，因此会发往该主机的归属代理，归属代理知道该主机的转交地址，然后通过隧道技术将数据报发送到该主机的外地代理，由外地代理转交给该主机。当该主机向其他主机发送数据报时，使用永久地址 160.80.40.20/16 作为数据报的源地址，使用其他主机的 IP 地址作为数据报的目的地址，这个数据报显然没必然再通过该主机的归属代理进行转发，而直接通过外地代理转发。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_05",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "路由器主要实现（）的功能。",
      "options": {
        "A": "数据链路层、网络层与应用层",
        "C": "物理层、数据链路层与网络层",
        "B": "网络层与传输层",
        "D": "物理层与网络层"
      },
      "answer": [
        "C"
      ],
      "explanation": "路由器是网络层设备，所以它也必须处理网络层以下的功能，即物理层和数据链路层。而传输层和应用层是网络层之上的，它们使用网络层的接口，路由器不实现它们的功能。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_06",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列关于路由器和路由表的说法中，正确的是（）。",
      "options": {
        "A": "路由器处理的信息量比交换机少，因而转发速度比交换机快",
        "B": "对于同一目标，路由器只提供延迟最小的最佳路由",
        "C": "当路由表中的所有表项都不匹配时，按照默认路由进行转发",
        "D": "路由器不但能够根据 IP 地址进行转发，而且可以根据物理地址进行转发"
      },
      "answer": [
        "C"
      ],
      "explanation": "路由器是第三层设备，要处理的内容比第二层设备交换机更多，因而转发速度比交换机慢，选项 A 错误。虽然一些路由协议也将延迟等指标作为参数进行路由选择，但路由协议使用得最多的参数是传输距离，此外还有一些其他参数，选项 B 错误。默认路由的匹配优先级最低，只要目的网络不在转发表中，就一律选择默认路由转发，选项 C 正确。路由器只能根据 IP 地址进行转发，选项 D 错误。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_07",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "（未使用 CIDR）当一个 IP 分组进行直接交付时，要求发送方和目的站具有相同的（）。",
      "options": {
        "A": "IP 地址",
        "B": "主机号",
        "C": "端口号",
        "D": "子网地址"
      },
      "answer": [
        "D"
      ],
      "explanation": "判断一个 IP 分组的交付方式是直接交付还是间接交付，路由器需要根据分组的目的 IP 地址和该路由器接收端口的 IP 地址是否属于同一个子网来判断。具体来说，将该分组的源 IP 地址和目的 IP 地址分别与子网掩码进行 “与” 操作，若得到的子网地址相同，则该分组就采用直接交付方式，否则采用间接交付方式。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_08",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "一个路由器的路由表通常包含（）。",
      "options": {
        "A": "需要包含到达所有主机的完整路径信息",
        "B": "需要包含所有到达目的网络的完整路径信息",
        "C": "需要包含到达目的网络的下一跳路径信息",
        "D": "需要包含到达所有主机的下一跳路径信息"
      },
      "answer": [
        "C"
      ],
      "explanation": "路由表中包含到目的网络的下一跳路径信息。由路由表表项的组成也不难得出正确答案为选项 C。路由表也不可能包含到达所有主机的下一跳信息，否则路由转发将是不可想象的。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_09",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "决定路由器的转发表中的内容的算法是（）。",
      "options": {
        "A": "指数回退算法",
        "B": "分组调度算法",
        "C": "路由算法",
        "D": "拥塞控制算法"
      },
      "answer": [
        "C"
      ],
      "explanation": "转发表是根据路由表生成的，路由表又是由路由算法得到的，因此路由算法决定了转发表中的内容。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_10",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "路由器中计算路由信息的是（）。",
      "options": {
        "A": "输入队列",
        "B": "输出队列",
        "C": "交换结构",
        "D": "路由选择处理机"
      },
      "answer": [
        "D"
      ],
      "explanation": "路由选择处理机的任务是根据所选定的路由选择协议构造路由表，同时经常或定期地与相邻路由器交换路由信息而不断地更新和维护路由表。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_11",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "路由表的分组转发部分由（）组成。",
      "options": {
        "A": "交换结构",
        "B": "输入端口",
        "C": "输出端口",
        "D": "以上都是"
      },
      "answer": [
        "D"
      ],
      "explanation": "分组转发部分包括 3 部分：① 交换结构，根据转发表对分组进行处理，将某个输入端口进入的分组从一个合适的输出端口转发出去。② 输入端口，包括物理层、数据链路层和网络层的处理模块。③ 输出端口，负责从交换结构接收分组，再将其发送到路由器外面的线路上。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_12",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "路由器转发分组时，需要进行（）。",
      "options": {
        "A": "网络层处理和数据链路层处理",
        "B": "网络层处理和物理层处理",
        "C": "数据链路层处理和物理层处理",
        "D": "网络层处理、数据链路层处理和物理层处理"
      },
      "answer": [
        "D"
      ],
      "explanation": "路由器的端口中有物理层、数据链路层和网络层的处理模块。输入端口在物理层接收比特流，在数据链路层提取出帧，剥去帧的首部和尾部后，分组就被送入网络层的处理模块；输出端口执行相反的操作。网络层处理模块根据分组的目的地址，查找转发表，决定输出端口。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_13",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "路由器的路由选择部分包括（）。",
      "options": {
        "A": "路由选择处理机",
        "B": "路由选择协议",
        "C": "路由表",
        "D": "以上都是"
      },
      "answer": [
        "D"
      ],
      "explanation": "路由器的路由选择部分包括 3 部分：① 路由选择处理机，它根据所选定的路由选择协议构造路由表，同时和相邻路由器交换路由信息。② 路由选择协议，用来更新路由表的算法。③ 路由表，它是根据路由算法得出的，一般包括从目的网络到下一跳的映射。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_14",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "不同网络设备传输数据的延迟时间是不同的，下列设备中传输时延最大的是（）。",
      "options": {
        "A": "局域网交换机",
        "B": "网桥",
        "C": "路由器",
        "D": "集线器"
      },
      "answer": [
        "C"
      ],
      "explanation": "路由器具有较大的传输时延，因为它需要根据所接收的每个分组首部中的 IP 地址决定是否转发分组，处理分组首部的任务一般由软件完成，将带来较长的处理时间。因为局域网交换机由硬件进行帧的转发，而且不关心数据链路层以上的数据，所以具有比路由器要小得多的传输时延。从数量级上看，若局域网交换机的传输时延为几十微秒，则路由器的传输时延为几千微秒。集线器的每个接口都具有收发功能，当某个接口收到信号时，立即向所有其他接口转发，因此其传输时延最小。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_15",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "在路由表中设置一条默认路由，则其目的地址和子网掩码应分别置为（）。",
      "options": {
        "A": "192.168.1.1、255.255.255.0",
        "B": "127.0.0.0、255.0.0.0",
        "C": "0.0.0.0、0.0.0.0",
        "D": "0.0.0.0、255.255.255.255"
      },
      "answer": [
        "C"
      ],
      "explanation": "路由表中默认路由的目的地址和子网掩码都是0.0.0.0。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_16",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "路由器转发分组（在路由表中已找到匹配的条目）时，会根据路由表中的（）字段来确定输出端口。",
      "options": {
        "A": "目的网络地址",
        "B": "下一跳地址",
        "C": "距离度量值",
        "D": "接口标识符"
      },
      "answer": [
        "D"
      ],
      "explanation": "输出端口就是路由器的接口，每个接口都有一个标识符，如 G0/0 等。路由表中的每个条目都会指定一个接口标识符，路由器转发分组时，根据路由表中的接口标识符来确定输出端口。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_17",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "路由器能够分割广播域的原因是（）。",
      "options": {
        "A": "路由器工作在网络层，不转发广播帧",
        "B": "路由器工作在数据链路层，不转发广播帧",
        "C": "路由器工作在物理层，不转发广播帧",
        "D": "路由器工作在传输层，不转发广播帧"
      },
      "answer": [
        "A"
      ],
      "explanation": "交换机会转发广播帧，所以同一台交换机下的所有设备都在一个广播域中。路由器不会转发广播帧，因为路由器工作在网络层，它只关心 IP 地址，而不关心 MAC 地址。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_18",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "如下图所示，用 7 个相同的路由器与 8 台主机相连。链路带宽分为三种，最上层的最快，最下层的最慢，都是全双工方式，图中标注了各层链路带宽的数值。所有路由器的处理速度都很快，远超链路带宽。下列关于网络拥塞分析的说法中，正确的是（）。 ![](images/c4aac5382446eab54c289fb7cc99ceaf629b36c20cfe56f73a4d0da0770c7567.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD R1[\"R1\"] --> R2[\"R2\"] R1 --> R3[\"R3\"] R2 --> R4[\"R4\"] R2 --> R5[\"R5\"] R3 --> R6[\"R6\"] R3 --> R7[\"R7\"] R4 --> H1[\"H1\"] R5 --> H2[\"H2\"] R6 --> H3[\"H3\"] R7 --> H4[\"H4\"] R7 --> H5[\"H5\"] R7 --> H6[\"H6\"] R7 --> H7[\"H7\"] R7 --> H8[\"H8\"] R2 <-->|链路带宽 = 4Mb/s| R1 R3 <-->|链路带宽 = 2Mb/s| R3 R4 <-->|链路带宽 = 1Mb/s| R7 ``` </details>",
      "options": {
        "A": "R1-R2 链路和 R2-R4 链路都不可能发生拥塞",
        "B": "R1-R2 链路可能发生拥塞，R2-R4 链路不可能发生拥塞",
        "C": "R1-R2 链路不可能发生拥塞，R2-R4 链路可能发生拥塞",
        "D": "R1-R2 链路和 R2-R4 链路都可能发生拥塞"
      },
      "answer": [
        "C"
      ],
      "explanation": "R1-R2 链路上的数据率在任何时候都不可能超过 4Mb/s，因此不可能发生拥塞。对于 R2-R4 链路，考虑这种情况：H5 和 H6 同时以 1Mb/s 的速率向 H1 发送数据，H7 和 H8 同时以 1Mb/s 的速率向 H2 发送数据。此时，R1 右边的所有链路都正常工作，R1-R2 链路也正常工作，都没有超过这些链路的带宽。但是，若这些数据全部都通过 R2 转发，再通过带宽为 2Mb/s 的 R2-R4 链路分别发送给主机 H1 和 H2，则显然是不可能的，于是在 R2 的输入缓存中，进来的数据比出去的要多，数据堆积得越来越多，发送不出去，产生拥塞。选项 C 正确。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_19",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2010 统考真题】下列网络设备中，能够抑制广播风暴的是（）。 I 中继器 II 集线器 III 网桥 IV路由器",
      "options": {
        "A": "仅 I 和 II",
        "B": "仅 III",
        "C": "仅 III 和 IV",
        "D": "仅 IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "中继器和集线器工作在物理层，既不隔离冲突域也不隔离广播域。为了解决冲突域的问题，人们利用网桥和交换机来分隔各个网段中的通信量，建立多个分离的冲突域，但当网桥和交换机接收到一个未知转发信息的数据帧时，为了保证该帧能被目的节点正确接收，将该帧从所有的端口广播出去，可以看出网桥和交换机的冲突域等于端口个数，广播域为1。路由器可以隔离广播域和冲突域，要屏蔽数据链路层的广播帧，当然应该是网络层设备路由器。在此题的选项中，路由器是其中最高层的网络设备，其他设备能隔离的，路由器一定能隔离。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_20",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2012 统考真题】下列关于 IP 路由器功能的描述中，正确的是（）。 I. 运行路由协议，设置路由表 II. 监测到拥塞时，合理丢弃 IP 分组 III. 对收到的 IP 分组头进行差错检验，确保传输的 IP 分组不丢失 IV. 根据收到的 IP 分组的目的 IP 地址，将其转发到合适的输出线路上",
      "options": {
        "A": "仅 III、IV",
        "B": "仅 I、II、III",
        "C": "仅 I、II、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "说法 I 和 IV 显然是路由器的功能。对于说法 II，当路由器监测到拥塞时，可合理丢弃 IP 分组，并向发出该 IP 分组的源主机发送一个源点抑制的 ICMP 报文（最新标准已不再使用）。对于说法 III，路由器对收到的 IP 分组首部进行差错检验，丢弃有差错首部的报文，但不保证 IP 分组不丢失。",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_4-7-4_21",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "网络层",
      "section": "4.7.4",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2020 统考真题】下图所示的网络中，冲突域和广播域的个数分别是（）。 ![](images/8770a5ea0c2270f1b8f38c1016e767be9969d7c2b3ecb29830b31903001b3936.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD A[\"以太网交换机\"] --> B[\"路由器\"] A --> C[\"100Base-T集线器\"] C --> D[\"电脑\"] C --> E[\"笔记本\"] C --> F[\"电脑\"] C --> G[\"笔记本\"] C --> H[\"笔记本\"] C --> I[\"笔记本\"] C --> J[\"笔记本\"] C --> K[\"笔记本\"] ``` </details>",
      "options": {
        "A": "2, 2",
        "B": "2, 4",
        "C": "4, 2",
        "D": "4, 4"
      },
      "answer": [
        "C"
      ],
      "explanation": "网络层设备路由器可以隔离广播域和冲突域；数据链路层设备交换机只能隔离冲突域；物理层设备集线器、中继器既不隔离冲突域也不隔离广播域。因此共有2个广播域，4个冲突域。\n\n![](images/94662ae9de03cf1758c87009076f54e95ca53dcd58df2892bb7163b59ae9fbd0.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    subgraph Left_Swide_1\n        A[\"Switch\"] --> B[\"Computer\"]\n        C[\"Switch\"] --> D[\"Computer\"]\n        E[\"Switch\"] --> F[\"Computer\"]\n        G[\"Switch\"] --> H[\"Computer\"]\n    end\n    subgraph Right_Swide_2\n        I[\"Switch\"] --> J[\"Computer\"]\n        K[\"Switch\"] --> L[\"Computer\"]\n        M[\"Switch\"] --> N[\"Computer\"]\n    end\n    style Left_Swide_1 fill:#f9f,stroke:#333\n    style Right_Swide_2 fill:#f9f,stroke:#333\n    style Left_Swide_1 fill:#ccf,stroke:#333\n    style Right_Swide_2 fill:#ccf,stroke:#333\n```\n</details>\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch04-第4章-网络层.md"
    },
    {
      "id": "计算机网络_5-1-4_01",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "在 OSI 参考模型中，提供端到端的透明传输服务、差错控制和流量控制的层是（）。",
      "options": {
        "A": "物理层",
        "B": "网络层",
        "C": "传输层",
        "D": "会话层"
      },
      "answer": [
        "D"
      ],
      "explanation": "UDP 仅在 IP 层的数据报服务之上增加了复用、分用和差错检测的功能。若应用开发者选择 UDP 而非 TCP，则应用程序几乎直接与 IP 打交道。尽管 TCP 提供可靠服务，而 UDP 不提供，但 TCP 并非总是首选。许多应用更适合采用 UDP，主要原因如下。\n\n考点追踪 ▶ UDP 协议的优点（2014、2024）\n\n1）UDP是无连接的，没有建立连接的时延。TCP需要在主机中维护连接状态（包括发送和接收缓存、拥塞控制参数、序号和确认序号等），而UDP无须维护这些状态。  \n2）UDP 是面向报文的。发送方 UDP 对应用层交下的报文，在添加首部后即向下交付给 IP 层，一次发送一个完整的报文（不可分割），既不合并也不拆分，而是保留报文的边界。因此，应用程序必须选择合适大小的报文，若报文太长，则交付给 IP 层后，可能导致分片；若报文太短，则会使 IP 首部的开销占比过大。两者均会降低传输效率。相比之下，TCP 是面向字节流的，每个字节都有编号，支持自动拆分与重组，对报文长度无限制。  \n3）UDP 的首部开销小，仅有 8B；而 TCP 首部至少 20B。  \n4）UDP 支持一对一、一对多和多对多的通信。TCP 仅支持一对一的通信。  \n5）UDP 没有拥塞控制，因此网络拥塞不会影响源主机的发送速率。某些实时应用要求以稳定的速率发送数据，可以容忍少量丢包，但无法接受较大的传输时延。\n\nUDP 常用于一次性传输少量数据的应用（如 DNS、DHCP 等），因为 TCP 的连接建立、维护和释放会带来显著开销。UDP 也广泛用于多媒体应用（如视频会议、流媒体等），因为这些应用更关注低时延而非可靠性，而 TCP 的拥塞控制会引入不可接受的延迟。\n\nUDP 不保证可靠交付, 但这并不意味着应用不要求可靠性——所有可靠性机制可由应用层自行实现, 开发者可根据需求灵活设计。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-1-4_02",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "传输层为（）之间提供逻辑通信。",
      "options": {
        "A": "主机",
        "B": "进程",
        "C": "路由器",
        "D": "操作系统"
      },
      "answer": [
        "D"
      ],
      "explanation": "UDP 数据报包含两部分：首部字段和数据字段。UDP 首部有 8B，由 4 个字段组成，每个字段的长度都是 2B，如图 5.2 所示。各个字段的意义如下：\n\n考点追踪 ▶ UDP 的首部格式及字段含义（2018）\n\n1）源端口号。发送进程的端口号。需要对方回复时选用，不需要回复时可置为全0。  \n2）目的端口号。接收进程的端口号。该字段在所有 UDP 报文中都必须有效。\n\n考点追踪 ▶ UDP 首部的长度（2021）\n\n3）长度。UDP 数据报的长度（包括首部和数据），其最小值是 8（仅有首部）。  \n4）检验和。由发送方的传输层计算并写入，接收方的传输层检测是否有差错，有错就丢弃。在 IPv4 中，该字段可置为全 0 表示未使用（但不建议），在 IPv6 中则强制启用。\n\n当传输层从 IP 层收到 UDP 数据报时，就根据首部中的目的端口，把 UDP 数据报通过相应的端口，上交给最后的终点——应用进程，如图 5.3 所示。\n\n![](images/3ac910573f3220c3329e86602144c8dea14505cf61c170d588cc98b4266c58db.jpg)\n\n<details>\n<summary>text_image</summary>\n\n0\t15 16\t31\n首部{\t16位源端口号\t16位目的端口号\n\t\t8B\n\t\t16位UDP长度\t16位UDP检验和\n\t\t数据（如果有）\n</details>\n\n图 5.2 UDP 数据报格式\n\n![](images/33362aa945f7a4cc929d654a08cd63b8fd5fa7939100d36ba13c030eff00634d.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"端口1\"] --> D[\"UDP分用\"]\n    B[\"端口2\"] --> D\n    C[\"端口3\"] --> D\n    D --> E[\"UDP数据报到达\"]\n    F[\"IP层\"] --> D\n```\n</details>\n\n图 5.3 UDP 基于端口的分用\n\n若接收方 UDP 发现收到的报文中的目的端口号不正确（不存在对应于端口号的应用进程），则丢弃该报文，并由 ICMP 发送 “端口不可达” 差错报文给发送方。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-1-4_05",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "可靠传输协议中的“可靠”指的是（）。",
      "options": {
        "A": "使用面向连接的会话",
        "B": "使用尽力而为的传输",
        "C": "使用滑动窗口来维持可靠性",
        "D": "使用确认机制来确保传输的数据不丢失"
      },
      "answer": [
        "D"
      ],
      "explanation": "考点追踪 UDP检验的原理（2025）\n\n在计算检验和时，要在 UDP 数据报之前增加 12B 的伪首部，伪首部并不是 UDP 的真正首部。只是在计算检验和时，临时添加在 UDP 数据报的前面，得到一个临时的 UDP 数据报。检验和就是按照这个临时的 UDP 数据报来计算的。伪首部既不向下传递给网络层，也不向上递交给应用层，而只是为了计算检验和。图 5.4 给出了 UDP 数据报的首部和伪首部。\n\n![](images/404cd5a77ee74c9b2e67f7e37203a764de20fa27684d51594143d8d1ef580b35.jpg)\n\n<details>\n<summary>text_image</summary>\n\n字节 4 4 1 1 2\n源IP地址 目的IP地址 0 17 UDP长度\n字节 12 2 2 2 2\n伪首部 源端口 目的端口 长度 检验和\nUDP数据报 首部 数据\n</details>\n\n图 5.4 UDP 数据报的首部和伪首部\n\nUDP 检验和的计算方法与 IP 首部检验和基本类似。不同之处在于：IP 检验和只检验 IP 数据报的首部，而 UDP 检验和把首部和数据部分一起检验。\n\nUDP 计算检验和的过程：在发送方，首先将检验和字段置为全 0，然后将伪首部与 UDP 数据报视为一连串 16 位字。若 UDP 数据部分的长度为奇数个字节，则在计算时末尾补一个全 0B（该填充字节仅在计算检验和时临时添加，不影响实际发送的数据内容）。随后，按二进制反码规则对所有 16 位字求和，并将结果的反码填入检验和字段后发送。在接收方，将收到的 UDP 数据报与伪首部重新组合（同样在必要时补全字节），再按二进制反码求和。若无差错，则结果应为全 1（16 位全为 1）；否则说明有差错，接收方应丢弃该 UDP 数据报。\n\n考点追踪 ▶ UDP 检验和的计算（2024）\n\n二进制反码求和的运算规则：① 从低位到高位逐列进行计算， $0+0=0,\\quad0+1=1,\\quad1+1=0$ 并产生进位1；② 若最高位相加后产生进位，则需将该进位加到结果的最低位，该过程称为回卷。以下通过一个简单示例说明，假设有以下3个16位字：\n\n```c\n01100110 01100000\n01010101 01010101\n10001111 00001100 \n```\n\n先将前两个字相加，得\n\n$$\n\\begin{array}{l} 0 1 1 0 0 1 1 0   0 1 1 0 0 0 0 0 \\\\ \\underline {{0 1 0 1 0 1 0 1   0 1 0 1 0 1 0 1}} \\\\ 1 0 1 1 1 0 1 1   1 0 1 1 0 1 0 1 \\end{array}\n$$\n\n再将结果与第三个字相加（最高位产生进位，需加至最低位），得\n\n$$\n\\begin{array}{r l} & 1 0 1 1 1 0 1 1 1 0 1 1 0 1 0 1 \\\\ & \\frac {1 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0}{0 1 0 0 1 0 1 0 1 1 0 0 0 0 0 1} \\\\ + & \\frac {\\text {进位加至最低位}}{0 1 0 0 1 0 1 0 1 1 0 0 0 0 1 0} \\end{array}\n$$\n\n最后对上述相加结果取反码，就得到检验和：\n\n$$\n\\begin{array}{l} 1 0 1 1 0 1 0 1   0 0 1 1 1 1 0 1 \\end{array}\n$$\n\n在接收方，将包括检验和在内的4个16位字相加，若结果为11111111 11111111，则判定无差错；若结果中的某些位是0，则说明有差错。\n\n# 注意\n\n① 若 UDP 检验和检验出数据报错误，通常应丢弃该报文；尽管 RFC 允许将其交付上层并附带错误指示，但实际实现中极少采用。  \n② 通过伪首部，UDP 不仅能校验源端口、目的端口和数据内容，还能检测 IP 首部中的源地址和目的地址是否在传输过程中因错误而改变。\n\n这种差错检验机制虽然检错能力有限，但其优势在于计算简单、处理速度快。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-2-3_05",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "UDP 数据报比 IP 数据报多提供了（）服务。",
      "options": {
        "A": "流量控制",
        "B": "拥塞控制",
        "C": "端口功能",
        "D": "路由转发"
      },
      "answer": [
        "C"
      ],
      "explanation": "拥塞控制是指防止过多的数据注入网络，以保证网络中的路由器或链路不致过载。出现拥塞时，通信端点通常无法直接获知拥塞的具体细节，只能通过表现（如时延增加）间接感知。\n\n拥塞控制与流量控制的区别：拥塞控制的目标是使网络能够承受当前的负载，是一个全局性过程，涉及所有主机、路由器及影响网络性能的各种因素。而流量控制则关注点对点通信中接收方的处理能力，是一个端到端的问题，由接收方通过窗口机制抑制发送方的发送速率，以确保自身能及时接收数据。尽管二者目标不同，但都是通过调节发送方的发送速率来实现控制效果的。\n\n例如，某链路的传输速率为 10Gb/s，当一台大型机以 1Gb/s 的速率向一台 PC 传送文件时，显然网络带宽充足，不存在拥塞问题；但由于 PC 的处理能力有限，可能来不及接收如此高速的数据流，因此必须进行流量控制。反之，若有 100 万台 PC 同时以 1Mb/s 的速率通过该链路传输文件，则问题就转变为网络总负载是否超出了其承载能力，这时需要依赖拥塞控制。\n\nTCP 采用四种算法进行拥塞控制：慢开始、拥塞避免、快重传和快恢复。\n\n发送方在确定数据的发送速率时，既要考虑接收方的接收能力，也要从全局角度避免引发网络拥塞。因此，除了上节介绍的接收窗口，TCP 还要求发送方维护一个拥塞窗口（cwnd），其大小取决于当前网络的拥塞状况，并动态调整。其控制原则是：\n\n- 若网络未出现拥塞，则适当增大 cwnd，以便把更多分组发送出去，提高网络利用率。  \n- 若检测到网络拥塞，则适当减少 cwnd，以减少注入网络的分组数量，缓解网络拥塞。\n\n通常，只要发送方未按时收到确认（发生了超时），即可认为网络出现了拥塞。\n\n考点追踪 ▶ TCP 的滑动窗口机制（2010、2014-2016、2025）\n\n发送窗口的上限值应取接收窗口（rwnd）和拥塞窗口（cwnd）中较小的一个，即\n\n$$\n\\text { 发送窗口的上限值 } = \\min [ \\mathrm{rwnd}, \\mathrm{cwnd} ]\n$$\n\n接收窗口的大小可通过 TCP 首部中的 “窗口” 字段由接收方通知发送方。那么，发送方如何维护拥塞窗口呢？这正是下面要介绍的慢开始和拥塞避免算法所解决的问题。为便于分析，这里假设：数据仅单向传输，接收方只发送确认报文；接收方拥有足够大的缓存空间，因此发送窗口的大小仅受拥塞窗口的限制；并且以最大报文段长度 MSS 作为拥塞窗口大小的单位。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-2-3_08",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列关于 UDP 检验和的说法中，错误的是（）。",
      "options": {
        "A": "计算检验和时需按 2B 对齐，若数据部分不足，则需用一个全 0B 填充",
        "B": "若 UDP 检验和计算结果为 0，则在检验和字段填充 0",
        "C": "UDP 检验和字段的计算包括一个伪首部、UDP 首部和携带的用户数据",
        "D": "UDP 检验和的计算方法是二进制反码运算求和再取反"
      },
      "answer": [
        "B"
      ],
      "explanation": "UDP 检验和不是必需的，若不使用检验和，则将检验和字段设置为 0。而若检验和的计算结果恰好为 0，则将检验和字段置为全 1（这个结论了解即可）。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-2-3_09",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于 UDP 检验的描述中，错误的是（）。",
      "options": {
        "A": "UDP 检验和字段是可选的，若源主机不想计算检验和，则应置其为全 0",
        "B": "在计算检验和的过程中，需要生成一个伪首部，源主机需要把该伪首部发送给目的主机",
        "C": "检验出 UDP 数据报出错时，可以丢弃或交付给上层",
        "D": "UDP 检验和还能检验 IP 数据报的源 IP 地址和目的 IP 地址"
      },
      "answer": [
        "B"
      ],
      "explanation": "UDP 数据报的伪首部包含了 IP 地址信息，目的是通过数据检验保证 UDP 数据报正确到达目的主机。伪首部是临时添加的，只是为了计算检验和，既不向下传送，又不向上递交。若检验出 UDP 数据报出错，则可以丢弃，也可以交付给上层，但是需要告诉上层这是错误的数据报。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-2-3_17",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2025 统考真题】假设路由器实现 NAT 功能，内网中主机 H 的 IP 地址为 192.168.1.5/24。若 H 运行某应用向 Internet 发送了一个 UDP 报文段，则路由器在转发封装该 UDP 报文段的 IP 数据报的过程中，UDP 报文段的首部字段会被修改的是（）。 I. 源端口号 II. 目的端口号 III. 总长度 IV. 检验和",
      "options": {
        "A": "仅 I、III",
        "B": "仅 I、IV",
        "C": "仅 II、III",
        "D": "仅 II、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "NAT 在转发内网主机 H 的 UDP 报文时，会修改 IP 数据报的源 IP 地址和 UDP 首部的源端口号（I 被修改），而目的端口号（II）保持不变。UDP 首部中的总长度（III）仅由 UDP 数据自身决定，未发生变化。但由于 UDP 检验和（IV）的计算包含伪首部（含源 IP 地址），当源 IP 被 NAT 替换后，必须重新计算检验和，因此 IV 被修改。综上，仅 I 和 IV 被修改。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_02",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "multiple_choice",
      "question": "TCP 规定 HTTP（）进程的端口号为 80。",
      "options": {
        "A": "客户",
        "B": "解析",
        "C": "服务器",
        "D": "主机"
      },
      "answer": [
        "C",
        "B"
      ],
      "explanation": "表面上看，TCP 使用累积确认，类似于 GBN。但区别在于：接收方不会丢弃正确到达但失序的报文段，而是将其缓存，并反复发送冗余 ACK，指明期望收到的下一个按序报文段的序号。例如，假设发送方 A 连续发送 N 个报文段，其中第 $k (k < N)$ 个丢失，其余均正确到达接收方 B。在 GBN 中，接收方会丢弃所有失序的报文段（第 $k+1$ 个至 N 个），发送方需重传从第 k 个开始的所有未确认报文段。而 TCP 仅重传丢失的第 k 个报文段，后续已缓存的报文段无须重传。此外，TCP 还支持 SACK（Selective ACK）选项。启用 SACK 后，接收方可明确告知发送方哪些非连续的数据块已成功接收，使重传行为更接近 SR 协议。\n\n因此，TCP 的重传机制可视为 GBN 与 SR 的混合体：基础行为基于累积确认和冗余 ACK\n\n实现高效单点重传，SACK 则进一步增强了选择性确认能力。\n\n3. 为什么超时事件发生时 cwnd 被置为 1，而收到 3 个冗余 ACK 时 cwnd 减半？\n\n两种事件反映的网络拥塞严重程度不同。收到 3 个冗余 ACK，表明后续部分报文段已成功到达接收方（否则无法触发重复确认），说明网络仍具备一定传输能力，拥塞相对较轻。此时 TCP 采用快速重传机制，将 cwnd 减半（乘法减小），适度降低发送速率。超时事件发生，意味着连 ACK 都未能及时返回，很可能网络已严重拥塞甚至局部瘫痪。为最大限度缓解拥塞，TCP 将 cwnd 重置为 1MSS，进入慢启动阶段，极其谨慎地重新探测网络容量。因此，超时代表更严重的拥塞，故采取更强的抑制措施；而冗余 ACK 表明网络尚可通信，只需适度退让。\n\n4. 为什么不采用“两次握手”建立连接呢？\n\n主要是为了防止已失效的连接请求报文段突然传送到服务器，导致错误建立连接。\n\n考虑如下情况：客户 A 向服务器 B 发送 TCP 连接请求（SYN），该报文在网络中长时间滞留。A 超时后重传 SYN，B 收到后正常建立连接，完成数据传输并断开。\n\n此后，先前滞留的旧 SYN 报文（失效请求）才到达 B。\n\n若采用三次握手：B 收到旧 SYN 后，会向 A 发送 SYN-ACK；但 A 发现该确认序号无效（非当前请求），直接丢弃，不回复 ACK，连接无法建立。\n\n若采用两次握手：B 收到旧 SYN 后，立即认为连接已建立，并等待 A 发送数据；而 A 并无此连接意图，不会响应，导致 B 长期占用资源，造成浪费。\n\n因此，三次握手能有效避免因网络延迟的旧请求引发的资源误分配，而两次握手无法做到。\n\n5. 为什么 TCP 在建立连接时不能每次都选择相同的、固定的初始序号？\n\n假设主机 A 与 B 频繁建立连接、传输数据后释放。若每次 A 都使用相同的初始序号（如 1），具体场景：A 发送的某些 TCP 报文段在网络中滞留较久，A 超时后重传并完成后续通信。但这些旧报文段在连接早已释放后才到达 B，而此时 A 与 B 已建立一条新的 TCP 连接。\n\n由于新连接仍使用相同的初始序号，旧报文段的序号可能落在新连接的有效窗口内，导致 B 误将其当作新数据接收，造成数据混乱或协议错误。为防止此类问题，新连接的初始序号必须与之前连接使用过的序号不同，确保迟到的旧报文段序号不会被新连接接受。因此，TCP 不能使用固定初始序号，而应采用随时间递增的随机化初始序号。\n\n6. 假定在一个互联网中，所有链路的传输都不出现差错，所有节点也都不会发生故障。试问在这种情况下，TCP 的 “可靠交付” 功能是否就是多余的？\n\n不是多余的。即使底层无差错、无故障，IP 层本身是无连接且不可靠的，仍可能导致数据丢失、失序或重复，因此 TCP 的可靠交付依然必不可少。典型情况包括：\n\n1）IP 数据报独立选路，可能到达时失序；  \n2）路由异常可能导致数据报在网中循环，TTL 减至 0 后被丢弃；  \n3）路由器突发拥塞时，来不及处理的数据报会被丢弃。\n\n以上问题均发生在网络层，与链路差错或节点故障无关。只有依靠 TCP 的可靠交付机制，才能确保目的进程收到完整、有序且无重复的数据。\n\n# 【考纲内容】",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_15",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "TCP 在 40Gb/s 的线路上传送数据，若 TCP 充分利用了线路的带宽，则经过（）后，TCP 会发生序号绕回（使用了之前用过的字节序号，已知 $2^{32}/5 \\times 10^{9} = 0.859$ ）。",
      "options": {
        "A": "859ms",
        "B": "85.9ms",
        "C": "8.59ms",
        "D": "0.859ms"
      },
      "answer": [
        "A"
      ],
      "explanation": "在 40Gb/s 的线路上传送数据，每秒可传送 $5 \\times 10^{9}B$ 的数据，TCP 的序号字段有 32 位，共有 $2^{32}$ 个不同的序号，则可发送的时间是 $2^{32}/(5 \\times 10^{9}) = 0.859s = 859ms$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_16",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "下列关于 TCP 窗口与拥塞控制概念的描述中，错误的是（）。",
      "options": {
        "A": "接收窗口（rwnd）通过 TCP 首部中的窗口字段通知数据的发送方",
        "B": "发送窗口确定的依据是：发送窗口 $= \\min$ [接收端窗口，拥塞窗口]",
        "C": "拥塞窗口是接收端根据网络拥塞情况确定的窗口值",
        "D": "拥塞窗口大小在开始时可以按指数规律增长"
      },
      "answer": [
        "C"
      ],
      "explanation": "拥塞窗口是发送端根据网络拥塞情况确定的窗口值。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_17",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "下列关于 TCP 工作原理与过程的描述中，错误的是（）。",
      "options": {
        "A": "TCP 连接建立过程需要经过 “三次握手” 的过程",
        "B": "TCP 传输连接建立后，客户端与服务器端的应用进程进行全双工的字节流传输",
        "C": "TCP 传输连接的释放过程很复杂，只有客户端可以主动提出释放连接的请求",
        "D": "TCP 连接的释放需要经过 “四次挥手” 的过程"
      },
      "answer": [
        "C"
      ],
      "explanation": "参与 TCP 连接的两个进程中的任何一个都能提出释放连接的请求。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_23",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "TCP 的通信双方，有一方发送了带有 FIN 标志的数据段后，表示（）。",
      "options": {
        "A": "将断开通信双方的 TCP 连接",
        "B": "单方面释放连接，表示本方已经无数据发送，但可以接收对方的数据",
        "C": "中止数据发送，双方都不能发送数据",
        "D": "连接被重新建立"
      },
      "answer": [
        "B"
      ],
      "explanation": "FIN 位用来释放一个连接，它表示本方已没有数据要传输。然而，在关闭一个连接后，对方还可以继续发送数据，所以还有可能接收到数据。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_28",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 28,
      "type": "single_choice",
      "question": "A 发起与 B 的 TCP 连接，A 选择的初始序号为 1666，连接建立过程中未发送任何数据，TCP 连接建立后，A 给 B 发送了 1000B 数据，B 正确接收后发送给 A 的确认序号是()。",
      "options": {
        "A": "1667",
        "B": "2666",
        "C": "2667",
        "D": "2668"
      },
      "answer": [
        "C"
      ],
      "explanation": "A 的初始序号为 1666，建立连接的第一个报文段不携带数据，但要消耗一个序号。A 给 B 发送的第二个报文段的序号是 1667，该报文段不携带数据，因此不消耗序号。下一个数据报文段的序号仍是 1667，1000B 的序号范围是 1667～2666，所以 B 接收后发送给 A 的确认序号是 2667。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_29",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 29,
      "type": "single_choice",
      "question": "一个 TCP 连接的数据传输阶段，若发送端的发送窗口值由 2000 变为 3000，则意味着发送端可以（）。",
      "options": {
        "A": "在收到一个确认之前可以发送 3000 个 TCP 报文段",
        "B": "在收到一个确认之前可以发送 1000B",
        "C": "在收到一个确认之前可以发送 3000B",
        "D": "在收到一个确认之前可以发送 2000 个 TCP 报文段"
      },
      "answer": [
        "C"
      ],
      "explanation": "TCP 提供的是可靠的字节流传输服务，使用窗口机制进行流量控制与拥塞控制。TCP 的滑动窗口机制是面向字节的，因此窗口大小的单位为字节。假设发送窗口的大小为 N，这意味着发送端可以在没有收到确认的情况下连续发送 N 字节。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_30",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 30,
      "type": "single_choice",
      "question": "甲和乙建立了 TCP 连接，甲向乙发送了 3 个连续的 TCP 段，分别包含 200B、300B、400B 的有效载荷，第 3 个段的序号为 1000。若乙仅正确接收到第 1 个和第 3 个段，则乙发送给甲的确认序号是（）。",
      "options": {
        "A": "500",
        "B": "600",
        "C": "700",
        "D": "800"
      },
      "answer": [
        "C"
      ],
      "explanation": "乙仅正确接收到第 1 个和第 3 个段，所以乙下次期望收到第 2 个段，乙发送给甲的确认序号即第 2 个段的序号。第 3 个段的序号为 1000，则第 2 个段的序号为 1000 - 300 = 700，所以确认序号为 700。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_31",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 31,
      "type": "single_choice",
      "question": "在一个 TCP 连接中，MSS 为 1KB，当拥塞窗口为 34KB 时发生了超时事件。若在接下来的 4RTT 内报文段传输都是成功的，则当这些报文段均得到确认后，拥塞窗口的大小是（）。",
      "options": {
        "A": "8KB",
        "B": "9KB",
        "C": "16KB",
        "D": "17KB"
      },
      "answer": [
        "C"
      ],
      "explanation": "若在拥塞窗口为 34KB 时发生了超时事件，则慢开始门限值就被设定为 17KB，且 cwnd 重新设为 1KB。按照慢开始算法，第 1 个 RTT 后，cwnd = 2KB，第 2 个 RTT 后，cwnd = 4KB，第 3 个 RTT 后，cwnd = 8KB。当第 4 个 RTT 发出去的 8 个报文段的确认都收到后，cwnd = 16KB（此时还未超过慢开始门限值）。注意，题中“这些报文段均得到确认后”这句话很重要。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_32",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 32,
      "type": "single_choice",
      "question": "若甲向乙发起了一条 TCP 连接，最大段长为 1KB，乙每收到一个数据段都会发出一个接收窗口为 10KB 的确认段，若甲在 t 时刻发生超时，此时拥塞窗口为 16KB。则从 t 时刻起，在不再发生超时的情况下，经过 10RTT 后，甲的发送窗口的大小为（）。",
      "options": {
        "A": "10KB",
        "B": "12KB",
        "C": "14KB",
        "D": "15KB"
      },
      "answer": [
        "A"
      ],
      "explanation": "接收窗口等于 10KB。发生超时后，拥塞窗口重设为 1，经过 10RTT 后，拥塞窗口一定大于 10KB。但甲的发送窗口取拥塞窗口和接收窗口中的较小值，即 10KB。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_33",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "设 TCP 的拥塞窗口的慢开始门限值初始为 8（单位为报文段），当拥塞窗口上升到 12 时发生超时，TCP 开始慢开始和拥塞避免，则第 13 次传输时拥塞窗口的大小为（）。",
      "options": {
        "A": "4",
        "B": "6",
        "C": "7",
        "D": "8"
      },
      "answer": [
        "C"
      ],
      "explanation": "在慢开始和拥塞避免算法中，拥塞窗口初始为 1，窗口大小开始按指数增长。当拥塞窗口大于慢开始门限后停止慢开始算法，改用拥塞避免算法。此处慢开始的门限值初始为 8，当拥塞窗口增大到 8 时改用拥塞避免算法，窗口大小按线性增长，每次增加 1 个报文段，当增加到 12 时，出现超时，重新设门限值为 6（12 的一半），拥塞窗口再重新设为 1，执行慢开始算法，到门限值 6 时执行拥塞避免算法。因此，拥塞窗口大小的变化为 1, 2, 4, 8, 9, 10, 11, 12, 1, 2, 4, 6, 7, 8, 9, …，其中第 13 次传输时（第 12 个传输轮次后）拥塞窗口的大小为 7。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_34",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 34,
      "type": "single_choice",
      "question": "甲和乙刚建立 TCP 连接，并约定最大段长为 2KB，假设乙总是及时清空缓存，保证接收窗口始终为 20KB，ssthresh 为 16KB，若双向传输时间为 10ms，发送时延忽略不计，且没有发生拥塞的情况，则经过（），甲的发送窗口第一次达到 20KB。",
      "options": {
        "A": "40ms",
        "B": "50ms",
        "C": "60ms",
        "D": "70ms"
      },
      "answer": [
        "B"
      ],
      "explanation": "当拥塞窗口小于 ssthresh 时，拥塞窗口以指数方式增长，拥塞窗口从 2KB 到 16KB 需经过 3RTT，超过 16KB 后，每经过 1RTT，拥塞窗口加 1MSS，所以从 16KB 到 20KB 经过了 2RTT，共经过 5RTT，RTT = 10ms，故经过 50ms 后甲的发送窗口第一次为 20KB。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_35",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 35,
      "type": "single_choice",
      "question": "假设一个 TCP 连接的传输过程在慢开始阶段，在 tRTT 时刻到 $(t+1)$ RTT 时刻之间发送了 k 个数据段，假设仍然保持在慢开始阶段，预期在 $(t+1)$ RTT 时刻到 $(t+2)$ RTT 时刻之间将发送（）个数据段（假设接收方有足够的缓存）。",
      "options": {
        "A": "k",
        "B": "$k + 1$",
        "C": "$2^{k}$",
        "D": "2k"
      },
      "answer": [
        "D"
      ],
      "explanation": "在慢开始阶段，每收到一个对新报文段的确认，拥塞窗口就加1，因此每经过1RTT，拥塞窗口就加倍。在tRTT时刻到 $(t+1)$ RTT时刻之间发送了k个数据段，因此在这个RTT后，拥塞窗口由k变为2k，所以在下一个RTT内预期将发送2k个数据段。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_36",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 36,
      "type": "single_choice",
      "question": "下列关于 TCP 的拥塞控制机制的描述中，错误的是（）。",
      "options": {
        "A": "TCP 刚建立连接进入慢开始阶段",
        "B": "慢开始阶段拥塞窗口指数级增加",
        "C": "超时发生时, 新门限值 (慢开始和拥塞避免阶段的分界点) 等于旧门限值的一半",
        "D": "拥塞避免阶段拥塞窗口线性增加"
      },
      "answer": [
        "C"
      ],
      "explanation": "超时发生时，新门限值通常设置为此时拥塞窗口值的一半，而不是旧门限值的一半。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_37",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "在一个 TCP 连接中，MSS 为 1KB，当拥塞窗口为 34KB 时收到了 3 个冗余 ACK 报文。若在接下来的 4RTT 内报文段传输都是成功的，则当这些报文段均得到确认后，拥塞窗口的大小是（）。",
      "options": {
        "A": "8KB",
        "B": "16KB",
        "C": "20KB",
        "D": "21KB"
      },
      "answer": [
        "D"
      ],
      "explanation": "条件“收到了3个冗余ACK报文”说明此时应执行快恢复算法，因此慢开始门限值设为17KB，并且此时cwnd也被设为17KB，第1个RTT后，cwnd=18KB，第2个RTT后，cwnd=19KB，第3个RTT后，cwnd=20KB，第4个RTT后，发出的报文全部得到确认，cwnd再增加1KB，变为21KB。注意cwnd的增加都发生在收到确认报文后。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_38",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "A 和 B 建立 TCP 连接，MSS 为 1KB。某时，慢开始门限值为 2KB，A 的拥塞窗口为 4KB，在接下来的 1RTT 内，A 向 B 发送了 4KB 的数据（TCP 的数据部分），并且得到了 B 的确认，确认报文中的窗口字段的值为 2KB。在下一个 RTT 中，A 最多能向 B 发送（）数据。",
      "options": {
        "A": "2KB",
        "B": "8KB",
        "C": "5KB",
        "D": "4KB"
      },
      "answer": [
        "A"
      ],
      "explanation": "本题中出现了拥塞窗口和接收端窗口，为了保证 B 的接收缓存不发生溢出，发送窗口应该取两者的最小值。先看拥塞窗口，由于慢开始门限值为 2KB，第 1 个 RTT 中 A 拥塞窗口为 4KB，按照拥塞避免算法，收到 B 的确认报文后，拥塞窗口增长为 5KB。再看接收端窗口，B 通过确认报文中窗口字段向 A 通知接收端窗口，则接收端窗口为 2KB。因此在下一次发送数据时，A 的发送窗口应该为 2KB，即 1RTT 内最多发送 2KB。所以选项 A 正确。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_39",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "假设在没有发生拥塞的情况下，在一条往返时延 RTT 为 10ms 的线路上采用慢开始控制策略。若接收窗口的大小为 24KB，最大报文段 MSS 为 2KB，则发送方能发送出第一个完全窗口（也就是发送窗口达到 24KB）需要的时间是（）。",
      "options": {
        "A": "30ms",
        "B": "40ms",
        "C": "50ms",
        "D": "60ms"
      },
      "answer": [
        "B"
      ],
      "explanation": "按照慢开始算法，发送窗口的初始值为拥塞窗口的初始值，即 MSS 的大小 2KB，然后依次增大为 4KB、8KB、16KB，然后是接收窗口的大小 24KB，即达到第一个完全窗口。因此达到第一个完全窗口所需要的时间为 4RTT = 40ms。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_40",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "甲向乙发起一个 TCP 连接，最大段长 MSS = 1KB，RTT = 3ms，乙的接收缓存为 16KB，且乙的接收缓存仅有数据存入而无数据取出，则甲从连接建立成功至发送窗口达到 8KB，需经过的最小时间以及此时乙的接收缓存的可用空间分别为（）。",
      "options": {
        "A": "3ms, 15KB",
        "B": "9ms, 9KB",
        "C": "6ms, 13KB",
        "D": "12ms, 8KB"
      },
      "answer": [
        "B"
      ],
      "explanation": "本题要求的是最小时间，且题目未给出拥塞窗口的门限值，所以拥塞窗口一直按指数增长是最快的。拥塞窗口从1KB增长到8KB需要3个RTT，即9ms，并在第1个RTT内发送1KB，在第2个RTT内发送2KB，在第3个RTT内发送4KB，累积发送 $1+2+4=7KB$ ，这时乙的接收缓存还剩16-7=9KB，此时的发送窗口= $\\min\\{拥塞窗口, 接收窗口\\}=8KB$ ，所以选B。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_41",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "【2009 统考真题】主机甲与主机乙之间已建立一个 TCP 连接，主机甲向主机乙发送了两个连续的 TCP 段，分别包含 300B 和 500B 的有效载荷，第一个段的序号为 200，主机乙正确接收到这两个数据段后，发送给主机甲的确认序号是（）。",
      "options": {
        "A": "500",
        "B": "700",
        "C": "800",
        "D": "1000"
      },
      "answer": [
        "D"
      ],
      "explanation": "确认序号表示接收方期望收到的下一个字节的序号。第一个段起始序号为 200，包含 300B 数据，序号范围 200～499；第二个段起始序号为 500，包含 500B 数据，序号范围 500～999。因此，乙正确接收后，期望的下一个字节序号为 1000，故返回的确认序号为 1000。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_42",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 42,
      "type": "single_choice",
      "question": "【2009 统考真题】一个 TCP 连接总以 1KB 的最大段长发送 TCP 段，发送方有足够多的数据要发送，当拥塞窗口为 16KB 时发生了超时，若接下来的 4RTT 时间内的 TCP 段的传输都是成功的，则当第 4 个 RTT 时间内发送的所有 TCP 段都得到肯定应答时，拥塞窗口大小是（）。",
      "options": {
        "A": "7KB",
        "B": "8KB",
        "C": "9KB",
        "D": "16KB"
      },
      "answer": [
        "C"
      ],
      "explanation": "超时发生时，将慢开始门限 ssthresh 设为当前拥塞窗口 cwnd 的一半，即 8KB，并将 cwnd 重置为 1KB。此后进入慢开始阶段：第 1 个 RTT 后 cwnd = 2KB，第 2 个 RTT 后 cwnd = 4KB，第 3 个 RTT 后 cwnd = 8KB（达到 ssthresh）。从第 4 个 RTT 开始转为拥塞避免算法，窗口线性增长，即每个 RTT 增加 1 个 MSS（1KB），因此第 4 个 RTT 结束时 cwnd = 8 + 1 = 9KB。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_43",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 43,
      "type": "single_choice",
      "question": "【2010 统考真题】主机甲和主机乙之间已建立一个 TCP 连接，TCP 最大段长为 1000B。若主机甲的当前拥塞窗口为 4000B，在主机甲向主机乙连续发送两个最大段后，成功收到主机乙发送的第一个段的确认段，确认段中通告的接收窗口大小为 2000B，则此时主机甲还可以向主机乙发送的最大字节数是（）。",
      "options": {
        "A": "1000",
        "B": "2000",
        "C": "3000",
        "D": "4000"
      },
      "answer": [
        "A"
      ],
      "explanation": "发送窗口的大小由接收窗口和拥塞窗口中的较小值决定。主机甲的拥塞窗口为 4000B，乙确认段通告的接收窗口为 2000B，因此发送窗口 = min{4000, 2000} = 2000B。甲已连续发送两个最大段（共 2000B），但仅第一个段被确认，说明第二个段（1000B）仍处于已发送未确认状态。因此，甲已使用的窗口为 1000B，还可发送的最大字节数 = 2000 - 1000 = 1000B。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_44",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 44,
      "type": "single_choice",
      "question": "【2011 统考真题】主机甲向主机乙发送一个（SYN=1，seq=11220）的 TCP 段，期望与主机乙建立 TCP 连接，若主机乙接受该连接请求，则主机乙向主机甲发送的正确的 TCP 段可能是（）。",
      "options": {
        "A": "(SYN=0, ACK=0, seq=11221, ack=11221)",
        "B": "(SYN=1, ACK=1, seq=11220, ack=11220)",
        "C": "(SYN=1, ACK=1, seq=11221, ack=11221)",
        "D": "(SYN=0, ACK=0, seq=11220, ack=11220)"
      },
      "answer": [
        "C"
      ],
      "explanation": "在 TCP 三次握手中，当主机乙接受连接请求时，必须发送 SYN = 1 且 ACK = 1 的报文段。确认序号 ack 应为甲初始序号 seq = 11220 加 1，即 11221。乙的序号 seq 由其自行选择，与甲的序号无关，可为任意值。因此选项 C（SYN = 1, ACK = 1, seq = 11221, ack = 11221）符合要求。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_45",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 45,
      "type": "single_choice",
      "question": "【2011 统考真题】主机甲与主机乙之间已建立一个 TCP 连接，主机甲向主机乙发送了 3 个连续的 TCP 段，分别包含 300B、400B 和 500B 的有效载荷，第 3 个段的序号为 900。若主机乙仅正确接收到第 1 个段和第 3 个段，则主机乙发送给主机甲的确认序号是（）。",
      "options": {
        "A": "300",
        "B": "500",
        "C": "1200",
        "D": "1400"
      },
      "answer": [
        "B"
      ],
      "explanation": "TCP 段的序号字段表示该段数据部分第一个字节的序号。已知第 3 个段序号为 900，则第 2 个段的结束序号为 899，起始序号 = 900 - 400 = 500。主机乙仅收到第 1 段和第 3 段，未收到第 2 段（500～899），因此期望收到的下一个字节序号为 500，即确认序号为 500。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_46",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 46,
      "type": "single_choice",
      "question": "【2013 统考真题】主机甲与主机乙之间已建立一个 TCP 连接，双方持续有数据传输，且数据无差错与丢失。若甲收到一个来自乙的 TCP 段，该段的序号为 1913、确认序号为 2046、有效载荷为 100B，则甲立即发送给乙的 TCP 段的序号和确认序号分别是（）。",
      "options": {
        "A": "2046、2012",
        "B": "2046、2013",
        "C": "2047、2012",
        "D": "2047、2013"
      },
      "answer": [
        "B"
      ],
      "explanation": "乙发送给甲的 TCP 段中, 序号 seq = 1913 表示其数据从字节编号 1913 开始, 有效载荷为 100B, 故覆盖 1913～2012; 确认序号 ack = 2046 表示乙已成功接收甲发送的序号至 2045 的所有数据, 期望下个字节为 2046。甲成功收到后, 在立即回复的 TCP 段中, seq 应置为 2046（发送的第一个字节序号）, ack 应置为 2013（期待乙发送的下一个字节序号, 即 $2012 + 1 = 2013$ ）。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_47",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 47,
      "type": "single_choice",
      "question": "【2014 统考真题】主机甲和乙建立了 TCP 连接，甲始终以 MSS=1KB 大小的段发送数据，并一直有数据发送；乙每收到一个数据段都会发出一个接收窗口为 10KB 的确认段。若甲在 t 时刻发生超时的时候拥塞窗口为 8KB，则从 t 时刻起，不再发生超时的情况下，经过 10RTT 后，甲的发送窗口的大小为（）。",
      "options": {
        "A": "10KB",
        "B": "12KB",
        "C": "14KB",
        "D": "15KB"
      },
      "answer": [
        "A"
      ],
      "explanation": "t 时刻发生超时，将慢开始门限 ssthresh 设为 8KB/2 = 4KB，并将拥塞窗口 cwnd 重置为 1KB。接收窗口恒为 10KB，因此发送窗口 = min{cwnd, 10KB}。经历 10RTT 后，拥塞窗口的大小（单位为 KB）依次为 2, 4, 5, 6, 7, 8, 9, 10, 11, 12。由于接收窗口限制为 10KB，最终发送窗口为 10KB。实际上，由于发送窗口必然总小于或等于 10KB，四个选项中只有选项 A 符合条件。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_48",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 48,
      "type": "single_choice",
      "question": "【2015 统考真题】主机甲和主机乙新建一个 TCP 连接，甲的拥塞控制初始阈值为 32KB，甲始终向乙以 MSS=1KB 大小的段发送数据，并一直有数据发送；乙为该连接分配 16KB 接收缓存，并对每个数据段进行确认，忽略段传输延迟。若乙收到的数据全部存入缓存，不被取走，则甲从连接建立成功时刻起，未出现发送超时的情况下，经过 4RTT 后，甲的发送窗口是（）。",
      "options": {
        "A": "1KB",
        "B": "8KB",
        "C": "16KB",
        "D": "32KB"
      },
      "answer": [
        "A"
      ],
      "explanation": "发送窗口 = min{接收窗口，拥塞窗口}。乙的接收缓存为 16KB 且不取走数据，因此接收窗口随接收数据递减。甲按慢开始发送：第 1RTT 发 1KB，累计 1KB；第 2RTT 发 2KB，累计 3KB；第 3RTT 发 4KB，累计 7KB；第 4RTT 发 8KB，累计 15KB。此时乙的缓存剩余 1KB，接收窗口 = 1KB。拥塞窗口此时为 16KB，故发送窗口 = min{16KB, 1KB} = 1KB。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_49",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 49,
      "type": "single_choice",
      "question": "【2017 统考真题】若甲向乙发起一个 TCP 连接，最大段长 MSS=1KB，RTT=5ms，乙开辟的接收缓存为 64KB，则甲从连接建立成功至发送窗口达到 32KB，需经过的时间至少是（）。",
      "options": {
        "A": "25ms",
        "B": "30ms",
        "C": "160ms",
        "D": "165ms"
      },
      "answer": [
        "A"
      ],
      "explanation": "接收缓存为 64KB，远大于目标窗口 32KB，因此发送窗口由拥塞窗口决定。TCP 慢开始阶段，初始拥塞窗口 cwnd = 1KB（1MSS），每经过 1RTT，cwnd 翻倍： $1KB \\rightarrow 2KB \\rightarrow 4KB \\rightarrow 8KB \\rightarrow 16KB \\rightarrow 32KB$ ，共需 5RTT。每个 RTT = 5ms，总时间 = $5 \\times 5ms = 25ms$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_50",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 50,
      "type": "single_choice",
      "question": "【2019 统考真题】某客户通过一个 TCP 连接向服务器发送数据的部分过程如下图所示。客户在 $t_{0}$ 时刻第一次收到确认序号 ack\\_seq=100 的段，并发送序号 seq=100 的段，但发生丢失。若 TCP 支持快速重传，则客户重新发送 seq=100 段的时刻是（）。",
      "options": {
        "A": "$t_1$",
        "B": "$t_{2}$",
        "C": "$t_{3}$",
        "D": "$t_{4}$"
      },
      "answer": [
        "C"
      ],
      "explanation": "TCP 快速重传机制规定：当发送方收到对同一报文段的 3 个重复确认（冗余 ACK）时，立即重传丢失段。 $t_{0}$ 时刻首次收到 ack\\_seq = 100 的确认段，不计入冗余； $t_{1}$ 、 $t_{2}$ 、 $t_{3}$ 连续收到三个相同的 ack\\_seq = 100，构成 3 个重复 ACK，因此在 $t_{3}$ 时刻触发快速重传，重新发送 seq = 100 的段。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_51",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 51,
      "type": "single_choice",
      "question": "【2019 统考真题】若主机甲主动发起一个与主机乙的 TCP 连接，甲、乙选择的初始序号分别为 2018 和 2046，则第三次握手 TCP 段的确认序号是（）。",
      "options": {
        "A": "2018",
        "B": "2019",
        "C": "2046",
        "D": "2047"
      },
      "answer": [
        "D"
      ],
      "explanation": "三次握手过程: 甲发 SYN(seq = 2018); 乙回 SYN + ACK(seq = 2046, ack = 2019); 甲再发 ACK。第三次握手的确认序号应为乙的初始序号加 1，即 $2046 + 1 = 2047$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_52",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 52,
      "type": "single_choice",
      "question": "【2020 统考真题】若主机甲与主机乙已建立一条 TCP 连接，最大段长（MSS）为 1KB，往返时间（RTT）为 2ms，则在不出现拥塞的前提下，拥塞窗口从 8KB 增长到 32KB 所需的最长时间是（）。",
      "options": {
        "A": "4ms",
        "B": "8ms",
        "C": "24ms",
        "D": "48ms"
      },
      "answer": [
        "D"
      ],
      "explanation": "由于慢开始门限 ssthresh 可按需设置，为求拥塞窗口 cwnd 从 8KB 增长到 32KB 所需的最长时间，可将 ssthresh 设置小于或等于 8KB。即始终处于拥塞避免阶段，cwnd 从 8KB 增至 32KB，需增加 24KB，每经过一个 RTT，cwnd 加 1，故需 24 个 RTT，总时间为 $24 \\times 2ms = 48ms$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_53",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 53,
      "type": "single_choice",
      "question": "【2020 统考真题】若主机甲与主机乙建立 TCP 连接时，发送的 SYN 段中的序号为 1000，在断开连接时，主机甲发送给主机乙的 FIN 段中的序号为 5001，则在无任何重传的情况下，甲向乙已经发送的应用层数据的字节数为（）。",
      "options": {
        "A": "4002",
        "B": "4001",
        "C": "4000",
        "D": "3999"
      },
      "answer": [
        "C"
      ],
      "explanation": "TCP 规定：SYN 段虽不携带数据，但要消耗一个序号，因此数据传输阶段所用的起始序号为 $1000 + 1 = 1001$ 。FIN 段也要消耗一个序号，因此已发送数据的最后一个字节序号为 5001 - 1 = 5000。因此已发送应用层数据字节数为 $5000 - 1001 + 1 = 4000B$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_54",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 54,
      "type": "single_choice",
      "question": "【2021 统考真题】若客户首先向服务器发送 FIN 段请求断开 TCP 连接，则当客户收到服务器发送的 FIN 段并向服务器发送 ACK 段后，客户的 TCP 状态转换为（）。",
      "options": {
        "A": "CLOSE\\_WAIT",
        "B": "TIME\\_WAIT",
        "C": "FIN\\_WAIT\\_1",
        "D": "FIN\\_WAIT\\_2"
      },
      "answer": [
        "B"
      ],
      "explanation": "TCP 客户主动关闭连接：发 FIN 后进入 FIN\\_WAIT\\_1 状态；收到服务器 ACK 后进入 FIN\\_WAIT\\_2 状态；收到服务器 FIN 后，客户发 ACK 后进入 TIME\\_WAIT 状态；经过 2MSL 时间后才进入 CLOSED 状态。因此，当客户收到服务器 FIN 并发送 ACK 后，其状态为 TIME\\_WAIT。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_55",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 55,
      "type": "single_choice",
      "question": "【2021 统考真题】若大小为 12B 的应用层数据分别通过 1 个 UDP 数据报和 1 个 TCP 段传输，则该 UDP 数据报和 TCP 段实现的有效载荷（应用层数据）最大传输效率分别是（）。",
      "options": {
        "A": "37.5%, 16.7%",
        "B": "37.5%, 37.5%",
        "C": "60.0%, 16.7%",
        "D": "60.0%, 37.5%"
      },
      "answer": [
        "D"
      ],
      "explanation": "UDP 首部固定为 8B，传输 12B 应用数据时总长度 = 12 + 8 = 20B，有效载荷传输效率 = 12/20 = 60%。TCP 首部最短为 20B，总长度 = 12 + 20 = 32B，有效载荷传输效率为 12/32 = 37.5%。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_56",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 56,
      "type": "single_choice",
      "question": "【2021 统考真题】设主机甲通过 TCP 向主机乙发送数据，部分过程如下图所示。甲在 $t_{0}$ 时刻发送一个序号 seq=501、封装 200B 数据的段，在 $t_{1}$ 时刻收到乙发送的序号 seq=601、确认序号 ack\\_seq=501、接收窗口 rcvwnd=500B 的段，则甲在未收到新的确认段之前，可以继续向乙发送的数据序号范围是（）。 ![](images/52a53c12b46cb370473212d9228cfea78dabc34352e1f07f4d5d2e705ad527b2.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD 甲[\"甲\"] -->|t0| A[\"数据\"] 甲 -->|t1| B[\"数据\"] A -->|seq=501, 200B数据| C[\"接收\"] B -->|seq=601, ack_seq=501, rcvwnd=500B| D[\"接收\"] C --> E[\"输出\"] D --> F[\"结束\"] ``` </details>",
      "options": {
        "A": "501\\~1000",
        "B": "601\\~1100",
        "C": "701\\~1000",
        "D": "801\\~1100"
      },
      "answer": [
        "C"
      ],
      "explanation": "甲在 $t_{0}$ 发送 seq = 501、200B 数据的段，覆盖 501～700。 $t_{1}$ 收到乙的确认段：ack\\_seq = 501（表示序号 501 之前已接收），rcvwnd = 500B（表示从 501 起可接收 500B 数据）。甲已发送 200B（501～700），故在未收到新的确认前，甲还可继续发送 500 - 200 = 300B，对应序号 701～1000。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_57",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 57,
      "type": "single_choice",
      "question": "【2022 统考真题】假设主机甲和主机乙已建立一个 TCP 连接，最大段长 MSS=1KB，甲一直向乙发送数据，当甲的拥塞窗口为 16KB 时，计时器发生了超时，则甲的拥塞窗口再次增长到 16KB 所需要的时间至少是（）。",
      "options": {
        "A": "4 RTT",
        "B": "5 RTT",
        "C": "11 RTT",
        "D": "16 RTT"
      },
      "answer": [
        "C"
      ],
      "explanation": "时刻 0 发生超时，将慢开始门限值 ssthresh 设为 16KB/2 = 8KB，拥塞窗口 cwnd 重置为 1KB。执行慢开始算法：cwnd 指数增长，经过 3RTT，达到 ssthresh；随后执行拥塞避免算法：cwnd 线性增长，再经过 8RTT，达到 16KB。共需 11RTT。拥塞窗口的变化如下表所示。\n\n<table><tr><td>时刻</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td></tr><tr><td>拥塞窗口</td><td>1</td><td>2</td><td>4</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td></tr></table>",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_58",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 58,
      "type": "single_choice",
      "question": "【2022 统考真题】假设客户 C 和服务器 S 已建立一个 TCP 连接，通信往返时间 RTT = 50ms，最长报文段寿命 MSL = 800ms，数据传输结束后，C 主动请求断开连接。若从 C 主动向 S 发出 FIN 段时刻算起，则 C 和 S 进入 CLOSED 状态所需的时间至少分别是（）。",
      "options": {
        "A": "850 ms, 50 ms",
        "B": "1650 ms, 50 ms",
        "C": "850 ms, 75 ms",
        "D": "1650 ms, 75 ms"
      },
      "answer": [
        "D"
      ],
      "explanation": "题目问的是最少时间，因此当服务器 S 收到客户 C 发的 FIN 后不再传输数据，而立即返回 ACK 和 FIN。客户 C 主动关闭：C 发 FIN（0ms）→S 在 0.5RTT（25ms）收到后立即返回 ACK + FIN（因无数据待发）→C 在 1RTT（50ms）收到 S 的 ACK + FIN 后，发送 ACK 并启动 2MSL 计时器。C 进入 CLOSED 状态至少需 $50 \\, ms + 2 \\times 800 \\, ms = 1650 \\, ms$ 。S 在收到 C 对 FIN 的 ACK 后即进入 CLOSED 状态，该 ACK 在 C 发 FIN 后 $1.5 \\, RTT = 75 \\, ms$ 到达 S，故 S 至少需 75 ms。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_59",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 59,
      "type": "single_choice",
      "question": "【2024 统考真题】假设主机 H 通过 TCP 向服务器发送长度为 3000B 的报文，往返时间 RTT = 10ms，最长报文段寿命 MSL = 30s，最大报文段长度 MSS = 1000B，忽略 TCP 段的传输时延，报文传输结束后 H 首先请求断开连接，则从 H 请求建立 TCP 连接时刻起，到 H 进入 CLOSED 状态为止，所需的时间至少是（）。",
      "options": {
        "A": "30.03s",
        "B": "30.04s",
        "C": "60.03s",
        "D": "60.04s"
      },
      "answer": [
        "D"
      ],
      "explanation": "TCP 连接建立的前两次握手耗时 1RTT。第三次握手段可携带 1000B 数据（或与数据段合并发送）。H 收到确认后，拥塞窗口增长至 2000B。因此第 3 个 RTT 内，可发送剩余 2000B 数据，至此数据传输完毕。第 4 个 RTT 开始时，H 向服务器发送 FIN 请求断开连接。题目问的是最少时间，因此服务器收到 FIN 后不再发送数据，并立即回复 ACK + FIN。第 4 个 RTT 结束时，H 收到服务器的 FIN，等待 2MSL 时间（60s）后进入 CLOSED 状态，总时间为 $40ms + 60s = 60.04s$ 。\n\n![](images/026da6e3946da34ff255d714156497ff614862270c6efa6a3634ff31834521eb.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"建立TCP连接\"] --> B[\"ACK + 发送1000B\"]\n    B --> C[\"发送2000B\"]\n    C --> D[\"FIN\"]\n    D --> E[\"ACK\"]\n    E --> F[\"2MSL\"]\n    F --> G[\"CLOSE\"]\n    G --> H[\"服务器\"]\n    H --> I[\"ACK + FIN\"]\n    I --> J[\"CLOSE\"]\n```\n</details>",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_60",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 60,
      "type": "single_choice",
      "question": "【2025 统考真题】主机甲通过 TCP 向主机乙发送数据的部分过程如下图所示，seq 为序号，ack\\_seq 为确认序号，rcvwnd 为接收窗口。甲在 $t_0$ 时刻的拥塞窗口和发送窗口均为 2000B，拥塞控制阈值为 8000B，MSS = 1000B，甲始终以 MSS 发送 TCP 段。若甲在 $t_1$ 时刻收到如图所示的确认段，则甲在未收到新的确认段之前，还可继续向乙发送的 TCP 段数是（）。 ![](images/43363fe8c64ed8312135e915de9f18f25879b2f9908ed45d2a70e32c2897aa22.jpg) <details> <summary>flowchart</summary> ```mermaid graph TD 甲[\"甲\"] -->|t0| A[\"数据\"] 乙[\"乙\"] -->|t1| B[\"数据\"] A -->|seq = 2001, 1000B数据| C[\"ACK报文\"] B -->|seq = 4001, ack_seq = 3001, rcvwnd = 4000B| C ``` </details>",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "A"
      ],
      "explanation": "甲收到确认段（ack\\_seq = 3001），表明序号2001～3000的1000 B数据已接收。由于当前拥塞窗口小于阈值，处于慢启动阶段，每收到一个ACK，拥塞窗口加1 MSS，故由2000 B增至3000B。接收窗口为4000B。因此发送窗口 $= \\min \\{3000, 4000\\} = 3000\\mathrm{B}$ 。此时甲已发送但尚未确认的数据为序号 $3001 \\sim 4000$ （1000 B），故可用窗口为 $3000 - 1000 = 2000\\mathrm{B}$ ，还可发送2个TCP段。",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_5-3-7_61",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "传输层",
      "section": "5.3.7",
      "section_title": "本节试题精选",
      "num": 61,
      "type": "single_choice",
      "question": "【2025 统考真题】Time 是一个提供时间查询服务的 C/S 架构网络应用，支持客户通过 UDP 或 TCP 向 Time 服务器请求时间服务。若某客户与某 Time 服务器通信的往返时间 RTT = 8ms，则该客户分别通过 UDP 和 TCP 向该服务器请求服务，所需的最少时间分别是（）。",
      "options": {
        "A": "8ms, 8ms",
        "B": "8ms, 16ms",
        "C": "16ms, 8ms",
        "D": "16ms, 16ms"
      },
      "answer": [
        "B"
      ],
      "explanation": "UDP 是无连接的，客户发送请求后服务器直接返回应答，整个过程需约 1RTT，因此 UDP 的最少时间为 8ms。TCP 需先通过三次握手建立连接：客户发送 SYN，服务器回复 SYN-ACK，客户再发送 ACK（可携带应用请求）。从客户发送 SYN 起，到服务器收到请求共经历 1.5RTT，服务器响应后，再经 0.5RTT 返回客户，总计 2RTT。因此 TCP 的最少时间为 16ms。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch05-第5章-传输层.md"
    },
    {
      "id": "计算机网络_6-1-3_05",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.1.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "以下关于 P2P 概念的描述中，错误的是（）。",
      "options": {
        "A": "P2P 是网络节点之间采取对等方式直接交换信息的工作模型",
        "B": "P2P 通信模式是指 P2P 网络中对等节点之间的直接通信能力",
        "C": "P2P 网络是指与互联网并行建设的、由对等节点组成的物理网络",
        "D": "P2P 实现技术是指为实现对等节点之间直接通信的功能所需要设计的协议、软件等"
      },
      "answer": [
        "C"
      ],
      "explanation": "P2P 可以理解为一种通信模型、一种逻辑网络模型。物理网络是指在网络中由各种设备（主机、交换机等）和介质（双绞线等）连接而形成的网络，它看得见摸得着。而这个网络中所使用的协议，或网络结构，都是靠逻辑网络来划分的。P2P 网络是一个构建在 IP 网络上的覆盖网络，是一种动态的逻辑网络。对等节点之间具有直接通信的能力是 P2P 的显著特点。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-2-4_05",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.2.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "互联网中域名解析依赖于由域名服务器组成的逻辑树。在域名解析过程中，主机上请求域名解析的软件不需要知道（）信息。 I. 本地域名服务器的 IP II. 本地域名服务器父节点的 IP III. 域名服务器树根节点的 IP",
      "options": {
        "A": "I 和 II",
        "B": "I 和 III",
        "C": "II 和 III",
        "D": "I、II和III"
      },
      "answer": [
        "C"
      ],
      "explanation": "正常情况下，客户只需把域名解析请求发往本地域名服务器，其他事情都由本地域名服务器完成，并把最后结果返回给客户。所以主机只需要知道本地域名服务器的 IP。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-2-4_07",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.2.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "当本地域名服务器向根域名服务器查询一个域名时，根域名服务器返回一个负责该域名的顶级域名服务器的 IP 地址，让本地域名服务器再向该域名服务器查询，这种查询方式称为（）。",
      "options": {
        "A": "递归查询",
        "B": "迭代查询",
        "C": "重定向查询",
        "D": "广播查询"
      },
      "answer": [
        "B"
      ],
      "explanation": "迭代查询是指当一个域名服务器收到本地域名服务器发出的查询请求报文时，要么给出所要查询的 IP 地址，要么告诉本地服务器：“你下一步应当向哪个 DNS 服务器进行查询。”然后让本地域名服务器进行后续的查询（而不替本地域名服务器进行后续的查询）。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-2-4_08",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.2.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "一台主机要解析 www.cskaoyan.com 的 IP 地址，若这台主机配置的域名服务器为 202.120.66.68，互联网顶级域名服务器为 11.2.8.6，而存储 www.cskaoyan.com 的 IP 地址对应关系的域名服务器为 202.113.16.10，则这台主机解析该域名通常首先查询（）。",
      "options": {
        "A": "202.120.66.68 域名服务器",
        "B": "11.2.8.6 域名服务器",
        "C": "202.113.16.10 域名服务器",
        "D": "可以从这 3 个域名服务器中任选一个"
      },
      "answer": [
        "A"
      ],
      "explanation": "当这台主机发出对 www.cskaoyan.com 的 DNS 查询报文时, 这个查询报文首先被送往该主机的本地域名服务器 202.120.66.68。本地域名服务器不能立即回答该查询时, 就以 DNS 客户的身份向某一根域名服务器查询。但不管采用何种查询方式, 首先都要查询本地域名服务器。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-2-4_09",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.2.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "（）可以将其管辖的主机名转换为主机的 IP 地址。",
      "options": {
        "A": "本地域名服务器",
        "B": "根域名服务器",
        "C": "权限域名服务器",
        "D": "代理域名服务器"
      },
      "answer": [
        "C"
      ],
      "explanation": "每台主机都必须在权限域名服务器处注册登记，权限域名服务器一定能够将其管辖的主机名转换为该主机的 IP 地址。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-2-4_10",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.2.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "若本地域名服务器无缓存，用户主机采用递归查询向本地域名服务器查询另一网络某主机域名对应的 IP 地址，而本地域名服务器采用迭代查询向其他域名服务器进行查询，则用户主机和本地域名服务器发送的域名请求条数分别为（）。",
      "options": {
        "A": "1 条, 1 条",
        "B": "1 条, 多条",
        "C": "多条, 1 条",
        "D": "多条, 多条"
      },
      "answer": [
        "B"
      ],
      "explanation": "用户主机向本地域名服务器采用递归查询，只需发送1条查询请求。本地域名服务器无缓存，因此还要进行后续的查询。本地域名服务器向其他域名服务器采用迭代查询，本地域名服务器分别向根域名服务器、顶级域名服务器、权限域名服务器发送多条查询请求。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-2-4_11",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.2.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2010 统考真题】若本地域名服务器无缓存，则在采用递归方法解析另一网络某主机域名时，用户主机和本地域名服务器发送的域名请求条数分别为（）。",
      "options": {
        "A": "1 条，1 条",
        "B": "1 条，多条",
        "C": "多条，1 条",
        "D": "多条，多条"
      },
      "answer": [
        "A"
      ],
      "explanation": "用户主机向本地域名服务器采用递归查询，只需发送1条请求。本地域名服务器无缓存，但因其向其他域名服务器也采用递归查询方式，故只需向根域名服务器发送1条请求，后续查询由被询问的服务器代为完成。因此，用户主机和本地域名服务器各自发送的域名请求条数均为1。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-2-4_12",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.2.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2016统考真题】假设所有域名服务器均采用迭代查询方式进行域名解析。当主机访问规范域名为 www.abc.xyz.com 的网站时，本地域名服务器在完成该域名解析的过程中，可能发出 DNS 查询的最少和最多次数分别是（）。",
      "options": {
        "A": "0, 3",
        "B": "1, 3",
        "C": "0, 4",
        "D": "1, 4"
      },
      "answer": [
        "C"
      ],
      "explanation": "最少情况：若本地域名服务器已缓存该域名的解析结果，则无须发出任何 DNS 查询，最少为 0 次。最多情况：因所有服务器均采用迭代查询，在最坏情况下，本地域名服务器需要依次向根域名服务器、顶级域名服务器（.com）、权限域名服务器（xyz.com）和次级权限域名服务器（abc.xyz.com）发起查询，共 4 次，因此最多为 4 次。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-2-4_13",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.2.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2018 统考真题】下列 TCP/IP 应用层协议中，可以使用传输层无连接服务的是（）。",
      "options": {
        "A": "FTP",
        "B": "DNS",
        "C": "SMTP",
        "D": "HTTP"
      },
      "answer": [
        "B"
      ],
      "explanation": "FTP 用于文件传输，SMTP 用于电子邮件发送，HTTP 用于网页传输，三者均要求可靠传输，故在传输层使用有连接的 TCP 服务。DNS 对可靠性的要求相对较低，且追求效率与低开销，因此在传输层通常使用无连接的 UDP 服务。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-2-4_14",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.2.4",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2020 统考真题】假设下图所示网络中的本地域名服务器只提供递归查询服务，其他域名服务器都只提供迭代查询服务；局域网内主机访问 Internet 上各服务器的往返时间（RTT）均为 10ms，忽略其他各种时延。若主机 H 通过超链接 http://www.abc.com/index.html 请求浏览纯文本 Web 页 index.html，则从单击超链接开始到浏览器接收到 index.html 页面为止，所需的最短时间与最长时间分别是（）。 ![](images/14452b7e01417d5ddc72d5291becf9e4cd5b8512c75957beba30a40d7bb9f9cf.jpg) <details> <summary>flowchart</summary> ```mermaid graph LR A[\"本地域名服务器\"] --> B[\"路由器\"] C[\"局域网\"] --> D[\"H\"] B --> E[\"Internet\"] D --> E F[\"根域名服务器\"] --> G[\"com顶级域名服务器\"] H[\"abc.com域名服务器\"] --> I[\"www.abc.com\"] ``` </details>",
      "options": {
        "A": "10ms, 40ms",
        "B": "10ms, 50ms",
        "C": "20ms, 40ms",
        "D": "20ms, 50ms"
      },
      "answer": [
        "D"
      ],
      "explanation": "题中 RTT 指局域网内主机或本地域名服务器访问 Internet 上各服务器的往返时间，H 与本地域名服务器间的通信时延忽略不计。最短时间：若 H 本地有域名缓存，则无须 DNS 查询，直接与 www.abc.com 建立 TCP 连接并请求资源。TCP 三次握手需 1.5RTT，第三次握手可捎带 HTTP 请求，服务器返回页面需 0.5RTT，共 2RTT = 20ms。最长时间：H 向本地域名服务器发起递归查询（时延忽略），本地域名服务器依次迭代查询根域名服务器、顶级域名服务器（.com）、域名服务器（abc.com），共3RTT；随后H建立TCP连接并获取页面，需2RTT；总计5RTT=50ms。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-3-3_02",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.3.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "以下关于 FTP 工作模型的描述中，错误的是（）。",
      "options": {
        "A": "FTP 使用控制连接、数据连接来完成文件的传输",
        "B": "用于控制连接的 TCP 连接在服务器端使用的熟知端口号为 21",
        "C": "用于控制连接的 TCP 连接在客户端使用的端口号为 20",
        "D": "服务器端由控制进程、数据进程两部分组成"
      },
      "answer": [
        "A"
      ],
      "explanation": "考点追踪 ➤ POP3 协议的功能与特点（2015、2018、2025）\n\n邮局协议（Post Office Protocol，POP）是一种结构简单但功能有限的邮件读取协议，目前使用的是 POP3 版。POP3 同样采用客户/服务器模式，在传输层基于 TCP，使用端口号 110。\n\n用户代理需运行 POP3 客户程序，对应的邮件服务器则运行 POP3 服务器程序。POP3 支持两种工作模式：① 下载并保留，用户从服务器读取邮件后，邮件仍保留在服务器上，可供后续再次访问；② 下载并删除，邮件一旦被成功读取，即从服务器上删除。\n\n另一种邮件读取协议是互联网报文存取协议（IMAP）。与 POP3 相比，IMAP 的功能更强大：它支持用户在服务器端创建文件夹、在不同文件夹之间移动邮件，以及对远程邮箱中的邮件进行搜索等在线操作。为此，IMAP 服务器需要维护用户的会话状态信息。\n\n此外，IMAP 还支持选择性获取邮件内容，即用户代理可以只下载邮件的特定部分。例如只获取其首部，或只提取多部分 MIME 邮件中的某部分。这一特性在低带宽环境下尤为实用：用户无须下载整封包含音频、视频等大附件的邮件，即可快速浏览或筛选内容。\n\n此外，随着万维网（WWW）的普及，出现了大量基于 Web 的电子邮件服务，如 Hotmail、Gmail 等。这类服务的特点是，用户浏览器与邮件服务器之间的交互（包括发送和读取邮件）均通过 HTTP 完成，而仅在不同邮件服务器之间传递邮件时才使用 SMTP。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-3-3_05",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.3.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "FTP 客户发起对 FTP 服务器连接的第一阶段是建立（）。",
      "options": {
        "A": "传输连接",
        "B": "数据连接",
        "C": "会话连接",
        "D": "控制连接"
      },
      "answer": [
        "D"
      ],
      "explanation": "FTP 工作时使用两个连接：控制连接和数据连接。FTP 客户对 FTP 服务器发起连接时，首先建立控制连接，即向服务器的 21 号 TCP 端口发起连接；然后建立数据连接（20 号 TCP 端口）。FTP 并没有传输连接和会话连接的说法。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-3-3_07",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.3.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列关于 FTP 的叙述中，错误的是（）。",
      "options": {
        "A": "FTP 可以实现异构网络中计算机之间的文件传送",
        "B": "在进行文件传输时，FTP 客户端和服务器之间需建立两个连接",
        "C": "FTP 服务器主进程在 20 端口上监听客户端的连接请求",
        "D": "FTP 使用 TCP 进行可靠传输"
      },
      "answer": [
        "C"
      ],
      "explanation": "因为 FTP 屏蔽了各计算机系统的细节，所以 FTP 适用于异构网络中计算机之间的文件传送。当进行文件传输时，FTP 客户端和服务器之间需建立两个并行的控制连接和数据连接。FTP 服务器主进程在熟知端口 21 上监听客户端的服务请求。FTP 在传输层使用 TCP 进行可靠传输。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-3-3_08",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.3.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "一个 FTP 用户发送了一个 LIST 命令来获取服务器的文件列表，这时服务器应通过（）端口来传输该列表。",
      "options": {
        "A": "21",
        "B": "20",
        "C": "22",
        "D": "19"
      },
      "answer": [
        "B"
      ],
      "explanation": "FTP 中数据连接的端口是 20，而文件的列表是通过数据连接来传输的。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-3-3_09",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.3.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于 FTP 的叙述中，错误的是（）。",
      "options": {
        "A": "FTP 可以在不同类型的操作系统之间传送文件",
        "B": "FTP 并不适合用在两个计算机之间共享读写文件",
        "C": "控制连接在整个 FTP 会话期间一直保持",
        "D": "客户端默认使用端口 20 与服务器建立数据传输连接"
      },
      "answer": [
        "D"
      ],
      "explanation": "控制连接建立后，服务器进程用自己传送数据的熟知端口 20 与客户进程所提供的端口号建立数据传输连接（默认为 PORT 模式），即客户进程的端口号是客户进程自己提供的。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-3-3_10",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.3.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "当一台计算机从 FTP 服务器下载文件时，在该 FTP 服务器上对数据进行封装的 5 个转换步骤是（）。",
      "options": {
        "A": "比特，数据帧，数据报，数据段，数据",
        "B": "数据，数据段，数据报，数据帧，比特",
        "C": "数据报，数据段，数据，比特，数据帧",
        "D": "数据段，数据报，数据帧，比特，数据"
      },
      "answer": [
        "B"
      ],
      "explanation": "FTP 服务器的数据要经过应用层、传输层、网络层、数据链路层及物理层。因此，对应的封装是数据、数据段、数据报、数据帧，最后是比特。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-3-3_12",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.3.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "直接封装 FTP、DNS、DHCP 报文的协议分别是（）。",
      "options": {
        "A": "TCP、UDP、UDP",
        "B": "UDP、TCP、TCP",
        "C": "TCP、UDP、IP",
        "D": "UDP、UDP、UDP"
      },
      "answer": [
        "A"
      ],
      "explanation": "FTP 需要保证数据传输的可靠性，因此采用 TCP 作为传输层协议。在 DHCP 的应用中，客户在分配到 IP 地址前无法使用 TCP 建立连接，因此只能利用 UDP 进行无连接的交互。UDP 具有简化通信、更高效、低延迟的特性，能满足 DNS 查询对快速响应和高并发的需求。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-3-3_13",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.3.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2009 统考真题】FTP 客户和服务器间传递 FTP 命令时，使用的连接是（）。",
      "options": {
        "A": "建立在 TCP 之上的控制连接",
        "B": "建立在 TCP 之上的数据连接",
        "C": "建立在 UDP 之上的控制连接",
        "D": "建立在 UDP 之上的数据连接"
      },
      "answer": [
        "A"
      ],
      "explanation": "对于 FTP 文件传输，为了保证可靠性，选择 TCP，排除 C 和 D。FTP 的控制信息是带外传送的，即 FTP 使用了一个分离的控制连接来传送命令，因此答案为选项 A。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-3-3_14",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.3.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2017 统考真题】下列关于 FTP 的叙述中，错误的是（）。",
      "options": {
        "A": "数据连接在每次数据传输完毕后就关闭",
        "B": "控制连接在整个会话期间保持打开状态",
        "C": "服务器与客户端的 TCP 20 端口建立数据连接",
        "D": "客户端与服务器的 TCP21 端口建立控制连接"
      },
      "answer": [
        "C"
      ],
      "explanation": "FTP 使用控制连接和数据连接，控制连接存在于整个 FTP 会话过程中，数据连接在每次文件传输时才建立，传输结束就关闭，选项 A 和 B 正确。默认情况（PORT 模式）下 FTP 服务器使用 TCP 20 端口进行数据连接，使用 TCP 21 端口进行控制连接，这里的端口号是指 FTP 服务器的端口号，因此选项 C 错误、选项 D 正确。此外还需要注意的是，FTP 服务器是否使用 TCP 20 端口建立数据连接与传输模式有关，PORT 模式使用 TCP 20 端口，PASV 模式由服务器随机选定。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-4-4_07",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.4.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列关于电子邮件格式的说法中，错误的是（）。",
      "options": {
        "A": "电子邮件内容包括邮件头与邮件体两部分",
        "B": "邮件头中发信人地址（From:）、发送时间、收信人地址（To:）及邮件主题（Subject:）是由系统自动生成的",
        "C": "邮件体是实际要传送的信函内容",
        "D": "MIME 允许电子邮件系统传输文字、图像、语音与视频等多种信息"
      },
      "answer": [
        "B"
      ],
      "explanation": "邮件头是由多项内容构成的，其中一部分是由系统自动生成的，如发信人地址（From:）、发送时间；另一部分是由发件人输入的，如收信人地址（To:）、邮件主题（Subject:）等。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-4-4_08",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.4.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "【2012 统考真题】若用户 1 与用户 2 之间发送和接收电子邮件的过程如下图所示，则图中①、②、③阶段分别使用的应用层协议可以是（）。 ![](images/d76daef1faee4ad8507d725ec2279f595609880687f9b54de76ed6714dbfdfe7.jpg) <details> <summary>flowchart</summary> ```mermaid graph LR A[\"用户1\"] -->|①| B[\"用户1的邮件服务器\"] B -->|②| C[\"用户2的邮件服务器\"] C -->|③| D[\"用户2\"] ``` </details>",
      "options": {
        "A": "SMTP、SMTP、SMTP",
        "B": "POP3、SMTP、POP3",
        "C": "POP3、SMTP、SMTP",
        "D": "SMTP、SMTP、POP3"
      },
      "answer": [
        "D"
      ],
      "explanation": "SMTP 采用推的通信方式，即用户代理向邮件服务器及邮件服务器之间发送邮件时，SMTP 客户主动将邮件推送到 SMTP 服务器。而 POP3 采用拉的通信方式，即用户读取邮件时，用户代理向邮件服务器发出请求，拉取用户邮箱中的邮件。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-4-4_09",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.4.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "【2013 统考真题】下列关于 SMTP 的叙述中，正确的是（）。 I. 只支持传输 7 比特 ASCII 码内容 II. 支持在邮件服务器之间发送邮件 III. 支持从用户代理向邮件服务器发送邮件 IV. 支持从邮件服务器向用户代理发送邮件",
      "options": {
        "A": "仅 I、II 和 III",
        "B": "仅 I、II 和 IV",
        "C": "仅 I、III 和 IV",
        "D": "仅 II、III 和 IV"
      },
      "answer": [
        "A"
      ],
      "explanation": "根据 6.4.1 节可知，SMTP 用于用户代理向邮件服务器发送邮件，或在邮件服务器之间发送\n\n邮件。SMTP 只支持传输 7 比特的 ASCII 码内容。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-4-4_10",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.4.4",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "【2015 统考真题】通过 POP3 协议接收邮件时，使用的传输层服务类型是（）。",
      "options": {
        "A": "无连接不可靠的数据传输服务",
        "B": "无连接可靠的数据传输服务",
        "C": "有连接不可靠的数据传输服务",
        "D": "有连接可靠的数据传输服务"
      },
      "answer": [
        "D"
      ],
      "explanation": "POP3 建立在 TCP 连接上，使用的是有连接可靠的数据传输服务。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-4-4_11",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.4.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2018 统考真题】无须转换即可由 SMTP 直接传输的内容是（）。",
      "options": {
        "A": "JPEG 图像",
        "B": "MPEG 视频",
        "C": "EXE 文件",
        "D": "ASCII 文本"
      },
      "answer": [
        "D"
      ],
      "explanation": "电子邮件出现得较早，当时的数据传输能力较弱，使用者往往也不需要传输较大的图片、视频等，因此 SMTP 具有一些目前来看较为老旧的性质，如限制所有邮件报文的体部分只能采用 7 位 ASCII 码来表示。在如今的传输过程中，传输了非文本文件时，往往需要将这些多媒体文件重新编码为 ASCII 码再传输。因此无须转换即可传输的是 ASCII 文本，答案为选项 D。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-4-4_12",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.4.4",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2025 统考真题】下列关于 POP3 协议的叙述中，正确的是（）。 I. 支持用户代理从邮件服务器读取邮件 II. 支持用户代理向邮件服务器发送邮件 III. 支持邮件服务器之间发送与接收邮件 IV. 支持通过一条 TCP 连接收取多封邮件",
      "options": {
        "A": "仅 I、IV",
        "B": "仅 II、III",
        "C": "仅 I、II、III",
        "D": "仅 I、III、IV"
      },
      "answer": [
        "A"
      ],
      "explanation": "POP3 用于用户代理从邮件服务器读取邮件，说法 I 正确。用户代理向邮件服务器发送邮件使用的是 SMTP，而非 POP3。邮件服务器之间的邮件传输也由 SMTP 实现，与 POP3 无关。POP3 支持在一条 TCP 连接中收取多封邮件，无须为每封邮件单独建立连接，说法 IV 正确。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_05",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "万维网上的每个页面都有唯一的地址，这些地址统称（）。",
      "options": {
        "A": "IP 地址",
        "B": "域名地址",
        "C": "统一资源定位符",
        "D": "WWW 地址"
      },
      "answer": [
        "C"
      ],
      "explanation": "统一资源定位符负责标识万维网上的各种文档，并使每个文档在整个万维网的范围内具有唯一的标识符 URL。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_07",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "仅需 Web 服务器对 HTTP 报文进行响应，但不需要返回请求对象时，HTTP 请求报文应该使用的方法是（）。",
      "options": {
        "A": "GET",
        "B": "PUT",
        "C": "POST",
        "D": "HEAD"
      },
      "answer": [
        "D"
      ],
      "explanation": "使用 HEAD 方法时服务器可对 HTTP 报文进行响应，但不会返回请求对象，其作用主要是调试。另外三个选项中的方法的作用请查看本章中的表 6.1。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_08",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "HTTP 是一个无状态协议，然而 Web 站点经常希望能够识别用户，这时需要用到（）。",
      "options": {
        "A": "Web 缓存",
        "B": "Cookie",
        "C": "条件 GET",
        "D": "持续连接"
      },
      "answer": [
        "B"
      ],
      "explanation": "可以在 HTTP 中使用 Cookie 保存 HTTP 服务器和客户之间传递的状态信息。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_09",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于 Cookie 的说法中，错误的是（）。",
      "options": {
        "A": "Cookie 仅存储在服务器端",
        "B": "Cookie 是服务器产生的",
        "C": "Cookie 会威胁客户的隐私",
        "D": "Cookie 的作用是跟踪用户的访问和状态"
      },
      "answer": [
        "A"
      ],
      "explanation": "Cookie 是一个存储在用户主机中的文本文件。它由服务器产生，作为识别用户的手段。服务器的后端数据库记录了用户在 Web 站点上的活动，因此这些信息（如用户的个人信息及购物的偏好等）有可能被出卖给第三方，从而威胁到用户的隐私。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_10",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "以下关于非持续连接 HTTP 特点的描述中，错误的是（）。",
      "options": {
        "A": "HTTP 支持非持续连接与持续连接",
        "B": "HTTP/1.0 使用非持续连接，而 HTTP/1.1 默认使用持续连接",
        "C": "非持续连接中对每次请求/响应都要建立一次 TCP 连接",
        "D": "非持续连接中读取一个包含 100 个图片对象的 Web 页面，需要打开和关闭 100 次 TCP 连接"
      },
      "answer": [
        "D"
      ],
      "explanation": "非持续连接对每次请求/响应都建立一次 TCP 连接。在浏览器请求一个包含 100 个图片对象的 Web 页面时，服务器需要传输 1 个基本 HTML 文件和 100 个图片对象，因此共有 101 个对象，需要打开和关闭 TCP 连接 101 次。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_11",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "若浏览器支持并行 TCP 连接，使用非持久的 HTTP/1.0 协议请求浏览 1 个 Web 页，该页中引用同一网站上的 7 个小图像文件，则从浏览器为传输 Web 页请求建立 TCP 连接开始，到接收完所有内容为止，所需的往返时间 RTT 数至少是（）。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "8",
        "D": "9"
      },
      "answer": [
        "B"
      ],
      "explanation": "建立第一个 TCP 连接需要 1RTT，请求并接收 Web 页需要 1RTT。浏览器支持并行 TCP 连接，因此在收到 Web 页后可同时建立 7 个并行的 TCP 连接，以请求和接收 7 个小图像文件。因此，总往返时间 RTT 数 = 1RTT（建立第一个 TCP 连接）+ 1RTT（请求 Web 页）+ 1RTT（建立 7 个并行的 TCP 连接）+ 1RTT（请求 7 个小图像文件）= 4RTT。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_12",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "假设主机通过 HTTP/1.1（流水线方式）请求浏览某个 Web 服务器 S 上的 Web 页 rfc.html, rfc.html 引用了同目录下的 3 个 JPEG 小图像(假设只有在收到 rfc.html 后才能发送对其引用图像的请求），一次请求响应的时间为 RTT，忽略其他各种时延，不考虑拥塞控制和流量控制，则从发出 HTTP 请求报文开始到收到全部内容为止，所耗费的时间是（）。",
      "options": {
        "A": "2RTT",
        "B": "2.5RTT",
        "C": "4RTT",
        "D": "4.5RTT"
      },
      "answer": [
        "A"
      ],
      "explanation": "从发出 HTTP 请求报文开始，所以此时 TCP 连接已经建立。本题采用了流水线的持续连接。第 1 个 RTT 请求并收到 html 页面，收到 html 页面后才能发送对其引用小图像的请求，所以第 2 个 RTT 请求并收到 3 幅小图像，合计耗费 2RTT。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_13",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "主机通过超链接 http://www.cskaoyan.com/index.html 请求浏览 Web 页 index.html，浏览器使用流水线方式的 HTTP/1.1 协议，该 Web 页引用了同一网站上的 7 个小图像文件，假设主机到本地域名服务器和互联网上各服务器的往返时延均为 1RTT。本地域名服务器只提供递归查询服务，其他域名服务器只提供迭代查询服务，忽略其他所有时延，则从点击超链接开始到浏览器接收到所有内容为止，所需的往返时间 RTT 数最多是（）。",
      "options": {
        "A": "5",
        "B": "6",
        "C": "7",
        "D": "8"
      },
      "answer": [
        "C"
      ],
      "explanation": "主机点击超链接获取 html 页面，大致分为以下过程：① 向本地域名服务器发送递归查询请求，若本地域名服务器中有相应的 IP 地址缓存，则直接向主机返回相应的 IP 地址，只需 1RTT。否则，本地域名服务器还需要依次向根域名服务器、com 顶级域名服务器、cskaoyan.com 域名服务器发送迭代查询请求，查询到相应的 IP 地址最多需要 4RTT。② 建立初始 TCP 连接需要 1RTT，请求并接收 Web 页需要 1RTT，支持流水线传输方式，因此在收到 Web 页后可以同时发送 7 个小图像文件的请求，第②步的总往返时间是 1RTT（建立连接）+ 1RTT（请求 Web 页）+ 1RTT（请求 7 个小图像文件）=3RTT。综上所述，所需的 RTT 数最多是 $4 + 3 = 7$ 。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_14",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "主机 H 通过持久的 HTTP/1.1 协议请求服务器 S 上的 5KB 数据，最大段长 MSS=1KB，往返时间 RTT=50ms，最长报文段寿命 MSL=800ms，假设双方的接收窗口都足够大，当 H 收到来自 S 的第一个携带数据的报文段后，立即向 S 发送连接释放报文段（注：连接释放报文段可以携带数据信息或确认信息）。从 H 请求与 S 建立 TCP 连接时刻起，到 H 进入 CLOSED 状态为止，所需的时间至少是（）。",
      "options": {
        "A": "1000ms",
        "B": "1200ms",
        "C": "1600ms",
        "D": "1800ms"
      },
      "answer": [
        "D"
      ],
      "explanation": "主机 H 在建立 TCP 连接的第 3 个握手报文段中向服务器 S 请求数据，初始时 S 的发送窗口 = 拥塞窗口 = 1MSS = 1KB。H 收到 1KB 数据后，向 S 请求释放 TCP 连接，但 S 还有 4KB 数据要发送。因此，S 收到 H 发来的 FIN 段和确认后，拥塞窗口变为 2KB，发送窗口也随之变化，再用 1RTT 时间 S 给 H 发送 2KB 数据。最后 S 向 H 发送 FIN 段，这个 FIN 段携带了最后的 2KB 数据，H 收到 FIN 段后，向 S 发送 ACK 段，并启动时间等待计时器，等待 2MSL 的时间进入 CLOSED 状态，整个过程如下图所示，共耗时 $4RTT + 2MSL = 200 + 1600 = 1800ms$ 。\n\n![](images/4c0dad676bc64958da3f09a0478e99334fb6915333c77c27318b8d6d931208a9.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"主机H\"] -->|SYN| B[\"服务器S\"]\n    C[\"前两次握手报文段\"] -->|ACK| D[\"FIN段+确认\"]\n    E[\"ACK\"] -->|FIN| F[\"FIN段+2KB\"]\n    G[\"ACK\"] -->|FIN| H[\"ACK\"]\n    I[\"ACK\"] -->|ACK| J[\"CLOSED\"]\n    K[\"t→0\"] -->|ACK段 发送2KB| F\n    L[\"CLOSED\"] -->|CLOSED| H\n```\n</details>",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_15",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "假定一个 NAT 路由器的公网地址为 205.56.79.35，并且有如下表项： <table><tr><td>转换端口</td><td>源IP地址</td><td>源端口</td></tr><tr><td>2056</td><td>192.168.32.56</td><td>21</td></tr><tr><td>2057</td><td>192.168.32.56</td><td>20</td></tr><tr><td>1892</td><td>192.168.48.26</td><td>80</td></tr><tr><td>2256</td><td>192.168.55.106</td><td>80</td></tr></table> 它收到一个源 IP 地址为 192.168.32.56、源端口为 80 的分组，其动作是（）。",
      "options": {
        "A": "转换地址，将源 IP 变为 205.56.79.35，端口变为 2056，然后发送到公网",
        "B": "添加一个新的条目，转换 IP 地址及端口然后发送到公网",
        "C": "不转发，丢弃该分组",
        "D": "直接将分组转发到公网"
      },
      "answer": [
        "C"
      ],
      "explanation": "熟知端口号 80 是 HTTP 的服务器端口号，因此说明 IP 地址为 192.168.32.56（私有地址）的主机是 Web 服务器，源端口号为 80 说明该分组是 Web 服务器发出的 HTTP 响应分组。若该 HTTP 响应分组是对外网主机发出的 HTTP 请求的响应，则 NAT 表中一定存在相应的表项（否则 HTTP 请求分组不可能到达 Web 服务器），但在 NAT 表中找不到。所以只可能是对内网主机发出的 HTTP 请求的响应，该分组不需要通过路由器转发，因此路由器丢弃该分组。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_16",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2014 统考真题】使用浏览器访问某大学的 Web 网站主页时，不可能使用到的协议是（）。",
      "options": {
        "A": "PPP",
        "B": "ARP",
        "C": "UDP",
        "D": "SMTP"
      },
      "answer": [
        "D"
      ],
      "explanation": "接入网络时可能会用到 PPP，选项 A 可能用到；计算机不知道某主机的 MAC 地址时，用 IP 地址查询相应的 MAC 地址会用到 ARP，选项 B 可能用到；访问 Web 网站时，若 DNS 缓冲没有存储相应域名的 IP 地址，用域名查询相应的 IP 地址时要使用 DNS，而 DNS 是基于 UDP 的，所以选项 C 可能用到；SMTP 只有使用邮件客户端发送邮件，或邮件服务器向其他邮件服务器发送邮件时才会用到，单纯地访问 Web 网页不可能用到，答案为选项 D。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_17",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2015 统考真题】某浏览器发出的 HTTP 请求报文如下: GET /index.html HTTP/1.1 Host: www.test.edu.cn Connection: Close Cookie: 123456 下列叙述中，错误的是（）。",
      "options": {
        "A": "该浏览器请求浏览 index.html",
        "B": "index.html 存放在 www.test.edu.cn 上",
        "C": "该浏览器请求使用持续连接",
        "D": "该浏览器曾经浏览过 www.test.edu.cn"
      },
      "answer": [
        "C"
      ],
      "explanation": "Connection: 连接方式，Close 表示非持续连接方式，keep-alive 表示持续连接方式。Cookie 值由服务器产生，HTTP 请求报文中有 Cookie 方法表示曾访问过 www.test.edu.cn 服务器。",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_18",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2022 统考真题】假设主机 H 通过 HTTP/1.1 请求浏览某 Web 服务器 S 上的 Web 页 news408.html, news408.html 引用了同目录下的 1 幅图像, news408.html 文件大小为 1MSS（最大段长），图像文件大小为 3MSS，H 访问 S 的往返时间 RTT=10 ms，忽略 HTTP 响应报文的首部开销和 TCP 段传输时延。若 H 已完成域名解析，则从 H 请求与 S 建立 TCP 连接时刻起，到接收到全部内容止，所需的时间至少是（）。",
      "options": {
        "A": "30ms",
        "B": "40ms",
        "C": "50ms",
        "D": "60ms"
      },
      "answer": [
        "B"
      ],
      "explanation": "HTTP/1.1 默认使用持续连接，所有请求都是连续发送的。要求最少时间，理想的情况是 TCP 在第 3 次握手的报文段中捎带了 HTTP 请求，以及传输过程中的慢开始阶段不考虑拥塞。假设接收端有足够大的缓存空间，即发送窗口等同于拥塞窗口，共需要经过：第 1 个 RTT，进行 TCP 连接建立的前两次握手；第 2 个 RTT，主机 C 发送第 3 次握手报文并捎带了对 html 文件的 HTTP 请求，TCP 连接刚建立时服务器 S 的发送窗口 = 1MSS，服务器 S 发送大小为 1MSS 的 html 文件；第 3 个 RTT，主机 C 发送对 html 文件的确认并捎带了对图形文件的 HTTP 请求，服务器 S 收到确认后发送窗口变为 2MSS，然后服务器 S 发送大小为 2MSS 的图像文件；第 4 个 RTT，主机 C 向服务器 S 发送对收到的部分图像文件的确认，服务器 S 收到确认后发送窗口变为 4MSS，然后服务器 S 发送剩下的 1MSS 图像文件，完成传输，共需要 4RTT，即 40ms。整个传输过程如下图所示。\n\n![](images/5c99ddb42b8657aa48bdadb478dde8e9be5b818e1170b49cdb82c68af8f36a21.jpg)\n\n<details>\n<summary>flowchart</summary>\n\n```mermaid\ngraph TD\n    A[\"主机C\"] -->|发起 TCP(SYN)| B[\"服务器S\"]\n    B -->|响应 SYN+ACK| A\n    A -->|ACK+HTTP 请求| B\n    B -->|发送窗口=1MSS 发送html文件(1MSS)| A\n    A -->|ACK+HTTP 请求| B\n    B -->|发送窗口=2MSS 发送图像文件(2MSS)| A\n    A -->|ACK| B\n    B -->|发送窗口=4MSS 发送图像文件(1MSS)| A\n    A -->|时间| B\n```\n</details>",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "计算机网络_6-5-3_19",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "应用层",
      "section": "6.5.3",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "【2024 统考真题】若浏览器不支持并行 TCP 连接，使用非持久的 HTTP/1.0 协议请求浏览 1 个 Web 页，该页中引用同一网站上的 7 个小图像文件，则从浏览器为传输 Web 页请求建立 TCP 连接开始，到接收完所有内容为止，所需要的往返时间 RTT 数至少是()。",
      "options": {
        "A": "4",
        "B": "9",
        "C": "14",
        "D": "16"
      },
      "answer": [
        "D"
      ],
      "explanation": "浏览器不支持并行 TCP 连接，使用非持续的 HTTP/1.0 协议，因此每传输一个 Web 页和小图像文件都要建立一次 TCP 连接。第一次建立 TCP 连接时，前两次握手花 1RTT，第三次握手报文段中可以携带 HTTP 请求，服务器收到请求后返回 Web 页，共花 2RTT。之后，每传输一个图像文件都要花 2RTT。因此，到接收完所有内容，需要的总时间至少是 $2 \\times 8 = 16RTT$ 。注意，若浏览器支持并行 TCP 连接，则请求 Web 页仍要花 2RTT，但收到 Web 页后，可建立 7 个并行的 TCP 连接请求图像文件，传输图像的过程仅花 2RTT，总时间为 4RTT。\n\n# 二、综合应用题",
      "source_file": "wiki/sources/计算机网络/chapters/ch06-第6章-应用层.md"
    },
    {
      "id": "2027_数据结构_1.1.3_01_03aac7ac81",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "一个完整的数据结构通常应包含以下哪些要素（）？",
      "options": {
        "A": "数据元素及其存储方式",
        "B": "数据的逻辑结构和物理结构",
        "C": "数据的逻辑结构、存储结构以及在其上定义的基本操作",
        "D": "数据对象和数据元素之间的关系"
      },
      "answer": [
        "C"
      ],
      "explanation": "一个完整的数据结构由三部分组成：逻辑结构（如线性、树形等）、存储结构（物理表示）以及在其上定义的基本操作（如插入、删除等）。只有选项C同时包含这三个核心要素。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.1.3_02_75f4da474c",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列四种数据结构中，（）是非线性数据结构。",
      "options": {
        "A": "树",
        "B": "字符串",
        "C": "队列",
        "D": "栈"
      },
      "answer": [
        "A"
      ],
      "explanation": "树和图是典型的非线性数据结构，其他选项都属于线性数据结构。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_01_7b6edb1e76",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "一个算法应该具有（）等重要特性。",
      "options": {
        "A": "可维护性、可读性和可行性",
        "B": "可行性、确定性和有穷性",
        "C": "确定性、有穷性和可靠性",
        "D": "可读性、正确性和可行性"
      },
      "answer": [
        "B"
      ],
      "explanation": "一个算法应具有五个重要特性：有穷性、确定性、可行性、输入和输出。选项A、C和D中\n提到的特性（如可维护性、可读性、可靠性、正确性等）是很重要的，但它们并不是算法定义的重要特性，更多的是关于软件开发中的附加要求。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_02_fd893cc5b9",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于算法的说法中，正确的是()。",
      "options": {
        "A": "算法的时间效率取决于算法执行所花的 CPU 时间",
        "B": "在算法设计中不允许用牺牲空间效率的方式来换取好的时间效率",
        "C": "算法必须具备有穷性、确定性等五个特性",
        "D": "通常用时间效率和空间效率来衡量算法的优劣"
      },
      "answer": [
        "C"
      ],
      "explanation": "算法的时间效率是指算法的时间复杂度，即执行算法所需的计算工作量，选项A错误。算法设计会综合考虑时间效率和空间效率两个方面，若某些应用场景对时间效率要求很高，而对空间效率要求不高，则可用牺牲空间效率的方式来换取好的时间效率，选项B错误。评价一个算法的“优劣”不仅要考虑算法的时空效率，还要从正确性、可读性、健壮性等方面来综合评价。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_06_0f2b39dd01",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列算法的时间复杂度为（）。void fun(int n){ $\\begin{array} { c } { \\mathrm { i n t ~ i = 1 } ; } \\\\ { \\mathrm { w h i 1 } \\mathrm { l e } ( \\mathrm { i } < = \\mathrm { n } ) } \\\\ { \\mathrm { i } = \\mathrm { i } ^ { \\star } 2 ; } \\end{array}$ 算机孝",
      "options": {
        "A": "O(n)",
        "B": "$O ( n ^ { 2 } )$",
        "C": "$O ( n \\mathrm { l o g } _ { 2 } n )$",
        "D": "$O ( \\log _ { 2 } n )$"
      },
      "answer": [
        "D"
      ],
      "explanation": "找出基本运算i=i\\*2，设执行次数为 $t , \\ 2 ^ { t } { \\leqslant } n$ ，即 $t { \\leqslant } \\log _ { 2 } n$ ，故时间复杂度 $T ( n ) = O ( \\log _ { 2 } n )$ 更直观的方法：计算基本运算i=i\\*2的执行次数（每执行一次，i乘以2），其中判断条件可以理解为 $2 ^ { t } = n$ ，即 $t = \\log _ { 2 } n$ ，则 $T ( n ) = O ( \\log _ { 2 } n )$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_07_3b3b620a54",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列算法的时间复杂度为（）。voi$\\begin{array} { l } { \\mathrm { { \\ u ~ { \\psi } ~ } } _ { \\mathrm { { i n t } } } ^ { \\cup } ~ \\mathrm { { i = 0 } } ; } \\\\ { \\mathrm { { w h i } } 1 { \\mathrm { e } } ~ ( \\mathrm { { i } } ^ { \\star } \\mathrm { { i } } ^ { \\star } \\mathrm { { i } } < \\mathrm { { i } } < \\mathrm { { = n } } ) } \\\\ { \\qquad \\mathrm { { i } } + + ; } \\end{array}$",
      "options": {
        "A": "O(n)",
        "B": "$O ( n \\mathrm { l o g } _ { 2 } n )$",
        "C": "$O ( \\sqrt [ 3 ] { n } )$",
        "D": "$O ( { \\sqrt { n } } )$"
      },
      "answer": [
        "C"
      ],
      "explanation": "基本运算为i++，设执行次数为t，有 $t \\cdot t \\cdot \\mathop { t } { \\leqslant } n$ ，即 $t ^ { 3 } { \\leqslant } n$ 。因此有 $t { \\leqslant } \\sqrt [ 3 ] { n }$ ，则 $T ( n ) = O ( \\sqrt [ 3 ] { n } )$ o",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_08_c3525a554b",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "某个程序段如下： $\\mathtt { f o r } ( \\mathtt { i } \\mathtt { = n - 1 } ; \\mathtt { i } > 1 ; \\mathtt { i } \\mathtt { - - } )$ for(j=1;j<i;j++) if(A[j]>A[j+1]) A[j]与A[j+1]对换; 其中n为正整数，则最后一行语句的频度在最坏情况下是（）。",
      "options": {
        "A": "O(n)",
        "B": "$O ( n \\mathrm { l o g } _ { 2 } n )$",
        "C": "$O ( n ^ { 3 } )$",
        "D": "$O ( n ^ { 2 } )$"
      },
      "answer": [
        "D"
      ],
      "explanation": "这是冒泡排序的算法代码，考查最坏情况下的元素交换次数（若觉得理解起来有困难，则可在学完第8章后再回顾)。当所有相邻元素都为逆序时，则最后一行的语句每次都会执行。此时，\n$$\nT ( n ) = \\sum _ { i = 2 } ^ { n - 1 } \\sum _ { j = 1 } ^ { i - 1 } 1 = \\sum _ { i = 2 } ^ { n - 1 } i - 1 = ( n - 2 ) ( n - 1 ) / 2 = O ( n ^ { 2 } )\n$$\n所以在最坏情况下该语句的频度是 $O ( n ^ { 2 } )$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_09_9ba41f1eb4",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列程序段的时间复杂度为（）。if(n>=0) {$\\begin{array} { c } { { \\mathrm { f o r ~ ( \\ i n t ~ \\ i = 0 ~ ; ~ i < n ; ~ i + + ) ~ } } } \\\\ { { \\mathrm { f o r ~ ( \\ i n t ~ \\ j = 0 ~ ; ~ j < n ; ~ j + + ) ~ } } } \\end{array}$ printf(\"输入数据大于或等于零\\n\")1else {$\\begin{array} { r } { \\begin{array} { r } { \\mathrm { f o r ~ ( \\ i n t ~ \\omega ~ j = 0 ~ ; ~ j < n } ; ~ j + + ) } \\\\ { \\mathrm { p r i n t { f } ~ ( \\Omega ^ { w \\pm \\hat { \\mu } } _ { \\hat { \\mathbb { H } } 1 \\hat { \\mathbb { H } } } ) \\setminus \\frac { \\mathrm { i } \\mathbb { V } \\hat { \\mu } } { \\mathbb { V } \\hat { U } [ \\pm ] } \\mathrm { f i } \\mathrm { e } ^ { \\mathrm { i } \\mathbb { P } } \\mathrm { e } ^ { \\mathrm { i } \\mathbb { P } } \\mathrm { s } \\mathrm { \\backslash n } ^ { \\mathfrak { w } } ) } } \\end{array} } \\end{array}$",
      "options": {
        "A": "$O ( n ^ { 2 } )$",
        "B": "O(n)",
        "C": "O(1)",
        "D": "$O ( n \\mathrm { l o g } _ { 2 } n )$"
      },
      "answer": [
        "A"
      ],
      "explanation": "当程序段中有条件判断语句时，取分支路径上的最大时间复杂度。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_10_f3a7569c93",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列算法中加下划线的语句的执行次数为（）。int m=0,i,j;$\\begin{array} { c } { { \\mathrm { f o r ~ ( i = 1 ~ ; ~ i < = n ; ~ i + + ) ~ } } } \\\\ { { \\mathrm { f o r ~ ( \\ j = 1 ~ ; ~ j < = 2 \\star i ~ ; ~ j + + ) ~ } } } \\\\ { { \\mathrm { m + + ; ~ } } } \\end{array}$",
      "options": {
        "A": "n(n+ 1)",
        "B": "n",
        "C": "n+1",
        "D": "$n ^ { 2 }$"
      },
      "answer": [
        "A"
      ],
      "explanation": "m++语句的执行次数为\n$$\n\\sum _ { i = 1 } ^ { n } \\sum _ { j = 1 } ^ { 2 i } 1 = \\sum _ { i = 1 } ^ { n } 2 i = 2 \\sum _ { i = 1 } ^ { n } i = n ( n + 1 ) \\quad\n$$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_11_4fafc01d0d",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列函数代码的时间复杂度是（）。$\\begin{array} { r l } & { \\mathrm { i n t ~ \\mathbb { F } ~ u n c ~ ( \\ i n t ~ \\mathbb { n } ) ~ \\{ ~ \\xi ~ } ~ } \\\\ & { \\mathrm { ~ i ~ f ~ ( { \\mathrm { n } = = 1 } ) ~ \\xi ~ \\mathrm { r e t u r n ~ \\xi 1 } } ; } \\\\ & { \\mathrm { ~ e 1 s e ~ \\mathrm { \\ x e t u r n ~ \\xi 2 } \\star \\mathrm { F u n c } ~ ( { \\mathrm { n } / \\xi 2 } ) + \\mathrm { n } } ; } \\end{array}$",
      "options": {
        "A": "O(n)",
        "B": "$O ( n \\mathrm { l o g } _ { 2 } n )$",
        "C": "$O ( \\log _ { 2 } n )$",
        "D": "$O ( n ^ { 2 } )$"
      },
      "answer": [
        "C"
      ],
      "explanation": "本题求的是递归调用的时间复杂度，递归调用可视为多重循环，每次递归执行的基本语句是$\\scriptstyle { \\mathrm { i f ~ } } ( { \\mathrm { n = = 1 } } ) { \\mathrm { ~ r e t u r n ~ } } 1 ;$ ，因此可以认为单层循环的执行次数为1，设递归次数为 $t , \\ 2 ^ { t } \\leqslant n$ ，即t≤log2n，共执行了log2n次递归调用，总执行次数 $T = \\log _ { 2 } n \\times 1$ ，所以时间复杂度为O(log2n)。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_12_aa37575e60",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "【2011统考真题】设n是描述问题规模的非负整数，下列程序段的时间复杂度是（）。x=2;while(x<n/2) 育x=2\\*x;",
      "options": {
        "A": "$O ( \\log _ { 2 } n )$",
        "B": "O(n)",
        "C": "$O ( n \\mathrm { l o g } _ { 2 } n )$",
        "D": "$O ( n ^ { 2 } )$"
      },
      "answer": [
        "A"
      ],
      "explanation": "基本运算（执行频率最高的语句）为 ${ \\tt x } = 2 \\times { \\tt x }$ ，每执行一次，×乘以2，设执行次数为t，则有 $2 ^ { t + 1 } < n / 2$ ，所以 $t < \\log _ { 2 } ( n / 2 ) - 1 = \\log _ { 2 } n - 2$ ，得 $T ( n ) = O ( \\log _ { 2 } n )$ XTIT",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_14_d0b468f4e0",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2014统考真题】下列程序段的时间复杂度是（）。count=0;$\\begin{array} { r l } & { \\operatorname { f o r } { ( \\mathrm { k } { = } 1 ; \\mathrm { k } { < } = \\mathrm { n } ; \\mathrm { k } ^ { \\star } { = } 2 ) } } \\\\ & { \\qquad \\quad \\mathrm { f o r } ( \\mathrm { j } { = } 1 ; \\mathrm { j } { < } = \\mathrm { n } ; \\mathrm { j } { + } + ) } \\\\ & { \\qquad \\quad \\subset \\mathrm { o u n t } + + ; } \\end{array}$ 道计集",
      "options": {
        "A": "$O ( \\log _ { 2 } n )$",
        "B": "$O ( n )$",
        "C": "O(nlog₂n)",
        "D": "$O ( n ^ { 2 } )$"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于单层循环如 $\\begin{array} { l l } { { \\mathrm { f o r ~ ( { j = 1 } } ; { \\dot { \\mathrm { j } } } < = \\mathrm { n } ; { \\dot { \\mathrm { j } } } + \\mathrm { + } { \\mathrm { ) } } } } & { { \\mathrm { c o u n t + + } ; } } \\end{array}$ ，可以直接数出执行次数为n，因此可将多层循环转换成多个并列的单层循环，且列出每个单层循环如下（假设t为循环变量的幂次）：\n进入外层循环的条件是 $k { \\leqslant } n$ ，当循环结束时，循环变量的幂次t满足 $2 ^ { t } \\leqslant n < 2 ^ { t + 1 }$ ,即 $t \\leqslant \\log _ { 2 } n ,$ 所以总执行次数 $T = n ( t + 1 ) = n \\left( \\log _ { 2 } n + 1 \\right)$ ，时间复杂度为 $O ( n \\mathrm { l o g } _ { 2 } n )$ 机",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_15_70e3e9a068",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2017统考真题】下列函数的时间复杂度是（）。int func(int n){$\\begin{array} { r l } & { \\mathrm { i n t \\ i = 0 \\ , ~ \\ s u m = 0 \\ ; } } \\\\ & { \\mathrm { w h i 1 { e } \\ ( \\ s u m < n ) \\quad s u m \\ \\mathrm { \\ i = \\ + + i \\neq j } ; } } \\\\ & { \\mathrm { r e t u r n \\ i ; } } \\end{array}$ 机",
      "options": {
        "A": "O(log2n)",
        "B": "$O ( n ^ { 1 / 2 } )$",
        "C": "$O ( n )$",
        "D": "O(nlog2n)"
      },
      "answer": [
        "B"
      ],
      "explanation": "基本运算为 $\\mathtt { s u m + = + + i }$ ，等价于 $\\begin{array} { r l } { ^ { \\alpha } + + \\mathrm { i } ; } & { { } \\mathrm { s u m = s u m + i } ^ { \\prime \\prime } } \\end{array}$ ，每执行一次，i都自增1。当 $\\dot { 1 } = 1$ 时， $\\mathsf { s u m } { = } 0 { + } 1$ ；当i=2时， $s { \\mathrm { u m } } { = } 0 { + } 1 { + } 2$ ；当i=3时， $\\mathtt { s u m = } 0 + 1 + 2 + 3$ ，以此类推，得出 sum=$0 + 1 + 2 + 3 + \\cdots + \\dot { 1 } = ( 1 + \\dot { 1 } ) \\times \\dot { 1 } / 2$ ，可知循环次数t满足 $( 1 + t ) \\cdot t / 2 < n ,$ 故时间复杂度为 $O ( n ^ { 1 / 2 } )$ o\n## 注意\n统考真题中常将log2书写为log，此时默认底数为2。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_16_fe773f40d7",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2019统考真题】设n是描述问题规模的非负整数，下列程序段的时间复杂度是（）。x=0;while (n>=(x+1)\\*(x+1))x=x+1;",
      "options": {
        "A": "O(log2n)",
        "B": "$O ( n ^ { 1 / 2 } )$",
        "C": "O(n)",
        "D": "$O ( n ^ { 2 } )$"
      },
      "answer": [
        "B"
      ],
      "explanation": "假设第k次循环终止，则第k次执行时， $( x + 1 ) ^ { 2 } > n$ ,x的初始值为0，第k次判断时， $x = k - 1$ 即 $\\scriptstyle k ^ { 2 } > n , k > { \\sqrt { n } }$ ，因此该程序段的时间复杂度为 $O ( n ^ { 1 / 2 } )$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_17_8c7b38fead",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2022统考真题】下列程序段的时间复杂度是（）。int sum=0;for $\\begin{array} { r l } & { \\mathfrak { c } ( \\mathrm { i n t \\ i = 1 } ; \\mathrm { i } { < } \\mathrm { n } ; \\mathrm { i } ^ { \\star } { = } 2 ) } \\\\ & { \\ \\mathrm { f o r \\ ( i n t \\ i = 0 } ; \\mathrm { j } { < } \\mathrm { i } ; \\mathrm { j } { + } + ) } \\\\ & { \\qquad \\mathrm { s u m } + + ; } \\end{array}$ 机",
      "options": {
        "A": "$O ( \\log _ { 2 } n )$",
        "B": "$O ( n )$",
        "C": "O(nlog2n)",
        "D": "$O ( n ^ { 2 } )$"
      },
      "answer": [
        "B"
      ],
      "explanation": "对于单层循环如 $\\scriptstyle \\mathrm { f o r } ( \\dot { \\mathrm { 2 } } = 0 ; \\dot { \\mathrm { 3 } } < = \\dot { \\mathrm { 1 } } ; \\dot { \\mathrm { 3 } } + + ) \\ s \\mathrm { u m } + + ;$ ，可以直接数出执行次数为i，因此可将多\n层循环转换成多个并列的单层循环，且列出每个单层循环如下（假设t为循环变量的幂次）：\n进入外层循环的条件是 $i < n$ ，当循环结束时，循环变量的幂次t满足 $2 ^ { t } < n { \\leqslant } 2 ^ { t + 1 }$ 。总执行次数 $T = 1 + 2 ^ { 1 } + 2 ^ { 2 } + \\cdots + 2 ^ { t } = 2 ^ { t + 1 } - 1$ ，即 $n - 1 \\leqslant T$ 且 $T < 2 n - 1$ ，所以时间复杂度为 $O ( n )$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_1.2.3_18_b43b098e6c",
      "book": "数据结构",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.3",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2025统考真题】下列程序段的时间复杂度是（）。$\\begin{array} { r l } & { \\mathrm { i n t \\quad c o u n t = 0 , ~ i , ~ j ~ } ; } \\\\ & { \\mathrm { f o r \\quad ( i = 1 ) } ; \\mathrm { i } ^ { \\star } \\mathrm { i } < = \\mathrm { n } ; \\mathrm { i } + + ) } \\\\ & { \\qquad \\mathrm { f o r \\ ( j = 1 } ; \\mathrm { j < = i } ; \\mathrm { j } + + ) } \\\\ & { \\qquad \\quad \\mathrm { c o u n t } + + ; } \\end{array}$",
      "options": {
        "A": "$O ( \\log _ { 2 } n )$",
        "B": "O(n)",
        "C": "O(nlog2n)",
        "D": "$O ( n ^ { 2 } )$"
      },
      "answer": [
        "B"
      ],
      "explanation": "对于单层循环 $\\begin{array} { l l } { { \\mathrm { f o r ~ ( \\ j = 1 \\ ; \\ j < = i \\ ; \\ j + + ) ~ } } } & { { \\mathrm { c o u n t + + ; } } } \\end{array}$ ，其每趟的执行次数为 i(j 从1到 i)。外层循环的条件为 $i ^ { 2 } { \\leqslant } n ,$ i²≤n，即 $i { \\leqslant } \\sqrt { n }$ 。因此，可将多层循环转换为多个并列的单层循环，列出每个单层循环如下。总执行次数 $T ( n ) = 1 + 2 + \\cdots + \\left\\lfloor { \\sqrt { n } } \\right\\rfloor = n / 2 + \\left\\lfloor { \\sqrt { n } } \\right\\rfloor / 2$ ，时间复杂度为 $O ( n )$ 0",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.1.3_01_a3cf0a3765",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "线性表是具有n个（）的有限序列。",
      "options": {
        "A": "数据表",
        "B": "字符",
        "C": "数据元素",
        "D": "数据项"
      },
      "answer": [
        "C"
      ],
      "explanation": "线性表是由具有相同数据类型的有限数据元素组成的，数据元素是由数据项组成的。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.1.3_02_8a150950ab",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列几种描述中，（）是一个线性表。",
      "options": {
        "A": "由n个实数组成的集合",
        "B": "由100 个字符组成的序列",
        "C": "所有整数组成的序列",
        "D": "邻接表"
      },
      "answer": [
        "B"
      ],
      "explanation": "线性表定义的要求为：相同数据类型、有限序列。选项C的元素个数是无穷个，错误：选项A集合中的元素没有前后驱关系，错误；选项D属于一种存储结构，本题要求选出的是一个具体的线性表，不要将二者混为一谈。只有选项B符合线性表定义的要求。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.1.3_03_820fd24be6",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "在线性表中，除开始元素外，每个元素（）。",
      "options": {
        "A": "只有唯一的前驱元素",
        "B": "只有唯一的后继元素",
        "C": "有多个前驱元素",
        "D": "有多个后继元素"
      },
      "answer": [
        "A"
      ],
      "explanation": "线性表中，除最后一个（或第一个）元素外，每个元素都只有一个后继（或前驱）元素。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.1.3_04_a1a1065463",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "若非空线性表中的元素既没有直接前驱，又没有直接后继，则该表中有（）个元素。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "n"
      },
      "answer": [
        "A"
      ],
      "explanation": "线性表中的第一个元素没有直接前驱，最后一个元素没有直接后继；当线性表中仅有一个元素时，该元素既没有直接前驱，又没有直接后继。 灿育",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_01_457c1df0c7",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列叙述中，（）是顺序存储结构的优点。",
      "options": {
        "A": "存储密度大",
        "B": "插入运算方便",
        "C": "删除运算方便",
        "D": "方便地运用于各种逻辑结构的存储表示"
      },
      "answer": [
        "A"
      ],
      "explanation": "顺序表不像链表那样要在结点中存放指针域，因此存储密度大，选项A正确。选项B和C是链表的优点。选项D是错误的，比如对于树形结构，顺序表显然不如链表表示起来方便。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_02_12d10dda9a",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于顺序表的叙述中，正确的是（）。",
      "options": {
        "A": "顺序表可以利用一维数组表示，因此顺序表与一维数组在逻辑结构上是相同的",
        "B": "在顺序表中，逻辑上相邻的元素物理位置上不一定相邻",
        "C": "顺序表和一维数组一样，都可以进行随机存取",
        "D": "在顺序表中，每个元素的类型不必相同"
      },
      "answer": [
        "C"
      ],
      "explanation": "顺序表是顺序存储的线性表，表中所有元素的类型必须相同，且必须连续存放。一维数组中的元素可以不连续存放；此外，栈、队列和树等逻辑结构也可利用一维数组表示，但它与顺序表不属于相同的逻辑结构。在顺序表中，逻辑上相邻的元素物理位置上也相邻。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_03_0f01083c8f",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "通常说顺序表具有随机存取的特性，指的是（）。",
      "options": {
        "A": "查找值为x的元素的时间与顺序表中元素个数n无关",
        "B": "查找值为x的元素的时间与顺序表中元素个数n有关",
        "C": "查找序号为i的元素的时间与顺序表中元素个数n无关",
        "D": "查找序号为i的元素的时间与顺序表中元素个数n有关"
      },
      "answer": [
        "C"
      ],
      "explanation": "随机存取是指在O(1)的时间访问下标为i的元素，所需时间与顺序表中的元素个数n无关。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_04_f0f347a6a5",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "一个顺序表所占用的存储空间大小与（）无关。",
      "options": {
        "A": "表的长度",
        "B": "元素的存放顺序",
        "C": "元素的类型",
        "D": "元素中各字段的类型"
      },
      "answer": [
        "B"
      ],
      "explanation": "顺序表所占的存储空间=表长×sizeof（元素的类型），表长和元素的类型显然会影响存储空间的大小。若元素为结构体类型，则元素中各字段的类型也会影响存储空间的大小。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_05_103c548a84",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "若线性表最常用的操作是存取第i个元素及其前驱和后继元素的值，为了提高效率，应采用（）的存储方式。",
      "options": {
        "A": "单链表",
        "B": "双链表",
        "C": "循环单链表",
        "D": "顺序表"
      },
      "answer": [
        "D"
      ],
      "explanation": "题干实际要求能最快存取第i-1、i和i+1个元素值。选项A、B、C都只能从头结点依次顺序查找，时间复杂度为O(n)；只有顺序表可以按序号随机存取，时间复杂度为O(1)。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_06_05b24844da",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "一个线性表最常用的操作是存取任意一个指定序号的元素并在最后进行插入、删除操作，则利用（）存储方式可以节省时间。",
      "options": {
        "A": "顺序表",
        "B": "双链表",
        "C": "带头结点的循环双链表",
        "D": "循环单链表"
      },
      "answer": [
        "A"
      ],
      "explanation": "只有顺序表可以按序号随机存取，且在最后进行插入和删除操作时不需要移动任何元素。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_07_827042e477",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "在n个元素的线性表的数组表示中，时间复杂度为O(1)的操作是（）。I. 访问第i（1≤i≤n）个结点和求第i(2≤i≤n）个结点的直接前驱Ⅱ. 在最后一个结点后插入一个新的结点Ⅲ. 删除第 1 个结点 IV. 在第i(1≤i≤n）个结点后插入一个结点",
      "options": {
        "A": "I",
        "B": "II、III",
        "C": "I、II",
        "D": "I、II、III"
      },
      "answer": [
        "C"
      ],
      "explanation": "对说法I，解析略；对说法Ⅱ，在最后位置插入新结点不需要移动元素，时间复杂度为O(1);对说法Ⅲ，被删结点后的结点需要要依次前移，时间复杂度为O(n)；对说法IV，需要后移n-i个结点，时间复杂度为O(n)。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_08_923502d64e",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "设线性表有n个元素，严格说来，以下操作中，（）在顺序表上实现要比在链表上实现的效率高。I. 输出第i(1≤i≤n）个元素值I. 交换第3个元素与第4个元素的值I. 顺序输出这 n 个元素的值",
      "options": {
        "A": "I",
        "B": "I、III",
        "C": "I、II",
        "D": "II、III T"
      },
      "answer": [
        "C"
      ],
      "explanation": "对说法Ⅱ，顺序表只需3次交换操作；链表需要分别找到两个结点前驱，第4个结点断链后再插入到第2个结点后，效率较低。对说法Ⅲ，需要依次顺序访问每个元素，时间复杂度相同。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_09_f0084239c5",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "在一个长度为n的顺序表中删除第i（1≤i≤n）个元素时，需向前移动（）个元素。",
      "options": {
        "A": "n 妆",
        "B": "i-1",
        "C": "n−i",
        "D": "n−i+ 1"
      },
      "answer": [
        "C"
      ],
      "explanation": "需要将元素 $a _ { i + 1 } \\sim a _ { n }$ 依次前移一位，共移动 n − (i + 1) + 1 = n − i 个元素。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_10_03c496e33a",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "对于顺序表，访问第i个位置的元素和在第i个位置插入一个元素的时间复杂度为（）。",
      "options": {
        "A": "O(n), O(n)",
        "B": "O(n), O(1)",
        "C": "O(1), O(n)",
        "D": "O(1), O(1)"
      },
      "answer": [
        "C"
      ],
      "explanation": "在第i个位置插入一个元素，需要移动n−i +1个元素，时间复杂度为O(n)。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_11_9c7a02471d",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "对于顺序存储的线性表，其算法时间复杂度为O(1)的运算应该是（）。",
      "options": {
        "A": "将n个元素从小到大排序",
        "B": "删除第 $i ( 1 \\leqslant i \\leqslant n )$ 个元素",
        "C": "改变第 $i ( 1 \\leqslant i \\leqslant n )$ 个元素的值",
        "D": "在第i $( \\ 1 { \\leqslant } i { \\leqslant } n \\ )$ 个元素后插入一个新元素"
      },
      "answer": [
        "C"
      ],
      "explanation": "对n个元素进行排序的时间复杂度最小也要O(n)（初始有序时），通常为O(nlog2n)或 $O ( n ^ { 2 } )$ 通过第8章学习后会更容易理解。选项B和D显然错误。顺序表支持按序号的随机存取方式。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_12_4c2cb385df",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "顺序表的插入算法中，当n个空间已满时，可再申请增加分配m个空间，若申请失败，则说明系统没有（）可分配的存储空间。",
      "options": {
        "A": "m 个",
        "B": "m 个连续",
        "C": "n + m 个",
        "D": "n + m 个连续"
      },
      "answer": [
        "D"
      ],
      "explanation": "顺序存储需要连续的存储空间，在申请时需申请n+m个连续的存储空间，然后将线性表原来的n个元素复制到新申请的n+m个连续的存储空间的前n个单元。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.2.3_13_d08776fc2e",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2023统考真题】在下列对顺序存储的有序表（长度为n）实现给定操作的算法中，平均时间复杂度为O(1)的是（）。",
      "options": {
        "A": "查找包含指定值元素的算法",
        "B": "插入包含指定值元素的算法",
        "C": "删除第 $i ( 1 \\leqslant i \\leqslant n )$ 个元素的算法",
        "D": "获取第 $i ( 1 \\leqslant i \\leqslant n )$ 个元素的算法"
      },
      "answer": [
        "D"
      ],
      "explanation": "对于顺序存储的有序表，查找指定值元素可以采用顺序查找法或折半查找法，平均时间复杂度最少为O(log2n)。插入指定值元素需要先找到插入位置，然后将该位置及之后的元素依次后移一个位置，最后将指定值元素插入到该位置，平均时间复杂度为O(n)。删除第i个元素需要将该元素之后的全部元素依次前移一个位置，平均时间复杂度为O(n)。获取第i个元素只需直接根据下标读取对应的数组元素即可，时间复杂度为O(1)。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_01_62e10992c8",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于线性表的存储结构的描述中，正确的是（）。 I. 线性表的顺序存储结构优于其链式存储结构 Ⅱ. 链式存储结构比顺序存储结构能更方便地表示各种逻辑结构Ⅲ. 若频繁使用插入和删除结点操作，则顺序存储结构更优于链式存储结构IV. 顺序存储结构和链式存储结构都可以进行顺序存取",
      "options": {
        "A": "I、II、III",
        "B": "II、IV",
        "C": "II、III",
        "D": "III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "两种存储结构适用于不同的场合，不能简单地说谁好谁坏，说法Ⅰ错误。链式存储用指针表\n示逻辑结构，而指针的设置是任意的，因此比顺序存储结构能更方便地表示各种逻辑结构，说法Ⅱ正确。在顺序存储中，插入和删除结点需要移动大量元素，效率较低，说法Ⅲ的描述刚好相反。顺序存储结构既能随机存取又能顺序存取，而链式结构只能顺序存取，说法IV正确。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_02_369157d6a4",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "对于一个线性表，既要求能进行较快速地插入和删除，又要求存储结构能反映数据之间的逻辑关系，则应该用（）。",
      "options": {
        "A": "顺序存储方式",
        "B": "链式存储方式",
        "C": "散列存储方式",
        "D": "以上均可以"
      },
      "answer": [
        "B"
      ],
      "explanation": "首先直接排除选项A和D。散列存储通过散列函数映射到物理空间，不能反映数据之间的逻辑关系，排除选项C。链式存储能方便地表示各种逻辑关系，且插入和删除操作的时间复杂度为O(1)。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_03_0c17602e2f",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "链式存储设计时，结点内的存储单元地址（）。",
      "options": {
        "A": "一定连续",
        "B": "一定不连续",
        "C": "不一定连续",
        "D": "部分连续，部分不连续"
      },
      "answer": [
        "A"
      ],
      "explanation": "链式存储设计时，各个不同结点的存储空间可以不连续，但结点内的存储单元地址必须连续。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_04_601a451f4c",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列关于线性表的说法中，正确的是（）。I. 顺序存储方式只能用于存储线性结构Ⅱ. 在一个设有头指针和尾指针的单链表中，删除表尾元素的时间复杂度与表长无关Ⅲ. 带头结点的循环单链表中不存在空指针IV. 在一个长度为 n的有序单链表中插入一个新结点并仍保持有序的时间复杂度为O(n)V. 若用单链表来表示队列，则应该选用带尾指针的循环链表",
      "options": {
        "A": "I、II",
        "B": "I、II、IV、V 7",
        "C": "IV、V",
        "D": "III、IV、V"
      },
      "answer": [
        "D"
      ],
      "explanation": "顺序存储方式同样适用于存储图和树，说法Ⅰ错误。删除表尾结点时，必须从头开始找到表尾结点的前驱，其时间与表长有关，说法Ⅱ错误。循环单链表中最后一个结点的指针不是NULL，而是指向头结点，整个链表形成一个环，因此不存在空指针，说法Ⅲ正确。有序单链表只能依次查找插入位置，时间复杂度为O(n)，说法IV正确。队列需要在表头删除元素，表尾插入元素，采用带尾指针的循环链表较为方便，插入和删除的时间复杂度都为O(1)，说法V正确。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_05_f5de45840e",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "设线性表中有2n个元素，（）在单链表上实现要比在顺序表上实现效率更高。",
      "options": {
        "A": "删除所有值为 x的元素",
        "B": "在最后一个元素的后面插入一个新元素",
        "C": "顺序输出前k个元素",
        "D": "交换第i个元素和第 2n−i−1个元素的值（i=0,…,n−1）"
      },
      "answer": [
        "A"
      ],
      "explanation": "对于选项A，在单链表和顺序表上实现的时间复杂度都为O(n)，但后者要移动很多元素，因此在单链表上实现效率更高。对于选项B和D，顺序表的效率更高。C无区别。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_06_f67bf23ae0",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在一个单链表中，已知q所指结点是p所指结点的前驱结点，若在q和p之间插入结点s，则执行（）。7",
      "options": {
        "A": "s->next=p->next;p->next=s;",
        "B": "p->next=s->next;s->next=p;",
        "C": "q->next=s;s->next=p;",
        "D": "p->next=s;s->next=q;"
      },
      "answer": [
        "C"
      ],
      "explanation": "s 插入后，q成为 s的前驱，而p成为 s的后继，选择选项C。\n## 注意\n可能有读者认为选项C中的两条语句交换后才正确。实际上，因为本题插入位置的前后结点都有指针指示（这与前面介绍的插入操作是不同的），所以选项C中的语句顺序并不会造成断链。在此提醒读者在学习过程中一定要多动脑思考，而不要生搬硬套。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_07_d893d63a9a",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "给定有n个元素的一维数组，建立一个有序单链表的最低时间复杂度是（）。",
      "options": {
        "A": "O(1)",
        "B": "O(n)",
        "C": "O(n²)",
        "D": "O(nlog2n)"
      },
      "answer": [
        "D"
      ],
      "explanation": "若先建立链表，然后依次插入建立有序表，则每插入一个元素就需遍历链表寻找插入位置，即直接插入排序，时间复杂度为 $O ( n ^ { 2 } )$ 。若先将数组排好序，然后建立链表，建立链表的时间复杂度为O(n)，数组排序的最好时间复杂度为 O(nlog2n)，总时间复杂度为O(nlog2n)。故选择选项D。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_09_74d27a166c",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "单链表中，增加一个头结点的目的是（）。",
      "options": {
        "A": "使单链表至少有一个结点",
        "B": "标识表结点中首结点的位置",
        "C": "方便运算的实现",
        "D": "说明单链表是线性表的链式存储"
      },
      "answer": [
        "C"
      ],
      "explanation": "单链表设置头结点的目的是方便运算的实现，主要好处体现在：第一，有头结点后，插入和删除数据元素的算法就统一了，不再需要判断是否在第一个元素之前插入或删除第一个元素；第二，不论链表是否为空，其头指针是指向头结点的非空指针，链表的头指针不变，因此空表和非空表的处理也就统一了。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_10_93c3446f1a",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "在一个长度为n的带头结点的单链表h上，设有尾指针r，则执行（）操作与链表的表长有关。",
      "options": {
        "A": "删除单链表中的第一个元素",
        "B": "删除单链表中的最后一个元素",
        "C": "在单链表第一个元素前插入一个新元素",
        "D": "在单链表最后一个元素后插入一个新元素"
      },
      "answer": [
        "B"
      ],
      "explanation": "删除单链表的最后一个结点需置其前驱结点的指针域为NULL，需要从头开始依次遍历找到该前驱结点，需要O(n)的时间，与表长有关。其他操作均与表长无关，读者可自行模拟。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_11_2f01d94391",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "对于一个头指针为head的带头结点的单链表，判定该表为空表的条件是（）；对于不带头结点的单链表，判定空表的条件为（）。",
      "options": {
        "A": "head==NULL",
        "B": "head->next==NULL",
        "C": "head->next==head",
        "D": "head!=NULL"
      },
      "answer": [
        "B"
      ],
      "explanation": ", A\n在带头结点的单链表中，头指针head指向头结点，头结点的next域指向第一个元素结点，$\\scriptstyle \\mathtt { h e a d - } > \\mathtt { n e x t } = = \\mathtt { N U L L }$ 表示该单链表为空。在不带头结点的单链表中，head直接指向第一个元素结点，head==NULL表示该单链表为空。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_12_ef7c82cc77",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "在线性表 $a _ { 0 } , a _ { 1 } , \\cdots , a _ { 1 0 0 }$ 中，删除元素 $a _ { 5 0 }$ 需要移动（）个元素。",
      "options": {
        "A": "0",
        "B": "50 FI",
        "C": "51",
        "D": "0或50"
      },
      "answer": [
        "D"
      ],
      "explanation": "线性表有顺序存储和链式存储两种存储结构。若采用链式存储结构，则删除元素 $a _ { 5 0 }$ 不需要移动元素；若采用顺序存储结构，则需要依次移动50个元素。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_13_726644af7b",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "通过含有n(n>1)个元素的数组a，采用头插法建立单链表L，则 L 中的元素次序（）。",
      "options": {
        "A": "与数组 a 的元素次序相同",
        "B": "与数组 a的元素次序相反",
        "C": "与数组a的元素次序无关",
        "D": "以上都错误"
      },
      "answer": [
        "B"
      ],
      "explanation": "当采用头插法建立单链表时，数组后面的元素插入到单链表L的最前端，所以L中的元素次序与数组a的元素次序相反。 H",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_14_ec1272af76",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下面关于线性表的一些说法中，正确的是（）。",
      "options": {
        "A": "对一个设有头指针和尾指针的单链表执行删除最后一个元素的操作与链表长度无关",
        "B": "线性表中每个元素都有一个直接前驱和一个直接后继",
        "C": "为了方便插入和删除数据，可以使用双链表存放数据",
        "D": "取线性表第i个元素的时间与i的大小有关"
      },
      "answer": [
        "C"
      ],
      "explanation": "选项A显然错误。选项B中第一个元素和最后一个元素不满足题设要求。双链表能很方便地访问前驱和后继，故删除和插入数据较为方便，选项C正确。选项D未考虑顺序存储的情况。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_15_af69ed54cc",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "在双链表中向p所指的结点之前插入一个结点q的操作为（）。",
      "options": {
        "A": "p->prior=q; q->next=p; p->prior->next=q; q->prior=p->prior;",
        "B": "q->prior=p->prior; p->prior->next=q; q->next=p; p->prior=q->next;",
        "C": "q->next=p; p->next=q; q->prior->next=q; q->next=p;",
        "D": "$\\mathrm { p { - } { > } p r i o r { - } { > } n e x t { = } q ; } \\mathrm { { ~ } q { - } { > } n e x t { = } p ; \\mathrm { { ~ } q { - } { > } p r i o r { = } p { - } { > } p r i o r { ; } \\mathrm { { ~ } p { - } { > } p r i o r { = } q ; } } }$"
      },
      "answer": [
        "D"
      ],
      "explanation": "为了在 $\\mathrm { p }$ 之前插入结点 $\\texttt { q }$ ，可以将p的前一个结点的 next 域指向 q，将 $\\mathtt { q }$ 的 next 域指向p，将 $\\mathrm { q }$ 的 $\\mathtt { p r i o r }$ 域指向 $\\mathrm { p }$ 的前一个结点，将 $\\mathrm { p }$ 的 $\\mathtt { p r i o r }$ 域指向 $\\mathbf { \\Delta } \\mathbf { q } \\circ$ 仅选项D满足条件。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_16_e29a2ca79c",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "在双链表存储结构中，删除p所指的结点时必须修改指针（）。",
      "options": {
        "A": "p->prior->next=p->next; p->next->prior=p->prior;",
        "B": "p->prior=p->prior->prior; p->prior->next=p;",
        "C": "p->next->prior=p; p->next=p->next->next;",
        "D": "p->next=p->prior->prior; p->prior=p->next->next;"
      },
      "answer": [
        "A"
      ],
      "explanation": "与上一题的分析基本类似，只不过这里是删除一个结点，注意将 $\\mathrm { p }$ 的前、后两结点链接起来。关键是要保证在结点指针的修改过程中不断链！ X\n注意，请读者仔细对比上述两题，弄清双链表的插入和删除方法。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_17_064ecde117",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "在如下图所示的双链表中，已知指针p指向结点A，若要在结点A和C之间插入指针q所指的结点B，则依次执行的语句序列可以是（）。 ① q->next=p->next; ② q->prior=p; ③ p->next=q; ④ p->next->prior=q;",
      "options": {
        "A": "①②④③",
        "B": "④③②①",
        "C": "③④①②",
        "D": "①③④②"
      },
      "answer": [
        "A"
      ],
      "explanation": "结点A和B分别由指针 $\\mathrm { p }$ 和 $\\mathtt { q }$ 指示，但结点C仅能由p->next间接指示，因此在改变p->next之前，必须先将g->next指向结点C，即①要在③前面，且④要在③前面（因为若先执行③，则④相当于q->prior指向其自身，显然矛盾）。故只能选择选项A。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_18_663f505c66",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "在双链表的两个结点之间插入一个新结点，需要修改（）个指针域。",
      "options": {
        "A": "1",
        "B": "3",
        "C": "4",
        "D": "2"
      },
      "answer": [
        "C"
      ],
      "explanation": "当在双链表的两个结点（分别用第一个、第二个结点表示）之间插入一个新结点时，需要修改四个指针域，分别是：新结点的前驱指针域，指向第一个结点；新结点的后继指针域，指向第二个结点；第一个结点的后继指针域，指向新结点；第二个结点的前驱指针域，指向新结点。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_19_ae1a071343",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "在长度为n的有序单链表中插入一个新结点，并仍然保持有序的时间复杂度是（）。",
      "options": {
        "A": "O(1)",
        "B": "O(n)",
        "C": "O(n2)",
        "D": "O(nlog2n)"
      },
      "answer": [
        "B"
      ],
      "explanation": "设单链表递增有序，首先要在单链表中找到第一个大于×的结点的直接前驱p，在p之后插入该结点。查找的时间复杂度为 $O ( n )$ ，插入的时间复杂度为O(1)，总时间复杂度为 $O ( n )$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_20_e84ff8caa1",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "与单链表相比，双链表的优点之一是（）。",
      "options": {
        "A": "插入、删除操作更方便",
        "B": "可以进行随机访问 K",
        "C": "可以省略表头指针或表尾指针",
        "D": "访问前后相邻结点更灵活"
      },
      "answer": [
        "D"
      ],
      "explanation": "在插入和删除操作上，单链表和双链表都不用移动元素，都很方便，但双链表修改指针的操作更为复杂，选项A错误。双链表中可以快速访问任何一个结点的前驱和后继结点，选项D正确。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_22_1a3258dc58",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "对于一个带头结点的循环双链表L，判断该表为空表的条件是（）。",
      "options": {
        "A": "$_ { \\textrm L - > \\mathrm { p r i o r } = = \\textrm { L } \\& \\mathrm { L } - > \\mathrm { n e x t } = = \\mathrm { N U L L } }$",
        "B": "$_ { \\textrm L } \\mathrm { - } \\mathrm { > p r } \\mathrm { i } \\mathrm { o r } \\mathrm { = } \\mathrm { = } \\mathrm { N U L L } \\& \\& \\mathrm { L } \\mathrm { - } \\mathrm { > } \\mathrm { n e x t } \\mathrm { = } \\mathrm { = } \\mathrm { N U L I }$ N",
        "C": "$_ { \\textrm L } \\mathrm { - } > \\mathrm { p r } \\mathrm { i } \\mathrm { o r } \\mathrm { = } \\mathrm { = } \\mathrm { N U L } \\& \\& \\mathrm { L } \\mathrm { - } > \\mathrm { n e x t } \\mathrm { = } \\mathrm { = } \\mathrm { L }$",
        "D": "$_ { \\mathrm { L } ^ { - } > p r i o r = \\mathrm { L } , \\& \\& \\mathrm { L } ^ { - } > n e x t = = I }$"
      },
      "answer": [
        "D"
      ],
      "explanation": "循环双链表L判空的条件是头结点（头指针）的prior和next域都指向它自身。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_2.3.7_33_f9949aa723",
      "book": "数据结构",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.7",
      "section_title": "本节试题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2016统考真题】已知表头元素为c的单链表在内存中的存储状态如下表所示。 现将f存放于1014H处并插入单链表，若f在逻辑上位于a和e之间，则a、e、f的“链接地址”依次是（）。",
      "options": {
        "A": "1010H、1014H、1004H",
        "B": "1010H、1004H、1014H",
        "C": "1014H、1010H、1004H",
        "D": "1014H、1004H、1010H"
      },
      "answer": [
        "D"
      ],
      "explanation": "根据存储状态，单链表的结构如下图所示。\n其中“链接地址”是指结点next所指的内存地址。当结点f插入后，a指向f，f指向e，e指向 b。显然a、e和 f的“链接地址”分别是f、b和e的内存地址，即1014H、1004H和1010H。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.1.4_01_7649eed4c3",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "栈和队列具有相同的（）。 计",
      "options": {
        "A": "抽象数据类型",
        "B": "逻辑结构",
        "C": "存储结构",
        "D": "运算"
      },
      "answer": [
        "B"
      ],
      "explanation": "栈和队列的逻辑结构都是相同的，都属于线性结构，只是它们对数据的运算不同。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.1.4_03_25b1fbd610",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列选项中，（）不是栈的基本操作。",
      "options": {
        "A": "删除栈顶元素",
        "B": "删除栈底元素",
        "C": "判断栈是否为空",
        "D": "将栈置为空栈"
      },
      "answer": [
        "B"
      ],
      "explanation": "基本操作是指该结构最核心、最基本的运算，其他较复杂的操作可通过基本操作实现。删除栈底元素不属于栈的基本运算，但它可以通过调用栈的基本运算求得。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.1.4_04_a73dc57b4b",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.4",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "设用数组a[n]存储一个栈，初始栈顶指针top=-1，则元素x入栈的操作是（）。",
      "options": {
        "A": "a[--top]=x",
        "B": "a[top--]=x",
        "C": "a[++top]=x",
        "D": "a[top++]=x"
      },
      "answer": [
        "C"
      ],
      "explanation": "数组下标范围为0～n−1，初始时top为-1，第一个元素入栈后，top为0，即top指向栈顶元素。栈向高地址方向增长，所以入栈时应先将指针top加1，然后存入元素x，选项C正确。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.2.5_01_d0ab77d774",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "栈和队列的主要区别在于（）。",
      "options": {
        "A": "它们的逻辑结构不一样",
        "B": "它们的存储结构不一样",
        "C": "所包含的元素不一样",
        "D": "插入、删除操作的限定不一样"
      },
      "answer": [
        "D"
      ],
      "explanation": "栈和队列的逻辑结构都是线性结构，都可以采用顺序存储或链式存储，选项A和B错误，\n选项C显然也错误。只有选项D才是栈和队列的本质区别，限定表中插入和删除操作位置的不同。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.2.5_02_94bd960467",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "队列的“先进先出”特性是指（）。I. 最后插入队列中的元素总是最后被删除Ⅱ.当同时进行插入、删除操作时，总是插入操作优先Ⅲ.每当有删除操作时，总要先做一次插入操作IV. 每次从队列中删除的总是最早插入的元素 计",
      "options": {
        "A": "I",
        "B": "I和 IV",
        "C": "II 和 III",
        "D": "IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "K\n队列“先进先出”的特性表现在：先入队列的元素先出队列，后入队列的元素后出队列，入队对应的是插入操作，出队对应的是删除操作。说法Ⅰ和IV均正确。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.2.5_03_ca3c346a34",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "允许对队列进行的操作有（）。",
      "options": {
        "A": "对队列中的元素排序",
        "B": "取出最近入队的元素",
        "C": "在队列元素之间插入元素",
        "D": "删除队首元素"
      },
      "answer": [
        "D"
      ],
      "explanation": "删除队首元素即出队，是队列的基本操作之一，所以选择选项D。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.2.5_04_125654fd84",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "一个队列的入队顺序是1,2,3,4，则出队的输出顺序是（）。",
      "options": {
        "A": "4, 3, 2, 1",
        "B": "1, 2, 3, 4",
        "C": "1, 4,3,2",
        "D": "3, 2, 4, 1"
      },
      "answer": [
        "B"
      ],
      "explanation": "队列的入队顺序和出队顺序是一致的，这是和栈不同的。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.2.5_14_11dfde215d",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "在用单链表实现队列时，队头设在链表的（）位置。",
      "options": {
        "A": "链头",
        "B": "链尾",
        "C": "链中",
        "D": "以上都可以"
      },
      "answer": [
        "A"
      ],
      "explanation": "因为在队头做出队操作，为便于删除队首元素，所以总是选择链头作为队头。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.2.5_17_48f27420db",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "假设循环单链表表示的队列长度为n，队头固定在链表尾，若只设头指针，则入队操作的时间复杂度为（）。",
      "options": {
        "A": "O(n)",
        "B": "O(1)",
        "C": "$O ( n ^ { 2 } )$",
        "D": "$O ( n \\mathrm { l o g } _ { 2 } n )$"
      },
      "answer": [
        "A"
      ],
      "explanation": "依题意，入队操作是在队尾进行，即链表表头。题中已明确说明链表只设头指针，即没有头结点和尾指针，入队后，循环单链表必须保持循环的性质，在只带头指针的循环单链表中寻找表尾结点的时间复杂度为O(n)，所以入队的时间复杂度为O(n)。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.2.5_18_393a0693ae",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "假设输入序列为1,2,3,4,5，利用两个队列进行出入队操作，不可能输出的序列是（）。",
      "options": {
        "A": "1,2, 3, 4,5",
        "B": "5, 2, 3, 4, 1",
        "C": "1, 3, 2, 4, 5",
        "D": "4, 1, 5, 2, 3"
      },
      "answer": [
        "B"
      ],
      "explanation": "此类题可对各选项进行模拟，假设队列为Q₁和 $\\mathrm { Q } _ { 2 }$ 。对于选项A，元素依次入队 $\\mathrm { Q } _ { 1 }$ ，然后依次出队。对于选项B，5最先出队，只可能是1,2,3,4入队 $\\mathrm { Q } _ { 1 }$ ，5入队 $\\mathrm { Q } _ { 2 } \\mathrm { { : } }$ ，然后5出队，只能得到5,1.2,3,4。对于选项C，1,2,5入队Q1，3,4入队 $\\mathrm { Q } _ { 2 }$ ，然后按要求出队。选项D的分析同选项C。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.2.5_19_66a288a38f",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 19,
      "type": "single_choice",
      "question": "若以1,2,3,4作为双端队列的输入序列，则既不能由输入受限的双端队列得到，又不能由输出受限的双端队列得到的输出序列是（）。",
      "options": {
        "A": "1, 2, 3, 4",
        "B": "4, 1, 3, 2",
        "C": "4,2, 3, 1",
        "D": "4, 2, 1, 3"
      },
      "answer": [
        "C"
      ],
      "explanation": "使用排除法。先看可由输入受限的双端队列产生的序列：设右端输入受限，1,2,3,4依次左入，则依次左出可得4,3,2,1，排除选项A；左出、右出、左出、左出可得到4,1,3,2，排除选项B；再看可由输出受限的双端队列产生的序列：设右端输出受限，1,2,3,4依次左入、左入、右入、左入，依次左出可得到4,2,1,3，排除选项D。 XOT",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.2.5_20_ef30ff2da7",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.5",
      "section_title": "本节试题精选",
      "num": 20,
      "type": "single_choice",
      "question": "【2010统考真题】某队列允许在其两端进行入队操作，但仅允许在一端进行出队操作。若元素 $a , b , c , d , e$ 依次入此队列后再进行出队操作，则不可能得到的出队序列是（）。",
      "options": {
        "A": "$b , a , c , d , e$",
        "B": "$d , b , a , c , e$ K",
        "C": "$d , b , c , a , e$",
        "D": "$e , c , b , a , d$"
      },
      "answer": [
        "C"
      ],
      "explanation": "本题的队列实际上是一个输出受限的双端队列，如图3.11所示。A操作：a左入（或右入）、b左入、c右入、d右入、e右入。B操作：a左入（或右入）、b左入、c右入、d左入、e右入。D操作：a左入（或右入）、b左入、c左入、d右入、e左入。C操作：a左入（或右入）、b右入、因d未出，此时只能入队，c怎么进都不可能在b和a之间。\n【另解】初始时队列为空，第1个元素a左入（或右入）后，第2个元素b无论是左入还是右入都必与a相邻，而选项C中a与b不相邻，不合题意。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.3.6_02_91f20da321",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "表达式a\\*(b+c)-d 的后缀表达式是（）。",
      "options": {
        "A": "abcd\\*+-",
        "B": "abc+\\*d-",
        "C": "abc\\*+d-",
        "D": "-+\\*abcd"
      },
      "answer": [
        "B"
      ],
      "explanation": "后缀表达式中，每个运算符均直接位于其两个操作数的后面，按照这样的方式逐步根据计算的优先级将每个计算式进行变换，即可得到后缀表达式。\n【另解】将两个直接操作数用括号括起来，再将操作符提到括号后，最后去掉括号。例如，对于 $\\left( \\Phi \\left( _ { \\left( 2 \\right) } \\mathsf { a } ^ { \\star } \\left( _ { \\left( 3 \\right) } \\mathsf { b } + \\mathsf { c } \\right) \\mathsf { \\Omega } \\right) - \\mathsf { d } \\right)$ ，提出操作符并去掉括号后，可得后缀表达式为 $\\mathtt { a b c } + \\star \\mathtt { d } - \\mathtt { c }$\n学完第5章后，可将表达式画成二叉树的形式，再用后序遍历即可求得后缀表达式。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.3.6_06_9ae4936eba",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "设有如下递归函数，则计算℉(8)需要调用该递归函数的次数为（）。int F(int n){if(n<=3) return 1;else return F(n-2)+F(n-4)+1;}",
      "options": {
        "A": "7",
        "B": "8",
        "C": "9",
        "D": "10"
      },
      "answer": [
        "C"
      ],
      "explanation": "计算F(8)的递归调用树如右图所示：\n由图可知，递归函数℉()调用的次数为9。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.3.6_07_30912b001e",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "设有如下递归函数，在 func(func(5))的执行过程中，第 4 个被执行的func 函数是()。int func(int x){if(x<=3) return 2;else return func(x-2)+func(x-4); 机",
      "options": {
        "A": "func(2)",
        "B": "func(3)",
        "C": "func(4)",
        "D": "func(5)"
      },
      "answer": [
        "C"
      ],
      "explanation": "首先，执行内层参数 func(5) =func(3)+\nfunc(1)=4，共执行 3 次 func 函数。然后，执行 func(func(5))=func(4)=func(2)+func(0)=4，因此第4个被执行的func函数是func(4)。也可以采用画出递归调用树的方式，即某个函数的执行次序等于其在递归调用树的先序遍历中的次序。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.3.6_13_9898d04d62",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2012 统考真题】已知操作符包括 $\\omega _ { + } , \\omega _ { - } , \\omega _ { - } , \\omega _ { - } , \\omega _ { / } , \\omega _ { - } \\mid ^ { \\dag } ,$ 和“)”。将中缀表达式a+b-a\\*（(c+d)/e-f)+g 转换为等价的后缀表达式 ab+acd+e/f-\\*-g+时，用栈来存放暂时还不能确定运算次序的操作符。栈初始时为空，转换过程中同时保存在栈中的操作符的最大个数是（）。",
      "options": {
        "A": "5",
        "B": "7",
        "C": "8",
        "D": "11"
      },
      "answer": [
        "A"
      ],
      "explanation": "在中缀表达式转后缀表达式的过程中，扫描到操作数时直接输出，扫描到操作符时根据其优先级进行相应的出入栈操作。有几点需要注意：①若遇到界限符“（”，则直接入栈；②若遇到界限符“）”，则不入栈，且依次弹出栈顶运算符，直到遇到“（”为止，并删除“（”；③若当前运算符的优先级高于栈顶运算符或遇到栈顶为“（”，则直接入栈：④若当前运算符的优先级低于或等于栈顶运算符，则依次弹出栈中的运算符并加入后缀表达式，直到遇到一个优先级低于它的运算符或遇到“（”或栈空为止，之后将当前运算符入栈。 K\n求栈中操作符的最大个数时，为简单起见，可省略对操作数的处理。\n由上述过程可知，栈中操作符的最大个数为5。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.3.6_14_c5e09eb578",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2014统考真题】假设栈初始为空，将中缀表达式 $\\mathsf { a } / \\mathsf { b } + ( \\mathsf { c } ^ { \\star } \\mathsf { d } - \\mathsf { e } ^ { \\star } \\pounds )$ /g 转换为等价的后缀表达式的过程中，当扫描到f时，栈中的元素依次是（）。",
      "options": {
        "A": "+ (\\*−",
        "B": "+ (−\\*",
        "C": "/+(\\*-\\*",
        "D": "/+-\\*"
      },
      "answer": [
        "B"
      ],
      "explanation": "中缀表达式 $\\mathsf { a } / \\mathsf { b } + ( \\mathsf { c } ^ { \\star } \\mathsf { d } - \\mathsf { e } ^ { \\star } \\pounds )$ /g转换为后缀表达式的过程如下：\n由此可知，当扫描到f时，栈中的元素依次是+（-\\*。\n【另解】采用手算方法，得出中缀式 $\\mathsf { a } / \\mathsf { b } + ( \\mathsf { c } ^ { \\star } \\mathsf { d } - \\mathsf { e } ^ { \\star } \\pounds )$ /g 对应的后缀式为 $\\mathsf { a b } / \\mathsf { c d } ^ { \\star } \\mathsf { e f } ^ { \\star } \\mathsf { - g } / \\mathsf { + }$ 0中缀表达式转后缀表达式时，操作数都直接输出，因此操作数的顺序是固定的。扫描到f时，在后缀表达式f后面的运算符要么还未入栈，要么还在栈中，需要结合中缀式来判断，f后面依次出栈的运算符为\\*-/+，/在中缀表达式f之后，此时还未入栈，因此栈中的运算符（从栈底到栈顶）为+-\\*；此外，已入栈的界限符（此时还未消解，因此（也还在栈中，栈中的元素依次是+（-\\*。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.3.6_15_d4ffe49f5c",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.6",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2015统考真题】已知程序如下： int S(int n) { return (n<=0)?0:S(n-1)+n;} void main() { cout<<S (1) ;} 程序运行时使用栈来保存调用过程的信息，自栈底到栈顶保存的信息依次对应的是()。",
      "options": {
        "A": "main ( )→S (1)→S (0)",
        "B": "S(0) →S (1) →main ()",
        "C": "main () →S (0) →S (1)",
        "D": "S(1) →S (0) →main ( )"
      },
      "answer": [
        "A"
      ],
      "explanation": "递归调用函数时，在系统栈中保存的函数信息需满足先进后出的特点，依次调用了main(），S(1)，S(0)，所以栈底到栈顶的信息依次是main()，S(1)，S(0)。\n注意\n在递归中，系统为每一层的返回点、局部变量、传入实参等开辟了递归工作栈来存储。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.4.5_01_e635426526",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "对特殊矩阵采用压缩存储的主要目的是（）。",
      "options": {
        "A": "表达变得简单",
        "B": "对矩阵元素的存取变得简单",
        "C": "去掉矩阵中的多余元素",
        "D": "减少不必要的存储空间"
      },
      "answer": [
        "D"
      ],
      "explanation": "特殊矩阵中含有很多相同元素或零元素，所以可采用压缩存储，以节省存储空间。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.4.5_02_0bfc590af6",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "对n阶对称矩阵压缩存储时，需要表长为（）的顺序表。",
      "options": {
        "A": "n/2",
        "B": "$n { \\times } n / 2$",
        "C": "$n ( n + 1 ) / 2$",
        "D": "$n ( n - 1 ) / 2$"
      },
      "answer": [
        "C"
      ],
      "explanation": "只需存储其上三角或下三角部分（含对角线），元素个数为 $n + ( n - 1 ) + \\cdots + 1 = n ( n + 1 ) / 2$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.4.5_03_f2c3f7ee17",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "有一个 n×n的对称矩阵 A，将其下三角部分按行存放在一维数组 B 中，而 A[0][0]存放于B[0]中，则元素A[i][i]存放于B中的（）处。",
      "options": {
        "A": "(i + 3)i/2",
        "B": "(i + 1)i/2",
        "C": "$( 2 n - i + 1 ) i / 2$",
        "D": "$( 2 n - i - 1 ) i / 2$"
      },
      "answer": [
        "A"
      ],
      "explanation": "此题要注意3个细节：矩阵的最小下标为0；数组下标也是从0开始的；矩阵按行优先存在\n数组中。注意到此三点，答案不难得到为选项A。此外，本类题建议采用特殊值代入法求解，例如，A[1][1]对应的下标应为2，代入后只有选项A满足条件。\n## 技巧\n对于特殊三角矩阵压缩存储的题，心中应有“平移”搬动的思想，并结合草图，这样会比较形象，在计算时再注意矩阵和数组的起始下标，就不容易出错。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_3.4.5_04_91492d1d70",
      "book": "数据结构",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.4.5",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "在二维数组A中，假设每个数组元素的长度为3个存储单元，行下标i为0\\~8，列下标j为0\\~9，从首地址SA 开始连续存放。在这种情况下，元素A[8][5]的起始地址为（）。",
      "options": {
        "A": "$\\mathrm { S A } + 1 4 1$",
        "B": "SA + 144",
        "C": "SA+ 222",
        "D": "$\\mathrm { S A } + 2 5 5$"
      },
      "answer": [
        "D"
      ],
      "explanation": "二维数组计算地址（按行优先顺序）的公式为\n$$\n\\mathrm { L O C } ( i , j ) = \\mathrm { L O C } ( 0 , 0 ) + ( i m + j ) L\n$$\n其中， $\\mathrm { L O C } ( 0 , 0 ) = \\mathrm { S A }$ ，是数组存放的首地址；L=3是每个数组元素的长度： $m = 9 - 0 + 1 = 1 0$ 是数组的列数。因此有 $\\mathrm { L O C } ( 8 , 5 ) = \\mathrm { S A } + ( 8 \\times 1 0 + 5 ) \\times 3 = \\mathrm { S A } + 2 5 5$ ，所以选择选项D。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_4.2.4_01_32626838ce",
      "book": "数据结构",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.4",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "设有两个串 $\\mathrm { S } _ { 1 }$ 和 $\\mathrm { S } _ { 2 }$ ，求 $\\mathrm { S } _ { 2 }$ 在 $\\mathrm { S } _ { 1 }$ 中首次出现的位置的运算称为（）。",
      "options": {
        "A": "求子串",
        "B": "判断是否相等",
        "C": "模式匹配",
        "D": "连接"
      },
      "answer": [
        "C"
      ],
      "explanation": "求子串操作是从串S中截取第i个字符起长度为l的子串，选项A错误。选项B、D明显错误。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_4.2.4_02_86f9f080a1",
      "book": "数据结构",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.4",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "KMP算法的特点是在模式匹配时，指示主串的指针（）。",
      "options": {
        "A": "不会变大",
        "B": "不会变小",
        "C": "都有可能",
        "D": "无法判断"
      },
      "answer": [
        "B"
      ],
      "explanation": "在KMP算法的比较过程中，主串不会回溯，所以主串的指针不会变小。\n## 03. C、D\n尽管实际应用中，一般情况下简单的模式匹配算法的时间复杂度近似为 $O ( m + n )$ ，但它的理论时间复杂度还是O(mn)。KMP算法的时间复杂度为 $O ( m + n )$ o",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_4.2.4_05_cf3d094852",
      "book": "数据结构",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "在 KMP算法中，用 next数组存放模式串的部分匹配信息，当模式串位j与主串位i比较时，两个字符不相等，则i的位移方式是（）。",
      "options": {
        "A": "$\\mathtt { i } = \\mathtt { n e x t } [ \\mathrm { \\ i \\ j } ]$",
        "B": "i 不变",
        "C": "i=0",
        "D": "i=i+1"
      },
      "answer": [
        "B"
      ],
      "explanation": "在KMP算法中，当主串的第i 个字符和模式串的第j 个字符失配时，主串指针i 不回溯。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_4.2.4_06_2a531c6497",
      "book": "数据结构",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "串'ababaaababaa'的 next数组为（）。",
      "options": {
        "A": "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9",
        "B": "0, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2",
        "C": "0, 1, 1, 2, 3, 4, 2, 2, 3, 4, 5, 6",
        "D": "0, 1, 2, 3, 0, 1, 2, 3, 2, 2, 3, 4, 5"
      },
      "answer": [
        "C"
      ],
      "explanation": "本题采用先求串 $\\mathrm { S } { = } ^ { \\prime } \\mathrm { a b a b a a a b a b a a a }$ 的部分匹配值，再求next数组的方法。\n● 'a'的前后缀都为空，最长相等前后缀长度为0。\n• 'ab'的前缀{a}∩后缀 $\\{ \\mathrm { b } \\} = \\emptyset$ ，最长相等前后缀长度为0。\n• 'aba'的前缀{a,ab}∩后缀 $\\{ \\mathsf { a } , \\mathsf { b } \\mathsf { a } \\} = \\{ \\mathsf { a } \\}$ ，最长相等前后缀长度为1。\n• 'abab'的前缀{a,ab,aba}∩后缀{b,ab,bab}={ab}，最长相等前后缀长度为 2。\n依次求出的部分匹配值见下表第3行，将其整体右移一位，低位用-1填充，见下表第4行。\n选项中 next [1]等于 0，所以将 next 数组整体加 1。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_4.2.4_07_1c2ef0f8fe",
      "book": "数据结构",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "设主串 $\\mathtt { S } = \\mathtt { \\ \" } \\mathtt { a a b a a a a b a \\ \" }$ ，模式串 $\\mathrm { T } = \\prime \\mathsf { a a a b } ^ { \\prime }$ ，采用KMP算法进行模式匹配，到匹配成功时为止，在匹配过程中进行的单个字符间的比较次数是（）。",
      "options": {
        "A": "10",
        "B": "9",
        "C": "8",
        "D": "7"
      },
      "answer": [
        "B"
      ],
      "explanation": "假设位序从1开始，手工计算出T的next数组如下。\n采用 KMP 算法时：第一趟，经过 3 次比较后，发现 S[3]≠T [3]；第二趟，用 s[3]和 T[2]（next[3]=2）比较，不相等；第三趟，用s[3]和T[1]（next[2]=1）比较，不相等；第四趟，next[1]=0，因此开始用S[4]和T[1]比较，经过4次比较后，匹配成功。整个匹配过程如下。\n总比较次数为3+1+1+4=9。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_4.2.4_11_bcfb5322f9",
      "book": "数据结构",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.4",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2019统考真题】设主串 $\\mathtt { T } = \\mathtt { \\Omega } \\mathtt { a } \\mathtt { b } \\mathtt { a } \\mathtt { a } \\mathtt { b } \\mathtt { a } \\mathtt { a } \\mathtt { b } \\mathtt { c } \\mathtt { a } \\mathtt { b } \\mathtt { a } \\mathtt { a } \\mathtt { b } \\mathtt { c } \\mathtt { \\Omega } \\mathtt { a } \\mathtt { b } \\mathtt { c } \\mathtt { \\Omega } \\mathtt { \\Omega } \\mathtt { \\Omega }$ ，模式串 $\\mathrm { S } = { } ^ { \\prime } \\mathsf { a b a a b c } ^ { \\prime }$ ，采用 KMP算法进行模式匹配，到匹配成功时为止，在匹配过程中进行的单个字符间的比较次数是()。",
      "options": {
        "A": "9",
        "B": "10",
        "C": "12T",
        "D": "15"
      },
      "answer": [
        "B"
      ],
      "explanation": "假设位序从0开始，按照next数组生成算法，对于s有\n第一趟连续比较6次，在模式串的5号位和主串的5号位匹配失败，模式串的下一个比较位置为next「51，即下一次比较从模式串的2号位和主串的5号位开始，然后直到模式串的5号位和主串的8号位匹配，第二趟比较4次，匹配成功。单个字符的比较次数为10次。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.1.4_01_ad36fb81e5",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "树最适合用来表示（）的数据。",
      "options": {
        "A": "有序",
        "B": "无序",
        "C": "任意元素之间具有多种联系",
        "D": "元素之间具有分支层次关系"
      },
      "answer": [
        "D"
      ],
      "explanation": "树是一种分层结构，它特别适合组织那些具有分支层次关系的数据。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.1.4_02_d0007ba999",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "一棵有n个结点的树的所有结点的度数之和为（）。",
      "options": {
        "A": "n−1",
        "B": "n",
        "C": "n + 1",
        "D": "2n"
      },
      "answer": [
        "A"
      ],
      "explanation": "除根结点外，其他每个结点都是某个结点的孩子，因此树中所有结点的度数加1等于结点数，即所有结点的度数之和等于总结点数减1。这是一个重要的结论，做题时经常用到。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.1.4_03_2d104c5a4e",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "树的路径长度是从树根到每个结点的路径长度的（）。",
      "options": {
        "A": "总和",
        "B": "最小值",
        "C": "最大值",
        "D": "平均值"
      },
      "answer": [
        "A"
      ],
      "explanation": "树的路径长度是指树根到每个结点的路径长的总和，根到每个结点的路径长度的最大值应是树的高度减1。注意与哈夫曼树的带权路径长度相区别。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.1.4_05_2237b55e1f",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "度为4、高度为 h的树，（）。",
      "options": {
        "A": "至少有 h+ 3 个结点 2",
        "B": "至多有 4h-1 个结点",
        "C": "至多有 4h 个结点",
        "D": "至少有 h +4 个结点"
      },
      "answer": [
        "A"
      ],
      "explanation": "要使得度为4、高度为h的树的总结点数最少，需要满足以下两个条件： XIT\n①至少有一个结点有4个分支。\n②每层的结点数尽可能少。\n情况类似右图所示的树，结点数为 $h + 3$\n要使得度为4、高度为h的树的总结点数最多，应使每个非叶结点的度均为4，即满树，总结点数最多为 $1 + 4 + 4 ^ { 2 } + \\ldots + 4 ^ { h - 1 }$\n对于上面的两题，应画出草图来求解，就能一目了然。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.2.3_01_99e9821cbf",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于二叉树的说法中，正确的是（）。",
      "options": {
        "A": "度为 2 的有序树就是二叉树",
        "B": "含有n个结点的二叉树的高度为 $\\lfloor \\log _ { 2 } n \\rfloor + 1$",
        "C": "在完全二叉树中，若一个结点没有左孩子，则它必是叶结点",
        "D": "含有 n 个结点的完全二叉树的高度为「1og2n"
      },
      "answer": [
        "C"
      ],
      "explanation": "在二叉树中，若某个结点只有一个孩子，则这个孩子的左右次序是确定的：而在度为2的有序树中，若某个结点只有一个孩子，则这个孩子就无须区分其左右次序，选项A错误。选项B仅当是完全二叉树时才有意义，对于任意一棵二叉树，高度可能为 $\\lfloor \\log _ { 2 } n \\rfloor + 1 \\sim n$ ，在完全二叉树中，若有度为1的结点，则只可能有一个，且该结点只有左孩子而无右孩子，选项C正确。完全二叉树的高度为 $\\lceil \\log _ { 2 } ( n + 1 ) \\rceil$ 或 $\\lfloor \\log _ { 2 } n \\rfloor + 1$ ，也可通过举例n=4来排除，选项D错误。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.2.3_02_271f8b40c5",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "“二叉树为空”意味着二叉树（）。 直计",
      "options": {
        "A": "根结点没有子树",
        "B": "不存在1",
        "C": "没有结点",
        "D": "由一些没有赋值的空结点构成"
      },
      "answer": [
        "C"
      ],
      "explanation": "“二叉树为空”意味着二叉树中没有结点，但并不意味着二叉树不存在。注意，线性表可以是空表，树可以是空树，但图不能是空图（图中不能没有结点）。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.2.3_03_45fac94da4",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列关于完全二叉树的说法中，正确的是（）。 Y",
      "options": {
        "A": "在完全二叉树中，叶结点的双亲的左兄弟（若存在）一定不是叶结点",
        "B": "任何一棵二叉树中，叶结点数为度为2的结点数减1，即 $n _ { 0 } = n _ { 2 } - 1$",
        "C": "完全二叉树不适合顺序存储结构，只有满二叉树适合顺序存储结构",
        "D": "结点按完全二叉树层序编号的二叉树中，第i个结点的左孩子的编号为2i"
      },
      "answer": [
        "A"
      ],
      "explanation": "在完全二叉树中，叶结点的双亲的左兄弟的孩子一定在其前面（且一定存在），所以双亲的左兄弟（若存在）一定不是叶结点，选项A正确。 $n _ { 0 }$ 应等于 $n _ { 2 } + 1$ ，选项B错误。完全二叉树和满二叉树均可以采用顺序存储结构，选项C错误。第i个结点的左孩子不一定存在，选项D错误。\n选项B的这种通用公式适用于所有二叉树，我们应能立即联想到采用特殊值代入法验证，如画一个只含3个结点的满二叉树的草图来验证是否满足条件。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.2.3_04_cff936b423",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "具有10个叶结点的二叉树中有（）个度为2的结点。",
      "options": {
        "A": "8",
        "B": "9 Y",
        "C": "10",
        "D": "11"
      },
      "answer": [
        "B"
      ],
      "explanation": "由二叉树的性质 $n _ { 0 } = n _ { 2 } + 1$ ，得 $n _ { 2 } = n _ { 0 } - 1 = 1 0 - 1 = 9$\n【另解】画出草图，如下图所示。首先画出10个叶结点，然后每2个结点向上合并，构造一个新的度为2的分支结点，直到构成如下图所示的二叉树，其中度为2的分支结点数为9。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.2.3_06_b635dfc244",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "具有n个结点且高度为 n的二叉树的数目为（）。",
      "options": {
        "A": "log₂n",
        "B": "$n / 2$",
        "C": "n",
        "D": "$2 ^ { n - 1 }$"
      },
      "answer": [
        "D"
      ],
      "explanation": "除根结点外，在其余n-1个结点中，每个结点要么是其父结点的左孩子，要么是其父结点的右孩子，每个结点都有两种可能，n-1个结点共有 $2 ^ { n - 1 }$ 种不同的组合形态。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.2.3_07_a65e8eca69",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "假设一棵二叉树的结点数为50，则它的最小高度是（）。",
      "options": {
        "A": "4 入妆",
        "B": "5",
        "C": "6",
        "D": "7"
      },
      "answer": [
        "C"
      ],
      "explanation": "要求满足条件的树，分析可知当这50个结点构成一棵完全二叉树时高度最小， $h = \\lfloor \\log _ { 2 } n \\rfloor + 1 =$ $\\lfloor \\log _ { 2 } 5 0 \\rfloor + 1 = 6$\n【另解】第1层最多有1个结点，第2层最多有 $2 ^ { 1 }$ 个结点，第3层最多有 $2 ^ { 2 }$ 个结点，第4层最多有 $2 ^ { 3 }$ 个结点，以此类推，可以得到h最少为6。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.2.3_08_2fd2109fd9",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "设二叉树有 2n 个结点，且 $m < n$ ，则不可能存在（）的结点。",
      "options": {
        "A": "n 个度为 0",
        "B": "2m 个度为 0",
        "C": "2m 个度为 1",
        "D": "2m 个度为 2"
      },
      "answer": [
        "C"
      ],
      "explanation": "由二叉树的性质1可知 $n _ { 0 } = n _ { 2 } + 1$ ，结点总数 $: = 2 n = n _ { 0 } + n _ { 1 } + n _ { 2 } = n _ { 1 } + 2 n _ { 2 } + 1$ ，则 $n _ { 1 } = 2 ( n - n _ { 2 } ) - 1$ 所以 $n _ { 1 }$ 为奇数，说明该二叉树中不可能有2m个度为1的结点。 +2m2+",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.2.3_09_32e01f6d7c",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "一个具有1025 个结点的二叉树的高 h为（）。",
      "options": {
        "A": "11",
        "B": "10",
        "C": "11\\~1025",
        "D": "10\\~1024"
      },
      "answer": [
        "C"
      ],
      "explanation": "当二叉树为单支树时具有最大高度，即每层上只有一个结点，最大高度为1025。而当树为完全二叉树时，其高度最小，最小高度为 $\\left\\lfloor \\log _ { 2 } n \\right\\rfloor + 1 = 1 1$ I",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.2.3_10_9bdbd411af",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "设二叉树只有度为0和2的结点，其结点数为15，则该二叉树的最大深度为（）。",
      "options": {
        "A": "4",
        "B": "5",
        "C": "8",
        "D": "9"
      },
      "answer": [
        "C"
      ],
      "explanation": "建议画图，第一层有1个结点，其余h-1层各有2个结点，总结点数 $= 1 + 2 ( h - 1 ) = 1 5 , h = 8$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.2.3_11_eea5f8da8c",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "高度为h的完全二叉树最少有（）个结点。",
      "options": {
        "A": "$2 ^ { h }$",
        "B": "$2 ^ { h } + 1$",
        "C": "$2 ^ { h - 1 }$",
        "D": "$2 ^ { h } - 1$"
      },
      "answer": [
        "C"
      ],
      "explanation": "高度为h的完全二叉树中，第1层～第h-1层构成一个高度为h-1的满二叉树，结点数为$2 ^ { h - 1 } - 1$ 。第h层至少有一个结点，所以最少的结点数 $= ( 2 ^ { h - 1 } - 1 ) + 1 = 2 ^ { h - 1 }$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.2.3_12_d4a271ad49",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "已知一棵完全二叉树的第6层（设根为第1层）有8个叶结点，则完全二叉树的结点数最少是（）。",
      "options": {
        "A": "39",
        "B": "52",
        "C": "111",
        "D": "119"
      },
      "answer": [
        "A"
      ],
      "explanation": "第6层有叶结点说明完全二叉树的高度可能为6或7，显然树高为6时结点最少。若第6层上有8个叶结点，则前5层为满二叉树，所以完全二叉树的结点数最少为 $2 ^ { 5 } - 1 + 8 = 3 9$ 0",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.2.3_13_00b776f1d6",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "若一棵深度为6的完全二叉树的第6层有3个叶结点，则该二叉树共有（）个叶结点。",
      "options": {
        "A": "17",
        "B": "18",
        "C": "19",
        "D": "20"
      },
      "answer": [
        "A"
      ],
      "explanation": "深度为6的完全二叉树，第5层共有 $2 ^ { 4 } = 1 6$ 个结点。第6层最左边有3个叶结点，其对应的双亲结点为第5层最左边的两个结点，所以第5层剩余的结点均为叶结点，共有 $1 6 - 2 = 1 4$ 个，加上第6层的3个叶结点，共有17个叶结点。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_01_fe4db99d38",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "在下列关于二叉树遍历的说法中，正确的是（）。",
      "options": {
        "A": "若有一个结点是二叉树中某个子树的中序遍历结果序列的最后一个结点，则它一定是该子树的先序遍历结果序列的最后一个结点",
        "B": "若有一个结点是二叉树中某个子树的先序遍历结果序列的最后一个结点，则它一定是该子树的中序遍历结果序列的最后一个结点",
        "C": "若有一个叶结点是二叉树中某个子树的中序遍历结果序列的最后一个结点，则它一定是该子树的先序遍历结果序列的最后一个结点",
        "D": "若有一个叶结点是二叉树中某个子树的先序遍历结果序列的最后一个结点，则它一定是该子树的中序遍历结果序列的最后一个结点"
      },
      "answer": [
        "C"
      ],
      "explanation": "二叉树中序遍历的最后一个结点一定是从根开始沿右孩子指针链走到底的结点，设用p指示。若结点p不是叶结点（其左子树非空），则先序遍历的最后一个结点在它的左子树中，选项A、B错误；若结点p是叶结点，则先序与中序遍历的最后一个结点就是它，选项C正确。若中序遍历的最后一个结点p不是叶结点，它还有一个左孩子q，结点q是叶结点，那么结点g是先序遍历的最后一个结点，但不是中序遍历的最后一个结点，选项D错误。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_02_110c716d37",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "在任何一棵二叉树中，若结点a有左孩子b、右孩子c，则在结点的先序序列、中序序列、后序序列中，（）。 机",
      "options": {
        "A": "结点 b一定在结点a的前面",
        "B": "结点a一定在结点c的前面",
        "C": "结点 b一定在结点c的前面",
        "D": "结点 a一定在结点 b 的前面"
      },
      "answer": [
        "C"
      ],
      "explanation": "三种遍历方式中，都先遍历左子树，再遍历右子树，因此b一定在c的前面访问。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_03_f324008c5c",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "设n,m为一棵二叉树上的两个结点，在中序遍历时，n在m前的条件是（）。",
      "options": {
        "A": "n 在 m 右方",
        "B": "n 是 m 祖先",
        "C": "n 在 m 左方",
        "D": "n 是 m 子孙"
      },
      "answer": [
        "C"
      ],
      "explanation": "中序遍历时，先访问左子树，再访问根结点，后访问右子树。n在m前的3种可能性如右图所示，从中看出n 总是在 m的左方。\n【另解】设n和m的最近公共祖先p，则有以下可能：\n(a)\n(b)\n(c)\n情形1，m和n分别在p的左右（右左）分支上；情形2，m或n为p结点，另一结点在 $p$ 的分支上。只有n和 m分别处于p的左右分支上，m为祖先结点且 n位于 m的左分支，n为祖先结点且m位于n的右分支，符合题意。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_04_8e00756f86",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "设n,m为一棵二叉树上的两个结点，在后序遍历时，n在m前的充分条件是（）。",
      "options": {
        "A": "n 在 m 右方",
        "B": "n 是 m 祖先",
        "C": "n 在 m 左方",
        "D": "n 是 m 子孙"
      },
      "answer": [
        "D"
      ],
      "explanation": "后序遍历的顺序是LRN，若n在N的左子树上，m在N的右子树上，则在后序遍历的过程中n在m之前访问；若n是m的子孙，设m在N的位置，则n无论是在m的左子树还是在右子树，在后序遍历的过程中n都在m之前访问。其他都不可以。选项C要成立，就需加上两个结点位于同一层这个条件。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_05_9b6a30162d",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "某非空二叉树采用顺序存储结构，树中的结点信息按完全二叉树的层次序列依次存放在如下所示的一维数组中，则该二叉树的后序遍历序列为（）。",
      "options": {
        "A": "ghbefhca",
        "B": "gbdehcfa",
        "C": "gdbhefca",
        "D": "bgdehcfa"
      },
      "answer": [
        "C"
      ],
      "explanation": "在二叉树的数组存储结构中，下标为i的结点的左右孩子的下标分别为2i +1和2i +2（若存在），画出二叉树的形态如下右图所示，则后序遍历序列为 gdbhefca。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_06_2ae84279c0",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在二叉树的先序序列、中序序列和后序序列中，所有叶结点的先后顺序（）。",
      "options": {
        "A": "都不相同",
        "B": "完全相同",
        "C": "先序和中序相同，而与后序不同",
        "D": "中序和后序相同，而与先序不同"
      },
      "answer": [
        "B"
      ],
      "explanation": "三种遍历方式中，访问左右子树的先后顺序是不变的，只是访问根结点的顺序不同，因此叶结点的先后顺序完全相同。此外，读者可以采用特殊值法，画一个结点数为3的满二叉树，采用三种遍历方式来验证答案的正确性。 X",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_09_360366783a",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "先序序列为 A, B, C，后序序列为 C, B, A 的二叉树共有（）。",
      "options": {
        "A": "1 棵",
        "B": "2 棵",
        "C": "3 棵",
        "D": "4 棵"
      },
      "answer": [
        "D"
      ],
      "explanation": "先序为A、B、C的不同二叉树共有5种，其中后序为C、B、A的有4种（前4种），都是单支树，如下图所示。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_10_b98bbff640",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "一棵完全二叉树的后序遍历序列为CDBFGEA，则其先序遍历序列是（）。",
      "options": {
        "A": "CBDAFEG",
        "B": "ABECDFG",
        "C": "ABCDEFG",
        "D": "无法确定"
      },
      "answer": [
        "C"
      ],
      "explanation": "7个结点的完全二叉树是一棵3层的满二叉树，画出相应二叉树的树形，根据后序遍历序列填入相应的结点，得到相应的完全二叉树，求得其先序遍历序列为ABCDEFG。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_11_90f9d4a6cd",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 11,
      "type": "single_choice",
      "question": "设结点X和Y是二叉树中任意的两个结点。在该二叉树的先序遍历序列中X在Y之前，而在其后序遍历序列中X在Y之后，则X和Y的关系是（）。",
      "options": {
        "A": "X是Y的左兄弟",
        "B": "X是 Y的右兄弟",
        "C": "X是Y的祖先",
        "D": "X是Y的后裔"
      },
      "answer": [
        "C"
      ],
      "explanation": "二叉树的先序遍历为NLR，后序遍历为LRN。根据题意，在先序序列中X在Y之前，在后序序列中X在Y之后，若设X在根的位置，Y在其左子树或右子树中，即满足要求。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_12_a75516a369",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 12,
      "type": "single_choice",
      "question": "若二叉树中结点的先序序列是…a…b…，中序序列是…b…a…，则（）。",
      "options": {
        "A": "结点a和结点b分别在某结点的左子树和右子树中",
        "B": "结点 b 在结点 a 的右子树中",
        "C": "结点 b 在结点 a的左子树中 计",
        "D": "结点 a和结点b分别在某结点的两棵非空子树中"
      },
      "answer": [
        "C"
      ],
      "explanation": "先序序列是…a… b，因此a和b结点的3种情况如下图(a)～(c)所示。中序序列是…b…a…，因此a和 b结点的3种情况如下图(d)～(f)所示，相同部分是 b在a的左子树中。\n(a)\n(b)\n(c)\n(d)\n(e)\n(f)",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_13_516c7f2ffb",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "一棵二叉树的先序遍历序列为1234567，它的中序遍历序列可能是（）。",
      "options": {
        "A": "3124567",
        "B": "1234567",
        "C": "4135627",
        "D": "1463572"
      },
      "answer": [
        "B"
      ],
      "explanation": "解法1：由题可知，1为根结点，2为1的孩子。对于选项A，3应为1的左孩子，先序序列应为13…，不符题意。类似地，选项C也是错误的。对于选项B，2为1的右孩子，3为2的右孩子………满足题意。对于选项D，463572应为1的右子树，2为1的右孩子，46357为2的左子树，3为2的左孩子，46为3的左子树，57为3的右子树，先序序列4、6应相连，5、7应相连，不符题意。\n解法2：先序遍历时需要借助栈。二叉树的先序序列和中序序列的关系相当于以先序序列作为入栈次序，以中序序列作为出栈次序。题中以1234567入栈；对于选项A，第一个出栈的是3，所以1不可能在2之前出栈，错误。对于选项C，1不可能在3之前出栈，错误。对于选项D，6第三个出栈，此时栈顶元素是5，不是3，错误。选项B正确。 K\n解法3：因先序序列和中序序列可以确定一棵二叉树，所以可试着用题目中的序列构造出相应的二叉树，即可得知，只有选项B的序列可以构造出二叉树。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_14_8d49544e06",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "下列序列中，不能唯一地确定一棵二叉树的是（）。",
      "options": {
        "A": "层次序列和中序序列",
        "B": "先序序列和中序序列",
        "C": "后序序列和中序序列",
        "D": "先序序列和后序序列"
      },
      "answer": [
        "D"
      ],
      "explanation": "先序序列为NLR，后序序列为LRN，虽然可以唯一确定树的根结点，但无法划分左右子树。例如，先序序列为AB，后序序列为BA，则其对应的二叉树如右图所示。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_15_7af6d8cc6e",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "若一棵二叉树的中序序列和后序序列相同，则（）。",
      "options": {
        "A": "二叉树为空树或二叉树任一结点没有左子树",
        "B": "二叉树为空树或二叉树任一结点没有右子树",
        "C": "二叉树为空树或二叉树中每个结点的度为1",
        "D": "二叉树为空树或二叉树为满二叉树"
      },
      "answer": [
        "B"
      ],
      "explanation": "中序遍历是“左根右”，后序遍历是“左右根”，当任一结点没有右子树时，两种遍历都是“左根”。显然，当二叉树为空树或只有根结点时，其中序序列和后序序列也相同。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_16_1e5e958924",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "已知一棵二叉树的后序序列为DABEC，中序序列为DEBAC，则先序序列为（）。",
      "options": {
        "A": "ACBED",
        "B": "DECAB",
        "C": "DEABC",
        "D": "CEDBA"
      },
      "answer": [
        "D"
      ],
      "explanation": "根据后序序列与中序序列可构造出二叉树，如下图所示。由图可知先序序列为CEDBA。\n(a) 确定根结点\n(b)确定左子树根结点\n(c)确定剩下的子树",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_17_018197f0ef",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 17,
      "type": "single_choice",
      "question": "已知一棵二叉树的先序遍历结果为ABCDEF，中序遍历结果为 CBAEDF，则后序遍历的结果为（）。",
      "options": {
        "A": "CBEFDA",
        "B": "FEDCBA",
        "C": "CBEDFA",
        "D": "不确定"
      },
      "answer": [
        "A"
      ],
      "explanation": "对于这种遍历序列问题，先根据遍历的性质排除若干项，若还无法确定答案，则再根据遍历结果得到二叉树，找到对应遍历序列。例如，在本题中，已知先序和中序遍历结果，可知本树的根结点为A，左子树有C和B，其余为右子树，则后序遍历结果中，A一定在最后，并且C和B一定在前面，排除选项B和D。又因先序中有DEF，中序中有EDF，则D为这个子树的根，所以D在后序中排在EF之后。\n根据二叉树的递归定义，要确定二叉树，就要分别找到根结点和左右子树。因此，根据遍历结果，必定要确定根结点位置和如何划分左右子树，才可以确定最终的二叉树。因此，仅有先序和后序遍历不能唯一确定一棵二叉树，而二者之一加上中序遍历都可以唯一确定一棵二叉树。如在本题中，根据先序和中序遍历的结果确定二叉树的过程如下图所示。\n(a) 确定根结点\n(b) 确定左子树\n(c) 确定右子树",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_37_a999074aac",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 37,
      "type": "single_choice",
      "question": "【2014统考真题】若对右图所示的二叉树进行中序线索化，则结点X的左右线索指向的结点分别是（）。",
      "options": {
        "A": "$e , c$",
        "B": "$e , a$",
        "C": "$d , c$",
        "D": "$b , a$"
      },
      "answer": [
        "D"
      ],
      "explanation": "线索二叉树的线索实际上指向的是相应遍历序列特定结点的前驱结点和后继结点，所以先写出二叉树的中序遍历序列debxac，中序遍历中在x左边和右边的字符，就是它在中序线索化的左右线索，即 b, a。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_38_6dd5cc4b52",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 38,
      "type": "single_choice",
      "question": "【2015统考真题】先序序列为 $a , b , c , d$ 的不同二叉树的个数是（）。",
      "options": {
        "A": "13",
        "B": "14",
        "C": "15",
        "D": "16"
      },
      "answer": [
        "B"
      ],
      "explanation": "根据二叉树先序遍历和中序遍历的递归算法中递归工作栈的状态变化得出：先序序列和中序序列的关系相当于以先序序列为入栈次序，以中序序列为出栈次序。因为先序序列和中序序列可以唯一地确定一棵二叉树，所以题意相当于“以序列 $a , \\ b , \\ c , \\ d$ 为入栈次序，则出栈序列的个数为？”，对于n个不同元素入栈，出栈序列的个数为 $\\textstyle { \\frac { 1 } { n + 1 } } C _ { 2 n } ^ { n } = 1 4$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_39_aeda2c93bd",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 39,
      "type": "single_choice",
      "question": "【2017统考真题】某二叉树的树形如右图所示，其后序序列为 $e , a , c , b , d ,$ $g , f ,$ 树中与结点a同层的结点是（）。",
      "options": {
        "A": "c",
        "B": "d",
        "C": "f",
        "D": "g"
      },
      "answer": [
        "B"
      ],
      "explanation": "后序序列先访问左子树，接着访问右子树，最后访问父结点，递归进行。根结点左子树的叶结点首先被访问，它是e。接下来是它的父结点a，然后是a的父结点 $c _ { \\circ }$ 接着访问根结点的右子树。它的叶结点b首先被访问，然后是b的父结点 $^ { d , }$ 再后是 $d$ 的父结点 $^ { g , }$ 最后是根结点 $f ,$ 如右图所示。因此 $d$ 与a同层，选项B正确。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_40_4062c2226a",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 40,
      "type": "single_choice",
      "question": "【2017统考真题】要使一棵非空二叉树的先序序列与中序序列相同，其所有非叶结点须满足的条件是（）。",
      "options": {
        "A": "只有左子树",
        "B": "只有右子树",
        "C": "结点的度均为1",
        "D": "结点的度均为2"
      },
      "answer": [
        "B"
      ],
      "explanation": "先序序列先访问父结点，接着访问左子树，然后访问右子树。中序序列先访问左子树，接着访问父结点，然后访问右子树，递归进行。若所有非叶结点只有右子树，则先序序列和中序序列都先访问父结点，后访问右子树，递归进行。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.3.3_41_76d49e35c8",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.3",
      "section_title": "本节试题精选",
      "num": 41,
      "type": "single_choice",
      "question": "【2022统考真题】若结点p与q在二叉树T的中序遍历序列中相邻，且p在q之前，则下列p与q的关系中，不可能的是（）。I. q 是p的双亲 II. q 是p 的右孩子III. q是p的右兄弟 道计 IV. q 是p 的双亲的双亲",
      "options": {
        "A": "仅I",
        "B": "仅Ⅲ",
        "C": "仅Ⅱ、Ⅲ",
        "D": "仅II、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "对于此类题，每种情况只需举出一个反例即可。如图1所示，q是p的双亲，中序遍历序列为 $\\{ p , q \\}$ ，说法Ⅰ可能。如图2所示，q是p的右孩子，中序遍历序列为 $\\{ p , q \\}$ ，说法Ⅱ可能。如图4所示， $q$ 是 $p$ 的双亲的双亲，中序遍历序列为 $\\{ x , p , q \\}$ ，说法IV可能。如图3所示， $q$ 是 $p$ 的右兄弟，F是q和p的父结点，中序遍历要求先遍历左子树，再访问根结点，最后遍历右子树，因此一定先访问p，再访问F，最后访问q，p和q不可能相邻出现，说法Ⅲ不可能。\n图1\n图2\n图3\n图4",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.4.4_01_49a59dedba",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于树的说法中，正确的是（）。I. 对于有n个结点的二叉树，其高度为 $\\log _ { 2 } n$ Ⅱ. 完全二叉树中，若一个结点没有左孩子，则它必是叶结点Ⅲ. 高度为h（h>0）的完全二叉树对应的森林所含的树的个数一定是hIV. 一棵树中的叶子数一定等于与其对应的二叉树的叶子数",
      "options": {
        "A": "I和III",
        "B": "IV",
        "C": "I和Ⅱ",
        "D": "II"
      },
      "answer": [
        "D"
      ],
      "explanation": "若n个结点的二叉树是一棵单支树，则其高度为n。完全二叉树中最多存在一个度为1的结点且只有左孩子，若不存在左孩子，则一定也不存在右孩子，因此必是叶结点，说法Ⅱ正确。只有满二叉树才具有性质Ⅲ，如下图所示。\n(a) 满二叉树转化为对应的森林\n(b) 非满二叉树转化为对应的森林\n在树转换为二叉树时，若有几个叶结点具有共同的双亲，则转换成二叉树后只有一个叶结点（最右边的叶结点），如下图所示，说法IV错误。注意，若树中的任意两个叶结点都不存在相同的双亲，则树中的叶子数才有可能与其对应的二叉树中的叶子数相等。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.4.4_02_7d6971b7bf",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "利用二叉链表存储森林时，根结点的右指针是（）。",
      "options": {
        "A": "指向最左兄弟",
        "B": "指向最右兄弟",
        "C": "一定为空",
        "D": "不一定为空"
      },
      "answer": [
        "D"
      ],
      "explanation": "森林与二叉树具有对应关系，因此，我们存储森林时应先将森林转换成二叉树，转换的方法就是“左孩子右兄弟”，与树不同的是，若存在第二棵树，则二叉链表的根结点的右指针指向的是森林中的第二棵树的根结点。若此森林只有一棵树，则根结点的右指针为空。因此，右指针可能为空也可能不为空。 X",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.4.4_03_0891b2dc1e",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "设森林F中有3棵树，第1、2、3棵树的结点数分别为 $M _ { 1 } , M _ { 2 }$ 和 $M _ { 3 }$ ，与森林F对应的二叉树根结点的右子树上的结点数是（）。",
      "options": {
        "A": "$M _ { 1 }$",
        "B": "$M _ { 1 } + M _ { 2 }$",
        "C": "$M _ { 3 }$",
        "D": "$M _ { 2 } + M _ { 3 }$"
      },
      "answer": [
        "D"
      ],
      "explanation": "与树转换为二叉树不同，森林中的每棵树是独立的，因此先要将每棵树的根结点全部视为兄弟结点的关系。森林转换为二叉树后，树2作为树1的根结点的右子树，树3作为树2的根结点的右子树，因此森林F对应的二叉树根结点的右子树上的结点数是 $M _ { 2 } + M _ { 3 }$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.4.4_04_b3e855a9c2",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "设森林 F中有4 棵树，第1、2、3、4 棵树的结点数分别为a、b、c和 $^ { d , }$ 与森林F对应的二叉树的根结点的左子树上的结点数是（）。",
      "options": {
        "A": "a",
        "B": "$b + c + d$ X",
        "C": "a - 1",
        "D": "$a + b + c$"
      },
      "answer": [
        "C"
      ],
      "explanation": "森林转换为二叉树后，二叉树的根结点为第1棵树的根结点，二叉树的根结点的左子树包含第1棵树的所有孩子，因此森林F对应的二叉树的根结点的左子树上的结点数是a-1。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.4.4_05_9ce97c7a95",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.4.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "设森林 F对应的二叉树为 B，它有 m 个结点，B 的根为 p，p 的右子树结点数为 n，森林F中第一棵树的结点数是（）。",
      "options": {
        "A": "m−n",
        "B": "m-n−1",
        "C": "n+1",
        "D": "条件不足，无法确定"
      },
      "answer": [
        "A"
      ],
      "explanation": "森林转换成二叉树时采用孩子兄弟表示法，根结点及其左子树为森林中的第一棵树。右子树为其他剩余的树。所以，第一棵树的结点数为m-n。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.5.3_01_d049bb97ed",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "在有n个叶结点的哈夫曼树中，非叶结点的总数是（）。",
      "options": {
        "A": "n-1",
        "B": "n",
        "C": "2n-1",
        "D": "2n"
      },
      "answer": [
        "A"
      ],
      "explanation": "由哈夫曼树的构造过程可知，哈夫曼树中只有度为0和2的结点。在非空二叉树中，有 $n _ { 0 } =$ $n _ { 2 } + 1$ ，所以 $n _ { 2 } = n - 1$ 0\n【另解】n个结点构造哈夫曼树需要n-1次合并过程，每次合并新建一个分支结点，所以选择选项A。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_5.5.3_03_b8bb0c7de4",
      "book": "数据结构",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.5.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列编码中，（）不是前缀码。",
      "options": {
        "A": "{00, 01, 10, 11} 计",
        "B": "{0, 1, 00, 11}",
        "C": "{0, 10, 110, 111}",
        "D": "{10, 110, 1110, 1111}"
      },
      "answer": [
        "B"
      ],
      "explanation": "若没有一个编码是另一个编码的前缀，则称这样的编码为前缀编码。在选项B中，0是00的前缀，1是11的前缀。 XAN",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.1.2_01_f00a15f7a1",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "一个有n个顶点和n条边的无向图一定是（）。",
      "options": {
        "A": "连通的",
        "B": "不连通的",
        "C": "无环的",
        "D": "有环的"
      },
      "answer": [
        "D"
      ],
      "explanation": "若一个无向图有n个顶点和n-1条边，可以使它连通但没有环（生成树），但若再加一条边，在不考虑重边的情形下，则必然会构成环。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.1.2_02_f166bd5e82",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "若从无向图的任意顶点出发进行一次深度优先搜索即可访问所有顶点，则该图一定是（）。",
      "options": {
        "A": "强连通图",
        "B": "连通图",
        "C": "有回路",
        "D": "一棵树"
      },
      "answer": [
        "B"
      ],
      "explanation": "强连通图是有向图，与题意矛盾，选项A错误；对无向连通图做一次深度优先搜索，可以访问到该连通图的所有顶点，选项B正确：有回路的无向图不一定是连通图，因为回路不一定包含图的所有顶点，选项C错误；连通图可能是树，也可能存在环，选项D错误。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.1.2_03_2626b26505",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "以下关于图的叙述中，正确的是（）。",
      "options": {
        "A": "图与树的区别在于图的边数大于或等于顶点数",
        "B": "假设有图 $G = \\{ V , \\{ E \\} \\}$ ，顶点集 $V ^ { \\prime } \\subseteq V , E ^ { \\prime } \\subseteq E$ ，则V'和{E′}构成G的子图",
        "C": "无向图的连通分量是指无向图中的极大连通子图",
        "D": "图的遍历就是从图中某一顶点出发访遍图中其余顶点"
      },
      "answer": [
        "C"
      ],
      "explanation": "图与树的区别是逻辑上的区别，而不是边数的区别，图的边数也可能小于树的边数，选项A错误；若E中的边对应的顶点不是V的元素，则V和{E}无法构成图，选项B错误；无向图的极大连通子图称为连通分量，选项C正确；图的遍历要求每个顶点只能被访问一次，且若图非连通，则从某一顶点出发无法访问到其他全部顶点，选项D的说法不准确。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.1.2_05_5651df7a2e",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "一个有28条边的非连通无向图至少有（）个顶点。",
      "options": {
        "A": "7",
        "B": "8",
        "C": "9",
        "D": "10"
      },
      "answer": [
        "C"
      ],
      "explanation": "考查至少有多少个顶点的情形，我们考虑该非连通图最极端的情况，即它由一个完全图加一个独立的顶点构成，此时若再加一条边，则必然使图变成连通图。在 $2 8 = n ( n - 1 ) / 2 = 8 { \\times } 7 / 2$ 条边的完全无向图中，总共有8个顶点，再加上1个不连通的顶点，共9个顶点。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.1.2_06_c4fb9f2cde",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "对于一个有n个顶点的图：若是连通无向图，其边的个数至少为（）；若是强连通有向图，则其边的个数至少为（）。",
      "options": {
        "A": "n−1, n",
        "B": "n−1, n(n−1)",
        "C": "n, n",
        "D": "n, n(n − 1)"
      },
      "answer": [
        "A"
      ],
      "explanation": "对于连通无向图，边最少即构成一棵树的情形；对于强连通有向图，边最少即构成一个有向环的情形。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.1.2_10_ddad1f5603",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.2",
      "section_title": "本节试题精选",
      "num": 10,
      "type": "single_choice",
      "question": "设有无向图 G =(V, E)和 $G ^ { \\prime } = ( \\boldsymbol { V } , E ^ { \\prime } )$ ，若G'是G的生成树，则下列不正确的是（）。I. G'为 G的连通分量I. G'为 G的无环子图 计算机Ⅲ. G'为 G的极小连通子图且V = V",
      "options": {
        "A": "I、 II",
        "B": "只有Ⅲ",
        "C": "II、III",
        "D": "只有I"
      },
      "answer": [
        "D"
      ],
      "explanation": "一个连通图的生成树是一个极小连通子图，显然它是无环的，因此说法Ⅱ、Ⅲ正确。极大连通子图称为连通分量，G'连通但非连通分量。这里再补充一下“极大连通子图”：若图本来就是连通的，且每个子部分包含其本身的所有顶点和边，则它就是极大连通子图。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.2.6_02_0a87ea73c4",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "若图的邻接矩阵中主对角线上的元素皆为0，其余元素全为1，则该图一定（）。",
      "options": {
        "A": "是无向图",
        "B": "是有向图",
        "C": "是完全图",
        "D": "不是带权图"
      },
      "answer": [
        "C"
      ],
      "explanation": "除主对角线上的元素外，其余元素全为1，说明任意两个顶点之间都有边相连，因此该图一定是完全图。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.2.6_03_a8fd81a7c0",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "在含有n个顶点和e条边的无向图的邻接矩阵中，零元素的个数为（）。",
      "options": {
        "A": "e",
        "B": "$2 e$",
        "C": "$n ^ { 2 } - e$",
        "D": "$n ^ { 2 } - 2 e$"
      },
      "answer": [
        "D"
      ],
      "explanation": "在无向图的邻接矩阵中，矩阵大小为 $n ^ { 2 }$ ，非零元素的个数为2e，所以零元素的个数为$n ^ { 2 } - 2 e$ 。读者应掌握此题的变体，即当无向图变为有向图时，能够求出零的个数和非零的个数。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.2.6_04_c2c1bce412",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "带权有向图G用邻接矩阵存储，则 $\\boldsymbol { v } _ { i }$ 的入度等于邻接矩阵中（）。",
      "options": {
        "A": "第i行非∞的元素个数",
        "B": "第i列非∞的元素个数",
        "C": "第i行非∞且非0的元素个数",
        "D": "第i列非∞且非0的元素个数"
      },
      "answer": [
        "D"
      ],
      "explanation": "带权有向图的邻接矩阵中，0和∞表示的都不是有向边，而入度是由邻接矩阵的列中元素计算出来的；出度是由邻接矩阵的行中元素计算出来的。\n## 05. B、D\n有向图的入度是其第i列的非0元素之和，无向图的度是第i行或第i列的非0元素之和。\n## 06. B、B、D\n邻接矩阵的顶点数等于矩阵的行（列）数，有向图的边数等于矩阵中非零元素的个数，无向图的边数等于矩阵中非零元素个数的一半。\n## 注意\n本题中所给的矩阵为对称矩阵，若不是对称矩阵，则必然不可能是无向图。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.2.6_07_33fd4dd213",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "以下关于图的存储结构的叙述中，正确的是（）。",
      "options": {
        "A": "一个图的邻接矩阵表示唯一，邻接表表示唯一",
        "B": "一个图的邻接矩阵表示唯一，邻接表表示不唯一",
        "C": "一个图的邻接矩阵表示不唯一，邻接表表示唯一",
        "D": "一个图的邻接矩阵表示不唯一，邻接表表示不唯一"
      },
      "answer": [
        "B"
      ],
      "explanation": "邻接矩阵表示唯一是因为图中边的信息在矩阵中有确定的位置，邻接表不唯一是因为邻接表的建立取决于读入边的顺序和边表中的插入算法。 KNI",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.2.6_08_79a8be3f78",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.2.6",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "矩阵A是有向图G的邻接矩阵，若矩阵 $A ^ { 2 }$ 的某元素 $a _ { i , j } ^ { 2 } = 3$ ，则说明（）。",
      "options": {
        "A": "从顶点i到j存在3条长度为 2的路径",
        "B": "从顶点i到j存在3条长度不超过2的路径",
        "C": "从顶点i到j存在2条长度为3的路径",
        "D": "从顶点i到 j存在2条长度不超过3的路径"
      },
      "answer": [
        "A"
      ],
      "explanation": "设图G的邻接矩阵为A，Aⁿ的元素 $\\boldsymbol { a } _ { \\ i , j } ^ { n }$ 等于从顶点 i 到 j的长度为 n的路径的数目，因此$a _ { i , j } ^ { 2 } = 3$ 表示从顶点i到i存在3条长度为2的路径。该结论记住即可。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.3.4_01_cba8528725",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于广度优先算法的说法中，正确的是（）。 I. 当各边的权值相等时，广度优先算法可以解决单源最短路径问题Ⅱ. 当各边的权值不等时，广度优先算法可用来解决单源最短路径问题Ⅲ. 广度优先遍历算法类似于树中的后序遍历算法 IV. 实现图的广度优先算法时，使用的数据结构是队列",
      "options": {
        "A": "I、IV",
        "B": "II、III、IV",
        "C": "II、IV",
        "D": "I、III、IV"
      },
      "answer": [
        "A"
      ],
      "explanation": "广度优先搜索以起始顶点为中心，一层一层地向外层扩展遍历图的顶点，因此无法考虑到边权值，只适合求边权值相等的图的单源最短路径。广度优先搜索相当于树的层序遍历，说法Ⅲ错误。广度优先搜索需要用到队列，深度优先搜索需要用到栈，说法IV正确。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.3.4_02_fe29af333f",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于图的说法中，错误的是（）。I. 对一个无向图进行深度优先遍历时，得到的深度优先遍历序列是唯一的Ⅱ. 若有向图不存在回路，即使不用访问标志位，同一顶点也不会被访问两次Ⅲ. 采用深度优先遍历或拓扑排序算法可以判断一个有向图中是否有环（回路）IV. 对任何非强连通图必须2次或以上调用广度优先遍历算法才可访问所有的顶点",
      "options": {
        "A": "I、II、III",
        "B": "II、III",
        "C": "I、II",
        "D": "I、II、IV X7"
      },
      "answer": [
        "D"
      ],
      "explanation": "图的深度优先遍历序列通常是不唯一的，说法Ⅰ错误。图1是一个不存在回路的有向图，从顶点1开始执行广度优先遍历，若不设置访问标志位，则会重复访问顶点3，说法Ⅱ错误。深度优先遍历（见本节后面习题的解析）或拓扑排序算法可以判断有向图中是否有环，说法Ⅲ正确。图2是一个非强连通图，但从顶点1开始调用一次广度优先遍历算法就可访问所有顶点，说法IV错误。 X\n图1\n图2",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.3.4_03_e3989d4b9b",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "对于一个非连通无向图 G，采用深度优先遍历访问所有顶点，在 DFSTraverse 函数（见考点讲解DFS部分）中调用DFS的次数正好等于（）。 机",
      "options": {
        "A": "顶点数",
        "B": "边数",
        "C": "连通分量数",
        "D": "不确定"
      },
      "answer": [
        "C"
      ],
      "explanation": "DFS（或BFS）可用来计算无向图的连通分量数，因为一次遍历必然会将一个连通图中的所有顶点都访问到，所以计算图的连通分量数正好是DFSTraverse()中DFS被调用的次数。\n## 04.C、A、C、A\n深度优先遍历时，每个顶点表结点和每个边表结点均查找一次，每个顶点递归调用一次，需要借助一个递归工作栈；而广度优先遍历时，也是每个顶点表结点和每个边表结点均查找一次，需要借助一个辅助队列。因此，时间复杂度都为 $O ( n + e )$ ，空间复杂度都为 O(n)。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.3.4_05_ddf3940d48",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "图的广度优先遍历算法中使用队列作为其辅助数据结构，那么在算法执行过程中，每个顶点的入队次数最多为（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3 YTA",
        "D": "4"
      },
      "answer": [
        "A"
      ],
      "explanation": "在图的广度优先遍历算法中，每个顶点被访问后立即做访问标记并入队。若队列不空，则队首顶点出队，若该顶点的邻接顶点未被访问，则访问之，做访问标记并入队；若被访问过，则跳过，如此反复，直至队空。因此，在广度优先遍历过程中，每个顶点最多入队一次。\n## 06. A、A\n采用邻接矩阵表示时，查找一个顶点所有出边的时间复杂度为O(n)，共有n个顶点，所以时间复杂度均为 $O ( n ^ { 2 } )$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.3.4_08_e1003b62b9",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "如右图所示，在下面的5个序列中，符合深度优先遍历的序列个a数是（）。1. $a e b f d c$ 2. acfdeb 3. $a e d f c b$ 4. $a e f d b c$ 5. aecfdb b e c",
      "options": {
        "A": "5",
        "B": "4d f",
        "C": "3",
        "D": "2"
      },
      "answer": [
        "D"
      ],
      "explanation": "仅1和4正确。以2为例，遍历到c之后，与c邻接且未被访问的顶点为空集，所以应为a的邻接点b或e入栈。以3为例，因为遍历要按栈退回，所以是先b后c，而不能先c后b。\n## 09. B、D\n图的深度优先搜索类似于树的先根遍历，即先访问顶点，再递归向外层顶点遍历，都采用回溯算法。图的广度优先搜索类似于树的层序遍历，即一层一层向外层扩展遍历，都需要采用队列来辅助算法的实现。\n## 10. A、B\nDFS 序列产生的路径为<1, 2>, <2, 5>, <5, 4>, <3, 6>； BFS 序列产生的路径为<1, 2>, <1, 4>, <2,$5 \\mathrm { > } , < 3 , 6 \\mathrm { > }$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_6.3.4_13_33f1563ab0",
      "book": "数据结构",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.3.4",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "设无向图 $G = ( V , E )$ 和 $G ^ { \\prime } { = } \\left( V ^ { \\prime } , E ^ { \\prime } \\right)$ ，若G'是G的生成树，则下列说法错误的是（）。",
      "options": {
        "A": "G'为 G的子图",
        "B": "G'为 G 的连通分量",
        "C": "G'为 G的极小连通子图且 $V = V ^ { \\prime }$",
        "D": "G'是 G的一个无环子图"
      },
      "answer": [
        "B"
      ],
      "explanation": "连通分量是无向图的极大连通子图，其中极大的含义是将依附于连通分量中顶点的所有边都加上，所以连通分量中可能存在回路，这样就不是生成树了。\n## 注意\n极大连通子图是无向图（不一定连通）的连通分量，极小连通子图是连通无向图的生成树。极小和极大是在满足连通的前提下，针对边的数目而言的。极大连通子图包含连通分量的全部边；极小连通子图（生成树）包含连通图的全部顶点，且使其连通的边数最少。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.2.4_01_f1af3c9d14",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "顺序查找适合于存储结构为（）的线性表。",
      "options": {
        "A": "顺序存储结构或链式存储结构",
        "B": "散列存储结构",
        "C": "索引存储结构",
        "D": "压缩存储结构"
      },
      "answer": [
        "A"
      ],
      "explanation": "当无向连通图存在权值相同的多条边时，最小生成树可能是不唯一的；另外，这是一个无向连通图，因此最小生成树必定存在，从而选择选项A。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.2.4_02_4eedbedd8b",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "由n个数据元素组成的两个表：一个递增有序，一个无序。采用顺序查找算法，对有序表从头开始查找，发现当前元素已不小于待查元素时，停止查找，确定查找不成功，已知查找任意一个元素的概率是相同的，则在两种表中成功查找（）。",
      "options": {
        "A": "平均时间后者小",
        "B": "平均时间两者相同 算机孝",
        "C": "平均时间前者小",
        "D": "无法确定"
      },
      "answer": [
        "C"
      ],
      "explanation": "因为无向连通图的最小生成树不一定唯一，所以用不同算法生成的最小生成树可能不同，但当无向连通图的最小生成树唯一时，不同算法生成的最小生成树必定是相同的。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.2.4_03_f90d94425d",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "对长度为n的有序单链表，若查找每个元素的概率相等，则顺序查找表中任意一个元素的查找成功的平均查找长度为（）",
      "options": {
        "A": "$_ { n / 2 }$",
        "B": "$( n + 1 ) / 2$",
        "C": "(n−1)/2",
        "D": "$n / 4$"
      },
      "answer": [
        "A"
      ],
      "explanation": "最小生成树算法是基于贪心策略的，每次总是选取权值最小且满足条件的边，若各边权值不同，则每次选择的新顶点也是唯一的，因此最小生成树唯一，选项A正确。对于选项B，若无向图本身就是一棵树，则最小生成树就是它本身，这时就是唯一的。对于选项C，选取的n-1条边可能构成回路。对于选项D，含有n个顶点、n-1条边的子图可能构成回路，也可能不连通。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.2.4_04_6e27fb0131",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "对长度为3的顺序表进行查找，若查找第一个元素的概率为1/2，查找第二个元素的概率为1/3，查找第三个元素的概率为1/6，则查找任意一个元素的平均查找长度为（）。",
      "options": {
        "A": "5/3",
        "B": "2",
        "C": "7/3",
        "D": "4/3"
      },
      "answer": [
        "A"
      ],
      "explanation": "若图的边数小于n-1，则图不存在最小生成树；若无向连通图的边数等于n-1，则最小生成树唯一，即图本身，所以图的边数一定大于n-1，选项A正确。若最小生成树不唯一，则一定存在权值相等的边，但未必是权值最小的边，如右图所示，\n选项B错误。最小生成树可能不唯一，但代价一定相同，选项C错误。当图的各边的权值互不相等时，图的最小生成树是唯一的，选项D错误。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.2.4_05_cdd162b79b",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列关于二分查找的叙述中，正确的是（）。",
      "options": {
        "A": "表必须有序，表可以顺序方式存储，也可以链表方式存储",
        "B": "表必须有序且表中数据必须是整型、实型或字符型",
        "C": "表必须有序，而且只能从小到大排列",
        "D": "表必须有序，且表只能以顺序方式存储"
      },
      "answer": [
        "A"
      ],
      "explanation": "$U = \\{ 1 , 2 , 3 \\}$ $V - U = \\{ 4 , 5 , \\cdots \\}$ ，候选边只能是这两个顶点集之间的边，只有选项A符合题意。 育 K",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.2.4_06_f6e91c675e",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在一个顺序存储的有序线性表上查找一个数据时，既可以采用折半查找，也可以采用顺序查找，但前者比后者的查找速度（）。",
      "options": {
        "A": "必然快",
        "B": "取决于表是递增还是递减",
        "C": "在大部分情况下要快",
        "D": "必然不快"
      },
      "answer": [
        "C"
      ],
      "explanation": "若选取边(1,3)则会构成回路。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.2.4_07_06afb315df",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "折半查找过程所对应的判定树是一棵（）。",
      "options": {
        "A": "最小生成树",
        "B": "平衡二叉树",
        "C": "完全二叉树",
        "D": "满二叉树"
      },
      "answer": [
        "A"
      ],
      "explanation": "选项A正确，见严蔚敏老师的教材。Dijkstra算法适合求解有回路的带权图的最短路径，也可以求任意两个顶点的最短路径，不适合求带负权值的最短路径问题。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.2.4_09_3a2d419632",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "在有11个元素的有序表 $\\mathbb { A } \\left[ 1 , 2 , \\cdots , 1 1 \\right]$ 中进行折半查找 $( \\left\\lfloor \\ ( \\ \\mathtt { l o w } + \\mathtt { h i g h } ) / 2 \\right\\rfloor )$ 元素A[11]时，被比较的元素下标依次是（）。",
      "options": {
        "A": "6, 8, 10, 11",
        "B": "6, 9, 10, 11",
        "C": "6,7,9, 11",
        "D": "6, 8, 9, 11"
      },
      "answer": [
        "B"
      ],
      "explanation": "题目所描述的图 G 如下图所示。A, B, C,D 对应的路径长度分别为 18,13,15,24。应用Dijkstra算法不难求出最短路径为 $\\nu _ { 1 } { } \\nu _ { 3 } { } \\nu _ { 4 } { } \\nu _ { 6 } { } \\nu _ { 7 }$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.2.4_22_48650f8ed2",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 22,
      "type": "single_choice",
      "question": "【2016统考真题】在有n（n>1000）个元素的升序数组A中查找关键字x。查找算法的伪代码如下所示。k=0; while(k<n 且 A[k]<x) k=k+3; if(k<n 且 A[k]==x) 查找成功； 计else if(k-1<n 且 A[k-1]==x) 查找成功；else if(k-2<n 且 A[k-2]==x) 查找成功；else 查找失败； 本算法与折半查找算法相比，有可能具有更少比较次数的情形是（）。",
      "options": {
        "A": "当x不在数组中",
        "B": "当×接近数组开头处",
        "C": "当x接近数组结尾处",
        "D": "当x位于数组中间位置"
      },
      "answer": [
        "C"
      ],
      "explanation": "观察题图，从 $V _ { 0 }$ 到 $V _ { 8 }$ 的最长路径为 $V _ { 0 } { } V _ { 1 } { } V _ { 4 } { } V _ { 6 } { } V _ { 8 }$ ，长度为 $6 + 1 + 9 + 2 = 1 8$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.2.4_25_1f3d680e56",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.2.4",
      "section_title": "本节试题精选",
      "num": 25,
      "type": "single_choice",
      "question": "【2024统考真题】下列数据结构中，不适合直接使用折半查找的是（）。H I. 有序链表 Ⅱ. 无序数组 I. 有序静态链表 IV. 无序静态链表",
      "options": {
        "A": "仅I、ⅢI",
        "B": "仅II、IV",
        "C": "仅II、III、IV",
        "D": "I、II、III、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "若改变的是所有关键路径上的公共活动，则不一定会产生不同的关键路径（延长必然不会导致，只有缩短才有可能导致）。根据关键路径的定义，可知说法Ⅱ正确。关键路径是源点到终点的最长路径，只有所有关键路径的长度都缩短时，整个图的关键路径才能有效缩短，但也不能任意缩短，一旦缩短到一定程度，该关键活动就有可能变成非关键活动。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.4.3_01_3c3de95b0c",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "右图所示是一棵（）。 12 25",
      "options": {
        "A": "4阶B树",
        "B": "3阶B树",
        "C": "4 阶 B+树",
        "D": "无法确定 05 10 15 19 22 26 28"
      },
      "answer": [
        "C"
      ],
      "explanation": "二叉排序树插入新结点时不会引起树的分裂组合。对二叉排序树进行中序遍历可得到有序序列。当插入的关键字有序时，二叉排序树会形成一个长链，此时深度最大。在此种情况下进行查找，有可能需要比较每个结点的关键字，超过总结点数的1/2。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.4.3_02_902f6bc4fb",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于m阶B树的说法中，错误的是（）。",
      "options": {
        "A": "根结点至多有 m棵子树",
        "B": "所有叶结点都在同一层次上",
        "C": "非叶结点至少有m/2（m为偶数）或(m+1)/2（m为奇数）棵子树",
        "D": "根结点中的数据是有序的"
      },
      "answer": [
        "B"
      ],
      "explanation": "由二叉排序树的定义不难得出中序遍历二叉树得到的序列是一个有序序列。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.4.3_03_2d3e617509",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列关于高度为3的3阶B树的说法中，正确的是（）。I. 每个内部结点至少有两棵非空子树Ⅱ. 树中每个结点至多有2个关键字Ⅲ. 树中最多能存储26个关键字IV. 插入一个元素引起B树结点分裂后，树的高度变为4",
      "options": {
        "A": "I、II 1",
        "B": "I、II、III",
        "C": "III、IV",
        "D": "I、II、IV"
      },
      "answer": [
        "A"
      ],
      "explanation": "二叉排序树的查找路径是自顶向下的，其平均查找长度主要取决于树的高度。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.4.3_04_6dbe6e459f",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "在一棵m阶B树中做插入操作前，若一个结点中的关键字个数等于（），则插入操作后必须分裂成两个结点；在一棵m阶B树中做删除操作前，若一个结点中的关键字个数等于（），则删除操作后可能需要同它的左兄弟或右兄弟结点合并成一个结点。",
      "options": {
        "A": "$m , \\ \\lceil m / 2 \\rceil { - } 2$",
        "B": "$m - 1 , \\ \\lceil m / 2 \\rceil - 1$",
        "C": "$m + 1 , \\ \\lceil m / 2 \\rceil$",
        "D": "$m / 2 , \\ \\lceil m / 2 \\rceil + 1$"
      },
      "answer": [
        "B"
      ],
      "explanation": "在二叉排序树的存储结构中，每个结点由三部分构成，其中左（或右）指针指向比该结点的关键字值小（或大）的结点。关键字值最大的结点位于二叉排序树的最右位置，因此它的右指针一定为空（有可能不是叶结点）。还可用反证法，若右指针不为空，则右指针上的关键字肯定比原关键字大，所以原关键字结点一定不是值最大的，与条件矛盾，所以右指针一定为空。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.4.3_07_16b22516af",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "含有n个非叶结点的m阶B树中至少包含（）个关键字。",
      "options": {
        "A": "$n ( m + 1 )$",
        "B": "n",
        "C": "$n ( \\lceil m / 2 \\rceil - 1 )$",
        "D": "$( n - 1 ) ( \\lceil m / 2 \\rceil - 1 ) + 1$"
      },
      "answer": [
        "A"
      ],
      "explanation": "以第一个元素为根结点，依次将元素插入树，生成的二叉排序树如右图所示。进行查找时，先与根结点比较，然后根据比较结果，继续在左子树或右子树上进行查找。比较的结点依次为52,71,60。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.4.3_23_0f4a64105b",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2022统考真题】在下图所示的5阶B树T中，删除关键字260之后需要进行必要的调整，得到新的B树 $T _ { 1 \\mathrm { e } }$ 下列选项中，不可能是 $T _ { 1 }$ 根结点中关键字序列的是（）。",
      "options": {
        "A": "60,90,280",
        "B": "60,90, 350",
        "C": "60,85, 110, 350",
        "D": "60,90, 110, 350"
      },
      "answer": [
        "B"
      ],
      "explanation": "根据平衡二叉树的定义，任意结点的左右子树高度差的绝对值不超过1。而其余3个答案均可以找到不满足条件的结点。答题时可以把每个非叶结点的平衡因子都写出来。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.4.3_24_3f839905dc",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.4.3",
      "section_title": "本节试题精选",
      "num": 24,
      "type": "single_choice",
      "question": "【2023统考真题】下列关于非空B树的叙述中，正确的是（）。I. 插入操作可能增加树的高度 Ⅱ. 删除操作一定会导致叶结点的变化. 查找某关键字总是要查找到叶结点 IV. 插入的新关键字最终位于叶结点中",
      "options": {
        "A": "仅I",
        "B": "仅I、Ⅱ",
        "C": "仅ⅢI、IV",
        "D": "仅I、II、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "插入48以后，该二叉树根结点的平衡因子由-1变为-2，在最小不平衡子树根结点的右子树（R）的左子树（L）中插入新结点引起的不平衡属于RL型平衡旋转（先右旋后左旋）。\n调整后，关键字37所在结点的左右子结点中保存的关键字分别是24、53。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.5.5_01_8f82dc643c",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "只能在顺序存储结构上进行的查找方法是（）。",
      "options": {
        "A": "顺序查找法",
        "B": "折半查找法",
        "C": "树形查找法",
        "D": "散列查找法"
      },
      "answer": [
        "D"
      ],
      "explanation": "关键字数目比子树数目少1，首先可排除B+树。对于4阶B树，根结点至少有2棵子树（关键字数至少为1），其他非叶结点至少有 $\\lceil n / 2 \\rceil = 2$ 棵子树（关键字数至少为1）、至多有4棵子树（关键字数至多为3）。5阶B树和6阶B树的分析也类似。题目所示的B树，同时满足4阶B树、5阶B树和6阶B树的要求，因此不能确定是哪种类型的B树。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.5.5_02_ce21363830",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "散列查找一般适用于（）的情况下的查找。",
      "options": {
        "A": "查找表为链表",
        "B": "查找表为有序表",
        "C": "关键字集合比地址集合大得多",
        "D": "关键字集合与地址集合之间存在对应关系"
      },
      "answer": [
        "C"
      ],
      "explanation": "除根结点外的所有非叶结点至少有 $\\overline { { m / 2 } } ^ { - }$ 棵子树。对于根结点，最多有m棵子树，若其不是叶结点，则至少有2棵子树。 X",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.5.5_03_c6706d3c31",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列关于散列表的说法中，正确的是（）。I. 若散列表的填装因子α<1，则可避免碰撞的产生I. 散列查找中不需要任何关键字的比较Ⅲ.散列表在查找成功时平均查找长度仅与表长有关 计IV. 若在散列表中删除一个元素，不能简单地将该元素删除",
      "options": {
        "A": "I和 IV",
        "B": "II和III",
        "C": "III",
        "D": "IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "每个非根的内部结点必须至少有 $\\lceil m / 2 \\rceil$ 棵子树，而本题中的根结点不是叶结点，也至少要有两棵子树，说法Ⅰ正确。每个结点至多有 $m - 1 = 2$ 个关键字，说法Ⅱ正确。在高度为h的m阶B树中，关键字个数至多为 $( m - 1 ) ( 1 + m + m ^ { 2 } + \\cdots + m ^ { h - 1 } ) = m ^ { h } - 1$ ，代入 $m = 3 , h = 3$ ，即树中最多能存储26个关键字，说法Ⅲ正确。对于说法IV，插入一个元素引起B树结点分裂后，只要从根结点到该元素插入位置的路径上至少有一个结点未满，B树就不会长高，如图1所示；只有当结点的分裂传到根结点，并使根结点也分裂时，才会导致树高增1，如图2所示，说法IV错误。\n图1 结点分裂不导致树高增1（3阶B树）\n图2 结点分裂导致树高增1（3阶B树）",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.5.5_04_e8fec01d05",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "在开放定址法中散列到同一个地址而引起的“堆积”问题是由（）引起的。",
      "options": {
        "A": "同义词之间发生冲突",
        "B": "非同义词之间发生冲突 机",
        "C": "同义词之间或非同义词之间发生冲突",
        "D": "散列表“溢出”"
      },
      "answer": [
        "B"
      ],
      "explanation": "因为B树每个结点内的关键字个数最多为m-1，所以当关键字个数大于m-1时，则应该分裂。每个结点内的关键字个数至少为 $\\mathbf { \\hat { \\Pi } } _ { m / 2 } \\mathbf { \\hat { ] } } - 1$ 个，所以当关键字个数少于「m/2]-1时，则可能与其他结点合并（除非只有根结点）。若将本题题于改为B+树，请读者思考上述问题的解答。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.5.5_05_f7e0613d1e",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列关于散列冲突处理方法的说法中，正确的有（）。I. 采用平方探测法处理冲突时不易产生聚集Ⅱ. 采用线性探测法处理冲突时，所有同义词在散列表中一定相邻Ⅲ. 采用链地址法处理冲突时，若限定在链首插入，则插入任意一个元素的时间相同IV. 采用链地址法处理冲突易引起聚集现象",
      "options": {
        "A": "I和III",
        "B": "I、II和III",
        "C": "III 和 IV",
        "D": "I和IV"
      },
      "answer": [
        "A"
      ],
      "explanation": "B树的叶结点对应查找失败的情况，对有n个关键字的查找集合进行查找，失败的可能性有$n + 1$ 种。 WO V WIT\n## 06. B、D\n由m阶B树的性质可知，根结点至少有2棵子树；根结点外的所有非终端结点至少有m/2棵子树，结点数最少时，3阶B树形状至少类似于一棵满二叉树，即高度为5的B树至少有 $2 ^ { 5 } - 1 =$ 31个结点。因为每个结点最多有m棵子树，所以当结点数最多时，3阶B树形状类似于满三叉树，结点数为 $( 3 ^ { 5 } - 1 ) / 2 = 1 2 1$ （注意，这里求的是结点数而非关键字数，若求的是关键字数，则还应把每个结点中关键字数的上下界确定出来）。 X",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.5.5_07_2186348216",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "假定有K个关键字互为同义词，若用线性探测法把这K个关键字填入散列表，至少要进行（）次探测。",
      "options": {
        "A": "K-1",
        "B": "K",
        "C": "K+1",
        "D": "K(K + 1)/2"
      },
      "answer": [
        "D"
      ],
      "explanation": "除根结点外，m阶B树中的每个非叶结点至少有 $\\lceil { m / 2 } \\rceil _ { - 1 }$ 个关键字，根结点至少有一个关键字，所以总共包含的关键字最少个数 $= ( n - 1 ) ( \\lceil m / 2 \\rceil - 1 ) + 1$\n## 注意\n由以上题目可知B树和B+树的定义与性质尤为重要，需要熟练掌握。\n## 08. C、B\n5 阶B树中共有53个关键字，由最大高度公式 $H { \\leqslant } \\log _ { \\lceil m / 2 \\rceil } ( ( n + 1 ) / 2 ) + 1$ 得最大高度 $H { \\leqslant }$\n$\\log _ { 3 } [ ( 5 3 + 1 ) / 2 ] + 1 = 4$ ，即最大高度为4；由最小高度公式 $h \\{ \\mathrm { { > } l o g } _ { m } ( n + 1 )$ 得最小高度 $h { \\geqslant } \\log _ { 5 } 5 4 \\approx 2 . 5$ 从而最小高度为3。 KN\n## 09. A、D\n利用前面的公式即最小高度 $h \\mathcal { P } \\mathrm { 1 o g } _ { m } ( n + 1 )$ 和最大高度 $H { \\leqslant } \\log _ { \\lceil m / 2 \\rceil } [ ( n + 1 ) / 2 ] + 1$ ，易算出最大高度 $H { \\leqslant } \\log _ { 2 } [ ( 2 0 4 7 + 1 ) / 2 ] + 1 = 1 1$ ，最小高度 $h { \\geqslant } { \\log } _ { 3 } 2 0 4 8 = 6 . 9$ ，从而最小高度取7（注意，有些辅导书针对本题算出的高度要比这里给出的答案多1，因为它们在对B树的高度定义中，把最底层不包含任何关键字的叶结点也算进去了）。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.5.5_13_8debba1293",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 13,
      "type": "single_choice",
      "question": "若采用链地址法构造散列表，散列函数为H(key)=key mod17，则需（①）个链表。这些链的链首指针构成一个指针数组，数组的下标范围为（②）。①",
      "options": {
        "A": "17",
        "B": "13",
        "C": "16",
        "D": "任意 机 ② A. 0\\~17 B. 1\\~17 C. 0\\~16 D. 1\\~16"
      },
      "answer": [
        "C"
      ],
      "explanation": "在B树的查找操作中，若目标元素在某个内部结点中，则查找结束，不需要进入叶结点；查找失败时，叶结点是所有路径的终点，选项A、B正确。B+树中仅叶结点包含信息，非叶结点仅起到索引作用，查找成功时一定会找到相应的叶结点，所经过的路径长度都相等，选项C错误，选项D正确。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.5.5_14_1cf4298020",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 14,
      "type": "single_choice",
      "question": "设散列表长 m= 14，散列函数为 $H ( \\mathrm { k e y } ) = \\mathrm { k e y } \\% 1 1$ ，表中仅有4个结点 H(15)=4，H(38)=5，H(61)= 6，H(84)= 7，若采用线性探测法处理冲突，则关键字为49的结点地址是（）。",
      "options": {
        "A": "8",
        "B": "3",
        "C": "5 X",
        "D": "9"
      },
      "answer": [
        "D"
      ],
      "explanation": "m阶B树不要求将各叶结点之间用指针链接。选项D描述的实际上是B+树。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.5.5_15_b383e1a548",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 15,
      "type": "single_choice",
      "question": "现有长度为17、初始为空的散列表HT，散列函数 $H ( \\mathrm { k e y } ) = \\mathrm { k e y } \\% 1 7$ ，用线性探查法解决冲突。将关键字序列26,25,72,38,8,18,59依次插入HT后，查找59需探查（）次。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4N",
        "D": "5"
      },
      "answer": [
        "D"
      ],
      "explanation": "对于图中所示的3阶B树，被删关键字78所在的结点在删除前的关键字个数 $: = 1 = \\left\\lceil 3 / 2 \\right\\rceil - 1$ 且其左兄弟结点的关键字个数 $\\scriptstyle [ = 2 \\geqslant \\lceil 3 / 2 \\rceil$ ，属于“兄弟够借”的情况，因此要把该结点的左兄弟结点中的最大关键字上移到父结点中，同时把父结点中大于上移关键字的关键字下移到要删除关键字的结点中，这样就达到了新的平衡，如下图所示。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.5.5_16_2c66e98c15",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 16,
      "type": "single_choice",
      "question": "现有长度为17、初始为空的散列表HT，散列函数 $H ( \\mathrm { k e y } ) = \\mathrm { k e y } \\% 1 7$ ，用平方探测法解决冲突： $H _ { i } ( \\mathrm { k e y } ) = ( H ( \\mathrm { k e y } ) \\pm i ^ { 2 } ) \\% 1 7$ 。将关键字序列6,22,7,26,9,23依次插入HT后，则关键字23存放在散列表中的位置是（）。",
      "options": {
        "A": "0",
        "B": "2",
        "C": "6",
        "D": "15"
      },
      "answer": [
        "A"
      ],
      "explanation": "对于5阶B树，根结点的分支数最少为2（关键字数最少为1），其他非叶结点的分支数最少为 $\\lceil n / 2 \\rceil = 3$ （关键字数最少为2），因此关键字个数最少的情况如右图所示（叶结点不计入高度）。\n## 注意\n一般来说，对于某个具体的B树图形，并不能确定是几阶B树。对于本题所述的5阶B树，不要误认为：“存在至少有一个含关键字结点中的关键字达到4”才符合5阶B树的要求，因为5阶B树中各个结点包含的关键字个数最少为 $2 \\ ( \\lceil 5 / 2 \\rceil - 1 = 2 \\ )$ ，最多为4（5-1=4）。当5阶B树中各个结点包含的关键字个数为2时，也满足5阶B树的要求。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.5.5_18_a82cd54f1b",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 18,
      "type": "single_choice",
      "question": "【2011统考真题】为提高散列表的查找效率，可以采取的正确措施是（）。I. 增大装填（载）因子I. 设计冲突（碰撞）少的散列函数Ⅲ.处理冲突（碰撞）时避免产生聚集（堆积）现象",
      "options": {
        "A": "仅I",
        "B": "仅Ⅱ",
        "C": "仅I、Ⅱ",
        "D": "仅II、ⅢI"
      },
      "answer": [
        "A"
      ],
      "explanation": "B+树的所有叶结点中包含了全部的关键字信息，且叶结点本身依关键字从小到大顺序链接，因此可以进行顺序查找，而B树不支持顺序查找（只支持多路查找）。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_7.5.5_21_1482b264a2",
      "book": "数据结构",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.5.5",
      "section_title": "本节试题精选",
      "num": 21,
      "type": "single_choice",
      "question": "【2019统考真题】现有长度为11且初始为空的散列表HT，散列函数是 $H ( \\mathrm { k e y } ) = \\mathrm { k e y } \\% 7$ 采用线性探查（线性探测再散列）法解决冲突。将关键字序列87,40,30,6,11,22,98,20依次插入HT后，HT查找失败的平均查找长度是（）。",
      "options": {
        "A": "4",
        "B": "5.25 x",
        "C": "6",
        "D": "6.29"
      },
      "answer": [
        "B"
      ],
      "explanation": "一个4阶B树的任意非叶结点至多含有m-1=3个关键字，在关键字依次插入的过程中，会导致结点的不断分裂，插入过程如下图所示。得到根结点包含的关键字为6,9。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.1.2_01_d0f0b979fe",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.1.2",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下述排序算法中，不属于内部排序算法的是（）。",
      "options": {
        "A": "插入排序",
        "B": "选择排序",
        "C": "拓扑排序",
        "D": "冒泡排序"
      },
      "answer": [
        "B"
      ],
      "explanation": "顺序查找可以是顺序存储或链式存储：折半查找只能是顺序存储且要求关键字有序：树形查找法要求采用树的存储结构，既可以采用顺序存储也可以采用链式存储；散列查找中的链地址法解决冲突时，采用的是顺序存储与链式存储相结合的方式。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.2.4_01_4d2b72aa6a",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "对5个不同的数据元素进行直接插入排序，最多需要进行的比较次数是（）。注意，哨兵的比较不计入次数。",
      "options": {
        "A": "8",
        "B": "10",
        "C": "15",
        "D": "25"
      },
      "answer": [
        "C"
      ],
      "explanation": "拓扑排序是将有向图中所有结点排成一个线性序列，虽然也是在内存中进行的，但它不属于\n我们这里所提到的内部排序范畴，也不满足前面排序的定义。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.2.4_02_55ec7b70bf",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.2.4",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "在待排序的元素序列基本有序的前提下，效率最高的排序算法是（）。",
      "options": {
        "A": "直接插入排序",
        "B": "简单选择排序",
        "C": "快速排序",
        "D": "归并排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "注意，这里的绝对位置是指若在排序前元素R在位置i，则绝对位置就是i，即排序后R的位置不发生变化，显然选项B是不对的。选项C、D与题目要求无关。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.3.3_01_0493afbdd6",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "对n个不同的元素利用冒泡法从小到大排序，在（）情况下元素交换的次数最多。",
      "options": {
        "A": "从大到小排列好的",
        "B": "从小到大排列好的",
        "C": "元素无序",
        "D": "元素基本有序"
      },
      "answer": [
        "A"
      ],
      "explanation": "冒泡排序最少进行1趟冒泡，最多进行n-1趟冒泡。初始序列为逆序时，需进行n-1趟冒泡，并且元素交换的次数最多。初始序列为正序时，进行1趟冒泡（无交换）就可结束算法。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.3.3_02_c6f8bd9797",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "若用冒泡排序算法对序列{10,14,26,29,41,52}从大到小排序，则需进行（）次比较。",
      "options": {
        "A": "3",
        "B": "10",
        "C": "15",
        "D": "25"
      },
      "answer": [
        "C"
      ],
      "explanation": "冒泡排序始终在调整“逆序”，因此交换次数为排列中逆序的个数。对逆序序列进行冒泡排序，每个元素向后调整时都需要进行比较，因此共需要比较 $5 + 4 + 3 + 2 + 1 = 1 5$ 次。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.3.3_03_8531a746e1",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "用某种排序算法对线性表{25,84,21,47,15,27,68,35,20}进行排序时，元素序列的变化情况如下：1)25, 84, 21, 47, 15, 27, 68, 35, 202)20, 15, 21, 25, 47, 27, 68, 35, 84 教3)15, 20, 21, 25, 35, 27, 47, 68, 844)15, 20, 21, 25, 27, 35, 47, 68, 84则所采用的排序算法是（）。",
      "options": {
        "A": "选择排序",
        "B": "插入排序",
        "C": "2 路归并排序",
        "D": "快速排序"
      },
      "answer": [
        "D"
      ],
      "explanation": "选择排序在每趟结束后可以确定一个元素的最终位置，不对。插入排序，第i趟后前i+1个元素应该是有序的，不对。第二趟{20,15}和{21,25}是反序的，因此不是归并排序。快速排序每趟都将基准元素放在其最终位置，然后以它为基准将序列划分为两个子序列。观察题中的排序过程，可知是快速排序。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.3.3_04_5e69961df3",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "一组记录的关键码为(46,79,56,38,40,84)，则利用快速排序算法，以第一个记录为基准，从小到大得到的一次划分结果为（）。",
      "options": {
        "A": "(38, 40, 46, 56, 79, 84)",
        "B": "(40, 38, 46, 79, 56, 84)",
        "C": "(40, 38, 46, 56, 79, 84)",
        "D": "(40, 38, 46, 84, 56, 79)"
      },
      "answer": [
        "C"
      ],
      "explanation": "以46为基准元素，首先从后往前扫描比46小的元素，并与之进行交换，而后从前往后扫描比46大的元素并将46与该元素交换，得到(40.46.56.38.79.84)。此后，继续重复从后往前扫描与从前往后扫描的操作，直到46处于最终位置。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.3.3_08_e53998c112",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.3.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "对元素序列{8,9,10,4,5,6,20,1,2}采用冒泡排序（从后往前次序进行，要求升序），需要进行元素交换的趟数至少是（）（不考虑无元素交换的最后一趟）。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "5",
        "D": "8"
      },
      "answer": [
        "C"
      ],
      "explanation": "从后往前冒泡的过程为，第一趟{1,8,9,10,4,5,6,20,2}，第二趟{1,2,8,9,10,4,5,6,20}，第三趟{1,2,4,8,9,10,5, 6,20},第四趟{1, 2,4,5,8,9, 10,6,20},第五趟{1, 2, 4, 5,6,8,9, 10, 20},经过第五趟冒泡后，序列已经全局有序，因此选择选项C。实际每趟冒泡发生交换后可以判断是否会产生新的逆序对，若不会产生，则本趟冒泡之后序列全局有序，所以最少5趟即可。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.4.3_01_48fc7327bf",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "在以下排序算法中，每趟从待排序记录中选出关键字最小的记录，并将其与当前待排序部分的首记录交换，从而使有序区从前向后逐步扩大的是（）。 育",
      "options": {
        "A": "简单选择排序",
        "B": "冒泡排序",
        "C": "堆排序",
        "D": "直接插入排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "该算法描述的是简单选择排序：每趟从待排序部分顺序扫描，选出最小关键字记录，与首元素交换，使有序区从前向后扩展。这一过程强调“选择最小”和“一次定位”。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.4.3_02_0726222d9c",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "简单选择排序算法的比较次数和移动次数分别为（）。",
      "options": {
        "A": "O(n), O(log2n)",
        "B": "$O ( \\log _ { 2 } n ) , O ( n ^ { 2 } )$",
        "C": "$O ( n ^ { 2 } ) , O ( n )$",
        "D": "O(nlog2n), O(n)"
      },
      "answer": [
        "C"
      ],
      "explanation": "注意，读者应熟练掌握各种排序算法的思想、过程和特点。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.4.3_03_085ef0e43d",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "若只想得到100000个元素组成的序列中第10个最小元素之前的部分排序的序列，用（）方法最快。",
      "options": {
        "A": "冒泡排序",
        "B": "快速排序",
        "C": "归并排序",
        "D": "堆排序"
      },
      "answer": [
        "D"
      ],
      "explanation": "采用堆排序时，读入前10个元素，建立含10个元素的大根堆，而后依次扫描剩余元素，若大于堆顶，则舍弃，否则用该元素取代堆顶并重新调整堆，当元素全部扫描完毕，堆中保存的即是最小的10个元素。冒泡排序需要从后往前执行10趟冒泡才能得到10个最小的元素。两者的时间复杂度都和数据规模n线性相关，但显然堆排序的常系数更小。而快速排序、归并排序的每一趟都不能保证得到当前序列的最小值，也无法达到线性时间复杂度。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.4.3_05_e24e26ba73",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "在含有n个元素的小根堆中（下标从1开始），关键字最大的元素可能存储在（）位置。",
      "options": {
        "A": "n/2",
        "B": "n/2 + 2 K",
        "C": "1",
        "D": "n/2−1"
      },
      "answer": [
        "B"
      ],
      "explanation": "在小根堆中，关键字最大的元素一定存储在该堆所对应的完全二叉树的叶结点中（位于最底层或次底层）。又因为二叉树中的最后一个非叶结点存储在n/2中，所以关键字最大的元素的存储范围为 $n / 2 \\rfloor + 1 { \\sim } n _ { \\circ }$ 注意，读者可类比在大根堆中求关键字最小的元素的存储范围。\n## 06. C、C\n在向有n个元素的堆中插入一个新元素时，需要调用一个向上调整的算法，比较次数最多等于树的高度减1，因为树的高度为log₂n+1，所以堆的向上调整算法的比较次数最多等于log2n。此处需要注意，调整堆和建初始堆的时间复杂度是不一样的，读者可以仔细分析两个算法的具体执行过程。\n## 07. A、D\n建堆过程中，向下调整的时间与树高h有关，为O(h)。每次向下调整时，大部分结点的高度都较小。因此，可以证明在元素个数为n的序列上建堆，其时间复杂度为O(n)。无论是在最好情况下还是在最坏情况下，堆排序的时间复杂度均为O(nlog2n)。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.4.3_08_2bd70689b0",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.4.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列4种排序算法中，排序过程中的比较次数与序列初始状态无关的是（）。",
      "options": {
        "A": "简单选择排序",
        "B": "直接插入排序",
        "C": "快速排序",
        "D": "冒泡排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "简单选择排序的比较次数始终为n(n-1)/2，与序列状态无关。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.5.4_01_8db6de8926",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "以下排序算法中，（）在一趟结束后不一定能选出一个元素放在其最终位置上。",
      "options": {
        "A": "简单选择排序",
        "B": "冒泡排序",
        "C": "归并排序",
        "D": "堆排序"
      },
      "answer": [
        "C"
      ],
      "explanation": "我们知道插入排序不能保证在一趟排序结束后一定有元素放在最终位置上。事实上，归并排序也不能保证。例如，序列{6,5,7,8,2,1,4,3}进行一趟2路归并排序（从小到大）后为{5,6,7,8,1,2,3,4}，显然它们都未被放在最终位置上。 XTI",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.5.4_02_ae4fdbb209",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "以下排序算法中，（）不需要进行关键字的比较。",
      "options": {
        "A": "快速排序",
        "B": "归并排序",
        "C": "基数排序",
        "D": "堆排序"
      },
      "answer": [
        "C"
      ],
      "explanation": "基数排序是基于关键字各位的大小进行排序的，而不是基于关键字的比较进行的。\n## 03. D、C\n归并排序在平均情况和最坏情况下的空间复杂度都是O(n)，快速排序只在最坏情况下才是O(n)，平均情况是O(log2n)。因此，归并排序是本章所有排序算法中占用辅助空间最多的。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.5.4_08_f15edebfb5",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.5.4",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "用归并排序算法对序列{1,2,6,4,5,3,8,7}进行排序，共需要进行（）次比较。",
      "options": {
        "A": "12",
        "B": "13",
        "C": "14",
        "D": "15"
      },
      "answer": [
        "C"
      ],
      "explanation": "第一趟归并后{1,2}, {4,6}, {3,5}, {7,8}，共比较4 次；第二趟归并后{1,2,4,6}, {3,5,7,8}，共比较4次；第三趟归并后{1,2,3,4,5,6,7,8}，共比较6次。三趟归并共需进行14次比较。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.6.3_01_09c861b973",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "若要求排序是稳定的，且关键字为实数，则在下列排序算法中应选（）。",
      "options": {
        "A": "直接插入排序",
        "B": "选择排序",
        "C": "基数排序",
        "D": "快速排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "采用排除法。题目要求是稳定排序，因此排除选项B和D，又基数排序不能对float型和double型的实数进行排序，因此排除选项C。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.6.3_02_4c1b6cb03e",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "以下排序算法中时间复杂度为O(nlog2n)且稳定的是（）。",
      "options": {
        "A": "堆排序",
        "B": "快速排序",
        "C": "归并排序",
        "D": "直接插入排序"
      },
      "answer": [
        "C"
      ],
      "explanation": "堆排序和快速排序不是稳定排序算法，而直接插入排序算法的时间复杂度为 $O ( n ^ { 2 } )$ o",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.6.3_03_f6d0ea24d2",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "设被排序的结点序列共有n个结点，在该序列中的结点已十分接近有序的情况下，用直接插入排序、归并排序和快速排序对其进行排序，这些算法的时间复杂度应为（）。",
      "options": {
        "A": "O(n), O(n), O(n)",
        "B": "$O ( n ) , O ( n \\log _ { 2 } n ) , O ( n \\log _ { 2 } n )$",
        "C": "$O ( n ) , O ( n \\log _ { 2 } n ) , O ( n ^ { 2 } )$",
        "D": "$O ( n ^ { 2 } ) , O ( n \\log _ { 2 } n ) , O ( n ^ { 2 } )$"
      },
      "answer": [
        "C"
      ],
      "explanation": "各种排序算法的时间和空间复杂度、稳定性等见表8.1。\n04. ①I、IV、VI ② II、VI、VII ③ I、IV\n读者应能从算法的原理上理解算法的稳定性情况。堆排序和归并排序在最坏情况下的时间复杂度与最好情况下的时间复杂度是同一数量级的，都是O(nlog2n)。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.6.3_05_3105082cd6",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "就排序算法所用的辅助空间而言，堆排序、快速排序和归并排序的关系是（）。",
      "options": {
        "A": "堆排序<快速排序<归并排序",
        "B": "堆排序<归并排序<快速排序",
        "C": "堆排序>归并排序>快速排序",
        "D": "堆排序>快速排序>归并排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "堆排序的空间复杂度为O(1)，因此快速排序的空间复杂度在最坏情况下为O(n)，平均空间复杂度为 O(log2n)，归并排序的空间复杂度为O(n)。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.6.3_06_c56313063a",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "排序趟数与序列的初始状态无关的排序算法是（）。I. 快速排序 I. 简单选择排序 I. 冒泡排序 IV. 基数排序",
      "options": {
        "A": "I、III",
        "B": "II、IV",
        "C": "I、II、IV",
        "D": "I、 IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "冒泡排序的趟数为1～n-1，和序列初态有关。简单选择排序每趟都选出一个最小（或最大）的元素，排序趟数固定为n-1。基数排序每趟都要进行分配和收集，排序趟数固定为d。快速排序的趟数和枢轴的选取有关，即和划分是否对称有关，当划分的两个区域分别包含0个元素和n-1个元素时，这种最大限度的不对称性发生在序列初态基本有序时。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.6.3_07_95e1a0adaf",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 7,
      "type": "single_choice",
      "question": "排序趟数与序列的初始状态有关的排序算法是（）。",
      "options": {
        "A": "直接插入排序",
        "B": "2 路归并排序",
        "C": "快速排序",
        "D": "堆排序"
      },
      "answer": [
        "C"
      ],
      "explanation": "直接插入排序的趟数始终为n-1，而与序列的初始状态无关。2路归并排序的趟数始终为「1og₂n，而与序列的初始状态无关。堆排序每趟选出一个最大元素或最小元素，然后调整堆，初始建好堆后，需要n-1趟输出和调整堆的操作，而与序列的初始状态无关。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.6.3_08_30503da63e",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "对n个元素进行排序，其排序趟数肯定为n-1趟的排序算法是（）。",
      "options": {
        "A": "直接插入排序和快速排序",
        "B": "冒泡排序和快速排序",
        "C": "简单选择排序和直接插入排序",
        "D": "简单选择排序和冒泡排序"
      },
      "answer": [
        "C"
      ],
      "explanation": "简单选择排序和直接插入排序的趟数始终为n-1。冒泡排序的趟数为1～n-1，快速排序的趟数为log2n\\~n-1，具体取决于序列的初始状态（快速排序还取决于划分方法）。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.6.3_09_75c6df10b1",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "若序列的初始状态为{1,2,3,4,5,10,6,7,8,9}，要想使得排序过程中的元素比较次数最少，则应该采用（）方法。",
      "options": {
        "A": "插入排序",
        "B": "选择排序",
        "C": "希尔排序",
        "D": "冒泡排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "选择排序和序列初态无关，直接排除。初始序列基本有序时，插入排序比较次数较少。本题中，插入排序仅需比较n-1+4次，而希尔排序和冒泡排序的比较次数均远大于此。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.6.3_23_0d03c23aab",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.6.3",
      "section_title": "本节试题精选",
      "num": 23,
      "type": "single_choice",
      "question": "【2025统考真题】对含9个关键字的初始序列进行排序，若序列的变化情况如下表所示，则下列排序算法中，采用的是（）。",
      "options": {
        "A": "希尔排序",
        "B": "基数排序",
        "C": "归并排序",
        "D": "折半插入排序"
      },
      "answer": [
        "A"
      ],
      "explanation": "第1趟排序后，序列呈现出以间隔3分组的局部有序特征：下标模3相同的元素各自有序（如位置1,4,7上的25,10,15变为10,15,25；位置2,5,8上的40,20,35变为20,35,40），这是希尔排序在增量d=3时对各子序列进行插入排序的典型特征。第2趟进一步调整，符合增量缩小至1的结果。而其他三种排序方法均无法产生这种跨距离分组、局部有序的中间状态。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.7.6_01_6ca9497cc1",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 1,
      "type": "single_choice",
      "question": "外部排序和内部排序的主要区别是（）。",
      "options": {
        "A": "内部排序的数据量小，而外部排序的数据量大",
        "B": "内部排序不涉及内、外存数据交换，而外部排序涉及内、外存数据交换",
        "C": "内部排序的速度快，而外部排序的速度慢",
        "D": "内部排序所需的内存小，而外部排序所需的内存大 +算"
      },
      "answer": [
        "B"
      ],
      "explanation": "外部排序和内部排序最主要的区别是是否涉及内存、外存的数据交换。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.7.6_02_bb666d506f",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于外部排序的说法中，正确的是（）。",
      "options": {
        "A": "置换选择排序得到的初始归并段的长度一定相等",
        "B": "内外存交换数据的时间只占总排序时间的一小部分",
        "C": "败者树是一棵完全二叉树",
        "D": "外部排序不涉及对文件的读/写操作"
      },
      "answer": [
        "C"
      ],
      "explanation": "置换选择排序得到的是长度不一定相等的归并段，选项A错误。外部排序的主要时间消耗在内外存之间的数据交换上，选项B错误。败者树是一棵完全二叉树，选项C正确。外部排序包括两个阶段：生成初始归并段和对初始归并段进行归并，这两个阶段都涉及对文件的读/写操作，选项D错误。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.7.6_03_ab5b5508d0",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 3,
      "type": "single_choice",
      "question": "多路平衡归并的作用是（）。",
      "options": {
        "A": "减少归并趟数",
        "B": "减少初始归并段的个数",
        "C": "便于实现败者树",
        "D": "以上都对"
      },
      "answer": [
        "A"
      ],
      "explanation": "多路平衡归并的目的是减少归并趟数，因为当m个初始归并段采用k路平衡归并时，所需趟数 $\\boldsymbol { s } = \\lceil \\log _ { k } m \\rceil$ ，若不采用多路平衡归并，则其归并趟数大于s。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.7.6_04_f327bbb379",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 4,
      "type": "single_choice",
      "question": "设在磁盘上存放有375000个记录，进行5路平衡归并排序，内存工作区能容纳600个记录，为把所有记录排好序，需要进行（）趟归并排序。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "B"
      ],
      "explanation": "初始归并段的个数 $r = 3 7 5 0 0 0 / 6 0 0 = 6 2 5$ ，因此，归并趟数 $S = { \\lceil \\log _ { m } r \\rceil } = { \\lceil \\log _ { 5 } 6 2 5 \\rceil } = 4$ 。第一趟把625个归并段归并成625/5=125个；第二趟把125个归并段归并成125/5=25个；第三趟把25个归并段归并成25/5=5个；第四趟把5个归并段归并成5/5=1个。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.7.6_05_64873651d8",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 5,
      "type": "single_choice",
      "question": "在下列关于外部排序过程输入/输出缓冲区作用的叙述中，不正确的是（）。",
      "options": {
        "A": "暂存输入/输出记录",
        "B": "内部归并的工作区",
        "C": "产生初始归并段的工作区",
        "D": "传送用户界面的消息"
      },
      "answer": [
        "D"
      ],
      "explanation": "在外部排序过程中输入/输出缓冲区就是排序的内存工作区，例如进行m路平衡归并需要m个输入缓冲区和1个输出缓冲区，用以存放参加归并的和归并完成的记录。在产生初始归并段时也可用作内部排序的工作区。它没有传送用户界面的消息的任务。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.7.6_06_f105bb5a27",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 6,
      "type": "single_choice",
      "question": "若只需3趟排序就可完成64个元素的多路归并排序，则选取的归并路数最少是（）。",
      "options": {
        "A": "2 妆",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "C"
      ],
      "explanation": "归并趟数= 「1ogkn]，其中 k 表示归并的路数，n表示元素个数，当 k = 4、n = 64 时，归并趟数恰好等于3，因此选取的归并路数至少是4。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.7.6_08_9be8eccc22",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 8,
      "type": "single_choice",
      "question": "一个无序文件的n个记录采用置换选择排序产生 m 个有序段，则 m和 n的关系是（）。",
      "options": {
        "A": "m 与 n 成正比",
        "B": "$m = \\log _ { 2 } n$",
        "C": "m 与 n 成反比",
        "D": "以上都不对"
      },
      "answer": [
        "D"
      ],
      "explanation": "设内存工作区w=1，则文件{1,2,3,4,5}产生1个有序段，而文件{5,4,3,2,1}产生5个有序段，因此m与待排文件、内存工作区大小w和 n都有关，但不是选项A、B、C描述的直接关系。",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_数据结构_8.7.6_09_f97925cb76",
      "book": "数据结构",
      "chapter": 8,
      "chapter_title": "",
      "section": "8.7.6",
      "section_title": "本节试题精选",
      "num": 9,
      "type": "single_choice",
      "question": "在由k路归并构建的败者树中选取一个关键字最小的记录，则所需时间为（）。",
      "options": {
        "A": "O(1)",
        "B": "O(k)",
        "C": "O(log2k)",
        "D": "以上都不对"
      },
      "answer": [
        "C"
      ],
      "explanation": "在败者树中选取最小关键字的时间复杂度取决于败者树的高度，所需时间为 $O ( \\log _ { 2 } k )$",
      "source_file": "mineru/2027/2027数据结构_高清带书签版/2027数据结构_高清带书签版_p351-400.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_1.2.7_01_f2b1fac443",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.7",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "完整的计算机系统应包括（）。",
      "options": {
        "A": "运算器、存储器、控制器",
        "B": "外部设备和主机",
        "C": "主机和应用程序",
        "D": "配套的硬件设备和软件系统"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项A是计算机主机的组成部分，而选项B、C只涉及计算机系统的部分内容，都不完整。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_1.2.7_02_78f62db167",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.7",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "冯·诺依曼机的基本工作方式是（）。",
      "options": {
        "A": "控制流驱动方式",
        "B": "多指令多数据流方式",
        "C": "微程序控制方式",
        "D": "数据流驱动方式"
      },
      "answer": [
        "A"
      ],
      "explanation": "冯·诺依曼机的基本工作方式是控制流驱动方式，也就是按照指令的执行序列，依次读取指令，然后根据指令所含的控制信息，调用数据信息进行处理。因此，在执行程序的过程中，始终\n以控制流为驱动工作的因素，而数据流则是被动地被调用处理。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_1.3.2_01_c7590a4b92",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.2",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "关于CPU主频、CPI、MIPS、MFLOPS，说法正确的是（）。 育",
      "options": {
        "A": "CPU主频是指CPU执行指令的频率，CPI是执行一条指令平均使用的频率",
        "B": "CPI 是执行一条指令平均使用 CPU 时钟的个数，MIPS 描述一条 CPU 指令平均使用的 CPU 时钟周期数 K",
        "C": "MIPS是描述CPU执行指令的频率，MFLOPS 是计算机系统的浮点数指令",
        "D": "CPU主频是CPU使用的时钟频率，CPI是执行一条指令平均使用的CPU时钟周期数"
      },
      "answer": [
        "D"
      ],
      "explanation": "CPU 主频是指CPU使用的时钟频率，CPI 是执行一条指令平均使用的CPU时钟周期数。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_1.3.2_02_356ac000ff",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.2",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "在用于科学计算的计算机中，标志系统性能的最有用的参数是（）。",
      "options": {
        "A": "主时钟频率",
        "B": "主存容量",
        "C": "MFLOPS",
        "D": "MIPS"
      },
      "answer": [
        "C"
      ],
      "explanation": "MFLOPS是指每秒执行多少百万次浮点运算，该参数用来描述计算机的浮点运算性能，而用于科学计算的计算机主要评估浮点运算的性能。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_1.3.2_03_da50e12232",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.2",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "在计算机 M1 和计算机 M2 上分别运行功能完全相同的高级语言程序，程序在 M1 和",
      "options": {
        "A": "M1 和 M2 执行速度相等",
        "B": "M1 和 M2 中主频高的计算机执行速度快",
        "C": "M1 和 M2 中主频低的计算机执行速度快",
        "D": "无法确定哪台机器的执行速度快"
      },
      "answer": [
        "D"
      ],
      "explanation": "CPU执行时间=指令条数×CPI×时钟周期，程序在M1 和M2上的平均 CPI相等，但影响CPU执行时间的因素还有指令条数和时钟周期，此外相同的高级语言程序在不同计算机上编译生成的机器指令条数可能不同，因此无法确定哪台机器执行该类程序的速度快。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_1.3.2_04_6629ee6145",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.2",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "计算机中，CPU的CPI与下列（）因素无关。",
      "options": {
        "A": "时钟频率",
        "B": "系统结构",
        "C": "指令集",
        "D": "计算机组织"
      },
      "answer": [
        "A"
      ],
      "explanation": "CPI是执行一条指令所需的时钟周期数，系统结构、指令集、计算机组织都会影响CPI，而时钟频率并不会影响CPI，但可加快指令的执行速度。例如，执行一条指令需要10个时钟周期，则一台主频为1GHz的 CPU，执行这条指令要比一台主频为100MHz的CPU快。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_1.3.2_06_b716375c84",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.2",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "机器A的主频为 800MHz，某程序在机器A上运行需要12s。现在硬件设计人员想设计机器B，希望该程序在机器B上的运行时间能缩短为8s，使用新技术后可使机器B的主频大幅度提高，但在机器B上运行该程序所需的时钟周期数为在机器A上的1.5倍，则 王机器B的主频至少应为（）。",
      "options": {
        "A": "800MHz",
        "B": "1.2GHz",
        "C": "1.5GHz",
        "D": "1.8GHz"
      },
      "answer": [
        "D"
      ],
      "explanation": "该程序在机器A上需要的时钟周期数为 $1 2 \\times 8 0 0 \\mathrm { M } = 9 6 0 0 \\mathrm { M }$ ，因为在机器B上运行该程序需的时钟周期数为在机器A上的1.5倍，故在机器B上需要的时钟周期数为 $9 6 0 0 \\mathbf { M } { \\times } 1 . 5 = 1 4 4 0 0 \\mathbf { M } =$ 14.4G，要求运行时间为8s，故机器B的时钟频率为 $1 4 . 4 \\mathrm { G } \\div 8 = 1 . 8 \\mathrm { G H z }$ o",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_1.3.2_07_cac009d651",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.2",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列可用于评价计算机系统性能的指标是（）。I. MIPS II. IPC III. CPI IV. 字长",
      "options": {
        "A": "I、III",
        "B": "I、III 和IV",
        "C": "I、II和III",
        "D": "全部"
      },
      "answer": [
        "D"
      ],
      "explanation": "显然，MIPS、CPI、字长都是评价计算机系统性能的指标。IPC表示每个时钟周期运行多少条指令，它是CPI的倒数。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_1.3.2_08_d31ea69f0d",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.2",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "计算机的机器字长与下列（）指标最密切相关。",
      "options": {
        "A": "运算速度",
        "B": "存取速度",
        "C": "内存容量",
        "D": "运算精度"
      },
      "answer": [
        "D"
      ],
      "explanation": "机器字长越长，数据的位数越多，定点数或浮点数所表示及运算的精度就越高，选项D正确。机器字长与运算速度的关系不大，机器字长与存取速度和内存容量基本没有关系。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_1.3.2_09_f8202c8533",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.2",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "假定编译器对高级语言的某条语句可以编译生成两种不同的指令序列，",
      "options": {
        "A": "B和C三类指令的CPI和两种不同序列所含的三类指令条数如下表所示，两个指令序列都在时钟周期为2ns的机器上运行，则下列结论中正确的是（）。 A. 序列一的 MIPS 数比序列二多 50，序列一的执行速度比序列二快10ns",
        "B": "序列一的 MIPS 数比序列二多 50，序列二的执行速度比序列一快 10ns",
        "C": "序列二的MIPS 数比序列一多 50，序列一的执行速度比序列二快 10ns",
        "D": "序列二的 MIPS 数比序列一多 50，序列二的执行速度比序列一快10ns"
      },
      "answer": [
        "D"
      ],
      "explanation": "MIPS = 主频 $- ( \\mathrm { C P I } \\times 1 0 ^ { 6 } )$ ，主频 = 1/时钟周期 $= 1 / 2 \\mathrm { n s } = 5 0 0 \\mathrm { M H z } ,$ 序列一的 $\\mathrm { C P I } = ( 1 { \\times } 1 + 1 { \\times } 2 + 4 { \\times } 3 ) { \\div }$ $6 = 1 5 \\div 6 = 2 . 5$ ，序列二的 $\\mathrm { C P I } = ( 2 { \\times } 1 + 1 { \\times } 2 + 2 { \\times } 3 ) { \\div } 5 = 1 0 { \\div } 5 = 2$ ，故序列一的 $\\mathrm { M I P S } = 5 0 0 { \\times } 1 0 ^ { 6 } \\div ( 2 . 5 { \\times } 1 0 ^ { 6 } ) =$ 200，序列二的 $\\mathrm { M I P S } = 5 0 0 { \\times } 1 0 ^ { 6 } \\div ( 2 { \\times } 1 0 ^ { 6 } ) = 2 5 0$ 。CPU 执行时间 = 指令条数×CPI×时钟周期 = 程序的时钟周期数×时钟周期，序列一所需的时钟周期数是15，序列二所需的时钟周期数是10，所以序列一的执行时间为 $1 5 { \\times } 2 \\mathrm { n s } = 3 0 \\mathrm { n s }$ ，序列二的执行时间为 $1 0 { \\times } 2 \\mathrm { n s } = 2 0 \\mathrm { n s }$ 0",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_1.3.2_10_b13f5d2320",
      "book": "计算机组成原理",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.2",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "用一台40MHz的CPU执行标准测试程序，共包含100条指令，它所包含的指令混合比和不同指令的CPI见下表。该段程序的平均CPI和程序的执行时间分别为（）。",
      "options": {
        "A": "$2 . 2 6 , 5 . 6 \\times 1 0 ^ { - 8 } \\mathrm { s }$",
        "B": "$2 . 2 6 , 5 . 6 { \\times } 1 0 ^ { - 6 } \\mathrm { s }$",
        "C": "$2 . 2 4 , 5 . 6 { \\times } 1 0 ^ { - 6 } { \\mathrm { s } }$",
        "D": "$2 . 2 4 , 5 . 6 \\times 1 0 ^ { - 8 } \\mathrm { s }$"
      },
      "answer": [
        "C"
      ],
      "explanation": "标准测试程序共包含4种指令，CPI是这4种指令的数学期望，平均 $\\mathrm { C P I } = 1 { \\times } 6 0 \\% + 2 { \\times } 1 8 \\% +$ $4 { \\times } 1 2 \\% + 8 { \\times } 1 0 \\% = 2 . 2 4$ 。程序的执行时间 $T = \\mathrm { C P I } { \\times } \\mathrm { T } ~ \\mathrm { I C } { \\times } I ,$ ，其中T\\_IC是一个时钟周期（它是主频f的倒数），I是指令条数，因此 $T = \\mathrm { C P I } { \\times } \\mathrm { T } _ { - } \\mathrm { I C } { \\times } I = \\mathrm { C P I } { \\times } ( 1 / f ) { \\times } I = 5 . 6 { \\times } 1 0 ^ { - 6 } \\mathrm { s }$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_02_eb46626a8a",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "一个16位无符号二进制数的表示范围是（）。",
      "options": {
        "A": "0\\~65536",
        "B": "0\\~65535",
        "C": "-32768\\~32767",
        "D": "-32768\\~32768"
      },
      "answer": [
        "B"
      ],
      "explanation": "一个16位无符号二进制数的表示范围是 $0 \\sim 2 ^ { 1 6 } - 1$ ，即0～65535。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_03_804a813589",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列说法有误的是（）。",
      "options": {
        "A": "任何二进制整数都可以用十进制表示",
        "B": "任何二进制小数都可以用十进制表示",
        "C": "任何十进制整数都可以用二进制表示",
        "D": "任何十进制小数都可以用二进制表示"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项A、B、C明显正确，二进制整数和十进制整数可以相互转换，仅仅是每位的位权不同而已。而二进制数的小数位只能表示1/2,1/4,1/8,…,1/2\"，因此无法表示所有的十进制小数，选项D错误。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_04_a0b813967d",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "对真值0表示形式唯一的机器数是（）。",
      "options": {
        "A": "原码",
        "B": "补码和移码",
        "C": "反码",
        "D": "以上都不对"
      },
      "answer": [
        "B"
      ],
      "explanation": "假设位数为5位（含1位符号位）， $[ + 0 ] _ { \\vert \\ast } = 0 0 0 0 0 , [ - 0 ] _ { \\vert \\ast } = 1 0 0 0 0 , [ + 0 ] _ { \\vert \\ast } = 0 0 0 0 0 , [ - 0 ] _ { \\vert \\ast } = 1 1 1 1 1$ $[ + 0 ] _ { * * } = [ - 0 ] _ { * * } = 0 0 0 0 0 , [ + 0 ] _ { * * } = [ - 0 ] _ { * * } = 1 0 0 0 0$ 。可知，0的补码和移码的表示是唯一的。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_05_d3684a4e5b",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "若[X]补=1.1101010，则[X]原=（）。",
      "options": {
        "A": "1.0010101",
        "B": "1.0010110",
        "C": "0.0010110",
        "D": "0.1101010"
      },
      "answer": [
        "B"
      ],
      "explanation": "若X为负数，则其补码转换为原码的规则是“符号位不变，数值位取反，末位加 $1 ^ { \\prime \\prime }$ ，即 $[ X ] _ { \\mathbb { R } } =$ $0 0 1 0 1 0 1 + 1 = 0 0 1 0 1 1 0$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_14_aa045c7b36",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 14,
      "type": "single_choice",
      "question": "假定一个十进制数为-66，按补码形式存放在一个8位寄存器中，该寄存器的内容用十六进制表示为（）。 草机",
      "options": {
        "A": "C2H",
        "B": "BEH",
        "C": "BDH",
        "D": "42HX"
      },
      "answer": [
        "B"
      ],
      "explanation": "x = -66 用二进制数表示， $[ x ] _ { \\ast } = 1 1 0 0 0 0 1 0$ ，则有 $[ x ] _ { * * } = 1 0 1 1 1 1 1 0 = \\mathrm { B E H }$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_15_345b55faf7",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 15,
      "type": "single_choice",
      "question": "设机器数采用补码表示（含1位符号位），若寄存器内容为9BH，则对应的十进制数为道",
      "options": {
        "A": "-27",
        "B": "-97",
        "C": "-101",
        "D": "155"
      },
      "answer": [
        "C"
      ],
      "explanation": "$9 \\mathrm { B H } = ( 1 0 0 1 ~ 1 0 1 1 ) _ { 2 }$ ，最高位的1表示负数，所以其真值为 $( 1 1 1 0 0 1 0 1 ) _ { 2 } = - ( 6 4 + 3 2 + 4 + 1 ) = - 1 0 1$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_16_0774a43cdd",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 16,
      "type": "single_choice",
      "question": "若寄存器内容为10000000，若它等于-0，则为（）。 1",
      "options": {
        "A": "原码",
        "B": "补码",
        "C": "反码",
        "D": "移码"
      },
      "answer": [
        "A"
      ],
      "explanation": "值等于-0说明只可能是原码或反码(因为补码和移码表示0时是唯一的，没有+0和-0之分)，$[ - 0 ] _ { \\vert \\Xi \\vert } = 1 0 0 0 0 0 0 0 , [ - 0 ] _ { \\vert \\Xi \\vert } = 1 1 1 1 1 1 1 1$ o",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_17_48d83edbb9",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 17,
      "type": "single_choice",
      "question": "若寄存器内容为11111111，若它等于+127，则为（）。",
      "options": {
        "A": "反码",
        "B": "补码",
        "C": "原码",
        "D": "移码"
      },
      "answer": [
        "D"
      ],
      "explanation": "这里寄存器长度为8， $[ + 1 2 7 ] _ { \\scriptscriptstyle { \\mathbb { R } } } = [ + 1 2 7 ] _ { \\scriptscriptstyle { \\mathbb { R } } } = [ + 1 2 7 ] _ { \\scriptscriptstyle { \\mathscr { U } } } = 0 1 1 1 1 1 1 1$ ，又知同一数值的移码和补码除最高位相反外，其他各位相同，则 $[ + 1 2 7 ] _ { \\ast } = 1 1 1 1 1 1 1 1$ 或 $[ + 1 2 7 ] _ { \\mathfrak { W } } = 2 ^ { 7 } + 0 1 1 1 1 1 1 1 1 = 1 1 1 1 1 1 1 1 1 .$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_18_e9513ae9a5",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 18,
      "type": "single_choice",
      "question": "若寄存器内容为11111111，若它等于-1，则为（）。",
      "options": {
        "A": "原码",
        "B": "补码",
        "C": "反码",
        "D": "移码"
      },
      "answer": [
        "B"
      ],
      "explanation": "这里寄存器长度为8， $[ - 1 ] _ { * * } = [ 1 0 0 0 0 0 0 1 ] _ { * * } = 1 1 1 1 1 1 1 1 1$ 0",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_19_f9eb83b42e",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 19,
      "type": "single_choice",
      "question": "若寄存器内容为00000000，若它等于-128，则为（）。",
      "options": {
        "A": "原码",
        "B": "补码",
        "C": "反码",
        "D": "移码"
      },
      "answer": [
        "D"
      ],
      "explanation": "这里寄存器长度为8， $[ - 1 2 8 ] _ { \\mathfrak { W } } = 2 ^ { 7 } + ( - 1 0 0 0 0 0 0 0 0 ) = 0 0 0 0 0 0 0 \\circ$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_20_5ae76ef2aa",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 20,
      "type": "single_choice",
      "question": "若二进制定点小数真值是-0.1101，机器表示为1.0010，则为（）。",
      "options": {
        "A": "原码",
        "B": "补码",
        "C": "反码",
        "D": "移码"
      },
      "answer": [
        "C"
      ],
      "explanation": "真值-0.1101，对应的原码表示为1.1101，补码表示为1.0011，反码表示为1.0010，移码通常用于表示阶码，不用来表示定点小数。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_21_ad2b32d132",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 21,
      "type": "single_choice",
      "question": "下列为8位移码机器数[x]移，求[-x]移时，（）将会发生溢出。",
      "options": {
        "A": "11111111 1",
        "B": "00000000",
        "C": "10000000",
        "D": "01111111"
      },
      "answer": [
        "B"
      ],
      "explanation": "选项B对应8位最小的值-128，而-x=128发生溢出，因此无法表示其移码。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_22_05fbb01237",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 22,
      "type": "single_choice",
      "question": "一个8位的二进制整数由2个“0”和6个“1”组成，采用补码或者移码表示，则下列说法中正确的是（）。",
      "options": {
        "A": "若采用移码表示，偏置值为127，则此整数最小为-64",
        "B": "若采用移码表示，偏置值为128，则此整数最大为123 机教",
        "C": "若采用补码表示，则此整数最小为-96",
        "D": "若采用补码表示，则此整数最大为 252"
      },
      "answer": [
        "A"
      ],
      "explanation": "当采用补码表示时，要使得数值最大，就要让符号位为0，且把“1”放在高位，得到的补码为01111110B=126；要使得数值最小，就要让符号位为1，且把“1”放在低位，得到的补码为10011111B=-97。当采用移码表示时，设偏置值为128，要使得数值最大，就要把“1”放在高位，得到的移码为 $1 1 1 1 1 1 0 0 \\mathrm { B } - 1 0 0 0 0 0 0 \\mathrm { B } = 2 5 2 - 1 2 8 = 1 2 4$ ；设偏置值为127，要使得数值最小，则7X应把“1”放在低位，得到的移码为 $0 0 1 1 1 1 1 1 \\mathrm { B } - 0 1 1 1 1 1 1 1 \\mathrm { B } = 1 1 0 0 0 0 0 0 \\mathrm { B } = - 6 4$ ，选项A正确。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_23_e52ce3f77f",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 23,
      "type": "single_choice",
      "question": "用2个“1”和6个“0”组成的8位二进制补码，所能表示的最大整数和最小整数之差为（）。",
      "options": {
        "A": "223",
        "B": "128",
        "C": "191",
        "D": "159"
      },
      "answer": [
        "A"
      ],
      "explanation": "在8位补码中，符号位为最高位。要使数值最大，符号位为0，其余位中将两个“1”尽可能置于高位，最大值为01100000=96。要使数值最小，符号位为1，此时需要将另一个“1”置于最",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_24_8db954e147",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 24,
      "type": "single_choice",
      "question": "计算机内部的定点数大多用补码表示，以下是一些关于补码特点的叙述：I. 零的表示是唯一的 Ⅱ. 符号位可以和数值部分一起参加运算I. 和其真值的对应关系简单、直观 IV. 减法可用加法来实现",
      "options": {
        "A": "I和II",
        "B": "I和Ⅲ",
        "C": "I和Ⅱ和ⅢI",
        "D": "I和II和IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "[+0]补和[-0]补是相同的，所以说法Ⅰ正确。在进行补码定点数的加减运算时，符号位作为数的一部分参加运算，说法Ⅱ正确， $[ A ] _ { * } - [ B ] _ { * } = [ A ] _ { * } + [ - B ] _ { * }$ ，即将减法采用加法实现，说法IV正确。实际上，补码和其真值的对应关系远不如原码和其真值的对应关系简单直观，说法Ⅲ错误。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_25_148b372a9b",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 25,
      "type": "single_choice",
      "question": "在计算机中，通常用来表示主存地址的是（）。",
      "options": {
        "A": "移码",
        "B": "补码",
        "C": "原码",
        "D": "无符号数"
      },
      "answer": [
        "D"
      ],
      "explanation": "主存地址都是正数，因此不需要符号位，即直接采用无符号数表示。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_26_248f297dba",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 26,
      "type": "single_choice",
      "question": "16 位补码整数 0x8FA0 扩展为 32 位应该是（）。",
      "options": {
        "A": "0x0000 8FA0",
        "B": "0xFFFF 8FA0",
        "C": "0xFFFF FFA0",
        "D": "0x8000 8FA0"
      },
      "answer": [
        "B"
      ],
      "explanation": "16位扩展为32位，符号位不变，附加位是符号位的扩展。该数是一个负数，需用1来填补。A是一个正数，C的数值位发生变化，D用0来填充附加位，均不正确。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_27_17d9b5ff16",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 27,
      "type": "single_choice",
      "question": "【2012 统考真题】假定编译器规定 int 型和 short 型长度分别为 32 位和16 位，执行下列C语言语句：unsigned short x=65530;unsigned int y=x;得到 y的机器数为（）。",
      "options": {
        "A": "0000 7FFAH",
        "B": "0000 FFFAH",
        "C": "FFFF 7FFAH",
        "D": "FFFF FFFAH 育"
      },
      "answer": [
        "B"
      ],
      "explanation": "将一个 16 位 unsigned short 型数转换为 32 位 unsigned int 型数时，因为都是无符号数，新表示形式的高位用0填充。16位无符号整数所能表示的最大值为65535，其十六进制表示为FFFFH，因此x的十六进制表示为FFFFH-5H=FFFAH，所以y的十六进制表示为0000 FFFAH。\n排除法：先直接排除C、D，然后分析余下选项的特征。A、B的值相差几乎近1倍，因此可以算出00010000H（接近B且好算的数）的值后，再推断出答案。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_29_1c79243168",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 29,
      "type": "single_choice",
      "question": "【2016统考真题】有如下C语言程序段： 7short si = -32767; 计unsigned short usi = si;执行上述两条语句后，usi的值为（）。",
      "options": {
        "A": "-32767",
        "B": "32767",
        "C": "32768",
        "D": "32769"
      },
      "answer": [
        "D"
      ],
      "explanation": "因C语言中的数据在内存中为补码表示形式，si对应的补码为1000 0000 00000001B，最前面的一位“1”为符号位，表示负数，即-32767。由signed型数转换为等长的unsigned型数时，符号位成为数据的一部分，即负数转换为无符号数（正数）时，其数值将发生变化。usi对应的补码与 si的相同，但表示正数，为32769。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_31_7c9d81efba",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 31,
      "type": "single_choice",
      "question": "【2019统考真题】考虑以下C语言代码：unsigned short usi = 65535;short si = usi;执行上述程序段后，si的值是（）。",
      "options": {
        "A": "-1",
        "B": "-32767",
        "C": "-32768",
        "D": "-65535"
      },
      "answer": [
        "A"
      ],
      "explanation": "unsigned short 型为无符号短整型，长度为 2 字节，因此 unsigned short usi 型转换为二进制代码即 1111 11111111 1111。short型为短整型，长度为2字节，在采用补码的机器上，short si的二进制代码为 1111 1111 1111 1111，因此 si 的值为-1。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.1.5_34_28a2c13b71",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.5",
      "section_title": "本节习题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2025统考真题】在32位计算机上执行下列C语言代码段后，ui的值是（）。short si = -32767;unsigned int ui = si;",
      "options": {
        "A": "$2 ^ { 1 5 } - 1$",
        "B": "$2 ^ { 1 5 } + 1$",
        "C": "$2 ^ { 3 2 } - 2 ^ { 1 5 } - 1$",
        "D": "$2 ^ { 3 2 } - 2 ^ { 1 5 } + 1$"
      },
      "answer": [
        "D"
      ],
      "explanation": "在32位系统中，short通常为16位有符号整数。-32767的16位补码为1000 0000 0000 0001。将其赋值给 32 位 unsigned int 时，先按符号扩展转换为 32 位有符号整数 1111 1111 1111 1111 1000000000000001，再以无符号方式解释，其值为 $2 ^ { 3 2 } - ( 2 ^ { 1 5 } - 1 ) = 2 ^ { 3 2 } - 2 ^ { 1 5 } + 1$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.2.5_01_7c1dd88b85",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.5",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "算术逻辑单元（ALU）的核心部件是（）。",
      "options": {
        "A": "多路选择器",
        "B": "移位器",
        "C": "加法器",
        "D": "寄存器"
      },
      "answer": [
        "C"
      ],
      "explanation": "ALU的核心功能是算术与逻辑运算，其中加法是最基础的操作：减法可用补码加法实现，乘除可由加法和移位组合而成。因此，加法器是ALU最核心的部件。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.2.5_02_2eb6df5a16",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "算术逻辑单元（ALU）的功能通常包括（）。",
      "options": {
        "A": "算术运算",
        "B": "逻辑运算",
        "C": "算术运算和逻辑运算",
        "D": "加法运算"
      },
      "answer": [
        "C"
      ],
      "explanation": "ALU既能进行算术运算又能进行逻辑运算。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.2.5_03_e770e0a156",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "补码定点整数0101 0101算术左移两位后的值为（）。",
      "options": {
        "A": "0100 0111",
        "B": "0101 0100",
        "C": "0100 0110",
        "D": "0101 0101"
      },
      "answer": [
        "B"
      ],
      "explanation": "该数是一个正数（最高位为0），按照补码算术移位规则，算术左移两位后，移出了最高位01，低位补0，因此算术左移两位后的结果是01010100。虽然移位后该数的符号位仍为0，但是移出了有效位1，所以本次算术移位发生了溢出。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.2.5_04_4b2c8d6c35",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.5",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列四个补码整数存放于8位寄存器中，算术左移不会发生溢出的是（）。",
      "options": {
        "A": "80H",
        "B": "90H",
        "C": "BOH",
        "D": "COH"
      },
      "answer": [
        "D"
      ],
      "explanation": "$8 0 \\mathrm { H } = ( 1 0 0 0 0 0 0 0 0 ) \\ll 1 = 0 0 0 0 0 0 0 0$ ，左移前的符号位为1，左移后的符号位为0，溢出。90H=(1001$0 0 0 0 ) < < 1 = 0 0 1 0 0 0 0 0 .$ ，左移前的符号位为1，左移后的符号位为0，溢出。 $\\mathrm { B 0 H } = ( 1 0 1 1 \\ 0 0 0 0 ) < < 1 = 0 1 1 0$ 0000，左移前的符号位为1，左移后的符号位为0，溢出。 $\\mathrm { C 0 H } = ( 1 1 0 0 0 0 0 0 0 ) \\ll 1 = 1 0 0 0 0 0 0 0$ ，左移前的符号位为1，左移后的符号位为1，未溢出，选项D正确。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.2.5_05_f09077d092",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.5",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "补码定点整数10010101右移一位后的值为（）。X",
      "options": {
        "A": "0100 1010",
        "B": "01001010 1",
        "C": "1000 1010",
        "D": "1100 1010"
      },
      "answer": [
        "D"
      ],
      "explanation": "该数是一个负数（最高位为1），按照算术补码移位规则，负数右移添1，负数左移添0，所以10010101右移一位后的值为11001010。 顺村",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.2.5_13_decda7df79",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.5",
      "section_title": "本节习题精选",
      "num": 13,
      "type": "single_choice",
      "question": "判断加减法溢出时，可采用判断进位的方式，若符号位的进位为 $C _ { 0 } { : }$ 最高位的进位为$C _ { 1 }$ $\\dot { \\bar { f } }$ I. $C _ { 0 } \\dot { \\bar { z } }$ 生进位 II. $C _ { 1 } \\stackrel { * } { J ^ { \\ 2 } }$ 生进位III. $C _ { 0 } , \\ C _ { 1 }$ 都产生进位 美IV. $C _ { 0 } , \\ C _ { 1 }$ 都不产生进位 V. $C _ { 0 } \\dot { \\bar { z } }$ 生进位， $C _ { 1 }$ 不产生进位 VI. $C _ { 0 }$ 不产生进位， $C _ { 1 }$ 产生进位",
      "options": {
        "A": "I和Ⅱ",
        "B": "III",
        "C": "IV",
        "D": "V和 VI"
      },
      "answer": [
        "D"
      ],
      "explanation": "采用进位位来判断溢出时，当最高有效位进位和符号位进位的值不相同时才产生溢出。两正数相加，当最高有效位产生进位 $( C _ { 1 } \\mathrm { = } 1 )$ 而符号位不产生进位 $( C _ { 0 } \\mathrm { = } \\mathrm { 0 } )$ 时，发生正溢出；两负数相加，当最高有效位不产生进位 $( C _ { 1 } = 0 )$ 而符号位产生进位 $( C _ { 0 } \\mathrm { = } 1 )$ 时产生负溢出。因此溢出条件为 ${ \\overline { { C _ { 0 } } } } C _ { 1 } + C _ { 0 } { \\overline { { C _ { 1 } } } } = C _ { 0 } \\oplus C _ { 1 }$ 0 机字",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.2.5_16_8070523386",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.5",
      "section_title": "本节习题精选",
      "num": 16,
      "type": "single_choice",
      "question": "假设一次ALU运算和一次移位操作各需1个时钟周期，则32位无符号整数乘法电路完",
      "options": {
        "A": "16 成一次乘法运算所需的时钟周期数约为（）。",
        "B": "64",
        "C": "96",
        "D": "100 气机教"
      },
      "answer": [
        "B"
      ],
      "explanation": "32位无符号乘法通常采用“移位-相加”算法，共进行32轮迭代，每轮至少包含1次加法（或空操作）和1次移位。每轮消耗2个时钟周期（加法+移位），共需约 $3 2 \\times 2 = 6 4$ 个时钟周期。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.2.5_22_52f93e0a5d",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.5",
      "section_title": "本节习题精选",
      "num": 22,
      "type": "single_choice",
      "question": "某 C 语言代码段如下：int si=65536;short i=si;$\\mathrm { { u n s i g n e d } \\ : \\ : j = 0 } ;$ if(i<=j-1) printf(\" \");else printf(\" \"); 当上述代码段执行到if分支条件的判断时，会根据标志寄存器中的（）决定执行顺序。最终的输出结果是（）。",
      "options": {
        "A": "CF,",
        "B": "CF,",
        "C": "OF,",
        "D": "OF，"
      },
      "answer": [
        "A"
      ],
      "explanation": "无符号数和有符号数一起参与运算时，计算机按无符号数来解释最终的执行结果，因此j-1的结果是32个全1，会被解释成最大的无符号数。 $6 5 5 3 6 = 2 ^ { 1 6 }$ ，当把 si 强制转换为 short 型时，直接保留机器数的末16位，即16个全0，因此，当i和j-1进行比较时，根据无符号数的解释，OF标志是没有意义的，即根据CF位可知i小于j-1，因此最终输出“ ”。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.2.5_33_18557cb43b",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.5",
      "section_title": "本节习题精选",
      "num": 33,
      "type": "single_choice",
      "question": "【2024统考真题】C语言代码段如下，执行该代码段后，j的值是（）。int i=32777;short si=i;int j=si;",
      "options": {
        "A": "-32777",
        "B": "-32759",
        "C": "32759",
        "D": "32777"
      },
      "answer": [
        "B"
      ],
      "explanation": "$2 ^ { 1 5 } = 3 2 7 6 8 , \\mathrm { i } = 3 2 7 6 8 + 9 = 8 0 0 0 \\mathrm { H } + 9 \\mathrm { H } = 8 0 0 9 \\mathrm { H }$ ，32位有符号数i的机器数为00008009H。将32 位有符号数i 强制转换为16 位有符号数 si，直接保留机器数的末16位即可，因此 si 的机器数为8009H，真值为 $- 2 ^ { 1 5 } + 9 = - 3 2 7 5 9$ 。将16位有符号数 si强制转换为32位有符号数j，采用符号扩展（si\n的符号为1，因此高位补1），j的机器数变为FFFF8009H，对应的真值为-32759。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.3.5_01_0864741700",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.5",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "在C语言的不同类型的数据混合运算中，要先转换为同一类型后进行运算。设一表达式中包含有int型、long型、char型和double型的变量与数据，则表达式最后的运算结果是（），这4种类型数据的转换规律是（）。",
      "options": {
        "A": "long, int→char→double→long",
        "B": "long, char→int→long→double",
        "C": "double, char→int→long→double",
        "D": "double, char→int→double→long"
      },
      "answer": [
        "C"
      ],
      "explanation": "不同类型的数据混合运算时，遵循的原则是“类型提升”，即较低类型转换为较高类型，最终结果为 double 型。4 种类型数据的转换规律为 char→int→long→double。\n例如，long 型数据与 int型数据一起运算时，需先将 int 型转换为 long型，然后两者再进行运算，结果为long型。float型数据和double型数据一起运算时，虽然它们同为实型，但两者精度不同，仍要先将float型转换为double型再进行运算，结果亦为double型。所有这些转换都是由系统自动进行的，这种转换通常称为隐式转换。\n注意在强制类型转换中，从int型转换为float型时，虽然不会发生溢出，但因尾数位数的关系，可能有数据舍入，而转换为double型则能保留精度。double型转换为float型时亦是如此。从float型或double型转换为int型时，小数部分被截断，且由于int型的表示范围更小，还可能发生溢出。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.3.5_02_359aca29c1",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "长度相同但格式不同的两种浮点数，假设前者阶码长、尾数短，后者阶码短、尾数长，其他规定均相同，则它们可表示的数的范围和精度为（）。",
      "options": {
        "A": "两者可表示的数的范围和精度相同",
        "B": "前者可表示的数的范围大但精度低",
        "C": "后者可表示的数的范围大且精度高",
        "D": "前者可表示的数的范围大且精度高"
      },
      "answer": [
        "B"
      ],
      "explanation": "在浮点数总位数不变的情况下，阶码位数越多，尾数位数越少；即表示的数的范围越大，精\n度越差（数变稀疏）。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.3.5_03_5e44f47b9f",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "浮点数的 IEEE 754 标准对尾数编码采用的是（）。 —X",
      "options": {
        "A": "原码",
        "B": "反码",
        "C": "补码",
        "D": "移码"
      },
      "answer": [
        "A"
      ],
      "explanation": "IEEE754标准中尾数采用原码表示，阶码部分用移码表示。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.3.5_04_6ac69e084a",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.5",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "在IEEE 754 标准规定的 64 位浮点数格式中，符号位为1 位，阶码为11位，尾数为 52位，则它所能表示的最小规格化负数为（）。",
      "options": {
        "A": "$- ( 2 - 2 ^ { 5 2 } ) { \\times } 2 ^ { - 1 0 2 3 }$",
        "B": "$- ( 2 - 2 ^ { - 5 2 } ) { \\times } 2 ^ { + 1 0 2 3 }$",
        "C": "$- 1 { \\times } 2 ^ { - 1 0 2 4 }$",
        "D": "$- ( 1 - 2 ^ { - 5 2 } ) { \\times } 2 ^ { + 2 0 4 7 }$"
      },
      "answer": [
        "B"
      ],
      "explanation": "长浮点数，其阶码为11位，尾数为52位，采取隐藏位策略，因此其最小规格化负数为阶码取最大值 $2 ^ { + 1 0 2 3 } \\ : \\ : \\mathrm { ( } 1 0 2 3 = 2 ^ { 1 1 - 1 } - 1 \\mathrm { ) }$ ，尾数取最大值 $2 - 2 ^ { - 5 2 }$ （注意其有隐藏位要加1），符号位为负。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.3.5_20_04c6092121",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.5",
      "section_title": "本节习题精选",
      "num": 20,
      "type": "single_choice",
      "question": "假设已定义三个 int 型变量 x、y 和 z，sizeof(int) = 4，double 型采用 IEEE 754 双精度浮点数格式，变量dx、dy和dz的声明和初始化如下： $$ \\begin{array} { l l l } { { \\mathrm { d o u b l e } } } & { { \\mathrm { d } { \\bf x } } } & { { = } } & { { ( \\mathrm { d o u b l e } ) { \\bf x } ; } } \\\\ { { \\mathrm { d o u b l e } } } & { { \\mathrm { d } { \\bf y } } } & { { = } } & { { ( \\mathrm { d o u b l e } ) { \\bf y } ; } } \\\\ { { \\mathrm { d o u b l e } } } & { { \\mathrm { d } z } } & { { = } } & { { ( \\mathrm { d o u b l e } ) { \\bf z } ; } } \\end{array} $$ 则下列关系表达式中永远为真的是（）。 I. $\\mathrm { d x + d y = ( d o u b l e ) ( x + y ) }$ II. $( \\mathrm { d } \\mathrm { x } + \\mathrm { d } \\mathrm { y } ) + \\mathrm { d } \\mathrm { z } = \\mathrm { d } \\mathrm { x } + ( \\mathrm { d } \\mathrm { y } + \\mathrm { d } \\mathrm { z } )$",
      "options": {
        "A": "I和II",
        "B": "仅I",
        "C": "仅Ⅱ",
        "D": "无正确项"
      },
      "answer": [
        "D"
      ],
      "explanation": "说法I非永真，因为x+ y可能溢出，而dx+dy不会溢出，两者结果可能不同。说法Ⅱ永真，由于dx、dy和dz均由32位 int转换而到，double可精确地表示 int，且对阶时尾数移动位数不会超过52位，因此尾数不会舍入，不会发生大数吃小数「当两浮点数阶码相差超过尾数位宽（24/53位）时，小阶操作数在右移后有效位全部丢失，导致加法结果等于大阶操作数的情况。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.3.5_23_d9679391f2",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.5",
      "section_title": "本节习题精选",
      "num": 23,
      "type": "single_choice",
      "question": "在按字节编址的32位计算机中，按边界对齐方式为以下结构型变量x分配存储空间：struct cont info{char id;Munsigned post; 算机教char phone;} x; 若x的首地址为0x8049820，则成员变量phone的起始地址为（）。",
      "options": {
        "A": "0x8049828",
        "B": "0x8049826",
        "C": "0x8049825",
        "D": "0x8049822"
      },
      "answer": [
        "A"
      ],
      "explanation": "结构体按边界对齐存放的要求：数据成员的起始地址是其数据类型大小的整数倍，char型占1字节，char型的起始地址必须是1字节的整数倍；unsigned型占4字节，所以unsigned型的起始地址必须是4 字节的整数倍。据此分析，id的起始地址为 0x8049820，post的起始地址为\n0x8049824，所以 phone的起始地址为0x8049828。结构体x的存放方式如下所示。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_2.3.5_36_d40f58c608",
      "book": "计算机组成原理",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.5",
      "section_title": "本节习题精选",
      "num": 36,
      "type": "single_choice",
      "question": "【2018统考真题】某32位计算机按字节编址，采用小端方式。若语句 ${ } ^ { \\mathfrak { a } } \\mathrm { i n t } \\ \\mathrm { i } = 0 ; { } ^ { \\mathfrak { n } }$ 对应指令的机器代码为 $^ { \\mathrm { \\tiny { < } } } \\mathrm { C } 7 4 5 \\mathrm { F C } 0 0 0 0 0 0 0 0 0 ^ { \\mathrm { \\tiny { > } } }$ ，则语句 $\\mathrm { ^ { * } i n t \\ i = - 6 4 ; ^ { \\cdot } }$ 对应指令的机器代码是（）。",
      "options": {
        "A": "C7 45 FC C0 FF FF FF",
        "B": "C7 45 FC 0C FF FF FF 算机教",
        "C": "C7 45 FC FF FF FF C0",
        "D": "C7 45 FC FF FF FF 0C"
      },
      "answer": [
        "A"
      ],
      "explanation": "按字节编址，采用小端方式，低位的数据存储在低地址位、高位的数据存储在高地址位，并且按照一字节相对不变的顺序存储。由题意，存储0的位数是后32位，则我们只需要把-64的补码按字节存储在其中即可，而-64表示成32位的十六进制是FFFFFFC0，根据小端方式的特点，低位字节存储在低地址位，就是COFFFFFF。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.1.5_02_d1df19da7c",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "存储器的存取周期是指（）。",
      "options": {
        "A": "存储器的读出时间 计",
        "B": "存储器的写入时间",
        "C": "存储器进行连续读/写操作所允许的最短时间间隔",
        "D": "存储器进行一次读/写操作所需的平均时间"
      },
      "answer": [
        "C"
      ],
      "explanation": "存取时间 $T _ { \\mathrm { a } }$ 是指从存储器读/写一次信息所需要的平均时间：存取周期 $T _ { \\mathrm { m } }$ 是指连续两次访问存储器之间所必需的最短时间间隔。对 $T _ { \\mathrm { m } }$ 一般有 $T _ { \\mathrm { m } } = T _ { \\mathrm { a } } + T _ { \\mathrm { r } }$ ，其中 $T _ { \\mathrm { r } }$ 为复原时间；对 SRAM指存取信息的稳定时间，对DRAM指刷新的又一次存取时间。选项D指的是存取时间。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.1.5_03_78d144b8bf",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "相联存储器是一种特殊的存储器，其主要特点是（）。",
      "options": {
        "A": "通过地址总线指定存储单元进行读/写",
        "B": "按照“后进先出”原则访问数据",
        "C": "根据存储内容进行并行匹配查找",
        "D": "仅用于实现高速缓存中的直接映射结构"
      },
      "answer": [
        "C"
      ],
      "explanation": "相联存储器按内容寻址，能并行比较所有存储单元的内容以匹配关键字，直接返回结果或位置，常用于TLB和 Cache标记阵列等高速查找场景。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.1.5_07_0dc48fc99a",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.5",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "在计算机系统中，关于MAR和MDR的位数，以下说法正确的是（）。",
      "options": {
        "A": "MAR的位数等于地址总线的宽度，MDR的位数等于数据总线的宽度",
        "B": "MAR的位数等于数据总线的宽度，MDR的位数等于地址总线的宽度",
        "C": "MAR和MDR 的位数都等于地址总线的宽度",
        "D": "MAR和MDR的位数都等于数据总线的宽度"
      },
      "answer": [
        "A"
      ],
      "explanation": "MAR用于存放内存地址，其位数需覆盖主存全部可寻址单元，故等于地址总线宽度；MDR用于暂存读/写数据，其位数决定单次传输的数据量，故等于数据总线宽度。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.1.5_08_ee91b9cf36",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.5",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "在多级存储系统中，“Cache-主存”结构的作用是解决（）的问题。",
      "options": {
        "A": "主存容量不足",
        "B": "主存与辅存速度不匹配",
        "C": "辅存与 CPU速度不匹配",
        "D": "主存与 CPU 速度不匹配"
      },
      "answer": [
        "D"
      ],
      "explanation": "Cache中的内容只是主存内容的部分副本（拷贝），因此“Cache-主存”结构并未增加主存容量，目的是解决主存与CPU速度不匹配的问题。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.3.3_01_f7581edef1",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.3",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "用存储容量为16K×1 位的存储芯片来组成一个 64K×8位的存储器，则在字方向和位方向分别扩展了（）倍。",
      "options": {
        "A": "4,2",
        "B": "8, 4",
        "C": "2,4",
        "D": "4, 8"
      },
      "answer": [
        "C"
      ],
      "explanation": "芯片容量为1024×8位，8位说明数据线要8根，地址线要10根 $( 1 0 2 4 = 2 ^ { 1 0 } )$ 。因此，该芯片的地址引脚和数据引脚总数至少需要18根。 K",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.3.3_03_91d8bfceb3",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.3",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "4个16K×8位的存储芯片，可设计为（）容量的存储器。",
      "options": {
        "A": "$3 2 \\mathrm { K } { \\times } 1 6$ 位",
        "B": "16K×16 位",
        "C": "32K×8位",
        "D": "8K×16位"
      },
      "answer": [
        "B"
      ],
      "explanation": "DRAM的刷新按行进行。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.3.3_11_954b0d0224",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.3",
      "section_title": "本节习题精选",
      "num": 11,
      "type": "single_choice",
      "question": "【2010统考真题】假定用若干2K×4位的芯片组成一个 8K×8位的存储器，则地址 0B1FH所在芯片的最小地址是（）。",
      "options": {
        "A": "0000H",
        "B": "0600H",
        "C": "0700H",
        "D": "0800H"
      },
      "answer": [
        "C"
      ],
      "explanation": "U盘采用Flash存储技术，它是在EPROM的基础上发展起来的，属于ROM的一种。擦写速度和性价比均很可观，因此常用作辅存。值得注意的是，随机存取与随机存储器是两个不同的概念，只读存储器也是随机存取的。因此，支持随机存取的存储器并不一定是随机存储器。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.4.3_04_bfc0cf7133",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.4.3",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "若磁盘的转速提高一倍，则（）。",
      "options": {
        "A": "平均寻道时间减少一半",
        "B": "存取速度也提高一倍",
        "C": "平均旋转等待时间减少一半",
        "D": "不影响磁盘传输速率"
      },
      "answer": [
        "C"
      ],
      "explanation": "设存储容量为M，则有 $( M { \\times } 1 6 ) \\div ( 2 \\mathrm { K } { \\times } 4 ) = 1 6$ ，因此 $M = 8 \\mathrm { K }$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.4.3_05_22ac01983b",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.4.3",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列关于固态硬盘（SSD）的叙述中，不正确的是（）。",
      "options": {
        "A": "固态硬盘的读/写是以页为单位的",
        "B": "固态硬盘的擦除是以页为单位的",
        "C": "固态硬盘的写入速度比读取速度慢很多",
        "D": "固态硬盘的写入次数有限，引入磨损均衡可以延长使用寿命"
      },
      "answer": [
        "D"
      ],
      "explanation": "地址线为24根，寻址范围是 $2 ^ { 2 4 }$ ；数据线为32根，字长为32位。主存的总容量 $= 2 ^ { 2 4 } \\times 3 2$ 位，因此所需存储芯片数 $= ( 2 ^ { 2 4 } \\times 3 2 ) \\div ( 5 1 2 \\mathrm { K } \\times 8 ) = 1 2 8$ K",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.5.8_01_33e4747fae",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.5.8",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "在高速缓存系统中，主存容量为12MB，Cache容量为400KB，则该存储系统的容量为（）。",
      "options": {
        "A": "12MB + 400KB 道计",
        "B": "12MB",
        "C": "12MB-12MB + 400KB",
        "D": "12MB-400KB"
      },
      "answer": [
        "B"
      ],
      "explanation": "闪存是在E²PROM的基础上发展起来的，本质上是只读存储器。RAID将多个物理盘组成像单个逻辑盘，不会影响磁记录密度，也不可能提高磁盘利用率。在磁盘的格式化过程中，要对磁盘划分扇区，每个扇区要写入一些控制信息，扇区尾部还要留有一定的空隙，这些均需占用一些存储空间，因此导致格式化后的实际容量比非格式化的容量要小。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.5.8_02_fcb2c4b10b",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.5.8",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "访问 Cache 系统失效时，通常不仅主存向 CPU 传送信息，同时还需要将信息写入 Cache，在此过程中传送和写入信息的数据宽度各为（）。",
      "options": {
        "A": "块、页",
        "B": "字、字",
        "C": "字、块",
        "D": "块、块 uK 育"
      },
      "answer": [
        "A"
      ],
      "explanation": "因为每个盘面对应一个磁头，所以盘面号和磁头号是同一个概念，显然A的说法是错误的，磁盘地址应该由磁道号（柱面号）、磁头号（盘面号）和扇区号组成。 XTI",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.5.8_06_6faa38d0ec",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.5.8",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "局部性通常有两种不同的形式：时间局部性和空间局部性。程序员是否能编写出高速缓 存友好的代码，就取决于这两方面的问题。对于下面这个函数，说法正确的是（）。 int sumvec(int v[N]) {int i,sum=0;for(i=0;i<N;i++) 机sum+=v[i];return sum;",
      "options": {
        "A": "对于变量i和sum，循环体具有良好的空间局部性",
        "B": "对于变量i、sum 和v[N]，循环体具有良好的空间局部性",
        "C": "对于变量i和 sum，循环体具有良好的时间局部性",
        "D": "对于变量i、sum和v[N]，循环体具有良好的时间局部性"
      },
      "answer": [
        "D"
      ],
      "explanation": "固态硬盘基于闪存技术，没有机械部件，随机读/写不需要机械操作，因此速度明显高于磁盘，选项A和B正确。选项C已在考点讲解中解释过。SSD常用作外存而非主存，选项D错误。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.5.8_07_ec42841923",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.5.8",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "对于下列代码，以下哪种变化将使其具有更好的空间局部性（）。① int i,j,k,sum=0;② for(i=0;i<n;i++) ③ for(j=0;j<n;j++) 机④ for(k=0;k<n;k++)⑤ sum+=a[k][j][i];",
      "options": {
        "A": "将第 2行与第 3 行互换",
        "B": "将第 2行与第 4行互换",
        "C": "将第 5 行改为 sum+=a[i][k][i];",
        "D": "将第 5 行改为 sum+=a[j][i][k];"
      },
      "answer": [
        "C"
      ],
      "explanation": "磁盘的转速为7200转/分= 120转/秒，转一圈经过160个扇区，每个扇区为512B，所以磁盘每秒传输的数据量为 $1 2 0 { \\times } 1 6 0 { \\times } 5 1 2 / 1 0 2 4 = 9 6 0 0 \\mathrm { K B }$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.5.8_09_d34c7f815b",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.5.8",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于Cache的描述中，比较合理的是（）。I. 指令 Cache 通常比数据 Cache 具有更好的空间局部性I. 由于空间局部性，适当增加Cache块大小通常会提高命中率Ⅲ. 回写法的写主存操作次数少于直写法",
      "options": {
        "A": "III",
        "B": "Ⅰ和Ⅱ",
        "C": "Ⅱ和ⅢI",
        "D": "I和Ⅱ和Ⅲ"
      },
      "answer": [
        "B"
      ],
      "explanation": "磁盘转速是10000转/分，转一圈的时间为6ms，因此平均查询扇区的时间为3ms，平均寻道时间为6ms，读取4KB扇区信息的时间为 $4 \\mathrm { K B } { \\div } 2 0 \\mathrm { M B } / \\mathrm { s } = 0 . 2 \\mathrm { m s }$ ，磁盘控制器延迟为0.2ms，总时间为 $3 + 6 + 0 . 2 + 0 . 2 = 9 . 4 \\mathrm { m s }$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.5.8_10_c6bdfc6f36",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.5.8",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "假设 Cache采用2路组相联映射方式，Cache 共有4行（分为2组，每组 2行），Cache每行可存放一个主存块。组内采用LRU算法进行替换。给定主存块访问序列为若Cache初始为空，则该访问序列的 Cache缺失率为（）。 1, 8, 1, 7, 8, 2, 7, 2, 1, 8, 3, 8, 2, 1, 3, 1, 7, 1, 3, 7 算机",
      "options": {
        "A": "30%",
        "B": "50%",
        "C": "40%",
        "D": "45%"
      },
      "answer": [
        "B"
      ],
      "explanation": "RAID0方案是无冗余和无校验的磁盘阵列技术，而RAID1～RAID5方案均是加入了冗余（镜像）或校验的磁盘阵列技术。因此，提高RAID可靠性的措施主要是对磁盘进行镜像和奇偶校验，其余选项不符合条件。条带化是一种将数据分片，分别存储至不同的磁盘，提高读/写速度的技术。条带化的优点是读/写速度快，缺点是没有冗余，若其中一块磁盘损坏，则数据就会丢失。因此，条带化通常和其他技术如磁盘镜像或奇偶校验结合使用，形成不同的RAID级别。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.6.6_01_6de92c44d0",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.6",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "为使虚拟存储系统有效地发挥其预期的作用，所运行程序应具有的特性是（）。",
      "options": {
        "A": "不应含有过多的I/O操作",
        "B": "大小不应小于实际的内存容量",
        "C": "应具有较好的局部性",
        "D": "顺序执行的指令不应过多"
      },
      "answer": [
        "B"
      ],
      "explanation": "选项A为于扰项。各层次的存储系统不是孤立工作的，三级结构的存储系统是围绕主存储器来组织、管理和调度的存储器系统，它们既是一个整体，又要遵循系统运行的原理，其中包括包\n含性原则。因为Cache中存放的是主存中某一部分信息的副本，所以不能认为总容量为两个层次容量的简单相加。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.6.6_02_92948e2c8b",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.6",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "虚拟存储管理系统的基础是程序访问的局部性原理，此理论的基本含义是（）。",
      "options": {
        "A": "在程序的执行过程中，程序对主存的访问是不均匀的",
        "B": "空间局部性",
        "C": "时间局部性 算机教",
        "D": "代码的顺序执行"
      },
      "answer": [
        "C"
      ],
      "explanation": "一个块通常由若干字组成，CPU与Cache（或主存）间信息交互的单位是字，而Cache与主存间信息交互的单位是块。当 CPU访问的某个字不在 Cache 中时，将该字所在的主存块调入Cache，这样 CPU 下次要访问的字才有可能在 Cache 中。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.6.6_03_fe1c3e9259",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.6",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "虚拟存储器的常用管理方式有段式、页式、段页式，对于它们在与主存交换信息时的单位，以下表述正确的是（）",
      "options": {
        "A": "段式采用“页”",
        "B": "页式采用“块”",
        "C": "段页式采用“段”和",
        "D": "页式和段页式均仅采用“页”"
      },
      "answer": [
        "C"
      ],
      "explanation": "Cache命中时的存取时间为2ns；Cache不命中时先访问Cache，再访问主存，总存取时间为42ns。设 Cache 命中率为 x，则平均存取时间为 2x + 42(1- x) = 3，解得x = 97.5%。 KNIT",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.6.6_04_20698b1636",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.6",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列关于虚拟存储器的叙述中，正确的是（）。",
      "options": {
        "A": "对应用程序员透明，对系统程序员不透明",
        "B": "对应用程序员不透明，对系统程序员透明",
        "C": "对应用程序员、系统程序员都不透明",
        "D": "对应用程序员、系统程序员都透明"
      },
      "answer": [
        "D"
      ],
      "explanation": "在写不命中时，加载相应的低一层中的块到Cache中，然后更新这个高速缓存块，称为写分配法；而避开Cache，直接把这个字写到主存中，则称为非写分配法。这两种方法都是在不命中Cache的情况下使用的，而回写法和全写法是在命中 Cache的情况下使用的。在写 Cache时，写分配法和回写法搭配使用，非写分配法和全写法搭配使用。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.6.6_05_ecd46df4dc",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.6",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "在虚拟存储器中，当程序正在执行时，由（）完成地址映射。 7",
      "options": {
        "A": "程序员",
        "B": "编译器",
        "C": "装入程序",
        "D": "操作系统"
      },
      "answer": [
        "A"
      ],
      "explanation": "写操作比较密集，采用回写法速度快，更适合访问密集型的应用。全写法每次均写入主存和Cache，能够随时保持主存数据的一致性，适合安全性要求很高的应用。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.6.6_07_8543ec6fac",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.6",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列有关虚拟存储管理机制中地址转换的叙述，错误的是（）。",
      "options": {
        "A": "地址转换是指把逻辑地址转换为物理地址",
        "B": "通常逻辑地址的位数比物理地址的位数少",
        "C": "地址转换过程中会发现是否“缺页”",
        "D": "内存管理单元（MMU）在地址转换过程中要访问页表项"
      },
      "answer": [
        "B"
      ],
      "explanation": "空间局部性是指程序在一段时间内所访问的存储空间的集中度。为了提高空间局部性，应尽量按照数组在内存中的存储顺序依次访问数组元素。根据C语言的规定，数组a在内存中是按最右下标变化最快的方式存储的，即a[0][0][0]，a[0][0][1],…，a[0][0][n-1]，a[0][1][0],…，a[0][n-1][n-1],a[1][0][0],…,a[n-1][n-1][n-1]。因此，若将代码的第2行与第4行互换，则可使得对数组a的访问变成顺序访问，从而提高其空间局部性。 XIT",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.6.6_08_d0894924e4",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.6",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列有关虚拟存储管理机制的页表的叙述中，错误的是（）。",
      "options": {
        "A": "系统中每个进程有一个页表",
        "B": "页表中每个表项与一个虚页对应",
        "C": "每个页表项中都包含装入位（有效位）",
        "D": "所有进程都可以访问页表"
      },
      "answer": [
        "A"
      ],
      "explanation": "Cache的功能完全由硬件实现，选项A正确。Cache替换时的单位是块，而不是字或字节，因为Cache和主存是以块为单位进行数据交换的。Cache地址空间和主存地址空间相互独立，通过地址映射把主存地址空间映射到Cache地址空间。Cache中的信息不一定与主存中的信息一致，因为Cache可能采用回写策略，只有当被修改的块被换出时才写回主存。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.6.6_09_79dec8bf86",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.6",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列有关缺页处理的叙述中，错误的是（）。",
      "options": {
        "A": "若对应页表项中的有效位为0，则发生缺页",
        "B": "缺页是一种外部中断，需要调用操作系统提供的中断服务程序来处理",
        "C": "缺页处理过程中需根据页表中给出的磁盘地址去读磁盘数据",
        "D": "缺页处理完后要重新执行发生缺页的指令"
      },
      "answer": [
        "D"
      ],
      "explanation": "指令Cache通常比数据Cache具有更好的空间局部性，这是因为指令流通常是顺序执行的，而数据流转移或随机访问的概率较高，说法Ⅰ正确。因为空间局部性，同一主存块中的数据的访问概率较高，所以增加Cache块大小会提高命中率，说法Ⅱ正确。写回法只有在被修改的块被换出时才写回主存，而直写法每次写操作都会同时写回主存，说法Ⅲ正确。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.6.6_13_e925daf5eb",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.6",
      "section_title": "本节习题精选",
      "num": 13,
      "type": "single_choice",
      "question": "【2013统考真题】某计算机主存地址空间大小为256MB，按字节编址。虚拟地址空间大小为4GB，采用页式存储管理，页面大小为4KB，TLB（快表）采用全相联映射，有4个页表项，内容如下表所示。 V 则对虚拟地址 03FF F180H进行虚实地址变换的结果是（）。",
      "options": {
        "A": "015 3180H",
        "B": "003 5180H",
        "C": "TLB 缺失",
        "D": "缺页"
      },
      "answer": [
        "C"
      ],
      "explanation": "LRU算法根据程序访问局部性原理选择近期使用得最少的存储块作为替换的块。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_3.6.6_14_d4e587a222",
      "book": "计算机组成原理",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.6",
      "section_title": "本节习题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2015统考真题】假定编译器将赋值语句“x=x+3;”转换为指令“add xaddr,3”，其中xaddr是x对应的存储单元地址。若执行该指令的计算机采用页式虚拟存储管理方式，并配有相应的TLB，且Cache使用直写方式，则完成该指令功能需要访问主存的",
      "options": {
        "A": "0 次数至少是（）。",
        "B": "1 算机",
        "C": "2",
        "D": "3"
      },
      "answer": [
        "D"
      ],
      "explanation": "Cache采用随机替换算法和全写法，因此无须脏位和替换算法控制位，每行仅需标记字段和1 位有效位。Cache共64块，直接映射下每块对应一组，故有64个标记项。主存容量是Cache容量的4096倍，即 $2 ^ { 1 2 }$ 倍，说明主存地址比Cache地址多12位，这12位即为标记字段长度。因此每个标记项含12 位标记 +1位有效位=13 位，标记阵列总大小为64×13bit。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.1.6_01_d10d04ce27",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于指令集体系结构和指令系统的说法中，错误的是（）。",
      "options": {
        "A": "指令集体系结构位于计算机软/硬件的交界面上",
        "B": "指令集体系结构是指低级语言程序员所看到的概念结构和功能特性",
        "C": "任何程序运行前都要先转换为机器语言程序",
        "D": "指令系统和机器语言是无关的"
      },
      "answer": [
        "C"
      ],
      "explanation": "虚拟存储系统利用的是局部性原理，程序应当具有较好的局部性，选项C正确。而含有输入、输出操作产生中断，与虚拟存储器无关，选项A错误。大小较小但可以多个程序并发执行，也可以发挥虚拟存储器的作用，选项B错误。顺序执行的指令应当占较大比重为宜，这样可增强程序的局部性，选项D错误。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.1.6_02_2273e9d5ff",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列有关指令集体系结构（ISA）的叙述中，错误的是（）。",
      "options": {
        "A": "ISA 规定了执行每条指令时所包含的控制信号",
        "B": "ISA规定了指令获取操作数的方式，即寻址方式",
        "C": "ISA规定了所有指令的集合，包括指令格式和操作类型",
        "D": "ISA规定了程序可访问的寄存器个数、存储空间大小、编址方式和大端/"
      },
      "answer": [
        "A"
      ],
      "explanation": "局部性原理的含义是在一个程序的执行过程中，其大部分情况下是顺序执行的，某条指令或数据使用后，在最近一段时间内有较大的可能再次被访问（时间局部性）；某条指令或数据使用后，其邻近的指令或数据可能在近期被使用（空间局部性）。在虚拟存储管理系统中，程序只能访问主存获得指令和数据，选项A正确。选项B、C、D均是局部性原理的一个方面而已。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.1.6_03_40ba2f7327",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "运算型指令的寻址与转移型指令的寻址的不同点在于（）。",
      "options": {
        "A": "前者取操作数，后者决定程序转移地址",
        "B": "后者取操作数，前者决定程序转移地址",
        "C": "前者是短指令，后者是长指令",
        "D": "前者是长指令，后者是短指令"
      },
      "answer": [
        "D"
      ],
      "explanation": "页式虚拟存储方式对程序分页，采用页进行交互；段页式则先按照逻辑分段，然后分页，以页为单位和主存交互，选项D正确。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.1.6_04_73f1601d26",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "程序控制类指令的功能是（）",
      "options": {
        "A": "进行算术运算和逻辑运算",
        "B": "进行主存与CPU之间的数据传送",
        "C": "进行CPU 和I/O 设备之间的数据传送",
        "D": "改变程序执行的顺序"
      },
      "answer": [
        "A"
      ],
      "explanation": "虚拟存储器需要通过对操作系统实现地址映射，因此对操作系统的设计者即系统程序员是不透明的。而应用程序员写的程序所使用的是逻辑地址（虚地址），因此对其是透明的。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.1.6_05_297aeb1a80",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列指令中不属于程序控制类指令的是（）。",
      "options": {
        "A": "无条件转移指令",
        "B": "条件转移指令",
        "C": "中断隐指令",
        "D": "循环指令"
      },
      "answer": [
        "D"
      ],
      "explanation": "虚拟存储器中，地址映射由操作系统来完成，但需要一部分硬件基础的支持，如快表、地址映射系统等。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.1.6_06_6cc961d4eb",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "以下叙述错误的是（）。",
      "options": {
        "A": "为了便于取指令，指令的长度通常为存储字长的整数倍",
        "B": "单地址指令是固定长度的指令",
        "C": "单字长指令可加快取指令的速度",
        "D": "单地址指令可能有一个操作数，也可能有两个操作数"
      },
      "answer": [
        "B"
      ],
      "explanation": "引入虚拟存储器的目的是解决内存容量不够大的问题。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.1.6_07_e5d2d7a8f2",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "某指令系统有200条指令，对操作码采用固定长度二进制编码，最少需要用（）位。",
      "options": {
        "A": "4",
        "B": "8",
        "C": "16",
        "D": "32"
      },
      "answer": [
        "B"
      ],
      "explanation": "虚拟存储管理的目的是让程序员可以在一个比主存地址空间大得多的虚拟地址空间中编程，显然逻辑地址空间比主存空间大，因此逻辑地址的位数比物理地址的位数多，选项B错误。在执行程序时，由CPU中的MMU进行逻辑地址到物理地址的转换。在转换过程中，MMU需要查找对应的页表项，根据页表项中的装入（有效）位是否为1来确定是否发生缺页。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.1.6_08_eace7d5189",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "在指令格式中，采用扩展操作码设计方案的目的是（）。",
      "options": {
        "A": "减少指令字长度 机教",
        "B": "增加指令字长度",
        "C": "保持指令字长度不变而增加指令的数量",
        "D": "保持指令字长度不变而增加寻址空间"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项A、B和C都正确。页表中的每个表项反映的是对应虚拟页面的位置和使用等信息，通常只能由操作系统和硬件进行访问，虚拟存储管理机制对用户进程来说是透明的，选项D错误。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.1.6_09_79727a6790",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "一个计算机系统采用32位单字长指令，地址码为12位，若定义了250条二地址指令，则还可以有（）条单地址指令。",
      "options": {
        "A": "$2 ^ { 1 2 }$",
        "B": "$2 ^ { 1 3 }$",
        "C": "$2 ^ { 1 4 }$",
        "D": "$3 { \\times } 2 ^ { 1 3 }$"
      },
      "answer": [
        "B"
      ],
      "explanation": "缺页是CPU在执行指令过程中进行取指令或读/写数据时发生的一种故障，属于内部异常。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.1.6_10_1641aae7b5",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "假设系统采用16位定长指令字格式，操作码使用扩展编码方式，地址码为4位，三地",
      "options": {
        "A": "15",
        "B": "16",
        "C": "31",
        "D": "32 教"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项A、B和C都正确。分段方式对低级语言程序员和编译器来说是不透明的，因为低级语言程序员需要使用段号来编程，编译器需要使用段号来链接，选项D错误。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.2.3_01_d3fbd55c8b",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.3",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "指令系统中采用不同寻址方式的目的是（）。",
      "options": {
        "A": "提供扩展操作码的可能并降低指令译码难度",
        "B": "可缩短指令字长，扩大寻址空间，提高编程的灵活性",
        "C": "实现程序控制",
        "D": "三者都正确 机教"
      },
      "answer": [
        "D"
      ],
      "explanation": "指令集体系结构（ISA）完整定义了软件和硬件之间的接口，是机器语言或汇编语言程序员所应熟悉的。指令系统是计算机硬件的语言系统，这显然和机器语言有关。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.2.3_02_73266fdb65",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.3",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "采用直接转移的无条件转移指令的功能是将指令中的地址码送入（）。",
      "options": {
        "A": "程序计数器（PC）",
        "B": "指令译码器（ID）",
        "C": "指令寄存器（IR） 一道计",
        "D": "地址寄存器（MAR）"
      },
      "answer": [
        "A"
      ],
      "explanation": "指令集体系结构（ISA）是软件和硬件之间接口的一个完整定义，包含了基本数据类型、指令集、寄存器、寻址模式、存储体系、中断和异常处理及外部I/O。ISA规定了执行每条指令时所需要的操作码、操作数、寻址方式等信息，以及指令的功能和效果。控制信号是由控制单元根据ISA生成的，它属于微架构层面的实现细节，而不是ISA层面的抽象定义。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.2.3_03_36c27dc04d",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.3",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "为了缩短指令中某个地址段的位数，有效的方法是采取（）。",
      "options": {
        "A": "立即寻址",
        "B": "变址寻址",
        "C": "间接寻址",
        "D": "寄存器寻址"
      },
      "answer": [
        "A"
      ],
      "explanation": "运算型指令寻址的是操作数，而转移型指令寻址的是下次欲执行的指令的地址。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.2.3_04_cda61b35d8",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.3",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "简化地址结构的基本方法是尽量采用（）。",
      "options": {
        "A": "寄存器寻址",
        "B": "隐含寻址",
        "C": "直接寻址",
        "D": "间接寻址"
      },
      "answer": [
        "D"
      ],
      "explanation": "程序控制类指令用于改变程序执行的顺序，并使程序具有测试、分析、判断和循环执行的能力。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.2.3_05_8e102d71ee",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.3",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "在指令寻址的各种方式中，获取操作数最快的方式是（）。",
      "options": {
        "A": "直接寻址",
        "B": "立即寻址",
        "C": "寄存器寻址",
        "D": "间接寻址"
      },
      "answer": [
        "C"
      ],
      "explanation": "程序控制类指令主要包括无条件转移、条件转移、子程序调用和返回指令、循环指令等。中断隐指令是由硬件实现的，并不是指令系统中存在的指令，更不可能属于程序控制类指令。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.2.3_15_27110216be",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.3",
      "section_title": "本节习题精选",
      "num": 15,
      "type": "single_choice",
      "question": "某计算机的主存容量为4M×16位，且存储字长等于指令字长，若该机能完成97种操作，操作码位数固定，且有直接、间接、基址、变址、相对、立即六种寻址方式，则相对寻址的偏移量范围为（）。",
      "options": {
        "A": "(−32, +31)",
        "B": "(−64, +63)",
        "C": "(−128, +127)",
        "D": "(−256, +255)"
      },
      "answer": [
        "D"
      ],
      "explanation": "地址码为6位，一条二地址指令会占用 $2 ^ { 6 }$ 条一地址指令的空间，一条一地址指令会占用 $2 ^ { 6 }$\n条零地址指令的空间。若全都是零地址指令，则最多有 $2 ^ { 1 6 }$ 条，减去一地址指令和二地址指令所占用的零地址指令空间，即 $2 ^ { 1 6 } - 2 5 4 \\times 2 ^ { 6 } - 1 2 \\times 2 ^ { 6 } \\times 2 ^ { 6 } = ( 2 ^ { 1 0 } - 2 5 4 - 1 2 \\times 2 ^ { 6 } ) \\times 2 ^ { 6 } = 2 \\times 2 ^ { 6 } = 1 2 8$\n【另解】二地址指令有12条，则剩余 $1 6 - 1 2 = 4$ 种操作码给一地址指令，一地址指令有254条，剩余 $4 { \\times } 6 4 - 2 5 4 = 2$ 种操作码给0地址指令，所以0地址一共有 $2 \\times 2 ^ { 6 } = 1 2 8$ 条。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.3.5_01_26e78aaf5e",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.3.5",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "假设 R[ax] = FFE8H，R[bx]= 7FE6H，执行指令“add ax, bx”后，寄存器的内容和各标 志的变化为（）。",
      "options": {
        "A": "R[ax] = 7FCEH, OF = 1, SF = 0, CF = 0, ZF = 0",
        "B": "R[bx] = 7FCEH, OF = 1, SF = 0, CF = 0, ZF = 0",
        "C": "R[ax] = 7FCEH, OF = 0, SF = 0, CF = 1, ZF = 0 机",
        "D": "R[bx] = 7FCEH, OF = 0, SF = 0, CF = 1, ZF = 0"
      },
      "answer": [
        "B"
      ],
      "explanation": "采用不同寻址方式的目的是为了缩短指令字长，扩大寻址空间，提高编程的灵活性，但这也提高了指令译码的复杂度。程序控制是靠转移指令而非寻址方式实现的。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.3.5_02_42173928bd",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.3.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "假设 R[ax]= 7FE6H，R[bx] = FFE8H，执行指令“sub bx, ax”后，寄存器的内存和各标 志的变化为（）。",
      "options": {
        "A": "R[ax] = 8002H, OF = 0, SF = 1, CF = 1, ZF = 0 计",
        "B": "R[bx] = 8002H, OF = 0, SF = 1, CF = 0, ZF = 0",
        "C": "R[ax] = 8002H, OF = 1, SF = 1, CF = 0, ZF = 0",
        "D": "R[bx] = 8002H, OF = 1, SF = 1, CF = 0, ZF = 0"
      },
      "answer": [
        "A"
      ],
      "explanation": "转移指令有条件/无条件、直接/间接、相对/绝对三种属性。条件转移是指需要先判断条件是否成立，才决定是否转移：无条件转移是指不用判断条件就可以转移，典型的是函数调用和返回。直接转移是指转移目标地址直接放在指令中，执行时直接将地址码送入PC；间接转移是指转移目标地址存放在寄存器或内存单元中。相对转移是指转移目标地址为当前PC值加上偏移量，偏移量一般在指令中；绝对转移是指转移目标地址直接由指令或寄存器给出。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.3.5_03_080c3da31a",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.3.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "某计算机的数据采用小端方式存储，减法指令“sub ax, imm”的功能为(ax)- imm→ax，imm表示立即数，该指令对应的十六进制机器码为2dxxxx（从左到右以字节为单位由低地址到高地址），其中 xxxx对应 imm的机器码，若 imm=-3，(ax)= 7，则该指令对应的机器码和执行后OF标志位的值分别为（）。",
      "options": {
        "A": "2DFFFDH, 0",
        "B": "2DFFFDH, 1",
        "C": "2DFDFFH, 0",
        "D": "2DFDFFH, 1"
      },
      "answer": [
        "D"
      ],
      "explanation": "CPU中寄存器的数量都不会太多，用很短的编码就可以指定寄存器，寄存器寻址需要的地址段位数为log(通用寄存器个数)，因此能有效地缩短地址段的位数。立即寻址，操作数直接保存在指令中，若地址段位数太小，则操作数表示的范围会很小；变址寻址，EA=变址寄存器IX的内容+形式地址A，A与主存寻址空间有关；间接寻址中存放的仍然是主存地址。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.3.5_04_762fd3f6bd",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.3.5",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "某C 语言程序中对数组变量 b 的声明为“int b[10][5];”，有一条 for语句如下： for(i=0;i<10;i++) for(j=0;j<5;j++) sum+=b[i][j]; 假设执行到“sum+=b[i][j];”时，sum的值在 eax中，b[i][0]所在的地址在 edx中，j 在esi中，则“sum+=b[i][i];”所对应的指令（Intel格式）可以是（）。",
      "options": {
        "A": "add dword ptr eax, [edx+esi\\*4]",
        "B": "add dword ptr eax, [esi+edx\\*4]",
        "C": "add dword ptr eax, [edx+esi\\*2]",
        "D": "add dword ptr eax, [esi+edx\\*2]"
      },
      "answer": [
        "B"
      ],
      "explanation": "隐含寻址不明显给出操作数地址，而在指令中隐含操作数的地址，因此可以简化地址结构。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.3.5_05_219c56ffd3",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.3.5",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "假设 R[eax] = 080480B4H，R[ebx] = 00000011H，M[080480F8H] = 000000B0H，执行指 令“imul eax,[eax+ebx\\*4],-16”后，寄存器或存储单元的内容变为（）。",
      "options": {
        "A": "R[eax] = 00000B00H",
        "B": "M[080480F8H] = 00000B00H",
        "C": "R[eax]= FFFFF500H",
        "D": "M[080480F8H] = FFFFF500H"
      },
      "answer": [
        "B"
      ],
      "explanation": "立即寻址最快，指令直接给出操作数；寄存器寻址次之，只需访问一次寄存器；直接寻址再次之，访问一次内存；间接寻址最慢，要访问内存两次或以上。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.3.5_06_11fe6ebcb3",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.3.5",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "程序 P 中有两个变量 i 和 j，被分别分配在寄存器 eax 和 edx 中，P 中语句“if(i<j) {...}”对应的指令序列如下（左边为指令地址，中间为机器代码，右边为汇编指令），其中jle指令的偏移量为 0d:804846a 39 c2 cmp dword ptr edx,eax804846c 7e 0d jle xxxxxxxx 若执行到 804846aH 处的 cmp 指令时，i = 105，j = 100，则 jle 指令执行后将转到（）处的指令执行。",
      "options": {
        "A": "8048461H",
        "B": "804846eH",
        "C": "8048479H",
        "D": "804847bH"
      },
      "answer": [
        "A"
      ],
      "explanation": "指令字中的形式地址为操作数的有效地址，这种方式为直接寻址。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.4.4_01_403d5ade5e",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.4.4",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于RISC的叙述中，正确的是（）。",
      "options": {
        "A": "RISC 机一定采用流水技术",
        "B": "采用流水技术的机器一定是RISC 机",
        "C": "RISC 机的兼容性优于 CISC 机",
        "D": "CPU配备很少的通用寄存器"
      },
      "answer": [
        "A"
      ],
      "explanation": "RISC必然采用流水线技术，这也是由其指令的特点决定的。而CISC则无此强制要求，但为了提高指令执行速度，CISC也往往采用流水线技术，因此流水线技术并非RISC的专利。CISC机可以兼容很多不同的高级语言和软件，而RISC机的指令系统简单精简，只包含一些基本的指令，这些指令需要通过组合来实现复杂的功能，从而增加了编译器的设计难度和程序员的编程难度，因此CISC机的兼容性更好。CPU配备很多通用寄存器是RISC机的主要特点。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.4.4_02_e3f4101b18",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.4.4",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列描述中，不符合RISC指令系统特点的是（）。",
      "options": {
        "A": "指令长度固定，指令种类少",
        "B": "寻址方式种类尽量减少，指令功能尽可能强",
        "C": "增加寄存器的数目，以尽量减少访存次数",
        "D": "选取使用频率最高的一些简单指令，以及很有用但不复杂的指令"
      },
      "answer": [
        "B"
      ],
      "explanation": "A、C和D都是RISC的特点。对于B，寻址方式种类尽量减少是RISC的特点，而增强指令的功能则是CISC的特点。RISC指令功能简单，复杂指令的功能由简单指令的组合来实现。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.4.4_03_47565ac359",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.4.4",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "以下有关RISC的描述中，正确的是（）。 X",
      "options": {
        "A": "为了实现兼容，新设计的RISC是从原来CISC系统的指令系统中挑选一部分实现的",
        "B": "采用RISC技术后，计算机的体系结构又恢复到了早期的情况王",
        "C": "RISC的主要目标是减少指令数，因此允许以增加每条指令的功能的方法来减少指令系统所包含的指令数",
        "D": "以上说法都不对"
      },
      "answer": [
        "D"
      ],
      "explanation": "RISC选择一些常用的寄存器型指令，并不是为了兼容CISC，RISC也不可能兼容CISC，选项A错误。RISC只是CPU的结构发生变化，基本不影响整个计算机的结构，并且即使是采用RISC技术的 CPU，其架构也不可能像早期一样简单，选项B错误。RISC的指令功能简单，通过简单指令的组合来实现复杂指令的功能，选项C错误，但RISC的主要目标是减少指令数是正确的。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.4.4_04_b52ab863ca",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.4.4",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列关于RISC和CISC的说法中，不正确的是（）。",
      "options": {
        "A": "RISC指令格式种类少，寻址方式少，指令长度固定，更容易用硬布线电路实现",
        "B": "CISC指令功能强大，寻址方式多，便于汇编程序员编程",
        "C": "CISC指令格式种类多，所以更有利于编译优化",
        "D": "RISC多数指令能够在一个时钟周期内完成，特别适合流水线工作"
      },
      "answer": [
        "C"
      ],
      "explanation": "CISC指令格式种类多，增大了编译优化的复杂性，因此不利于编译优化。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.4.4_05_1b001ac097",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.4.4",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "【2009统考真题】下列关于RISC的说法中，错误的是（）。",
      "options": {
        "A": "RISC 普遍采用微程序控制器 机孝入",
        "B": "RISC 大多数指令在一个时钟周期内完成",
        "C": "RISC 的内部通用寄存器数量相对CISC 多",
        "D": "RISC的指令数、寻址方式和指令格式种类相对CISC少"
      },
      "answer": [
        "A"
      ],
      "explanation": "相对于CISC，RISC的特点是：指令条数少；指令长度固定，指令格式和寻址种类少；只有取数/存数指令访问存储器，其余指令的操作均在寄存器之间进行：CPU中通用寄存器多：大部分指令在一个时钟周期内完成；以硬布线逻辑为主，不用或少用微程序控制。B、C和D都是RISC的特点。RISC的速度快，因此普遍采用硬布线控制器，选项A错误。 七界",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_4.4.4_06_e5d3bfe4df",
      "book": "计算机组成原理",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.4.4",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "【2025统考真题】下列关于RISC的叙述中，错误的是（）。",
      "options": {
        "A": "多采用硬连线方式实现控制器",
        "B": "通常采用 LOAD/STORE 指令设计风格",
        "C": "难以采用流水线数据通路实现微架构",
        "D": "多采用寄存器传递过程调用时的参数"
      },
      "answer": [
        "C"
      ],
      "explanation": "RISC指令集具有格式规整、数量少、寻址简单、采用LOAD/STOR访存、通用寄存器数量多及硬连线控制器等特点，指令执行周期均匀，非常适合流水线实现。相反，CISC因指令复杂、长度可变而难以采用流水线。因此，选项C错误，其余选项均符合RISC特征。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.1.4_01_d32d147689",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "CPU的核心功能是执行程序，下列不属于CPU的基本功能的是（）。",
      "options": {
        "A": "时序控制",
        "B": "异常与中断处理",
        "C": "执行算术和逻辑运算",
        "D": "数据存储"
      },
      "answer": [
        "D"
      ],
      "explanation": "CPU的基本功能包括：通过时序控制协调指令执行节奏，响应并处理异常与中断事件，以及利用ALU执行算术与逻辑运算。数据存储由主存、Cache等存储器承担；CPU仅包含少量寄存器用于临时暂存，不负责持久性或主体数据存储，因此不属于其基本功能，选项D错误。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.1.4_04_7c518c0cd6",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "在CPU中，跟踪后继指令地址的寄存器是（）。",
      "options": {
        "A": "指令寄存器",
        "B": "程序计数器",
        "C": "地址寄存器",
        "D": "状态寄存器"
      },
      "answer": [
        "B"
      ],
      "explanation": "程序计数器用于存放下一条指令在主存储器中的地址，具有地址自增功能。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.1.4_05_2fb25f864a",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "条件转移指令执行时所依据的条件来自（）。",
      "options": {
        "A": "指令寄存器",
        "B": "标志寄存器",
        "C": "程序计数器",
        "D": "地址寄存器"
      },
      "answer": [
        "B"
      ],
      "explanation": "指令寄存器用于存放当前正在执行的指令；程序计数器用于存放下一条指令的地址；地址寄存器用于暂存指令或数据的地址；程序状态字寄存器用于保存系统的运行状态。条件转移指令执行时，需要对标志寄存器的内容进行测试，判断是否满足转移条件。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.1.4_06_cac907a6d5",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在CPU的寄存器中，（）对汇编语言程序员是完全透明的。",
      "options": {
        "A": "程序计数器",
        "B": "状态寄存器",
        "C": "指令寄存器",
        "D": "通用寄存器"
      },
      "answer": [
        "C"
      ],
      "explanation": "对汇编语言程序员透明是指无法通过汇编指令直接访问或修改。指令寄存器由硬件自动加载，程序员不可读/写，故完全透明，选项C正确。程序计数器可通过转移/调用间接控制，通用寄存器可直接使用，二者均不透明。状态寄存器部分标志位可被条件指令使用或读取，是半透明的。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.2.5_01_827e3c132c",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.5",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "计算机工作的最小时间周期是（）。",
      "options": {
        "A": "时钟周期",
        "B": "指令周期",
        "C": "存取周期",
        "D": "总线周期"
      },
      "answer": [
        "A"
      ],
      "explanation": "时钟周期是计算机内部最基本、最小的时间单位。指令周期是指完成一条指令所需的时间，可以包含多个时钟周期。存取周期是指访问一次存储器（读或写）的时间，通常也需要多个时钟周期。总线周期是指总线进行数据传输所需的时间，也可包含多个时钟周期。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.2.5_03_21460c5e44",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "在一条无条件转移指令的指令周期内（不含中断），程序计数器的值被修改了（）次。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "不能确定"
      },
      "answer": [
        "B"
      ],
      "explanation": "首先在取指周期结束后，PC值自动加1；在执行周期中，PC值修改为要转移到的地址。综上，在一条无条件转移指令的指令周期内，程序计数器（PC）的值被修改了2次。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.2.5_04_e6ee1ae097",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.5",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "取指操作后，程序计数器中存放的是（）。",
      "options": {
        "A": "当前指令的地址",
        "B": "程序中指令的数量",
        "C": "已执行的指令数量",
        "D": "下一条指令的地址"
      },
      "answer": [
        "D"
      ],
      "explanation": "在取指操作后，程序计数器中的内容将被修改为下一条指令的地址，而不是当前指令的地址。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.3.5_01_1d9c03e172",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.5",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列不属于CPU数据通路结构的是（）。",
      "options": {
        "A": "单总线结构",
        "B": "多总线结构",
        "C": "部件内总线结构",
        "D": "专用数据通路结构"
      },
      "answer": [
        "C"
      ],
      "explanation": "对CPU而言，数据通路的基本结构分为总线结构和专用数据通路结构，其中总线结构又分为单总线结构、双总线结构、多总线结构。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.3.5_02_1c64f98a31",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列有关数据通路的叙述中，错误的是（）。",
      "options": {
        "A": "数据通路由若干组合逻辑元件和时序逻辑元件连接而成",
        "B": "数据通路的功能由控制部件送出的控制信号决定",
        "C": "ALU属于操作元件，包含在数据通路中",
        "D": "通用寄存器属于状态元件，但不包含在数据通路中"
      },
      "answer": [
        "D"
      ],
      "explanation": "数据通路中的部件包括组合逻辑元件和时序逻辑元件。数据通路的功能由控制部件送出的控制信号决定。数据通路中一个重要的组合逻辑元件为ALU，用于执行各类算术和逻辑运算；另一个重要的元件为通用寄存器，属于时序逻辑元件。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.3.5_03_a5e839f0d0",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "数据通路是由操作元件和状态元件通过总线或分散方式连接而成的进行数据存储、处理和传送的路径，下列部件中属于状态元件的是（）。I. 算术逻辑部件Ⅱ. 译码器 I. 移位寄存器 IV. 存储器数据寄存器",
      "options": {
        "A": "I、III",
        "B": "II、III、V",
        "C": "III、IV",
        "D": "I、 IV A"
      },
      "answer": [
        "C"
      ],
      "explanation": "操作元件的输出仅取决于当前的输入，不受时钟信号的控制，也没有存储数据的功能。状态元件的最大特点是具有存储数据的功能。算术逻辑部件和译码器都不具有存储功能，属于操作元件；移位寄存器和存储器数据寄存器属于不同功能的寄存器，具有存储功能，属于状态元件。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.3.5_04_0b685987b4",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.5",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列关于采用单总线方式的CPU的说法中，正确的是（）。",
      "options": {
        "A": "ALU的两个输入端及输出端都可与总线相连",
        "B": "ALU的两个输入端可以与总线相连，但输出端需通过暂存器与总线相连",
        "C": "ALU的一个输入端可以与总线相连，其输出端也可与总线相连",
        "D": "ALU只能有一个输入端可以与总线相连，另一输入端需通过暂存器与总线相连"
      },
      "answer": [
        "D"
      ],
      "explanation": "因为ALU是一个组合逻辑元件，所以其运算过程中必须保持两个输入端的内容不变。又因为CPU内部采用单总线结构，所以为了得到两个不同的操作数，ALU的一个输入端与总线相连，另一个输入端需通过一个寄存器与总线相连。此外，ALU的输出端也不能直接与内部总线相连，否则其输出又会通过总线反馈到输入端，影响运算结果，因此输出端需通过一个暂存器（用来暂存结果的寄存器）与总线相连。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.3.5_05_542dcd6a98",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.5",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "CPU内部若多个部件共享一条总线，则每个部件与总线之间需设置一个常用的器件，CPU控制该器件的状态，实现某个部件与总线的连接或断开。该器件是（）。",
      "options": {
        "A": "触发器",
        "B": "多路选择器",
        "C": "三态门",
        "D": "与非门"
      },
      "answer": [
        "C"
      ],
      "explanation": "三态门可视为一种控制开关，由控制端决定信号线的通断，能输出到内部总线的部件均通过一个三态门与内部总线相连，用于控制该部件与内部总线之间数据通路的连接与断开。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.3.5_06_114a1f01f7",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.5",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "CPU内部电路通常采用总线连接方式，总线上信号流动的原则是（）。I. 每个时刻只有一个器件发出信息 Ⅱ.每个时刻有一个或多个器件发出信息Ⅲ. 每个时刻只有一个器件接收信息IV. 每个时刻有一个或多个器件接收信息",
      "options": {
        "A": "I、III",
        "B": "I、 IV -",
        "C": "II、III",
        "D": "II、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "当CPU内部电路采用总线连接方式时，总线上信号流动的原则如下：每个时刻只有一个器件发出信息（否则会导致总线冲突），每个时刻可以有一个或多个器件接收信息。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.3.5_07_5178b73545",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.5",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列关于CPU时钟信号的叙述中，错误的是（）。",
      "options": {
        "A": "处理器总是每来一个时钟信号就开始执行一条新的指令",
        "B": "边沿触发指状态单元总在时钟上升沿或下降沿开始改变状态",
        "C": "时钟周期以相邻状态单元之间最长组合逻辑延迟为基准确定",
        "D": "每个时钟周期称为一个节拍，机器的主频就是时钟周期的倒数"
      },
      "answer": [
        "A"
      ],
      "explanation": "CPU通过时钟信号定时执行指令，但并非每个时钟周期都会执行一条新指令。在多周期CPU中，指令的执行被划分为多个阶段，每个时钟周期开始执行一个阶段，选项A错误。每个阶段的操\n作通常由时钟信号的上升沿或下降沿触发，称为边沿触发，并且决定了状态元件（如寄存器）的状态改变。为确保每个阶段都在一个时钟周期内完成，时钟周期必须足够长，以便数据能在最慢的组合逻辑电路中传输，因此时钟周期通常根据相邻状态单元之间最长的组合逻辑延迟来确定。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.3.5_08_97141e629e",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.5",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列操作中，从开始到完成所持续的时间不一定等于一个时钟周期的是（）。I. 单总线数据通路中完成一次主存读操作I. 单周期CPU 中执行一条完整指令 算机Ⅲ. 单总线数据通路中，寄存器R1 经内部总线传至寄存器R2IV.流水线数据通路中，数据从一个流水段寄存器传入下一个流水段寄存器V. 单周期 CPU 中完成一次 ALU 运算",
      "options": {
        "A": "I, V",
        "B": "I, III, V",
        "C": "II, III, IV",
        "D": "IV, V"
      },
      "answer": [
        "A"
      ],
      "explanation": "说法Ⅰ不一定：主存访问受存储器速度限制，通常需要多个时钟周期。说法Ⅱ一定：单周期CPU的每条指令在一个时钟周期内完成。说法Ⅲ一定：在CPU内部数据通路中，数据从一个状态元件传送到另一个状态元件的操作由时钟同步，耗时等于一个时钟周期。说法IV一定：流水段寄存器之间的数据传递由时钟边沿触发，严格对应一个时钟周期。说法V不一定：ALU运算由组合逻辑实现，其延迟由电路决定，在单周期CPU中必须小于一个时钟周期，以满足单周期设计约束。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.3.5_09_23c9207a98",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.5",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于单周期CPU和多周期CPU的描述中，错误的是（）。",
      "options": {
        "A": "单周期CPU更容易支持复杂指令（如乘法、除法）",
        "B": "单周期CPU部件冗余大、利用率低，多周期CPU则刚好相反",
        "C": "单周期CPU在1 个时钟周期内执行一条指令，CPI=1",
        "D": "多周期CPU至少需要2 个时钟周期才能执行一条指令，CPI>1"
      },
      "answer": [
        "A"
      ],
      "explanation": "单周期CPU要求所有指令在一个时钟周期内完成，其时钟周期由最慢指令决定；加入复杂指令会显著延长时钟周期，拖累整体性能。而多周期CPU可将复杂指令分解为多个节拍，每节拍使用标准周期，不影响主频，更易支持复杂操作。单周期CPU需大量专用通路实现并行，硬件冗余高、利用率低；多周期CPU通过部件复用，资源利用更高效。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.3.5_10_db25234fd9",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.5",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于单周期数据通路和多周期数据通路的说法中，正确的是（）。",
      "options": {
        "A": "单周期 CPU 的 CPI 总比多周期 CPU 的 CPI 大",
        "B": "单周期 CPU 的时钟周期通常比多周期CPU 的时钟周期短",
        "C": "在一条指令执行过程中，单周期CPU中的每个控制信号取值一直不变，而多周期CPU中的控制信号可能发生改变",
        "D": "在一条指令执行过程中，单周期数据通路和多周期数据通路中的每个部件都可使用多次"
      },
      "answer": [
        "C"
      ],
      "explanation": "多周期CPU中的指令通常需要多个时钟周期才能完成，CPI>1；单周期CPU的每条指令在一个时钟周期内完成，CPI=1。单周期CPU的时钟周期取决于最复杂指令的耗时，通常比多周期CPU的时钟周期长。在一条指令的执行过程中，单周期CPU的每个控制信号保持不变，每个部件只能使用一次；多周期CPU的控制信号可能发生改变，同一个部件可使用多次。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.4.4_02_4573dd9275",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.4.4",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "在组合逻辑控制器中，微操作控制信号的形成主要与（）信号有关。",
      "options": {
        "A": "指令操作码和地址码",
        "B": "指令译码信号和时钟",
        "C": "操作码和条件码",
        "D": "状态信息和条件"
      },
      "answer": [
        "B"
      ],
      "explanation": "CU的输入信号来源如下：①经指令译码器译码产生的指令信息；②时序系统产生的节拍信号；③来自执行单元的反馈信息即标志。前两者是主要因素。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.4.4_03_53d1a869b3",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.4.4",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "在微程序控制器中，形成微程序入口地址的是（）。",
      "options": {
        "A": "机器指令的地址码字段",
        "B": "微指令的微地址码字段",
        "C": "机器指令的操作码字段",
        "D": "微指令的微操作码字段"
      },
      "answer": [
        "C"
      ],
      "explanation": "执行公用的取指微程序从主存中取出机器指令后，由机器指令的操作码字段指出各个微程序的入口地址（初始微地址）。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.4.4_04_b34787e1b9",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.4.4",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列不属于微指令结构设计所追求目标的是（）。",
      "options": {
        "A": "提高微程序的执行速度",
        "B": "提高微程序设计的灵活性C",
        "C": "缩短微指令的长度",
        "D": "增大控制存储器的容量"
      },
      "answer": [
        "D"
      ],
      "explanation": "微指令的设计目标和指令结构的设计目标类似，都是基于执行速度、灵活性和指令长度这三个主要方面考虑的。而控制存储器容量的大小与微指令的设计目标无关。 LST",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.4.4_05_7f7b7acf76",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.4.4",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "微程序控制器的执行速度比硬布线控制器慢，主要是因为（）。",
      "options": {
        "A": "增加了从磁盘存储器读取微指令的时间",
        "B": "增加了从主存读取微指令的时间",
        "C": "增加了从指令寄存器读取微指令的时间",
        "D": "增加了从控制存储器读取微指令的时间"
      },
      "answer": [
        "D"
      ],
      "explanation": "在微程序控制中，控制存储器中存放有微指令，在执行时需要从中读出相应的微指令，从而增加了时间消耗。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.5.4_01_cea21ab39c",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.5.4",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "以下关于“自陷”（Trap）异常的叙述中，错误的是（）。",
      "options": {
        "A": "“自陷”是人为预先设定的一种特定处理事件",
        "B": "可由访管指令或自陷指令的执行进入“自陷”",
        "C": "一定是出现某种异常情况才会发生“自陷”",
        "D": "“自陷”发生后CPU将进入操作系统内核程序并执行"
      },
      "answer": [
        "C"
      ],
      "explanation": "自陷是人为设定的特殊中断机制，不是出现某些异常情况而产生的，选项C错误。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.5.4_02_83b9247e10",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.5.4",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "指令执行结果出现异常而引起的中断是（）。 rA",
      "options": {
        "A": "I/O 中断",
        "B": "机器校验中断",
        "C": "故障",
        "D": "外部中断"
      },
      "answer": [
        "C"
      ],
      "explanation": "异常是CPU执行指令过程中发生的与当前指令执行有关的意外事件，而中断请求则是CPU外部的I/O部件或时钟等向CPU发出的与当前指令执行无关的意外事件。指令执行结果出现异常\n与当前指令执行有关，如运算溢出等，属于内中断中的故障。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.5.4_04_eebfee3944",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.5.4",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列关于异常和中断响应的叙述中，错误的是（）。",
      "options": {
        "A": "异常事件检测由CPU在执行每一条指令的过程中进行",
        "B": "中断请求检测由CPU在每条指令执行结束、取下条指令之前进行",
        "C": "CPU检测到异常事件后所做的处理和检测到中断请求后所做的处理完全相同",
        "D": "CPU在中断响应时会关中断、保存断点和程序状态并转到相应的中断服务程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "CPU对于异常和中断的响应处理大体是一致的，都需要保存断点和程序状态字并转到相应的处理程序去执行，但有些细节并不一样。例如，检测到中断请求后，CPU必须通过“中断回答”信号启动中断控制器进行中断查询，以确定当前发出的优先级最高的中断请求，并通过数据线获取相应的中断类型号；而对于异常，CPU无须进行中断回答。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.5.4_05_e30181b56a",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.5.4",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列给出的事件中，无须异常处理程序进行处理的是（）。",
      "options": {
        "A": "缺页故障",
        "B": "Cache 缺失",
        "C": "地址越界",
        "D": "除数为0"
      },
      "answer": [
        "B"
      ],
      "explanation": "缺页、地址越界和除数为0都是执行某条指令时可能发生的故障，需要调出操作系统内核中相应的异常处理程序来处理，而Cache缺失则由CPU硬件实现，无须调出异常处理程序进行处理。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.5.4_06_3fd1389b7f",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.5.4",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "CPU响应中断的时间是（）",
      "options": {
        "A": "一条指令执行结束",
        "B": "I/O 设备提出中断",
        "C": "取指周期结束",
        "D": "指令周期结束"
      },
      "answer": [
        "A"
      ],
      "explanation": "中断周期用于响应中断，若有中断，则在指令的执行周期后进入中断周期。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.6.6_01_1e04d7f004",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.6.6",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于流水线CPU的叙述中，正确的是（）。",
      "options": {
        "A": "流水线技术通过复制多个功能部件实现空间并行处理",
        "B": "只有精简指令集（RISC）处理器才能采用流水线技术",
        "C": "流水线CPU必须采用多核结构才能工作",
        "D": "流水线是一种通过时间并行性提高指令执行效率的技术"
      },
      "answer": [
        "D"
      ],
      "explanation": "流水线通过将指令执行划分为多个阶段并重叠处理，实现时间并行性，其核心是分时复用同\n一套功能部件；而复制多个功能部件以支持同时执行多条指令，属于多发射或超标量技术，体现的是空间并行性。选项A将空间并行的特征错误归因于流水线。不仅RISC处理器，CISC处理器（如x86计算机）也广泛采用流水线技术。流水线完全可在单核CPU中实现，无须多核支持。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.6.6_02_6c3965b8d3",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.6.6",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "流水段CPU是由一系列称为“段”的处理电路组成的。一个m段流水线稳定时的CPU的吞吐能力，与m个并行部件的CPU的吞吐能力相比，（）。",
      "options": {
        "A": "具有同等水平的吞吐能力",
        "B": "不具备同等水平的吞吐能力",
        "C": "吞吐能力大于前者的吞吐能力",
        "D": "吞吐能力小于前者的吞吐能力"
      },
      "answer": [
        "A"
      ],
      "explanation": "吞吐能力是指单位时间内完成的指令数。m段流水线在第m个时钟周期后，每个时钟周期都可以完成一条指令；而m个并行部件在m个时钟周期后能完成全部的m条指令，等价于平均每个时钟周期完成一条指令。因此两者的吞吐能力等同。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.6.6_03_95f598c241",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.6.6",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "设指令由取指、分析、执行3个子部件完成，并且每个子部件的时间均为Δt，若采用常规标量单流水线处理机（处理机的度为1），连续执行12条指令，共需（）。",
      "options": {
        "A": "12 ∆t",
        "B": "14∆t X",
        "C": "16∆t",
        "D": "18 ∆t"
      },
      "answer": [
        "B"
      ],
      "explanation": "单流水线处理机执行12条指令的时间为 $( 3 + ( 1 2 - 1 ) ) \\Delta t = 1 4 \\Delta t \\mathrm { \\Omega }$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.6.6_04_3ce610bfbb",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.6.6",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "设指令由取指、分析、执行3个子部件完成，并且每个子部件的时间均为Δt，若采用度为4的超标量流水线处理机，连续执行20条指令，只需（）。",
      "options": {
        "A": "3 ∆t",
        "B": "5 ∆t",
        "C": "7∆t",
        "D": "9 ∆t"
      },
      "answer": [
        "C"
      ],
      "explanation": "这个超标量流水线处理机可以发送4条指令，所以执行指令的时间为 $( 3 + ( 2 0 - 4 ) / 4 ) \\Delta t = 7 \\Delta t \\circ$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.6.6_05_ce89c8f9d0",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.6.6",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "设指令流水线把一条指令分为取指、分析、执行3部分，3部分执行时间不等长，且3部分的时间分别是 $t _ { \\ast \\ast } = 2 \\mathrm { n s }$ $t _ { \\mathrm { } _ { \\mathrm { } \\beta \\mathrm { } p \\mathrm { } } } = 2 \\mathrm { n s }$ $t _ { \\ast \\ast } = 1 \\mathrm { n s }$",
      "options": {
        "A": "163ns",
        "B": "183ns",
        "C": "193ns",
        "D": "203ns"
      },
      "answer": [
        "D"
      ],
      "explanation": "每个功能段的时间设定为取指、分析和执行部分的最长时间2ns，第一条指令在第5ns时执行完毕，其余的99条指令每隔2ns执行完一条，所以100条指令全部执行完毕所需的时间为$( 5 + 9 9 \\times 2 ) \\mathrm { n s } = 2 0 3 \\mathrm { n s }$",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.7.5_01_97cb62cad9",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.7.5",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "当前设计高性能计算机的重要技术途径是（）。",
      "options": {
        "A": "提高 CPU 主频",
        "B": "扩大主存容量",
        "C": "采用非冯·诺依曼结构",
        "D": "采用并行处理技术"
      },
      "answer": [
        "D"
      ],
      "explanation": "单纯提高CPU主频已难以为继，受限于功耗和散热；扩大主存容量虽能支持更大的程序，却无法直接加快计算速度；非冯·诺依曼结构目前仍处于探索阶段。相比之下，并行处理技术通过同时执行多个任务或操作，有效突破了性能瓶颈，已成为现代高性能计算机的核心设计途径。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.7.5_02_9558d99c67",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.7.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "按照Flynn提出的计算机系统分类方法，多处理机属于（）。",
      "options": {
        "A": "SISD",
        "B": "SIMD",
        "C": "MISD",
        "D": "MIMD"
      },
      "answer": [
        "D"
      ],
      "explanation": "Flynn 分类法将计算机体系结构分为 SISD、SIMD、MISD和 MIMD四类。常规的单处理器属于SISD，常规的多处理机属于MIMD。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.7.5_03_c4c198511b",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.7.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "从体系结构的角度来看，阵列处理机属于（）结构。",
      "options": {
        "A": "SISD",
        "B": "SIMD",
        "C": "MIMD",
        "D": "MISD"
      },
      "answer": [
        "B"
      ],
      "explanation": "阵列处理机包含一个计算阵列，此阵列由多个处理单元组成。它使用单一的控制部件控制多个处理单元，使每个处理单元对各自的数据进行同样的操作，属于SIMD结构。\nA、B和C通常可理解为同一种概念，是SIMD结构。标量流水线处理机是SISD结构。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.7.5_05_469f825a9d",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.7.5",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "具有一个控制部件和多个处理单元的计算机系统属于（）结构。",
      "options": {
        "A": "SISD",
        "B": "SIMD",
        "C": "MISD",
        "D": "MIMD"
      },
      "answer": [
        "B"
      ],
      "explanation": "单指令流多数据流（SIMD）结构的计算机通常由一个指令控制部件、多个处理单元组成，不同处理单元执行的同一条指令所处理的数据可以不同。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_5.7.5_07_8b34dd2005",
      "book": "计算机组成原理",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.7.5",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "双核 CPU 和超线程 CPU 的共同点是（）。",
      "options": {
        "A": "都有两个内核",
        "B": "都能同时执行两个运算",
        "C": "都包含两个 CPU",
        "D": "都不会出现争抢资源的现象"
      },
      "answer": [
        "B"
      ],
      "explanation": "超线程技术在CPU内部仅复制必要的线程资源，共享CPU的高速缓存和功能部件，让两个线\n程可以并行执行，模拟双核CPU。当两个线程同时需要某个共享资源时，其中一个线程必须暂时挂起，直到这些资源空闲后才能继续运行。仅选项B正确。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_6.1.5_01_9a9a8b8bb1",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.5",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "挂接在总线上的多个部件（）。",
      "options": {
        "A": "只能分时向总线发送数据，并只能分时从总线接收数据",
        "B": "只能分时向总线发送数据，但可同时从总线接收数据",
        "C": "可同时向总线发送数据，并同时从总线接收数据",
        "D": "可同时向总线发送数据，但只能分时从总线接收数据"
      },
      "answer": [
        "B"
      ],
      "explanation": "为了使总线上的数据不发生“冲突”，挂在总线上的多个设备只能分时地向总线发送数据，即某个时刻只能有一个设备向总线传送数据，而从总线接收数据的设备可以有多个，因为接收数\n据的设备不会对总线产生“干扰”。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_6.1.5_02_be73a6c5b9",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "在计算机系统中，多个系统部件之间信息传送的公共通路称为总线，就其所传送的信息的性质而言，下列（）不是在公共通路上传送的信息。",
      "options": {
        "A": "数据信息",
        "B": "地址信息",
        "C": "系统信息",
        "D": "控制信息"
      },
      "answer": [
        "C"
      ],
      "explanation": "总线包括数据线、地址线和控制线，传送的信息分别为数据信息、地址信息和控制信息。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_6.1.5_03_719dfeccf2",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "系统总线用来连接（）。",
      "options": {
        "A": "寄存器和运算器部件",
        "B": "运算器和控制器部件",
        "C": "CPU、主存和外设部件",
        "D": "接口和外部设备"
      },
      "answer": [
        "C"
      ],
      "explanation": "x\n系统总线用于连接计算机中的各个功能部件（如CPU、主存和I/O设备）。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_6.1.5_04_4c21d3b1b7",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.5",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "计算机使用总线结构便于增减外设，同时（）。",
      "options": {
        "A": "减少信息传输量",
        "B": "提高信息的传输速度",
        "C": "减少信息传输线的条数",
        "D": "提高信息传输的并行性"
      },
      "answer": [
        "C"
      ],
      "explanation": "计算机使用总线结构便于增减外设，同时减少信息传输线的条数。但相对于专线结构，其实际上也降低了信息传输的并行性及信息的传输速度。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_6.1.5_06_78dd689e12",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.5",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "系统总线中地址线的功能是（）。",
      "options": {
        "A": "选择主存单元地址",
        "B": "选择进行信息传输的设备",
        "C": "选择外存地址",
        "D": "指定主存和I/O设备接口电路的地址"
      },
      "answer": [
        "D"
      ],
      "explanation": "地址总线上的代码用来指明CPU要访问的存储单元或I/O端口的地址。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_6.2.3_06_d12737c8c5",
      "book": "计算机组成原理",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.2.3",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在异步总线中，传送操作（）。",
      "options": {
        "A": "由设备控制器控制",
        "B": "由 CPU 控制",
        "C": "由统一时序信号控制",
        "D": "按需分配时间"
      },
      "answer": [
        "D"
      ],
      "explanation": "异步总线即采用异步通信方式的总线。在异步方式下，没有公用的时钟，完全依靠传送双方相互制约的“握手”信号来实现定时控制。传送操作是由双方按需求分配时间的。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_7.2.5_02_50abd2b3f2",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.2.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列功能中，属于I/O接口的功能的是（）。I. 数据格式的转换 道计 II. I/O 过程中错误与状态检测Ⅲ. I/O 操作的控制与定时 IV. 与主机和外设通信",
      "options": {
        "A": "I和IV",
        "B": "I、II 和IV",
        "C": "I、II和IV",
        "D": "I、II、III和IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "I/O接口的功能有：①选址功能、②传送命令功能、③传送数据功能、④反映I/O设备工作状态的功能。选项Ⅰ可参考唐朔飞老师的《计算机组成原理》教材，为设置接口的原因之一，也是接口应具有的功能；说法Ⅱ属于④；说法Ⅲ属于②；说法IV属于③。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p301-340.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机组成原理_7.2.5_04_72ad51eaaf",
      "book": "计算机组成原理",
      "chapter": 7,
      "chapter_title": "",
      "section": "7.2.5",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列属于I/O接口中寄存器的有（）。I. 指令寄存器 Ⅱ. 控制寄存器 III. 状态寄存器V. 数据缓冲寄存器 IV. 存储器地址寄存器",
      "options": {
        "A": "I、II、ⅢI和V",
        "B": "II、III和IV",
        "C": "II、ⅢI和V",
        "D": "II、II、IV和 V"
      },
      "answer": [
        "C"
      ],
      "explanation": "I/O接口中的寄存器主要有数据缓冲寄存器、控制寄存器和状态寄存器。",
      "source_file": "mineru/2027/2027计算机组成原理_高清带书签版/2027计算机组成原理_高清带书签版_p301-340.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_1.1.7_01_1950f6ec58",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.7",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "计算机网络可被理解为（）。",
      "options": {
        "A": "执行计算机数据处理的软件模块",
        "B": "由自治的计算机互连起来的集合体",
        "C": "多个处理器通过共享内存实现的紧耦合系统",
        "D": "用于共同完成一项任务的分布式系统"
      },
      "answer": [
        "B"
      ],
      "explanation": "计算机网络是由自治计算机互连起来的集合体，其中包含三个关键点：自治计算机、互连、集合体。自治计算机由软件和硬件两部分组成，能完整地实现计算机的各种功能；互连是指计算机之间能实现相互通信：集合体是指所有使用通信线路及互联设备连接起来的自治计算机的集合。选项C和D分别指多机系统和分布式系统。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_1.1.7_11_71405e01a0",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.7",
      "section_title": "本节习题精选",
      "num": 11,
      "type": "single_choice",
      "question": "在下图所示的采用存储转发方式的分组交换网中，主机A向B发送两个长度为1000B的分组，路由器处理单个分组的时延为10ms（假设路由器同时最多只能处理一个分组，若在处理某个分组时有新的分组到达，则存入缓存区)，忽略链路的传播时延，所有链路的数据传输速率为1Mb/s，则分组从A发送开始到B接收完为止，需要的时间至少是（）。",
      "options": {
        "A": "34ms",
        "B": "36ms",
        "C": "38ms",
        "D": "52ms"
      },
      "answer": [
        "B"
      ],
      "explanation": "分组长度为1000B，所有链路的数据传输速率为1Mb/s，因此，每段链路的发送时延为$1 0 0 0 \\mathrm { B } { \\div } 1 \\mathrm { M b } / \\mathrm { s } = 8 \\mathrm { m s }$ ，第一个分组从A到达B的时间为 $8 + 1 0 + 8 = 2 6 \\mathrm { m s }$ ，此后又经过10ms，第二个分组才到达B，所以总时间为 $2 6 + 1 0 = 3 6 \\mathrm { m s }$ ，下图是传送过程的时空图。\n注意，此题还可扩展为发送更多分组的情况，请读者自行分析。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_1.1.7_12_13361e849b",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.7",
      "section_title": "本节习题精选",
      "num": 12,
      "type": "single_choice",
      "question": "如下图所示，主机H1和H2之间有三种可选的交换方式一一电路交换、报文交换和分组交换，其中电路交换建立电路连接的时间为2s，报文交换和分组交换都要经过由一个路由器连接的链路，分组大小为5kb。三种交换方式的数据传输速率均为2.5kb/s，忽略所有的传播时延、分组开销和不可预料的线路延迟，下列说法中正确的是（）。 电路交换 报文交换和分组交换",
      "options": {
        "A": "若H1向H2发送5kb的数据，则电路交换最节省时间",
        "B": "若H1向H2 发送500kb的数据，则电路交换和分组交换的时间相同",
        "C": "若H1向H2发送10kb的数据，则报文交换比分组交换更节省时间",
        "D": "若H1向H2发送15kb的数据，则报文交换比电路交换更节省时间"
      },
      "answer": [
        "B"
      ],
      "explanation": "若 H1 向 H2 发送 5kb 的数据，电路交换的时间为 $2 + 5 \\mathrm { k b } { \\div } 2 . 5 \\mathrm { k b } / \\mathrm { s } = 4 \\mathrm { s }$ ，分组交换和报文交换的时间均为 $5 \\mathrm { k b } { \\div } 2 . 5 \\mathrm { k b } / \\mathrm { s } + 5 \\mathrm { k b } { \\div } 2 . 5 \\mathrm { k b } / \\mathrm { s } = 4 \\mathrm { s }$ ，选项A 错误。若H1向 H2 发送500kb的数据，电路交换的时间为 $2 + 5 0 0 \\mathrm { k b } { \\div } 2 . 5 \\mathrm { k b } / \\mathrm { s } = 2 0 2 \\mathrm { s }$ ，分组交换的时间为 $5 0 0 \\mathrm { k b } { \\div } 2 . 5 \\mathrm { k b } / \\mathrm { s } + 5 \\mathrm { k b } { \\div } 2 . 5 \\mathrm { k b } / \\mathrm { s } = 2 0 2 \\mathrm { s }$ 选项B正确。若H1向H2发送10kb的数据，报文交换的时间为 $1 0 \\mathrm { k b { \\div } 2 . 5 \\mathrm { k b / s + 1 0 \\mathrm { k b { \\div } 2 . 5 \\mathrm { k b / s = 8 s } } } }$ 分组交换的时间为 $1 0 \\mathrm { k b } { \\div } 2 . 5 \\mathrm { k b } / \\mathrm { s } + 5 \\mathrm { k b } { \\div } 2 . 5 \\mathrm { k b } / \\mathrm { s } = 6 \\mathrm { s }$ ，选项 C 错误。若H1向 H2发送15kb的数据，电路交换的时间为 $2 + 1 5 \\mathrm { k b } { \\div } 2 . 5 \\mathrm { k b } / \\mathrm { s } = 8 \\mathrm { s }$ ，报文交换的时间为 $1 5 \\mathrm { k b } { \\div } 2 . 5 \\mathrm { k b } / \\mathrm { s } + 1 5 \\mathrm { k b } { \\div } 2 . 5 \\mathrm { k b } / \\mathrm { s } = 1 2 \\mathrm { s }$ 选项D错误。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_1.2.4_01_6a3bb93ac1",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.4",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列选项中，不属于对网络模型进行分层的目标的是（）。",
      "options": {
        "A": "提供标准语言 王大",
        "B": "定义功能执行的方法",
        "C": "定义标准界面",
        "D": "增加功能之间的独立性"
      },
      "answer": [
        "B"
      ],
      "explanation": "分层属于计算机网络体系结构的范畴，选项A、C和D均是网络模型分层的目的，而分层的目的不包括定义功能执行的具体方法。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_1.2.4_02_35fe36c54c",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.4",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "将用户数据分成一个个数据块传输的优点不包括（）。",
      "options": {
        "A": "减少延迟时间",
        "B": "提高错误控制效率",
        "C": "使得多个应用更公平地使用共享通信介质",
        "D": "有效数据在协议数据单元（PDU）中所占比例更大"
      },
      "answer": [
        "D"
      ],
      "explanation": "将用户数据分成一个个数据块传输，因为每块均需加入控制信息，所以实际上会使有效数据在PDU中所占的比例更小。其他各项均为其优点。 。へ啦",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_1.2.4_03_4d3086aea3",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.4",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "协议是指在（）之间进行通信的规则或约定。",
      "options": {
        "A": "同一节点的上下层",
        "B": "不同节点",
        "C": "相邻实体",
        "D": "不同节点对等实体"
      },
      "answer": [
        "D"
      ],
      "explanation": "协议是为对等层实体之间进行逻辑通信而定义的规则的集合。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_1.2.4_04_a72b575730",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.4",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "OSI参考模型中的实体指的是（）。 1",
      "options": {
        "A": "实现各层功能的规则",
        "B": "上下层之间进行交互时所要的信息",
        "C": "各层中实现该层功能的软件或硬件",
        "D": "同一节点中相邻两层相互作用的地方"
      },
      "answer": [
        "C"
      ],
      "explanation": "实体是指每层中实现该层功能的软件或硬件，可以是程序、模块、子程序或设备。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_1.2.4_10_71f997f278",
      "book": "计算机网络",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.4",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下图是TCP报文段的首部格式，它描述的是网络协议三要素中的（）。 I. 语法 II. 语义 II. 时序（同步）",
      "options": {
        "A": "仅I",
        "B": "仅Ⅱ",
        "C": "仅",
        "D": "I、II和III"
      },
      "answer": [
        "A"
      ],
      "explanation": "网络协议三要素中的语法定义所交换信息的格式，因此TCP首部格式体现了语法的要素。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.1.4_01_3e50e27237",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.4",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于通信基础的基本概念的说法中，正确的是（）。",
      "options": {
        "A": "信道与通信电路类似，一条可通信的电路往往包含一个信道",
        "B": "调制是指把模拟数据转换为数字信号的过程",
        "C": "信息传输速率是指通信信道上每秒传输的码元数",
        "D": "在数值上，波特率等于比特率与每符号所含的比特数的比值"
      },
      "answer": [
        "D"
      ],
      "explanation": "信道不等于通信电路，一条可双向通信的电路往往包含两个信道：一个是发送信道，一个是接收信道。另外，多个通信用户共用通信电路时，每个用户在该通信电路都有一个信道，因此选项A错误。调制是将数据转换为模拟信号的过程，选项B错误。选项C明显错误。“比特率”在数值上和“波特率”的关系如下：波特率=比特率/每符号所含的比特数，选项D正确。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.1.4_02_49ae13dc9e",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.4",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "影响信道最大传输速率的因素主要有（）。",
      "options": {
        "A": "信道带宽和信噪比",
        "B": "码元传输速率和噪声功率",
        "C": "频率特性和带宽",
        "D": "发送功率和噪声功率"
      },
      "answer": [
        "A"
      ],
      "explanation": "根据香农定理，影响信道最大传输速率的因素主要有信道带宽和信噪比，而信噪比与信道内所传输的平均信号功率和噪声功率有关，数值上等于二者之比。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.1.4_03_77a27053a6",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.4",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "（）被用于计算机内部的数据传输。",
      "options": {
        "A": "串行传输",
        "B": "并行传输",
        "C": "同步传输",
        "D": "异步传输"
      },
      "answer": [
        "B"
      ],
      "explanation": "并行传输的特点：距离短、速度快。串行传输的特点：距离长、速度慢。因此，在计算机内部（距离短）传输时应选择并行传输。同步、异步传输是通信方式，而不是传输方式。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.1.4_04_64f731cfd3",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.4",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列有关曼彻斯特编码的叙述中，正确的是（）。",
      "options": {
        "A": "每个信号起始边界作为时钟信号有利于同步",
        "B": "将时钟与数据取值都包含在信号中",
        "C": "这种编码机制特别适合传输模拟数据",
        "D": "每位的中间不跳变表示信号的取值为0"
      },
      "answer": [
        "B"
      ],
      "explanation": "曼彻斯特编码将时钟和数据包含在信号中，在传输数据的同时，也将时钟一起传输给对方，码",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.2.3_01_e888a5c7b1",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "双绞线是用两根绝缘导线绞合而成的，绞合的目的是（）。",
      "options": {
        "A": "减少干扰",
        "B": "提高传输速度",
        "C": "增大传输距离",
        "D": "增大抗拉强度"
      },
      "answer": [
        "A"
      ],
      "explanation": "绞合可以减少两根导线相互的电磁干扰。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.2.3_02_0b02d5d2bb",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "在电缆中采用屏蔽技术带来的好处主要是（）。",
      "options": {
        "A": "减少信号衰减",
        "B": "减少电磁干扰辐射",
        "C": "减少物理损坏 下道",
        "D": "减少电缆的阻抗"
      },
      "answer": [
        "B"
      ],
      "explanation": "屏蔽层的主要作用是提高电缆的抗干扰能力。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.2.3_03_4f37ef076b",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "利用一根同轴电缆互连主机构成以太网，则主机间的通信方式为（）。",
      "options": {
        "A": "全双工",
        "B": "半双工",
        "C": "单工",
        "D": "不确定"
      },
      "answer": [
        "B"
      ],
      "explanation": "传统以太网采用广播的方式发送信息，同一时间只允许一台主机发送信息，否则各主机之间就形成冲突，因此主机间的通信方式是半双工。全双工是指通信双方可同时发送和接收信息。单工是指只有一个方向的通信而没有反方向的交互。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.2.3_04_951c113dd8",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "同轴电缆比双绞线的传输速率更快，得益于（）。",
      "options": {
        "A": "同轴电缆的铜芯比双绞线的粗，能通过更大的电流",
        "B": "同轴电缆的阻抗比较标准，减少了信号的衰减",
        "C": "同轴电缆具有更高的屏蔽性，同时有更好的抗噪声性",
        "D": "以上都正确"
      },
      "answer": [
        "C"
      ],
      "explanation": "同轴电缆以硬铜线为芯，外面包一层绝缘材料，绝缘材料的外面再包一层密织的网状导体，导体的外面又覆盖一层保护性的塑料外壳。这种结构使得它具有更高的屏蔽性，从而既有很高的带宽，又有很好的抗噪性。因此，同轴电缆的带宽更高，得益于它的高屏蔽性。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.2.3_05_80960045d8",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "不受电磁干扰和噪声影响的传输介质是（）。",
      "options": {
        "A": "屏蔽双绞线",
        "B": "非屏蔽双绞线",
        "C": "光纤",
        "D": "同轴电缆"
      },
      "answer": [
        "C"
      ],
      "explanation": "光纤的抗雷电和电磁干扰性能好，无串音干扰，保密性好。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.2.3_06_c5f832c5eb",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "多模光纤传输光信号的原理是（）。",
      "options": {
        "A": "光的折射特性",
        "B": "光的发射特性",
        "C": "光的全反射特性",
        "D": "光的绕射特性"
      },
      "answer": [
        "C"
      ],
      "explanation": "多模光纤传输光信号的原理是光的全反射特性。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.2.3_07_2989e7e43f",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "以下关于单模光纤的说法中，正确的是（）。",
      "options": {
        "A": "光纤越粗，数据传输速率越高",
        "B": "光纤的直径减小到只有光的一个波长大小时，光沿直线传播",
        "C": "光源是发光二极管或激光",
        "D": "光纤是中空的"
      },
      "answer": [
        "B"
      ],
      "explanation": "光纤的直径减小到与光线的一个波长相同时，光纤就如同一个波导，光在其中没有反射，而沿直线传播，这就是单模光纤。\n卫星通信有成本高、传播时延长、受气候影响大、保密性差、误码率较高的特点。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.2.3_09_eed5ca9b68",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "某网络在物理层规定，信号的电平用+10V\\~+15V表示二进制0，用-10V\\~-15V表示二进制1，电线长度限于15m以内，这体现了物理层接口的（）。",
      "options": {
        "A": "机械特性",
        "B": "功能特性",
        "C": "电气特性",
        "D": "规程特性"
      },
      "answer": [
        "C"
      ],
      "explanation": "本题易误选功能特性。规定各条线上的电压范围，以及电缆长度的限制，属于电气特性。而功能特性指明某条线上出现的某一电平的电压表示何种意义，以及每条线的功能（数据线、控制线、时钟线）。例如，数据线上的电压+11V表示二进制1，就属于功能特性。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.2.3_10_7331d29e44",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.3",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "当描述一个物理层接口引脚处于高电平时的含义时，该描述属于（）。",
      "options": {
        "A": "机械特性",
        "B": "电气特性",
        "C": "功能特性",
        "D": "规程特性"
      },
      "answer": [
        "C"
      ],
      "explanation": "物理层的功能特性指明某条线上出现的某一电平的电压表示何种意义，以及每条线的功能。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.3.3_02_6612daaf00",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.3",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "为了使数字信号传输得更远，可采用的设备是（）。",
      "options": {
        "A": "中继器",
        "B": "放大器",
        "C": "网桥",
        "D": "路由器"
      },
      "answer": [
        "A"
      ],
      "explanation": "放大器通常用于远距离地传输模拟信号，但它同时会放大噪声，引发失真。中继器用于数字信号的传输，其工作原理是信号再生，因此会减少失真。网桥用来连接两个网段以扩展物理网络的覆盖范围。路由器是网络层的互连设备，可以实现不同网络的互联。 TO",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.3.3_03_5712050b37",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.3",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "以太网遵循 IEEE 802.3 标准，用粗缆组网时每段的长度不能大于 500m，超过 500m 时就要分段，段间相连利用的是（）。",
      "options": {
        "A": "网络适配器",
        "B": "中继器",
        "C": "调制解调器",
        "D": "网关"
      },
      "answer": [
        "B"
      ],
      "explanation": "中继器的主要功能是将信号复制、整形和放大再转发出去，以消除信号经过一长段电缆而造成的失真和衰减，使信号的波形和强度达到所需的要求，进而扩大网络传输的距离，原理是信号再生，因此选择选项B，其他三项显然有点大材小用。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_2.3.3_04_f55a24b776",
      "book": "计算机网络",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.3",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "由集线器连接多台设备构成的网络在物理上和逻辑上的结构分别是（）。",
      "options": {
        "A": "总线形、环形",
        "B": "网状、星形",
        "C": "总线形、星形",
        "D": "星形、总线形"
      },
      "answer": [
        "D"
      ],
      "explanation": "集线器将多个设备连接在以它为中心的节点上，因此使用它的网络在物理拓扑上属于星形结构。当集线器工作时，一个端口接收到数据信号后，集线器将该信号整形放大，紧接着转发到其他所有处于工作状态的端口。因为集线器不具备交换机所具有的交换表，所以它发送数据时是没有针对性的，而采用广播方式发送。因此，使用集线器的星形以太网逻辑上仍然是总线网。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.1.6_01_ecfe9b7771",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.6",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列选项中，不属于数据链路层功能的是（）。",
      "options": {
        "A": "帧定界",
        "B": "电路管理",
        "C": "差错控制",
        "D": "流量控制"
      },
      "answer": [
        "B"
      ],
      "explanation": "数据链路层的主要功能包括：如何将二进制比特流组织成数据链路层的帧：如何控制帧在物理信道上的传输，包括如何处理传输差错；在两个网络实体之间提供数据链路的建立、维护和释放：控制链路上帧的传输速率，以使接收方有足够的缓存来接收每个帧。这些功能对应头帧定界、差错检测、链路管理和流量控制。电路管理功能由物理层提供。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.1.6_03_0a3e94ce98",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.6",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列选项中，不属于数据链路层协议功能的是（）。",
      "options": {
        "A": "定义数据格式",
        "B": "提供节点之间的可靠传输",
        "C": "控制对物理传输介质的访问",
        "D": "为终端节点隐蔽物理传输的细节"
      },
      "answer": [
        "D"
      ],
      "explanation": "数据链路层的主要功能包括组帧，组帧即定义数据格式，选项A正确。数据链路层在物理层提供的不可靠的物理连接上实现节点到节点的可靠性传输，选项B正确。控制对物理传输介质的访问由数据链路层的介质访问控制（MAC）子层完成，选项C正确。为终端节点隐蔽物理传输的细节是物理层的功能，数据链路层不必考虑如何实现无差别的比特传输，选项D错误。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.1.6_04_4dd541fa95",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.6",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "为了避免传输过程中帧的丢失，数据链路层采用的方法是（）。",
      "options": {
        "A": "帧编号机制",
        "B": "循环冗余检验码",
        "C": "海明码 育",
        "D": "计时器超时重发"
      },
      "answer": [
        "D"
      ],
      "explanation": "为防止在传输过程中丢失帧，在可靠的数据链路层协议中，发送方为发送的每个数据帧设计一个计时器，当计时器到期而该帧的确认帧仍未到达时，发送方将重发该帧。为保证接收方不会接收到重复帧，需要对每个发送的帧进行编号：海明码和循环冗余检验码都用于差错控制。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.1.6_05_696ee629a0",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.6",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "对于信道比较可靠且对实时性要求高的网络，数据链路层采用（）比较合适。",
      "options": {
        "A": "无确认的无连接服务",
        "B": "有确认的无连接服务",
        "C": "无确认的面向连接服务",
        "D": "有确认的面向连接服务"
      },
      "answer": [
        "A"
      ],
      "explanation": "无确认的无连接服务是指源主机发送帧时不需要先建立逻辑连接，目的主机收到帧时不需要发回确认。若因线路上有噪声而造成某一帧丢失，则数据链路层并不检测这样的丢帧现象，也不回复。当错误率很低时，这类服务非常合适，此时恢复任务可由上面的高层来负责。这类服务对实时通信也非常合适，因为实时通信中数据迟到比数据损坏更不好。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.1.6_06_577c22bb32",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.6",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "流量控制实际上是对（）的控制。",
      "options": {
        "A": "发送方的数据流量",
        "B": "接收方的数据流量",
        "C": "发送、接收方的数据流量",
        "D": "链路上任意两节点间的数据流量"
      },
      "answer": [
        "A"
      ],
      "explanation": "流量控制是通过限制发送方的数据流量而使发送方的发送速率不超过接收方接收速率的一\n种技术。流量控制功能并不是数据链路层独有的，其他层上也有相应的控制策略，只是各层的流量控制对象是在相应层的实体之间进行的。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.2.5_01_ed3b48e473",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.5",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "【2013统考真题】HDLC协议对01111100 01111110组帧后，对应的比特串为（）。(注：HDLC协议已从最新大纲中删除。）",
      "options": {
        "A": "01111100 00111110 10",
        "B": "01111100 01111101 01111110 机",
        "C": "01111100 01111101 0",
        "D": "01111100 01111110 01111101"
      },
      "answer": [
        "A"
      ],
      "explanation": "HDLC协议对比特串组帧时，HDLC数据帧以比特模式01111110标识每个帧的起始和结束，因此在帧数据中只要出现5个连续的位“1”，就在输出的位流中填充一个“0”。因此，组帧后的比特串为011111000011111010（下划线部分为新增的0）。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.3.3_01_898a5c6c21",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.3",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列有关数据链路层差错控制的叙述中，错误的是（）。",
      "options": {
        "A": "数据链路层只能提供差错检测，而不提供对差错的纠正",
        "B": "奇偶检验码只能检测出错误而无法对其进行修正，也无法检测出双位错误",
        "C": "CRC检验码可以检测出所有的单比特错误 算机",
        "D": "海明码可以纠正一位差错"
      },
      "answer": [
        "A"
      ],
      "explanation": "链路层的差错控制有两种基本策略：检错编码和纠错编码。常见的纠错编码有海明码，它可",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.3.3_03_0fabf88dc0",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.3",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "字符S的ASCI编码从低到高依次为1100101，采用奇检验，在下述收到的传输后字符中，错误（）不能检测。",
      "options": {
        "A": "11000011",
        "B": "11001010",
        "C": "11001100",
        "D": "11010011"
      },
      "answer": [
        "D"
      ],
      "explanation": "既然采用奇检验，那么传输的数据中1的个数若是偶数则可检测出错误，若1的个数是奇数则检测不出错误。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.3.3_04_5c2a119174",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.3",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "为纠正2比特错误，编码的码距至少应为（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "D"
      ],
      "explanation": "要纠正d位错误，编码的码距需满足2d+1。当d=2时，所需码距为2×2+1=5。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.3.3_05_7ae9bf89ab",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.3",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "对于10位要传输的数据，若采用海明码检验，则需要增加的冗余信息位数是（）。",
      "options": {
        "A": "3",
        "B": "4",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "B"
      ],
      "explanation": "在k比特信息位上附加r比特冗余信息，构成k+ r 比特的码字，必须满足 $2 ^ { r } \\geqslant k + r + 1$ 。若k的取值小于或等于11且大于4，则r=4。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.3.3_06_82ff37dae5",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.3.3",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列关于循环冗余检验的说法中，错误的是（）。",
      "options": {
        "A": "带r个检验位的多项式编码可以检测到所有长度小于或等于r的突发性错误",
        "B": "通信双方可以无须商定就直接使用多项式编码",
        "C": "CRC 检验可以使用硬件来完成",
        "D": "有一些特殊的多项式，因为有很好的特性，而成了国际标准"
      },
      "answer": [
        "B"
      ],
      "explanation": "在使用多项式编码时，发送方和接收方必须预先商定一个生成多项式。发送方按照模2除法，得到检验码，在发送数据时将该检验码加到数据后面。接收方收到数据后，也需要根据该生成多\n项式来验证数据的正确性。选项A是正确结论，了解即可，无须掌握证明过程。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.4.3_03_7fdb317b8b",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.4.3",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "在简单的停止-等待协议中，当帧出现丢失时，发送方会永远等待下去，解决这种死锁现象的办法是（）。",
      "options": {
        "A": "差错检验",
        "B": "帧序号",
        "C": "NAK 机制",
        "D": "超时机制"
      },
      "answer": [
        "D"
      ],
      "explanation": "在停止-等待协议中，发送方设置了计时器，在发送一个帧后，发送方等待确认，若在计时器计满时仍未收到确认，则再次发送相同的帧，以免陷入永久的等待。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.4.3_05_83cad2d3b2",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.4.3",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "一个信道的数据传输速率为 4kb/s，单向传播时延为 30ms，若使停止-等待协议的信道最大利用率达到80%，则要求的数据帧长至少为（）。",
      "options": {
        "A": "160 比特",
        "B": "320 比特",
        "C": "560 比特",
        "D": "960 比特"
      },
      "answer": [
        "D"
      ],
      "explanation": "设C为数据传输速率，L为帧长，R为单程传播时延。停止-等待协议的信道最大利用率为(L/C)/$( L / C + 2 R ) = L / ( L + 2 R C ) = L / ( L + 2 \\times 3 0 \\mathrm { m s } \\times 4 \\mathrm { k b / s } ) = 8 0 \\%$ ，得出L =960bit。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.4.3_06_11888ffbe6",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.4.3",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "主机甲采用停止-等待协议向主机乙发送数据，数据传输速率是6kb/s，单向传播时延是 100ms，忽略确认帧的发送时延。信道的利用率为40%时，数据帧的长度为（）。",
      "options": {
        "A": "240 比特",
        "B": "320 比特",
        "C": "600比特",
        "D": "800 比特"
      },
      "answer": [
        "D"
      ],
      "explanation": "本题忽略确认帧的发送时延，所以信道利用率=数据帧的发送时延/(数据帧的发送时延+往返时延)=0.4，解得数据帧的发送时延为4/30s，所以数据帧的长度为6kb/s×4/30s=800bit。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.4.3_07_3879c508f7",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.4.3",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "在停止-等待协议中，若发送方发送的数据帧中途丢失，则可能发生的情况是（）。",
      "options": {
        "A": "接收方发送NAK帧，请求重发此帧",
        "B": "发送方在经过超时时间后未收到ACK帧，自动重发此帧",
        "C": "接收方在经过超时时间后，向发送方发送ACK帧，请求重发此帧",
        "D": "发送方继续发送后续帧，直到经过超时时间后未收到ACK帧，重发此帧"
      },
      "answer": [
        "B"
      ],
      "explanation": "停止-等待协议使用确认和重传机制，发送方每发送一个帧，就要停下来等待接收方发回的确认帧，收到确认帧后才能发送下一帧，经过超时时间后未收到ACK帧则自动重传。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.5.4_01_6a5a3ac486",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.5.4",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "信道划分介质访问控制的核心思想是（）。",
      "options": {
        "A": "通过分时、分频、分码等方法，将广播信道变为若干点对点信道",
        "B": "胜利者通过争用获得信道，从而获得信息的发送权",
        "C": "通过集中控制方式解决发送信息的次序问题",
        "D": "通过轮询方式依次询问每个站点是否有数据要发送"
      },
      "answer": [
        "A"
      ],
      "explanation": "选项B是随机访问介质访问控制的特点，如CSMA/CD协议。选项C是集中式介质访问控制的特点，如主从式协议，它由一个主站控制所有从站的发送顺序，从站只能在主站允许时才能发送数据。选项D是轮询访问介质访问控制的特点，如令牌传递协议。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.5.4_05_bef3e659dc",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.5.4",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "从表面上看，FDM 比 TDM 能更好地利用信道的传输能力，但现在计算机网络更多地使用 TDM 而非 FDM，其原因是（）。",
      "options": {
        "A": "FDM 实际能力更差",
        "B": "TDM 可用于数字传输而 FDM 不行",
        "C": "FDM技术不成熟",
        "D": "TDM 能更充分地利用带宽"
      },
      "answer": [
        "B"
      ],
      "explanation": "TDM与FDM相比，抗干于扰能力强，可以逐级再生整形，能避免干扰的积累，而且数字信号比较容易实现自动转换，所以根据FDM和TDM的工作原理，FDM适合传输模拟信号，TDM适合传输数字信号。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.5.4_06_1f4845b424",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.5.4",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在下列复用技术中，（）具有动态分配时隙的功能。",
      "options": {
        "A": "同步时分复用",
        "B": "统计时分复用",
        "C": "频分复用",
        "D": "码分复用"
      },
      "answer": [
        "B"
      ],
      "explanation": "时分复用（TDM）分为同步时分复用和异步时分复用（也称统计时分复用）。同步时分复用是一种静态时分复用技术，它预先分配时间片（时隙），而异步时分复用则是一种动态时分复用技术，它动态地分配时间片（时隙）。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.5.4_07_7ad249a80c",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.5.4",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "在下列协议中，不会发生冲突的是（）。",
      "options": {
        "A": "TDM",
        "B": "ALOHA",
        "C": "CSMA",
        "D": "CSMA/CD"
      },
      "answer": [
        "A"
      ],
      "explanation": "TDM属于静态划分信道的方法，各节点分时使用信道，不发生冲突。而ALOHA协议、CSMA协议和CSMA/CD协议都属于动态分配信道的方法，都采用检测冲突的策略来应对冲突，因此都可能发生冲突。注意，随机访问介质访问控制和轮询访问介质访问控制，都属于动态分配信道的方法，但是随机访问介质访问控制可能发生冲突，而轮询访问介质访问控制不发生冲突。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.5.4_08_f939571a66",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.5.4",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "在纯 ALOHA 协议中，一个站点想要发送数据时（）。",
      "options": {
        "A": "必须等待信道空闲",
        "B": "必须等待下一个时间槽开始",
        "C": "可以立即发送",
        "D": "必须先发送 RTS 帧"
      },
      "answer": [
        "C"
      ],
      "explanation": "在纯ALOHA协议中，一个站点想要发送数据时可以立即发送，而不需要等待信道空闲或下一个时间槽开始，也不需要先发送RTS帧。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.6.5_01_37bbb7bdd7",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.5",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列以太网中，采用双绞线作为传输介质的是（）。",
      "options": {
        "A": "10Base-2",
        "B": "10Base-5",
        "C": "10Base-T",
        "D": "10Base-F"
      },
      "answer": [
        "C"
      ],
      "explanation": "这里Base前面的数字代表数据率，单位为Mb/s；Base指介质上的信号为基带信号（基带传输，采用曼彻斯特编码）；后面的5或2表示每段电缆的最长长度为500m或200m（实际上为185m），T表示双绞线，F表示光纤。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.6.5_02_b5eb55ccda",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "10Base-T以太网采用的传输介质是（）。",
      "options": {
        "A": "双绞线",
        "B": "同轴电缆",
        "C": "光纤",
        "D": "微波"
      },
      "answer": [
        "A"
      ],
      "explanation": "局域网通常采用类似10Base-T的方式来表示，其中第1 部分的数字表示数据传输速率，如10表示10Mb/s、100表示100Mb/s；第2部分的Base表示基带传输。第3部分若是字母，则表示传输介质，如T表示双绞线、F表示光纤；若是数字，则表示所支持的最大传输距离。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.6.5_03_56e288a518",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "就交换技术而言，以太网采用的是（）。",
      "options": {
        "A": "分组交换技术",
        "B": "电路交换技术",
        "C": "报文交换技术",
        "D": "混合交换技术"
      },
      "answer": [
        "A"
      ],
      "explanation": "在以太网中，数据以帧的形式传输。源端用户的较长报文需要分为若于数据块，这些数据块在各层中还要加上相应的控制信息，在网络层中是分组，在数据链路层中是以太网的帧。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.6.5_04_5dfec74c46",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.5",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "网卡实现的主要功能在（）。",
      "options": {
        "A": "物理层和数据链路层",
        "B": "数据链路层和网络层",
        "C": "物理层和网络层",
        "D": "数据链路层和应用层"
      },
      "answer": [
        "A"
      ],
      "explanation": "通常情况下，网卡是用来实现以太网协议的。网卡不仅能实现与局域网传输介质之间的物理连接和电信号匹配，还涉及帧的发送与接收、帧的封装与拆封、介质访问控制、数据的编码与解码及数据缓存等功能，因此实现的功能主要在物理层和数据链路层。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.6.5_05_531cc6f0e8",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.5",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "每个以太网卡都有自己的时钟，每个网卡在互相通信时为了知道什么时候一位结束、下一位开始，即具有同样的频率，它们采用了（）。",
      "options": {
        "A": "量化机制",
        "B": "曼彻斯特机制",
        "C": "奇偶检验机制",
        "D": "定时令牌机制"
      },
      "answer": [
        "B"
      ],
      "explanation": "10Base-T以太网使用曼彻斯特编码。曼彻斯特编码提取每个比特中间的电平跳变作为收发双方的同步信号，不需要额外的同步信号，是一种“自含时钟编码”的编码方式。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.6.5_31_99f11c17f6",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.6.5",
      "section_title": "本节习题精选",
      "num": 31,
      "type": "single_choice",
      "question": "在下图所示的网络中，假定主机 A 给主机 B 发送数据，在 MAC 帧从接入点 AP2 转发到目的主机 B的这段链路上，MAC帧的地址1、地址2和地址3分别是（）。 地址M ${ \\mathrm { I A C } } _ { \\mathrm { A } }$ 地址BSSID1 地址BSSID2 地址MACE",
      "options": {
        "A": "BSSID2, BSSID1, $\\mathbf { M A C } _ { \\mathrm { B } }$",
        "B": "$\\mathbf { M A C } _ { \\mathrm { B } }$ , BSSID2, BSSID1",
        "C": "BSSID2, $\\mathbf { M A C } _ { \\mathrm { B } }$ $\\mathbf { M A C _ { A } }$",
        "D": "$\\mathbf { M A C _ { B } } .$ BSSID2, $\\mathbf { M A C } _ { 2 }$ V"
      },
      "answer": [
        "D"
      ],
      "explanation": "MAC 帧是从 AP发送到主机 B 的，即“去往 $\\mathbf { A P = 0 } ^ { \\prime \\prime }$ 而“来自 $\\mathbf { A P } = 1 \\mathbf { \\Lambda } ^ { \\prime \\prime }$ 。因此，地址1是B的 MAC 地址，即 $\\mathrm { { M A C } _ { \\mathrm { { B } } } ; }$ 地址2 是AP2的 BSSID，即 ${ \\mathrm { B S S I D } } _ { 2 }$ ；地址3是源地址，是路由器的接口2的MAC地址，即 $\\mathbf { M A C } _ { 2 }$",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.7.3_01_e8444bb358",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.7.3",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "局域网和广域网的差异不仅在于它们所覆盖的范围不同，还主要在于它们（）。",
      "options": {
        "A": "所使用的介质不同",
        "B": "所使用的协议不同",
        "C": "所能支持的通信量不同",
        "D": "所提供的服务不同"
      },
      "answer": [
        "B"
      ],
      "explanation": "广域网和局域网之间的差异不仅在于它们所覆盖的范围不同，还在于它们所采用的协议和网络技术不同，广域网使用点对点等技术，局域网使用广播技术。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.7.3_02_0a5ecca72d",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.7.3",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "广域网覆盖的地理范围从几十千米到几千千米，它的通信子网主要使用（）。",
      "options": {
        "A": "报文交换技术",
        "B": "分组交换技术",
        "C": "文件交换技术",
        "D": "电路交换技术"
      },
      "answer": [
        "B"
      ],
      "explanation": "广域网的通信子网主要使用分组交换技术，将分布在不同地区的局域网或计算机系统互连起来，达到资源共享的目的。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.7.3_03_5852e7f7f5",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.7.3",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "广域网所使用的传输方式是（）。",
      "options": {
        "A": "广播式",
        "B": "存储转发式",
        "C": "集中控制式",
        "D": "分布控制式"
      },
      "answer": [
        "B"
      ],
      "explanation": "广域网通常指覆盖范围很广的长距离网络，它由一些节点交换机及连接这些交换机的链路组成，其中节点交换机执行分组存储、转发功能。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.8.4_01_7c895f9bf4",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.8.4",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列网络连接设备都工作在数据链路层的是（）。",
      "options": {
        "A": "中继器和集线器",
        "B": "集线器和网桥",
        "C": "网桥和局域网交换机 首计",
        "D": "集线器和局域网交换机"
      },
      "answer": [
        "C"
      ],
      "explanation": "中继器和集线器都属于物理层设备，网桥和局域网交换机属于数据链路层设备。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.8.4_02_d2581db191",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.8.4",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于数据链路层设备的叙述中，错误的是（）。",
      "options": {
        "A": "交换机将网络划分成多个网段，一个网段的故障不会影响到另一个网段的运行",
        "B": "交换机可互连不同的物理层、不同的MAC子层及不同速率的以太网",
        "C": "交换机的每个接口节点所占用的带宽不会因为接口节点数量的增加而减少，且整个交换机的总带宽会随着接口节点的增加而增加",
        "D": "利用交换机可以实现虚拟局域网（VLAN），VLAN可以隔离冲突域，但不能隔离广播域"
      },
      "answer": [
        "D"
      ],
      "explanation": "首\n交换机的优点是每个接口节点所占用的带宽不会因为接口节点数量的增加而减少，且整个交换机的总带宽会随着接口节点的增加而增加。另外，利用交换机可以实现虚拟局域网（VLAN），VLAN不仅可以隔离冲突域，还可以隔离广播域。因此选项C正确，选项D错误。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.8.4_03_e8b38f1a54",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.8.4",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列（）不是使用交换机分割网络所带来的好处。",
      "options": {
        "A": "减少冲突域的范围",
        "B": "在一定条件下增加了网络的带宽",
        "C": "过滤网段之间的数据",
        "D": "缩小了广播域的范围"
      },
      "answer": [
        "D"
      ],
      "explanation": "交换机可以隔离信息，将网络划分成多个网段，隔离出安全网段，防止其他网段内的用户非法访问。因为网络分段，各网段相对独立，所以一个网段的故障不影响另一个网段的运行。因此B、C正确。根据交换机的特点可知A正确，D错误。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.8.4_04_e0ab041316",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.8.4",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列不能分割冲突域的设备是（）。",
      "options": {
        "A": "集线器",
        "B": "交换机",
        "C": "路由器",
        "D": "网桥"
      },
      "answer": [
        "A"
      ],
      "explanation": "冲突域是指共享同一信道的各个站点可能发生冲突的范围。物理层设备集线器不能分割冲突\n域，数据链路层设备交换机和网桥可以分割冲突域，但不能分割广播域，而网络层设备路由器既可分割冲突域，又可分割广播域。 海村",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.8.4_08_cba1b9ccf6",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.8.4",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "一个16接口的集线器的冲突域和广播域的个数分别是（）。",
      "options": {
        "A": "16, 1",
        "B": "16, 16",
        "C": "1, 1",
        "D": "1, 16"
      },
      "answer": [
        "C"
      ],
      "explanation": "物理层设备（中继器和集线器）既不能分割冲突域，又不能分割广播域。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.8.4_09_8c95801dfd",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.8.4",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "一个16个接口的以太网交换机，冲突域和广播域的个数分别是（）。",
      "options": {
        "A": "1, 1",
        "B": "16, 16",
        "C": "1, 16",
        "D": "16, 1"
      },
      "answer": [
        "D"
      ],
      "explanation": "以太网交换机的各接口之间都是冲突域的终止点，但LAN交换机不隔离广播，所以冲突域的个数是16，广播域的个数是1。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.8.4_12_64f9c9ac65",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.8.4",
      "section_title": "本节习题精选",
      "num": 12,
      "type": "single_choice",
      "question": "对于由交换机连接的10Mb/s以太网，若有10个用户，则每个用户能占有的带宽为（）。",
      "options": {
        "A": "1Mb/s",
        "B": "2Mb/s",
        "C": "10Mb/s",
        "D": "100Mb/s"
      },
      "answer": [
        "C"
      ],
      "explanation": "对于集线器连接的10Mb/s共享式以太网，若有N个用户，则每个用户的平均带宽仅为总带宽的1/N。当采用交换机连接时，虽然从每个接口到主机的带宽还是10Mb/s，但因为一个用户通信时是独占带宽的，而不是和其他用户共享带宽的，所以每个用户仍可得到10Mb/s的带宽。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_3.8.4_18_fd09704718",
      "book": "计算机网络",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.8.4",
      "section_title": "本节习题精选",
      "num": 18,
      "type": "single_choice",
      "question": "某以太网如下图所示，假设交换机1和交换机2的交换表初始为空，各主机之间依次进行以下通信：A→B、H→",
      "options": {
        "A": "E→X、X→E，则关于上述通信过程叙述错误的是（）。 A. 当 A→B 时，除 A 外的全部主机都能收到 A 发送的帧",
        "B": "当H→A时，仅 A 能收到 H发送的帧",
        "C": "当E→X时，仅X能收到E发送的帧",
        "D": "当 X→E时，交换机 2 收不到 X发送的帧"
      },
      "answer": [
        "C"
      ],
      "explanation": "当A→B时，交换表都为空，交换机1和交换机2都进行洪泛发送，因此除A外的全部主机都能收到A发送的帧。当H→A时，因为交换机2已登记A所在的接口为3，所以只向接口3转发，交换机1收到帧后，因为交换机1已登记A所在的接口为1，所以只向接口1转发，因此仅A能收到H发送的帧。当E一X时，集线器向除输入接口外的所有接口转发该帧，交换机1和交换机2也进行洪泛发送，因此除E外的全部主机都能收到A发送的帧。当X→E时，因为交换机1已登记E所在的接口为2，所以仅登记X所在的接口，并丢弃该帧。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.1.6_01_34b2bdcb78",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "路由器连接的异构网络是指（）。",
      "options": {
        "A": "网络的拓扑结构不同 十算机孝",
        "B": "网络中计算机操作系统不同",
        "C": "数据链路层协议和物理层协议至少有一个不同",
        "D": "数据链路层协议相同，物理层协议不同"
      },
      "answer": [
        "C"
      ],
      "explanation": "网络的异构性是指传输介质、数据编码方式、链路控制协议及不同的数据单元格式和转发机制，这些特点分别在物理层协议和数据链路层协议中定义。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.1.6_02_dc518daba1",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "网络中发生了拥塞，根据是（）。",
      "options": {
        "A": "随着通信子网负载的增加，吞吐量也增加",
        "B": "网络节点接收和发出的分组越来越少",
        "C": "网络节点接收和发出的分组越来越多",
        "D": "随着通信子网负载的增加，吞吐量反而降低"
      },
      "answer": [
        "D"
      ],
      "explanation": "拥塞现象是指到达通信子网中某一部分的分组数量过多，使得该部分网络来不及处理，以致这部分乃至整个网络性能下降的现象，严重时甚至导致网络通信业务陷入停顿，即出现死锁现象。选项A的网络性能显然是提高的，选项B、C中网络节点接收和发出的分组多少与网络的吞吐量不成正比，不能确定网络是否拥塞。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.1.6_03_68a8b5100d",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "在路由器互连的多个局域网的结构中，要求每个局域网（）。",
      "options": {
        "A": "物理层协议可以不同，而数据链路层及其以上的高层协议必须相同",
        "B": "物理层、数据链路层协议可以不同，而数据链路层以上的高层协议必须相同",
        "C": "物理层、数据链路层、网络层协议可以不同，而网络层以上的高层协议必须相同",
        "D": "物理层、数据链路层、网络层及高层协议都可以不同"
      },
      "answer": [
        "C"
      ],
      "explanation": "路由器是第三层设备，向传输层及以上层隐藏下层的具体实现，所以物理层、数据链路层、网络层协议可以不同。而网络层之上的协议数据是路由器所不能处理的，因此网络层以上的高层协议必须相同。本题容易误选B，主要原因是在目前的互联网中广泛使用的是TCP/IP族，在网络层多用IPv4，所以误认为网络层协议必须相同。实际上，使用特定的路由器连接IPv4与IPv6网络，就是典型的网络层协议不同而实现互连的例子。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.1.6_05_7c0de6f55b",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "路由器转发分组的根据是报文的（）。",
      "options": {
        "A": "端口号",
        "B": "MAC 地址",
        "C": "IP地址",
        "D": "域名"
      },
      "answer": [
        "C"
      ],
      "explanation": "路由器是网络层设备，网络层通过IP地址标识主机，所以路由器根据IP地址转发分组。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.1.6_06_d0be5da10c",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.6",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "路由器在能够开始向输出链路传输分组的第一位之前，必须先接收到整个分组，这种机制称为（）。",
      "options": {
        "A": "存储转发机制",
        "B": "直通交换机制",
        "C": "分组交换机制",
        "D": "分组检测机制"
      },
      "answer": [
        "A"
      ],
      "explanation": "路由器转发一个分组的过程如下：先接收整个分组，然后对分组进行错误检查，若出错，则丢弃错误的分组：否则存储这个正确的分组。最后根据路由选择协议，将正确的分组转发到合适的端口，这种机制称为存储转发机制。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.3.5_05_c224cd84f8",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.3.5",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列关于IPv6 的描述中，错误的是（）。",
      "options": {
        "A": "IPv6 的首部长度是不可变的",
        "B": "IPv6 不允许在中间路由器进行分片",
        "C": "IPv6 采用了16B 的地址，在可预见的将来不会用完",
        "D": "IPv6使用了首部检验和来保证传输的正确性"
      },
      "answer": [
        "D"
      ],
      "explanation": "在数据链路层，MAC地址用来标识主机或路由器，数据报到达具体的目的网络后，需要知道目的主机的MAC地址才能成功送达，因此需要将P地址转换成对应的MAC地址，即物理地址。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.3.5_06_9fd5207296",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.3.5",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "若一个路由器收到的IPv6数据报因太大而不能转发到链路上，则路由器将把该数据报（）。",
      "options": {
        "A": "丢弃",
        "B": "暂存",
        "C": "分片",
        "D": "转发至能支持该数据报的链路上"
      },
      "answer": [
        "D"
      ],
      "explanation": "数据报被分片后，每个分片都将独立地传输到目的地，其间有可能会经过不同的路径，而最后在目的端主机分组才能被重组。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.3.5_07_61cbe189f9",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.3.5",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "【2023统考真题】下列关于IPv4和IPv6的叙述中，正确的是（）。I. IPv6 地址空间是 IPv4 地址空间的 96 倍II. IPv4 首部和IPv6 基本首部的长度均可变Ⅲ. IPv4 向 IPv6 过渡可以采用双协议栈和隧道技术",
      "options": {
        "A": "仅I、Ⅱ",
        "B": "仅I、IV",
        "C": "仅II、III",
        "D": "仅III、IV"
      },
      "answer": [
        "A"
      ],
      "explanation": "在P首部中，标识字段的用途是让目标机器确认一个新到达的分片是否属于同一个数据报，用于重组分片后的IP数据报。标志字段中的DF表示是否允许分片，MF表示后面是否还有分片。片偏移则指出分组在分片后某片在原分组中的相对位置。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.4.6_01_1a36e6d097",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.4.6",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于动态路由选择和静态路由选择的主要区别的描述中，正确是（）。",
      "options": {
        "A": "动态路由选择需要维护整个网络的拓扑结构信息，而静态路由选择只需要维护部分拓扑结构信息",
        "B": "动态路由选择可随网络的通信量或拓扑变化而自适应地调整，而静态路由选择则需要手工去调整相关的路由信息",
        "C": "动态路由选择简单且开销小，静态路由选择复杂且开销大",
        "D": "动态路由选择使用路由表，静态路由选择不使用路由表"
      },
      "answer": [
        "B"
      ],
      "explanation": "静态路由选择使用手动配置的路由信息，实现简单且开销小，需要维护整个网络的拓扑结构信息，但不能及时适应网络状态的变化。动态路由选择通过路由选择协议，自动发现并维护路由信息能及时适应网络状态的变化，实现复杂且开销大。动态路由选择和静态路由选择都使用路由表。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.4.6_02_c86aee7f54",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.4.6",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于路由算法的描述中，错误的是（）。",
      "options": {
        "A": "静态路由有时也被称为非自适应算法",
        "B": "静态路由所使用的路由选择一旦启动就不能修改",
        "C": "动态路由也称自适应算法，会根据网络的拓扑变化和流量变化改变路由决策",
        "D": "动态路由算法需要实时获得网络的状态"
      },
      "answer": [
        "B"
      ],
      "explanation": "静态路由也称非自适应算法，它不会估计流量和结构来调整其路由决策。但是，这并不说明路由选择是不能改变的，事实上用户可以随时配置路由表。而动态路由也称自适应算法，需要实时获取网络的状态，并根据网络的状态适时地改变路由决策。 KKK",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.4.6_03_69fbb9118a",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.4.6",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列关于链路状态协议的描述中，错误的是（）。",
      "options": {
        "A": "仅相邻路由器需要交换各自的路由表",
        "B": "全网路由器的拓扑数据库是一致的",
        "C": "采用洪泛技术更新链路变化信息",
        "D": "具有快速收敛的优点"
      },
      "answer": [
        "A"
      ],
      "explanation": "在链路状态算法中，每个路由器在自己的链路状态变化时，将链路状态信息用洪泛法发送给网络中的其他路由器。发送的链路状态信息包括该路由器的相邻路由器及所有相邻链路的状态。链路状态算法具有快速收敛的优点，它能在网络拓扑发生变化时，立即进行路由的重新计算，并及时向其他路由器发送最新的链路状态信息，使得各路由器的链路状态表能够尽量保持一致。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.4.6_04_b5e7a86b0f",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.4.6",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "在链路状态算法中，每个路由器都得到网络的完整拓扑结构后，使用（）算法来找出它到其他路由器的路径长度。",
      "options": {
        "A": "Prim 最小生成树算法",
        "B": "Dijkstra 最短路径算法",
        "C": "Kruskal 最小生成树算法",
        "D": "拓扑排序"
      },
      "answer": [
        "B"
      ],
      "explanation": "在链路状态算法中，路由器通过交换每个节点到邻居节点的代价来构建一个完整的网络拓扑结构。然后，路由器使用Dijkstra最短路径算法来计算到所有节点的最短路径。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.4.6_05_5d567b7726",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.4.6",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列关于分层路由的描述中，错误的是（）。",
      "options": {
        "A": "采用分层路由后，路由器被划分成区域",
        "B": "每个路由器不仅知道如何将分组路由到自己区域的目标地址，还知道如何路由到其他区域",
        "C": "采用分层路由后，可以将不同的网络连接起来 道计",
        "D": "对于大型网络，可能需要多级的分层路由来管理"
      },
      "answer": [
        "B"
      ],
      "explanation": "采用分层路由后，路由器被划分为区域，每个路由器知道如何将分组路由到自己所在区域内的目标地址，但对于其他区域内的结构毫不知情。当不同的网络相互连接时，可将每个网络当作一个独立的区域，这样做的好处是一个网络中的路由器不必知道其他网络的拓扑结构。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.4.6_06_89997b74f3",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.4.6",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "以下关于自治系统的描述中，错误的是（）。 Y",
      "options": {
        "A": "自治系统划分区域的好处是，将利用洪泛法交换链路状态信息的范围局限在每个区域内，而不是整个自治系统",
        "B": "采用分层划分区域的方法使交换信息的种类增多，同时也使OSPF协议更加简单",
        "C": "OSPF协议将一个自治系统再划分为若干更小的范围，称为区域",
        "D": "在一个区域内部的路由器只知道本区域的网络拓扑，而不知道其他区域的网络拓扑的情况"
      },
      "answer": [
        "B"
      ],
      "explanation": "划分区域的好处是，将利用洪泛法交换链路状态信息的范围局限在每个区域内，而不是整个自治系统。因此，在一个区域内部的路由器只知道本区域的网络拓扑情况，而不知道其他区域的网络拓扑情况。采用分层次划分区域的方法虽然使交换信息的种类增多了，同时也使OSPF协议更加复杂了，但是，这样做却能使每个区域内部交换路由信息的通信量大大减少，进而使OSPF协议能够用于规模很大的自治系统中。 KKN",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.5.5_01_373941a784",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.5.5",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于多播概念的描述中，错误的是（）。",
      "options": {
        "A": "在单播路由选择中，路由器只能从它的一个接口转发收到的分组",
        "B": "在多播路由选择中，路由器可以从它的多个接口转发收到的分组",
        "C": "用多个单播仿真一个多播时需要更多的带宽",
        "D": "用多个单播仿真一个多播时时延基本上是相同的"
      },
      "answer": [
        "D"
      ],
      "explanation": "多个单播可以仿真多播，但是一个多播所需的带宽要小于多个单播带宽之和；用多个单播仿真一个多播时，路由器的时延将很大，而处理一个多播分组的时延是很小的。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.5.5_02_343bff7a02",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.5.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "在设计多播路由时，为了避免路由环路，（)。",
      "options": {
        "A": "采用了水平分割技术",
        "B": "构造多播转发树",
        "C": "采用了 IGMP 道计",
        "D": "通过生存时间（TTL）字段"
      },
      "answer": [
        "B"
      ],
      "explanation": "因为树具有不存在环路的特性，所以构造一个多播转发树，通过该转发树，既能将多播分组传送到组内的每台主机，又能避免环路「见图4.24(b)]。水平分割用于避免距离-向量算法中的无穷计数问题。TTL字段用于防止P分组因为环路而在网络中无限循环。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.5.5_03_428ecbb814",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.5.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "以太网多播IP地址 224.215.145.230 应该映射到的多播MAC 地址是（）。",
      "options": {
        "A": "01-00-5E-57-91-E6",
        "B": "01-00-5E-D7-91-E6",
        "C": "01-00-5E-5B-91-E6",
        "D": "01-00-5E-55-91-E6"
      },
      "answer": [
        "A"
      ],
      "explanation": "以太网多播地址块的范围是01-00-5E-00-00-00～01-00-5E-7F-FF-FF，而且在每个地址中，只有后23位可用多播。这样，只能和D类IP地址中的后23位有一一对应关系。D类IP地址可供分配的有28位，可见这28位中的前5位不能用来构成以太网硬件地址。215的二进制为11010111，其中，在映射过程中最高位为0，因此215.145.230映射的二进制为01010111.10010001.11100110，对应的十六进制数是57-91-E6。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.6.3_01_11c039faaa",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.6.3",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "以下关于移动IP工作原理的描述中，错误的是（）。",
      "options": {
        "A": "移动IP的基本工作过程可以分为代理发现、注册、分组路由与注销4个阶段",
        "B": "节点在使用移动IP进行通信时，归属代理和外部代理之间需要建立一条隧道",
        "C": "移动节点到达新的网络后，通过注册过程把自己新的可达信息通知外部代理",
        "D": "移动IP的分组路由可以分为单播、广播与多播"
      },
      "answer": [
        "C"
      ],
      "explanation": "选项C向归属代理通知移动节点的新可达信息（转交地址）。这样，归属代理就可将发往移动节点的分组通过隧道转到转交地址（外部代理），再由外部代理交付给移动节点。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.6.3_02_8425cb0be6",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.6.3",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "移动IP为移动主机设置了两个IP地址：归属地址和转交地址，（）。",
      "options": {
        "A": "这两个地址都是固定的",
        "B": "这两个地址随主机的移动而动态改变",
        "C": "归属地址固定，转交地址动态改变",
        "D": "归属地址动态改变，转交地址固定"
      },
      "answer": [
        "C"
      ],
      "explanation": "移动主机在原始本地网时，获得的是主地址，当它移动到一个外地网络时，需获得一个新的临时辅地址，主地址保持不变：当它移动到另一个外地网络或返回本地网络时，辅地址改变或撤销，而主地址仍然保持不变。选项C正确。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.7.4_01_948a029480",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.7.4",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "要控制网络上的广播风暴，可以采用的方法是（）。 十子",
      "options": {
        "A": "用交换机将网络分段",
        "B": "用路由器将网络分段1",
        "C": "将网络转接成 10Base-T",
        "D": "用网络分析仪跟踪正在发送广播信息的计算机"
      },
      "answer": [
        "B"
      ],
      "explanation": "网桥和交换机是第二层设备，能够分割冲突域，但不能分割广播域。路由器是第三层设备，不转发全网广播（目的地255.255.255.255），因此可以分割广播域。 K",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.7.4_02_9edd195685",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.7.4",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于冲突域的叙述中，正确的是（）。",
      "options": {
        "A": "能接收到同一广播帧的所有设备的集合",
        "B": "能发送同一广播帧的所有设备的集合",
        "C": "能产生冲突的所有设备的集合",
        "D": "能隔离冲突的所有设备的集合"
      },
      "answer": [
        "C"
      ],
      "explanation": "冲突域是指能产生冲突的所有设备的集合，也就是说，若这些设备同时发送数据，则会发生信号干扰和冲突。冲突域的大小取决于网络拓扑和设备类型。 V",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.7.4_03_113a2bb374",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.7.4",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列设备中，能够分隔广播域的是（）。",
      "options": {
        "A": "集线器",
        "B": "交换机",
        "C": "路由器",
        "D": "中继器"
      },
      "answer": [
        "C"
      ],
      "explanation": "路由器工作在网络层，不转发广播包（目的地址为255.255.255.255的IP包），因此能够分隔广播域，抑制网络风暴。交换机工作在数据链路层，能够分隔冲突域，但不能分隔广播域。集线器和中继器是物理层设备，既不能分隔广播域，又不能分隔冲突域。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_4.7.4_04_b9d8203ebe",
      "book": "计算机网络",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.7.4",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "一个局域网与在远处的另一个局域网互连，则需要用到（）。",
      "options": {
        "A": "物理通信介质和集线器",
        "B": "网间连接器和集线器",
        "C": "路由器和广域网技术",
        "D": "广域网技术"
      },
      "answer": [
        "C"
      ],
      "explanation": "局域网的互连需要路由器作为连接设备，同时是远程的局域网，因此要用到广域网技术。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.1.4_03_0c91e0773c",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列关于传输层的面向连接服务特性的说法中，正确的是（）。",
      "options": {
        "A": "不保证可靠和顺序交付",
        "B": "不保证可靠但保证顺序交付",
        "C": "保证可靠但不保证顺序交付",
        "D": "保证可靠和顺序交付"
      },
      "answer": [
        "D"
      ],
      "explanation": "面向连接服务是指通信双方在进行通信之前，要先建立一个完整的连接，在通信过程中，整个连接一直可以被实时地监控和管理。通信完毕后释放连接。面向连接的服务可以保证数据的可靠和顺序交付。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.1.4_04_7dee816f3e",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "在TCP/IP模型中，传输层的主要作用是在互联网的源主机和目的主机对等实体之间建立用于会话的（）。",
      "options": {
        "A": "操作连接",
        "B": "点到点连接",
        "C": "控制连接",
        "D": "端到端连接"
      },
      "answer": [
        "D"
      ],
      "explanation": "传输层的主要作用是在源主机进程和目的主机进程之间提供端到端的数据传输。一般来说，端到端通信是由一段段的点到点信道构成的，端到端协议建立在点到点协议的基础之上。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.1.4_06_ece5d79ba9",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列选项中，（）能够唯一确定一个在互联网上通信的进程。",
      "options": {
        "A": "主机名",
        "B": "IP 地址及 MAC 地址",
        "C": "MAC 地址及端口号",
        "D": "IP地址及端口号"
      },
      "answer": [
        "D"
      ],
      "explanation": "要在互联网上唯一确定一个进程，就要使用P地址和端口号的组合，通常称为套接字（Socket），IP地址确定某主机，端口号确定该主机上的某进程。 X",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.1.4_07_bf6c938c01",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "在（）范围内的端口号被称为熟知端口号并限制使用，这些端口号是为常用的应用层协议如FTP、HTTP等保留的。",
      "options": {
        "A": "0\\~127",
        "B": "0\\~255",
        "C": "0\\~511",
        "D": "0\\~1023"
      },
      "answer": [
        "D"
      ],
      "explanation": "熟知端口号的数值为0～1023，登记端口号的数值是1024～49151，客户端使用的端口号的数值是49152\\~65535。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.1.4_08_f9f2d8bcfe",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列哪个TCP熟知端口号是错误的？（）",
      "options": {
        "A": "TELNET:23",
        "B": "SMTP:25",
        "C": "HTTP:80",
        "D": "FTP:24"
      },
      "answer": [
        "D"
      ],
      "explanation": "FTP控制连接的端口是21，数据连接的端口是20。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.1.4_09_b253ce4f59",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于TCP和UDP端口的说法中，正确的是（）。",
      "options": {
        "A": "TCP和UDP分别拥有自己的端口号，它们互不干扰，可以共存于同一台主机",
        "B": "TCP和UDP分别拥有自己的端口号，但它们不能共存于同一台主机",
        "C": "TCP和UDP的端口没有本质区别，但它们不能共存于同一台主机",
        "D": "当一个TCP连接建立时，它们互不干扰，不能共存于同一台主机"
      },
      "answer": [
        "A"
      ],
      "explanation": "端口号只具有本地意义，即端口号只标识本计算机应用层中的各个进程。同一台计算机中的TCP和UDP分别拥有自己的端口号，它们互不干扰，因此UDP和TCP可以使用相同的端口号。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.1.4_10_616952f032",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.4",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于传输层及相关协议的说法中，错误的是（）。",
      "options": {
        "A": "传输层是OSI参考模型的第四层",
        "B": "传输层提供的是主机间的点到点数据传输",
        "C": "TCP是面向连接的，UDP是无连接的",
        "D": "TCP进行流量控制和拥塞控制，而UDP既不进行流量控制，又不进行拥塞控制"
      },
      "answer": [
        "B"
      ],
      "explanation": "传输层是OSI参考模型中的第4层，TCP是面向连接的，它提供流量控制和拥塞控制，保证\n服务可靠；UDP是无连接的，不提供流量控制和拥塞控制，只能做出尽最大努力的交付。传输层提供的是进程到进程间的传输服务，也称端到端服务。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.2.3_01_c078a9867c",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "使用UDP的网络应用，其数据传输的可靠性由（）协议负责。",
      "options": {
        "A": "传输层",
        "B": "应用层",
        "C": "数据链路层",
        "D": "网络层"
      },
      "answer": [
        "B"
      ],
      "explanation": "UDP在网络层的IP基础之上增加了复用分用和有限的差错控制，IP的特点是尽最大努力交付。UDP在传送数据时没有流量控制机制，也没有确认机制，是一个不可靠的传输层协议。若网络应用使用UDP传输数据，则必须在传输层的上层即应用层提供可靠性的工作。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.2.3_02_d55f8914b5",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于UDP的描述中，错误的是（）。",
      "options": {
        "A": "UDP报头主要包括端口号、长度、检验和等字段",
        "B": "UDP长度字段是UDP数据报的长度，包括伪首部的长度",
        "C": "UDP检验和对伪首部、UDP报文头及应用层数据进行检验",
        "D": "伪首部包括IP分组报头的一部分"
      },
      "answer": [
        "B"
      ],
      "explanation": "伪首部只是在计算检验和时临时添加的，不计入UDP的长度。对于选项D，伪首部包括源IP和目的IP，这是IP分组报头的一部分。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.2.3_03_dd8787e29d",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "UDP数据报首部不包含（）。",
      "options": {
        "A": "UDP 源端口号",
        "B": "UDP 检验和",
        "C": "UDP目的端口号",
        "D": "UDP 数据报首部长度"
      },
      "answer": [
        "D"
      ],
      "explanation": "UDP数据报的格式包括UDP源端口号、UDP目的端口号、UDP报文长度和检验和，但不包括UDP数据报首部长度。因为UDP数据报首部长度是固定的8B，所以没有必要再设置首部长度字段。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.2.3_04_6e928ca4b6",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "UDP数据报中的长度字段（）。",
      "options": {
        "A": "不记录数据的长度",
        "B": "只记录首部的长度",
        "C": "只记录数据部分的长度",
        "D": "包括首部和数据部分的长度"
      },
      "answer": [
        "D"
      ],
      "explanation": "长度字段记录UDP数据报的长度（包括首部和数据部分），以字节为单位。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.2.3_06_67f514d2ad",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列关于UDP的描述，正确的是（）。",
      "options": {
        "A": "给出数据的按序投递",
        "B": "不允许多路复用",
        "C": "拥有流量控制机制",
        "D": "是无连接的"
      },
      "answer": [
        "D"
      ],
      "explanation": "UDP是不可靠的，所以没有数据的按序投递，排除选项A；UDP只在IP层的数据报服务上增加了很少的一点功能，即复用和分用功能及差错检测功能，排除选项B；显然UDP没有流量控制，排除选项C；UDP是传输层的无连接协议，答案为选项D。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.2.3_07_fab7871ec9",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "接收方收到有差错的UDP数据报时的处理方式是（）。",
      "options": {
        "A": "丢弃",
        "B": "请求重传",
        "C": "差错校正",
        "D": "忽略差错"
      },
      "answer": [
        "A"
      ],
      "explanation": "接收端通过检验发现数据有差错，就直接丢弃该数据报，仅此而已。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.2.3_10_974af9f660",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列网络应用中，不适合使用UDP的是（）。",
      "options": {
        "A": "客户/服务器领域",
        "B": "远程调用",
        "C": "实时多媒体应用",
        "D": "远程登录"
      },
      "answer": [
        "D"
      ],
      "explanation": "UDP的特点是开销小，时间性能好且易于实现。在客户/服务器模型中，它们之间的请求报文都很短，使用UDP不但编码简单，而且只需要很少的消息。远程调用使用UDP的理由和客户/服务器模型的类似。对于实时多媒体应用，需要保证数据及时传送，而比例不大的错误是可以容忍的，所以使用UDP也是合适的，而且使用UDP可以实现多播，为多个客户端服务。而远程登录需要依靠一个客户端到服务器的可靠连接，必须保证数据传输的安全性，使用UDP是不合适的。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.2.3_11_201245241e",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节习题精选",
      "num": 11,
      "type": "single_choice",
      "question": "一个UDP数据报的数据字段长度为 9192B，如在数据链路层要采用以太网来传送，则应当将其划分为IP数据报片的片数是（）。",
      "options": {
        "A": "6",
        "B": "7",
        "C": "8",
        "D": "9"
      },
      "answer": [
        "B"
      ],
      "explanation": "UDP数据字段长度为9192B，UDP首部长度为8B，共9200B。每个IP数据报片的最大长度为1500B，减去IP首部20B，剩下1480B用来存放UDP数据报。因此需要将UDP数据报划分为「9200/1480=7个IP数据报片。每个IP数据报片的数据字段长度为1480B，除了最后一个为320B。每个IP数据报片的偏移字段的值依次为0,185,370,555,740,925,1110。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.2.3_14_43fb6b48dc",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节习题精选",
      "num": 14,
      "type": "single_choice",
      "question": "【2014统考真题】下列关于UDP的叙述中，正确的是（）。 NI. 提供无连接服务 Ⅱ. 提供复用/分用服务 II. 通过差错检验，保障可靠数据传输",
      "options": {
        "A": "仅I",
        "B": "仅I、Ⅱ",
        "C": "仅Ⅱ、III",
        "D": "I、II、III"
      },
      "answer": [
        "B"
      ],
      "explanation": "UDP提供无连接服务（说法Ⅰ正确），并在发送/接收时通过端口号实现复用与分用功能（说法Ⅱ正确）。虽然UDP首部包含检验和字段用于差错检测，但其仅能发现传输错误并丢弃出错报文，不具备重传、确认等机制，无法保障可靠数据传输，可靠性需由应用层实现。因此，说法Ⅲ错误。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.2.3_15_de50dbeffa",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节习题精选",
      "num": 15,
      "type": "single_choice",
      "question": "【2018统考真题】UDP实现分用时所依据的首部字段是（）。",
      "options": {
        "A": "源端口号",
        "B": "目的端口号",
        "C": "长度",
        "D": "检验和"
      },
      "answer": [
        "B"
      ],
      "explanation": "传输层的分用是指接收方根据报文首部信息将数据交付给正确的应用进程。UDP使用目的端\n口号标识目标进程，是分用的关键依据。源端口号主要用于回信，非分用所必需；长度和检验和字段不参与进程寻址。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.2.3_16_e856abf7b4",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.3",
      "section_title": "本节习题精选",
      "num": 16,
      "type": "single_choice",
      "question": "【2024统考真题】UDP在计算检验和的过程中，计算得到中间结果为1011 10011011 0110时，还需要加上最后一个16位数0110 010111000101，最终计算得到的检验和是（）。",
      "options": {
        "A": "0001 1111 0111 1011",
        "B": "0001 1111 0111 1100",
        "C": "1110 0000 1000 0011",
        "D": "1110 0000 1000 0100"
      },
      "answer": [
        "C"
      ],
      "explanation": "UDP检验和的计算方法是二进制反码求和再取反，二进制反码求和的运算规则：（1）从低位到高位逐列进行加法运算，0和0相加得0，0和1相加得1，1和1相加得0并产生进位1；②若最高位相加后产生进位，则将该进位加到结果的最低位，该过程也称回卷。计算过程如下：\n$$\n\\begin{array} { r l } & { \\begin{array} { r l } & { 1 0 1 1 1 0 0 1 1 0 1 1 0 1 1 0 1 1 0 } \\\\ { + } & { 0 1 1 0 0 1 0 1 1 1 0 0 0 1 0 1 } \\\\ { [ 1 ] 0 0 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 } \\end{array} } \\\\ & { \\begin{array} { r l } { \\frac { 1 } { ( 1 ) ! } } & { \\frac { 1 } { 1 0 0 1 1 1 1 1 0 1 } \\frac { 1 } { 1 1 1 1 0 1 } \\frac { 1 } { 1 1 1 0 0 } } \\\\ { \\frac { 1 } { 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 0 0 } } & { \\longrightarrow \\frac { 1 } { 1 5 } [ \\frac { 1 } { 1 1 } ] \\frac { 1 } { 1 1 } \\frac { 1 } { 1 2 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 4 } \\frac { 1 } { 3 } \\frac { 1 } { 1 5 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } \\frac { 1 } { 3 } } \\end{array} } \\\\ & { \\begin{array} { r l } & { 1 1 1 0 0 0 0 1 0 0 0 1 0 0 0 1 1 } \\end{array} } \\end{array}\n$$",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_01_bd14d81027",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于传输层协议的面向连接服务的描述中，错误的是（）。",
      "options": {
        "A": "面向连接的服务需要经历3个阶段：连接建立、数据传输及连接释放",
        "B": "当链路不发生错误时，面向连接的服务可以保证数据到达的顺序是正确的",
        "C": "面向连接的服务有很高的效率和时间性能",
        "D": "面向连接的服务提供了一个可靠的数据流"
      },
      "answer": [
        "C"
      ],
      "explanation": "因为面向连接的服务需要建立连接，且需要保证数据的有序性和正确性，所以它比无连接的服务开销大，而速度和效率方面也要比无连接的服务差一些。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_03_5335e2b916",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列关于TCP的端口的叙述中，错误的是（）。 育",
      "options": {
        "A": "客户端使用的端口号是动态规定的",
        "B": "端口号长度为16位",
        "C": "端口号用于在通信中识别进程",
        "D": "局域网内的计算机不能使用相同端口号"
      },
      "answer": [
        "D"
      ],
      "explanation": "客户端使用的端口号仅在客户进程运行时才动态地选择。应用进程通过端口号进行标识，端口号长度为16位。不同计算机的相同端口号是没有联系的，因此选项D错误。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_04_9059cb8b02",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列几种描述中，（）不是TCP服务的特点。",
      "options": {
        "A": "字节流",
        "B": "全双工",
        "C": "可靠",
        "D": "支持广播"
      },
      "answer": [
        "D"
      ],
      "explanation": "TCP提供的是一对一全双工可靠的字节流服务，所以TCP并不支持广播。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_05_9a8096b414",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列几种描述中，（）不是TCP的特性。",
      "options": {
        "A": "比 UDP 开销大",
        "B": "强制重传错误分组",
        "C": "在TCP首部中有目标主机IP地址",
        "D": "把消息分成段并在目标主机中进行重组"
      },
      "answer": [
        "C"
      ],
      "explanation": "在TCP首部中没有目标主机IP地址，这是IP首部的字段。TCP采用确认机制，并对错误或超时的分组进行重传，以保证数据的可靠性。TCP会根据网络的最大传输单元MTU和最大报文段长度MSS将消息分成适当大小的段（参考本章疑难点），并在目标主机中进行重组。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_06_5e201588d6",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列几种字段中，包含在TCP首部中而不包含在UDP首部中的是（）。",
      "options": {
        "A": "目的端口号",
        "B": "序号",
        "C": "检验和",
        "D": "目的IP地址"
      },
      "answer": [
        "B"
      ],
      "explanation": "TCP报文段和UIDP数据报都包含源端口、目的端口、检验号。因为UDP提供不可靠的传输服务，不需要对报文编号，所以不会有序号字段，而TCP提供可靠的传输服务，因此需要设置序号字段。目的IP地址属于IP数据报中的内容。 X",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_07_d619f0b831",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列关于TCP报头格式的描述中，错误的是（）。",
      "options": {
        "A": "报头长度为 20\\~60B，其中固定部分为 20B",
        "B": "端口号字段依次表示源端口号与目的端口号",
        "C": "报头长度总是4的倍数个字节",
        "D": "TCP检验和伪首部中 IP分组头的协议字段为 17"
      },
      "answer": [
        "D"
      ],
      "explanation": "TCP伪首部与UDP伪首部一样，包括IP分组首部的一部分。IP首部中有一个协议字段，用于指明上层协议是TCP还是UDP。17代表UDP，6代表TCP，所以选项D错误。对于选项A，因为数据偏移字段的单位是4B，所以当偏移取最大值时TCP首部长度为15×4=60B。由于使用填充，所以长度总是4B的倍数，选项C正确。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_08_c5d544af11",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "当TCP报文段标志字段中的（）为1时，表示必须释放连接，然后重新建立连接。",
      "options": {
        "A": "URG",
        "B": "RST V",
        "C": "ACK",
        "D": "FIN"
      },
      "answer": [
        "B"
      ],
      "explanation": "URG是紧急位，其为1时表示报文段中有紧急数据，需要尽快发送。RST是复位位，其为1时表示出现严重错误，必须释放连接，然后重新建立连接。ACK是确认位，其为1时表示确认序号（ack）字段有效。FIN为终止位，其为1时代表发送方请求释放单向连接，此时并没有完全释放连接，只有当接收方发送完数据并同样将FIN位置为1时才会释放连接。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_09_a67463cdf9",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "TCP报文段首部中窗口字段的值的含义是（）。",
      "options": {
        "A": "指明自己的拥塞窗口的尺寸",
        "B": "指明对方的发送窗口的尺寸",
        "C": "指明自己的接收窗口的尺寸",
        "D": "指明对方的拥塞窗口的尺寸"
      },
      "answer": [
        "C"
      ],
      "explanation": "TCP报文段首部中窗口字段的值指的是自己接收窗口的尺寸。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_11_f23b9d318a",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 11,
      "type": "single_choice",
      "question": "A和B建立了TCP连接，当A收到确认序号为100的确认报文段时，表示（）。",
      "options": {
        "A": "报文段 99 已收到",
        "B": "报文段100 已收到 计集",
        "C": "末字节序号为99的报文段已收到",
        "D": "末字节序号为100 的报文段已收到"
      },
      "answer": [
        "C"
      ],
      "explanation": "TCP的确认序号是指明接收方下一次希望收到的报文段的数据部分第一个字节的编号，可以看出，前一个已收到的报文段的最后一个字节的编号为99，所以选项C正确。报文段的序号是其数据部分第一个字节的编号。选项A、B不正确，因为有可能已收到的这个报文段的数据部分不止一个字节，则报文段的编号就不为99，但可以说编号为99的字节已收到。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_12_0700c58f9a",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 12,
      "type": "single_choice",
      "question": "当TCP在传送大量数据时，是以（）的大小将数据进行分割发送的，进行重发时同样也是以此为单位的。育",
      "options": {
        "A": "MSS",
        "B": "字节",
        "C": "比特",
        "D": "MTU"
      },
      "answer": [
        "A"
      ],
      "explanation": "两端主机在发出建立TCP连接的请求时，会在TCP首部写入MSS（最大报文段长度）选项，告诉对方自己的接口能够适应的MSS的大小，然后在二者之间选择一个较小的值投入使用，此后TCP将以MSS的大小对数据进行分割发送。MSS是在三次握手时计算得出的。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_13_9010f5d5be",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 13,
      "type": "single_choice",
      "question": "在TCP中，发送方的窗口大小取决于（）。",
      "options": {
        "A": "仅接收方允许的窗口",
        "B": "接收方允许的窗口和发送方允许的窗口",
        "C": "接收方允许的窗口和拥塞窗口",
        "D": "发送方允许的窗口和拥塞窗口"
      },
      "answer": [
        "C"
      ],
      "explanation": "TCP让每个发送方仅发送正确数量的数据，保持网络资源被利用但又不会过载。为了避免网络拥塞和接收方缓冲区溢出，TCP发送方在任意时刻可以发送的最大数据流是接收方允许的窗口和拥塞窗口中的最小值。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_14_08091f05b4",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 14,
      "type": "single_choice",
      "question": "TCP利用滑动窗口来实现流量控制，只要发送方收到对方的零窗口通知，就启动（）计时器。若计时器超时，则发送一个零窗口探测报文段，以试图获得对方的窗口值。",
      "options": {
        "A": "重传",
        "B": "保活",
        "C": "时间等待",
        "D": "持续"
      },
      "answer": [
        "D"
      ],
      "explanation": "TCP为每个连接设有一个持续计时器，只要发送方收到对方的零窗口通知，就启动持续计时器。若计时器超时，则发送一个零窗口探测报文段，而对方就在确认这个探测报文段时给出现在的窗口值。若窗口值仍然为零，则发送方收到确认报文段后就重新设置持续计时器。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_19_37926fa36d",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 19,
      "type": "single_choice",
      "question": "TCP“三次握手”过程中，第二次“握手”时，发送的报文段中（）标志位被置为1。",
      "options": {
        "A": "SYN",
        "B": "ACK",
        "C": "ACK 和 RST",
        "D": "SYN 和 ACK"
      },
      "answer": [
        "D"
      ],
      "explanation": "在TCP的“三次握手”中，第二次握手时，SYN和ACK均被置为1。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_20_c89046ea6d",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 20,
      "type": "single_choice",
      "question": "TCP采用三报文握手建立连接，其中第三个报文是（）。",
      "options": {
        "A": "TCP 连接请求",
        "B": "对 TCP 连接请求的确认",
        "C": "对TCP连接请求确认的确认",
        "D": "TCP 普通数据 KK"
      },
      "answer": [
        "C"
      ],
      "explanation": "TCP采用三报文握手建立连接，其中第一个报文是TCP连接请求，第二个报文是对TCP连接请求的确认，第三个报文是对TCP连接请求确认的确认。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_21_f6d7bb8d1d",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 21,
      "type": "single_choice",
      "question": "主机 A 和 B 之间建立了一个 TCP 连接，A 向 B 发送的第一个 SYN 报文段中的序号值（seq）等于 211，数据传输结束在释放连接时，A 向 B 发送的第 4 次挥手报文段的 seq等于985，则在本次通信过程中，A向B总共发送了（）字节的数据",
      "options": {
        "A": "771",
        "B": "772",
        "C": "773",
        "D": "774"
      },
      "answer": [
        "B"
      ],
      "explanation": "A向B发送的第一个SYN段虽然不携带数据，但仍会消耗一个序号211，A向B发送的第4次挥手报文段的 seq等于985，说明之前发送的数据的序号为212～984，因为在断开连接时发送\n的第一个FIN段会消耗一个序号，因此发送的总数据量为984-212=772B。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_22_f5eb42e461",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 22,
      "type": "single_choice",
      "question": "A 和 B 之间建立了 TCP 连接，A 向 B 发送了一个报文段，其中序号字段 seq=200，确认序号字段ack=201，数据部分有2B，那么在B对该报文的确认报文段中（）。",
      "options": {
        "A": "seq=202, ack=200",
        "B": "seq=201，ack=201",
        "C": "seq=201, ack=202",
        "D": "seq=202, ack =201"
      },
      "answer": [
        "C"
      ],
      "explanation": "在A发向B的报文中，seq表示发送的报文段中数据部分的第一个字节在A的发送缓存区中的编号，ack表示A期望收到的下一个报文段的数据部分的第一个字节在B的发送缓存区中的编号。因此，同一个报文段中的seq和ack的值是没有联系的。在B发给A的报文（捎带确认）中，seq 值应和 A发向 B 的报文中的 ack 值相同，即 201；ack 值表示 B 期望下次收到 A 发出的报文段的第一个字节的编号，应是200+2=202。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_24_0e754adc9d",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 24,
      "type": "single_choice",
      "question": "某客户与服务器建立TCP连接，当连接断开时，客户先向服务器发送一个标志FIN=1的报文段A，此报文段中 seq值为 x，ack值为y。一段时间后，客户收到了服务器发来的一个标志FIN=1的报文段B，则下列关于报文段B的说法中，正确的是（）。",
      "options": {
        "A": "B 中的 seq 值一定为 y",
        "B": "B 中的 seq 值一定为 y + 1",
        "C": "B 中的 ack 值一定为 x",
        "D": "B 中的 ack 值一定为 x + 1"
      },
      "answer": [
        "D"
      ],
      "explanation": "客户向服务器发送FN报文段A，表示客户不再通过本连接向服务器发送数据，但服务器仍有可能继续向客户发送数据，假设服务器在发送FIN报文段B之前已向客户发送了k字节的数据，则报文段B中的seq值为ν+k，选项A、B错误。报文段A是客户通过本连接发给服务器的最后一个报文段，会消耗一个序号（注意，尽管协议未禁止FIN段携带数据，但主流的操作系统一般不允许其携带数据），因此报文段B中的ack值一定为x+1，选项C错误，选项D正确。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_25_ceae08c99d",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 25,
      "type": "single_choice",
      "question": "某应用程序每秒产生一个60B的数据块，每个数据块被封装在一个TCP报文中，然后封装在一个IP数据报中，则最后每个数据报所包含的应用数据所占的百分比是（）。（注意：TCP报文和IP数据报文的首部没有附加字段。",
      "options": {
        "A": "20%",
        "B": "40%",
        "C": "60%",
        "D": "80%"
      },
      "answer": [
        "C"
      ],
      "explanation": "本题中，一个TCP报文的首部长度是20B，一个IP数据报的首部长度也是20B，再加上60B的数据，一个IP数据报的总长度为100B，可知数据占60%。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_26_ba25b31a45",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 26,
      "type": "single_choice",
      "question": "假设 TCP 客户与 TCP 服务器的通信已结束，端到端的往返时间为 RTT。t 时刻 TCP 客户请求断开连接，则从t时刻起TCP服务器释放该连接的最短时间是（）。",
      "options": {
        "A": "0.5RTT",
        "B": "1RTT",
        "C": "1.5RTT",
        "D": "2RTT"
      },
      "answer": [
        "C"
      ],
      "explanation": "t时刻TCP客户请求断开连接，发出连接释放FIN报文段；题目问的是最短时间，所以当TCP服务器收到TCP客户发来的FIN报文段后不再发送数据，因此同时发出确认ACK报文段和连接释放FIN报文段，即直接跳过CLOSE-WAIT状态；TCP客户收到FIN报文段后必须发出确认；TCP服务器收到确认后就进入CLOSED状态，共经历1.5RTT。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_5.3.7_27_b04c35310f",
      "book": "计算机网络",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.7",
      "section_title": "本节习题精选",
      "num": 27,
      "type": "single_choice",
      "question": "甲发起与乙的TCP连接，甲选择的初始序号为200，若甲和乙建立连接过程中最后一个报文段不携带数据，则TCP连接建立后，甲给乙发送的数据报文段的序号为（）。",
      "options": {
        "A": "203",
        "B": "202",
        "C": "201",
        "D": "200"
      },
      "answer": [
        "C"
      ],
      "explanation": "甲选择的初始序号为200，建立TCP连接的第一个报文段不能携带数据，但要消耗一个序号。甲给乙发送的第二个报文段（第三次握手）的序号是201，该报文段可以携带数据，若不携带数据，则不消耗序号，题中该报文段不携带数据，因此下一个数据报文段的序号仍是201。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.1.3_01_16e0c0bd03",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.3",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "在客户/服务器模型中，客户指的是（）。",
      "options": {
        "A": "请求方",
        "B": "响应方",
        "C": "硬件",
        "D": "软件"
      },
      "answer": [
        "A"
      ],
      "explanation": "客户既不是硬件，又不是软件，只是服务的请求方，服务器才是响应方。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.1.3_03_80914c097a",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.3",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下面关于客户/服务器模型的描述，（）存在错误。I. 客户端必须提前知道服务器的地址，而服务器则不需要提前知道客户端的地址Ⅱ. 客户端主要实现如何显示信息与收集用户的输入，而服务器主要实现数据的处理Ⅲ. 浏览器显示的内容来自服务器IV. 客户端是请求方，即使连接建立后，服务器也不能主动发送数据 直机教",
      "options": {
        "A": "I、IV K",
        "B": "III、IV",
        "C": "仅IV",
        "D": "仅III"
      },
      "answer": [
        "C"
      ],
      "explanation": "在连接未建立前，服务器在某一个端口上监听。客户端是连接的请求方，客户端必须事先知道服务器的地址才能发出连接请求，而服务器则从客户端发来的数据包中获取客户端的地址。一旦连接建立，服务器就能响应客户端请求的内容，服务器也能主动发送数据给客户端，用于一些消息的通知，如一些错误的通知。所以只有说法I错误。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.1.3_04_070639d0d7",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.3",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列关于客户/服务器模型的说法中，不正确的是（）。",
      "options": {
        "A": "服务器专用于完成某些服务，而客户则作为这些服务的使用者",
        "B": "客户通常位于前端，服务器通常位于后端",
        "C": "客户和服务器通过网络实现协同计算任务",
        "D": "客户是面向任务的，服务器是面向用户的"
      },
      "answer": [
        "D"
      ],
      "explanation": "客户的作用是根据用户需求向服务器发出服务请求，并将服务器返回的结果呈现给用户，因\n此客户是面向用户的，服务器是面向任务的。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.1.3_06_73d13c2ffe",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.1.3",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "【2019统考真题】下列关于网络应用模型的叙述中，错误的是（）。",
      "options": {
        "A": "在P2P模型中，节点之间具有对等关系",
        "B": "在客户/服务器（C/S）模型中，客户与客户之间可以直接通信",
        "C": "在C/S模型中，主动发起通信的是客户，被动通信的是服务器",
        "D": "在向多用户分发一个文件时，P2P模型通常比C/S模型所需的时间短"
      },
      "answer": [
        "B"
      ],
      "explanation": "在P2P模型中，每个节点的权利和义务对等，彼此可直接通信。而在C/S模型中，客户是服务发起方，服务器被动接受来自客户的请求，客户之间不能直接通信，例如Web应用中的两个浏览器之间不能直接通信。P2P模型通过将文件分发任务分散到多个节点，允许用户从多个对等方并行下载，从而减轻服务器负担，在向多用户分发文件时，通常比C/S模型所需的时间更短。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.2.4_01_226ea6ac41",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.2.4",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "域名与（）具有一一对应的关系。",
      "options": {
        "A": "IP地址",
        "B": "MAC 地址",
        "C": "主机",
        "D": "以上都不是"
      },
      "answer": [
        "D"
      ],
      "explanation": "若一台主机通过两块网卡连接到两个网络（如服务器双线接入），则就具有两个P地址，每个网卡对应一个MAC地址，显然这两个IP地址可以映射到同一个域名上。此外，多台主机也可以映射到同一个域名上（如负载均衡），一台主机也可以映射到多个域名上（如虚拟主机）。因此，选项A、B和C和域名均不具有一一对应的关系。 订",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.2.4_02_1c7842dd82",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.2.4",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列说法错误的是（）。",
      "options": {
        "A": "Internet上提供客户访问的主机一定要有域名",
        "B": "同一域名在不同时间可能解析出不同的IP地址",
        "C": "多个域名可以指向同一台主机的IP地址",
        "D": "IP子网中的主机可以由不同的域名服务器来维护其映射"
      },
      "answer": [
        "A"
      ],
      "explanation": "Internet上提供访问的主机一定要有IP地址，而不一定要有域名，选项A错误。域名在不同的时间可以解析出不同的P地址，因此可以用多台服务器来分担负载，选项B正确。可以把多个域名指向同一台主机的IP地址，选项C正确。IP子网中主机也可以由不同的域名服务器来维护其映射，选项D正确。 K",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.2.4_03_280082737c",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.2.4",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "DNS是基于（）模型的分布式系统。",
      "options": {
        "A": "C/S",
        "B": "B/S",
        "C": "P2P",
        "D": "以上均不正确"
      },
      "answer": [
        "A"
      ],
      "explanation": "DNS是一个基于C/S模型的分布式数据库系统，主要用于域名和P地址的映射。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.2.4_04_351257b591",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.2.4",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "域名系统（DNS）的组成不包括（）。",
      "options": {
        "A": "域名空间",
        "B": "分布式数据库",
        "C": "域名服务器",
        "D": "从内部IP地址到外部IP地址的翻译程序"
      },
      "answer": [
        "D"
      ],
      "explanation": "DNS提供从域名到IP地址或从P地址到域名的映射服务。它被设计成为一个联机分布式数据库系统，并采用客户/服务器模式。域名的解析是由若于域名服务器程序完成的。从内部IP地址到外部IP地址的映射是由NAT实现的，用于缓解IPv4地址紧缺的问题，与域名系统无关。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.2.4_06_2e100c20b4",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.2.4",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在DNS的递归查询中，由（）给客户端返回地址。",
      "options": {
        "A": "最开始连接的服务器",
        "B": "最后连接的服务器",
        "C": "目的地址所在服务器",
        "D": "不确定"
      },
      "answer": [
        "A"
      ],
      "explanation": "在递归查询中，每台不包含被请求信息的服务器都转到其他地方去查找，然后它再往回发送结果，所以客户端最开始连接的服务器最终将返回正确的信息。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.3.3_01_ee033846ad",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.3.3",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "文件传输协议（FTP）的一个主要特征是（）。",
      "options": {
        "A": "允许客户指明文件的类型但不允许指明文件的格式",
        "B": "不允许客户指明文件的类型但允许指明文件的格式",
        "C": "允许客户指明文件的类型与格式",
        "D": "不允许客户指明文件的类型与格式"
      },
      "answer": [
        "C"
      ],
      "explanation": "FTP提供交互式访问，允许客户指明文件的类型与格式，并允许文件具有存取权限。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.3.3_03_2ee961d459",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.3.3",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "控制信息是带外传送的协议是（）。",
      "options": {
        "A": "HTTP",
        "B": "SMTP",
        "C": "FTP",
        "D": "POP"
      },
      "answer": [
        "C"
      ],
      "explanation": "带外传送是指控制信息与数据信息通过不同的逻辑信道传送。例如，FTP使用一个单独的控制连接来传输控制信息，而数据连接用于传送文件。带内传送是指控制信息与数据信息通过同一个逻辑信道传送。例如，HTTP的请求和响应报文都是在同一个TCP连接上进行的。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.3.3_04_712fa42d92",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.3.3",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列关于FTP连接的叙述中，正确的是（）。",
      "options": {
        "A": "控制连接先于数据连接被建立，并先于数据连接被释放",
        "B": "数据连接先于控制连接被建立，并先于控制连接被释放",
        "C": "控制连接先于数据连接被建立，并晚于数据连接被释放",
        "D": "数据连接先于控制连接被建立，并晚于控制连接被释放"
      },
      "answer": [
        "C"
      ],
      "explanation": "FTP客户首先连接服务器的21号端口，建立控制连接（控制连接在整个会话期间一直保持打开），然后建立数据连接，在数据传送完毕后，数据连接最先释放，控制连接最后释放。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.3.3_06_ba0f9c29c9",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.3.3",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "FTP中作为服务器一方的进程，通过监听（）端口得知有无服务请求。",
      "options": {
        "A": "53",
        "B": "80",
        "C": "20",
        "D": "21"
      },
      "answer": [
        "D"
      ],
      "explanation": "FTP服务器通过监听熟知端口21（控制端口）得知有无服务请求。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.3.3_11_a92d4d66ff",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.3.3",
      "section_title": "本节习题精选",
      "num": 11,
      "type": "single_choice",
      "question": "FTP支持两种方式的传输：ASCI方式和 Binary（二进制）方式。通常文本文件的传输采用（）方式，而图像、声音等非文本文件采用（）方式传输。",
      "options": {
        "A": "ASCII, Binary",
        "B": "Binary, ASCII",
        "C": "ASCII, ASCII",
        "D": "Binary, Binary"
      },
      "answer": [
        "A"
      ],
      "explanation": "FTP 支持 ASCII和 Binary 两种方式的传输，非加密文本文件通常采用 ASCII 方式传输，而图像、声音等非文本文件采用Binary方式传输。本题可能有所超纲，了解即可。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.4.4_01_4c3a252da7",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.4.4",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "互联网用户的电子邮件地址格式必须是（）。",
      "options": {
        "A": "用户名@单位网络名",
        "B": "单位网络名@用户名",
        "C": "邮箱所在主机的域名@用户名",
        "D": "用户名@邮箱所在主机的域名"
      },
      "answer": [
        "D"
      ],
      "explanation": "电子邮件是互联网最基本、最常用的服务功能。要使用电子邮件服务，首先要拥有自己的电子邮件地址，其格式为：用户名@邮箱所在主机的域名。 HH",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.4.4_02_101baa5ce0",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.4.4",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "SMTP基于传输层的（）协议，POP3基于传输层的（）协议。",
      "options": {
        "A": "TCP, TCP",
        "B": "TCP, UDP",
        "C": "UDP, UDP",
        "D": "UDP, UDP"
      },
      "answer": [
        "A"
      ],
      "explanation": "SMTP和POP3都是基于TCP的协议，提供可靠的邮件通信。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.4.4_03_bf09239f8f",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.4.4",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "SMTP服务器使用的端口号是（）。",
      "options": {
        "A": "21",
        "B": "25",
        "C": "80",
        "D": "110"
      },
      "answer": [
        "B"
      ],
      "explanation": "SMTP服务器使用的熟知端口号是25。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.4.4_04_5ddddfc967",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.4.4",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "用Firefox（浏览器）在Gmail中向邮件服务器发送邮件时，使用的是（）协议。",
      "options": {
        "A": "HTTP",
        "B": "POP3.-X",
        "C": "P2P",
        "D": "SMTP"
      },
      "answer": [
        "A"
      ],
      "explanation": "在基于万维网的电子邮件中，用户浏览器与 Hotmail或 Gmail 的邮件服务器之间的邮件发送或接收使用的是HTTP，而仅在不同邮件服务器之间传送邮件时才使用SMTP。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.4.4_05_5a9f0b8a5d",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.4.4",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "用户代理只能发送而不能接收电子邮件时，可能是（）地址错误。",
      "options": {
        "A": "POP3",
        "B": "SMTP",
        "C": "HTTP",
        "D": "Mail"
      },
      "answer": [
        "A"
      ],
      "explanation": "用户代理使用POP3协议接收邮件。通常用户在配置电子邮件用户代理时需要设置邮件服务器的 POP3地址（如pop3.gmail.com），若这个地址设置错误，则会导致用户无法接收邮件。用户代理中的SMTP地址错误时会导致无法发送邮件。收件人E-mail地址错误时，可能会发错人，也可能会导致投递失败（不存在的地址）。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.4.4_06_f4084cd6eb",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.4.4",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "不能用于用户从邮件服务器接收电子邮件的协议是（）。",
      "options": {
        "A": "HTTP",
        "B": "POP3",
        "C": "SMTP",
        "D": "IMAP"
      },
      "answer": [
        "C"
      ],
      "explanation": "SMTP是一种“推”协议，用于发送端用户代理与发送端服务器之间及发送端服务器与接收端服务器之间，不能用于接收端用户从服务器上读取邮件。常用的邮件读取协议有POP3、HTTP和IMAP。大家平时通过浏览器登录163邮箱、Gmail邮箱时，使用的邮件读取协议就是HTTP。IMAP是另一个专用于读取邮件的协议，它要比POP3复杂得多，功能也更为强大。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.5.3_01_549ecd7808",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.5.3",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下面的（）协议中，客户与服务器之间采用面向无连接的协议进行通信。",
      "options": {
        "A": "FTP",
        "B": "SMTP",
        "C": "DNS",
        "D": "HTTP"
      },
      "answer": [
        "C"
      ],
      "explanation": "DNS采用UDP来传送数据，UDP是一种面向无连接的协议。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p301-316.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.5.3_02_a790c9a24a",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.5.3",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "从协议分析的角度，WWW服务的第一步操作是浏览器对服务器的（）。",
      "options": {
        "A": "请求地址解析",
        "B": "传输连接建立",
        "C": "请求域名解析",
        "D": "会话连接建立"
      },
      "answer": [
        "C"
      ],
      "explanation": "建立浏览器与服务器之间的连接需要知道服务器的IP地址和端口号（80端口是熟知端口），而访问站点时浏览器从用户那里得到的是WWW站点的域名，所以浏览器必须首先向DNS请求\n域名解析，获得服务器的IP地址后，才能请求建立TCP连接。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p301-316.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.5.3_06_2ccaa9f809",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.5.3",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "使用鼠标单击一个万维网文档时，若该文档除有文本外，还有三幅gif图像，则在HTTP/1.0中需要建立（）次TCP连接。",
      "options": {
        "A": "4",
        "B": "3",
        "C": "2",
        "D": "1"
      },
      "answer": [
        "A"
      ],
      "explanation": "HTTP在传输层用的是TCP。HTTP/1.0只支持非持续连接，所以每请求一个对象需要建立一次 TCP 连接，传输 1 个基本 html 对象和 3 个 gif 对象，共需建立4 次 TCP 连接。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p301-316.md",
      "source_pages": ""
    },
    {
      "id": "2027_计算机网络_6.5.3_17_18fe889c7a",
      "book": "计算机网络",
      "chapter": 6,
      "chapter_title": "",
      "section": "6.5.3",
      "section_title": "本节习题精选",
      "num": 17,
      "type": "single_choice",
      "question": "【2015统考真题】某浏览器发出的HTTP请求报文如下： 下列叙述中，错误的是（）。",
      "options": {
        "A": "该浏览器请求浏览 index.html",
        "B": "index.html 存放在 www.test.edu.cn 上",
        "C": "该浏览器请求使用持续连接",
        "D": "该浏览器曾经浏览过 www.test.edu.cn"
      },
      "answer": [
        "C"
      ],
      "explanation": "Connection:连接方式，Close表示非持续连接方式，keep-alive表示持续连接方式。Cookie值由服务器产生，HTTP 请求报文中有 Cookie 方法表示曾访问过 www.test.edu.cn 服务器。",
      "source_file": "mineru/2027/2027计算机网络_高清带书签版/2027计算机网络_高清带书签版_p301-316.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.1.4_01_568da1d1b7",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.4",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "操作系统是对（）进行管理的软件。",
      "options": {
        "A": "软件",
        "B": "硬件",
        "C": "计算机资源",
        "D": "应用程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "操作系统管理计算机的硬件和软件资源，这些资源统称为计算机资源。注意，操作系统不仅管理处理机、存储器等硬件资源，还管理文件，文件不属于硬件资源，但属于计算机资源。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.1.4_02_d78be382ea",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.4",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下面的（）资源不是操作系统应该管理的。",
      "options": {
        "A": "CPU",
        "B": "内存",
        "C": "外存",
        "D": "源程序"
      },
      "answer": [
        "D"
      ],
      "explanation": "操作系统负责管理计算机系统的硬件和软件资源，包括CPU、内存、外存等，以提供高效、安全、抽象的运行环境。源程序虽以文件形式存储在外存中，但其具体内容（如代码语义、编程逻辑）并不属于操作系统管理的范畴。操作系统对文件的管理关注的是文件的逻辑组织、存储分配、访问控制及元数据（如文件名、大小、权限、创建时间等），而非文件内容的语义。因此，源程序作为具有特定语义的用户数据，其内容本身并非操作系统的管理对象。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.1.4_03_7cef39918c",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.4",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列选项中，（）不是操作系统关心的问题。",
      "options": {
        "A": "管理计算机裸机",
        "B": "设计、提供用户程序与硬件系统的界面",
        "C": "管理计算机系统资源",
        "D": "高级程序设计语言的编译器 算机"
      },
      "answer": [
        "D"
      ],
      "explanation": "操作系统管理计算机软/硬件资源，扩充裸机以提供功能更强大的扩充机器，并充当用户与硬件交互的中介。高级程序设计语言的编译器显然不是操作系统关心的问题。编译器的实质是一段程序指令，它存储在计算机中，是上述水杯中的水。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.1.4_04_54f473401c",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.4",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "操作系统的基本功能是（）。",
      "options": {
        "A": "提供功能强大的网络管理工具",
        "B": "提供用户界面方便用户使用",
        "C": "提供方便的可视化编辑程序",
        "D": "控制和管理系统内的各种资源"
      },
      "answer": [
        "D"
      ],
      "explanation": "操作系统是指控制和管理整个计算机系统的硬件和软件资源，合理地组织、调度计算机的工作和资源的分配，以便为用户和其他软件提供方便的接口与环境的程序集合。选项A、B、C都可理解成应用程序为用户提供的服务，是应用程序的功能，而不是操作系统的功能。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.1.4_05_3dd01f8142",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.4",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列关于并发性的叙述中，正确的是（）。",
      "options": {
        "A": "并发性是指若干事件在同一时刻发生",
        "B": "并发性是指若干事件在不同时刻发生",
        "C": "并发性是指若干事件在同一时间间隔内发生",
        "D": "并发性是指若干事件在不同时间间隔内发生"
      },
      "answer": [
        "C"
      ],
      "explanation": "并发性是指若干事件在同一时间间隔内发生，而并行性是指若于事件在同一时刻发生。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.1.4_06_676ef4e91b",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.4",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "系统调用是由操作系统提供给用户的，它（）。",
      "options": {
        "A": "直接通过键盘交互方式使用",
        "B": "只能通过用户程序间接使用",
        "C": "是命令接口中的命令",
        "D": "与系统的命令一样"
      },
      "answer": [
        "B"
      ],
      "explanation": "系统调用是操作系统为应用程序使用内核功能所提供的接口。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.1.4_07_b2d7a4ad7f",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.4",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "操作系统提供给编程人员的接口是（）。 王人",
      "options": {
        "A": "库函数",
        "B": "高级语言",
        "C": "系统调用",
        "D": "子程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "操作系统为编程人员提供的接口是程序接口，即系统调用。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.1.4_08_1ec823e347",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.4",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "系统调用的目的是（）。",
      "options": {
        "A": "请求系统服务",
        "B": "中止系统服务",
        "C": "申请系统资源",
        "D": "释放系统资源"
      },
      "answer": [
        "A"
      ],
      "explanation": "操作系统不允许用户直接操作各种硬件资源，因此用户程序只能通过系统调用的方式来请求内核为其服务，间接地使用各种资源。 育V",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.1.4_09_57c42b8274",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.4",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "下列关于操作系统的叙述中，错误的是（)。",
      "options": {
        "A": "操作系统是管理资源的程序",
        "B": "操作系统是管理用户程序执行的程序",
        "C": "操作系统是能使系统资源提高效率的程序",
        "D": "操作系统是用来编程的程序"
      },
      "answer": [
        "D"
      ],
      "explanation": "操作系统是用来管理资源的程序，用户程序也是在操作系统的管理下完成的。配置了操作系统的机器与裸机相比，资源利用率大大提高。操作系统不能直接用来编程，选项D错误。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.1.4_10_c63deb3b33",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.1.4",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于库函数和系统调用的区别与联系的说法中，错误的是（）。",
      "options": {
        "A": "系统调用用于请求内核服务，部分库函数通过系统调用实现功能",
        "B": "系统调用需要陷入内核态执行，而普通库函数（如字符串处理）通常在用户态执行",
        "C": "所有库函数的实现都依赖系统调用，没有系统调用则无法完成任何功能",
        "D": "库函数具有良好的可移植性，可跨平台使用；系统调用则与具体操作系统紧密耦合"
      },
      "answer": [
        "C"
      ],
      "explanation": "并非所有库函数都依赖系统调用。例如，字符串处理、数学计算等纯用户态操作完全在用户\n空间中完成，无须陷入内核；只有涉及I/O、进程控制等资源访问的库函数才会调用系统调用。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.2.7_02_dc8951cc0c",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.7",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "批处理系统的主要缺点是（）。",
      "options": {
        "A": "系统吞吐量小",
        "B": "CPU 的利用率不高",
        "C": "资源利用率低 Y",
        "D": "无交互能力"
      },
      "answer": [
        "D"
      ],
      "explanation": "批处理系统中，作业执行时用户无法干预其运行，只能通过事先编制作业控制说明书来间接干预，缺少交互能力，也因此才有了分时操作系统的出现。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.2.7_03_d8bb902455",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.2.7",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列选项中，不属于多道程序设计的基本特征的是（）。",
      "options": {
        "A": "制约性",
        "B": "间断性",
        "C": "顺序性",
        "D": "共享性"
      },
      "answer": [
        "C"
      ],
      "explanation": "多道程序的运行环境比单道程序的运行环境更加复杂。引入多道程序后，程序的执行就失去了封闭性和顺序性。程序执行因为共享资源及相互协同的原因产生了竞争，相互制约。\n考虑到竞争的公平性，程序的执行是断续的。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.3.5_01_d4b6015479",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.5",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于操作系统的说法中，错误的是（）。I. 在通用操作系统管理下的计算机上运行程序，需要向操作系统预订运行时间Ⅱ. 在通用操作系统管理下的计算机上运行程序，需要确定起始地址，并从这个地址开始执行Ⅲ. 操作系统需要提供高级程序设计语言的编译器IV. 管理计算机系统资源是操作系统关心的主要问题",
      "options": {
        "A": "I",
        "B": "I、III",
        "C": "II、III",
        "D": "I、II、III、IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "说法I错误：通用操作系统使用时间片轮转调度算法，用户运行程序并不需要预先预订运行时间。说法Ⅱ正确：操作系统执行程序时，必须从起始地址开始执行。说法Ⅲ错误：编译器是操作系统的上层软件，不是操作系统需要提供的功能。说法IV正确：操作系统是计算机资源的管理者，管理计算机系统资源是操作系统关心的主要问题。 K",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.3.5_02_018c75894f",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列说法中，正确的是（）。I. 批处理的主要缺点是需要大量内存Ⅱ. 当计算机提供了内核态和用户态时，输入/输出指令必须在内核态下执行Ⅲ. 操作系统中采用多道程序设计技术的最主要原因是提高CPU和外部设备的可靠性IV. 操作系统中，通道技术是一种硬件技术",
      "options": {
        "A": "I、Ⅱ",
        "B": "I、III",
        "C": "II、IV",
        "D": "II、III、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "说法I错误：批处理的主要缺点是缺少交互性。批处理系统的主要缺点是常考点，读者对此要非常敏感。说法Ⅱ正确：输入/输出指令属于特权指令，只能由操作系统使用，因此必须在内核态下执行。说法Ⅲ错误：多道性是为了提高系统利用率和吞吐量而提出的。说法IV正确：I/O通道实际上是一种特殊的处理器，它具有执行I/O指令的能力，并通过执行通道程序来控制I/O操作。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.3.5_03_44e7613c92",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列关于系统调用的说法中，正确的是（）。I.用户程序使用系统调用命令，该命令经过编译后形成若干参数和陷入指令王 Ⅱ. 用户程序使用系统调用命令，该命令经过编译后形成若干参数和屏蔽中断指令Ⅲ.用户程序创建一个新进程，需使用操作系统提供的系统调用接口IV. 当操作系统完成用户请求的系统调用功能后，应使CPU从内核态转到用户态",
      "options": {
        "A": "I、III",
        "B": "III、IV",
        "C": "I、III、IV",
        "D": "II、III、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "系统调用需要触发陷入指令，如基于x86的Linux系统，该指令为int 0x80或sysenter，说法I正确。程序设计无法形成屏蔽中断指令，说法Ⅱ错误。用户程序通过系统调用进行进程控制，说法Ⅲ正确。执行系统调用时CPU状态要从用户态转到内核态，这是通过中断来实现的，当系统调用返回后，继续执行用户程序，同时CPU状态也从内核态转到用户态，说法IV正确。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.3.5_04_63e9862fd9",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.5",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "（）是操作系统必须提供的功能。",
      "options": {
        "A": "图形用户界面（GUI）",
        "B": "为进程提供系统调用命令",
        "C": "中断处理",
        "D": "编译源程序"
      },
      "answer": [
        "C"
      ],
      "explanation": "中断是操作系统必须提供的功能，因为计算机的各种错误都需要中断处理，内核态与用户态\n切换也需要中断处理。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.3.5_05_643cca0947",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.3.5",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "CPU执行的指令被分为两类，其中有一类称为特权指令，它只允许（）使用。",
      "options": {
        "A": "管理员",
        "B": "联机用户",
        "C": "目标程序",
        "D": "操作系统"
      },
      "answer": [
        "D"
      ],
      "explanation": "内核可以执行CPU能执行的任何指令，用户程序只能执行除特权指令之外的指令。因此特权指令只能由内核即操作系统使用。 x",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.6.2_01_abaf03e969",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.6.2",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "用（）设计的操作系统结构清晰且便于调试。",
      "options": {
        "A": "分层式架构",
        "B": "模块化架构",
        "C": "微内核架构",
        "D": "宏内核架构"
      },
      "answer": [
        "A"
      ],
      "explanation": "分层式结构简化了系统的设计和实现，每层只能调用紧邻它的低层的功能和服务，便于系统的调试和验证，若在调试某层时发现错误，则错误应在这层上，这是因为其低层都已调试好。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.6.2_02_2ee3ba5828",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.6.2",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于分层式结构操作系统的说法中，（）是错误的。",
      "options": {
        "A": "各层之间只能是单向依赖或单向调用",
        "B": "容易实现在系统中增加或替换一层而不影响其他层",
        "C": "具有非常灵活的依赖关系",
        "D": "系统效率较低"
      },
      "answer": [
        "C"
      ],
      "explanation": "单向依赖是分层式OS的特点。分层式OS中增加或替换一个层中的模块或整层时，只要不改变相应层间的接口，就不会影响其他层，因而易于扩充和维护。层次定义好后，相当于各层之间的依赖关系也就固定了，因此往往显得不够灵活，选项C错误。每执行一个功能，通常都要自上而下地穿越多层，增加了额外的开销，导致系统效率降低。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.6.2_03_bdce15fd5a",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.6.2",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列选项中，（）不属于模块化操作系统的特点。",
      "options": {
        "A": "很多模块化的操作系统，可以支持动态加载新模块到内核，适应性强",
        "B": "内核中的某个功能模块出错不会导致整个系统崩溃，可靠性高",
        "C": "内核中的各个模块可以相互调用，无须通过消息传递进行通信，效率高",
        "D": "各模块间相互依赖，相比于分层式操作系统，模块化操作系统更难调试和验证"
      },
      "answer": [
        "B"
      ],
      "explanation": "模块化操作系统的各功能模块都在内核中，并且模块之间相互调用、相互依赖，任何一个模块出错，都可能导致整个内核崩溃。选项B的设置属于“移花接木”，正确的说法应该是：在微内核操作系统中，内核外的某个功能模块出错不会导致整个系统崩溃，可靠性高。",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_1.6.2_04_5c6e5a1d09",
      "book": "操作系统",
      "chapter": 1,
      "chapter_title": "",
      "section": "1.6.2",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "相对于微内核系统，（）不属于大内核操作系统的缺点。",
      "options": {
        "A": "占用内存空间大",
        "B": "缺乏可扩展性而不方便移植",
        "C": "内核切换太慢 X",
        "D": "可靠性较低"
      },
      "answer": [
        "C"
      ],
      "explanation": "微内核和宏内核作为两种对立的结构，它们的优缺点也是对立的。微内核OS的主要缺点是性能问题，因为需要频繁地在内核态和用户态之间进行切换，因而切换开销偏大。L",
      "source_file": "mineru/2027/操作系统/操作系统_p001-050.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.1.9_02_bed5b688ba",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.9",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "进程之间交换数据不能通过（）途径进行。",
      "options": {
        "A": "共享文件",
        "B": "消息传递",
        "C": "访问进程地址空间",
        "D": "访问共享存储区"
      },
      "answer": [
        "C"
      ],
      "explanation": "每个进程包含独立的地址空间，进程各自的地址空间是私有的，只能执行自己地址空间中的程序，且只能访问自己地址空间中的数据，相互访问会导致指针的越界错误（学完内存管理将有更好的认识）。因此，进程之间不能直接交换数据，但可利用操作系统提供的共享文件、消息传递、共享存储区等进行通信。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.1.9_03_b547019863",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.9",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "进程与程序的根本区别是（）。",
      "options": {
        "A": "静态和动态特点",
        "B": "是不是被调入内存",
        "C": "是不是具有就绪、运行和等待三种状态",
        "D": "是不是占有处理器"
      },
      "answer": [
        "A"
      ],
      "explanation": "动态性是进程最重要的特性，以此来区分文件形式的静态程序。操作系统引入进程的概念，是为了从变化的角度动态地分析和研究程序的执行。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.1.9_04_618a5d4427",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.9",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列关于进程的描述中，最不符合操作系统对进程的理解的是（）。",
      "options": {
        "A": "进程是在多程序环境中的完整程序",
        "B": "进程可以由程序、数据和PCB描述",
        "C": "线程（Thread）是一种特殊的进程",
        "D": "进程是程序在一个数据集合上的运行过程，它是系统进行资源分配和调度的一个独立单元 V TA"
      },
      "answer": [
        "A"
      ],
      "explanation": "进程是一个独立的运行单位，也是操作系统进行资源分配和调度的基本单位，它包括PCB、程序和数据以及执行栈区，仅仅说进程是在多程序环境下的完整程序是不合适的，因为程序是静态的，它以文件形式存放在计算机的硬盘内，而进程是动态的。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.1.9_05_a6c704695b",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.9",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列关于并发进程特性的叙述中，正确的是（）。",
      "options": {
        "A": "进程是一个动态过程，其生命周期是连续的",
        "B": "并发进程执行完毕后，一定能够得到相同的结果",
        "C": "并发进程对共享变量的操作结果与执行速度无关",
        "D": "并发进程的运行结果具有不可再现性"
      },
      "answer": [
        "D"
      ],
      "explanation": "并发进程可能因等待资源或因被抢占CPU而暂停运行，其生命周期是不连续的。执行速度会影响进程之间的执行顺序和内存冲突问题，从而导致不同的操作结果。并发进程之间存在相互竞争和制约，导致每次运行可能得到不同的结果，选项D正确。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.1.9_06_91c827f2bd",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.9",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列关于进程的叙述中，正确的是（）。",
      "options": {
        "A": "进程获得处理器运行是通过调度得到的",
        "B": "优先级是进程调度的重要依据，一旦确定就不能改动",
        "C": "在单处理器系统中，任何时刻都只有一个进程处于运行态",
        "D": "进程申请处理器而得不到满足时，其状态变为阻塞态"
      },
      "answer": [
        "A"
      ],
      "explanation": "选项B错在优先级分静态和动态两种，动态优先级是根据运行情况而随时调整的。选项C\n错在系统发生死锁时有可能进程全部都处于阻塞态，CPU空闲。选项D错在进程申请处理器得不到满足时就处于就绪态，等待处理器的调度。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.1.9_07_714851e392",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.9",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "并发进程执行的相对速度是（）。",
      "options": {
        "A": "由进程的程序结构决定的 算机",
        "B": "由进程自己来控制的",
        "C": "与进程调度策略有关",
        "D": "在进程被创建时确定的"
      },
      "answer": [
        "C"
      ],
      "explanation": "并发进程执行的相对速度与进程调度策略有关，因为进程调度策略决定了哪些进程可以获得处理机，以及获得处理机的时间长短，从而影响进程执行的速度和效率。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.1.9_08_8444888b40",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.1.9",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列任务中，（）不是由进程创建原语完成的。",
      "options": {
        "A": "申请PCB 并初始化",
        "B": "为进程分配内存空间",
        "C": "为进程分配 CPU",
        "D": "将进程插入就绪队列"
      },
      "answer": [
        "C"
      ],
      "explanation": "进程创建原语的执行过程：申请空白PCB，并为新进程申请唯一的数字标识符。为新进程分\n配资源，包括内存、I/O设备等。初始化PCB，将新进程插入就绪队列。从上述过程可以看出，\n为进程分配CPU不是由进程创建原语完成的，而是由进程调度实现的。K",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.2.8_01_9adbab1e25",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.8",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "中级调度的目的是（）。",
      "options": {
        "A": "提高 CPU 的效率",
        "B": "降低系统开销",
        "C": "提高 CPU 的利用率",
        "D": "节省内存"
      },
      "answer": [
        "D"
      ],
      "explanation": "中级调度的主要目的是节省内存，将内存中处于阻塞态或长期不运行的进程挂起到外存，从而腾出空间给其他进程使用。当这些进程重新具备运行条件时，再从外存调入内存，恢复运行。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.2.8_03_d07685157b",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.8",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列哪些指标是调度算法设计时应该考虑的？（）I. 公平性Ⅱ. 资源利用率I. 互斥性 V IV. 平均周转时间",
      "options": {
        "A": "I、II",
        "B": "I、II、IV",
        "C": "I、III、IV",
        "D": "全部都是"
      },
      "answer": [
        "B"
      ],
      "explanation": "设计调度算法时应考虑的指标有很多，比较常见的有公平性、资源利用率、平均周转时间、平均等待时间、平均响应时间。互斥性不是调度算法设计时需要考虑的指标，而是一种同步机制，用来保证多个进程访问临界资源时不会发生冲突。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.2.8_04_7d840909d8",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.8",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "时间片轮转调度算法是为了（）。",
      "options": {
        "A": "多个用户能及时干预系统 算机子",
        "B": "使系统变得高效",
        "C": "优先级较高的进程得到及时响应",
        "D": "需要CPU时间最少的进程最先做"
      },
      "answer": [
        "A"
      ],
      "explanation": "时间片轮转的主要目的是，使得多个交互的用户能够得到及时响应，使得每个用户以为“独占”计算机的使用，因此它并没有偏好，也不会对特殊进程做特殊服务。时间片轮转增加了系统开销，所以不会使得系统高效运转，吞吐量和周转时间均不如批处理。但其较快速的响应时间使得用户能够与计算机进行交互，改善了人机环境，满足用户需求。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.2.8_05_dec79616f3",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.8",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "在单处理器系统中，进程什么时候占用处理器及占用时间的长短是由（）决定的。",
      "options": {
        "A": "进程相应的代码长度",
        "B": "进程总共需要运行的时间",
        "C": "进程特点和进程调度策略",
        "D": "进程完成什么功能"
      },
      "answer": [
        "C"
      ],
      "explanation": "进程调度的时机与进程特点有关，如进程是CPU繁忙型还是I/O繁忙型、自身的优先级等。但仅有这些特点是不够的，能否得到调度还取决于进程调度策略，若采用优先级调度算法，则进程的优先级才起作用。至于占用处理器运行时间的长短，则要看进程自身，若进程是I/O繁忙型，运行过程中要频繁访问I/O端口，即可能频繁放弃CPU，所以占用CPU的时间不会长，一旦放弃CPU，则必须等待下次调度。若进程是CPU繁忙型，则一旦占有CPU，就可能运行很长时间，但运行时间还取决于进程调度策略，大部分情况下，交互式系统为改善用户的响应时间，大多数采用时间片轮转调度算法，这种算法在进程占用CPU达到一定时间后，会强制将其换下，以保证其他进程的 CPU使用权。因此选择选项C。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.2.8_06_7d0ef841a3",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.8",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在某单处理器系统中，若此刻有多个就绪态进程，则下列叙述中错误的是（）。",
      "options": {
        "A": "进程调度的目标是让进程轮流使用处理器",
        "B": "当一个进程运行结束后，会调度下一个就绪进程运行",
        "C": "上下文切换是进程调度的实现手段",
        "D": "处于临界区的进程在退出临界区前，无法被调度"
      },
      "answer": [
        "D"
      ],
      "explanation": "处于临界区的进程也可能因中断或抢占而导致调度。此外，若进程在临界区内请求的是一个需要等待的资源，比如打印机，则它主动放弃CPU，让其他进程运行。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.2.8_07_fddba5cdbc",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.8",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "下列内容中，不属于进程上下文的是（）。",
      "options": {
        "A": "进程现场信息",
        "B": "进程控制信息",
        "C": "中断向量",
        "D": "用户堆栈"
      },
      "answer": [
        "C"
      ],
      "explanation": "当一个进程被执行时，CPU的所有寄存器中的值（进程的现场信息）、进程的状态和控制信息以及堆栈中的内容被称为该进程的上下文。中断向量不属于进程上下文的一部分，而是一组指向中断处理程序的指针，存放在内存的固定位置。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.2.8_08_4bb4943bba",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.8",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列关于进程上下文切换的叙述中，错误的是（）。",
      "options": {
        "A": "进程上下文指进程的代码、数据以及支持进程执行的所有运行环境",
        "B": "进程上下文切换机制实现了不同进程在一个处理器中交替运行的功能 VX",
        "C": "进程上下文切换过程中必须保存换下进程在切换处的程序计数器的值",
        "D": "进程上下文切换过程中必须将换下进程的代码和数据从主存保存到磁盘"
      },
      "answer": [
        "D"
      ],
      "explanation": "上下文切换发生在操作系统调度一个新进程到处理器上运行的时候。一个重要的上下文信息就是程序计数器（PC）的值，当前进程被打断的PC值作为寄存器上下文的一部分保存在进程现场信息中。进程上下文切换过程中不涉及主存和磁盘的数据交换，选项D错误。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.2.8_09_93214b875a",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.2.8",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "在支持页式存储管理和多线程技术的系统中，当一个进程中的线程 $\\mathrm { T } _ { 1 }$ 切换到同一个进程中的线程 $\\mathrm { T } _ { 2 }$ 执行时，操作系统需要执行的操作是（）。I. 更新程序计数器的值 I. 更新栈基址寄存器的值IⅢ. 更新页基址寄存器的值 IV. 更新进程打开文件表",
      "options": {
        "A": "I、II、III、IV",
        "B": "II、IV",
        "C": "I、II",
        "D": "I、III、IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "当线程切换时，操作系统需要保存当前线程的程序计数器的值，并恢复新线程的程序计数器，以便从新线程的正确位置开始执行。在多线程条件下，每个线程拥有各自独立的栈，当线程切换时，需要保存当前线程的栈基址寄存器的值，并加载新线程的栈基址，以便正确管理栈空间。同一个进程中的线程共享进程的虚拟地址空间，因此不需要更新页基址寄存器的值。一个进程所打开的文件也是被这个进程中的所有线程共享的，因此不需要更新进程打开文件表。",
      "source_file": "mineru/2027/操作系统/操作系统_p051-100.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_01_c4ddb12744",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列对临界区的论述中，正确的是（）。",
      "options": {
        "A": "临界区是指进程中用于实现进程互斥的那段代码",
        "B": "临界区是指进程中用于实现进程同步的那段代码",
        "C": "临界区是指进程中用于实现进程通信的那段代码",
        "D": "临界区是指进程中用于访问临界资源的那段代码"
      },
      "answer": [
        "D"
      ],
      "explanation": "多个进程可以共享系统中的资源，一次仅允许一个进程使用的资源称为临界资源。访问临界资源的那段代码称为临界区。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_02_ce40521804",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "不需要信号量就能实现的功能是（）。",
      "options": {
        "A": "进程同步 首计算不",
        "B": "进程互斥",
        "C": "执行的前驱关系",
        "D": "进程的并发执行"
      },
      "answer": [
        "D"
      ],
      "explanation": "在多道程序技术中，信号量机制是一种有效实现进程同步和互斥的工具。进程执行的前趋关系实质上是指进程的同步关系。除此之外，只有进程的并发执行不需要信号量来控制。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_03_5d4a35b3f7",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "若一个信号量的初值为3，经过多次PV操作后当前值为-1，这表示等待进入临界区的进程数是（）。",
      "options": {
        "A": "1",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "A"
      ],
      "explanation": "信号量是一个特殊的整型变量，只有初始化和PV操作才能改变其值。通常，信号量分为互斥量和资源量，互斥量的初值一般为1，表示临界区只允许一个进程进入，从而实现互斥。当互斥量等于0时，表示临界区已有一个进程进入，临界区外尚无进程等待；当互斥量小于0时，表示临界区中有一个进程，互斥量的绝对值表示在临界区外等待进入的进程数。同理，资源信号量的初值可以是任意整数，表示可用的资源数，当资源量小于0时，表示所有资源已全部用完，而且还有进程正在等待使用该资源，等待的进程数就是资源量的绝对值。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_04_74daa695e2",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "一个正在访问临界资源的进程由于申请等待I/O操作而被中断时，它（）。",
      "options": {
        "A": "允许其他进程进入与该进程相关的临界区",
        "B": "不允许其他进程进入任何临界区",
        "C": "允许其他进程抢占处理器，但不得进入该进程的临界区 +算だ",
        "D": "不允许任何进程抢占处理器"
      },
      "answer": [
        "C"
      ],
      "explanation": "进程进入临界区必须满足互斥条件。当进程已进入临界区但尚未离开时，若被迫进入阻塞状态，这是允许的，系统中常出现此类情形。在此状态下，只要其他进程在运行过程中不试图进入该临界区，就应允许其获得CPU并继续执行。该进程所锁定的临界区不允许其他进程访问；若其他进程尝试进入，必将在临界区的“锁”上阻塞，等待该进程下次运行时退出并释放临界区。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_05_e85409abed",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "两个旅行社甲和乙为旅客到某航空公司订飞机票，形成互斥资源的是（）。",
      "options": {
        "A": "旅行社",
        "B": "航空公司",
        "C": "飞机票",
        "D": "旅行社与航空公司"
      },
      "answer": [
        "C"
      ],
      "explanation": "一张飞机票不能售给不同的旅客，因此飞机票是互斥资源，其他因素只是为完成飞机票订票的中间过程，与互斥资源无关。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_06_f5da88440b",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "临界区是指并发进程访问共享变量段的（）。",
      "options": {
        "A": "管理信息",
        "B": "信息存储",
        "C": "数据",
        "D": "代码程序"
      },
      "answer": [
        "D"
      ],
      "explanation": "所谓临界区，并不是指临界资源，如共享的数据、代码或硬件设备等，而是指访问临界资源的那段代码程序，如P/V操作、加减锁等。操作系统访问临界资源时，关心的是临界区的操作过程，具体对临界资源做何操作是应用程序的事情，操作系统并不关心。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_07_f6bbb807e2",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "以下不是同步机制应遵循的准则的是（）。",
      "options": {
        "A": "让权等待",
        "B": "空闲让进",
        "C": "忙则等待",
        "D": "无限等待"
      },
      "answer": [
        "D"
      ],
      "explanation": "同步机制的4个准则是空闲让进、忙则等待、让权等待和有限等待。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_08_7411cbec1e",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "以下（）不属于临界资源。 算",
      "options": {
        "A": "打印机",
        "B": "非共享数据",
        "C": "共享变量",
        "D": "共享缓冲区"
      },
      "answer": [
        "B"
      ],
      "explanation": "临界资源是互斥共享资源，非共享数据不属于临界资源。打印机、共享变量和共享缓冲区都只允许一次供一个进程使用。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_09_79064c5f7b",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "以下（）属于临界资源。",
      "options": {
        "A": "磁盘",
        "B": "公用队列",
        "C": "私用数据",
        "D": "可重入的程序代码"
      },
      "answer": [
        "B"
      ],
      "explanation": "临界资源是指必须互斥访问的资源，若并发使用将导致数据混乱或逻辑错误。磁盘虽为共享设备，但其访问由操作系统统一协调，不构成临界资源；公用队列被多个进程共享，若无互斥控制，同时操作会导致队列结构破坏或数据错乱，属于典型临界资源：私用数据仅限单个进程使用，不存在竞争；可重入的程序代码不含全局状态，允许多进程并发执行，无须互斥。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_10_29884945f5",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "在操作系统中，要对并发进程进行同步的原因是（）。",
      "options": {
        "A": "进程必须在有限的时间内完成",
        "B": "进程具有动态性",
        "C": "并发进程是异步的",
        "D": "进程具有结构性"
      },
      "answer": [
        "C"
      ],
      "explanation": "同步是指为了完成某项任务而建立的多个进程的相互合作关系，由于并发进程的执行是异步的（按各自独立的、不可预知的速度向前推进），需要保证进程之间操作的先后次序的约束。例如，读进程和写进程对同一段缓冲区的读和写就需要进行同步，以保证正确的执行顺序。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_11_3b416a4051",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 11,
      "type": "single_choice",
      "question": "进程A 和进程B通过共享缓冲区协作完成数据处理，进程A 负责产生数据并放入缓冲区，进程B从缓冲区读数据并输出。进程A和进程B之间的制约关系是（）。",
      "options": {
        "A": "互斥关系",
        "B": "同步关系",
        "C": "互斥和同步关系",
        "D": "无制约关系"
      },
      "answer": [
        "C"
      ],
      "explanation": "并发进程因共享资源而产生相互制约，可分为两类：①互斥关系，指进程竞争使用独占资源（互斥资源）所形成的制约；②同步关系，指进程为协同工作而需交换信息、相互等待所形成的制约。本题中，两个进程之间的制约属于同步关系，进程B必须等待进程A将数据写入缓冲区后，才能从中读取数据。同时，缓冲区是共享资源，其访问必须互斥，因此二者也存在互斥关系。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_15_097ff1b248",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 15,
      "type": "single_choice",
      "question": "（）定义了共享数据结构和各种进程在该数据结构上的全部操作。",
      "options": {
        "A": "管程",
        "B": "类程",
        "C": "线程",
        "D": "程序"
      },
      "answer": [
        "A"
      ],
      "explanation": "管程定义了一个数据结构和能为并发进程所执行（在该数据结构上）的一组操作，这组操作能同步进程并改变管程中的数据。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_16_d7dff1b8e4",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 16,
      "type": "single_choice",
      "question": "用Ⅴ操作唤醒一个等待进程时，被唤醒进程变为（）态。",
      "options": {
        "A": "运行",
        "B": "等待",
        "C": "就绪",
        "D": "完成"
      },
      "answer": [
        "C"
      ],
      "explanation": "只有就绪进程能获得处理器资源，被唤醒的进程并不能直接转换为运行态。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_17_a94bea6438",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 17,
      "type": "single_choice",
      "question": "在用信号量机制实现互斥时，互斥信号量的初值为（）。",
      "options": {
        "A": "0",
        "B": "1",
        "C": "2",
        "D": "3"
      },
      "answer": [
        "B"
      ],
      "explanation": "互斥信号量的初值设置为1，P操作成功则将其减1，禁止其他进程进入；V操作成功则将其加1，允许等待队列中的一个进程进入。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_18_aeb29a2ea9",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 18,
      "type": "single_choice",
      "question": "用 P,Ⅴ操作实现进程同步，信号量的初值为（)。",
      "options": {
        "A": "-1",
        "B": "0",
        "C": "1",
        "D": "由用户确定"
      },
      "answer": [
        "D"
      ],
      "explanation": "与互斥信号量初值一般置1不同，用P.V操作实现进程同步时，信号量的初值应根据具体情况来确定。若期望的消息尚未产生，则对应的初值应设为0；若期望的消息已存在，则信号量的初值应设为一个非0的正整数。 KKK",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_19_f1f1f706fa",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 19,
      "type": "single_choice",
      "question": "可以被多个进程在任意时刻共享的代码必须是（）。",
      "options": {
        "A": "顺序代码",
        "B": "机器语言代码",
        "C": "不允许任何修改的代码",
        "D": "无转移指令代码"
      },
      "answer": [
        "C"
      ],
      "explanation": "若代码可被多个进程在任意时刻共享，则要求任意一个进程在调用此段代码时都以同样的方式运行：而且进程在运行过程中被中断后再继续执行，其执行结果不受影响。这必然要求代码不能被任何进程修改，否则无法满足共享的要求。这样的代码就是可重入代码，也称纯代码，即允许多个进程同时访问的代码。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_20_8223fdf6bc",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 20,
      "type": "single_choice",
      "question": "一个进程映像由程序、数据及PCB组成，其中（）必须用可重入编码编写。",
      "options": {
        "A": "PCB",
        "B": "程序",
        "C": "数据",
        "D": "共享程序段"
      },
      "answer": [
        "D"
      ],
      "explanation": "共享程序段可能同时被多个进程使用，所以必须可重入编码，否则无法实现共享的功能。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_21_a8a7d24862",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 21,
      "type": "single_choice",
      "question": "下列关于互斥锁的说法中，正确的是（）。",
      "options": {
        "A": "互斥锁只能用于多线程之间，不能用于多进程之间",
        "B": "互斥锁只能用于多进程之间，不能用于多线程之间",
        "C": "互斥锁可用于多线程或多进程之间，但只能由创建它的线程或进程来加锁和解锁",
        "D": "互斥锁可用于多线程或多进程之间，但只能由对它加锁的线程或进程来解锁"
      },
      "answer": [
        "D"
      ],
      "explanation": "互斥锁可用于多线程或多进程之间，但只有对它加锁的线程或进程才能解锁它。若一个线程 或进程试图解锁一个不属于它（加锁）的互斥锁，则返回错误码。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_22_aeba09007a",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 22,
      "type": "single_choice",
      "question": "在使用互斥锁进行同步互斥时，下列（）情况会导致死锁。",
      "options": {
        "A": "一个线程对同一个互斥锁连续加锁两次",
        "B": "一个线程尝试对一个已加锁的互斥锁再次加锁",
        "C": "两个线程分别对两个不同的互斥锁先后加锁，但顺序相反",
        "D": "一个线程对一个互斥锁加锁后忘记解锁"
      },
      "answer": [
        "C"
      ],
      "explanation": "若两个线程分别对两个不同的互斥锁先后加锁，但顺序相反，则可能导致死锁，这是典型\n的循环等待现象。例如，线程1先对互斥锁A加锁，然后尝试对互斥锁B加锁；同时，线程2先对B加锁，然后尝试对A加锁，两个线程都在等待对方释放资源，从而无法继续推进。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_23_ed3e6501dd",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 23,
      "type": "single_choice",
      "question": "用来实现进程同步与互斥的PV操作实际上是由（）过程组成的。",
      "options": {
        "A": "一个可被中断的",
        "B": "一个不可被中断的",
        "C": "两个可被中断的",
        "D": "两个不可被中断的"
      },
      "answer": [
        "D"
      ],
      "explanation": "P操作和V操作都属于原语操作，不可被中断。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_24_7f76335ab1",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 24,
      "type": "single_choice",
      "question": "对于两个并发进程，设互斥信号量为 mutex（初值为1)，若mutex= 0，则表示（）。",
      "options": {
        "A": "没有进程进入临界区",
        "B": "有一个进程进入临界区",
        "C": "有一个进程进入临界区，另一个进程等待进入 机",
        "D": "有一个进程在等待进入"
      },
      "answer": [
        "B"
      ],
      "explanation": "互斥信号量mutex初值为1，表示临界区初始可用。当mutex=0时，说明一个进程已执行P操作并进入临界区，且因信号量非负，无其他进程在等待；只有当mutex=-1时，才表示一个进程在临界区内，另一个在等待。因此，mutex=0对应有且仅有一个进程进入临界区。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_25_3ad22fa858",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 25,
      "type": "single_choice",
      "question": "对于两个并发进程，设互斥信号量为mutex（初值为1)，若mutex=-1，则（）。",
      "options": {
        "A": "表示没有进程进入临界区",
        "B": "表示有一个进程进入临界区 计",
        "C": "表示有一个进程进入临界区，另一个进程等待进入",
        "D": "表示有两个进程进入临界区"
      },
      "answer": [
        "C"
      ],
      "explanation": "当有一个进程进入临界区且有另一个进程等待进入临界区时，mutex = -1。当mutex小于0时，其绝对值等于等待进入临界区的进程数。 KYT",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_26_47adf5d399",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 26,
      "type": "single_choice",
      "question": "一个进程因在互斥信号量 mutex 上执行 V(mutex)操作而导致唤醒另一个进程时，执行 V操作后 mutex 的值为（)。",
      "options": {
        "A": "大于0",
        "B": "小于0",
        "C": "大于或等于0",
        "D": "小于或等于0"
      },
      "answer": [
        "D"
      ],
      "explanation": "由题意可知，系统原来存在等待进入临界区的进程，mutex小于或等于-1，因此在执行V(mutex)操作后，mutex的值小于或等于0。 C",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_27_ea80530661",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 27,
      "type": "single_choice",
      "question": "一个系统中共有5个并发进程涉及某个相同的变量A，变量A的相关临界区是由（）个临界区构成的。算",
      "options": {
        "A": "1",
        "B": "3",
        "C": "5",
        "D": "6"
      },
      "answer": [
        "C"
      ],
      "explanation": "这里的临界区是指访问临界资源A的那段代码（临界区的定义）。那么5个并发进程共有5个操作共享变量A的代码段。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_28_455f4988cb",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 28,
      "type": "single_choice",
      "question": "下述（）选项不是管程的组成部分。",
      "options": {
        "A": "局限于管程的共享数据结构",
        "B": "对管程内数据结构进行操作的一组过程",
        "C": "管程外过程调用管程内数据结构的说明",
        "D": "对局限于管程的数据结构设置初始值的语句"
      },
      "answer": [
        "C"
      ],
      "explanation": "管程由局限于管程的共享变量说明、对管程内的数据结构进行操作的一组过程及对局限于管程的数据设置初始值的语句组成。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_29_b0b1172d86",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 29,
      "type": "single_choice",
      "question": "以下关于管程的叙述中，错误的是（）。",
      "options": {
        "A": "管程是进程同步工具，解决信号量机制大量同步操作分散的问题",
        "B": "管程每次只允许一个进程进入管程",
        "C": "管程中 signal 操作的作用和信号量机制中的 V操作相同",
        "D": "管程是被进程调用的，管程是语法范围，无法创建和撤销"
      },
      "answer": [
        "C"
      ],
      "explanation": "管程的signal操作与信号量机制中的V操作不同，信号量机制中的V操作一定会改变信号量的值S=S+1。而管程中的 signal操作是针对某个条件变量的，若不存在因该条件而阻塞的进程，则 signal 不会产生任何影响。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_36_00b7964c2e",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 36,
      "type": "single_choice",
      "question": "两个进程 $\\mathrm { P } _ { 0 } , \\ \\mathrm { P } _ { 1 } \\ \\mathscr { Z }$ 斥的 Peterson 算法描述如下：进程PO 进程 P1flag[0]=1; flag[1]=1;(1); (2);while(flag[1]&&turn==1); while(flag[0]&&turn==0);临界区； 临界区；flag[0]=0; flag[1]=0;其余代码； 其余代码； 其中，(1)和(2)处的代码分别为（）。",
      "options": {
        "A": "$\\mathrm { t u r n } { = } 0 , \\mathrm { t u r n } { = } 0$",
        "B": "turn=0, turn= 1",
        "C": "turn= 1, turn=0",
        "D": "turn =1, turn= 1"
      },
      "answer": [
        "C"
      ],
      "explanation": "根据 Peterson 算法的原理，可知(1)和(2)处分别为 turn = 1 和 turn = 0。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_45_a6b6b71a6d",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 45,
      "type": "single_choice",
      "question": "哲学家就餐问题的解决方案如下： semaphore \\*chopstick[5];semaphore \\*seat; 哲学家 i: P(seat) ; P(chopStick[i]); P(chopStick[(i+1)%5]);吃饭 V(chopStick[i]); V(chopStick[(i+1)%5]);V(seat) 其中，信号量 seat的初值最大为（）。",
      "options": {
        "A": "0",
        "B": "1",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "C"
      ],
      "explanation": "信号量seat表示桌子上可以坐下的位置数，因为只有五个位置，所以每次只能有四位哲学家同时拿起左边的餐叉，才能保证不会发生死锁，所以seat的初值应该为4。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_46_e98fe7fdf2",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 46,
      "type": "single_choice",
      "question": "有两个优先级相同的并发程序 $\\mathrm { P _ { 1 } }$ 和 $\\mathrm { P } _ { 2 }$ ，它们的执行过程如下所示。假设当前信号量s1=0，s2= 0。当前的z=2，进程运行结束后，x,y和z的值分别是（)。 进程 $\\mathtt { P _ { 1 } }$ 进程 $\\mathtt { P } _ { 2 }$ y:=1; x:=1 y:=y+2; 机 x:=x+1; z:=y+1; P(s1); V(s1); x:=x+y; P(s2); z:=x+z; y:=z+y; V(s2);",
      "options": {
        "A": "5,9,9",
        "B": "5, 9, 4",
        "C": "5, 12, 9",
        "D": "5, 12, 4"
      },
      "answer": [
        "C"
      ],
      "explanation": "因为进程并发，所以进程的执行具有不确定性，在 $\\mathrm { P } _ { 1 } , \\mathrm { P } _ { 2 }$ 执行到第一个P,V操作前，应该是相互无关的。现在考虑第一个对 $\\mathbf { S } _ { 1 }$ 的P,V操作，因为进程 $\\mathrm { P } _ { 2 }$ 是 $\\mathrm { P } ( \\mathbf { s } _ { 1 } )$ 操作，所以它必须等待 $\\mathrm { P _ { 1 } }$ 执行完 $\\mathrm { V } ( \\mathrm { s } _ { 1 } )$ 操作后才可继续运行，此时的 $\\mathrm { x } , \\mathrm { y } , \\mathrm { z }$ 值分别是2,3,4，当进程 $\\mathrm { P _ { 1 } }$ 执行完 $\\mathrm { V } ( { \\mathrm { s } _ { 1 } } )$ 后便在 $\\mathrm { P } ( \\mathrm { s } _ { 2 } )$ 上阻塞，此时 $\\mathrm { P } _ { 2 }$ 可以运行直到 $\\mathrm { V } ( \\mathrm { s } _ { 2 } )$ ，此时的 x, y, z 值分别是 5, 3, 9，进程 $\\mathrm { P } _ { 1 }$ 继续运行到结束，最终的 x, y, z 值分别为 5, 12, 9。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_51_e4de902a73",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 51,
      "type": "single_choice",
      "question": "【2016 统考真题】使用TSL（Test and Set Lock）指令实现进程互斥的伪代码如下所示。do {while(TSL(&lock));critical section;lock=FALSE;} while(TRUE); 下列与该实现机制相关的叙述中，正确的是（）。",
      "options": {
        "A": "退出临界区的进程负责唤醒阻塞态进程",
        "B": "等待进入临界区的进程不会主动放弃CPU",
        "C": "上述伪代码满足“让权等待”的同步准则",
        "D": "while(TSL(&lock))语句应在关中断状态下执行"
      },
      "answer": [
        "B"
      ],
      "explanation": "使用TSL指令实现进程互斥时，并没有阻塞态进程，等待进入临界区的进程一直停留在执行while(TSL(&lock))的循环中，不会主动放弃CPU，一直处于运行态，直到该进程的时间片用完放弃处理机，转为就绪态，此时切换另一个就绪态进程占用处理机。这不同于信号量机制实现的互斥。由此可知选项A和C错误，选项B正确。TSL指令本身就是原子操作，不需要关中断来保证其不被打断。TSL指令实现原子性的原理是，执行TSL指令的CPU锁住内存总线，以禁止其他 CPU在本指令结束之前访问内存。此外，假如 while(TSL(&lock))在关中断状态下执行，若\nTSL(&lock)一直为true，不再开中断，则系统可能因此终止。因此选项D错误。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.3.8_53_c9f0f5c0b6",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.3.8",
      "section_title": "本节习题精选",
      "num": 53,
      "type": "single_choice",
      "question": "【2018统考真题】属于同一进程的两个线程thread1和 thread2并发执行，共享初值为0的全局变量x。thread1 和thread2 实现对全局变量x加1 的机器级代码描述如下。 在所有可能的指令执行序列中，使x的值为2的序列个数是（）。",
      "options": {
        "A": "1 XT",
        "B": "2",
        "C": "3",
        "D": "4"
      },
      "answer": [
        "B"
      ],
      "explanation": "仔细阅读两个线程代码可知，thread1和thread2均是对x进行加1操作，x的初始值为0，若要使得最终 x = 2，只能先执行完 thread1 再执行 thread2，或先执行完 thread2 再执行 thread1，因此仅有2种可能。",
      "source_file": "mineru/2027/操作系统/操作系统_p101-150.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_01_bc1b1b3563",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列情况中，可能导致死锁的是（）。",
      "options": {
        "A": "进程释放资源 0",
        "B": "一个进程进入死循环",
        "C": "多个进程竞争资源出现了循环等待",
        "D": "多个进程竞争使用共享型设备"
      },
      "answer": [
        "C"
      ],
      "explanation": "引起死锁的4个必要条件是：互斥、占有并等待、非剥夺和循环等待。本题中，出现了循环等待的现象，意味着可能导致死锁。进程释放资源不会导致死锁，进程自己进入死循环只能产生“饥饿”，不涉及其他进程。共享型设备允许多个进程申请使用，因此不会造成死锁。再次提醒，死锁一定要有两个或两个以上的进程才会导致，而饥饿可能由一个进程导致。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_02_50997568eb",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "在哲学家进餐问题中，若所有哲学家同时拿起左筷子，则发生死锁，因为他们都需要右筷子才能用餐。为了让尽可能多的哲学家可以同时用餐，并且不发生死锁，可以利用信号量PV操作实现同步互斥，下列说法中正确的是（）。",
      "options": {
        "A": "使用信号量进行控制的方法一定可以避免死锁",
        "B": "同时检查两支筷子是否可用的方法可以预防死锁，但是会导致饥饿问题",
        "C": "限制允许拿起筷子的哲学家数量可以预防死锁，它破坏了“循环等待”条件",
        "D": "对哲学家顺序编号，奇数号哲学家先拿左筷子，然后拿右筷子，而偶数号哲学家刚好相反，可以预防死锁，它破坏了“互斥”条件 K"
      },
      "answer": [
        "C"
      ],
      "explanation": "信号量机制能确保临界资源的互斥访问，不能完全避免死锁，选项A错误。同时检查两支筷子是否可用的方法可以预防死锁，但是会导致资源浪费，因为可能有一些空闲的筷子无法使用，但拿到筷子的哲学家用完餐后，释放筷子，其他哲学家就可以正常用餐，因此不会导致饥饿现象，选项B错误。若限制允许拿起筷子的哲学家数量，则不被允许的哲学家左边的哲学家一定可以拿到两边的筷子，从而破坏“循环等待”条件，选项C正确。对哲学家顺序编号，奇数号哲学家先拿左筷子，然后拿右筷子，而偶数号哲学家刚好相反，则相邻的哲学家总有一个可以拿起两边的筷子，但这破坏的是“循环等待”条件，而不是“互斥条件”，选项D错误。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_03_d937ad7ddc",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "下列关于进程死锁的描述中，错误的是（）。",
      "options": {
        "A": "若每个进程只能同时申请或拥有一个资源，则不会发生死锁",
        "B": "若多个进程可以无冲突共享访问所有资源，则不会发生死锁",
        "C": "若所有进程的执行严格区分优先级，则不会发生死锁",
        "D": "若进程资源请求之间不存在循环等待，则不会发生死锁"
      },
      "answer": [
        "C"
      ],
      "explanation": "进程的执行优先级并不能破坏死锁的四个必要条件。即使有高优先级和低优先级的进程，若它们都请求或占有了不可抢占的资源，且形成了环路等待，则死锁仍可能发生。选项A可以破坏请求并保持条件，选项B可以破坏互斥条件，选项D可以破坏循环等待条件。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_04_f765334f7b",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "一次分配所有资源的方法可以预防死锁的发生，它破坏死锁4个必要条件中的（）。",
      "options": {
        "A": "互斥",
        "B": "占有并请求",
        "C": "非剥夺",
        "D": "循环等待"
      },
      "answer": [
        "B"
      ],
      "explanation": "发生死锁的4个必要条件：互斥、占有并请求、非剥夺和循环等待。一次分配所有资源的方法是当进程需要资源时，一次性提出所有的请求，若请求的所有资源均满足，则分配，只要有一项不满足，就不分配任何资源，该进程阻塞，直到所有的资源空闲后，满足进程的所有需求时再分配。这种分配方式不会部分地占有资源，因此打破了死锁的4个必要条件之一，实现了对死锁的预防。但是，这种分配方式需要凑齐所有资源，因此当一个进程所需的资源较多时，资源的利用率会较低，甚至会造成进程“饥饿”。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_05_e65d9342f5",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "系统产生死锁的可能原因是（）。",
      "options": {
        "A": "独占资源分配不当",
        "B": "系统资源不足",
        "C": "进程运行太快",
        "D": "CPU 内核太多"
      },
      "answer": [
        "A"
      ],
      "explanation": "系统死锁的可能原因主要是时间上和空间上的。时间上由于进程运行中推进顺序不当，即调度时机不合适，不该切换进程时进行了切换，可能造成死锁：空间上的原因是对独占资源分配不当，互斥资源部分分配又不可剥夺，极易造成死锁。那么，为什么系统资源不足不是造成死锁的原因呢？系统资源不足只会对进程造成“饥饿”。例如，某系统只有三台打印机，若进程运行中要申请四台，则显然不能满足，该进程会永远等待下去。若该进程在创建时便声明需要四台打印机，则操作系统立即就会拒绝，这实际上是资源分配不当的一种表现。不能以系统资源不足来描述剩余资源不足的情形。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_23_97fc159b04",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 23,
      "type": "single_choice",
      "question": "下面是并发进程的程序代码，正确的是（）。Semaphore x1=x2=y=1;int c1=c2=0; P1 ( ) P2 () while(1) { while(1){ P(x1); P(x2); if(++c1==1)Ρ(y); if(++c2==1)Ρ(y); V(x1); 计算 V(x2); computer(A); computer(B); P(x1); P(x2); if(−--c1==0)V(y); if(−-c2==0)V(y); V(x1); V(x2); } } 1 1",
      "options": {
        "A": "进程不会死锁，也不会“饥饿”",
        "B": "进程不会死锁，但是会“饥饿”",
        "C": "进程会死锁，但是不会“饥饿”",
        "D": "进程会死锁，也会“饥饿”"
      },
      "answer": [
        "B"
      ],
      "explanation": "遇到这种问题时千万不要慌张，下面我们来慢慢分析，给读者一个清晰的解题过程。\n仔细考察程序代码，可以看出这是一个扩展的单行线问题。也就是说，某单行线只允许单方向的车辆通过，在单行线的入口设置信号量y，在告示牌上显示某一时刻各方向来车的数量c1和c2，要修改告示牌上的车辆数量必须互斥进行，为此设置信号量x1和x2。若某方向的车辆需要通过时，则首先要将该方向来车数量c1或c2增加1，并查看自己是否是第一个进入单行线的车辆，若是，则获取单行线的信号量y，并进入单行线。通过此路段以后出单行线时，将该方向的车辆数c1或c2减1（当然是利用x1或x2来互斥修改），并查看自己是否是最后一辆车，若是，则释放单行线的互斥量v，否则保留信号量v，让后继车辆继续通过。双方的操作如出一辙。考虑出现一个极端情况，即当某方向的车辆首先占据单行线并后来者络绎不绝时，另一个方向的车辆就再没有机会通过该单行线了。而这种现象是由于算法本身的缺陷造成的，不属于因为特殊序列造成的饥饿，所以它是真正的饥饿现象。因为有信号量的控制，所以死锁的可能性没有了（双方同时进入单行线，在中间相遇，造成双方均无法通过的情景）。\n①假设 $\\mathrm { P } _ { 1 }$ 进程稍快， $\\mathrm { P } _ { 2 }$ 进程稍慢，同时运行；② $\\mathrm { P _ { 1 } }$ 进程首先进入if条件语句，因此获得了 y的互斥访问权， $\\mathrm { P } _ { 2 }$ 被阻塞；③在第一个 $\\mathrm { P _ { 1 } }$ 进程未释放y之前，又有另一个 $\\mathrm { P _ { 1 } }$ 进入，c1的值变成2，当第一个 $\\mathrm { P } _ { 1 }$ 离开时， $\\mathrm { P } _ { 2 }$ 仍然被阻塞，这种情形不断发生；④在这种情况下会发生什么事？$\\mathrm { P } _ { 1 }$ 顺利执行， $\\mathrm { P } _ { 2 }$ 很郁闷，长期被阻塞。 V\n综上所述，不会发生死锁，但会出现饥饿现象。因此选B。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_24_5abaa251bb",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 24,
      "type": "single_choice",
      "question": "有两个并发进程，对于如下这段程序的运行，正确的说法是（）。 ∠4.有网个开反近程，对丁如下这权程序的运仃，止硼的说法定（)。 int x,y,z,t,u; P1 ( ) P2 ( ) { 计 while(1){ while(1) { x=1; x=0; y=0; t=0; if x>=1 then y=y+1; if x<=1 then t=t+2; z=y; u=t; 1 1 1 }",
      "options": {
        "A": "程序能正确运行，结果唯一",
        "B": "程序不能正确运行，可能有两种结果",
        "C": "程序不能正确运行，结果不确定",
        "D": "程序不能正确运行，可能死锁"
      },
      "answer": [
        "C"
      ],
      "explanation": "本题中两个进程不能正确地工作，运行结果的可能性详见下面的说明。\n1. x = 1; 5. x = 0;\n3. 2. y = 0; $\\mathrm { I f ~ x > = 1 ~ t h e n ~ y = y + 1 ; }$ 计算 6. t = 0; 7. if x <= 1 then t = t + 2;\n4. z=y; 8. u = t;\n不确定的原因是由于使用了公共变量x，考查程序中与变量x有关的语句共四处，执行的顺序是 $1 2 3 4 5 6 7 8$ 时，结果是 $\\begin{array} { r } { \\mathrm { y } = 1 , \\mathrm { z } = 1 , \\mathrm { t } = 2 , \\mathrm { u } = 2 , \\mathrm { x } = 0 ; } \\end{array}$ 并发执行过程是1→$2 5 6 3 4 7 8$ 时，结果是 $\\mathrm { y } = 0 , \\mathrm { z } = 0 , \\mathrm { t } = 2 , \\mathrm { u } = 2 , \\mathrm { x } = 0$ ；执行的顺序是 $5 { } 6 { } 7 { } 8 { }$ 1→2→3→4 时，结果是 $\\mathrm { y } = 1 , \\mathrm { z } = 1 , \\mathrm { t } = 2 , \\mathrm { u } = 2 , \\mathrm { x } = 1$ ；执行的顺序是 $5 { } 6 { } 1 { } 2 { } 7 { } 8 { } 3 { } 4$ 时，结果是 $\\mathrm { y } = 1 , \\mathrm { z } = 1 , \\mathrm { t } = 2 , \\mathrm { u } = 2 , \\mathrm { x } = 1$ 。可见结果有多种可能性。 机\n显然，无论执行顺序如何，x的结果只能是0或1，因此语句7的条件一定成立，即 $\\mathrm { t } = \\mathrm { u } = 2$ 的结果是一定的；而y=z必定成立，只可能有0,1两种情况，又不可能出现 $\\mathbf { x } = 1 , \\mathbf { y } = \\mathbf { z } = 0$ 的情况，所以总共只有3种结果（答案中的3种）。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_26_d5b8b17976",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 26,
      "type": "single_choice",
      "question": "假设具有5 个进程的进程集合 $\\mathrm { P } = \\{ \\mathrm { P } _ { 0 } , \\mathrm { P } _ { 1 } , \\mathrm { P } _ { 2 } , \\mathrm { P } _ { 3 } , \\mathrm { P } _ { 4 } \\}$ ，系统中有三类资源A, B, C，假设在某时刻有如下状态，见下表。 系统是处于安全状态的，则 x, y, z 的取值可能是（)。 王I. 1, 4, 0 II. 0, 6,2 III. 1, 1, 1 IV. 0,4,7",
      "options": {
        "A": "I、II、IV",
        "B": "I、II",
        "C": "仅I",
        "D": "I、III"
      },
      "answer": [
        "C"
      ],
      "explanation": "$$\n{ \\mathrm { N e e d } } = { \\mathrm { M a x } } - { \\mathrm { A l l o c a t i o n } } = { \\left[ \\begin{array} { l l l } { 0 } & { 0 } & { 4 } \\\\ { 1 } & { 7 } & { 5 } \\\\ { 2 } & { 3 } & { 5 } \\\\ { 0 } & { 6 } & { 4 } \\\\ { 0 } & { 6 } & { 5 } \\end{array} \\right] } - { \\left[ \\begin{array} { l l l } { 0 } & { 0 } & { 3 } \\\\ { 1 } & { 0 } & { 0 } \\\\ { 1 } & { 3 } & { 5 } \\\\ { 0 } & { 0 } & { 2 } \\\\ { 0 } & { 0 } & { 1 } \\end{array} \\right] } = { \\left[ \\begin{array} { l l l } { 0 } & { 0 } & { 1 } \\\\ { 0 } & { 7 } & { 5 } \\\\ { 1 } & { 0 } & { 0 } \\\\ { 0 } & { 6 } & { 2 } \\\\ { 0 } & { 6 } & { 4 } \\end{array} \\right] }\n$$\n说法I：根据 need 矩阵可知，当 Available 为(1,4,0)时，可满足 $\\mathrm { P } _ { 2 }$ 的需求； $\\mathrm { P } _ { 2 }$ 结束后释放资源，\nAvailable 为(2, 7, 5)可以满足 $\\mathrm { P } _ { 0 } , \\mathrm { P } _ { 1 } , \\mathrm { P } _ { 3 } , \\mathrm { P } _ { 4 }$ 中任意一个进程的需求，所以系统不会出现死锁，处于安全状态。说法Ⅱ：当Available为(0.6.2)时，可以满足进程 $\\mathrm { P } _ { 0 } , \\mathrm { P } _ { 3 }$ 的需求；这两个进程结束后释放资源，Available为(0,6,7)，仅可以满足进程4的需求； $\\mathrm { P } _ { 4 }$ 结束并释放后，Available为(0,6,8)，此时不能满足余下任意一个进程的需求，因此当前处在非安全状态。说法：当Available为(1,1,1)时，可以满足进程 $\\mathrm { P } _ { 0 } , \\mathrm { P } _ { 2 }$ 的需求；这两个进程结束后释放资源，Available为(2,4,9)，此时不能满足余下任意一个进程的需求，处于非安全状态。说法 $\\mathrm { I V } { : }$ 当Available为(0,4,7)时，可以满足 $\\mathrm { { P _ { 0 } } }$ 的需求，进程结束后释放资源，Available为(0,4,10)，此时不能满足余下任意一个进程的需求，处于非安全状态。综上分析：只有说法Ⅰ处于安全状态。 YTA",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_32_e3f1cdd3f8",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 32,
      "type": "single_choice",
      "question": "假定某计算机系统有两类可使用资源： ${ \\sf R } _ { 1 } \\ ( { \\sf R } _ { 1 }$ 共2个单位）和 ${ \\sf R } _ { 2 } \\ ( \\ { \\sf R } _ { 2 }$ 共1个单位)，由进程 $\\mathrm { P _ { 1 } }$ 和 $\\mathrm { P } _ { 2 }$ 共享。两个进程均按如下顺序使用资源：申请 $\\mathrm { R } _ { 1 } { }$ 申请 $\\mathrm { R } _ { 2 } $ 申请 $\\mathrm { R } _ { 1 } { }$ 释放$\\mathrm { R } _ { 1 } { }$ 释放 $\\mathrm { R } _ { 2 } $ 释放 $\\mathrm { R } _ { 1 }$ ，则在系统运行过程中（）。",
      "options": {
        "A": "不可能产生死锁",
        "B": "有可能产生死锁，因为 $\\mathrm { R } _ { 1 }$ 资源不足",
        "C": "有可能产生死锁，因为 $\\mathsf { R } _ { 2 }$ 资源不足",
        "D": "只有一种进程执行序列可能导致死锁"
      },
      "answer": [
        "B"
      ],
      "explanation": "当 $\\mathrm { P } _ { 1 }$ 和 $\\mathrm { P } _ { 2 }$ 各自完成第一步后，均已持有1个 $\\mathrm { R } _ { 1 }$ （共2个）， $\\mathrm { R } _ { 1 }$ 资源耗尽。无论哪个进程先申请到唯一的 $\\mathsf { R } _ { 2 }$ ，其在下一步申请第二个 $\\mathrm { R } _ { 1 }$ 时都将因资源不足而阻塞；另一个进程则因无法获\n取 $\\mathsf { R } _ { 2 }$ 而阻塞。例如，此时 $\\mathrm { P } _ { 1 }$ 持有 $\\mathrm { R } _ { 1 }$ 和 $\\mathrm { R } _ { 2 }$ 并等待 $\\mathrm { R } _ { 1 }$ ， $\\mathrm { P } _ { 2 }$ 持有 $\\mathrm { R } _ { 1 }$ 并等待 $\\mathrm { R } _ { 2 }$ ，形成循环等待链，且资源不可剥夺，系统陷入死锁。根本原因在于：每个进程需两次使用 $\\mathrm { R } _ { 1 }$ ，而系统仅有2个 $\\mathrm { R } _ { 1 }$ 单位，无法满足两个进程在交错执行时各自的第二次 $\\mathrm { R } _ { 1 }$ 请求，故死锁源于$\\mathrm { R } _ { 1 }$ 资源不足。\n补充分析：若 $\\mathrm { R _ { 1 } }$ 无限、 $\\mathrm { R } _ { 2 }$ 为1个，则总有一个进程能完成并\n释放 $\\mathrm { R } _ { 2 }$ ，不会死锁；但若 $\\mathrm { R } _ { 1 }$ 为2个、 $\\mathrm { R } _ { 2 }$ 无限，则仍可能死锁。例如： $\\mathrm { P } _ { 1 }$ 申请到 $\\mathrm { R } _ { 1 }$ 、 $\\mathrm { R } _ { 2 }$ 后被切换，$\\mathrm { P } _ { 2 }$ 申请 $\\mathrm { R } _ { 1 }$ 、 $\\mathsf { R } _ { 2 }$ ，再申请 $\\mathrm { R } _ { 1 }$ 时阻塞； $\\mathrm { P _ { 1 } }$ 恢复执行后也因无法获得第二个 $\\mathrm { R } _ { 1 }$ 而阻塞。此时，双方互相等待，死锁发生。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_33_ea29713c2a",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 33,
      "type": "single_choice",
      "question": "在哲学家就餐问题中，若同时存在左撇子和右撇子（将先拿起左侧筷子的人称为左撇子，而将先拿起右侧筷子的人称为右撇子），则不会发生死锁，因为破坏了（）。",
      "options": {
        "A": "互斥条件",
        "B": "请求与保持条件",
        "C": "不剥夺条件",
        "D": "循环等待条件"
      },
      "answer": [
        "D"
      ],
      "explanation": "当哲学家中同时存在左撇子（先取左侧筷子）和右撇子（先取右侧筷子）时，各进程请求资源的顺序不再一致，至少有一对相邻哲学家不会同时持有一根筷子并等待对方释放另一根，从而无法形成环形等待链，破坏了死锁的循环等待条件，避免了死锁的发生。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_34_b1dfcf841d",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 34,
      "type": "single_choice",
      "question": "【2009统考真题】某计算机系统中有8台打印机，由K个进程竞争使用，每个进程最多需要3台打印机。该系统可能发生死锁的K的最小值是（）。",
      "options": {
        "A": "2",
        "B": "3",
        "C": "4",
        "D": "5"
      },
      "answer": [
        "C"
      ],
      "explanation": "这类题可用到组合数学中鸽巢原理的思想。考虑最极端的情况，因为每个进程最多需要3台打印机，若每个进程已经占有了2台打印机，则只要还有多的打印机，总能满足一个进程达到3台的条件，然后顺利执行，所以将8台打印机分给K个进程，每个进程有2台打印机，这个情况就是极端情况，K为4。或者，假设M是打印机的数量，K是进程的数量，R是每个进程最多需要打印机的数量。根据死锁公式逆推可得，若 $M { \\leqslant } K ( R - 1 )$ ，则系统可能发生死锁。将本题的数据代入，得到 $8 { \\leqslant } K ( 3 - 1 )$ ，即 $K { \\geqslant } 4$ ，因此系统可能发生死锁的K的最小值是4。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_35_51ecc0565b",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 35,
      "type": "single_choice",
      "question": "【2011统考真题】某时刻进程的资源使用情况见下表，此时的安全序列是（）。",
      "options": {
        "A": "$\\mathrm { P } _ { 1 } , \\mathrm { P } _ { 2 } , \\mathrm { P } _ { 3 } , \\mathrm { P } _ { 4 }$",
        "B": "$\\mathrm { P } _ { 1 } , \\mathrm { P } _ { 3 } , \\mathrm { P } _ { 2 } , \\mathrm { P } _ { 4 }$ 育",
        "C": "$\\mathrm { P } _ { 1 } , \\mathrm { P } _ { 4 } , \\mathrm { P } _ { 3 } , \\mathrm { P } _ { 2 }$",
        "D": "不存在"
      },
      "answer": [
        "D"
      ],
      "explanation": "本题应采用排除法，逐个代入分析。剩余资源分配给 $\\mathrm { P _ { 1 } }$ ，待 $\\mathrm { P _ { 1 } }$ 执行完后，可用资源数为(2,2,1)，此时仅能满足 $\\mathrm { P } _ { 4 }$ 的需求，排除选项A、B；接着分配给 $\\mathrm { P _ { 4 } }$ ，待 $\\mathrm { P _ { 4 } }$ 执行完后，可用资源数为(2,2,2),此时已无法满足任何进程的需求，排除选项 $\\mathrm { C } _ { \\mathrm { { < } } }$ K\n此外，本题还可以使用银行家算法求解（对选择题来说显得过于复杂）。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_36_b08b6206ca",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 36,
      "type": "single_choice",
      "question": "【2012统考真题】假设5个进程 $\\mathrm { P } _ { 0 } , \\mathrm { P } _ { 1 } , \\mathrm { P } _ { 2 } , \\mathrm { P } _ { 3 } , \\mathrm { P } _ { 4 }$ 共享三类资源 $\\mathrm { R } _ { 1 } , \\mathrm { R } _ { 2 } , \\mathrm { R } _ { 3 }$ ，这些资源总数分别为18,6,22。 $T _ { 0 }$ 时刻的资源分配情况如下表所示，此时存在的一个安全序列是（）。",
      "options": {
        "A": "$\\mathrm { P } _ { 0 } , \\mathrm { P } _ { 2 } , \\mathrm { P } _ { 4 } , \\mathrm { P } _ { 1 } , \\mathrm { P } _ { 3 }$",
        "B": "$\\mathrm { P } _ { 1 } , \\mathrm { P } _ { 0 } , \\mathrm { P } _ { 3 } , \\mathrm { P } _ { 4 } , \\mathrm { P } _ { 2 }$",
        "C": "X $\\mathrm { P } _ { 2 } , \\mathrm { P } _ { 1 } , \\mathrm { P } _ { 0 } , \\mathrm { P } _ { 3 } , \\mathrm { P } _ { 4 }$",
        "D": "$\\mathrm { P } _ { 3 } , \\mathrm { P } _ { 4 } , \\mathrm { P } _ { 2 } , \\mathrm { P } _ { 1 } , \\mathrm { P } _ { 0 }$"
      },
      "answer": [
        "D"
      ],
      "explanation": "首先求得各进程的需求矩阵Need与可利用资源向量 Available:\n比较 Need 和 Available 发现，初始时进程 $\\mathrm { P } _ { 1 }$ 与 $\\mathrm { P } _ { 3 }$ 可满足需求，排除选项A、C。尝试给 $\\mathrm { P } _ { 1 }$ 分配资源时， $\\mathrm { P } _ { 1 }$ 完成后 Available 将变为(6,3,6)，无法满足 $\\mathrm { { P _ { 0 } } }$ 的需求，排除选项B。尝试给 $\\mathrm { P } _ { 3 }$ 分配资源时， $\\mathrm { P } _ { 3 }$ 完成后Available将变为(4,3,7)，该向量能满足其他所有进程的需求。因此，以 $\\mathrm { P } _ { 3 }$ 开头的所有序列都是安全序列。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_2.4.6_43_02dc056eef",
      "book": "操作系统",
      "chapter": 2,
      "chapter_title": "",
      "section": "2.4.6",
      "section_title": "本节习题精选",
      "num": 43,
      "type": "single_choice",
      "question": "【2020统考真题】某系统中有",
      "options": {
        "A": "B 两类资源各6个，t时刻的资源分配及需求情况如 下表所示。 t时刻安全性检测结果是（）。A. 存在安全序列 $\\mathrm { P } _ { 1 } , ~ \\mathrm { P } _ { 2 } , ~ \\mathrm { P } _ { 3 }$ そ计算机",
        "B": "存在安全序列 $\\mathrm { P } _ { 2 } , ~ \\mathrm { P } _ { 1 } , ~ \\mathrm { P } _ { 3 }$",
        "C": "存在安全序列 $\\mathrm { P } _ { 2 } , ~ \\mathrm { P } _ { 3 } , ~ \\mathrm { P } _ { 1 }$",
        "D": "不存在安全序列"
      },
      "answer": [
        "B"
      ],
      "explanation": "首先求出需求矩阵：\n$$\n{ \\mathrm { N e e d } } = { \\mathrm { M a x } } - { \\mathrm { A l l o c a t i o n } } = { \\left[ \\begin{array} { l l } { 4 } & { 4 } \\\\ { 3 } & { 1 } \\\\ { 3 } & { 4 } \\end{array} \\right] } - { \\left[ \\begin{array} { l l } { 2 } & { 3 } \\\\ { 2 } & { 1 } \\\\ { 1 } & { 2 } \\end{array} \\right] } = { \\left[ \\begin{array} { l l } { 2 } & { 1 } \\\\ { 1 } & { 0 } \\\\ { 2 } & { 2 } \\end{array} \\right] }\n$$\n由 Allocation 得知当前 Available为(1，0)。由需求矩阵可知，初始只能满足 $\\mathrm { P } _ { 2 }$ 的需求，选项A错误。 $\\mathrm { P } _ { 2 }$ 释放资源后 Available变为(3, 1)，此时仅能满足 $\\mathrm { P _ { 1 } }$ 的需求，选项C错误。 $\\mathrm { P _ { 1 } }$ 释放资源后Available变为(5,4)，可以满足 $\\mathrm { P } _ { 3 }$ 的需求，得到的安全序列为 $\\mathrm { P } _ { 2 } , \\mathrm { P } _ { 1 } , \\mathrm { P } _ { 3 }$ ，选项B正确，选项D错误。",
      "source_file": "mineru/2027/操作系统/操作系统_p151-200.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_01_8b255850ae",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于存储管理目标的说法中，错误的是（）。",
      "options": {
        "A": "为进程分配内存空间",
        "B": "回收被进程释放的内存空间",
        "C": "提高内存的利用率",
        "D": "提高内存的物理存取速度"
      },
      "answer": [
        "D"
      ],
      "explanation": "内存的物理存取速度是由硬件决定的，而不是由操作系统管理的。操作系统可以通过虚拟内\n存、缓存等技术提高数据的逻辑存取速度，但不能改变内存的物理特性。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_02_3264693b62",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于内存保护的描述中，不正确的是（）。",
      "options": {
        "A": "一个进程不能未被授权就访问另外一个进程的内存空间",
        "B": "内存保护可以仅通过操作系统（软件）来满足，不需要处理器（硬件）的支持",
        "C": "内存保护的方法有界地址保护和上下限地址保护",
        "D": "一个进程不能直接跳转到另一个进程的指令地址中"
      },
      "answer": [
        "B"
      ],
      "explanation": "内存保护需要硬件和软件的配合，不能仅靠操作系统来实现。通常需要在CPU中设置上下限寄存器、重定位寄存器、界地址寄存器等寄存器，以记录进程在内存中的合法范围。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_03_ac897f60d1",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "内存保护需要由（）完成，以保证进程空间不被非法访问。",
      "options": {
        "A": "操作系统",
        "B": "硬件机构",
        "C": "操作系统和硬件机构合作",
        "D": "操作系统或者硬件机构独立完成"
      },
      "answer": [
        "C"
      ],
      "explanation": "内存保护是内存管理的一部分，是操作系统的任务，但是出于安全性和效率考虑，必须由硬件实现，所以需要操作系统和硬件机构的合作来完成。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_04_55ba9e9908",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列各种存储管理方式中，需要硬件地址变换机构的是（）。I. 单一连续分配 II. 固定分区分配 Ⅲ. 页式存储管理IV. 动态分区分配 V. 页式虚拟存储管理",
      "options": {
        "A": "I、III、V",
        "B": "II、III、IV",
        "C": "III、IV、V",
        "D": "II、III、IV、V"
      },
      "answer": [
        "C"
      ],
      "explanation": "硬件地址变换机构一般用于动态重定位的情况。而单一连续分配和固定分区分配采用的是静态重定位，不需要硬件地址变换机构，而由装入程序或操作系统来完成地址转换。因此，只有页式存储管理、动态分区分配和页式虚拟存储管理需要硬件地址变换机构。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_05_34f2fbf10c",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "在固定分区分配中，每个分区的大小是（）。",
      "options": {
        "A": "随作业长度变化",
        "B": "可以不同但预先固定",
        "C": "相同",
        "D": "可以不同但根据作业长度固定"
      },
      "answer": [
        "B"
      ],
      "explanation": "在固定分区分配中，每个分区的大小是在系统启动时就确定了的，不会随着作业的长度而变化。分区的大小可以不同，也可以相同，但是一旦确定，就不会改变。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_06_91bbb65838",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在动态分区分配方案中，某一进程完成后，系统回收其主存空间并与相邻空闲区合并，为此需修改空闲区表，造成空闲区数减1的情况是（）。",
      "options": {
        "A": "无上邻空闲区也无下邻空闲区",
        "B": "有上邻空闲区但无下邻空闲区",
        "C": "有下邻空闲区但无上邻空闲区",
        "D": "有上邻空闲区也有下邻空闲区"
      },
      "answer": [
        "D"
      ],
      "explanation": "将上邻空闲区、下邻空闲区和回收区合并为一个空闲区，因此空闲区数反而减少了一个。而仅有上邻空闲区或下邻空闲区时，空闲区数并不减少。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_07_2830a362df",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "设内存的分配情况如右图所示。若要申请一块40KB的内存空间，采用最佳适应算法，则所得到的分区首址为（）。",
      "options": {
        "A": "100K",
        "B": "190K",
        "C": "330K",
        "D": "410K"
      },
      "answer": [
        "C"
      ],
      "explanation": "最佳适配算法是指，每次为作业分配内存空间时，总是找到能满足空间大小需要的最小空闲分区给作业，可以产生最小的内存空闲分区。从图中可以看出应选择大小为60KB的空闲分区，其首地址为330K。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_08_2a3d9cf4c2",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "某分段存储管理系统中，段表内容如下表所示，逻辑地址的格式为（段号，段内偏移)，则逻辑地址(2,154)对应的物理地址是（)。",
      "options": {
        "A": "120K + 2",
        "B": "480K + 154",
        "C": "30K + 154",
        "D": "480K + 2"
      },
      "answer": [
        "B"
      ],
      "explanation": "段号为2，其对应的首地址为480K，段长度为20K，大于154，所以逻辑地址(2,154)对应的物理地址为 480K + 154。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_09_bbb372a09b",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "动态重定位是在作业的（）中进行的。 NT",
      "options": {
        "A": "编译过程",
        "B": "装入过程",
        "C": "链接过程",
        "D": "执行过程"
      },
      "answer": [
        "D"
      ],
      "explanation": "静态装入是指在编程阶段就把物理地址计算好。可重定位是指在装入时把逻辑地址转换成物理地址，但装入后不能改变。动态重定位是指在执行时再决定装入的地址并装入，装入后有可能换出，所以同一个模块在内存中的物理地址是可能改变的，在作业运行过程中，当执行到一条访存指令时，再把逻辑地址转换为主存的物理地址，实际上是通过地址变换机构实现的。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_10_db11fac247",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "下列关于程序装入的动态重定位方式的描述中，错误的是（）。",
      "options": {
        "A": "系统将程序装入内存后，程序在内存中的位置可能发生移动",
        "B": "系统为每个进程分配一个重定位寄存器",
        "C": "被访问单元的物理地址 = 逻辑地址+ 重定位寄存器的值",
        "D": "逻辑地址到物理地址的映射过程在进程执行时发生"
      },
      "answer": [
        "B"
      ],
      "explanation": "动态重定位允许程序在内存中移动，系统中只有一个重定位寄存器，每次切换进程时，都要保存和恢复该寄存器的值，不会为每个进程分配一个重定位寄存器，选项B错误。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_11_917686ed66",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 11,
      "type": "single_choice",
      "question": "动态重定位的过程依赖于（）。I. 可重定位装入程序 II. 重定位寄存器 III. 地址变换机构 IV. 目标程序",
      "options": {
        "A": "I和Ⅱ",
        "B": "Ⅱ和ⅢI",
        "C": "I、II和III",
        "D": "I、II、III 和 IV"
      },
      "answer": [
        "C"
      ],
      "explanation": "可重定位装入程序在重定位的过程中执行，重定位寄存器（也称基址寄存器）用于存放进程的基地址，地址变换机构用于将指令中的逻辑地址与重定位寄存器中的基地址相加得到物理地址。目标程序是装入内存后执行的，动态重定位不依赖于目标程序。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_41_b11b25c0e7",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 41,
      "type": "single_choice",
      "question": "对主存储器的访问，（）。",
      "options": {
        "A": "以块（页）或段为单位 道计",
        "B": "以字节或字为单位",
        "C": "随存储器的管理方案不同而异",
        "D": "以用户的逻辑记录为单位"
      },
      "answer": [
        "B"
      ],
      "explanation": "这里是指主存的访问，不是主存的分配。对主存的访问是以字节或字为单位的。例如，在页式管理中，不仅要知道块号，还要知道页内偏移量。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_52_4e79e7da38",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 52,
      "type": "single_choice",
      "question": "以下存储管理方式中，会产生内部碎片的是（）。I. 分段虚拟存储管理 II. 段页式分区管理 道计 II. 分页虚拟存储管理 IV. 固定式分区管理",
      "options": {
        "A": "I、II、III",
        "B": "III、IV 7",
        "C": "仅II",
        "D": "II、III、IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "只要是固定的分配就会产生内部碎片，其余的都会产生外部碎片。若固定和不固定同时存在（例如段页式），则仍视为固定。分段虚拟存储管理：每段的长度都不一样（对应不固定），所以会产生外部碎片。分页虚拟存储管理：每页的长度都一样（对应固定），所以会产生内部碎片。段页式分区管理：既有固定，又有不固定，以固定为主，所以会有内部碎片。固定式分区管理：很明显固定，会产生内部碎片。综上分析，说法Ⅱ、Ⅲ、IⅣ会产生内部碎片。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_65_2adc454ce4",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 65,
      "type": "single_choice",
      "question": "【2016统考真题】某进程的段表内容如下所示。 访问段号为2、段内地址为400的逻辑地址时，进行地址转换的结果是（）。",
      "options": {
        "A": "段缺失异常",
        "B": "得到内存地址 4400",
        "C": "越权异常",
        "D": "越界异常"
      },
      "answer": [
        "D"
      ],
      "explanation": "分段系统的逻辑地址A到物理地址E之间的地址变换过程如图3.15所示。\n①从逻辑地址A中取出前几位为段号S，后几位为段内偏移量W，注意段式存储管理的题目中，逻辑地址一般以二进制数给出，而页式存储管理的题目中，逻辑地址一般以十进制数给出，读者要注意具体问题具体分析。\n②比较段号S和段表长度M，若 $S { \\stackrel { } { = } } M ,$ 则产生越界异常，否则继续执行。\n③ 在段表中查询段号对应的段表项，段号 S对应的段表项地址 = 段表始址F + 段号 S×段表项长度。取出段表项中该段的段长C，若 $W { \\ni } C ,$ 则产生越界中断，否则继续执行。\n④取出段表项中该段的基址b，计算 $E = b + W$ ，用得到的物理地址E去访问内存。\n题目中段号为2的段长为300，小于段内地址400，因此发生越界异常，选项D正确。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.1.7_66_bff7d8c5ec",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.1.7",
      "section_title": "本节习题精选",
      "num": 66,
      "type": "single_choice",
      "question": "【2017统考真题】某计算机按字节编址，其动态分区内存管理采用最佳适应算法，每次分配和回收内存后都对空闲分区链重新排序。当前空闲分区信息如下表所示。 回收始址为60K、大小为140KB的分区后，系统中空闲分区的数量、空闲分区链第一个分区的始址和大小分别是（）。",
      "options": {
        "A": "3, 20K, 380KB",
        "B": "3, 500K, 80KB",
        "C": "4, 20K, 180KB",
        "D": "4, 500K, 80KB"
      },
      "answer": [
        "B"
      ],
      "explanation": "回收始址为60K、大小为140KB的分区时，它与表中第一个分区和第四个分区合并，成为始址为20K、大小为380KB的分区，剩余3个空闲分区。在回收内存后，算法会对空闲分区链按分区大小由小到大进行排序，表中的第二个分区排第一。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_01_1f8ed24f3f",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于存储管理的叙述中，正确的是（）。",
      "options": {
        "A": "存储保护的目的是限制内存的分配",
        "B": "在内存为M、有N个用户的分时系统中，每个用户占用M/N的内存空间",
        "C": "在虚拟内存系统中，只要磁盘空间无限大，作业就能拥有任意大的编址空间",
        "D": "实现虚拟内存管理必须有相应硬件的支持 7"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项A、B显然错误。编址空间大小由虚拟地址位数决定，与磁盘容量无关。虚拟内存管理必须依赖硬件支持，如地址变换机构、缺页中断机构及存储管理单元等，仅靠软件无法实现。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_02_1d575a99ba",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "请求分页存储管理中，若把页面尺寸增大一倍而且可容纳的最大页数不变，则在程序顺序执行时缺页中断次数会（）。",
      "options": {
        "A": "增加",
        "B": "减少 计",
        "C": "不变",
        "D": "可能增加也可能减少"
      },
      "answer": [
        "B"
      ],
      "explanation": "对于顺序执行程序，缺页中断的次数等于其访问的页帧数。因为页面尺寸增大，存放程序需要的页帧数就减少，所以缺页中断的次数也会减少。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_03_17c38a5249",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "进程在执行中发生了缺页中断，经操作系统处理后，应让其执行（）指令。",
      "options": {
        "A": "被中断的前一条",
        "B": "被中断的那一条",
        "C": "被中断的后一条",
        "D": "启动时的第一条"
      },
      "answer": [
        "B"
      ],
      "explanation": "缺页中断是访存指令引起的，说明所要访问的页面不在内存中，进行缺页中断处理并调入所要访问的页后，访存指令显然应该重新执行。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_05_e5c9113dfe",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列关于虚拟存储器的论述中，正确的是（）。",
      "options": {
        "A": "作业在运行前，必须全部装入内存，且在运行过程中也一直驻留内存",
        "B": "作业在运行前，不必全部装入内存，且在运行过程中也不必一直驻留内存",
        "C": "作业在运行前，不必全部装入内存，但在运行过程中必须一直驻留内存",
        "D": "作业在运行前，必须全部装入内存，但在运行过程中不必一直驻留内存"
      },
      "answer": [
        "B"
      ],
      "explanation": "在非虚拟存储器中，作业必须全部装入内存且在运行过程中也一直驻留内存；在虚拟存储器中，作业不必全部装入内存且在运行过程中也不用一直驻留内存，这是两者的主要区别之一。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_06_3113da9cb5",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "以下不属于虚拟内存特征的是（）。",
      "options": {
        "A": "一次性",
        "B": "多次性",
        "C": "对换性",
        "D": "虚拟性"
      },
      "answer": [
        "A"
      ],
      "explanation": "多次性、对换性和离散性是虚拟内存的特征，一次性则是传统存储系统的特征。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_07_a9bfa41e73",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "为使虚存系统有效地发挥其预期的作用，所运行的程序应具有的特性是（）。",
      "options": {
        "A": "该程序不应含有过多的I/O操作",
        "B": "该程序的大小不应超过实际的内存容量",
        "C": "该程序应具有较好的局部性 首计算机",
        "D": "该程序的指令相关性不应过多"
      },
      "answer": [
        "C"
      ],
      "explanation": "虚拟存储技术基于程序的局部性原理。局部性越好，虚拟存储系统越能更好地发挥作用。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_08_d00da9188f",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "（）是请求分页存储管理方式和基本分页存储管理方式的区别。",
      "options": {
        "A": "地址重定向",
        "B": "不必将作业全部装入内存",
        "C": "采用快表技术",
        "D": "不必将作业装入连续区域"
      },
      "answer": [
        "B"
      ],
      "explanation": "请求分页存储管理方式和基本分页存储管理方式的区别是，前者采用虚拟技术，因此开始运行时，不必将作业全部一次性装入内存，而后者不是。 天へ",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_09_dc8a528d55",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "通常所说的“存储保护”的基本含义是（）。",
      "options": {
        "A": "防止存储器硬件受损",
        "B": "防止程序在内存丢失",
        "C": "防止程序间相互越界访问",
        "D": "防止程序源码被人偷窃"
      },
      "answer": [
        "C"
      ],
      "explanation": "通常所说的“存储保护”的基本含义是防止程序间相互越界访问。存储保护可以保证多个程序在共享主存时不相互覆盖或非法访问，从而保证系统的正常运行和安全性。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_10_1dcdf0ab19",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "在页式虚拟存储管理中，程序的链接方式必然是（）。",
      "options": {
        "A": "静态链接",
        "B": "装入时动态链接",
        "C": "运行时动态链接",
        "D": "不确定哪种链接方式"
      },
      "answer": [
        "C"
      ],
      "explanation": "在页式虚拟存储管理中，程序的逻辑地址和物理地址是不一致的，而且物理地址是在程序运行时才确定的，因此，程序的链接也必须在运行时进行，不能在装入时或编译时进行。运行时动态链接是一种在程序执行过程中，根据需要动态地将目标模块装入内存并进行链接的技术。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_12_3ea78029d6",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 12,
      "type": "single_choice",
      "question": "在采用页式虚拟存储管理和固定分配局部置换策略的系统中，数组采用行优先存储，页框大小为512B。某个进程中有如下代码段（该代码段已提前读入内存）：int a[128][128];for(int i=0;i<128;i++)$\\mathrm { f o r ( i n t \\dot { \\Omega } \\mathrm { j } = 0 ; j < 1 } 2 8 \\dot { \\Omega } \\dot { \\mathrm { ; } } \\dot { \\mathrm { ] } } + + \\mathrm { ) }$ a[j][i]=0; 系统为该进程分配的数据区只有1个页框，则执行该代码会发生（）次缺页中断。",
      "options": {
        "A": "1 妆",
        "B": "2",
        "C": "128",
        "D": "16384"
      },
      "answer": [
        "D"
      ],
      "explanation": "数组大小为128×128，int 型数据占4B，一个页框可以存放一行数据。当访问 a[0][0]时，发\n生第一次缺页中断，此时调入第一行数据；之后访问a[1]0]，又发生缺页中断。每访问一个元素，都发生一次缺页中断，共有 $1 2 8 \\times 1 2 8 = 1 6 3 8 4$ 个元素，因此共发生16384次缺页中断。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_13_067e595b38",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 13,
      "type": "single_choice",
      "question": "假设某个进程分配有4个页框，每个页框大小为128个字（一个整数占一个字）。进程的代码段正好可以存放在一页中，而且总是占用0号页框。数据会在其他3个页框中换进或换出。数组Ⅹ为按行优先存储，则执行该进程会发生（）次缺页中断。int X[64][64];王$\\begin{array} { c } { { \\mathrm { f o r ~ ( i n t \\phantom { - } j = 0 } ; \\dot { \\mathrm { ~ j < 6 4 } } ; \\dot { \\mathrm { ~ j + + } } ) } } \\\\ { { \\mathrm { f o r ~ ( i n t \\phantom { - } i = 0 } ; \\dot { \\mathrm { ~ i < 6 4 } } ; \\dot { \\mathrm { ~ i + + } } ) } } \\\\ { { \\mathrm { x \\left[ \\dot { \\mathrm { ~ i ~ n t } } \\right] \\left[ \\dot { \\mathrm { ~ j } } \\right] = 0 } ; } } \\end{array}$",
      "options": {
        "A": "32",
        "B": "1024",
        "C": "2048",
        "D": "其他都不对"
      },
      "answer": [
        "C"
      ],
      "explanation": "数组大小为64×64，一个页框可以存放两行数据。当访问X[0][0]时，发生第一次缺页中断，此时调入前两行数据，之后访问 X[1][0]，不发生缺页中断，因为已被调入内存；当访问 X[2][0]时，又发生缺页中断；同理，访问X[3][0]时不发生缺页中断。不难发现，每访问两个元素就发生一次缺页中断，共有64×64=4096个元素，因此共发生2048次缺页中断。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_14_8330a20507",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 14,
      "type": "single_choice",
      "question": "在配置了TLB的页式虚拟存储管理的系统中，假设TLB的命中率约为75%，忽略访问TLB的时间，并且使用二级页表，则每次存取的平均访存次数是（）。",
      "options": {
        "A": "1.25",
        "B": "1.5",
        "C": "1.75",
        "D": "2"
      },
      "answer": [
        "B"
      ],
      "explanation": "若TLB命中，则访问TLB就能得到物理地址；若TLB未命中，则需要2次访存，依次访问一级页表和二级页表，才能得到物理地址，最后用物理地址在内存中存取数据。平均访存次数=TLB 命中率×1 + (1- TLB 命中率) $\\times 3 = 0 . 7 5 { \\times } 1 + ( 1 - 0 . 7 5 ) { \\times } 3 = 1 . 5$",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_15_7eafa605c4",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 15,
      "type": "single_choice",
      "question": "下面关于请求页式系统的页面调度算法中，说法错误的是（）。",
      "options": {
        "A": "一个好的页面调度算法应减少和避免抖动现象",
        "B": "FIFO算法实现简单，选择最先进入主存储器的页面调出",
        "C": "LRU算法基于局部性原理，首先调出最近一段时间内最长时间未被访问过的页面",
        "D": "CLOCK算法首先调出一段时间内被访问次数多的页面"
      },
      "answer": [
        "D"
      ],
      "explanation": "CLOCK算法选择将最近未使用的页面置换出去，因此也称NRU算法。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_17_dc365d98e1",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 17,
      "type": "single_choice",
      "question": "在请求分页存储管理中，若采用FIFO算法，则当可供分配的页帧数增加时，缺页中断的次数（）。",
      "options": {
        "A": "减少",
        "B": "增加 道计",
        "C": "无影响",
        "D": "可能增加也可能减少"
      },
      "answer": [
        "D"
      ],
      "explanation": "请求分页存储管理中，若采用FIFO算法，则可能产生当驻留集增大时页故障数不减反增的Belady异常。然而，还有另外一种情况。例如，页面序列为1,2,3,1,2,3，当页帧数为2时产生6次缺页中断，当页帧数为3时产生3次缺页中断。所以在请求分页存储管理中，若采用FIFO算法，则当可供分配的页帧数增加时，缺页中断的次数可能增加，也可能减少。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_18_01dcc8dc3c",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 18,
      "type": "single_choice",
      "question": "设主存容量为1MB，外存容量为400MB，计算机系统的地址寄存器有32位，那么虚拟存储器的最大容量是（）。",
      "options": {
        "A": "1MB",
        "B": "401MB",
        "C": "$1 \\mathrm { M B } + 2 ^ { 3 2 } \\mathrm { M B }$",
        "D": "$2 ^ { 3 2 } \\mathrm { B }$"
      },
      "answer": [
        "D"
      ],
      "explanation": "进程的虚拟地址空间寻址由系统的地址结构决定，这就决定了虚拟存储器的最大容量，而与主存和外存的容量没有必然联系，因此虚拟地址空间为 $2 ^ { 3 2 } \\mathrm { B }$ 。比如，在64位系统环境下，虚拟存储技术使得进程可用地址空间达24B，但外存显然是达不到这个大小的。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_20_99d2cd1e62",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 20,
      "type": "single_choice",
      "question": "在某分页存储管理的系统中，逻辑地址为16位，页面大小为1KB，第0,1,2,3号页依次存放在3,7,11,10号页框中，则逻辑地址0A6FH对应的物理地址为（）。",
      "options": {
        "A": "1E6FH",
        "B": "2E6FH",
        "C": "DE6FH",
        "D": "EE6FH"
      },
      "answer": [
        "B"
      ],
      "explanation": "页面大小为1KB，页内偏移量占10位，页号占6位，将0A6FH展开为二进制，得到逻辑页号为2（000010），存放在11号（001011）页框中，拼接上页内偏移量得到物理地址为2E6FH。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_21_90fa8ebb5e",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 21,
      "type": "single_choice",
      "question": "在决定页面大小时，选择较小的页面是为了减少（）。",
      "options": {
        "A": "页表大小",
        "B": "缺页次数",
        "C": "I/O 开销",
        "D": "页内碎片"
      },
      "answer": [
        "D"
      ],
      "explanation": "页面越小，页表项数量越多，页表所占的空间就更大；页面越小，缺页率越高；页面越小，换入换出的次数就越多，I/O操作更频繁。页面越小，页内浪费的空间越少，内存利用率越高。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_3.2.11_22_c6d3009440",
      "book": "操作系统",
      "chapter": 3,
      "chapter_title": "",
      "section": "3.2.11",
      "section_title": "本节习题精选",
      "num": 22,
      "type": "single_choice",
      "question": "某虚拟存储器系统采用页式内存管理，使用LRU页面置换算法，考虑页面访问地址序列18178272183821317137。假定内存容量为4个页面，开始时是空的，则页面失效次数是（）。",
      "options": {
        "A": "4",
        "B": "5",
        "C": "6",
        "D": "7"
      },
      "answer": [
        "C"
      ],
      "explanation": "利用LRU算法时的置换如下图所示。",
      "source_file": "mineru/2027/操作系统/操作系统_p201-250.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.1.5_01_56936d8e1c",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.5",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "UNIX操作系统中，输入/输出设备视为（）。",
      "options": {
        "A": "普通文件",
        "B": "目录文件",
        "C": "索引文件",
        "D": "特殊文件"
      },
      "answer": [
        "D"
      ],
      "explanation": "UNIX操作系统中，所有设备都被视为特殊的文件，因为UNIX操作系统控制和访问外部设备的方式和访问一个文件的方式是相同的。 XIT",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.1.5_02_4353e88f7c",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.5",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列说法中，（）属于文件的逻辑结构的范畴。",
      "options": {
        "A": "连续文件",
        "B": "系统文件",
        "C": "链接文件",
        "D": "流式文件"
      },
      "answer": [
        "D"
      ],
      "explanation": "逻辑文件有两种：无结构文件（流式文件）和有结构式文件。连续文件和链接文件都属于文件的物理结构，而系统文件是按文件用途分类的。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.1.5_03_a0ea491857",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.5",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "文件的逻辑结构是为了方便（）而设计的。",
      "options": {
        "A": "存储介质特性",
        "B": "操作系统的管理方式",
        "C": "主存容量",
        "D": "用户"
      },
      "answer": [
        "D"
      ],
      "explanation": "文件结构包括逻辑结构和物理结构。逻辑结构是用户组织数据的结构形式，数据组织形式来自需求，而物理结构是操作系统组织物理存储块的结构形式。\n因此说，逻辑文件的组织形式取决于用户，物理结构的选择取决于文件系统设计者针对硬件结构（如磁带介质很难实现链接结构和索引结构）所采取的策略（选项A和B）。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.1.5_04_83ddbfb05f",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.5",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "下列关于逻辑结构为索引文件的索引表的叙述中，（）是正确的。",
      "options": {
        "A": "索引表中每条记录的索引项可以有多个",
        "B": "对索引文件存取时，必须先查找索引表",
        "C": "索引表中含有索引文件的数据及其物理地址",
        "D": "建立索引的目的之一是减少存储空间"
      },
      "answer": [
        "B"
      ],
      "explanation": "索引文件由逻辑文件和索引表组成，对索引文件存取时，必须先查找索引表。索引项只包含每条记录的长度和在逻辑文件中的起始位置。每条记录都有一个索引项，因此提高了存储代价。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.1.5_05_2f5c419f9a",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.1.5",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "有一个顺序文件含有10000条记录，平均查找的记录数为5000个，采用索引顺序文件结构，则最好情况下平均只需约查找（）次记录。",
      "options": {
        "A": "1000",
        "B": "10000 KK",
        "C": "100",
        "D": "500"
      },
      "answer": [
        "C"
      ],
      "explanation": "采用索引顺序文件时，最好情况是有 $\\sqrt { 1 0 0 0 0 } = 1 0 0$ 组，每组有100条记录，则查找100组平均需要100/2=50次，组内查找平均需要100/2=50次，共需要50+50=100次。注意，严格来\n说，索引表查找和组内查找的准确平均次数都是(1+100)/2=50.5，不过在操作系统教材中，往往直接忽略前面的1，因此本类题中也不会同时出现100和101两个选项。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_01_5f4f3cf9c8",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "当文件被打开时，需要将磁盘索引节点拷贝到内存的索引节点，下列属于内存索引节点中有而磁盘索引节点中没有的内容是（）。",
      "options": {
        "A": "访问计数值",
        "B": "文件物理地址",
        "C": "文件长度",
        "D": "文件类型"
      },
      "answer": [
        "A"
      ],
      "explanation": "访问计数值表示的意义是，每当有一个进程要访问此索引节点，访问计数值加1，访问结束时减1，它属于内存索引节点中特有的内容。 XTI",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_02_55b6885606",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "目录文件存放的信息是（）。",
      "options": {
        "A": "某一文件存放的数据信息",
        "B": "某一文件的文件目录",
        "C": "该目录中所有数据文件目录",
        "D": "该目录中所有子目录和数据文件的目录"
      },
      "answer": [
        "D"
      ],
      "explanation": "目录文件是FCB的集合，一个目录中既可能有子目录，又可能有数据文件，因此目录文件中存放的是子目录和数据文件的信息。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_03_27bd66bb54",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "FAT32的文件目录项不包括（）。",
      "options": {
        "A": "文件名",
        "B": "文件访问权限说明",
        "C": "文件控制块的物理位置",
        "D": "文件所在的物理位置"
      },
      "answer": [
        "C"
      ],
      "explanation": "文件目录项即FCB，通常由文件基本信息、存取控制信息和使用信息组成。基本信息包括文件物理位置。文件目录项显然不包括FCB的物理位置信息。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_04_e9120db29d",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "有些操作系统中将文件描述信息从目录项中分离出来，这样做的好处是（）。",
      "options": {
        "A": "减少读文件时的 I/O 信息量",
        "B": "减少写文件时的I/O 信息量",
        "C": "减少查找文件时的I/O信息量",
        "D": "减少复制文件时的 I/O 信息量"
      },
      "answer": [
        "C"
      ],
      "explanation": "将文件描述信息从目录项中分离，即应用了索引节点的方法，磁盘的盘块中可以存放更多的目录项，查找文件时可以大大减少其I/O信息量。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_05_90b94e85fa",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列选项中，（）不是为了提升文件系统性能的操作。",
      "options": {
        "A": "目录项分解",
        "B": "文件高速缓存",
        "C": "磁盘调度算法",
        "D": "异步I/O"
      },
      "answer": [
        "D"
      ],
      "explanation": "异步I/O是指发出I/O请求后，系统不必等待I/O完成，而继续执行其他任务，当I/O完成后再通知系统，异步I/O提高了CPU利用率，但对磁盘J/O次数没有影响。将目录项分解为符号目录项和基本目录项，符号目录项包括文件名和文件号，基本目录项包括文件号和文件其他描述信息，查找时只需查找符号目录，减少了磁盘占用空间，因此减少了读盘次数。文件高速缓存可以减少磁盘IO次数。磁盘调度算法可以减少寻道时间，提高磁盘I/O速度。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_06_a6354f86ca",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "在访问文件时，需要根据文件名对目录文件进行检索，其检索性能主要由（）决定。I. 文件大小 Ⅱ. 目录项数量I. 目录项的大小IV. 目录项在目录中的位置",
      "options": {
        "A": "I、II 和III",
        "B": "II、III 和 IV",
        "C": "I、III和 IV",
        "D": "I、Ⅱ和IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "文件大小与对目录进行检索无关。目录项数量越多，检索目录时的平均比较次数就越多，影响检索性能；目录项的大小越大，占用的盘块就越多，I/O时间也就越长，影响检索性能；目录项在目录中的位置不同，可能导致不同的访问路径，影响检索性能。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_07_deb26ee567",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "在计算机中，不允许两个文件名重名主要指的是（）。",
      "options": {
        "A": "不同磁盘的不同目录下",
        "B": "不同磁盘里的同名目录下",
        "C": "同一个磁盘的不同目录下",
        "D": "同一个磁盘的同一目录下"
      },
      "answer": [
        "D"
      ],
      "explanation": "A、B和C项的同名文件都有不同的路径名，因此不会造成文件名重名问题。在同一个磁盘的同一目录下，若两个文件名重名，则它们具有相同的路径名，因此无法区别。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_08_064bf9e875",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "文件系统实现按名存取主要是靠（）实现的。",
      "options": {
        "A": "查找位示图",
        "B": "查找文件目录",
        "C": "查找作业表",
        "D": "地址转换机构"
      },
      "answer": [
        "B"
      ],
      "explanation": "文件目录是实现按名存取的关键，通过查找目录可以获得文件的物理地址和其他属性。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_09_ff7f073aa4",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "在一个文件系统中，FCB占64B，盘块大小为1KB，采用一级目录。假定文件目录中有3200个目录项，则查找一个文件平均需要（）次访问磁盘。",
      "options": {
        "A": "50",
        "B": "54",
        "C": "100",
        "D": "200"
      },
      "answer": [
        "C"
      ],
      "explanation": "FCB 占 64B，盘块大小为1KB，一个盘块能存放1024/64=16个FCB。文件目录有3200个目录项，即3200个FCB（每个目录项一个FCB），文件目录需要占用3200/16=200个盘块。查找一个文件需要在200个盘块中顺序查找目标FCB，平均查找次数为200/2=100，即平均访问磁盘的次数。注意，在操作系统教材中，平均查找长度通常描述为“总长度/2”；在数据结构教材中，平均查找长度通常描述为“(总长度+1)/2”，相对而言后者更严谨。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_10_72c1b44f7f",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 10,
      "type": "single_choice",
      "question": "在一个采用索引节点的文件系统中，目录项分为文件名和索引节点编号两部分，文件名和索引节点编号各占8B，盘块大小为1KB，采用一级目录，假定文件目录中有3200个目录项，则读入一个文件的索引节点平均需要（）次访问磁盘。 X",
      "options": {
        "A": "25",
        "B": "26",
        "C": "51",
        "D": "52"
      },
      "answer": [
        "B"
      ],
      "explanation": "一个目录项的大小是16B，一个磁盘块可以存放1024B/16B=64个目录项，存放3200个目录项共需要50个磁盘块。因此，找到一个文件对应的目录项平均读磁盘的次数为50/2=25，之\n后根据对应目录项的索引节点编号再启动磁盘读入索引节点，总读磁盘次数为26。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_11_b6a4cf060b",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 11,
      "type": "single_choice",
      "question": "下列关于目录检索的论述中，正确的是（）。",
      "options": {
        "A": "散列法具有较快的检索速度，因此现代操作系统中都用它替代传统的顺序检索方法",
        "B": "在利用顺序检索法时，对树形目录应采用文件的路径名，且应从根目录开始逐级检索",
        "C": "在利用顺序检索法时，只要路径名的一个分量名未找到，就应停止查找",
        "D": "利用顺序检索法查找完成后，即可得到文件的物理地址"
      },
      "answer": [
        "C"
      ],
      "explanation": "实现用户对文件的按名存取，系统先利用用户提供的文件名形成检索路径，对目录进行检索。在顺序检索中，路径名的一个分量未找到，说明路径名中的某个目录或文件不存在，不需要继续检索，选项C正确。目录的查询方式有顺序检索法和散列法两种，散列法并不适用于所有的目录结构，而且有冲突和溢出的缺点，解决的开销也较大，因此通常更多采用的是顺序检索法，选项A错误。在树形目录中，为了加快文件检索速度，可设置当前目录，于是文件路径可以从当前目录开始查找，选项B错误。在顺序检索法查找完成后，得到的是文件的逻辑地址，选项D错误。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_12_54406ec138",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 12,
      "type": "single_choice",
      "question": "一个文件的相对路径名是从（）开始，逐步沿着各级子目录追溯，最后到指定文件的整个通路上所有子目录名组成的一个字符串。",
      "options": {
        "A": "当前目录",
        "B": "根目录",
        "C": "多级目录",
        "D": "二级目录"
      },
      "answer": [
        "A"
      ],
      "explanation": "相对路径是从当前目录出发到所找文件通路上所有目录名和数据文件名用分隔符连接起来而形成的，注意与绝对路径的区别。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_13_db2e995dfe",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 13,
      "type": "single_choice",
      "question": "文件系统采用多级目录结构的目的是（）。",
      "options": {
        "A": "减少系统开销",
        "B": "节省存储空间",
        "C": "解决命名冲突",
        "D": "缩短传送时间"
      },
      "answer": [
        "C"
      ],
      "explanation": "在文件系统中采用多级目录结构后，符合了多层次管理的需要，提高了文件查找的速度，还允许用户建立同名文件。因此，多级目录结构的采用解决了命名冲突。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_14_e14e4a0bf9",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 14,
      "type": "single_choice",
      "question": "若文件系统中有两个文件重名，则不应采用（）。",
      "options": {
        "A": "单级目录结构",
        "B": "两级目录结构",
        "C": "树形目录结构",
        "D": "多级目录结构"
      },
      "answer": [
        "A"
      ],
      "explanation": "在单级目录文件中，每当新建一个文件时，必须先检索所有的目录项，以保证新文件名在目录中是唯一的。所以单级目录结构无法解决文件重名问题。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.2.11_15_d57aa4a207",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.2.11",
      "section_title": "本节习题精选",
      "num": 15,
      "type": "single_choice",
      "question": "用磁带做文件存储介质时，文件只能组织成（）。",
      "options": {
        "A": "顺序文件人N",
        "B": "链接文件",
        "C": "索引文件",
        "D": "目录文件"
      },
      "answer": [
        "A"
      ],
      "explanation": "磁带是一种顺序存储设备，用它存储文件时只能采用顺序存储结构。注意，若允许磁带来回倒带，也可组织为其他文件形式，本题不做讨论。",
      "source_file": "mineru/2027/操作系统/操作系统_p251-300.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.3.6_01_e0982731a8",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.3.6",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "从用户的观点看，操作系统中引入文件系统的目的是（）。",
      "options": {
        "A": "保护用户数据",
        "B": "实现对文件的按名存取",
        "C": "实现虚拟存储",
        "D": "保存用户和系统文档及数据"
      },
      "answer": [
        "B"
      ],
      "explanation": "从系统角度看，文件系统负责对文件的存储空间进行组织、分配，负责文件的存储并对文件进行保护、检索。从用户角度看，文件系统根据一定的格式将文件存放到存储器中适当的地方，当用户需要使用文件时，系统根据用户所给的文件名能够从存储器中找到所需要的文件。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.3.6_02_5160492079",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.3.6",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "逻辑文件系统的功能有（）。I. 文件按名存取 II. 文件目录组织管理Ⅲ. 把文件名转换为文件描述符或文件句柄 IV. 存储保护",
      "options": {
        "A": "I、Ⅱ和III",
        "B": "II、III和IVY",
        "C": "I、II和IV",
        "D": "I、II、III和IV"
      },
      "answer": [
        "D"
      ],
      "explanation": "逻辑文件系统的功能包括对文件按名存取，进行文件目录组织管理，将文件名转换为文件描述符或文件句柄，进行存储保护，因此4个说法均正确。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_4.3.6_04_3fb3819a04",
      "book": "操作系统",
      "chapter": 4,
      "chapter_title": "",
      "section": "4.3.6",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "UNIX操作系统中，文件的索引结构放在（）。",
      "options": {
        "A": "超级块",
        "B": "索引节点 11",
        "C": "目录项",
        "D": "空闲块"
      },
      "answer": [
        "B"
      ],
      "explanation": "UNIX采用树形目录结构，文件信息存放在索引节点中。超级块是用来描述文件系统的。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.1.6_01_6a0d893da8",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.6",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "下列关于设备属性的叙述中，正确的是（）。",
      "options": {
        "A": "字符设备的基本特征是可寻址到字节，即能指定读/写操作的字节地址",
        "B": "共享设备必须是可寻址的和可随机访问的设备",
        "C": "共享设备是指同一时刻内允许多个进程同时访问的设备",
        "D": "在分配共享设备和独占设备时都可能引起进程死锁"
      },
      "answer": [
        "B"
      ],
      "explanation": "可寻址是块设备的基本特征，选项A错误。若共享设备不是可寻址的和可随机访问的，则不能保证数据的完整性和一致性，也不能提高设备的利用率，选项B正确。共享设备是指一段时间内允许多个进程同时访问的设备，选项C错误。分配共享设备是不会引起进程死锁的，选项D错误。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.1.6_02_eea73e8d89",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.6",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "下列关于虚拟设备的含义的描述中，正确的是（）。",
      "options": {
        "A": "允许用户使用比系统中具有的物理设备更多的设备",
        "B": "允许用户以标准化方式来使用物理设备",
        "C": "把一个物理设备变换成多个对应的逻辑设备",
        "D": "允许用户程序不必全部装入主存便可使用系统中的设备"
      },
      "answer": [
        "C"
      ],
      "explanation": "虚拟设备是指采用虚拟技术将一台独占设备转换为若于逻辑设备。引入虚拟设备是为了克服独占设备速度慢、利用率低的特点。这种设备并不是物理地变成共享设备，一般的独享设备也不能转换为共享设备，只是用户在使用它们时“感觉”是共享设备，是逻辑的概念。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.1.6_03_14a65731b1",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.6",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "磁盘设备的I/O控制主要采取（）方式。",
      "options": {
        "A": "位",
        "B": "字节",
        "C": "帧",
        "D": "DMA"
      },
      "answer": [
        "D"
      ],
      "explanation": "DMA方式主要用于块设备，磁盘是典型的块设备。这道题也要求读者了解什么是I/O控制方式，选项A、B、C显然都不是I/O控制方式。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.1.6_04_a2dbbfccf3",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.6",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "为了便于上层软件的编制，设备控制器通常需要提供（）。",
      "options": {
        "A": "控制寄存器、状态寄存器和控制命令",
        "B": "I/O地址寄存器、工作方式状态寄存器和控制命令",
        "C": "中断寄存器、控制寄存器和控制命令",
        "D": "控制寄存器、编程空间和控制逻辑寄存器"
      },
      "answer": [
        "A"
      ],
      "explanation": "中断寄存器位于主机内：不存在I/Q地址寄存器：编程空间一般是由体系结构和操作系统共同决定的。控制寄存器和状态寄存器分别用于接收上层发来的命令并存放设备状态信号，是设备控制器与上层的接口；至于控制命令，它虽然是由CPU发出的，用来控制设备控制器，但控制命令是由设备控制器提供的，每种设备控制器都对应一组相应的控制命令。\n接口用来传输信号，I/O逻辑即设备控制器，用来实现对设备的控制。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.1.6_06_548483c16c",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.1.6",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "DMA方式是在（）之间建立一条直接数据通路。",
      "options": {
        "A": "I/O 设备和主存",
        "B": "两个 I/O 设备",
        "C": "I/O 设备和 CPU",
        "D": "CPU 和主存"
      },
      "answer": [
        "A"
      ],
      "explanation": "DMA是一种不经过CPU而直接从主存存取数据的数据交换模式，它在I/O设备和主存之间建立了一条直接数据通路，如磁盘。当然，这条数据通路只是逻辑上的，实际并未直接建立一条\n物理线路，而通常是通过总线进行的。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.2.8_01_540cbb458d",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.8",
      "section_title": "本节习题精选",
      "num": 1,
      "type": "single_choice",
      "question": "设备的独立性是指（）。",
      "options": {
        "A": "设备独立于计算机系统",
        "B": "系统对设备的管理是独立的",
        "C": "用户编程时使用的设备与实际使用的设备无关",
        "D": "每台设备都有唯一的编号 X"
      },
      "answer": [
        "C"
      ],
      "explanation": "设备的独立性主要是指用户使用设备的透明性，即使用户程序和实际使用的物理设备无关。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.2.8_02_095178edeb",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.8",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "引入高速缓冲的主要目的是（）。",
      "options": {
        "A": "提高 CPU 的利用率",
        "B": "提高I/O设备的利用率",
        "C": "改善 CPU 与I/O 设备速度不匹配的问题",
        "D": "节省内存"
      },
      "answer": [
        "C"
      ],
      "explanation": "CPU与I/O设备执行速度通常是不对等的，前者快、后者慢，通过高速缓冲技术来改善两者不匹配的问题。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.2.8_03_e5d088aa55",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.8",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "为了使多个并发进程能有效地进行输入和输出，最好采用（）结构的缓冲技术。",
      "options": {
        "A": "缓冲池",
        "B": "循环缓冲",
        "C": "单缓冲",
        "D": "双缓冲"
      },
      "answer": [
        "A"
      ],
      "explanation": "缓冲池是系统的共用资源，可供多个进程共享，并且既能用于输入又能用于输出。其一般包含三种类型的缓冲：（①）空闲缓冲区：②装满输入数据的缓冲区：③装满输出数据的缓冲区。为了管理上的方便，可将相同类型的缓冲区链成一个队列。选项B、C、D属专用缓冲。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.2.8_04_f76ebbdc67",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.8",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "缓冲技术中的缓冲池在（）中。",
      "options": {
        "A": "主存",
        "B": "外存",
        "C": "ROM",
        "D": "寄存器"
      },
      "answer": [
        "A"
      ],
      "explanation": "输入井和输出井是在磁盘上开辟的存储空间，而输入/输出缓冲区是在内存中开辟的，因为CPU速度比I/O设备高很多，缓冲池通常在主存中建立。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.2.8_05_b96201fe14",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.8",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "支持双向传送的设备应使用（）。 算机",
      "options": {
        "A": "单缓冲区",
        "B": "双缓冲区",
        "C": "多缓冲区",
        "D": "缓冲池"
      },
      "answer": [
        "B"
      ],
      "explanation": "支持双向发送和接收数据的设备（如网卡等）应使用双缓冲区，双缓冲区可以实现同一时刻的双向数据传输，提高设备的效率和利用率。单缓冲区只能实现单向数据传输。多缓冲区和缓冲池用于提高I/O性能的技术，但不是必需的，也不一定适合所有的双向设备。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.2.8_06_37ec7a6aed",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.8",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "下列关于缓冲区的描述中，正确的是（）。",
      "options": {
        "A": "缓冲区是一种专门的硬件缓冲器，不能用内存来实现",
        "B": "缓冲区的作用是提高CPU和I/O设备之间的速度匹配",
        "C": "缓冲区只能用于输入设备，不能用于输出设备",
        "D": "缓冲区只能用于块设备，不能用于字符设备"
      },
      "answer": [
        "B"
      ],
      "explanation": "缓冲区是一个存储区域，可由专门的硬件寄存器组成，也可利用内存来实现。缓冲区的作用是提高CPU和I/O设备之间的速度匹配，因为CPU的速度远高于I/O设备的速度，若没有缓冲区，则CPU就要等待I/O设备完成操作，造成资源浪费。缓冲区可用于输入设备和输出设备，如键盘、打印机等。缓冲区也可用于块设备和字符设备，如磁盘、串口等。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.2.8_07_1a4bf0d1e6",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.8",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "使用单缓冲或双缓冲进行通信时，（）可以实现数据的双向并行传输。",
      "options": {
        "A": "只有单缓冲",
        "B": "只有双缓冲",
        "C": "都",
        "D": "都不"
      },
      "answer": [
        "B"
      ],
      "explanation": "两个进程之间若只设置单缓冲区，则同一时刻只能实现单向传输，但可在一段时间内用于发送数据，另一段时间内用于接收数据。若设置双缓冲区，则可以实现双向同时的并行传输。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.2.8_08_88f15baf7f",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.2.8",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "下列各种算法中，（）是设备分配常用的一种算法。",
      "options": {
        "A": "首次适应",
        "B": "时间片分配",
        "C": "最佳适应",
        "D": "先来先服务"
      },
      "answer": [
        "D"
      ],
      "explanation": "选项A和C都是动态分区分配的常用算法，选项B是进程调度的常用算法，设备分配的常用算法主要有先来先服务算法和最高优先级优先算法。",
      "source_file": "mineru/2027/操作系统/操作系统_p301-350.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.3.6_02_1ecb01ee59",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.6",
      "section_title": "本节习题精选",
      "num": 2,
      "type": "single_choice",
      "question": "磁盘是可共享设备，但在每个时刻（）作业启动它。",
      "options": {
        "A": "可以由任意多个",
        "B": "能限定多个",
        "C": "至少能由一个",
        "D": "至多能由一个"
      },
      "answer": [
        "D"
      ],
      "explanation": "磁盘是可共享设备（分时共享），是指某段时间内可以有多个用户进行访问。但某一时刻只能有一个作业可以访问。",
      "source_file": "mineru/2027/操作系统/操作系统_p351-372.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.3.6_03_77af1c8e5e",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.6",
      "section_title": "本节习题精选",
      "num": 3,
      "type": "single_choice",
      "question": "既可以顺序读/写，又可以按任意次序读/写的存储器有（）。I. 光盘 II. 磁带 III. U盘 IV. 磁盘",
      "options": {
        "A": "II、III、IV",
        "B": "I、III、IV",
        "C": "III、IV",
        "D": "仅IV"
      },
      "answer": [
        "B"
      ],
      "explanation": "顺序访问按从前到后的顺序对数据进行读/写操作，如磁带。直接访问或随机访问，则可以按任意的次序对数据进行读/写操作，如光盘、磁盘、U盘等。",
      "source_file": "mineru/2027/操作系统/操作系统_p351-372.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.3.6_04_c3e453db36",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.6",
      "section_title": "本节习题精选",
      "num": 4,
      "type": "single_choice",
      "question": "磁盘调度的目的是缩短（）时间。",
      "options": {
        "A": "寻道",
        "B": "延迟",
        "C": "传送",
        "D": "启动"
      },
      "answer": [
        "A"
      ],
      "explanation": "磁盘调度是对访问磁道次序的调度，若没有合适的磁盘调度，则寻道时间会大大增加。",
      "source_file": "mineru/2027/操作系统/操作系统_p351-372.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.3.6_05_7a6fa7a515",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.6",
      "section_title": "本节习题精选",
      "num": 5,
      "type": "single_choice",
      "question": "下列各种算法中，（）算法和其他算法存在根本的不同。",
      "options": {
        "A": "SCAN",
        "B": "FCFS",
        "C": "C-LOOK",
        "D": "CLOCK"
      },
      "answer": [
        "D"
      ],
      "explanation": "SCAN、FCFS、C-LOOK算法都可以是磁盘调度算法，CLOCK算法是页面置换算法。",
      "source_file": "mineru/2027/操作系统/操作系统_p351-372.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.3.6_06_a84a5b2575",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.6",
      "section_title": "本节习题精选",
      "num": 6,
      "type": "single_choice",
      "question": "磁盘上的文件以（）为单位读/写。",
      "options": {
        "A": "块",
        "B": "记录",
        "C": "柱面",
        "D": "磁道"
      },
      "answer": [
        "A"
      ],
      "explanation": "文件以块为单位存放于磁盘中，文件的读/写也以块为单位。 首计算机",
      "source_file": "mineru/2027/操作系统/操作系统_p351-372.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.3.6_07_ffdb587ed3",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.6",
      "section_title": "本节习题精选",
      "num": 7,
      "type": "single_choice",
      "question": "在磁盘中读取数据的下列时间中，影响最大的是（）。",
      "options": {
        "A": "处理时间",
        "B": "延迟时间",
        "C": "传送时间",
        "D": "寻道时间"
      },
      "answer": [
        "D"
      ],
      "explanation": "对磁盘读/写时间影响最大的是寻道时间，寻道过程为机械运动，时间较长，影响较大。",
      "source_file": "mineru/2027/操作系统/操作系统_p351-372.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.3.6_08_0a711baaf7",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.6",
      "section_title": "本节习题精选",
      "num": 8,
      "type": "single_choice",
      "question": "硬盘的操作系统引导扇区产生在（）。",
      "options": {
        "A": "对硬盘进行分区时",
        "B": "对硬盘进行低级格式化时",
        "C": "硬盘出厂时自带",
        "D": "对硬盘进行高级格式化时"
      },
      "answer": [
        "D"
      ],
      "explanation": "X\n操作系统的引导程序位于磁盘活动分区的引导扇区，因此必然产生在分区之后。分区是将磁盘分为由一个或多个柱面组成的分区（C盘、D盘等形式），每个分区的起始扇区和大小都记录在磁盘主引导记录的分区表中。而对于高级格式化（创建文件系统），操作系统将初始的文件系统数据结构存储到磁盘上，文件系统在磁盘上布局介绍详见第4章。",
      "source_file": "mineru/2027/操作系统/操作系统_p351-372.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.3.6_09_af500c44e0",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.6",
      "section_title": "本节习题精选",
      "num": 9,
      "type": "single_choice",
      "question": "在磁盘中，每个扇区的头部和尾部都包含一些磁盘控制器的使用信息，如扇区号等，这些磁盘控制器的使用信息是在（）阶段被创建的。",
      "options": {
        "A": "低级格式化",
        "B": "分区",
        "C": "高级格式化",
        "D": "系统引导"
      },
      "answer": [
        "A"
      ],
      "explanation": "低级格式化是磁盘制造商在生产磁盘时进行的操作，它负责创建磁盘的物理结构，包括磁道、扇区的划分，并将一些控制信息（如扇区号、磁道号等）写入每个扇区的头部和尾部。这些信息在低级格式化阶段被写入磁盘，因此磁盘控制器能够理解如何访问各个扇区。",
      "source_file": "mineru/2027/操作系统/操作系统_p351-372.md",
      "source_pages": ""
    },
    {
      "id": "2027_操作系统_5.3.6_16_e36b3e5f2b",
      "book": "操作系统",
      "chapter": 5,
      "chapter_title": "",
      "section": "5.3.6",
      "section_title": "本节习题精选",
      "num": 16,
      "type": "single_choice",
      "question": "假设磁盘有100个柱面，每个柱面上有8个磁道，每个磁道有8个扇区。文件A含有 X 64。文，逻记录在区致，以的区放在盘磁盘地址（78号柱面、6号盘面、6号扇区）中存放了该文件的第（）个逻辑记录。",
      "options": {
        "A": "5045",
        "B": "5046",
        "C": "5047",
        "D": "5048"
      },
      "answer": [
        "B"
      ],
      "explanation": "每个柱面上有8个磁道（表示有8个磁头），每个磁道有8个扇区，因此每个柱面有 $8 { \\times } 8 = 6 4$ 个扇区。由题意可知，柱面号、盘面号、扇区号和逻辑记录编号都是从0开始的，因此78号柱面的6号磁道的6号扇区存放的是文件的第 $7 8 { \\times } 6 4 + 6 { \\times } 8 + 6 = 5 0 4 6$ 个逻辑记录。",
      "source_file": "mineru/2027/操作系统/操作系统_p351-372.md",
      "source_pages": ""
    }
  ]
}
