Máy tính điện tử đầu tiên nhớ bằng cách nào?
Nếu máy tính dùng mạch điện để tính, mạch điện có tự giữ lại trạng thái của chính nó không?
Ở bài trước, thẻ đục lỗ giữ bit rất lâu nhưng không theo kịp máy tính điện tử. Bit phải nằm ngay trong mạch điện.
Nhưng mạch điện có tự giữ lại trạng thái của nó không?
Câu trả lời là: có, nếu nối hai công tắc điện sao cho chúng giữ lẫn nhau. Mạch đó gọi là flip-flop, và máy tính điện tử đầu tiên nhớ số bằng những mạch như thế.
Một công tắc điện chưa nhớ được gì
Máy tính điện tử đời đầu được ghép từ những công tắc bật tắt bằng điện: relay, rồi đèn điện tử. Khoá CPU đã kể vì sao máy cần chúng.
Công tắc đèn trên tường nhớ được vì có một cái khớp giữ cần gạt đứng yên. Công tắc điện thì không có khớp nào như thế.
- Relay: dòng điện qua cuộn dây hút lá kim loại xuống. Ngắt dòng, lò xo kéo lá kim loại về chỗ cũ.
- Đèn điện tử: tín hiệu ở cực điều khiển (grid) cho dòng điện đi qua đèn. Tín hiệu mất, đèn trở lại như trước.
Cả hai chỉ đứng ở trạng thái mới chừng nào tín hiệu điều khiển còn đó.
Đó là vấn đề. Trong máy, lệnh ghi một bit chỉ là một xung, một tín hiệu điện rất ngắn. Xung đi qua rồi thì công tắc trở về, và bit vừa ghi cũng mất theo.
Máy cần một mạch vẫn giữ trạng thái sau khi tín hiệu ghi đã hết.
Hai công tắc giữ lẫn nhau
Nếu không có tín hiệu nào từ bên ngoài giữ công tắc, thì để chính mạch giữ nó.
Lấy hai đèn A (bên trái) và B (bên phải), rồi nối chéo: đầu ra của A đưa vào cực điều khiển của B, đầu ra của B đưa vào cực điều khiển của A.
Khi một đèn dẫn (đang cho dòng chạy qua), điện áp ở đầu ra của nó tụt xuống thấp. Từ đó mạch tự chạy theo một vòng:
- A dẫn, nên đầu ra của A thấp.
- Đầu ra thấp đó chặn B, nên B tắt.
- B tắt, nên đầu ra của B cao.
- Đầu ra cao đó giữ A tiếp tục dẫn. Quay lại bước 1.
Hai đèn giữ lẫn nhau. Không cần tín hiệu nào từ bên ngoài, mạch vẫn đứng yên ở trạng thái đó.
Đảo lại, B dẫn và A tắt, cũng bền y như vậy. Mạch có đúng hai trạng thái bền, và ta đặt tên cho chúng:
- A dẫn, B tắt là 0
- A tắt, B dẫn là 1
Muốn ghi, chỉ cần một xung ngắn đẩy vào một bên. Mạch lật sang trạng thái kia rồi tự giữ ở đó.
Mạch này gọi là flip-flop, hay mạch lưỡng ổn (hai trạng thái ổn định). William Eccles và F. W. Jordan nộp sáng chế cho nó tháng 6/1918 và công bố năm 1919, từ thời đèn điện tử còn dùng cho radio. Khi máy tính điện tử ra đời, mạch nhớ đã có sẵn.
Nói ngắn gọn:
Một mạch nhớ được khi đầu ra của nó giữ lấy chính nó: hai công tắc nối chéo tự khoá ở một trong hai trạng thái.
Thử mô phỏng dưới đây. Bấm “SET (ghi 1)” và xem bốn bước diễn ra, rồi bấm “RESET (ghi 0)”. Để ý hai đường phản hồi sau khi tín hiệu đã hết.
- Tín hiệu SET đi vào bên phải.
- SET ép bên phải thành 1.
- Bên phải phản hồi sang bên trái, ép bên trái về 0.
- Bên trái phản hồi ngược lại, giữ bên phải ở 1. SET đã biến mất, nhưng bit vẫn là 1.
Bấm SET và xem bốn bước diễn ra.
Tín hiệu SET đã biến mất, nhưng mạch vẫn nhớ.
Giờ bấm “Cắt điện”: bit biến mất. Flip-flop chỉ nhớ khi còn được cấp điện.
Một flip-flop giữ được một bit. Vậy đem nó làm bộ nhớ cho cả một máy tính thì được bao nhiêu?
ENIAC nhớ số bằng flip-flop
ENIAC, hoàn thành năm 1946 tại Đại học Pennsylvania, dùng khoảng 18.000 đèn điện tử và nhanh hơn mọi máy trước đó hơn 1.000 lần.
ENIAC tính theo hệ thập phân, dùng chữ số 0 đến 9 như con người, không dùng số nhị phân. Vì vậy mỗi chữ số của nó là một vòng mười flip-flop, mỗi flip-flop ứng với một giá trị từ 0 đến 9. Hình dung mười bóng đèn xếp thành vòng: bóng nào đang bật thì chữ số là mấy.
Máy có 20 accumulator, bộ phận vừa cộng vừa giữ số. Mỗi accumulator giữ một số dài 10 chữ số.
Cộng lại, cả cỗ máy khổng lồ đó giữ được tối đa 20 số cùng lúc.
Chỉ để giữ 20 số ấy, máy đã cần 20 × 10 × 10 = 2.000 flip-flop.
ENIAC cũng không có bộ nhớ trung tâm. Số nằm rải rác ngay trong các bộ phận tính.
Máy nhanh như vậy mà chỉ nhớ được 20 số. Thế đã đủ chưa?
Mỗi bit một cụm đèn thì không thể mở rộng
Flip-flop đã giải được một việc quan trọng: mạch điện có thể tự giữ một bit.
Nhưng ENIAC vẫn chưa cất chương trình trong bộ nhớ. Muốn đổi sang bài toán mới, người ta phải gạt công tắc và cắm lại dây, có khi mất nhiều ngày.
Nếu cất cả chương trình vào bộ nhớ như cất dữ liệu, máy sẽ cần rất nhiều bit hơn.
Vấn đề là mỗi bit kiểu này cần một flip-flop, tức nhiều đèn điện tử và linh kiện đi kèm. Đèn điện tử lại lớn, nóng, tốn điện và có thể hỏng.
Càng nhiều bit:
nhiều flip-flop hơn
↓
nhiều đèn hơn
↓
máy lớn hơn, nóng hơn, tốn điện hơn
Vì vậy, flip-flop chứng minh rằng điện có thể nhớ, nhưng dùng cả một cụm đèn cho từng bit thì quá đắt để tạo ra bộ nhớ lớn.
Có cách nào lưu thật nhiều bit mà không cần dành riêng một cụm đèn cho mỗi bit không?