Ý nghĩa đằng sau sự trừu tượng hóa
Trong thực tế, trạng thái của dây dẫn không chỉ đơn giản là “bật” hay “tắt” hoàn toàn. Việc ta quy đổi trạng thái của dây dẫn thành hai trường hợp như trên chỉ là một ví dụ của phương pháp trừu tượng hóa nhằm đơn giản hóa các chi tiết về cách thức hoạt động của máy tính. Trong khoa học máy tính, ta thường dùng phương pháp này để dễ dàng hiểu và xây dựng các hệ thống máy tính. Ta hãy cùng xem phương pháp trừu tượng hóa đã được ứng dụng như thế nào trong ví dụ về dây dẫn vừa rồi.
Một dây dẫn có thể có lượng điện chạy qua khác nhau tại các thời điểm khác nhau, nhưng máy tính phải có khả năng diễn giải dòng điện trong dây và quy đổi thành giá trị chính xác là \[0\] hoặc \[1\].
Vào năm 1947, các kỹ sư đã phát minh ra bóng bán dẫn transistor. Đây là một thiết bị vật lý nhỏ hoạt động như một công tắc số trong máy tính. Thiết bị này sẽ bật khi có đủ lượng điện chạy qua và sẽ tắt khi không có đủ điện.
Vậy thế nào thì được gọi là “đủ” lượng điện? Điều đó phụ thuộc vào bóng bán dẫn và điện áp ngưỡng của nó. Ví dụ, nếu một kỹ sư sử dụng bóng bán dẫn có điện áp ngưỡng là 4,5 vôn thì bóng bán dẫn này sẽ bật khi có điện áp từ 4,5 vôn trở lên và sẽ tắt khi điện áp thấp hơn mức đó.
Ta cùng xét cách thức máy tính nhận diện cáp USB có được cắm vào cổng USB hay không. Khi ta cắm cáp của chuột máy tính vào cổng USB, mạch trong chuột sẽ sử dụng điện áp do cổng cung cấp để kéo điện áp trong cáp lên trên 3,3 vôn. Bên trong máy tính, một bóng bán dẫn sẽ phát hiện ra điện áp cao này và chuyển thành trạng thái “bật” hay giá trị 1. Chính bit thông tin này cho máy tính biết rằng thiết bị USB đã được cắm vào cổng.
Trong trường hợp này, các kỹ sư đã sử dụng một bóng bán dẫn có điện áp ngưỡng là 3,3 vôn để kích hoạt trạng thái “bật” và 0,3 vôn để kích hoạt trạng thái “tắt”.
Do bóng bán dẫn rất đa dạng về chủng loại và số lượng nên các kỹ sư sẽ chọn loại phù hợp nhất bằng cách xem xét các đặc điểm như điện áp ngưỡng, vật liệu và kích thước.
Các bóng bán dẫn bên trong máy tính thường rất nhỏ nên phải dùng đến kính hiển vi công suất cao mới có thể nhìn thấy chúng. Tuy nhiên, bóng bán dẫn cũng có thể được sử dụng trong các sản phẩm khác và có kích cỡ bằng đầu ngón tay của chúng ta. Dưới đây là một vài hình ảnh ví dụ:
Để tạo ra các sản phẩm phần cứng máy tính như bóng bán dẫn, ta cần sử dụng rất nhiều kỹ thuật điện và vật lý chuyên sâu, nhưng trong khóa học này, chúng ta sẽ không tìm hiểu quá sâu về các vấn đề đó. Nếu có nhu cầu, bạn có thể tìm hiểu thêm với video tiếng Anh sau về
cách hoạt động của bóng bán dẫn.
Điểm quan trọng ta cần rút ra từ bài đọc này là nhờ vào phương pháp trừu tượng hóa, từng lớp cấu thành nên máy tính được xây dựng và phát triển, chẳng hạn như ví dụ về việc sử dụng transitor để chuyển đổi dữ liệu sang dạng bit như ta đã phân tích ở trên. Nhờ phương pháp trừu tượng hóa, các nhà khoa học máy tính có thể sử dụng và điều khiển máy tính một cách có kiểm soát và dự đoán được các tình huống có thể xảy ra.
Cổng logic
Máy tính truyền và xử lý thông tin dưới dạng các bit, tức là các số 1 và 0, thông qua dây dẫn. Để có thể thực hiện các phép toán phức tạp hơn như tính chữ số thứ 50 của số pi, máy tính cần sử dụng một cơ chế đặc biệt để xử lý các số 1 và 0 này.
Máy tính sẽ sử dụng cổng logic để chuyển đổi các giá trị 1 và 0 từ dây đầu vào. Cổng logic sẽ tiếp nhận giá trị đầu vào và xuất ra kết quả dựa trên trạng thái của thông tin đầu vào đó.
Máy tính truyền và xử lý thông tin dưới dạng các bit, tức là các số 1 và 0, thông qua dây dẫn. Để có thể thực hiện các phép toán phức tạp hơn như tính chữ số thứ 50 của số \[\pi\], máy tính cần sử dụng một cơ chế đặc biệt để xử lý các số 1 và 0 này.
Máy tính sẽ sử dụng cổng logic để chuyển đổi các giá trị 1 và 0 từ dây đầu vào. Cổng logic sẽ tiếp nhận giá trị đầu vào và xuất ra kết quả dựa trên trạng thái của thông tin đầu vào đó.
Cổng NOT (đảo)
Cổng logic đơn giản nhất là cổng NOT, còn được gọi là cổng đảo. Cổng NOT tiếp nhận một giá trị đầu vào duy nhất và xuất ra giá trị ngược lại.
Ví dụ, nếu đầu vào là \[0\] thì đầu ra sẽ là \[1\]:
Ngược lại, nếu đầu vào là \[1\] thì đầu ra sẽ là \[0\]:
Việc đảo ngược một giá trị có vẻ là một thao tác khá đơn giản, nhưng trong máy tính, chúng ta phải xây dựng một hệ thống logic rất phức tạp bằng cách kết hợp nhiều phép toán khác nhau để thực hiện quá trình đảo ngược như trên.
Cổng AND
Ngoại trừ cổng NOT, các cổng logic khác đều có khả năng tiếp nhận nhiều thông tin đầu vào. Trong đó, cổng AND tiếp nhận hai dây đầu vào. Nếu cả hai dây đều ở trạng thái “bật” (ứng với giá trị \[1)\] thì kết quả đầu ra sẽ là \[1\]:
Nếu một trong hai dây ở trạng thái “tắt” (ứng với giá trị \[0\]) thì kết quả đầu ra sẽ là \[0\]:
AND là một phép toán Boolean. Phép toán này sẽ nhận các giá trị đầu vào là “đúng” hoặc “sai” và xuất ra kết quả là “đúng” hoặc “sai” bằng cách kết hợp các giá trị đầu vào theo các quy tắc logic cụ thể. Trong các cổng logic, ta coi \[1\] là đúng và \[0\] là sai.
Để hiểu các phép toán Boolean, ta có thể sử dụng bảng chân lý hay bảng giá trị logic để liệt kê tất cả các cách kết hợp giá trị đầu vào và kết quả đầu ra có thể có. Với cổng AND, ta có bảng chân lý như sau:
Đầu vào A |
Đầu vào B |
Đầu ra |
Đúng |
Đúng |
Đúng |
Đúng |
Sai |
Sai |
Sai |
Đúng |
Sai |
Sai |
Sai |
Sai |
Lưu ý, chỉ có một hàng có kết quả đầu ra là “đúng”. Trường hợp này sẽ xảy ra khi cả hai đầu vào đều là “đúng”.
Chúng ta cũng có thể viết bảng chân lý bằng cách sử dụng các số \[1\] và \[0\] theo thuật ngữ máy tính:
Đầu vào A |
Đầu vào B |
Đầu ra |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
Với cách viết này, ta cũng thấy chỉ có một hàng có kết quả là \[1\].
Trong trường hợp ta muốn sử dụng một cổng logic sao cho kết quả đầu ra đa phần là \[1\], ta sẽ dùng loại cổng được đề cập tiếp theo!
Cổng OR
Cổng OR là một cổng logic có thể tiếp nhận hai đầu vào. Chỉ cần một trong hai đầu vào đó là \[1\] thì kết quả đầu ra sẽ là \[1\]:
Hãy xem bảng chân ý của cổng OR:
Đầu vào A |
Đầu vào B |
Đầu ra |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
Như ta thấy, tất cả các hàng đều có đầu ra là \[1\] trừ hàng cuối cùng. Vậy trường hợp duy nhất mà cổng OR xuất ra \[0\] là khi các giá trị đầu vào đều là \[0\].
Suy nghĩ logic
Để hình dung rõ hơn về cách hoạt động của các cổng, ta có thể thử áp dụng các quy tắc logic cho các sự việc và hiện tượng trong đời sống hàng ngày.
Giả sử ta xét cổng OR. Ví dụ, ta có đầu vào đầu tiên biểu diễn sự việc “ngoài trời đang mưa”, đầu vào thứ hai biểu diễn việc “chúng ta đi leo núi” và đầu ra biểu diễn cho thông tin “chúng ta nên mang ủng chống trơn trượt”.
Nếu trời đang mưa HOẶC (OR) chúng ta đi leo núi thì chúng ta nên mang ủng chống trơn trượt. Ta cũng có thể diễn giải dài hơn để thể hiện quan hệ logic như sau: Nếu “ngoài trời đang mưa” là đúng HOẶC (OR) “chúng ta đi leo núi” là đúng thì “chúng ta nên đi ủng chống trơn trượt” là đúng.
Điều đó có nghĩa là nếu ngoài trời đang mưa (bất kể là chúng ta có đi leo núi hay không) thì chúng ta nên mang ủng chống trơn trượt. Nếu chúng ta đi leo núi (bất kể là ngoài trời có đang mưa hay không) thì chúng ta nên mang ủng chống trơn trượt. Vậy trường hợp duy nhất chúng ta không nên mang ủng (trong số các trường hợp có thể xảy ra theo phép logic HOẶC (OR)) là khi ngoài trời không mưa và chúng ta cũng không leo núi.
Ví dụ vừa rồi thực ra chưa phản ánh hết tính phức tạp của mối quan hệ logic giữa các sự việc và hiện tượng trong thực tế, nhưng từ ví dụ đó, ta có thể thấy được logic có tồn tại và liên quan mật thiết đến “thế giới thực” bên ngoài máy tính.
Ý nghĩa đằng sau sự trừu tượng hóa
Các cổng logic được nhắc tới trong bài học này không chỉ là thiết bị vật lý mà còn là mô hình biểu diễn mang tính trừu tượng hóa cho các thiết bị điện tử trong thực tế. Mỗi cổng logic sẽ mô tả bất kỳ thiết bị nào có thể nhận các giá trị \[0\] hoặc \[1\] và xuất ra \[0\] hoặc \[1\] theo bảng chân lý của cổng đó.
Trong hầu hết các máy tính hiện đại, cổng logic được chế tạo bằng cách sử dụng bóng bán dẫn (transistor) kết hợp với các linh kiện điện tử khác như điện trở và điốt. Tất cả những thành phần này đều được kết nối với nhau để có khả năng chuyển đổi thông tin đầu vào như ta mong muốn.
Ta cũng có thể tự lắp ráp một số linh kiện điện tử với nhau và tạo ra cổng logic của riêng mình. Bạn có thể xem ví dụ trong
video này. Dưới đây là ảnh các mạch tự chế cho cổng AND và cổng OR được trích ra từ video trên:
Thực tế, nếu ta quan sát các bảng mạch máy tính và linh kiện điện tử hiện nay bằng mắt thường, ta sẽ không thấy thiết bị nào có cấu trúc như trong hình ảnh trên. Đó là vì các dòng máy tính ngày nay cần có hàng tỷ cổng logic để có thể hoạt động mạnh mẽ và xử lý tốt thông tin, nên các nhà sản xuất đã chế tạo ra các linh kiện điện tử nhỏ nhất có thể. Ví dụ như trong máy tính Mac có đến 5,6 tỷ bóng bán dẫn và mỗi bóng bán dẫn này chỉ có kích thước khoảng 14 nanomet.
Như vậy, chúng ta đã có thể hiểu và sử dụng các cổng logic nhờ vào cách lý giải đơn giản và khái quát ở trên. Đây chính là một ví dụ cho thấy sự hữu ích của phương pháp trừu tượng hóa, đó là tách những đặc điểm bản chất ra khỏi những chi tiết không phải là bản chất của sự vật và hiện tượng để giúp ta dễ dàng hiểu và xây dựng các hệ thống công nghệ.
Mở rộng kiến thức
Máy tính cũng sử dụng các cổng logic khác như
NAND,
NOR và
XOR. Nhìn chung, các cổng logic sẽ tiếp nhận và biến đổi thông tin đầu vào theo từng cách khác nhau và tùy từng trường hợp, giá trị
1 và
0 sẽ được xuất ra.
Trên thực tế, cổng NAND và NOR được gọi là các cổng logic phổ quát, tức là ta có thể xây dựng bất kỳ cổng nào khác chỉ với cổng NAND hoặc cổng NOR. Các nhà sản xuất phần cứng máy tính thường sử dụng cổng NAND nhiều hơn do tính phổ quát và dễ chế tạo của chúng, vì vậy trên máy tính của ta có thể có đến hàng triệu cổng NAND trong bảng mạch.
Máy tính thường xâu chuỗi các cổng logic lại với nhau bằng cách lấy đầu ra từ một cổng và sử dụng đầu ra đó làm đầu vào cho một cổng khác. Chuỗi gồm nhiều cổng logic như vậy được gọi là mạch logic.
Mạch logic cho phép máy tính thực hiện các hoạt động phức tạp hơn so với khi chỉ dùng một cổng duy nhất.
Mạch logic nhỏ nhất là một chuỗi gồm 2 cổng logic. Ta hãy cùng xem mạch logic sau:
Trước tiên, thông tin đầu vào A và B đi qua cổng AND. Sau đó, kết quả đầu ra của cổng AND được kết hợp với một thông tin đầu vào khác là C để đi qua cổng OR.
Bây giờ, ta cùng thử xem kết quả đầu ra cuối cùng sẽ là gì nếu giá trị \[0\] hoặc \[1\] của đầu vào bị thay đổi.
Đầu tiên, ta để tất cả đầu vào biểu diễn trang thái bật, tức là tất cả thông tin đầu vào đều là \[1\] hoặc “đúng”:
Khi đó kết quả đầu ra cũng là \[1\] hoặc “đúng”, vì \[1\] VÀ (AND) \[1\] cho ra kết quả là \[1\] và \[1\] HOẶC (OR) \[1\] cũng cho ra kết quả là \[1\].
Tiếp theo, điều gì sẽ xảy ra nếu ta chuyển đầu vào A và B sang trạng thái tắt và giữ nguyên trạng thái bật của đầu vào C?
Trong trường hợp này, kết quả đầu ra vẫn sẽ là \[1\]! Vì bước xử lý cuối cùng là cổng OR nên chỉ cần bật một trong các đầu vào ở trạng thái bật thì kết quả đầu ra sẽ là \[1\].