Chương 4 - Bộ nhớ trong
...

#1 - Phân loại bộ nhớ máy tính
...

  • Bộ nhớ máy tính gồm nhiều thành phần với tốc đọ truy cập và dung lượng khác nhau được kết hợp ới nhau tạo thành hệ thống nhớ
  • Có 3 tiêu chí phân loại bộ nhớ máy tính
    1. Kiểu truy cập
      • Bộ nhớ truy cập tuần tự (Serial Access Memory - SAM)[1]
      • Bộ nhớ truy cập ngẫu nhiên (Random Access Memory - RAM)
      • Bộ nhớ chỉ đọc (Read Only Memory - ROM)
    2. Khả năng duy trì dữ liệu
      • Bộ nhớ ổn định (Non-volatile memory)
      • Bộ nhớ không ổn định (Volatile memory)
    3. Công nghệ chế tạo
      • Bộ nhớ bán dẫn: chế tạo bằng vật liệu bán dẫn
      • Bộ nhớ từ tính: là bộ nhớ dựa trên từ tính của các vật liệu có khả năng nhiễm từ để lưu trữ và đọc / ghi thông tin
      • Bộ nhớ quang học: là bộ nhớ hoạt động dựa trên nguyên lý quang điện

1.1 - Tổ chức của một mạch nhớ (Memory chip)
...

  • Một mạch nhớ (memory chip) thường gồm nhiều ô nhớ (memory cells) được tổ chức thành một ma trận gồm các hàng và cột
  • Tổ chức của một mạch nhớ bao gồm
    • Đường địa chỉ (Address lines): Nhận tín hiệu địa chỉ ô nhớ từ CPU
    • Bộ giải mã địa chỉ (Address decoder): Giải mã tín hiệu địa chỉ thành địa chỉ hàng và cột để chọn ra được ô nhớ
    • Đường dữ liệu (Data lines): Kết nối với Bus dữ liệu để nhận và gửi dữ liệu đến CPU
    • Tín hiệu chọn mạch (Chip select - CS)
    • Tín hiệu cho phép đọc (Read enable - RE)
    • Tín hiệu cho phép ghi (Write enable - WE)

#2 - Cấu trúc phân cấp bộ nhớ máy tính
...

  • Các thành phần chính bao gồm

    • Các thanh ghi của CPU (CPU Registers)
    • Bộ nhớ cache (Cache)
    • Bộ nhớ chính (Main Memory)
    • Bộ nhớ ngoài (Secondary / Tertiary Storage)
  • Trong cấu trúc phân cấp hệ thống nhớ, dung lượng các thành phần tăng theo chiều từ các thanh ghi của CPU đến bộ nhớ ngoài

  • Ngược lại, tốc độ truy nhập hay băng thông và giá thành tăng theo chiều từ bộ nhớ ngoài đến thanh ghi của CPU

2.1 - Vai trò của cấu trúc phân cấp hệ thống nhớ
...

  • Cấu trúc phân cấp hệ thống nhớ không thực hiện "chia để trị" mà được tạo ra để thực hiện 2 vai trò chính
    • Tăng hiệu năng hệ thống qua việc giảm thời gian truy cập bộ nhớ
    • Giảm giá thành sản xuất

#3 - Bộ nhớ ROM và RAM
...

3.1 - Bộ nhớ ROM
...

  • ROM (Read Only Memory) là bộ nhớ chỉ đọc, có nghĩa là thông tin lưu trữ trong ROM chỉ có thể đọc mà không được ghi vào
  • Việc ghi thông tin vào ROM chỉ có thể được thực hiện bằng các thiết bị chuyên dùng hoặc phương pháp đặc biệt
  • Thông tin trong ROM được nhà sản xuất ghi sẵn, gồm các thông tin về cấu hình máy và hệ thống các mô đun phần mềm phục vụ việc ra vào cơ sở (BIOS - Basic Inout Output System)
  • ROM là bộ nhớ bán dẫn và là bộ nhớ ổn định
  • Quá trình phát triển ROM đã trải qua nhiều thế hệ. Loại ROM tiên tiến nhất hiện nay là EEPROM (Electrically Erasable PROM) có thể xóa được bằng điện và có thể ghi được thông tin sử dụng phần mềm chuyên dụng

