Nhập/xuất là gì

Giới thiệu tổng quan về hệ thống lưu trữ và nhập – xuất trong máy tính. Cấu tạo và nguyên lý hoạt động của đĩa từ và bộ nhớ flash. Cách kết nối giữa bộ xử lý, bộ nhớ và thiết bị nhập – xuất. Giao tiếp thiết bị nhập – xuất với bộ xử lý, bộ nhớ và hệ điều hành.

GIỚI THIỆU

Một hệ thống nhập xuất điển hình được thể hiện như hình 5.1. Đường kết nối giữa thiết bị nhập/xuất (I/O), bộ xử lý và bộ nhớ thì được gọi là bus. Kết nối giữa thiết bị nhập/xuất thông qua các đường kết nối ngắt (interrupts) và các đường kết nối bên trong (interconnect). Các tiêu chí về độ tin cây và khả năng mở rộng thì được quan tâm khi thiết kế hệ thống nhập/xuất.

Nhập/xuất là gì

Hình 5.1: Hệ thống nhập/xuất điển hình

ĐĨA TỪ

Đĩa từ bao gồm nhiều lá đĩa (1 – 4) và đầu đọc/ghi có thể di chuyển để truy cập đĩa. Mỗi lá đĩa có hai mặt được dùng để ghi dữ liệu. Tốc độ quay của lá đĩa từ 5400 đến 15000 rpm và có đường kính từ 1 inch đến 3.5 inch. Mỗi bề mặt đĩa được chia thành các hình tròn đồng tâm, được gọi là rãnh (track). Có khoảng 10000 đến 50000 rãnh trên một bề mặt. Mỗi rãnh được chia thành các cung (sector) được dùng để lưu dữ liệu. Mỗi rãnh chứa từ 100 đến 500 cung. Thông thường cung có kích thước 512 byte. Tập hợp các rãnh có cùng kích thước thì được gọi là cylinder.

Để truy cập dữ liệu, đầu tiên phải di chuyển đầu đọc/ghi đến rãnh có chứa cung mong muốn. Thao tác này được gọi là một tìm kiếm (seek), thời gian để đầu đọc/ghi di chuyển đến rãnh đọc gọi là thời gian tìm kiếm (seek time). Thông thường thời gian này là khoảng từ 3ms đến 13ms. Sau khi di chuyển đến rãnh thích hợp, đầu đọc/ghi phải đợi lá đĩa quay đến cung chứa dữ liệu cần truy suất. Thời gian này được gọi là độ trễ quay (rotational delay hay rotational latency). Giá trị này trung bình bằng nửa vòng quay của đĩa. Tức là nếu tốc độ quay của đĩa từ 5400 rpm đến 15000 rpm thì:

Nhập/xuất là gì

Thời gian tiếp theo để truy cập đĩa, đó là thời gian truyền (transfer time). Đây là thời gian được dùng để truyền dữ liệu. Thời gian này phụ thuộc vào kích thước cung, tốc độ quay và mật độ ghi dữ liệu của rãnh. Tốc độ truyền khoảng từ 70 đến 125 MB/s. Ngày này, trình điều khiển đĩa có xây dựng sẳn bộ nhớ đệm (cache) để lưu tạm thời các cung. Do đó tốc độ truyền từ bộ nhớ đệm có thể tăng lên đến 375 MB/s.

Ngoài ra, trình điều khiển đĩa (disk controller) sẽ xử lý các điều khiển chi tiết của đĩa và truyền dữ liệu giữa đĩa và bộ nhớ. Thời gian này được gọi là thời gian điều khiển (controller time). Đây là thành phần cuối cùng trong thời gian truy cập đĩa.

Như vậy, thời gian truy cập đĩa sẽ bao gồm thời gian tìm kiếm, độ trễ quay, thời gian truyền và thời gian điều khiển.

Ví dụ: tính thời gian truy cập đĩa để đọc hoặc ghi một cung (512 byte) của một đĩa có tốc độ quay 15000 rpm. Cho biết thời gian tìm kiếm là 4 ms, tốc độ truyền 100 MB/s và thời gian điều khiển là 0.2 ms.

Ta có: thời gian truy cập = thời gian tìm kiếm + độ trễ quay + thời gian truyền + thời gian điều khiển. Như vậy, giá trị này bằng:

