Ủng hộ tôi
Cả SRAM và DRAM đều sẽ mất dữ liệu khi ngắt nguồn cung cấp điện nên đều được xếp vào Bộ nhớ Volatile, vì thế cần phải phát triển các bộ nhớ khác để đảm bảo dữ liệu vẫn được lưu trữ khi ngắt nguồn điện, các bộ nhớ này gọi là Bộ nhớ Non-volatile.
Bộ nhớ Flash là một loại Bộ nhớ Non-volatile nên có thể được sử dụng để lưu trữ dữ liệu lâu dài. Khả năng lưu trữ được dữ liệu lâu dài do Flash lưu trữ điện tích trong một Floating gate có khả năng cách điện hoàn toàn.
Floating gate nằm giữa cực Gate và kênh dẫn của MOSFET. Nếu không có điện tích trong floating gate thì MOSFET có thể thực hiện chức năng dẫn điện của mình khi đưa mức điện áp vừa đủ V1 đến cực Gate của MOSFET, nếu có điện tích trong Floating gate thì cần phải sử dụng một điện áp V2 cao hơn V1 để điều khiển MOSFET. Bằng việc thiết lập điện tại tại cực Gate của MOSFET nằm giữa V1 và V2 thì chúng ta có thể sạc điện tích cho Floating gate.
Có thể lưu trữ nhiều bit trên một Flash cell bằng cách thay đổi lượng điện tích được sạc cho Floating gate. Các Flash cell có thể được nối theo dạng song song hoặc nối tiếp để tạo thành các cổng luận lý NOR hoặc NAND cho phép tạo ra nhiều kiến trúc truy xuất phù hợp (có thể truy xuất ngẫu nhiên hoặc tuần tự).
Mức độ tích hợp của Flash gần bằng với DRAM vào cao hơn SRAM rất nhiều vì mỗi Flash cell có thể chứa nhiều bit. Tuy nhiên Flash có một nhược điểm khá lớn đó là tuổi thọ của Floating gate chỉ chịu được khoảng tối đa 1000000 (1 triệu) lần ghi, để khắc phục nhược điểm này thì các Flash phải có các giải thuật ánh xạ địa chỉ thông minh sao cho khi ghi tới cùng 1 địa chỉ thì sẽ được ánh xạ tới các Flash cell khác cho mỗi lần ghi thành công.
Ổ đĩa cứng là một Bộ nhớ Non-volatile (nghĩa là dữ liệu không bị mất khi ngắt nguồn điện). Ổ đĩa cứng chứa nhiều đĩa phẳng có chung trục quay và được phủ một lớp vật liệu từ tính. Các đĩa từ quay ở tốc độ 5400 đến 15000 vòng/phút. Một đầu đọc/ghi được đặt trên mặt đĩa có thể phát hiện được sự thay đổi hướng của các đường sức từ do đĩa từ tạo ra. Đầu đọc/ghi được gắn một bộ truyền động cho phép nó có thể định vị trên các rãnh tròn (track) khác nhau.
Để đọc một vùng dữ liệu (sector) cụ thể, đầu đọc phải được đặt đúng rãnh, sau đó chờ đĩa từ xoay tới đúng vùng dữ liệu. Thời gian truy xuất trung bình là 10ms, khá chậm so với các loại bộ nhớ khác. Tuy nhiên, khi đầu đọc được đặt đúng vị trí thì tốc độ truyền dữ liệu có thể lên đến 100 MB/s. Nếu đầu đọc phải được định vị lại giữa 2 lần truy xuất thì tốc độ truyền có thể giảm tới khoảng 1000 lần do nó cần thời gian để định vị lại đầu đọc. Tuy tốc độ không cao nhưng Ổ đĩa cứng có thể lưu trữ lên tới hàng TB (Terabyte) dữ liệu.
Ngày nay, ổ đĩa cứng đang dần bị SSD (Ổ đĩa thể rắn - một loại bộ nhớ Flash) thay thế, trong tương lai chúng sẽ chỉ còn được sử dụng trong các trung tâm dữ liệu cho mục đích lưu trữ dự phòng.
Mỗi loại bộ nhớ khác nhau có khả năng lưu trữ và tốc độ truy xuất khác nhau, các bộ nhớ có tốc độ cao thì đắt và kích thước lại nhỏ, các bộ nhớ rẻ có thể mua với dung lượng lớn thì tốc độ lại chậm, điều này tạo ra một thách thức đó là làm sao tạo ra được một bộ nhớ vừa đạt được tốc độ cao vừa có dung lượng lưu trữ lớn lại vừa có chi phí thấp. Rõ ràng là chúng ta không thể vượt qua được thách thức này nếu chỉ sử dụng một loại bộ nhớ duy nhất.
Có một ý tưởng là chúng ta sẽ sử dụng một Hệ thống Phân cấp Bộ nhớ(Memory Hierarchy) với sự thỏa hiệp về dung lượng, tốc độ và giá thành. Chúng ta sẽ sắp xếp các dữ liệu thường xuyên sử dụng trong SRAM nhằm tăng tốc độ truy xuất, những dữ liệu còn lại sẽ nằm trong các bộ nhớ lớn hơn và tốc độ truy xuất thấp hơn. Nhưng một thách thức nảy sinh đó là dữ liệu sẽ di chuyển giữa các cấp bộ nhớ khi nào? Chúng ta có 2 cách tiếp cận:
● Cách 1: Phân cấp tường minh.
Lập trình viên sẽ nhìn thấy tất cả không gian địa chỉ của tất cả các loại bộ nhớ và sẽ phải tự quyết định sử dụng bộ nhớ nào cho phép toán nào. Lập trình viên cũng có thể viết chương trình để truyền dữ liệu tới bộ nhớ có tốc độ cao nhưng nhỏ tại thời điểm thích hợp và truyền dữ liệu quay lại bộ nhớ có tốc độ thấp nhưng lớn khi không cần truy xuất tốc độ cao. Vì bộ nhớ có tốc độ cao chỉ có dung lượng nhỏ nên dữ liệu luôn phải được di chuyển khi toán hạng của các phép toán thay đổi.
● Cách 2: Phân cấp ẩn.
Lập trình viên chỉ nhìn thấy một không gian địa chỉ duy nhất và đó là không gian địa chỉ của bộ nhớ có dung lượng lớn nhất nằm trong không gian địa chỉ của CPU. Hệ thống Bộ nhớ sẽ di chuyển dữ liệu giữa các cấp bộ nhớ tùy thuộc vào các kiểu sử dụng mà nó phát hiện. Để làm được điều này, chúng ta cần thêm một mạch số để kiểm tra mỗi khi CPU truy xuất một địa chỉ bộ nhớ thì nên tìm địa chỉ này ở đâu trong Hệ thống Phân cấp Bộ nhớ. Sau đó, nếu một vùng địa chỉ được truy xuất thường xuyên thì Hệ thống Phân cấp Bộ nhớ sẽ ánh xạ chúng tới loại bộ nhớ nhanh nhất và tự động di chuyển dữ liệu tới đó, hành vi này của Hệ thống Phân cấp Bộ nhớ hoàn toàn vô hình đối với lập trình viên, giúp lập trình viên thoát khỏi gánh nặng về việc xem xét nên sử dụng loại bộ nhớ nào và sử dụng khi nào.