QUẢN LÝ VÀO/RA 178

Một phần của tài liệu Giáo trình Hệ điều hành (Trang 179 - 184)

CHƯƠNG 1 : GIỚI THIỆU CHUNG

4.12. QUẢN LÝ VÀO/RA 178

Trong phần trên, ta mới xem xét về vấn đề tổ chức và trao đổi thông tin với đĩa. Phần này sẽ đề cập rộng hơn tới việc quản lý vào/ra nói chung của tồn hệ thống máy tính.

Quản lý vào/ra là một trong những nhiệm vụ quan trọng của hệ điều hành. Các hoạt động chính của máy tính bao gồm tính tốn và vào/ra dữ liệu hoặc thông tin khác. Vào/ra là q trình dịch chuyển thơng tin giữa bộ nhớ trong hoặc CPU với thiết bị vào/ra. Các thiết bị vào/ra dữ liệu rất đa dạng về chủng loại và tính chất, từ những thiết bị thông dụng như chuột, bàn phím, màn hình, các ổ đĩa, thẻ nhớ, card mạng, máy in, loa, microphone, màn cảm ứng, tới những thiết bị đặc thù như joystick trên máy tính game, bút điện tử, bảng vẽ điện tử v.v.

Do sự quan trọng của vào/ra thông tin và dữ liệu, nhiệm vụ quản lý vào/ra được phụ trách bởi một phân hệ; phân hệ này thường nằm trong nhân của hệ điều hành.

Các yêu cầu đối với quản lý vào/ra. Phân hệ quản lý vào/ra phải giải quyết được một

số yêu cầu sau.

- Thứ nhất, thiết bị vào/ra rất khác nhau về chủng loại và tính chất. Hệ điều hành cần tạo ra các giao diện chung và chuẩn cho phép làm việc với nhiều kiểu thiết bị mà không phải quan tâm tới đặc điểm cụ thể của thiết bị. Do ngày càng có nhiều kiểu thiết bị mới xuất hiện, các giao diện chuẩn có thể không phù hợp với thiết bị mới, đòi hỏi khả năng mở rộng.

- Thứ ba, tốc độ vào ra ảnh hưởng tới tốc độ toàn hệ thống. Phân hệ quản lý vào/ra cần có biện pháp nâng cao hiệu năng vào/ra dữ liệu.

Dưới đây, ta sẽ xem xét cách tổ chức phân hệ vào/ra dữ liệu và các kỹ thuật cho phép đáp ứng các yêu cầu nói trên.

4.12.1.Phần cứng

Phần cứng phục vụ vào/ra gồm: thiết bị vào/ra, các bộ điều khiển (controller) thiết bị, bus hoặc kết nối dưới dạng cổng (port).

Thiết bị vào/ra có thể phân loại theo nhiều cách. Theo mục đích sử dụng, thiết bị vào/ra được chia thành: thiết bị lưu trữ như đĩa, thẻ USB; thiết bị mạng như card mạng, modem; giao diện người dùng như chuột, bàn phím, màn hình, máy in.

Ngồi ra, thiết bị vào/ra được phân loại theo một số tiêu chí khác như dưới đây:

- Theo chế độ truyền dữ liệu, thiết bị được phân thành thiết bị dạng ký tự hay dạng khối.

Thiết bị dạng ký tự truyền dữ liệu theo từng byte, điển hình là thiết bị giao diện như chuột, bàn phím. Thiết bị dạng khối truyền dữ liệu theo từng khối, như các đĩa.

- Theo chế độ truy cập, thiết bị được phân thành thiết bị truy cập tuần tự như băng từ và

modem, hay truy cập trực tiếp như đĩa.

- Theo thời gian truyền dữ liệu, thiết bị được chia thành thiết bị đồng bộ (synchronous) hay dị bộ (asynchronous). Thiết bị đồng bộ, cịn gọi là thiết bị gây khóa (blocking), u cầu sự phối hợp của các thành phần khác của máy tính và có thời gian phản hồi xác định, trong khi thiết bị bộ, còn gọi là non-blocking có thời gian đáp ứng khơng xác định. Nói cách khác, khi một tiến trình gửi yêu cầu vào/ra tới thiết bị đồng bộ như đĩa, tiến trình sẽ bị khóa và chuyển sang trạng thái chờ đợi cho tới khi yêu cầu vào/ra được xử lý song. Tiến trình thực hiện vào/ra với thiết bị dị bộ sẽ không bị khóa và vẫn có thể tiếp tục các cơng việc khác, chẳng hạn tiến trình có giao tiếp với bàn phím.