Nhập/xuất là gì

BỘ NHỚ FLASH

Bộ nhớ flash là một loại bộ nhớ bán dẫn giống như đĩa từ nhưng có độ trễ (latency) nhanh hơn 100 đến 1000 lần so với đĩa. Đây là bộ nhớ nhỏ gọn, tiêu thụ ít năng lượng và có sức chống va chạm cao. Bộ nhớ này được sử dụng phổ biến trong điện thoại, thiết bị số, máy quay phim,…Về giá thành đối với mỗi gigabyte thì cao hơn từ 2 đến 40 lần so với đĩa cứng và thấp hơn 5 đến 10 lần so với DRAM.

Bộ nhớ flash có nguyên lý hoạt động dựa trên EEPROM và được phân thành hai loại: NOR flash có ô nhớ dùng cổng NOR và tương tự là NAND flash. NOR flash dùng để chứa các chương trình khởi động của thiết bị trong khi NAND flash được dùng trong thẻ nhớ usb và có giá thành rẽ hơn NOR flash. Với sự phát triển nhanh về dung lượng cũng như giá thành ngày càng thấp làm cho bộ nhớ flash ngày càng được sử dụng rộng rãi trong nhiều loại thiết bị ngày nay

KẾT NỐI GIỮA BỘ XỬ LÝ, BỘ NHỚ VÀ THIẾT BỊ NHẬP/XUẤT

Trong một hệ thống máy tính, các thiết bị như bộ xử lý và bộ nhớ cần được kết nối với nhau cũng như giữa bộ xử lý và thiết bị nhập/xuất. Bộ phận đảm nhận vai trò này chính là bus. Bus bao gồm tập hợp các sợi dây để kết nối các hệ thống con bên trong. Có hai thuận lợi của bus đó là tính linh hoạt và có chi phí thấp. Với một đường kết nối đơn các thiết bị mới có thể được gắn thêm vào. Các thiết bị ngoại vi có thể dễ dàng gắn vào một máy tính này hay máy tính khác có cùng loại bus. Điểm bất lợi chính của bus chính là tạo ra hiện tượng thất cổ chai (bottleneck). Vấn đề này làm hạn chế lưu lượng nhập/xuất. Khi lưu lượng nhập/xuất được truyền trên bus, băng thông của bus sẽ giới hạn mức độ tối đa của lưu lượng nhập/xuất này. Thiết kế một hệ thống bus đáp ứng nhu cầu của bộ xử lý cũng như khả năng kết nối với nhiều loại thiết bị nhập/xuất là một vấn đề khó khăn đối với các nhà thiết kế máy tính.

Bus được chia thành hai loại: loại thứ nhất là bus hệ thống dùng để kết nối giữa bộ xử lý và bộ nhớ, bus này thường ngắn và có tốc độ cao. Loại thứ hai là bus nhập/xuất, loại này thường dài và có thể kết nối với nhiều loại thiết bị và thông thường băng thông dữ liệu (data bandwidth) bằng với thiết bị được gắn vào bus. Hơn nữa, tốc độ của bus ngoại vi bị giới hạn bởi các yếu tố vật lý: chiều dài của bus và số thiết bị được gắn vào.

Một giao dịch nhập/xuất (I/O transaction) bao gồm có hai phần: gửi địa chỉ và nhận hoặc gửi dữ liệu. Thao tác này được thực hiện dựa trên bộ nhớ, tức là một thao tác nhập (input) là nhập dữ liệu từ thiết bị nhập/xuất vào bộ nhớ (bộ xử lý có thể đọc dữ liệu này). Trong khi thao tác xuất (output) là xuất dữ liệu tới thiết bị nhập/xuất từ bộ nhớ (bộ xử lý có thể ghi dữ liệu này). Để thống nhất giữa nhà sản xuất máy tính và nhà sản xuất thiết bị ngoại vi, ngành công nghiệp máy tính đưa ra các tiêu chuẩn.

Một tiêu chuẩn đưa ra các đặc tả để các thiết bị ngoại vi của các nhà sản xuất khác nhau có thể được gắn vào một máy tính theo chuẩn đó. Một số tiêu chuẩn của thiết bị nhập/xuất phổ biến như: USB, PCI Express (PCIe), Serial ATA (SATA), SCSI,…