3.2 - Bộ nhớ RAM
...

  • Bộ nhớ RAM được chế tạo theo công nghệ bán dẫn và thuộc loại bộ nhớ không ổn định
  • Có hai loại RAM cơ bản
    • RAM tính (Static RAM hay SRAM)
    • RAM động (Dynamic RAM hay DRAM)
  • SRAM tĩnh cấu tạo dựa trên một mạch lật, luôn ổn định và không phải "làm tươi" định kỳ
  • DRAM cấu tạo dựa trên một tụ điện. Do bản chất của tụ điện luôn có khuynh hướng tự phóng điện tích, thông tin trong DRAM sẽ dần bị mất. Do vậy, DRAM cần được làm tươi định kỳ để bảo toàn thông tin

#4 - Bộ nhớ Cache
...

  • Cache là bộ nhớ đệm, đóng vai trò trung gian, trung chuyển dữ liệu từ bộ nhớ chính về CPU và ngược lại
  • Với các hệ thống CPU mới sử dụng công nghệ tích hợp cao, bộ nhớ cache thường được tích hợp vào trong CPU nhằm nâng cao tốc độ và băng thông trao đổi dữ liệu giữa CPU và cache

4.1 - Vai trò của cache
...

  • Sở dĩ cache có thể giúp tăng hiệu năng hệ thống là nhờ cache có khả năng dung hòa được CPU có tốc độ cao và bộ nhớ chính có tốc độ thấp làm cho thời gian trung bình CPU truy cập dữ liệu từ bộ nhớ chính tiệm cận thời gian truy nhập cache
  • Bộ nhớ cache có dung lượng tương đối nhỏ, khoảng từ vài chục kilobyte đến vài chục megabyte. Tốc độ truy cập cache cao, nhưng giá thành còn khá đắt. Cache được coi là bộ nhớ "thông minh" có khả năng đoán trước được nhu cầu lệnh và dữ liêu của CPU. Cache "đoán" và tải trước các lệnh và dữ liệu CPU cần sử dụng từ bộ nhớ chính, nhờ vậy giúp CPU giảm thời gian truy cập hệ thống nhớ, tăng tốc độ xử lý

4.2 - Nguyên lý hoạt động của cache
...

  • Cache hoạt động dựa trên hai nguyên lý cơ bản
    • Nguyên lý lân cận về không gian (Spatial locality): "Nếu một ô nhớ đang được truy nhập thì xác suất các ô nhớ liền kề với nó được truy nhập trong tương lai gần là rất cao"
    • Nguyên lý lân cận về thời gian (Temporal locality): "Nếu một ô nhớ đang được truy nhập thì xác suất nó được truy nhập lại trong tương lai gần là rất cao"

4.3 - Hệ số Hit và Miss
...

  • Hit (đoán trúng) là một sự kiện mà CPU truy nhập một mục tin và mục tin ấy có ở trong cache, H thuộc khoảng (0,1). Hệ số Hit càng cao thì hiệu quả của cache càng cao
  • Miss (đoán trượt) là một sự kiện mà CPU truy nhập một mục tin và mục tin ấy trong có trong cache

4.4 - Các dạng kiến trúc cache
...

4.4.1 - Kiến trúc Look Aside
...

  • Trong kiến trúc Look Aside, bộ xử lý (CPU) sẽ cùng lúc tìm kiếm dữ liệu trong cả bộ nhớ cache và bộ nhớ chính. Nếu dữ liệu tìm thấy trong bộ nhớ cache, một tín hiệu hủy sẽ được gửi đến bộ nhớ chính để ngừng việc tìm kiếm. Tuy nhiên,điều này đòi hỏi nhiều hoạt động tín hiệu hơn cho mỗi lần truy cập và khi dữ liệu được tìm thây trong bộ nhớ cache, nó cần gửi một tín hiệu hủy đến bộ nhớ chính, điều này là một nhược điểm của kiến trúc Look Aside

