01/17 Dữ liệu nằm ở đâu? Các chương

Bộ nhớ máy tính hoạt động như thế nào?

Từ những chiếc thẻ đục lỗ và vòng ferrite đến SRAM, DRAM, DDR5 và HBM

CPU tính rất nhanh, nhưng dữ liệu nằm ở đâu?

CPU có thể tính, nhưng các con số và lệnh để CPU xử lý được giữ ở đâu?

CPU đang tính 5 + 7 = 12 vài thanh ghi, rất ít chỗ Bộ nhớ 5 7 ? 12 lệnh tiếp theo lấy 5 lấy 7 ghi 12 lệnh tiếp theo
CPU chỉ tính. Số 5, số 7, chỗ để 12 và cả lệnh tiếp theo đều nằm trong bộ nhớ, bên ngoài CPU.

khoá CPU, ta đã thấy CPU liên tục làm một vòng lặp:

lấy lệnh → hiểu lệnh → thực hiện lệnh.

Nhưng có một câu hỏi ta chưa trả lời:

Lệnh mà CPU lấy nằm ở đâu?

Và nếu lệnh bảo CPU cộng hai số, thì hai số đó nằm ở đâu trước khi được cộng?

Muốn tính 5 + 7, trước tiên phải nhớ được 5 và 7

Giả sử chương trình có ba dòng:

a = 5
b = 7
c = a + b

CPU có mạch để thực hiện phép cộng.

Nhưng bản thân mạch cộng không tự sinh ra số 57.

Trước khi phép cộng xảy ra, máy phải có chỗ giữ:

  • lệnh a = 5
  • lệnh b = 7
  • lệnh c = a + b
  • giá trị 5
  • giá trị 7

Sau khi tính xong, nó còn phải giữ kết quả 12.

Nói cách khác:

CPU biết xử lý dữ liệu. Nhưng trước tiên dữ liệu phải được giữ ở đâu đó.

Chỗ giữ đó chính là bộ nhớ.

CPU cũng có bộ nhớ riêng

Ngay bên trong CPU có những ô nhớ cực nhỏ gọi là thanh ghi (register).

Thanh ghi nằm ngay cạnh các mạch tính toán, vì vậy CPU có thể sử dụng chúng cực nhanh.

Nhưng thanh ghi dùng để làm gì?

Thử cho CPU cộng 5 + 7. Bấm Bước tiếp theo và xem hai con số đi đâu.

CPU cộng 5 + 7
Bộ nhớ
5
7
CPU
Thanh ghi A_
Thanh ghi B_
ALU
Thanh ghi C_

Hai số 5 và 7 đang nằm trong bộ nhớ. Bấm Bước tiếp theo.

Bước 0 / 3

Trong lúc tính, CPU giữ những giá trị nó đang dùng trong các thanh ghi.

Nhưng số lượng thanh ghi rất ít. CPU không thể nhét cả chương trình vào đó.

Nó cần một nơi lớn hơn rất nhiều để chứa những thứ chưa cần dùng ngay.

Đó là RAM.

Càng gần CPU thì càng nhanh, nhưng càng ít

Máy tính hiện đại không chỉ có một loại nơi lưu dữ liệu.

Có thể hình dung đơn giản như thế này:

Nơi giữ dữ liệu Dung lượng Tốc độ CPU truy cập
Thanh ghi cực ít cực nhanh
Cache ít rất nhanh
RAM nhiều chậm hơn
SSD rất nhiều chậm hơn nhiều

CPU cố giữ thứ nó đang cần nhất ở gần mình.

Ví dụ, khi bạn mở một chương trình:

SSD

RAM

Cache

Thanh ghi

CPU tính toán

Chỉ cần nắm một ý:

CPU không thể giữ mọi thứ bên trong nó. Phần lớn lệnh và dữ liệu phải được lưu ở nơi khác rồi đưa đến CPU khi cần.

Nhưng điều này dẫn đến một câu hỏi thú vị hơn.

Một cỗ máy không có não.

Vậy “nhớ” một thứ thực sự nghĩa là gì?

Một công tắc cũng có thể “nhớ”

Hãy nhìn một công tắc đèn.

Bạn gạt nó sang bật rồi bỏ tay ra.

Một tiếng sau quay lại, công tắc vẫn ở vị trí bật.

Nó giữ lại trạng thái cuối cùng.

Ta có thể dùng hai vị trí đó để biểu diễn một bit:

Tắt  → 0
Bật  → 1