Bus có thể là đồng bộ (synchronous) tức là bus gồm có tín hiệu xung nhịp (clock) trong đường điều khiển và một giao thức (protocol) cố định để giao tiếp dựa trên tín hiệu xung nhịp đó. Ví dụ để thực hiện một thao tác đọc từ bộ nhớ, chúng ta có nghi thức để truyền địa chỉ và lệnh đọc ở chu kỳ đầu tiên. Dùng đường điều khiển để chỉ định loại yêu cầu. Sau đó, bộ nhớ sẽ đáp ứng yêu cầu môt từ (word) dữ liệu ở chu kỳ thứ 5. Loại giao thức này có thể được thực thi bằng máy trạng thái hữu hạn (finite- state machine) nhỏ. Tuy nhiên, bus đồng bộ có hai bất lợi chính. Thứ nhất, mỗi thiết bị trên bus phải chạy cùng tần số xung nhịp (clock rate). Thứ hai, vấn đề lệch xung nhịp, bus đồng bộ không thể dài nếu bus này có tốc độ nhanh. Do những bất lợi trên nên dẫn đến hình thành bus không đồng bộ (asynchronous). Loại bus này không có tín hiệu xung nhịp. Điều này thích hợp để kết nối với nhiều loại thiết bị khác nhau và bus có thể dài hơn mà không lo lắng về vấn đề lệnh xung nhịp và đồng bộ. Để thực hiện việc truyền dữ liệu, bus không đồng bộ dùng giao thức bắt tay (handshaking protocol). Giao thức này bao gồm tập hợp nhiều bước để bên gửi và bên nhận xử lý ở bước tiếp theo khi cả hai bên đồng ý với nhau. Các đường điều khiển cũng được bổ sung trong giao thức này.

GIAO TIẾP THIẾT BỊ NHẬP/XUẤT VỚI BỘ XỬ LÝ, BỘ NHỚ VÀ HỆ ĐIỀU HÀNH

Hệ điều hành đóng vai trò quan trọng trong xử lý các yêu cầu nhập/xuất, như là giao diện giữa phần cứng và chương trình yêu cầu nhập/xuất. Vai trò của hệ điều hành liên quan đến đặc điểm của hệ thống nhập/xuất:

  1. Nhiều chương trình dùng bộ xử lý để chia sẻ hệ thống nhập/xuất.
  2. Hệ thống nhập/xuất thường dùng ngắt (interrupt) để giao tiếp thông tin về thao tác nhập/xuất. Ngắt được truyền tới nhân (kernel) và được xử lý bởi hệ điều hành.
  3. Điều khiển cấp thấp của thiết bị nhập/xuất thì phức tạp, do bởi phải quản lý tập hợp các sự kiện đồng thời và những yều cầu cần thực hiện chính xác thường rất chi tiết.

Dựa vào các đặc điểm trên, hệ điều hành cung cấp một số chức năng như sau:

Hệ điều hành phải đảm bảo chương trình của người dùng chỉ được phép truy cập vào một phần của thiết bị nhập/xuất mà người dùng được phép. Ví dụ hệ điều hành không cho phép chương trình đọc hoặc ghi một tập tin trên đĩa nếu chương trình này không được phép để truy cập tập tin đó.

♣ Hệ điều hành cung cấp các hàm (routine) để xử lý các thao tác cấp thấp của thiết bị nhập/xuất.

♣ Hệ điều hành phải xử lý các ngắt được tạo ra bởi thiết bị nhập/xuất, cũng như xử lý các ngoại lệ (exception) được tạo ra bởi chương trình.

♣ Đối với tài nguyên nhập/xuất được chia sẻ, hệ điều hành cần cung cấp quyền truy cập như nhau cũng như lập thời biểu các truy cập để đảm bảo nâng cao thông lượng (throughput) của hệ thống.

Để thực hiện các chức năng này, hệ điều hành phải giao tiếp với thiết bị nhập/xuất và ngăn chương trình người dùng giao tiếp trực tiếp với thiết bị nhập/xuất. Có ba loại giao tiếp:

  1. Hệ điều hành ra lệnh cho thiết bị ngoại vi. Những lệnh này không chỉ là thao tác đọc hoặc ghi mà còn là những thao tác khác được thực hiện trên thiết bị như một thao tác dịch chuyển đầu đọc/ghi đến vị trí thích hợp (seek) của đĩa.
  2. Thiết bị nhập/xuất sẽ thông báo cho hệ điều hành khi thực hiện xong một thao tác hoặc có một lỗi xảy ra.