4.4.2 - Kiến trúc Look Through
...

  • Trong kiến trúc Look Through, khi bộ xử lý muốn đọc hoặc ghi một địa chỉ nó sẽ đầu tiên tìm kiếm trong bộ nhớ cache. Nếu dữ liệu không có trong bộ nhớ cache (cache miss), bộ xử lý sẽ tiếp tục tìm kiếm trong bộ nhớ chính. Khi dữ liệu được tìm thấy trong bộ nhớ chính, nó sẽ được sao chép vào bộ nhớ cache để sử dụng cho các lần truy cập sau

4.5 - Các dạng tổ chức / ánh xạ cache
...

  • Do kích thước của cache thường rất nhỏ so với kích thước bộ nhớ chính nên tại mỗi thời điểm, chỉ có một phần nhỏ thông tin của bộ nhớ chính được chuyển vào cache
  • Cache không thực hiện ánh xạ toàn bộ của bộ nhớ chính. Kích thước của cache thường nhỏ hơn rất nhiều so với bộ nhớ chính. Do đó, chỉ một phần nhỏ của bộ nhớ chính được ánh xạ và lưu trữ trong cache tại một thời điểm
  • Vì vậy, mặc dù cache không ánh xạ toàn bộ bộ nhớ chính nhưng nó vẫn giúp tăng tốc độ truy cập dữ liệu bằng cách lưu trữ và cung cấp nhanh chóng các dữ liệu và lệnh được sử dụng thường xuyên
  • Có ba phương pháp ánh xạ chính được sử dụng trong cache:

4.5.1 - Ánh xạ trực tiếp
...

  • Trong phương pháp này, mỗi block của bộ nhớ chính được ánh xạ vào một line cụ thể trong cache. Do các ánh xạ là cố định, nên khi biết địa chỉ ô nhớ có thể tìm được vị trí của nó trong cache rất nhanh chóng. Tuy nhiên cũng do ánh xạ cố đinh nên phương pháp này dễ gây xung đột vì có thể tạo ra nhiều dòng cache bị nút cổ chai trong quá trình hoạt động của cache
  • Khi biết được địa chỉ dòng, ta biết vị trí của nó trong cache
  • Để quản lí được các ô nhớ, cache sử dụng địa chỉ ánh xạ trực tiếp gồm 3 thành phần
    • Tag (bit) là địa chỉ trang trong bộ nhớ chứa dòng được nạp vào cache =
    • Line (bit) là địa chỉ dòng trong cache = ò
    • Word (bit) địa chỉ của từ trong dòng = íưò

4.5.2 - Ánh xạ kết hợp trực tiếp
...

  • Mỗi block của bộ nhớ chính có thể được nạp vào bất kỳ line nào trong cache. Khi cần tìm một block, toàn bộ cache được tìm kiếm cùng một lúc
  • Ngược lại với phương pháp ánh xạ trực tiếp, khi biết được địa chỉ của dòng trong bộ nhớ, ta chưa biết vị trí của nó trong cache
  • Để có thể quản lý được các ô nhớ được nạp, cache sử dụng địa chỉ ánh xạ kết hợp đầu đủ chỉ gồm 2 thành phần
    • Tag
    • Word
  • Phương pháp này chỉ phù hợp với các cache có dung lượng nhỏ

4.5.3- Ánh xạ tập kết hợp
...

  • Cache được chia thành nhiều đường, một đường chứa 1 số lượng line. Mỗi trang của bộ nhớ chính có thể được nạp vào bất kỳ line nào trong một đường của cache
  • Để có thể quản lý được các ô nhớ được nạp, cache sử dụng địa chỉ ánh xạ trực tiếp gồm 3 thành phần
    • Tag
    • Set = òđư
    • Word
Info

