Day 01-02 计算机组成原理与操作系统
[TOC]
Day 01 计算机组成原理
1. 什么是计算机?
计算机俗称电脑,相当于一种"人造人"——一通电就能像人脑一样工作。
2. 为何要有计算机?
造出一种机器取代人去工作,计算机就相当于人类的奴隶。
3. 计算机的核心组成
计算机由五大部分组成:
| 组成部分 | 说明 | 类比 |
|---|---|---|
| 控制器 | 计算机的指挥系统,负责控制所有其他硬件的运行 | 大脑 |
| 运算器 | 数学运算 + 逻辑运算 | 大脑 |
| 存储器 | 计算机的记忆设备(内存 + 外存) | 大脑记忆 / 笔记本 |
| 输入设备 | 键盘、鼠标等 | 感官 |
| 输出设备 | 显示器、音响、打印机等 | 表达 |
CPU = 控制器 + 运算器,即计算机的"大脑"。
3.1 存储器详解
| 类型 | 名称 | 存储方式 | 优点 | 缺点 |
|---|---|---|---|---|
| 内存(RAM) | 主存 | 基于电信号 | 存取速度都快 | 断电数据全部丢失 |
| 外存(机械磁盘) | 硬盘 | 基于磁信号 | 可以持久保存数据 | 存储速度慢 |
3.2 程序在计算机中是如何运行的?
程序运行前,一定先存放在硬盘中(安装程序本质就是把代码文件放到硬盘各位置)。
程序运行分两个阶段:
flowchart LR
A[硬盘中的程序] -->|1. 加载阶段| B[内存]
B -->|2. 执行阶段| C[CPU 从内存取指令运行]
- 加载/启动阶段:把程序的指令或数据从硬盘读入内存
- 执行阶段:CPU 从内存中取出指令来运行
4. 处理器详解
4.1 CPU 指令集
- x86:复杂指令集(CISC)
- 64 位:CPU 一次性能从内存中取出 64 位二进制数,即 64 位 CPU 认为 64 位二进制数才是一条完整指令
补充:一个二进制数又称之为一个 bit(比特位)。
兼容性:
| CPU 类型 | 可运行的程序 |
|---|---|
| 64 位 CPU | 64 位、32 位程序 |
| 32 位 CPU | 仅 32 位程序 |
软件包命名示例:nginx-1:1.20.1-14.el9_2.1.x86_64(版本与 CPU 兼容性相关)
4.2 多核多线程
- 2 核 4 线程:真 2 核,假 4 核(超线程技术)
5. 存储器详解
5.1 CMOS
与内存一样断电数据就丢,但特点是耗电量非常低,由主板上的电池负责供电。
5.2 存储单位换算
| 单位 | 换算关系 |
|---|---|
| 1 B | 8 bit |
| 1 KB | 2¹⁰ B = 1024 B |
| 1 MB | 2¹⁰ KB = 1024 KB = 2²⁰ B |
| 1 GB | 2¹⁰ MB = 1024 MB = 2³⁰ B |
| 1 TB | 2¹⁰ GB = 1024 GB = 2⁴⁰ B |
| 1 PB | 2¹⁰ TB = 1024 TB = 2⁵⁰ B |
| 1 EB | 2¹⁰ PB = 1024 PB = 2⁶⁰ B |
计算机存取硬盘的最小单位是一个扇区,一个扇区 = 512 字节。
5.3 机械磁盘寻址时间
| 步骤 | 说明 | 耗时 |
|---|---|---|
| 平均寻道时间 | 磁头找到存储数据所在磁道 | ~5ms |
| 平均延迟时间 | 磁盘转半圈 | ~4ms |
5.4 虚拟内存(Swap)
在硬盘上分出一个空间当作内存使用,称为 swap 分区。
flowchart TD
A[物理内存不足] -->|数据交换| B[Swap 分区]
B -->|释放物理内存| A
style B fill:#f9f,stroke:#333
要点:
- 虚拟内存是一种保命措施,不是提效措施
- 一旦物理内存不够用,会把部分数据交换到 swap 分区
- 整个过程计算机速度会降低,但保证不崩溃
6. 什么是编程语言?
编程语言与英语、汉语一样,是沟通的工具:
| 沟通对象 | 语言 |
|---|---|
| 英国人 | 英语 |
| 中国人 | 汉语 |
| 计算机 | 编程语言 |
print ——工具转换——> 010101010
7. 什么是编程?什么是程序?
- 编程:把想让计算机做的事情的步骤,用编程语言翻译下来,写入一系列文件中
- 程序:这一系列文件就是程序,计算机本身不会运行,运行都是受程序控制
类比:
银行行长(人) ----指令----> 小员工(人)
"要求用户输入账号"
"要求用户输入密码"
"判断账号密码是否正确"
银行行长(人) ----编程语言----> 计算机
用编程语言把上述步骤翻译
8. 程序的分类
| 类别 | 说明 |
|---|---|
| 应用程序 | 给用户使用/应用的程序 |
| 操作系统 | 协调管理控制计算机硬件资源与应用软件的控制程序 |
只有操作系统才能控制计算机硬件,应用程序操作硬件必须给操作系统发请求。
9. 计算机体系的三层结构
flowchart TB
A[应用程序] --> B[操作系统]
B --> C["计算机硬件<br/>CPU、内存、硬盘"]
Day 02 操作系统
1. 操作系统是什么?
操作系统是一个协调、管理、控制计算机硬件资源给应用程序使用的控制程序。
应用程序:图形界面 / 命令解释器
操作系统:Windows / Linux
计算机硬件:CPU、内存、硬盘
2. 为何要有操作系统?
为了方便上层应用程序开发——操作系统把复杂的硬件控制代码写好,对上层提供简单的功能接口。
操作系统 vs 应用程序:
| 操作系统 | 应用程序 | |
|---|---|---|
| 职责 | 控制硬件,给上层提供调用接口 | 给用户使用的程序 |
| 对象 | 与硬件打交道 | 与用户打交道 |
3. 操作系统的构成
操作系统由两部分构成:
| 组成 | 说明 |
|---|---|
| 系统调用接口 | 为上层应用程序提供一系列功能 |
| 内核 | 负责控制硬件的运行 |
3.1 用户态与内核态
flowchart LR
subgraph 用户态
A["系统调用接口<br/>与应用程序打交道"]
end
subgraph 内核态
B["内核<br/>与硬件打交道"]
end
A <-->|频繁切换| B
- 用户态:执行系统调用接口层代码,与上层应用程序打交道
- 内核态:执行内核代码,与底层硬件打交道
- 操作系统运行过程中会频繁发生用户态与内核态的切换
3.2 应用程序如何启动运行?
flowchart LR
A["双击快捷方式 / 执行命令"] --> B["图形界面 / 命令解释器 bash"]
B --> C[操作系统]
C --> D[硬件]
具体流程:
- 操作系统接到启动程序的指令
- 操作系统控制硬盘把程序代码文件读入内存
- 操作系统控制 CPU 去内存里读取程序指令来运行
4. 操作系统的分类
| 场景 | 系统 |
|---|---|
| 个人台式机 | Windows |
| Mac | macOS |
| 服务器 | Linux |
5. 操作系统发展史
flowchart LR
A["第一代<br/>无操作系统<br/>串行执行"] --> B["第二代<br/>批处理系统<br/>仍串行"]
B --> C["第三代<br/>多道技术 + 分时系统<br/>并发执行"]
C --> D[CTTS 分时操作系统]
D --> E["MULTICS<br/>支持更多终端"]
E --> F["UNIX<br/>1970 Unix 元年"]
F --> G["GNU / GPL 开源运动"]
G --> H["Linux<br/>加入 GPL"]
H --> I["发行版<br/>RedHat 系 / Debian 系"]
5.1 第一代计算机
- 没有操作系统的概念
- 所有程序设计都是直接操控硬件
- 多程序串行执行
| 优点 | 缺点 |
|---|---|
| 程序独享整个计算机资源 | 资源浪费(调试时别人也用不了) |
| 串行执行 |
5.2 第二代计算机(批处理系统)
- 一下处理一批程序,但仍是串行的
- 批处理提升了计算机资源利用率
| 优点 | 缺点 |
|---|---|
| 出错只输出结果,不影响下一个程序 | 程序无法实时调试 |
| 仍然串行 |
5.3 第三代计算机(多道技术)
硬件发展:IO + 运算功能集成在一台计算机里。
多道技术的核心——控制多个程序看起来同时运行:
| 复用维度 | 说明 |
|---|---|
| 空间上的复用 | 复用内存,多个程序同时读入内存。注意:多个程序的内存空间必须隔离 |
| 时间上的复用 | 复用 CPU 时间,CPU 在多个程序之间快速切换 |
CPU 切换时机:
- 遇到 IO 操作一定会切换
- 没遇到 IO 操作,也要切换(让 CPU 雨露均沾)
并发 vs 并行:
| 概念 | 说明 | 要求 |
|---|---|---|
| 并发 | 多个任务看起来同时运行 | 单核即可实现 |
| 并行 | 多个任务真正同时运行 | 必须多核 |
5.4 分时操作系统 CTTS
- 多个联机终端 + 多道技术
- 每个程序员/程序都以为自己独占计算机资源
- 多个程序并发运行
5.5 MULTICS → UNIX → Linux
- MULTICS:支持更多联机终端(项目最终破产)
- UNIX:Ken Thompson 开发的简易版 MULTICS,1970 年为 Unix 元年,TCP/IP 在 Unix 上开发测试
- GNU 运动 & GPL 开源协议:开放源代码,所有人可抄可改,修改后也必须开源
- Linux:芬兰大学生 Linus 开发,加入 GPL 协议
6. Linux 发行版
flowchart TD
L[Linux 内核] --> R[RedHat 系]
L --> D[Debian 系]
L --> C[国产系]
R --> F[Fedora]
F --> RHEL[RHEL]
RHEL --> CentOS[CentOS 7.9]
F --> CS[CentOS Stream]
CS --> RHEL2[新版 RHEL]
D --> U[Ubuntu]
R --> RL[Rocky Linux 9.3]
| 系列 | 包管理器 | 代表发行版 |
|---|---|---|
| RedHat 系 | dnf / yum | CentOS、Rocky Linux、Fedora |
| Debian 系 | apt-get | Ubuntu |
7. 本次课程安装的系统版本
- CentOS 7.9
- Rocky Linux 9.3
- Ubuntu 22.04.4 LTS
关于操作系统安装详见 Day 03。