RAM

Nếu bạn đã từng ở giữa một chiến dịch RPG dài trên bảng điều khiển của mình hoặc vượt qua một cấp độ khó trên Minesweeper trên máy tính để bàn và con chó của bạn đi ngang qua, vấp và kéo dây điện ra khỏi tường, bạn  sẽ thấy đau đớn vì mất tất cả quá trình chơi của bạn

Nhưng lý do khiến bạn mất là do bảng điều khiển, máy tính xách tay và máy tính của bạn sử dụng Bộ nhớ truy cập ngẫu nhiên hoặc RAM, nơi lưu trữ những thứ như trạng thái trò chơi - miễn là nguồn điện vẫn bật. Một loại trí nhớ khác, được gọi là trí nhớ bền bỉ, có thể tồn tại mà không cần nguồn điện, và nó được sử dụng cho những việc khác.
Tất cả các mạch logic mà chúng ta đã thảo luận cho đến nay đều đi theo một hướng - luôn luôn chảy về phía trước - giống như gợn sóng 8 bit của chúng ta. Hãy thử lấy một cổng OR thông thường và cấp lại đầu ra vào một trong các đầu vào của nó. Đầu tiên, hãy đặt cả hai đầu vào thành 0, Vì vậy, 0 OR 0 và mạch này luôn luôn xuất ra 0. Nếu chúng ta lật đầu vào A thành 1. 1 OR 0 là 1, vì vậy bây giờ đầu ra của cổng OR là 1. Một phần của giây sau đó lặp lại xung quanh đầu vào B, vì vậy cổng OR thấy rằng cả hai đầu vào của nó bây giờ là 1, 1 OR 1 vẫn là 1, vì vậy không có thay đổi trong đầu ra Nếu chúng ta lật đầu vào A về 0, cổng OR vẫn ra 1. Vì vậy, bây giờ chúng ta đã có một mạch ghi "1" cho chúng ta. Ngoại trừ, chúng tôi có một vấn đề nhỏ ở đây - thay đổi này là vĩnh viễn! Dù chúng ta có cố gắng đến đâu, cũng không có cách nào khiến mạch này lật ngược lại từ 1 thành 0
Bây giờ chúng ta hãy xem xét cùng một mạch này nhưng thay vào đó bằng cổng AND. Chúng ta sẽ bắt đầu cả hai đầu vào A và B ở 1. 1 VÀ 1 đầu ra 1 mãi mãi nhưng nếu sau đó chúng ta lật đầu vào A thành 0 vì đó là cổng AND, đầu ra sẽ về 0. Vì vậy, mạch này ghi lại 0, ngược lại với mạch khác của chúng tôi, Giống như trước đây, bất kể đầu vào nào chúng tôi áp dụng cho đầu vào A sau đó. mạch sẽ luôn xuất ra 0. Bây giờ chúng ta đã có các mạch có thể ghi lại cả 0 và 1. Chìa khóa để biến nó thành một phần bộ nhớ hữu ích là kết hợp hai mạch của chúng ta thành cái được gọi là chốt AND-OR. In có hai đầu vào, một đầu vào "set" đặt đầu ra thành 1 và đầu vào "reset" đặt lại đầu ra 0. Nếu set và reset đều bằng 0, mạch chỉ xuất ra bất cứ thứ gì được đặt lần cuối. Nói cách khác, nó ghi nhớ một chút thông tin MEMORY Điều này được gọi là "chốt" (latch) vì nó "chốt" (latch) một giá trị cụ thể và giữ nguyên như vậy. Hành động đưa dữ liệu vào bộ nhớ được gọi là ghi, trong khi lấy dữ liệu ra được gọi là đọc(reading).

Memory circuit

