# 程序執行原理(科普)
## 目標
* 計算機中的 **三大件**
* 程序執行的原理
* 程序的作用
## 01. 計算機中的三大件
計算機中包含有較多的硬件,但是一個程序要運行,有 **三個** 核心的硬件,分別是:
1. **CPU**
* 中央處理器,是一塊超大規模的集成電路
* 負責 **處理數據**/**計算**
2. **內存**
* **臨時** 存儲數據(斷電之后,數據會消失)
* 速度快
* 空間小(單位價格高)
3. **硬盤**
* **永久** 存儲數據
* 速度慢
* 空間大(單位價格低)
| CPU | 內存 | 硬盤 |
| :---: | :---: | :---: |
 | | |
### 思考題
1. 計算機中哪一個硬件設備負責執行程序?
* **CPU**
2. **內存** 的速度快還是 **硬盤** 的速度快?
* **內存**
3. 我們的程序是安裝在內存中的,還是安裝在硬盤中的?
* 硬盤
4. **我買了一個內存條,有 500G 的空間!!!**,這句話對嗎?
* 不對,內存條通常只有 `4G` / `8G` / `16G` / `32G`
5. **計算機關機之后,內存中的數據都會消失**,這句話對嗎?
* 正確
## 02. 程序執行的原理

1. 程序 **運行之前**,程序是 **保存在硬盤** 中的
2. 當要運行一個程序時
* 操作系統會首先讓 **CPU** 把程序復制到 **內存** 中
* **CPU** 執行 **內存** 中的 **程序代碼**
> **程序要執行,首先要被加載到內存**
### 2.1 Python 程序執行原理

1. 操作系統會首先讓 **CPU** 把 **Python 解釋器** 的程序復制到 **內存** 中
2. **Python 解釋器** 根據語法規則,**從上向下** 讓 **CPU** 翻譯 **Python 程序中的代碼**
3. **CPU** 負責執行翻譯完成的代碼
#### Python 的解釋器有多大?
* 執行以下終端命令可以查看 Python 解釋器的大小
```bash
# 1. 確認解釋器所在位置
$ which python
# 2. 查看 python 文件大小(只是一個軟鏈接)
$ ls -lh /usr/bin/python
# 3. 查看具體文件大小
$ ls -lh /usr/bin/python2.7
```
> 提示:建立 **軟鏈接** 的目的,是為了方便使用者不用記住使用的解釋器是 **哪一個具體版本**
## 03. 程序的作用
> 程序就是 **用來處理數據** 的!
* **新聞軟件** 提供的 **新聞內容、評論……** 是數據
* **電商軟件** 提供的 **商品信息、配送信息……** 是數據
* **運動類軟件** 提供的 **運動數據……** 是數據
* **地圖類軟件** 提供的 **地圖信息、定位信息、車輛信息……** 是數據
* **即時通訊軟件** 提供的 **聊天信息、好友信息……** 是數據
* ……
### 3.1 思考 QQ 程序的啟動過程
1. QQ 在**運行之前**,是保存在 **硬盤** 中的
2. **運行之后**,QQ 程序就會被加載到 **內存** 中了

### 3.2 思考 QQ 程序的 **登錄** 過程
1. 讀取用戶輸入的 **QQ 號碼**
2. 讀取用戶輸入的 **QQ 密碼**
3. 將 **QQ 號碼** 和 **QQ 密碼** 發送給騰訊的服務器,等待服務器確認用戶信息
#### 思考 1
> 在 QQ 這個程序將 **QQ 號碼** 和 **QQ 密碼** 發送給服務器之前,**是否需要先存儲一下 QQ 號碼 和 密碼?**
**答案**
肯定需要!—— 否則 QQ 這個程序就不知道把什么內容發送給服務器了!
#### 思考 2
> QQ 這個程序把 **QQ 號碼** 和 **QQ 密碼** 保存在哪里?
**答案**
保存在 **內存** 中,因為 QQ 程序自己就在內存中
#### 思考 3
> QQ 這個程序是怎么保存用戶的 **QQ 號碼** 和 **QQ 密碼** 的?
**答案**
1. 在內存中為 **QQ 號碼** 和 **QQ 密碼** 各自分配一塊空間
* 在 QQ 程序結束之前,這兩塊空間是由 QQ 程序負責管理的,其他任何程序都不允許使用
* 在 QQ 自己使用完成之前,這兩塊空間始終都只負責保存 **QQ 號碼** 和 **QQ 密碼**
2. 使用一個 **別名** 標記 **QQ 號碼** 和 **QQ 密碼** 在內存中的位置
> * 在程序內部,為 **QQ 號碼** 和 **QQ 密碼** 在內存中分配的空間就叫做 **變量**
> * **程序就是用來處理數據的,而變量就是用來存儲數據的**
- linux基礎
- 01_Python基礎課程安排
- 02_操作系統(科普章節)
- 03_操作系統的發展史(科普章節)
- 04_文件和目錄(理解)
- 05_Ubuntu圖形界面入門
- 06_常用Linux命令的基本使用
- 07_Linux終端命令格式
- 08_文件和目錄常用命令
- 09_遠程管理常用命令
- 10_用戶權限相關命令
- 11_系統信息相關命令
- 12_其他命令
- python基礎
- 01_認識 Python
- 02_第一個Python 程序
- 03_PyCharm的初始設置(知道)
- 04_多文件項目的演練
- 05_注釋
- 06_算數運算符
- 07_程序執行原理(科普)
- 08_變量的基本使用
- 09_變量的命名
- 10_判斷(if)語句
- 11_運算符
- 12_循環
- 13_函數基礎
- 14_高級變量類型
- 15_綜合應用——名片管理系統
- 16_變量進階(理解)
- 17_函數進階.md
- 面向對象
- 01_面向對象(OOP)基本概念
- 02_類和對象
- 03_面向對象基礎語法
- 04_面向對象封裝案例
- 05_面向對象封裝案例 II