- Theo khả năng chia sẻ, thiết bị được chia thành loại có thể dùng chung như bàn phím hay thiết bị dành riêng như đĩa. Tại mỗi thời điểm, thiết bị dùng chung có thể phục vụ nhiều tiến trình khác nhau, trong khi thiết bị dành riêng chỉ có thể phục vụ một tiến trình hay một dịng.

- Theo tốc độ, thiết bị có thể có tốc độ vào/ra từ vài byte một giây tới hàng gigabit một giây. - Theo chế độ vào/ra, ta có thiết bị chỉ đọc như bàn phím, thiết bị chỉ ghi như màn hình, hay

thiết bị có thể cả đọc cả ghi như modem hay các đĩa.

4.12.2.Tổ chức phân hệ quản lý vào/ra

Nguyên tắc chung

Như đã nói ở trên, yêu cầu đặt ra với quản lý vào/ra là cho phép các ứng dụng và tiến trình giao tiếp với thiết bị theo một chuẩn chung, tổng quát, không cần quan tâm tới đặc điểm cụ thể của thiết bị. Ví dụ, ứng dụng cần có khả năng đọc file mà khơng cần quan tâm tới đặc điểm cụ thể của đĩa hay thẻ nhớ nơi lưu file đó. Để thỏa mãn yêu cầu này, phân hệ vào/ra được thiết kế dựa trên hai kỹ thuật chính:

- Thứ nhất, phần quản lý vào/ra được phân lớp, các lớp ở mức trên có mức độ trừu tượng hóa cao hơn lớp mức dưới. Nói cách khác, càng lên mức cao hơn mức độ chuẩn hóa càng cao, càng ít liên quan tới chi tiết cụ thể của thiết bị.

- Thứ hai, mỗi thiết bị cụ thể được quản lý bởi một chương trình quản lý thiết bị riêng, được gọi là driver. Driver được lập trình theo các chi tiết kỹ thuật của thiết bị nhưng có giao diện giống nhau dưới dạng các hàm mà mơ đun mức trên có thể gọi để giao tiếp với thiết bị. Như vậy, khi thiết bị thay đổi, ta chỉ cần thay đổi driver trong khi vẫn giữ nguyên các lớp trên. Sau khi được cài đặt, driver trở thành một thành phần của nhân và là lớp dưới cùng của phân hệ quản lý vào/ra.

Trên hình 4.25 thể hiện cấu trúc phân lớp của phân hệ vào/ra với các driver cho thiết bị.

Phân loại driver

Do chủng loại và tính chất thiết bị rất khác nhau, khơng thể có giao diện chung cho tất cả các driver. Ví dụ, driver cho thiết bị vào/ra dạng khối như đĩa, sẽ cung cấp các hàm như read() hay write() cho phép đọc ghi từng khối dữ liệu. Trong khi đó, driver cho thiết bị vào/ra dạng ký tự, điển hình là bàn phím, sẽ cung cấp hàm get() hay put() cho phép gửi và nhận từng

byte. Để đảm bảo mức độ trừu tượng cao hơn, thuận lợi hơn cho các ứng dụng, các driver được nhóm lại thành những nhóm tương tự nhau, mỗi nhóm như vậy được chuẩn hóa để có cùng giao diện. Các nhóm driver thường gặp bao gồm:

- Nhóm vào/ra theo khối, cho các driver thiết bị như đĩa, thẻ USB. Giao diện cho driver thuộc nhóm này gồm các lệnh read(), write(), seek(), trong đó seek() chỉ dùng với thiết bị cho phép truy cập trực tiếp.

- Nhóm vào/ra theo chuỗi ký tự, bao gồm driver chuột, bàn phím hoặc thiết bị tương tự. - Nhóm driver mạng. Ví dụ điển hình của giao diện với driver cho thiết bị mạng là giao diện

dưới dạng socket. Giao diện dạng này gồm các hàm cho phép một ứng dụng tạo ra socket – có thể hiểu là điểm kết nối với ứng dụng ở xa – tới một địa chỉ nào đó. Sau đó socket sẽ lắng nghe cho tới khi ứng dụng ở xa kết nối vào socket. Tiếp theo, giao diện cung cấp các hàm cho phép gửi và nhận dữ liệu với ứng dụng ở xa thông quan socket được tạo.

P h ầ n m ề m