Vì vậy, chúng ta đã có một cách để lưu trữ một bit thông tin duy nhất, việc có hai dây khác nhau để đầu vào - đặt(set) và đặt lại (reset) - hơi khó hiểu. Để làm cho điều này dễ sử dụng hơn một chút, chúng tôi thực sự muốn có một dây duy nhất để nhập dữ liệu, mà chúng tôi có thể đặt 0 hoặc 1 để lưu trữ giá trị. Ngoài ra, chúng tôi sẽ cần một dây dẫn cho phép bộ nhớ có sẵn để ghi hoặc "khóa" (locked) xuống - được gọi là dây cho phép ghi. Bằng cách thêm một vài cổng logic bổ sung, chúng ta có thể xây dựng mạch này, được gọi là Gate Latch vì "cổng" có thể được mở hoặc đóng, Bây giờ mạch này đang bắt đầu phức tạp hơn một chút, chúng ta không muốn phải xử lý. với tất cả các cổng logic riêng lẻ .. vì vậy, như trước đây, chúng tôi sẽ nâng cao mức độ trừu tượng và đặt toàn bộ mạch Gated Latch của chúng tôi vào một hộp - một hộp lưu trữ trên bit.
Hãy thử nghiệm thành phần mới của chúng ta! hãy bắt đầu mọi thứ ở mức 0. Nếu chúng ta chuyển dây Dữ liệu từ 0 sang 1 hoặc 1 thành 0, không có gì xảy ra - đầu ra vẫn ở 0. Đó là vì dây cho phép ghi bị tắt, điều này ngăn cản bất kỳ thay đổi nào đối với bộ nhớ. Vì vậy, chúng ta cần "mở" "cổng" bằng cách chuyển ghi (write enable) cho phép ghi thành 1. Bây giờ chúng ta có thể đặt 1 trên dòng dữ liệu để lưu giá trị vào chốt của chúng ta. Lưu ý kết quả đầu ra bây giờ là 1. Có thể tắt dòng kích hoạt và output vẫn là 1. Một lần nữa, chúng ta có thể chuyển đổi giá trị trên dòng dữ liệu mà chúng ta muốn, nhưng đầu ra sẽ giữ nguyên. Giá trị được lưu trong bộ nhớ. Bây giờ hãy bật lại dòng kích hoạt, sử dụng dòng dữ liệu của chúng tôi để đặt chốt thành 0. Tắt dòng kích hoạt, đầu ra là 0.
Tất nhiên bây giờ bộ nhớ máy tính chỉ lưu trữ một bit thông tin không phải là rất hữu ích - chắc chắn là không đủ để chạy bất cứ thứ gì. Nhưng chúng tôi không bị giới hạn chỉ sử dụng một chốt. Nếu chúng ta đặt 8 chốt cạnh nhau, chúng ta có thể lưu trữ 8 bit thông tin giống như một số 8 bit. Một nhóm chốt hoạt động như vậy được gọi là "thanh ghi" (Register) chứa một số duy nhất và số bit trong một thanh ghi được gọi là độ rộng của nó. Các máy tính ban đầu có thanh ghi 8-bit, sau đó là 16,32 và ngày nay nhiều máy tính có thanh ghi rộng 64 bit. Để ghi vào Register của chúng ta, trước tiên chúng tôi phải kích hoạt các chốt. Chúng tôi có thể làm điều này với một dây duy nhất kết nối với tất cả đầu vào kích hoạt của chúng, được đặt thành 1. Sau đó, chúng tôi gửi dữ liệu của mình bằng cách sử dụng 8 dây dữ liệu, sau đó đặt kích hoạt trở lại 0 và giá trị 8 bit hiện được lưu trong memory .

8-bit register nhìn như này
Đặt các chốt cạnh nhau hoạt động tốt đối với một số lượng nhỏ các bit. Một thanh ghi 64 bit sẽ cần 64 dây chạy tới chân dữ liệu và 64 dây chạy tới đầu ra May mắn thay, chúng ta chỉ cần 1 dây để kích hoạt tất cả các chốt, nhưng đó vẫn là 129 dây. Đối với 256 bit, chúng ta kết thúc với 513 dây !. Giải pháp là một ma trận. Trong ma trận này, chúng tôi không sắp xếp các chốt của chúng tôi trong một hàng, chúng tôi đặt chúng trong một lưới. Đối với 256 bit, chúng ta cần một lưới 16 x 16 chốt với 16 hàng và cột dây. Để kích hoạt bất kỳ trên chốt nào, chúng ta phải bật dây hàng AND cột tương ứng.  Chúng ta chỉ muốn bật chốt ở giao điểm của hai dây, nhưng tất cả các chốt khác sẽ bị vô hiệu hóa. Đối với điều này, chúng ta có thể sử dụng cổng AND đáng tin cậy của mình! Cổng AND sẽ chỉ xuất ra 1 nếu dây hàng và dây cột đều là 1. Vì vậy, chúng ta có thể sử dụng tín hiệu này để chọn duy nhất một chốt duy nhất. Thiết lập hàng và cột này kết nối tất cả các chốt của chúng tôi với một dây duy nhất, được chia sẻ, cho phép ghi. Để một chốt có thể cho phép ghi, dây hàng, dây cột và dây cho phép ghi đều phải là 1