Dữ liệu được truyền giữa bộ nhớ và thiết bị nhập/xuất.

Trong phần tiếp theo, chúng ta sẽ tìm hiểu kỹ hơn về giao tiếp với thiết bị nhập/xuất. 

Ra lệnh cho thiết bị nhập xuất

Để điều khiển thiết bị nhập/xuất, bộ xử lý phải xác định địa chỉ thiết bị và đưa ra một hoặc nhiều từ lệnh. Hai phương pháp được dùng để xác định địa chỉ: thiết bị nhập/xuất được ánh xạ vào bộ nhớ (memory-mapped I/O) và tập lệnh nhập/xuất riêng (special I/O instructions).

♠ Thiết bị nhập/xuất được ánh xạ vào bộ nhớ: một vùng không gian địa chỉ được gắn cho thiết bị nhập/xuất. Đọc và ghi vào vùng địa chỉ này tương ứng với giao tiếp với thiết bị nhập/xuất. Ví dụ thao tác ghi dữ liệu vào thiết bị nhập/xuất, bộ xử lý sẽ đặt địa chỉ và dữ liệu vào bus. Hệ thống bộ nhớ sẽ bỏ qua thao tác này bởi vì địa chỉ chỉ định phần không gian bộ nhớ dành cho thiết bị nhập/xuất. trình điều khiển thiết bị sẽ thực hiện thao tác bằng cách truyền dữ liệu này tới thiết bị nhập/xuất xem như một lệnh.

Đọc hoặc ghi dữ liệu của một chương trình thường yêu cầu một vài thao tác nhập/xuất riêng biệt. Hơn nữa, bộ xử lý phải tham dò trạng thái của thiết bị để xem lệnh đưa ra có thực hiện xong hay chưa. Ví dụ, một máy in đơn giản có hai thanh ghi nhập/xuất: một thanh ghi trạng thái lưu trạng thái của thiết bị và một thanh ghi dữ liệu lưu dữ liệu sẽ được in. Thanh ghi trạng thái chứa một bit đã thực hiện (done bit) được thiết lập bởi máy in khi thực hiện in xong một ký tự và một bit lỗi (error bit).

Bit lỗi này xác định rằng máy in đang kẹt giấy hoặc hết giấy. Mỗi byte dữ liệu cần in được đặt vào thanh ghi dữ liệu. Bộ xử lý phải đợi cho đến khi máy in thiết lập bit đã thực hiện thì mới đưa ký tự tiếp theo để in. Bộ xử lý cũng cần kiểm tra bit lỗi để xem lỗi xảy ra hay không.

♠ Tập lệnh nhập/xuất riêng: những lệnh nhập/xuất này sẽ xác định số thiết bị và từ lệnh. Bộ xử lý giao tiếp với thiết bị thông qua các sợi dây của bus nhập/xuất.

Lệnh được truyền trên các đường dữ liệu của bus. Điển hình của máy tính theo kiểu này đó là Intel ×86 và IBM 370.

Giao tiếp với bộ xử lý

Thiết bị nhập/xuất ghi thông tin vào thanh ghi trạng thái (status register). Bộ xử lý định kỳ kiểm tra thông tin của thanh ghi trạng thái để biết thiết bị có sẳn sàng hay không. Quá trình này được gọi là thăm dò (polling). Quá trình này có điểm bất lợi là tiêu tốn nhiều thời gian của bộ xử lý do phải thường xuyên thăm dò trạng thái của thiết bị. Hơn nữa, tốc độ của bộ xử lý thì nhanh hơn nhiều so với thiết bị nhập/xuất.