Phần còn lại của hệ điều hành

Phân hệ quản lý vào/ra Driver thiết bị Driver thiết bị Driver thiết bị Driver thiết bị P h ầ n c ứ ng Bộ điều khiển thiết bị Bộ điều khiển thiết bị Bộ điều khiển thiết bị Bộ điều khiển thiết bị Thiết bị Thiết bị Thiết bị Thiết bị

Hình 4.25: Cấu trúc phân hệ vào/ra

Các thao tác do driver thiết bị thực hiện

Driver thiết bị chịu trách nhiệm thực hiện các công việc sau: - Khởi tạo thiết bị.

- Giải mã các lệnh (lời gọi hệ thống) từ hệ điều hành. - Quản lý việc truyền dữ liệu vào/ra thiết bị.

- Đảm bảo tính nhất quán giữa các cấu trúc dữ liệu do driver và các mô đun khác của hệ điều hành sử dụng.

Các bước xử lý yêu cầu vào/ra do driver thực hiện.

Quy trình xử lý yêu cầu vào/ra của driver có thể tóm tắt một cách đơn giản với các thao tác sau:

- Kiểm tra tính hợp lệ của tham số trong yêu cầu vào/ra và dịch yêu cầu vào ra sang ngôn ngữ phù hợp với thiết bị.

- Kiểm tra xem thiết bị có rỗi khơng. Nếu thiết bị bận, tiến trình đưa yêu cầu xử lý có thể bị phong tỏa để chờ cho tới khi thiết bị hết bận.

- Sinh các lệnh điều khiển thiết bị: ghi vào thanh ghi tương ứng của bộ điều khiển thiết bị, kiểm tra độ sẵn sàng của thiết bị sau mỗi lệnh.

- Phong tỏa và chờ đến khi bộ điều khiển thiết bị thực hiện xong lệnh. - Kiểm tra lỗi.

- Trả về thông tin trạng thái và kết thúc việc xử lý.

4.12.3.Quản lý vào/ra mức trên

Trong phần trên, ta đã xem xét tổ chức chung phân hệ vào/ra và vai trò của driver. Trong phần này, ta sẽ xem xét một số chức năng khác của phân hệ vào/ra, thường do lớp trên của mô đun vào/ra đảm nhiệm. Các chức năng này hướng vào việc nâng cao tốc độ và độ ổn định vào/ra thông tin, bao gồm các công việc sau: điều độ vào/ra, đệm vào/ra với buffer và cache, xử lý lỗi.

Điều độ vào/ra là xác định thứ tự xử lý các yêu cầu vào/ra sao cho đạt được các tiêu chí về tốc độ, tính cơng bằng v.v. Ví dụ về điều độ vào/ra đã được trình bầy trong phần điều độ đĩa. Trong phần này ta sẽ xem xét đệm vào/ra và xử lý lỗi.

Đệm nhớ buffer

Đệm nhớ buffer là kỹ thuật trong đó dữ liệu truyền giữa hai thiết bị hoặc giữa một thiết bị với một ứng dụng được ghi tạm thời vào một vùng bộ nhớ gọi là bộ đệm buffer. Thường dữ liệu được lưu vào buffer khi mới đọc vào từ thiết bị (ví dụ từ bàn phím), hoặc được giữ trong buffer trước khi ghi ra thiết bị (ví dụ trước khi ghi ra đĩa). Buffer cũng được sử dụng khi truyền dữ liệu giữa hai tiến trình.

Đệm nhớ buffer được sử dụng để giải quyết một số vấn đề sau:

- Sự khác nhau về tốc độ giữa thiết bị truyền và nhận dữ liệu. Ví dụ, khi cần lưu dữ liệu truyền qua modem vào đĩa cứng. Do modem chậm hơn đĩa nên dữ liệu từ modem được lưu tạm vào đệm nhớ cho tới khi đủ nhiều mới được ghi cùng nhau ra đĩa. Thơng thường sẽ có hai đệm nhớ buffer được sử dụng trong trường hợp này. Khi đệm nhớ thứ nhất đầy, dữ liệu được ghi ra đĩa, trong khi đó dữ liệu nhận được từ modem tiếp tục được lưu vào đệm nhớ thứ hai. Khi đệm nhớ thứ hai đầy, vai trò hai đệm nhớ lại thay đổi. Cơ chế đệm kép như vậy được minh họa trên hình 4.26.

Hình 4.26. Cơ chế đệm kép

