Những cách lưu bit kỳ lạ của thập niên 1940–1950
Khi một flip-flop cần cả một cụm đèn điện tử, làm sao máy tính có thể nhớ hàng nghìn bit?
Ở bài trước, ta đã thấy flip-flop có thể giữ một bit.
Nhưng flip-flop thời đó được ghép từ đèn điện tử. Muốn thêm bit, gần như phải thêm cả một cụm linh kiện.
ENIAC có khoảng 18.000 đèn điện tử, nhưng chỉ giữ được 20 số.
Máy đã rất lớn. Nếu tiếp tục dành một cụm đèn cho từng bit, bộ nhớ lớn gần như không thể xây được.
Vấn đề càng nghiêm trọng khi người ta muốn máy không chỉ nhớ số, mà còn phải nhớ cả chương trình.
Vì sao máy tính bỗng cần nhiều bộ nhớ hơn?
ENIAC có thể tính rất nhanh.
Nhưng muốn đổi từ bài toán này sang bài toán khác, người vận hành phải gạt công tắc và cắm lại dây cáp.
Việc đó có thể mất nhiều ngày.
Trong khi đó, một lệnh như:
LOAD 5
ADD 3
STORE 8
cuối cùng cũng chỉ có thể biểu diễn bằng bit, giống như một con số.
Vậy tại sao không cất cả chương trình vào bộ nhớ?
Khi đó, muốn đổi chương trình, ta không cần nối lại máy. Chỉ cần nạp một dãy bit khác vào bộ nhớ.
Đó là ý tưởng của máy lưu chương trình — stored-program computer.
Nhưng nó tạo ra một vấn đề mới.
Một chương trình có thể cần hàng trăm từ (word). Mỗi từ lại gồm nhiều bit.
Nếu mỗi bit đều cần một flip-flop bằng đèn điện tử, số linh kiện sẽ tăng khủng khiếp.
Các kỹ sư phải tìm một cách khác:
Đừng dành một mạch riêng cho mỗi bit. Hãy cho nhiều bit cùng dùng chung một vật để lưu chúng.
Nhưng nếu không có một mạch đứng đó giữ từng bit…
bit sẽ nằm ở đâu?
Ống thuỷ ngân: giữ bit bằng cách cho nó chạy
Một cách lưu bit rất lạ xuất hiện vào cuối những năm 1940:
không giữ bit đứng yên — cho nó chạy liên tục.
Một ống trễ thuỷ ngân biến tín hiệu điện thành xung âm. Xung chạy qua ống thuỷ ngân, đến đầu kia được đổi lại thành tín hiệu điện, khuếch đại rồi gửi ngược về đầu ống.
ống thuỷ ngân
┌──────────────────────┐
│ 1 → 0 → 1 → 1 → 0 │
└──────────────────────┘
↑ ↓
└── gửi trở lại ──┘
Có xung là 1. Không có xung là 0.
Vì âm thanh mất thời gian để đi hết ống, một chuỗi bit có thể liên tục chạy vòng:
1 0 1 1 0 0 1 0
Bấm Chạy: bit số 1 phải chạy tới đầu đọc mới đọc được.
Điểm hay là hàng trăm bit có thể dùng chung một ống và cùng một bộ mạch ở hai đầu.
Không còn cần một cụm linh kiện riêng cho từng bit như flip-flop.
EDSAC, hoạt động năm 1949, dùng bộ nhớ kiểu này: 512 từ × 35 bit, lưu trong 32 ống thuỷ ngân.
Nhưng bộ nhớ này có hai nhược điểm lớn.
Bấm Dừng trong mô phỏng: các xung không được gửi trở lại và dữ liệu biến mất.
Và nếu CPU muốn đọc một bit đang ở cuối ống, nó không thể lấy ngay.
Nó phải chờ bit đó chạy tới đầu đọc.
Bộ nhớ đã chứa được nhiều bit hơn với ít phần cứng hơn.
Nhưng đổi lại, CPU phải chờ bộ nhớ.
Có cách nào giữ mỗi bit ở một vị trí cố định để muốn đọc bit nào thì lấy ngay bit đó không?
Ống Williams: đặt bit thành những chấm trên màn hình
Kỹ sư Frederic Williams tìm một nơi khác để giấu bit: màn hình.
Không phải màn hình LCD ngày nay, mà là ống tia âm cực — CRT, loại ống sau này xuất hiện trong TV đời cũ.
Bên trong CRT có một chùm electron, điều khiển được để chiếu vào bất kỳ vị trí nào trên màn hình. Chiếu vào điểm nào, nó để lại ở đó một vùng điện tích nhỏ.
Hai trạng thái điện tích khác nhau biểu diễn 0 hoặc 1. Một tấm kim loại đặt phía trước màn hình phát hiện điện tích đó và biến nó trở lại thành tín hiệu điện.
Thế là cả mặt ống trở thành một bảng bit:
┌─────────────────┐
│ 1 0 0 1 0 1 0 │
│ 0 1 1 0 0 0 1 │
│ 1 1 0 0 1 0 0 │
│ 0 0 1 1 0 1 1 │
└─────────────────┘
Khác với ống thuỷ ngân, tia electron có thể nhảy thẳng tới vị trí cần đọc. Thử bấm vào một ô bất kỳ:
Bấm một ô bất kỳ để đọc bit ở đó.
Không có đoàn bit nào phải chạy ngang qua màn hình trước. Tia electron đi thẳng tới ô đó.
Đây là ý nghĩa của truy cập ngẫu nhiên — random access. “Ngẫu nhiên” ở đây không có nghĩa là máy chọn đại một vị trí, mà là:
Ta có thể truy cập các vị trí theo bất kỳ thứ tự nào, thay vì phải chờ những vị trí phía trước đi qua.
Năm 1946, Williams lưu được một bit theo cách này. Cuối năm 1947, Williams và Tom Kilburn nâng lên 2.048 bit.
Manchester Baby được xây để thử loại bộ nhớ này. Ngày 21 tháng 6 năm 1948, Baby chạy một chương trình gồm 17 lệnh nằm ngay trong bộ nhớ. Một trong những máy lưu chương trình đầu tiên đã hoạt động.
Nhưng hãy tắt Refresh trong mô phỏng: các ô bắt đầu mờ dần.
Điện tích trên CRT không tồn tại mãi. Nó từ từ rò đi. Vì vậy máy phải liên tục:
đọc bit
↓
xem nó là 0 hay 1
↓
ghi lại đúng giá trị đó
Ngay cả khi chương trình không thay đổi dữ liệu. Quá trình này gọi là refresh.
Gần 80 năm sau, DRAM trong máy tính hiện đại vẫn phải refresh vì một lý do tương tự: trạng thái lưu bit không giữ được mãi.
Ống Williams đã bỏ được chuyện chờ bit chạy tới. Nhưng lại xuất hiện một vấn đề mới:
Có cách nào giữ bit mà không phải liên tục ghi lại không?
Trống từ: không phai, nhưng phải quay
Câu trả lời lần này không đến từ điện tích, mà từ từ tính.
Một vùng vật liệu được từ hoá theo một trong hai hướng, biểu diễn 0 hoặc 1. Sau khi đã từ hoá, vùng đó không cần được liên tục cấp điện để giữ trạng thái. Đây là lợi thế rất lớn so với ống Williams.
Trống từ — magnetic drum dùng đúng nguyên lý này. Nó là một hình trụ quay, bề mặt phủ vật liệu từ. Các bit nằm trên những rãnh chạy quanh trống, còn các đầu đọc và ghi đứng yên bên ngoài.
↻ quay
╭─────────────╮
│ 10110100101 │
│ 00101101010 │
│ 11001010011 │
╰─────────────╯
↑ ↑ ↑
đầu đọc/ghi
Thử chọn một bit nằm ngay dưới đầu đọc, rồi chọn một bit ở phía bên kia trống:
Chọn một ô trên trống để đọc bit ở đó.
Bit nằm dưới đầu đọc được đọc gần như ngay lập tức.
Bit ở phía bên kia thì khác. Đầu đọc không chạy sang đó được: trống phải quay cho bit đó tới đầu đọc.
IBM 650 ra mắt năm 1954 dùng một trống quay 12.500 vòng mỗi phút.
Trống từ giải được một vấn đề quan trọng của ống Williams: bit không tự phai khi ta ngừng cấp điện.
Nhưng nó mang trở lại một vấn đề quen thuộc: phải chờ. Lần này không phải chờ xung âm chạy qua một ống, mà chờ một vật thật sự quay tới đúng vị trí.
Mỗi cách chỉ giải được một phần
Ba cách lưu bit vừa rồi đều giải được một vấn đề, nhưng lại để lại một vấn đề khác.
| Cách lưu bit | Bit được giữ bằng gì? | Giải được gì? | Vẫn vướng ở đâu? |
|---|---|---|---|
| Ống thuỷ ngân | Xung âm chạy vòng trong ống | Nhiều bit dùng chung một bộ mạch | Muốn đọc phải chờ bit chạy tới; ngừng tuần hoàn thì dữ liệu mất |
| Ống Williams | Điện tích trên màn hình CRT | Có thể chọn thẳng vị trí cần đọc | Điện tích tự phai nên phải refresh liên tục |
| Trống từ | Những vùng từ hoá trên mặt trống | Bit không tự phai, không cần refresh liên tục | Muốn đọc vẫn phải chờ trống quay tới đúng chỗ |
Mỗi công nghệ đã để lại một mảnh của lời giải.
Ống Williams cho thấy ta có thể chọn trực tiếp vị trí cần đọc.
Trống từ cho thấy từ tính có thể giữ bit mà không cần liên tục ghi lại.
Nhưng trống từ vẫn là một vật cơ khí phải quay.
Bộ nhớ tốt hơn sẽ cần kết hợp những ưu điểm đó:
- chọn vị trí nào thì đọc được vị trí đó
- bit không tự phai
- không có bộ phận phải quay
- và đủ nhỏ để đặt rất nhiều bit cạnh nhau
Trống từ đã cho thấy từ tính có thể giữ bit rất tốt.
Vậy nếu vẫn dùng từ tính, nhưng bỏ cái trống đang quay thì sao?