Khi "bộ nhớ" còn là những lỗ trên giấy
Có thể lưu dữ liệu mà không cần chip, transistor hay bộ nhớ điện tử không?
Ở bài trước, ta thấy muốn nhớ một bit chỉ cần một thứ:
- có hai trạng thái
- giữ được trạng thái đó
- đọc lại được
- đổi được khi cần
Nghe như vậy thì chưa cần transistor.
Thậm chí chưa cần điện.
Một tấm bìa và một cái lỗ cũng có thể lưu thông tin.
Một đất nước có quá nhiều dữ liệu để đếm bằng tay
Năm 1880, Hoa Kỳ tiến hành điều tra dân số.
Thu thập dữ liệu đã khó, nhưng xử lý dữ liệu còn khó hơn. Nhân viên phải đọc từng phiếu rồi cộng tay để trả lời những câu như:
- có bao nhiêu nam và nữ?
- bao nhiêu người ở từng độ tuổi?
- bao nhiêu người làm từng nghề?
Việc xử lý kéo dài nhiều năm.
Herman Hollerith tìm cách để máy tự đếm thay con người.
Ông ghi câu trả lời bằng những lỗ trên thẻ bìa.
Một cái lỗ có thể giữ thông tin
Trên thẻ có nhiều vị trí được quy định sẵn.
Ví dụ:
20–29 30–39 40–49 50–59
○ ● ○ ○
Lỗ ở vị trí 30–39 nghĩa là người này thuộc nhóm tuổi đó.
Máy không cần hiểu chữ.
Nó chỉ cần kiểm tra:
ở vị trí này có lỗ hay không?
Nếu nhìn bằng ngôn ngữ máy tính ngày nay, ta có thể quy ước:
không lỗ = 0
có lỗ = 1
Quan trọng nhất là: sau khi đục xong, trạng thái vẫn còn đó.
Tấm thẻ đã nhớ thông tin.
Cái lỗ biến thành một tín hiệu điện
Nhưng máy làm sao biết chỗ nào có lỗ?
Máy đọc Hollerith dùng các chốt kim loại:
- không có lỗ → kim bị giấy chặn → mạch hở
- có lỗ → kim lọt qua → chạm tiếp điểm → mạch kín
Thử hai trường hợp dưới đây:
Khi mạch kín, dòng điện chạy và máy có thể tăng một bộ đếm.
Một cái lỗ trên giấy đã biến thành tín hiệu điện mà máy có thể xử lý.
Đây là bước quan trọng:
lỗ trên giấy
↓
mạch điện đóng hoặc mở
↓
máy đọc được dữ liệu
Thử lưu dữ liệu bằng lỗ
Trong mô phỏng dưới đây, mỗi vị trí có hai trạng thái:
○ = không lỗ
● = có lỗ
- Hàng 11 0 1 1 0 0 1 0
- Hàng 20 0 0 0 0 0 0 0
- Hàng 30 0 0 0 0 0 0 0
- Hàng 40 0 0 0 0 0 0 0
Bấm vào một vị trí để đục lỗ. Có lỗ = 1, không lỗ = 0. Đầu đọc chỉ cần phân biệt hai trạng thái đó.
Nếu quy ước:
○ = 0
● = 1
thì:
○ ● ○ ● ○ ○ ○ ●
có thể đọc thành:
0 1 0 1 0 0 0 1
Ý quan trọng không phải con số này có nghĩa gì.
Mà là:
sau khi bạn ngừng bấm, trạng thái vẫn còn nguyên.
Thông tin đã được lưu.
Thẻ đục lỗ đi vào thế giới máy tính
Hệ thống của Hollerith được dùng trong điều tra dân số Hoa Kỳ năm 1890.
Sau đó thẻ đục lỗ được dùng rộng rãi cho:
- thống kê
- bảng lương
- kế toán
- dữ liệu khoa học
IBM sau này phổ biến loại thẻ 80 cột.
Khi máy tính điện tử xuất hiện, người ta còn dùng thẻ để đưa chương trình và dữ liệu vào máy.
Một chương trình có thể là cả một chồng thẻ.
Nhưng nếu thẻ lưu được dữ liệu, tại sao không dùng nó làm RAM?
Vì sao thẻ đục lỗ không thể làm RAM?
Xét lại bốn yêu cầu của một ô nhớ:
| Điều kiện | Thẻ đục lỗ |
|---|---|
| Có hai trạng thái rõ ràng | ✅ Có |
| Giữ được trạng thái | ✅ Rất tốt |
| Đọc được | ✅ Có |
| Thay đổi nhanh | ❌ Không |
Vấn đề nằm ở dòng cuối.
Giả sử máy đang lưu:
score = 5
và cần đổi thành:
score = 6
Nếu dữ liệu nằm trên thẻ, máy phải sửa các lỗ.
Nhưng một lỗ đã đục thì không thể lấp lại.
Thường phải tạo một tấm thẻ mới.
Đó không phải thứ CPU có thể làm hàng triệu lần mỗi giây.
Nó còn phải di chuyển cả tấm thẻ
Muốn đọc dữ liệu, máy phải:
đưa thẻ vào
→ đọc
→ lấy thẻ ra
Tức là dữ liệu phụ thuộc vào chuyển động cơ học.
Trong khi CPU làm việc bằng tín hiệu điện.
Máy tính cần bộ nhớ gần với kiểu này hơn:
tín hiệu điện
↓
ô nhớ
↓
CPU
Không cần đưa thẻ vào.
Không cần kim di chuyển.
Không cần tạo một tấm thẻ mới mỗi khi dữ liệu đổi.
Vậy bước tiếp theo là rõ ràng.
Ta vẫn cần hai trạng thái:
0
1
Nhưng thay vì:
không lỗ
có lỗ
ta muốn hai trạng thái có thể đổi chỉ bằng điện.
Không giấy.
Không kim.
Không cần di chuyển vật thể.
Liệu một mạch điện có thể tự giữ lại trạng thái của chính nó không?