- Vấn đề khác nhau về kích thước dữ liệu truyền và nhận. Khi truyền dữ liệu qua mạng, dữ liệu được chia thành gói. Sau đó các gói sẽ được tập hợp và sắp xếp lại theo đúng thứ tự. Trong lúc chờ đợi để nhận đủ các gói cần cho việc sắp xếp lại, dữ liệu được lưu trong bộ đệm buffer.

Đệm nhớ cache

Đệm nhớ cache là phần bộ nhớ tốc độ cao dùng làm bộ nhớ trung gian khi truyền dữ liệu giữa thiết bị nhớ tốc độ thấp với thiết bị nhớ tốc độ cao. Trước tiên, dữ liệu được truyền từ bộ nhớ tốc độ thấp (ví dụ đĩa cứng) vào bộ nhớ cache, sau đó được chuyển từ cache vào bộ nhớ tốc độ cao (ví dụ bộ nhớ trong). Khi thực hiện thao tác đọc tiếp theo, nếu phần dữ liệu cần đọc nằm trong cache thì dữ liệu đó được đọc từ cache, thay vì đọc từ đĩa, và do vậy sẽ nhanh hơn nhiều. Do nguyên lý cục bộ về thời gian, tức là thường một dữ liệu được truy cập lại trong tương lai gần, hoặc dữ liệu nằm gần nhau thường được truy cập trong những khoảng thời gian liền nhau, sử dụng cache cho phép tăng tốc độ truy cập dữ liệu.

Như vậy, điểm khác biệt chính giữa bộ đệm cache với bộ đệm buffer là cùng một dữ liệu trong cache hoặc láng giềng của dữ liệu đó được truy cập nhiều lần trong khoảng thời gian ngắn, trong khi dữ liệu trong buffer không như vậy. Tuy nhiên, trên thực tế, bộ đệm buffer cũng có thể dùng luôn làm bộ đệm cache.

Spooling

Spooling là kỹ thuật cho phép nhiều tiến trình cùng ghi thơng tin ra những thiết bị chỉ có khả năng phục vụ một tiến trình tại một thời điểm như máy in. Khi tiến trình gửi dữ liệu ra máy in, hệ điều hành sẽ nhận dữ liệu này thay vì gửi trực tiếp ra máy in. Dữ liệu từ mỗi tiến trình được ghi vào một đệm nhớ buffer riêng, thường là một file. Khi tiến trình đã hồn thành việc ghi dữ liệu ra file, file sẽ được xếp vào hàng đợi để chuyển ra máy in khi đến lượt. Như

Đĩa cứng

Modem

Đĩa cứng

Modem

Buffer 1 Buffer 2 Buffer 1 Buffer 2 Đổi

vậy, nhiều tiến trình có thể đồng thời thực hiện thao tác in, trong khi trên thực tế, tại mỗi thời điểm chỉ một file đệm được ghi ra máy in.

Xử lý lỗi

Thiết bị vào/ra, cũng như bản thân thao tác vào/ra dữ liệu có thể gặp nhiều dạng lỗi khác nhau. Có những lỗi khơng nghiêm trọng, có thể dễ dàng khắc phục, ví dụ lỗi khơng đọc được dữ liệu do đĩa cứng chưa quay đủ tốc độ cần thiết, hay lỗi do mạng bị quá tải nên tạm thời không truyền được dữ liệu. Có những lỗi nghiêm trọng hơn, ví dụ lỗi hỏng bộ điều khiển đĩa.

Hệ điều hành thường được thiết kế để tự xử lý một số lỗi đơn giản. Ví dụ, khi thao tác đọc đĩa bị lỗi, hệ điều hành sẽ lặp lại thao tác đọc một số lần nhất định để chờ đĩa được chuyển sang trạng thái sẵn sàng.

Với những lỗi nghiêm trọng hơn, hệ điều hành thường không thể tự xử lý. Cách giải quyết thông thường là với mỗi thao tác vào/ra, hệ điều hành trả về thông tin trạng thái. Thơng tin này cho biết thao tác vào/ra có được thực hiện thành công hay không và một số thông tin cụ thể về dạng lỗi xẩy ra (nếu có). Các ứng dụng sẽ tự quyết định phải làm gì, dựa trên những thơng tin về lỗi do lời gọi hệ thống trả lại.

Một phần của tài liệu Giáo trình Hệ điều hành (Trang 179 - 184)

Tải bản đầy đủ (PDF)

(186 trang)