Phương pháp ánh xạ trực tiếp có ưu điểm là thiết kế đơn giản và nhanh. Tuy nhiên, đây là dạng ánh xạ cố định dễ gây xung đột dẫn đến hiệu quả cache không cao. Phương pháp ánh xạ kết hợp đầy đủ sử dụng ánh xạ mềm, ít gây xung đột và có thể đạt hệ số hit rất cao. Tuy nhiên, phương pháp này có thiết kế phức tạp và có tốc độ chậm. Phương pháp ánh xạ tập kết hợp là sự kết hợp của hai phương pháp ánh xạ trực tiếp và ánh xạ kết hợp đầy đủ, tận dụng được ưu điểm của hai phương pháp: nhanh, ít xung đột và không quá phức tạp, cho hiệu quả cao

#5 - Các phương pháp đọc ghi và chính sách thay thế
...

5.1 - Các phương pháp đọc ghi cache
...

  • Xét trường hợp đọc thông tin
    • Nếu đó là trường hợp Hit: Thời gian CPU truy nhập mẩu tin bằng thời gian CPU truy nhập cache
    • Nếu đố là trường hợp Miss: Thời gian CPU truy nhập mẩu tin bằng thời gian truy nhập cache cộng với thời gian cache truy nhập bộ nhớ chính - còn gọi là miss penalty (gấp đôi thời gian truy cập khi đoán trượt)
  • Xét trường hợp ghi thông tin
    • Nếu đó là trường hợp hit
      • Ghi thẳng (write through): mẩu tin được ghi đồng thời ra cache và bộ nhớ chính
      • Ghi trễ (write back): mẩu tin trước hết được ghi ra cache và dòng cache chứa mẩu tin sẽ được ghi ra bộ nhớ chính khi nó bị thay thế. Như vậy, mẩu tin có thể được ghi ra cache nhiều lần, nhưng chỉ được ghi ra bộ nhớ chính duy nhất một lần
    • Nếu đó là trường hợp miss
      • Ghi có đọc lại (write allocate: mẩu tin trước hết được ghi ra bộ nhớ chính, và sau đó dòng nhớ chứa mẩu tin vừa ghi được đọc vào cache
      • Ghi không đọc lại (write non-allocate): mẩu tin chỉ được ghi ra bộ nhớ chính

5.2 - Các chính sách thay thế dòng cache
...

  • Có ba chính sách thay thế đượ sử dụng hiện nay
    • Thay thế ngẫu nhiên (Random Replacement): Các dòng cache được lựa chọn để thay thế một cách ngẫu nhiên, không theo một quy luật nào. Phương pháp này tạo ra hệ số miss cao nhưng ưu điểm là thiết kế đơn giản và dễ cài đặt
    • Thay thế kiểu vào trước ra trước (FIFO - First In Fist Out): Phương pháp này có khuynh hướng loại bỏ các dòng cache có thời gian sử dụng lâu nhất, hay "già nhất". Nhược điểm là cài đặt phức tạp
    • Thay thế các dòng ít được sử dụng gần đây nhất (LRU - Least Recently Used): Các dòng cache được lựa chọn để thay thế là các dòng ít được sử dụng gần đây nhất - tuân theo yếu tố lân cận theo thời gian một cách chặt chẽ. Nhược điểm của phương pháp này là thiết kế và cài đặt phức tạp do cần phải có mạch điện tử chuyên dụng để theo dõi tần suất sử dụng các dòng cache

#6 - Hiệu năng cache và các yếu tố ảnh hưởng
...

6.1 - Hiệu năng cache
...

  • Hiệu năng của cache (Cache Performance) có thể được đánh giá tổng thể theo thời gian truy nhập trung bình của CPU đến hệ thống nhớ
  • Với thời gian truy nhập trung bình hệ thống nhớ tiệm cận thời gian truy nập cache với trường hợp cache đạt hệ số hit cao

6.2 - Các yếu tố ảnh hưởng
...

Vấn đề kích thước cache

  • Thực tế thống kê cho thấy, kích thước của cache không ảnh hưởng nhiều đến hệ số miss
  • Với kích thước lớn, có thể tăng được số dòng bộ nhớ lưu trong cache
  • Nhược điểm của cache lớn là chậm, do có không gian tìm kiếm lớn hơn cache nhỏ

Vấn đề chia tách cache

  • Cache có thể được tách thành cache lệnh (I-Cache) và cache dữ liệu (D-Cache) để cải thiện hiệu năng, do
    • Dữ liệu và lệnh có tính lân cận khác nhau
    • Dữ liệu thường có tính lân cận về thời gian cao hơn lân cận về không gian; lệnh có tính lân cận về không gian cao hơn lân cận về thời gian
    • Cache lệnh chỉ cần hỗ trợ theo tác đọc; cache dữ liệu cần hỗ trợ cả 2 thao tác đọc và ghi
    • Tách cache giúp tối ưu dễ dàng và giảm xung đột tài nguyên cho CPU pipeline

Vấn đề tạo cache nhiều mức

  • Tạo ra nhiều mức cache không chỉ giúp cải thiện hiệu suất, mà còn giúp tối ưu hóa chi phí và dung lượng
    • Tốc độ và dung lượng: Mỗi cấp độ cache có tốc độ truy xuất và dung lượng khác nhau. Vì vậy, chúng được sử dụng để lưu trữ các dữ liệu và lệnh khác nhau
    • Chi phí: Bộ nhớ cache có tốc độ truy xuất nhanh thường có chi phí cao. Do đó, việc sử dụng một lượng lớn bộ nhớ cache tốc độ cao sẽ làm tăng chi phí
    • Hiệu suất: Việc sử dụng nhiều mức cache giúp cải thiện hiệu suất bằng cách giảm thời gian truy cập dữ liệu từ các bộ nhớ liên tục
    • Tối ưu hóa: Các mức cache khác nhau cho phép hệ thống tối ưu hóa việc lưu trữ và truy cập dựa trên tần suất và mức độ quan trọng của dữ liệu
  • Việc sử dụng nhiều mức cache giúp cân nhắc giữa hiệu suất và chi phí, đồng thời tối ưu hóa việc lưu trữ và truy cập dữ liệu

6.3 - Các phương pháp giảm miss cho cache
...

  • Các loại miss của cache
    • Miss bắt buộc (Compulsory misses): xảy ra tại thời điểm chương trình đang được kích hoạt, khi mã chương trình đang được tải vào bộ nhớ lần đầu tiên và chưa được nạp vào cache
    • Miss do dung lượng (Capacity misses): thường xảy ra do kích thước của miss hạn chế, đặc biệt trong môi trường đa nhiệm do kích thước của cache nhỏ nên mã của các chương trình thường xuyên bị tráo đổi giữa bộ nhớ và cache
    • Miss do xung đột (Conflict misses): xảy ra khi có nhiều dòng bộ nhớ cùng cạnh tranh một dòng cache

6.4 - Các phương pháp giảm miss cho cache
...

  • Tăng kích thước dòng cache
    • Giúp giảm miss bắt buộc do dòng có kích thước lớn sẽ có khả năng bao phủ các mục tin lân cận tốt hơn
    • Tuy nhiên, biện pháp này làm tăng miss xung đột, do giảm số dòng cache sẽ dẫn đến tăng mức độ cạnh tranh của các dòng nhớ đến một dòng cache. Ngoài ra dòng kích thước lớn có thể gây lãng phí dung lượng cache do có nhiều phần của cache không bao giờ được sử dụng
  • Tăng mức độ liên kết
    • Bằng cách tăng số đường cache giúp giảm miss xung đột
    • Tăng tính mềm dẻo của ánh xạ do có nhiều lựa chọn
    • Tuy nhiên, nếu tăng số đường cache quá lớn có thể làm cache chậm do tăng không gian tìm kiếm các đường cache
    • Hiện nay, số đường cache hợp lý cho miss tối ưu là khoảng 8 đường

  1. SAM: Các ô nhớ truy cập tuần tự, nghĩa là muốn truy cập đến ô nhớ sau phải duyệt qua ô nhớ trước nó↩︎