Do hạn chế của quá trình thăm dò nên người ta sử dụng ngắt (interrupt) để thiết bị nhập/xuất thông báo với bộ xử lý. Một ngắt nhập/xuất (I/O interrupt) cũng giống như một ngoại lệ (exception) với hai khác biệt quan trọng:

  1. Ngắt nhập/xuất thì không đồng bộ với sự thực thi lệnh. Nghĩa là, ngắt không kết hợp với bất kỳ lệnh nào và cũng không cản trở thực thi hoàn thành một lệnh.
    Điều này khác với một ngoại lệ lỗi trang (page fault exception) hay ngoại lệ tràn số học (arithmetic overflow). Đơn vị điều khiển sẽ kiểm tra ngắt nhập/xuất chưa được giải quyết lúc bắt đầu một lệnh mới.
  2. Khi một ngắt xảy ra, chúng ta thích truyền thông tin hơn. Như là định danh (identity) thiết bị tạo ra ngắt. Hơn nữa, ngắt của mỗi thiết bị nhập/xuất có độ ưu tiên khác nhau. Do đó mức độ khẩn cấp kết hợp với mỗi ngắt của thiết bị sẽ khác nhau.

Để giao tiếp thông tin với bộ xử lý, như là định danh của thiết bị, hệ thống có thể dụng vector ngắt (vectored interrupt) hoặc thanh ghi nguyên nhân (Cause register).

Khi bộ xử lý nhận một ngắt, thiết bị nhập/xuất gửi địa chỉ vector hoặc trường trạng thái (status field) đặt vào thanh ghi nguyên nhân. Hệ điều hành biết được định danh của thiết bị gây ra ngắt thì sẽ xem xét tức thì đến thiết bị đó. Mô hình ngắt sẽ loại bỏ yêu cầu của bộ xử lý để thăm dò thiết bị và thay vào đó bộ xử lý sẽ tập trung hơn để thực thi chương trình.

Độ ưu tiên ngắt

Để giải quyết với độ ưu tiên khác nhau của thiết bị nhập/xuất, mô hình ngắt đưa ra nhiều mức ưu tiên. Thí dụ, hệ điều hành UNIX dùng từ 4 đến 6 mức ưu tiên ngắt. Bộ xử lý sẽ xử lý ngắt dựa theo thứ tự của độ ưu tiên của mỗi ngắt. Các ngoại lệ được tạo ra bên trong và các ngắt nhập/xuất đều có độ ưu tiên. Các ngoại lệ có độ ưu tiên cao hơn các ngắt nhập/xuất bên ngoại. Đối với độ ưu tiên của ngắt nhập/xuất cũng có nhiều độ ưu tiên, thiết bị có tốc độ cao thường được kết hợp với độ ưu tiên cao hơn.

Nếu bit ngắt được gắn giá trị 0 thì ngắt không cho phép. Mỗi bit của mặt nạ ngắt (interrupt mask) tương ứng với mỗi bit của của trường ngắt chờ xử lý (pending interrupt) của thanh ghi nguyên nhân. Để thiết lập ngắt, phải gắn giá trị 1 tại vị trí bit tương ứng của mặt nạ ngắt. Hệ điều hành đọc trường mã ngoại lệ (exception code) của thanh ghi trạng thái: 0 tương ứng với ngắt đã xảy ra, với giá trị khác cho trường hợp ngoại lệ.

Các bước để xử lý một ngắt:
  1. Thực hiện phép toán AND giữa mặt nạ ngắt và trường ngắt chờ xử lý để xác định tác nhân gây ra ngắt.
  2. Lựa chọn các ngắt có độ ưu tiên cao hơn. Theo quy ước thì bên trái nhất có độ ưu tiên cao nhất.
  3. Lưu mặt nạ ngắt của thanh ghi trạng thái.
  4. Thay đổi mặt nạ ngắt để vô hiệu hóa tất cả các ngắt có độ ưu tiên bằng hoặc nhỏ hơn.
  5. Lưu lại trạng thái bộ xử lý cần thiết để xử lý ngắt.
  6. Để cho phép các ngắt có độ ưu tiên cao hơn, thiết lập bit ngắt của thanh ghi nguyên nhân là 1.
  7. Gọi hàm xử lý ngắt tương ứng.
  8. Trước khi khôi phục lại trạng thái, thiết lập bit ngắt của thanh ghi nguyên nhân là 0. Điều này cho phép chúng ta khôi phục lại mặt nạ ngắt.

Nhập/xuất là gì

Hình 5.2: Thanh ghi trạng thái và thanh ghi nguyên nhân

Truyền dữ liệu giữa thiết bị và bộ nhớ