Điều đó chỉ đúng với một chốt duy nhất tại bất kỳ thời điểm nào. Điều này có nghĩa là chúng ta có thể sử dụng một dây chia sẻ duy nhất cho dữ liệu Vì chỉ có một chốt sẽ được phép ghi, chỉ một chốt sẽ lưu dữ liệu - phần còn lại của các chốt sẽ đơn giản bỏ qua các giá trị trên dây dữ liệu vì chúng không được bật ghi. Chúng ta có thể sử dụng thủ thuật tương tự với dây cho phép đọc để đọc dữ liệu sau đó, để lấy dữ liệu ra khỏi một chốt cụ thể. Điều này có nghĩa là tổng cộng cho 256 bit bộ nhớ, chúng ta chỉ cần 35 dây - 1 dây dữ liệu, 1 dây cho phép ghi, 1 dây cho phép đọc và 16 hàng và cột để lựa chọn. Tiết kiệm dây đáng kể đó! Nhưng chúng ta cần một cách để chỉ định duy nhất từng giao lộ, Chúng ta có thể nghĩ về điều này giống như một thành phố, nơi bạn có thể muốn gặp ai đó ở đại lộ số 12 và đường số 8- đó là và địa chỉ xác định một giao lộ, (Memory address)
Chốt mà chúng ta vừa lưu một bit của chúng ta vào có địa chỉ của hàng 12 cột 8. Vì có tối đa 16 hàng, chúng ta lưu trữ địa chỉ hàng dưới dạng số 4 bit. 12 = 1100 trong hệ nhị phân. Chúng ta có thể làm tương tự đối với địa chỉ cột: 8 là 1000 trong hệ nhị phân. Vì vậy, địa chỉ cho chốt cụ thể mà chúng ta vừa sử dụng có thể được viết là 11001000. Để chuyển đổi từ một địa chỉ thành một thứ gì đó chọn đúng hàng hoặc cột, chúng ta cần một thành phần đặc biệt được gọi là bộ ghép kênh - một thành phần máy tính có cái tên khá thú vị. ít nhất là so với ALU. Bộ ghép kênh có tất cả các kích cỡ khác nhau nhưng vì chúng ta có 16 hàng, nên chúng ta cần bộ ghép kênh từ 1 đến 16. Bạn cung cấp cho nó một số 4 bit và nó kết nối dòng đầu vào với một dòng đầu ra tương ứng. Vì vậy, nếu chúng ta chuyển vào 0000, nó sẽ chọn cột đầu tiên cho chúng ta, nếu chúng ta chuyển vào 0001, cột tiếp theo sẽ được chọn, v.v. Chúng tôi cần một bộ ghép kênh để xử lý các hàng của chúng tôi và một bộ ghép kênh khác để xử lý các cột.
Đối với bộ nhớ 256 bit. Nó cần một địa chỉ 8 bit cho đầu vào - 4 bit cho cột và 4 cho hàng. Chúng tôi cũng cần ghi và đọc các dây cho phép. Và cuối cùng, chúng ta chỉ cần một dây dữ liệu, có thể được sử dụng để đọc hoặc ghi dữ liệu. Thật không may, ngay cả bộ nhớ 256-bit cũng không đủ để chạy nhiều thứ, vì vậy chúng ta cần phải mở rộng quy mô hơn nữa !. Chúng tôi sẽ xếp chúng vào một hàng, giống như với sổ đăng ký. Chúng tôi sẽ tạo một hàng gồm 8 trong số chúng, vì vậy chúng tôi có thể lưu trữ một số 8 bit - cũng được biết dưới dạng byte. Để làm điều này, chúng tôi cung cấp cùng một địa chỉ chính xác vào tất cả 8 thành phần bộ nhớ 256-bit của chúng tôi cùng một lúc và mỗi thành phần lưu một bit của số. Điều đó có nghĩa là thành phần chúng ta vừa tạo có thể lưu trữ 256 byte tại 256 địa chỉ khác nhau. Một lần nữa, để giữ mọi thứ đơn giản, chúng tôi muốn bỏ lại phía sau sự phức tạp bên trong này. Thay vì nghĩ đây là một chuỗi các mô-đun bộ nhớ và mạch riêng lẻ, chúng ta sẽ nghĩ về nó như một ngân hàng bộ nhớ địa chỉ thống nhất, Chúng ta có 256 địa chỉ và tại mỗi địa chỉ, chúng ta có thể đọc hoặc ghi một giá trị 8 bit. Cách mà các máy tính hiện đại mở rộng quy mô đến megabyte và gigabyte bộ nhớ là thực hiện điều tương tự mà chúng tôi đã làm ở đây - tiếp tục đóng gói các gói bộ nhớ nhỏ theo cách sắp xếp lớn hơn, lớn hơn và lớn hơn. Khi số lượng vị trí bộ nhớ tăng lên, các địa chỉ của chúng tôi cũng phát triển theo. 8 bit chứa đủ số để cung cấp địa chỉ cho 256 byte bộ nhớ của chúng ta, nhưng đó là tất cả. Để giải quyết một gigabyte- hoặc một tỷ byte bộ nhớ-chúng ta cần địa chỉ 32 bit, Một thuộc tính quan trọng của bộ nhớ này là chúng ta có thể truy cập một vị trí bộ nhớ, bất kỳ lúc nào và theo thứ tự ngẫu nhiên. Vì lý do này, nó được gọi là Bộ nhớ truy cập ngẫu nhiên(Random-Access Memory) hoặc RAM.
Khi bạn nghe mọi người nói về việc một máy tính có bao nhiêu RAM - đó là bộ nhớ của máy tính. RAM giống như bộ nhớ ngắn hạn hoặc bộ nhớ làm việc của con người. Nơi bạn theo dõi mọi thứ đang diễn ra ngay bây giờ- Chẳng hạn như việc bạn đã ăn trưa hay đã thanh toán hóa đơn điện thoại. Đây là một thanh RAM thực tế - với 8 mô-đun bộ nhớ được hàn vào bo mạch. Nếu chúng ta cẩn thận mở một trong các mô-đun này và phóng to, điều đầu tiên bạn sẽ thấy là 32 ô vuông bộ nhớ, Phóng to vào một trong các ô vuông đó và chúng ta có thể thấy mỗi ô trên bao gồm 4 khối nhỏ hơn. Nếu chúng ta phóng to một lần nữa, chúng ta sẽ đi đến ma trận các bit riêng lẻ. Đây là một ma trận 128 x 64 bit. Tổng cộng là 8192 bit. Mỗi 32 ô vuông của chúng ta có 4 ma trận, vì vậy đó là 32 nghìn, 7 trăm và 68 bit. Và có tổng cộng 32 ô vuông. Vì vậy, tổng thể, đó là khoảng 1 triệu bit bộ nhớ trong mỗi chip. Thanh RAM của chúng ta có 8 trong số các chip này, vì vậy tổng cộng, RAM này có thể lưu trữ 8 triệu bit, còn được gọi là 1 megabyte. Đó là không nhiều bộ nhớ ngày nay - đây là một mô-đun RAM từ những năm 1980. Ngày nay, bạn có thể sử dụng RAM có bộ nhớ gigabyte trở lên - đó là hàng tỷ byte.
Về cơ bản, tất cả các công nghệ này đều lưu trữ các bit thông tin trong các ma trận lồng vào nhau của các ô nhớ. Giống như nhiều thứ trong máy tính, hoạt động cơ bản tương đối đơn giản. Đó là các lớp và các lớp trừu tượng đang thổi bùng tâm trí chúng ta