Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.3 MB, 44 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG*
TIỂU LUẬN
ĐỀ TÀI :
<b>QUẢN LÝ HỆ THỐNG VÀO RA TRONG HỆ ĐIỀU HÀNH WINDOWS</b>
<i><b>GIÁO VIÊN HƯỚNG DẪN : ThS ĐỖ TUẤN ANH</b></i>
<b> </b>
<b>Sinh Viên</b> <i>: Đinh Nhật Ký 20215410</i><b>Lớp</b> <i>: IT1-06 K66</i><b>Mã lớp </b> <i>: 141296<b>Hà Nội, ngày 29 tháng 6 năm 2023</b></i><b>MỤC LỤC</b><i><b>Lời nói đầu...3</b></i>
<b>II Nguyên tắc quản lý chung...4</b>
<b>1 Giới thiệu chung...4</b>
1.1 Thiết bị vào ra...4
1.2 Thiết bị điều khiển...5
1.3 Trình điều khiển thiết bị...5
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">1.4 Chu kỳ một yêu cầu vào ra...9
1.5 Giao tiếp thiết bị ngoại vi với hệ điều hành...10
2.4 Thuật toán SCAN...32
2.5 Thuật toán C-SCAN...37
2.6 Thuật toán LOOK/C-LOOK...42
2.7 Vấn đề lựa chọn thuật tốn...48
<b>TÀI LIỆU THAM KHẢO...49</b>
Có nhiều luận điểm 1 chiều đó là: Khơng có hệ điều hành, các thiết bị máy tính là vơ dụng. Nhưng khi tìm hiểu đến phần này, mình nhận ra rằng luận điểm trên chưa hồn tồn chính xác. Đúng là một cỗ máy nếu khơng có hệ điều hành quản lý (hoặc khơng có
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">con người thao tác) thì đều khơng làm nên việc gì cả. Nhưng ngược lại, nếu chỉ có hệ điều hành mà khơng có các thiết bị phần cứng đi kèm tương ứng thì cũng khơng làm nên được cơng việc gì cả. Thật ra, phần cứng máy tính và hệ điều hành đi kèm cùng nhau, hỗ trợ nhau, bổ sung cho nhau để cùng đạt được mục tiêu chung, khơng cái nào có thể bỏ đi được. Cũng giống như phân cấp trong xã hội loài người, người thường và các nhà quản lý cũng không thể tách rời nhau. Nếu thiếu các nhà quản lý, xã hội sẽ loạn và khơng thể kiểm sốt. Và ngược lại, nếu như tất cả đều là quản lý, khơng có những người bình thường nữa, thì cũng khơng ai là quản lý cả. Tóm lại: Phần cứng máy tính và hệ điều hành đi kèm là khơng thể tách rời, cả hai phối hợp với nhau tạo ra một chỉnh thể hồn thiện.
Chính vì vậy, một trong những công việc quan trọng củazHệ điều hànhzlà quản lý các thiết bị đầu vào / đầu ra (Input / Output) khác nhau, bao gồm chuột, bàn phím, touchpad, ổ đĩa cứng, màn hình, các thiết bị USB, thiết bị kết nối mạng, thiết bị âm thanh, máy in, v.v. Cần thiết phải có hệ thốngzI / Ozđể nhận các yêu cầu vào / ra dữ liệu của ứng dụng và gửi nó đến thiết bị vật lý, sau đó nhận lại các phản hồi từ thiết bị và gửi đến ứng dụng xử lý tiếp.
Hệ thống I/O của Windows bao gồm một số thành phần điều hành cùng nhau quản lý các thiết bị phần cứng và cung cấp giao diện cho các thiết bị phần cứng cho các ứng dụng và hệ thống. Quản lý thiết bị I/O là một phần rất quan trọng của hệ điều hành - quan trọng và đa dạng đến mức toàn bộ hệ thống con I/O được dành cho hoạtđộng của nó. Quản lý hệ thống I/O là một phần rất quan trọng của bất kỳ hệ điều hành nào, và Windows cũng không phải là ngoại lệ. Trong Windows, quản lý hệ thống I/O có trách nhiệm quản lý tất cả các hoạt động vào/ra của hệ thống, bao gồm giao tiếp với các thiết bị như bàn phím, chuột, thiết bị lưu trữ và thiết bị mạng. Quản lý hệ thống I/O cung cấp một giao diện tiêu chuẩn cho phép các ứng dụng tương tác với các thiết bị một cách dễ dàng đồng thời đảm bảo rằng các hoạt động I/O được thực hiện một cách hiệu quả và an toàn.
Trong bài luận này, chúng ta sẽ đi sâu vào các chi tiết của quản lý hệ thống I/O trên Windows, bao gồm các thành phần, cách thức hoạt động và những thách thức liên quan đến quản lý hoạt động I/O trên một hệ thống Windows. Chúng ta sẽ khám phá vai trị của các trình điều khiển thiết bị, gói tin yêu cầu I/O và các thành phần phần mềm khác liên quan đến quản lý hoạt động I/O trên Windows. Chúng ta cũng sẽ thảo luận về các vấn đề và thách thức phổ biến trong quản lý hệ thống I/O và các cơchế được sử dụng để giải quyết chúng. Kết thúc bài luận này, độc giả sẽ có một hiểubiết tồn diện về quản lý hệ thống I/O trên Windows và vai trị quan trọng của nó trong đảm bảo hoạt động hiệu quả và an toàn của hệ thống.
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">Trong hệ điều hành Windows, có nhiều loại thiết bị vào ra (input/output devices) khác nhau được hỗ trợ để cho phép người dùng tương tác với máy tính. Sau đây là một số thiết bị vào ra phổ biến trên hệ điều hành Windows. Thiết bịzI / Ozcó thể được chia thành hai loại là Block devicesz(thiết bị khối) đây là loại thiết bị mà trình điều khiển giao tiếp bằng cách gửi tồnbộ khối dữ liệu. Ví dụ: Ổ đĩa cứng, thiết bị USB Flash, máy ảnh USB... và loại thứ 2 là Character devicesz(thiết bị ký tự): Loại thiết bị mà trình điều khiển giao tiếp bằng cách gửi và nhận các ký tự đơn (byte hoặc mã 8 - octa). Ví dụ: các loại card màn hình, card âm thanh hoặc các cổng serial port, parallel ... TrừzCPUzthì các thiết bị ngoại vi khác thường sẽ có một trình điều khiển đi kèm (CPUzcó kiểu xử lý riêng và thường đi cùng với phần cứng, có bộ nhớ độc lập)
Hình 1: các loại thiết bị vào ra trong Windows.
Mỗi thiết bị điều khiển(TBĐK) có thể điều khiển được 1,2,4,..thiết bị ngoại vi(TBNV) . Tùy theo số giác cắm có trên TBĐK Nếu giao diện điều khiển chuẩn(ANSI, IEEE, ISO,...) có thể nối tới nhiều thiết bị khác .Mỗi TBĐK có các thanh ghi riêng để làm việc với CPU Dùng các không gian địa chỉ đặc biệt cho các thanh ghi: cổng vào ra
giao diện TBĐK và TBNV: Giao diện mức rất thấp • Sector = 512bytes = 4096bits • Bộ điều khiển đĩa phải đọc/ghi các bit và nhóm lại thành các sector• HĐH chỉ làm việc với các TBĐK• Thơng qua các thanh ghi điều khiển của thiết bị . Các câu lệnh và tham số sẽ được đưa vào các thanh ghi điều khiển. Khi 1 lệnh được bộ điềukhiển chấp nhận, CPU sẽ để cho bộ điều khiển hoạt động một mình và nó quay sanglàm cơng việc khác. Khi lệnh thực hiện xong, bộ điều khiển sẽ báo cho CPU bằng tín hiệu ngắt. CPU sẽ lấy KQ và trạng thái thiết bị thông qua các thanh ghi điều khiển
Là đoạn mã trong nhân của hệ thống cho phép tương tác trực tiếp với phần cứng thiết bị . Trình điều khiển thiết bị (hay còn gọi là Driver) là một phần mềm đặcbiệt được viết để cho phép hệ điều hành tương tác với các thiết bị phần cứng như bàn phím, chuột, ổ đĩa cứng, card mạng, card âm thanh, và nhiều loại thiết bị khác.Các trình điều khiển này được thiết kế để cung cấp một giao diện trung gian giữa phần cứng và hệ điều hành, cho phép hệ điều hành giao tiếp với thiết bị và điều khiển nó một cách hiệu quả. Cụ thể, khi một ứng dụng yêu cầu sử dụng một thiết bị,hệ điều hành sẽ gọi đến trình điều khiển của thiết bị tương ứng để thực hiện các thao tác trên thiết bị.
Trình điều khiển thiết bị được viết bằng ngôn ngữ lập trình C hoặc C++, và được tích hợp vào hệ điều hành Windows dưới dạng file thực thi có đi .sys. Các trình điều khiển này thường được cài đặt kèm với hệ điều hành, tuy nhiên, khi cập nhật hệ điều hành hoặc thêm một thiết bị mới, người dùng có thể cần phải cài đặt thêm trình điều khiển cho thiết bị đó.
Trình điều khiển thiết bị cung cấp cho hệ điều hành các hàm API (Application Programming Interface) để truy xuất đến các chức năng của thiết bị, như đọc/ghi dữliệu, truyền/nhận tín hiệu, cài đặt cấu hình, kiểm tra trạng thái, và các thao tác khác. Hơn nữa, các trình điều khiển này cịn cung cấp các thơng số và tùy chọn cấu hình để người dùng có thể điều chỉnh cách thiết bị hoạt động phù hợp với nhu cầu sử dụng của mình. Tóm lại, trình điều khiển thiết bị là một phần quan trọng của hệ thống quản lý vào ra trong hệ điều hành Windows, đóng vai trị quan trọng trong việc đảm bảo tương tác hiệu quả giữa phần cứng và hệ điều hành, từ đó đáp ứng nhu cầu sử dụng của người dùng một cách tốt nhất. Cung cấp 1giao diện chuẩn cho các Tbnv khác nhau .Các device driver thường được chia làm 2 mức, Mức cao được
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">truy nhập qua các lời gọi hệ thống ,cài đặt tập lời gọi chuẩn như open(), close(), read(), write()...Là giao diện của nhân HĐH với trình điều khiển. Luồng mức cao khởi động thiết bị thực hiện vào/ra và sau đó đặt luồng điều khiển tạm nghỉ. Mức thấp: Được thực hiện như 1 thủ tục ngắt. Đọc dữ liệu đầu vào, hoặc đưa khối dữ liệutiếp theo ra ngoài .Đánh thức luồng tạm nghỉ mức trên khi vào/ra kết thúc
Để tích hợp với trình quản lý I/O và các thành phần hệ thống I/O khác, trình điều khiển thiết bị phải tuân thủ các nguyên tắc triển khai dành riêng cho loại thiết bị mà nó quản lý và vai trị của nó trong việc quản lý thiết bị. Trong phần này, chúng ta sẽ xem xét các loại trình điều khiển thiết bị mà Windows hỗ trợ cũng như cấu trúc bên trong của trình điều khiển thiết bị.
Windows hỗ trợ nhiều loại trình điều khiển thiết bị và mơi trường lập trình.zNgay cả trong một loại trình điều khiển thiết bị, mơi trường lập trình có thể khác nhau, tùy thuộc vào loại thiết bị cụ thể mà trình điều khiển dành cho.zPhân loại rộng nhất của trình điều khiển là liệu đó là trình điều khiển chế độ người dùng hay chế độ nhân.zWindows hỗ trợ một số loại trình điều khiển chế độ người dùng:
Trình điều khiển máy inzcủa hệ thống con Windowszdịch các yêu cầu đồ họa độc lập với thiết bị thành các lệnh dành riêng cho máy in.zSau đó, các lệnh này thường được chuyển tiếp tới trình điều khiển cổng chế độ nhân chẳng hạn như trình điều khiển cổng máy in bus nối tiếp vạn năng (USB) (Usbprint.sys).
Trình điều khiển Khung Trình điều khiển Chế độ Người dùng (UMDF)là trình điều khiển thiết bị phần cứng chạy ở chế độ người
dùng.zChúng giao tiếp với thư viện hỗ trợ UMDF chế độ nhân thơngqua ALPC.zXem phần Khung Trình điều khiển Chế độ Người dùng (UMDF) ở phần sau của chương này để biết thêm thơng tin.Trong chương này, trọng tâm là trình điều khiển thiết bị kernel-mode.zCó nhiều loại kernel-mode driver, có thể chia thành các loại cơ bản sau:
Trình điều khiển hệ thống tệpzchấp nhận các yêu cầu I/O đối với
các tệp và đáp ứng các yêu cầu bằng cách đưa ra các yêu cầu của riêng chúng, rõ ràng hơn, cho các trình điều khiển thiết bị mạng hoặc bộ nhớ chung.
Trình điều khiển Plug and Playzhoạt động với phần cứng và tích hợpvới trình quản lý nguồn và trình quản lý PnP của Windows.zChúng
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">bao gồm trình điều khiển cho thiết bị lưu trữ dung lượng lớn, bộ điều hợp video, thiết bị đầu vào và bộ điều hợp mạng.
Trình điều khiển Non-Plug and Playz, cũng bao gồmzcác phần mở rộng kernelz, là các trình điều khiển hoặc mô-đun mở rộng chức năng củahệ thống.zChúng thường khơng tích hợp với PnP hoặc trình quản lý năng lượng vì chúng thường khơng quản lý một phần cứng thực tế.zCác ví dụ bao gồm API mạng và trình điều khiển giao thức.zTrình điều khiển của Process Monitor.
Trong danh mục trình điều khiển chế độ nhân có các phân loại khác dựa trên mơ hình trình điều khiển mà trình điều khiển tn thủ và vai trị của trình điều khiển trong việc phục vụ các yêu cầu thiết bị.
Hệ thống I/O thúc đẩy việc thực thi các trình điều khiển thiết bị.zTrình điều khiển thiết bị bao gồm một tập hợp các thường trình được gọi để xử lý các giai đoạn khác nhau của u cầu I/O.zHình 2zminh họa các thói quen chức năng trình điều khiển chính.
Hình 2: Quy trình trình điều khiển thiết bị chính
Quy trình khởi tạo là q trình mà khi một thiết bị được cắm vào máy tính, hệ thống sẽ xác định loại thiết bị và tải trình điều khiển phù hợp. Quá trình này được gọi là Plug and Play (PnP) và nó bao gồm các giai đoạn như tìm kiếm trình điều khiển, tải và cài đặt trình điều khiển.
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">Quy trình bổ sung thiết bị là quá trình mà khi một thiết bị mới đượccắm vào máy tính, hệ thống sẽ tạo ra các tài nguyên cho thiết bị đó, bao gồm các địa chỉ bộ nhớ, địa chỉ I/O và IRQ. Một tập hợp cácquy trình điều phối được sử dụng để quản lý các yêu cầu I/O từ cácứng dụng và chuyển chúng đến các trình điều khiển thiết bị tương ứng. Quy trình bắt đầu I/O là quá trình mà khi một ứng dụng yêu cầu thực hiện một hoạt động I/O, hệ thống sẽ khởi tạo một u cầuI/O và gửi nó đến trình điều khiển thiết bị tương ứng. Một quy trình dịch vụ ngắt (ISR) được sử dụng để xử lý các tín hiệu ngắt từ thiết bị. Khi thiết bị cần truyền tải thơng tin đến hệ thống, nó sẽ gửi mộttín hiệu ngắt đến ISR và ISR sẽ xử lý tín hiệu ngắt này. Quy trình DPC phục vụ được sử dụng để xử lý các yêu cầu I/O trong nền, mà không ảnh hưởng đến hiệu suất của hệ thống. Một hoặc nhiều quy trình hồn thành I/O là các quy trình được sử dụng để xử lý các yêucầu I/O đã được hồn thành. Một quy trình hủy I/O được sử dụng đểhủy các yêu cầu I/O đang chờ hoặc đang được thực hiện. Các thường trình điều phối nhanh được sử dụng để xử lý các yêu cầu I/O đơn giản và nhanh hóng. Các trình điều khiển sử dụng trình quản lý bộ đệm trong Windows để quản lý các bộ đệm I/O. Một thóiquen dỡ tải được sử dụng để giải phóng bộ nhớ và tài nguyên khi một thiết bị bị gỡ bỏ khỏi hệ thống.
Khi một luồng mở một điều khiển cho một đối tượng tệp (đượcmô tả trong phầnzXử lý I/Ozở phần sau của chương này), trình quảnlý I/O phải xác định từ tên của đối tượng tệp trình điều khiển (hoặc các trình điều khiển) nào nó sẽ gọi để xử lý yêu cầu .zHơn nữa, trình quản lý I/O phải có khả năng định vị thông tin này vào lần tới khi một luồng sử dụng cùng một tệp xử lý.zCác đối tượng hệ thống sau đáp ứng nhu cầu này:
Mộtzđối tượng trình điều khiểnzđại diện cho một trình điều khiển riêng lẻ trong hệ thống.zTrình quản lý I/O lấy địa chỉ của từng quy trình điều phối của trình điều khiển (điểm vào) từ đối tượng trình điều khiển.
Mộtzđối tượng thiết bịzđại diện cho một thiết bị vật lý hoặc logic trên hệ thống và mơ tả các đặc điểm của nó, chẳng hạn như sự liên kết mà nó yêu cầu đối với bộ đệm và vị trí của hàng đợi thiết bị của nó để chứa các IRP đến.
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">Trình quản lý I/O tạo một đối tượng trình điều khiển khi trình điều khiển được tải vào hệ thống, sau đó nó gọi thủ tục khởi tạo trình điều khiển (ví dụ:zDriverEntryz), sẽ điền vào các thuộc tính đối tượng bằng các điểm nhập của trình điều khiển.
Sau khi tải, trình điều khiển có thể tạo các đối tượng thiết bị để đạidiện cho thiết bị hoặc thậm chí là giao diện cho trình điều khiển bất kỳ lúc nào bằng cách
gọizIoCreateDevicezhoặczIoCreateDeviceSecurez.zTuy nhiên, hầu hết các trình điều khiển Plug and Play tạo thiết bị với thói quen thêm thiết bị khi trình quản lý PnP thơng báo cho họ về sự hiện diện của một thiết bị để họ quản lý.zMặt khác, trình điều khiển Non-Plug and Play thường tạo các đối tượng thiết bị khi trình quản lý I/O gọi quy trình khởi tạo của chúng.zTrình quản lý I/O hủy tải trình điều khiển khi đối tượng thiết bị cuối cùng của nó đã bị xóa và khơng cịn tham chiếu đến trình điều khiển.
Khi trình điều khiển tạo một đối tượng thiết bị, trình điều khiển có thể tùy chọn gán tên cho thiết bị.zTên đặt đối tượng thiết bị trong khơng gian tên trình quản lý đối tượng và trình điều khiển có thể xác định tên rõ ràng hoặc để trình quản lý I/O tự động tạo tên.Theoquy ước, các đối tượng thiết bị được đặt trong thư mục \Device trong không gian tên, không thể truy cập được bởi các ứng dụng sử dụng Windows API.
Trong hệ điều hành Windows, chu kỳ của một yêu cầu vào/ra (I/O request) bao gồm các bước sau:
Tạo yêu cầu vào/ra (I/O request): Ứng dụng gửi yêu cầu vào/ra tới hệ thống thơng qua các API của hệ thống (ví dụ: CreateFile, ReadFile, WriteFile,...).
Xử lý yêu cầu vào/ra bởi trình quản lý I/O (I/O Manager): Khi yêu cầu vào/ra được gửi tới hệ thống, trình quản lý I/O xác định trình điều khiển và thiết bị tương ứng với yêu cầu và chuyển yêu cầu đến trình điều khiển của thiết bị.
Xử lý yêu cầu vào/ra bởi trình điều khiển thiết bị (Device Driver): Trình điều khiển thiết bị xử lý yêu cầu vào/ra bằng cách gửi các yêu cầu tới thiết bị phần cứng hoặc xử lý các yêu cầu bằng phần mềm (ví dụ: đọc dữ liệu từ bộ đệm, ghi dữ liệu vào bộ đệm,...).
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">Hoàn thành yêu cầu vào/ra (I/O Completion): Sau khi yêu cầu vào/ra được xử lý bởi trình điều khiển thiết bị, nó sẽ thơng báo cho trình quản lý I/O (I/O Manager) về kết quả của u cầu. Sau đó, trình quản lý I/O sẽ thông báo cho ứng dụng về kết quả của yêu cầu vào/ra thông qua các API tương ứng (ví dụ:
GetOverlappedResult, ReadFile, WriteFile,...).
Chu kỳ của một yêu cầu vào/ra có thể là đồng bộ hoặc bất đồng bộ. Trong yêu cầu đồng bộ, ứng dụng sẽ bị chặn và đợi kết quả củayêu cầu trước khi tiếp tục thực hiện các tác vụ tiếp theo. Trong yêucầu bất đồng bộ, ứng dụng có thể tiếp tục thực hiện các tác vụ khác trong khi đợi kết quả của yêu cầu vào/ra.
Hình 3: chu kỳ một yêu cầu vào ra
Sau khi hệ điều hành(HDH) gửi yêu cầu ra thiết bị ngoại vi(TBNV), HĐH cần phải biết TBNV hoàn thành yêu cầu vào ra TBNV gặp lỗi. Có thể thực hiện theo 2 p/pháp Ngắt và thăm dò.
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">Ngắt (interrupt): Đây là phương pháp được ưu tiên sử dụng để giao tiếp với các thiết bị ngoại vi. Khi một thiết bị ngoại vi cần truyền dữ liệu tới hệ điều hành, nó sẽ tạo ra một ngắt để thông báo cho hệ điều hành biết. Hệ điều hành sẽ ngắt tạm thời việc đang thực hiện để xử lý ngắt này. Sau khi xử lý xong ngắt, hệ điều hành sẽ trả lại quyền điều khiển cho tiến trình hoặc luồng đang chạy trước đó.
Thăm dò (polling): Phương pháp này sử dụng việc kiểm tra trạng thái của thiết bị ngoại vi liên tục để xem nó có sẵn dữ liệu hay khơng. Khi thiết bị ngoại vi đã sẵn sàng truyền dữ liệu, hệ điều hành sẽ đọc dữ liệu từ thiết bị này. Tuy nhiên, phương pháp này không hiệu quả và tốn nhiều tài nguyên hơn so với phương pháp sử dụng ngắt, vì nó u cầu hệ điều hành phải kiểm tra trạng thái của thiết bị liên tục mà không biết khi nào thiết bị này sẽ sẵn sàng.
Tuy nhiên, phương pháp sử dụng ngắt không phải lúc nào cũng hiệu quả hơn so với phương pháp thăm dò. Nếu thiết bị ngoại vi có tốc độ truyền dữ liệu chậm hoặc ít sử dụng, phương pháp thăm dị có thể hiệu quả hơn do không tốn nhiều tài nguyên của hệ thống. Ngoài ra, một số thiết bị ngoại vi không hỗ trợ phương pháp sử dụng ngắt, và do đó phương pháp thăm dị là cách duy nhất để giao tiếp với chúng.
Các thanh ghi thiết bị xuất hiện với CPU dưới dạng các vị trí bộ nhớtại một địa chỉ vật lý cụ thể.zKhi CPU ghi vào các vị trí này, bộ điều khiển PCI tích hợp nhận ra rằng các truy cập này phải được định tuyến đến thiết bị thích hợp. Điều này có nghĩa là một phần bộ nhớvật lý trên hệ thống được dành riêng cho các tương tác với thiết bị.zChúng tôi gọi đây làzI/O ánh xạ bộ nhớz.zPhần bộ nhớ dành riêngcho các tương tác này được kiểm soát bởizThanh ghi Địa chỉ Cơ sởz(BAR).zCác thanh ghi này được cấu hình trong q trình khởi động theo giao thức PCI.
Ngồi ra, CPU có thể truy cập các thiết bị thơng qua các hướng dẫn đặc biệt.znền tảng x86 chỉ định một số hướng dẫn vào/ra nhất định được sử dụng để truy cập thiết bị.zMỗi lệnh cần chỉ định thiết bị đích - cổng I/O - cũng như một số giá trị sẽ được chuyển đến thiết bị.zMơ hình này được gọi làzMơ hình Cổng I/Oz. Đường dẫn từ thiết bị đến tổ hợp CPU có thể có hai tuyến đường.zCác thiết bị có thể tạo ra các ngắt cho CPU.zCPU có thể thăm dị thiết bị bằng cách đọc các thanh ghi trạng thái của chúng để xác định xem
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">chúng có một số phản hồi/dữ liệu cho CPU hay không. Với các ngắt, nhược điểm là các trình xử lý ngắt.zCó các bước thực tế liên quan đến trình xử lý ngắt tiêu tốn chu kỳ CPU.zCó thể có cài đặt/đặt lại mặt nạ ngắt cũng như các tác động gián tiếp khác do ô nhiễm bộ đệm. Điều đó đang được nói, các ngắt có thể được kích hoạt bởi thiết bị ngay khi thiết bị có thơng tin cho CPU. Để thăm dị ý kiến, HĐH có cơ hội chọn thời điểm sẽ thăm dị ý kiến. Hệ điều hành có thể chọn thăm dị ý kiến vào những thời điểm ơ nhiễm bộ đệm sẽ ở mức thấp nhất. Tuy nhiên, chiến lược này có thể gây ra sự chậm trễ trong cách quan sát hoặc xử lý sự kiện, vì việc xử lý diễn ra tại một thời điểm nào đó sau khi sự kiện được thiết bị tạo ra. Ngoài ra, quá nhiều cuộc bỏ phiếu có thể giới thiệu chi phí CPU có thể khơng hợp lý.
Trong hệ điều hành Windows, ngắt (interrupt) được sử dụng đểquản lý các hoạt động vào/ra (I/O operations). Khi một thiết bị ngoại vi được kết nối với hệ thống, nó có thể yêu cầu các dịch vụ I/O bằng cách gửi các tín hiệu ngắt đến bộ điều khiển thiết bị tương ứng. Bộ điều khiển này sẽ sử dụng các tín hiệu ngắt để giao tiếp với hệ thống và yêu cầu các dịch vụ I/O. Khi một tín hiệu ngắt được nhận, hệ thống sẽ tạm dừng việc thực hiện các tác vụ hiện tại và chuyển tới xử lý các yêu cầu I/O được yêu cầu bởi thiết bị ngoại vi. Hệ thống sử dụng một hệ thống ngắt ưu tiên để xác định độ ưu tiên của các yêu cầu I/O được yêu cầu bởi các thiết bị ngoại vi khác nhau. Các yêu cầu I/O của các thiết bị ngoại vi ưu tiên cao hơn sẽ được xử lý trước các yêu cầu I/O của các thiết bị ngoại vi ưutiên thấp hơn. Trong quá trình xử lý yêu cầu I/O, hệ thống sẽ tương tác với bộ điều khiển thiết bị và truy cập dữ liệu trên thiết bị ngoại vi. Sau khi các yêu cầu I/O được xử lý hoàn tất, hệ thống sẽ trả lại việc thực hiện các tác vụ hiện tại và tiếp tục thực hiện các tác vụ khác.
Tuy nhiên, cũng có một số hạn chế khi sử dụng ngắt trong việc quản lý I/O, chẳng hạn như tốc độ xử lý chậm hơn so với thực hiện thăm dò (polling) hoặc độ trễ thêm khi xử lý các yêu cầu I/O. Ngoàira, sử dụng ngắt cũng yêu cầu phải có cơ chế đồng bộ hóa để đảmbảo tính nhất quán của dữ liệu truyền tải giữa thiết bị ngoại vi và hệ thống.
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">Ngắt là hiện tượng dừng đột xuất chương trình để chuyển sang thực hiện chương trình khác ứng với một sự kiện nào đó xảy ra • Ngắt >< chương trình con !?
Quá trình xử lý ngắt trong hệ điều hành Windows bao gồm các bước sau: Ghi nhận đặc trưng sự kiện gây ngắt vào ô nhớ cố định: Khi một thiết bị ngoại vi gây ra sự kiện cần được xử lý, nó sẽ gửi một tín hiệu ngắt đến bộ điều khiển ngắt của hệ thống. Bộ điều khiển ngắt sẽ lưu trữ thông tin về sự kiện gây ngắt vào một ô nhớ cố định. Ghi nhận trạng thái của tiến trình bị ngắt: Tiến trình đang thực thi sẽ bị ngắt bởi sự kiện này. Trước khi bắt đầu xử lý ngắt, trạng thái của tiến trình đó cần phải được ghi nhận để sau này có thể khơi phục lại trạng thái đó. Chuyển địa chỉ của chương trình xửlý ngắt vào thanh ghi con trỏ lệnh: Chương trình xử lý ngắt được gọi để xử lý sự kiện ngắt. Để thực hiện điều này, địa chỉ của chương trình xử lý ngắt cần được chuyển vào thanh ghi con trỏ lệnh. Sử dụng bảng vector ngắt: Hệ điều hành Windows sử dụng bảng vector ngắt để liên kết các sự kiện ngắt với chương trình xử lý ngắt tương ứng. Bảng vector ngắt lưu trữ địa chỉ của các chươngtrình xử lý ngắt. Thực hiện chương trình xử lý ngắt: Chương trình xử lý ngắt được gọi để xử lý sự kiện ngắt. Sau khi xử lý sự kiện ngắt, nó sẽ trả lại quyền điều khiển cho tiến trình bị ngắt. Khơi phục lại tiến trình bị ngắt: Trạng thái của tiến trình bị ngắt cần được khơi phục lại để nó có thể tiếp tục thực hiện cơng việc mà nó đang làm trước khi bị ngắt. Đó là quy trình xử lý ngắt trong hệ điềuhành Windows. Nó giúp hệ thống quản lý các sự kiện ngắt và xử lý chúng một cách hiệu quả để đảm bảo tính ổn định và đáng tin cậy của hệ thống.Trình xử lý ngắt xác định nguyên nhân của ngắt, thựchiện xử lý cần thiết, thực hiện khôi phục trạng thái và thực hiện quay lại lệnhzngắtzđể trả lại quyền điều khiển cho CPU.z(Trình xử lý ngắtzsẽ xóazngắt bằng cách bảo dưỡng thiết bị.)
(Lưu ý rằng trạng thái được khôi phục không cần phải giống trạng thái đã được lưu khi ngắt.)
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">Hình 4 - Chu kỳ I/O điều khiển ngắt.
Mô tả ở trên là đủ cho I/O điều khiển ngắt đơn giản, nhưng có ba nhu cầu trong điện toán hiện đại làm phức tạp bức tranh: Sự cần thiết phải hỗn xử lý ngắt trong q trình xử lý quan trọng. Nhu cầu xác định trình xử lý ngắtznàozsẽ gọi mà khơng cần phải thăm dị tất cả các thiết bị để xem thiết bị nào cần chú ý và. Cần có các ngắt đa cấp để hệ thống có thể phân biệt giữa các ngắt có mức độ ưu tiên cao và thấp để có phản ứng phù hợp. Những vấn đề này được xử lý trong kiến trúc máy tính hiện đại với phần cứng bộzđiều khiển ngắtz.
Hầu hết các CPU hiện nay đều có hai dịng u cầu ngắt: Một dịngkhơngzche đượczđối với các tình trạng lỗi nghiêm trọng và một dịng cózthể che đượczmà CPU có thể tạm thời bỏ qua trong quá trình xử lý quan trọng. Cơ chế ngắt chấp nhận mộtzđịa chỉ zthường <i><b>,</b></i>
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">là một trong một tập hợp nhỏ các số để bù vào một bảng được gọi làzvectơ ngắt Bảng này (thường nằm ở địa chỉ vật lý 0?) chứa địa <i><b>.</b></i>
chỉ của các thường trình được chuẩn bị để xử lý các ngắt cụ thể. Sốlượng trình xử lý ngắt có thể có vẫn vượt quá phạm vi số lượng ngắt đã xác định, do đó, nhiều trình xử lýzngắt có thể được xâu chuỗiz.zThực tế, các địa chỉ được giữ trong các vectơ ngắt là các con trỏ đầu cho danh sách liên kết của các trình xử lý ngắt.Hình 5 cho thấy vector ngắt Intel Pentium.zCác ngắt từ 0 đến 31 là không che được và dành riêng cho các lỗi nghiêm trọng về phần cứng và các lỗi khác.zCác ngắt có thể che dấu, bao gồm các ngắt I/O của thiết bị bình thường bắt đầu ở ngắt 32. Phần cứng ngắt hiện đại cũng hỗ trợz<i><b>các </b></i>mức ưu tiên ngắtz, cho phép hệ thống chỉ che dấu các ngắt có mức ưu tiên thấp hơn trong khi phục vụ ngắt có mức ưu tiên cao hoặc ngược lại để cho phép tín hiệu có mức ưu tiên cao làm gián đoạn quá trình xử lý của mức ưu tiên thấp.
Hình 5 - Bảng vector sự kiện bộ xử lý Intel Pentium.
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">Tại thời điểm khởi động, hệ thống sẽ xác định thiết bị nào có mặt và tải các địa chỉ trình xử lý thích hợp vào bảng ngắt. Trong quá trình hoạt động, các thiết bị báo lỗi hoặc hồn thành các lệnh thơng qua các ngắt. Các ngoại lệ, chẳng hạn như chia cho 0, truy cập bộ nhớ không hợp lệ hoặc cố gắng truy cập các hướng dẫn chếđộ kernel có thể được báo hiệu thông qua các ngắt. Việc cắt thời gian và chuyển đổi ngữ cảnh cũng có thể được thực hiện bằng cơ chế ngắt. Bộ lập lịch đặt bộ hẹn giờ phần cứng trước khi chuyển quyền kiểm sốt sang quy trình người dùng. Khi bộ hẹn giờ tăng dòng yêu cầu ngắt, CPU sẽ thực hiện lưu trạng thái và chuyển quyền điều khiển sang bộ xử lý ngắt thích hợp, bộ xử lý này sẽ chạy bộ lập lịch. Bộ lập lịch thực hiện khôi phục trạng thái của mộtquy trìnhz<i><b>khác</b></i>ztrước khi đặt lại bộ hẹn giờ và đưa ra lệnh quay lại từ bị gián đoạn. Một ví dụ tương tự liên quan đến hệ thống phân trang cho bộ nhớ ảo - Lỗi trang gây ra gián đoạn, do đó đưa ra yêucầu I/O và chuyển đổi ngữ cảnh như mô tả ở trên, di chuyển quy trình bị gián đoạn vào hàng đợi và chọn một quy trình khác để chạy .zKhi yêu cầu I/O đã hoàn thành (tức là khi trang được yêu cầu đã được tải vào bộ nhớ vật lý), thì thiết bị sẽ ngắt và trình xử lý ngắt sẽ chuyển quy trình từ hàng đợi sang hàng đợi sẵn sàng, (hoặc tùy thuộc vào thuật toán lập lịch trình và chính sách, có thể tiếp tục và ngữ cảnh chuyển nó trở lại CPU. )
Các cuộc gọi hệ thống được thực hiện thơng quazcác ngắt phần
<i><b>mềm,zcịn gọi là bẫy.Khi một chương trình ( thư viện ) cần cơng việc </b></i>
được thực hiện ở chế độ nhân, nó sẽ đặt thơng tin lệnh và có thể làđịa chỉ dữ liệu trong một số thanh ghi nhất định, sau đó phát sinh một ngắt phần mềm.z(Ví dụ: 21 hex trong DOS.) Hệ thống thực hiện lưu trạng thái và sau đó gọi trình xử lý ngắt thích hợp để xử lýyêu cầu ở chế độ kernel.zCác ngắt phần mềm thường có mức độ ưutiên thấp, vì chúng khơng khẩn cấp bằng các thiết bị có khơng gian đệm hạn chế. Các ngắt cũng được sử dụng để kiểm soát các hoạt động của kernel và lên lịch các hoạt động để có hiệu suất tối ưu.zVí dụ: việc hồn thành thao tác đọc đĩa bao gồmz<b>hai</b>zlần ngắt: Ngắt ưu tiên cao xác nhận hoàn thành thiết bị và đưa ra yêu cầu đĩa tiếp theo để phần cứng không ở trạng thái chờ. Ngắt có mức ưutiên thấp hơn chuyển dữ liệu từ không gian bộ nhớ nhân sang khơng gian người dùng, sau đó chuyển quy trình từ hàng đợi sang hàng đợi sẵn sàng. Hệ điều hành Solaris sử dụng nhân đa luồng vàcác luồng ưu tiên để gán các luồng khác nhau cho các trình xử lý ngắt khác nhau.zĐiều này cho phép xử lý "đồng thời" nhiều ngắt và
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">đảm bảo rằng các ngắt có mức độ ưu tiên cao sẽ được ưu tiên hơn các ngắt có mức độ ưu tiên thấp và các quy trình của người dùng.
Vùng đệm (buffer) là một khu vực lưu trữ dữ liệu tạm thời trong bộ nhớ của hệ thống. Trong hệ điều hành Windows, vùng đệm thường được sử dụng để lưu trữ các dữ liệu liên quan đến các hoạt động vào/ra, như đọc và ghi tập tin, gửi và nhận dữ liệu qua mạng, và các hoạt động tương tự.
Khi một chương trình muốn thực hiện một hoạt động vào/ra, nó thường sẽ truyền dữ liệu đến vùng đệm và chờ đợi cho hoạt động được thực hiện bởi hệ thống. Sau khi hoạt động vào/ra kết thúc, chương trình có thể truy cập các dữ liệu đã được xử lý trong vùng đệm.
Vùng đệm thường được sử dụng để giảm thiểu số lần truy cập trực tiếp vào ổ đĩa hoặc mạng, giảm tải cho hệ thống và tăng tốc độ hoạt động của chương trình. Tuy nhiên, việc sử dụng vùng đệm cũng có thể dẫn đến một số vấn đề, chẳng hạn như mất dữ liệu do lỗi xảy ra trong q trình ghi vào vùng đệm. Do đó, việc quản lý vùng đệm được thực hiện cẩn thận là rất quan trọng trong các ứngdụng vào/ra của hệ điều hành Windows.
Bộ đệm của I/O được thực hiện vì (ít nhất) 3 lý do chính:
Sự khác biệt về tốc độ giữa hai thiết bị.z(Xem Hình 6 bên dưới.) Mộtthiết bị chậm có thể ghi dữ liệu vào bộ đệm và khi bộ đệm đầy, toàn bộ bộ đệm sẽ được gửi đến thiết bị nhanh cùng một lúc.zĐể thiết bị chậm vẫn có chỗ để ghi trong khi q trình này đang diễn ra, bộ đệm thứ hai được sử dụng và hai bộ đệm thay phiên nhau khi mỗi bộ đệm trở nên đầy.zĐiều này được gọi làz<i><b>đệm đôi.</b></i>( Bộ đệm đôi thường được sử dụng trong đồ họa ( hoạt hình), để một hình ảnh màn hình có thể được tạo trong bộ đệm trong khi bộ đệm
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">( đã hoàn thành ) khác được hiển thị trên màn hình. Điều này ngănngười dùng nhìn thấy bất kỳ hình ảnh màn hình nào chưa hồn thiện. )
Sự khác biệt về kích thước truyền dữ liệu.zBộ đệm được sử dụng đặc biệt trong các hệ thống mạng để chia các thơng điệp thành các gói nhỏ hơn để truyền và sau đó để lắp ráp lại ở phía nhận.Để hỗ trợzngữ nghĩa sao chép Ví dụ: khi một ứng dụng đưa ra yêu <i><b>.</b></i>
cầu ghi đĩa, dữ liệu sẽ được sao chép từ vùng bộ nhớ của người dùng vào bộ đệm nhân.zGiờ đây, ứng dụng có thể thay đổi bản saodữ liệu của chúng, nhưng dữ liệu cuối cùng được ghi ra đĩa là phiênbản của dữ liệu tại thời điểm yêu cầu ghi được thực hiện.
Hình 6 - Tốc độ truyền thiết bị của Sun Enterprise 6000 ( logarit ).
Vùng đệm trong hệ điều hành Windows có thể được phân loại vào các loại sau: Loại 1 gồm Vùng đệm vào là nơi chứa các dữ liệu
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">FCFS (First-Come, First-Served) là một trong những thuật toán điều phối truy cập đĩa được sử dụng trong hệ điều hành Windows. Theo đó, các yêu cầu truy cập đến đĩa được xử lý theo thứ tự đến trước, được gửi đến đĩa trước và được xử lý trước.
Khi một yêu cầu truy cập đến đĩa được gửi đến, hệ điều hành sẽ đưa yêu cầu này vào hàng đợi và xử lý các yêu cầu theo thứ tự củahàng đợi đó. Khi một yêu cầu được xử lý xong, yêu cầu tiếp theo trong hàng đợi sẽ được xử lý tiếp theo.
Tuy nhiên, thuật toán FCFS có một số nhược điểm. Khi một yêu cầucó thời gian xử lý lâu được đưa vào hàng đợi, các yêu cầu tiếp theocũng phải chờ đợi đến khi yêu cầu đó được hồn thành, dẫn đến thời gian chờ đợi dài và làm giảm hiệu quả xử lý yêu cầu trên đĩa. Ngồi ra, thuật tốn FCFS cũng khơng sử dụng các kỹ thuật tối ưu hóa khác như prefetching, buffering và caching để tăng tốc độ truycập đĩa.
Do nhược điểm này, các thuật toán điều phối truy cập đĩa khác như SSTF, SCAN, C-SCAN, LOOK, C-LOOK được phát triển để giải quyết các vấn đề của thuật toán FCFS và cải thiện hiệu suất xử lý truy cập đĩa.
Phương pháp lập lịchzđơn giản nhất là served). Thuật toán này rất dể lập trình nhưng khơng cung cấpzđược một dịch vụ tốt. Ví dụ : cần phảizđọc các khối theo thứ tự như sau :
FCFS(first-come,first-98, 183, 37, 122, 14, 124, 65, và 67
Giả sử hiện tạizđầu đọc đang ở vị trí 53. Như vậyzđầu đọc lần lượtzđi qua các khối 53, 98, 183, 37, 122, 14, 124, 65, và 67 như hình sau :
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">Số lượng xi lanh do đầu di chuyển:
= 14)+(124-65)+(67-65)=640
<small>int calculateTotalSeekTime(int *requests, int numRequests, int initialPosition) { int totalSeekTime = 0;</small>
<small> int currentPosition = initialPosition; for (int i = 0; i < numRequests; i++) {</small>
<small> totalSeekTime += abs(requests[i] - currentPosition); currentPosition = requests[i];</small>
<small> }</small>
<small> return totalSeekTime;}</small>
<small>int main() { int numRequests;</small>
</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21"><small> int totalSeekTime = calculateTotalSeekTime(requests, numRequests, initialPosition); printf("Tong do dai chuyen dau doc/ghi: %d\n", totalSeekTime);</small>
<small> free(requests); return 0;}</small>KẾT QUẢ:
</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">Định nghĩa SSTF(Shortest Seek Time First)
Dạng đầy đủ của SSTF là Shortest Seek Time First. SSTF là một thuật toán lập lịch lưu trữ thứ cấp xác định chuyển động của đầu và cánh tay của đĩa trong việc phục vụ các yêu cầu đọc và ghi. SSTF hoạt động như một thuật tốn lập lịch đĩa và nó là một cải tiến dựa trên thuật tốnzFCFS.
Nó làm giảm tổng thời gian tìm kiếm so với FCFS.
Thuật toán lập lịch trên disk SSTF (Shortest Seek Time First) hoạt động dựa trên việc lựa chọn truy cập đến các vị trí trên đĩa cứng sao cho thời gian di chuyển đầu đọc/ghi từ vị trí hiện tại đến vị trí cần truy cập là ngắn nhất.
Cách hoạt động của thuật toán SSTF như sau:
Bước 1: Đầu tiên, thiết lập vị trí hiện tại là vị trí ban đầu của đầu đọc/ghi.
Bước 2: Tìm và chọn vị trí trên đĩa gần nhất với vị trí hiện tại. Điều này được thực hiện bằng cách so sánh khoảng cách giữa các vị trí trên đĩa và vị trí hiện tại, và chọn vị trí có khoảng cách ngắn nhất.
</div>