Chúng ta có hai phương pháp khác nhau để thiết bị nhập/xuất giao tiếp với bộ xử lý. Đó là phương pháp thăm dò và ngắt nhập/xuất. Cả hai phương pháp này thích hợp với thiết bị nhập/xuất có băng thông thấp. Các thiết bị này thường có giá rẻ với trình điều khiển thiết bị và giao tiếp đơn giản hơn so với các thiết bị nhập/xuất có băng thông cao. Trong cả hai phương pháp, bộ xử lý có vai trò quan trọng để quản lý việc truyền dữ liệu.

Cơ chế luân phiên được sử dụng trong phương pháp dùng ngắt nhập/xuất. Trong trường hợp này hệ điều hành truyền dữ liệu nhỏ (số byte ít) từ thiết bị hoặc đến thiết bị. Do thao tác nhập/xuất sử dụng ngắt nên hệ điều hành có thể thực hiện các công việc khác trong khi dữ liệu được đọc từ thiết bị hoặc ghi vào thiết bị. Khi hệ điều hành nhận một ngắt từ thiết bị, hệ điều hành đọc trạng thái để kiểm tra lỗi. Nếu không có lỗi hệ điều hành tiếp tục truyền dữ liệu tiếp theo. Khi byte cuối cùng của yêu cầu nhập/xuất được truyền và thao tác nhập xuất hoàn thành, hệ điều hành thông báo chương trình. Bộ xử lý và hệ điều hành làm tất cả công việc trong quá trình này: truy cập bộ nhớ và thiết bị khi dữ liệu được truyền.

Ngắt nhập/xuất làm giảm thời gian bộ xử lý chờ đợi mỗi sự kiện nhập/xuất, mặc dù chúng ta dùng phương pháp này để truyền dữ liệu với đĩa cứng thì đầu đọc đĩa cứng không thể chấp nhận bởi vì sẽ dùng phần lớn thời gian bộ xử lý khi đĩa đang được truyền. Đối với các thiết bị băng thông lớn như đĩa cứng, quá trình truyền sẽ bao gồm một khối dữ liệu lớn (hàng trăm đến hàng ngàn byte). Vì vậy, các nhà thiết kế máy tính phát triển một mô hình để giảm tải cho bộ xử lý và dùng trình điều khiển thiết bị để truyền dữ liệu trực tiếp với bộ nhớ mà không có sự tham gia của bộ xử lý.

Mô hình này được gọi là truy cập bộ nhớ trực tiếp (DMA – direct memory access).

Mô hình ngắt vẫn được sử dụng để thiết bị giao tiếp với bộ xử lý nhưng chỉ khi quá trình truyền nhập/xuất hoàn thành hoặc khi có lỗi xảy ra. DMA được thực hiện bởi trình điều khiển đặc biệt để truyền dữ liệu giữa thiết bị nhập/xuất và bộ nhớ mà không cần đến bộ xử lý. Trình điều khiển DMA trở thành chủ nhân bus (master – đơn vị chiếm giữ bus để thực hiện thao tác truyền dữ liệu) để điều khiển thao tác đọc hoặc ghi giữa thiết bị và bộ nhớ. Một quá trình truyền dữ liệu với DMA bao gồm ba bước:

  1. Bộ xử lý thiết lập DMA bằng cách cung cấp định danh (identity) của thiết bị, thao tác được thực hiện với thiết bị, địa chỉ bộ nhớ để truyền dữ liệu và số byte dữ liệu cần được truyền.
  2. DMA bắt đầu thực hiện thao tác trên thiết bị và điều khiển hệ thống bus. Khi dữ liệu sẳn sàng (từ thiết bị hoặc bộ nhớ), thao tác truyền dữ liệu được thực hiện. DMA cung cấp địa chỉ bộ nhớ để đọc hoặc ghi dữ liệu. Nếu yêu cầu nhiều quá trình truyền dữ liệu, DMA sẽ cung cấp địa chỉ bộ nhớ tiếp theo và khởi tạo quá trình truyền tiếp theo. Như vậy, theo mô hình này DMA sẽ thực hiện toàn bộ quá trình truyền dữ liệu (dung lượng có thể hàng ngàn byte) mà không có sự tham gia của bộ xử lý.
  3. Khi quá trình truyền dữ liệu DMA hoàn thành, trình điều khiển DMA sẽ gửi tín hiệu ngắt tới bộ xử lý. Sau đó, bộ xử lý sẽ kiểm tra trình điều khiển DMA và bộ nhớ để xem toàn bộ thao tác có thực hiện thành công hay không.