Muốn một vật dùng được làm bộ nhớ, nó cần làm được bốn việc:

  1. Có ít nhất hai trạng thái phân biệt rõ ràng.
  2. Có thể chuyển từ trạng thái này sang trạng thái kia.
  3. Có thể giữ nguyên trạng thái đủ lâu.
  4. Có thể đọc lại xem hiện tại nó đang ở trạng thái nào.

Công tắc đáp ứng cả bốn điều đó.

Vì vậy, về nguyên lý, một công tắc có thể nhớ một bit.

0 và 1 không nhất thiết là con số nằm trong máy

Đây là điểm rất quan trọng.

Bên trong máy tính không có những ký tự 01 tí hon nằm chờ CPU đọc.

01 chỉ là tên ta đặt cho hai trạng thái vật lý.

Tùy công nghệ, hai trạng thái ấy có thể là:

Vật Trạng thái 0 Trạng thái 1
Công tắc tắt bật
Tấm thẻ không có lỗ có lỗ
Nam châm hướng này hướng kia
Tụ điện ít điện tích có điện tích
Transistor trạng thái điện này trạng thái điện kia

Mạch điện xung quanh chỉ cần phân biệt được hai trạng thái.

Sau đó con người quy ước:

trạng thái A = 0
trạng thái B = 1

Vậy nên:

Nhớ một bit nghĩa là giữ một vật ở một trong hai trạng thái, rồi có thể đọc lại trạng thái đó sau này.

Thử nhớ một bit

Trong mô phỏng dưới đây, hãy đổi công tắc giữa hai trạng thái.

Một công tắc, một bit
Nguồn mức tín hiệu THẤP = 0 bit

Khi công tắc ở một vị trí:

0

Khi chuyển sang vị trí còn lại:

1

Điểm quan trọng không phải là việc bạn vừa bấm nút.

Điểm quan trọng là:

sau khi bạn ngừng bấm, trạng thái vẫn còn đó.

Đó chính là phần “nhớ”.

Một bit chỉ nhớ được hai khả năng

Một công tắc chỉ có thể biểu diễn:

0

hoặc:

1

Không thể dùng một công tắc duy nhất để biểu diễn trực tiếp số 5.

Nhưng nếu ghép nhiều công tắc lại, số trạng thái tăng rất nhanh.

Với bốn công tắc:

0 1 0 1

ta có thể quy ước đây là số:

0101₂ = 5

Tương tự:

0111₂ = 7
1100₂ = 12

Vậy phép tính lúc nãy có thể hình dung thành:

0101   ← 5
0111   ← 7
----
1100   ← 12

Mỗi chữ số nhị phân tương ứng với một trạng thái được nhớ.

Muốn giữ bốn bit, ta cần bốn phần tử nhớ.

Muốn giữ tám bit, ta cần tám phần tử nhớ.

Muốn giữ hàng tỷ bit, ta cần hàng tỷ phần tử nhớ.

RAM chính là hàng tỷ ô nhớ như vậy

Một thanh RAM 16 GB có thể giữ khoảng 137 tỷ bit.

Tất nhiên bên trong RAM không có 137 tỷ công tắc cơ học.

Các bit được tạo bằng những cấu trúc điện tử cực nhỏ nằm trên chip.

Nhưng nguyên lý vẫn giống công tắc:

ghi 0

đưa ô nhớ về trạng thái A

ghi 1

đưa ô nhớ về trạng thái B

đọc

kiểm tra ô nhớ đang ở A hay B

Hàng tỷ ô như vậy kết hợp lại có thể giữ:

  • số
  • chữ
  • hình ảnh
  • âm thanh
  • lệnh chương trình

Cuối cùng, tất cả đều trở thành những trạng thái vật lý mà máy có thể phân biệt thành 01.

Vậy dùng thứ gì để giữ hàng tỷ bit?

Công tắc cơ học có thể nhớ một bit.

Nhưng máy tính cần hàng tỷ bit.

Và những bit đó phải:

  • cực nhỏ
  • đổi trạng thái cực nhanh
  • đọc được bằng điện
  • hoạt động hàng tỷ lần mà không cần con người chạm vào

Ngày nay, ta làm điều đó bằng những linh kiện nằm trong chip.

Nhưng những máy tính đầu tiên xuất hiện trước cả transistor và chip nhớ hiện đại.

Người ta vẫn phải tìm cách giữ hàng nghìn bit bằng những công nghệ có sẵn lúc đó.

Vậy trước transistor và chip, máy tính đã dùng thứ gì để nhớ 0 và 1?