Một hệ thống có thể có nhiều thiết bị DMA. Xem một hệ thống có một bus bộ nhớ – bộ xử lý và nhiều bus nhập/xuất. Mỗi trình điều khiển bus nhập/xuất thường bao gồm một vi xử lý DMA để điều khiển quá trình truyền dữ liệu giữa bộ nhớ và thiết bị trên bus nhập/xuất này.

Không giống như phương pháp thăm dò hay phương pháp ngắt nhập/xuất, DMA giao tiếp với bộ nhớ mà không dùng thời gian của bộ xử lý khi thực hiện thao tác truyền dữ liệu trên bus nhập/xuất. Bộ xử lý sẽ được trì hoãn khi muốn truy cập bộ nhớ trong khi bộ nhớ đang thực hiện thao tác DMA. Do bộ xử lý sử dụng bộ nhớ cache nên ít truy cập vào bộ nhớ chính. Vì vậy, băng thông bộ nhớ chính được giải phóng để thực hiện thao tác truyền dữ liệu với thiết bị nhập/xuất.

Truy cập bộ nhớ trực tiếp DMA và hệ thống bộ nhớ

Khi DMA được kết hợp vào hệ thống nhập/xuất, mối quan hệ giữa hệ thống bộ nhớ và bộ xử lý đã thay đổi. Khi không có DMA, tất cả các truy cập vào bộ nhớ đều đến từ bộ xử lý và được xử lý thông qua cơ chế dịch địa chỉ và truy cập bộ nhớ cache. Khi có DMA, truy cập vào bộ nhớ nhưng không thông qua cơ chế dịch địa chỉ hoặc cấp bậc bộ nhớ cache. Điều này gây khó khăn cho cả hệ thống bộ nhớ ảo và hệ thống bộ nhớ với cache. Vấn đề này được giải quyết bằng sự kết hợp của kỹ thuật phần cứng và hỗ trợ phần mềm.

Kỹ thuật DMA gây khó khăn cho hệ thống bộ nhớ ảo bởi vì trang có địa chỉ vật lý và địa chỉ ảo. Kỹ thuật này cũng tạo ra khó khăn cho hệ thống với bộ nhớ cache bởi vì có hai bản sao của một thành phần dữ liệu: một ở trong cache và một ở trong bộ nhớ. Bởi vì, DMA yêu cầu truy cập trực tiếp bộ nhớ mà không thông qua bộ nhớ cache của bộ xử lý nên nội dung bộ nhớ được thấy bởi DMA và bộ xử lý có thể khác nhau. Xem một thao tác đọc đĩa mà DMA lưu trực tiếp vào bộ nhớ. Nếu một số vị trí bộ nhớ DMA ghi vào mà các vị trí này ở trong cache, khi đó bộ xử lý sẽ nhận giá trị cũ khi thực hiện thao tác đọc. Tương tự, đối với thao tác ghi lại của bộ nhớ cache thì DMA có thể đọc giá trị cũ trực tiếp từ bộ nhớ trong khi giá trị mới trong cache chưa được ghi lại.

TÓM TẮT

Như vậy phần trên đã giới thiệu tổng quan về hệ thống lưu trữ và nhập/xuất trong máy tính. Cấu tạo của đĩa từ bao gồm nhiều lá đĩa, các đại lượng đặc trưng của đĩa từ như tốc độ quay, thời gian truy cập. Bộ nhớ flash có nguyên lý hoạt động dựa trên EEPROM. Ưu điểm của bộ này là nhỏ gọn, tiêu thụ ít điện năng… nên được sử dụng ngày càng phổ biến. Hệ thống bus dùng để kết nối các thành phần bên trong máy tính. Có hai loại bus: bus hệ thống và bus nhập/xuất. Hệ điều hành đóng vai trò quan trọng trong việc xử lý yêu cầu nhập/xuất như: ra lệnh cho thiết bị nhập/xuất, giao tiếp với bộ xử lý, độ ưu tiên ngắt của thiết bị nhập/xuất và điều khiển truyền dữ liệu giữa thiết bị nhập/xuất và bộ nhớ bằng kỹ thuật DMA.