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 (2.04 MB, 36 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
Giảng viên hướng dẫn: TS. Nguyễn Thanh BìnhMã lớp: 137325
<b>Nhóm sinh viên thực hiện: Nhóm 13</b>
Trịnh Xn Việt 20193194Nguyễn Đức Khơi 20192942
Hà Nội, 16/12/2022
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2"><i><b>Chương 1: Tổng quan về Linux...7</b></i>
<b>1.1.</b> <i><b>Giới thiệu tổng quan về Linux... 7</b></i>
<b>1.1.1.Lịch sử phát triển của hệ điều hành Linux...7</b>
<b>1.1.2.Ưu và nhược điểm của hệ điều hành Linux...7</b>
<b>1.1.3.Kiến trúc của hệ điều hành Linux...8</b>
<b>1.2.</b> <i><b>Giới thiệu về Linux Kernel... 8</b></i>
<b>1.3.</b> <i><b>Quản lý thiết bị (Device management)... 9</b></i>
<b>1.3.1.Device driver...10</b>
<b>1.3.2.Bus driver...10</b>
<i><b>Chương 2: Hệ thống I/O...11</b></i>
<b>2.1.</b> <i><b>Phân loại các thiết bị I/O... 11</b></i>
<b>2.1.1.Thiết bị khối (Đĩa từ, băng từ) (block devices):...11</b>
<b>2.1.2.Thiết bị ký tự (Máy in, Bàn phím, chuột, ...)( Character devices):...12</b>
<b>2.1.3.Thiết bị mạng (NIC card, Wifi chip):...13</b>
<b>2.2.</b> <i><b>Tổ chức các hệ thống nhập/xuất và chức năng...13</b></i>
<b>2.3.</b> <i><b>Các phương pháp điều khiển I/O... 14</b></i>
<b>2.3.1.Điều khiển bằng chương trình (Programmed I/O)...14</b>
<b>2.3.2.Điều khiển bằng ngắt (Interrupt Driven I/O)...15</b>
<b>2.3.3.Truy cập bộ nhớ trực tiếp DMA (Direct Memory Access)...15</b>
<b>2.4.</b> <i><b>Giao tiếp thiết bị I/O với hệ điều hành... 16</b></i>
<b>2.4.1.Ngắt (I/O interrupts):...16</b>
<b>2.4.2.Xử lý ngắt:...16</b>
<b>2.4.3.Thăm dò (polling):...16</b>
<b>2.5.</b> <i><b>Chuyển yêu cầu I/O thành các hoạt động phần cứng...17</b></i>
<i><b>Chương 3: Driver cho thiết bị USB...19</b></i>
<b>3.1.</b> <i><b>Tổng quan giao thức USB... 20</b></i>
<b>3.1.1.Chuẩn tín hiệu...20</b>
<b>3.1.2.Mơ hình mạng...21</b>
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3"><b>3.1.3.Các thành phần cơ bản của giao thức USB...22</b>
<b>3.2.</b> <i><b>Mơ hình phân lớp hệ thống USB trên Linux...23</b></i>
<b>3.3.</b> <i><b>Kịch bản hoạt động... 25</b></i>
<b>3.3.1.Hoạt động trong phần cứng...25</b>
<b>3.3.2.Hoạt động trong kernel...26</b>
<i><b>Chương 4: Driver cho bàn phím USB...30</b></i>
<b>4.1.</b> <i><b>Các bước viết Driver cho một thiết bị USB... 30</b></i>
<b>4.2.</b> <i><b>Viết một USB Driver cơ bản và nạp driver vào hệ thống...30</b></i>
<b>4.3.</b> <i><b>Makefile... 35</b></i>
<b>4.4.</b> <i><b>Viết driver cho bàn phím USB... 39</b></i>
<b>4.4.1Khung chương trình...39</b>
<b>4.4.2Các thư viện sử dụng trong chương trình...41</b>
<b>4.4.3Bảng dữ liệu điều khiển bàn phím...41</b>
<b>4.4.4Hàm thăm dị thiết bị probe...42</b>
<b>4.4.5Hàm ngắt...45</b>
<b>4.4.6Khởi tạo driver...47</b>
<b>4.4.7Giải phóng tài ngun...52</b>
<b>4.5.</b> <i><b>Chương trình tầng User... 53</b></i>
<i><b>KẾT LUẬN...0</b></i>
<i><b>Tài liệu tham khảo...0</b></i>
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">Figure 1 : Kiến trúc của hệ điều hành Kernel 8Figure 2 : Kiến trúc của Linux kernel 9Figure 3: Tương tác giữa thiết bị và driver 10Figure 4: Block devices 12
Figure 5: Character devices13
Figure 6: Chu kì của một yêu cầu I/O 19Figure 7: Chuẩn tín hiệu USB 20Figure 8: Mơ hình giao thức USB 22
Figure 9: Mơ hình tổng quan thiết bị USB 23Figure 10: Mơ hình phân lớp hệ thống USB trên Linux 25
Figure 11: Kết nối logic giữa USB Host Clients và USB Device Endpoints 26Figure 12: Hệ thống USB trên Linux 28
Figure 13: USB HID trong Linux USB host stack 29Figure 14: Các bước viết Driver cho một thiết bị USB 31
Table 1: Tổ chức và chức năng hệ thống nhập xuất...14
Table 2 : Tín hiệu điều khiển I/O và chức năng...15
Table 3: Chuẩn tín hiệu USB...20
Table 4: Mơ hình giao thức USB...23
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">CPU Central Processing Unit Bộ xử lý trung tâm
DMA Direct Memory Access Truy cập bộ nhớ trực tiếp
1 Nguyễn Thế Huy 2 Trịnh Xuân Việt 3 Nguyễn Đức Khôi 4 Lê Minh Khải
<b>Mơi trường trao đổi hoạt động nhóm: Internet </b>
• Hình thức: Online. Các thành viên tìm hiểu các nội dung phân công nêu trên, tổng hợplại trên LinkShare MS Word, cùng trao đổi và tiến hành chỉnh sửa, bổ sung. • Cơng cụ:Microsoft Office, Messenger, …
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">Hiện nay, với sự phát triển ngày càng nhanh của hệ thống nhúng để đáp ứng lại thịtrường, dễ dàng có thể thấy hệ điều hành Linux xuất hiện ở hầu hết các thiết bị có cấu trúcphức tạp cũng như khả năng đáp ứng cao. Việc tích hợp hệ điều hành lên hệ thống nhúnggiúp đơn giản hóa q trình thiết kế sản phẩm, rút ngắn thời gian cũng như chi phí xâydựng hệ thống vì các ứng dụng này được kế thừa sự ưu việt của một hệ điều hành nóichung và Linux riêng. Đó là sự nhỏ gọn, ổn định, thực thi nhanh, đơn giản hóa và khảnăng can thiệp phần cứng. Hơn thế nữa, cùng với cộng đồng sử dụng Linux rộng lớn trênkhắp thế giới các phần mềm mã nguồn mở đa dạng làm cho việc phát triển hệ thống Linuxnhúng một chiến lược được các công ty lựa chọn hàng đầu.
Mặt khác, chuẩn giao tiếp USB (Universal Series Bus) đã và đang trở thành một nhữngchuẩn giao tiếp phổ biến nhất. Hiện tại, USB đã trở thành chuẩn kết nối cũng như phươngthức truyền dữ liệu thân thuộc với người dùng công nghệ nhờ vào sự thuận tiền, bền vữngvà giá thành hợp lý của nó.
Ngày nay chuẩn truyền thông USB luôn là lựa chọn hàng đầu cho giải pháp kết nối tớimáy tính của các nhà phát triển. Tuy nhiên việc viết một Driver lại không hề đơn giản vớimột kỹ sư công nghệ thông tin, do việc này địi hỏi phải có cái nhìn bao qt về hệ thống:từ mức firmware trên thiết bị tới kiến trúc hệ điều hành trên máy tính. Chúng em quyếtđịnh chọn đề tài “Quản lý thiết bị vào ra trong Linux và viết driver cho USB” cho hệ điềuhành làm bài tập lớn cho môn học Hệ điều hành. Mặc dù đã cố gắng hết mình nhưng cókhả năng báo cáo của chúng em vẫn cịn sự thiếu sót, chúng em rất mong nhận được sựđóng góp ý kiến và đánh giá của các thầy cô và những người quan tâm đến đề tài củachúng em, để báo cáo được hoàn thiện hơn nữa. Cuối cùng, chúng em xin chân thành cảmơn thầy <b>TS. Nguyễn Thanh Bình</b> đã định hướng đề tài và giúp đỡ chúng em hoàn thànhbáo cáo này.
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">Linux là một từ gọi chung của nhiều biến thể Hệ điều hành được phát triển bằngcách sử dụng nhân (kernel) Linux do Linus Torvalds tạo ra như một giải pháp mã nguồnmở thay thế.
Mã nguồn mở có nghĩa là bất kỳ ai cũng được cấp phép tự do để sử dụng, sao chép,nghiên cứu hoặc thay đổi phần mềm theo bất kỳ cách nào. Mã nguồn, là tập hợp các hướngdẫn cho máy tính biết cách hoạt động ra sao, được chia sẻ công khai để khuyến khích sựphát triển liên tục.
Việc áp dụng nhân Linux này đã tạo ra một bộ nguồn (source) Hệ điều hành khôngcần mua để sử dụng và cài đặt. Điều này đối lập với mã độc quyền (proprietary code), nơimã nguồn bị che dấu với người dùng và bị hạn chế sử dụng để sao chép theo luật.
Linux có thể được cài đặt trên máy tính cá nhân và trở thành một trạm làm việchoặc sử dụng trên các máy chủ lớn. Có thể được sử dụng với mục đích thương mại trongcác mơi trường tính tốn và truyền tin, cũng như được sử dụng để giảng dạy về hệ điềuhành và lập trình hệ điều hành trong các trường đại học.
<b>1.1.1. Lịch sử phát triển của hệ điều hành Linux</b>
Năm 1991 Linus Torvalds, sinh viên của đại học tổng hợp Helsinki, Phần Lan, bắtđầu xem xét Minix, một phiên bản của Unix làm ra với mục đích nghiên cứu cách tạo ramột hệ điều hành Unix chạy trên máy PC với bộ vi xử lý Intel 80386 sử dụng với mục đíchchủ yếu về học thuật.
Ngày 25/8/1991, Linus cho ra version 0.01 và thông báo trên comp.os.minix củaInternet về dự định của mình về Linux.
Tháng 1/1992, Linus cho ra version 0.12 với shell và C compiler. Linus không cầnMinix nữa để recompile hệ điều hành của mình. Linus đặt tên hệ điều hành của mình làLinux.
Năm 1994, phiên bản chính thức 1.0 được phát hành.
Ngày nay, Linux được phân ra làm nhiều nhánh như: Ubuntu, Linux Mint,Fedora… nhưng thông dụng nhất hiện nay đang là Ubuntu.
<b>1.1.2. Ưu và nhược điểm của hệ điều hành Linux</b>
Ưu điểm:
Bản quyền: Là nền tảng mã nguồn mở và miễn phí. Với hệ điều hành này, bạnkhơng cần phải bỏ phí mua bản quyền mà có thể sử dụng đầy đủ các tính năng.Bao gồm các ứng dụng văn phịng OpenOffice và LibreOffice.
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">Tính bảo mật: Tất cả các phần mềm độc hại như virus, mã độc… đều khơng thểhoạt động trên Linux. Do đó, độ bảo mật của hệ điều hành rất cao.
Tính linh hoạt: Người dùng cịn có thể chỉnh sửa hệ điều hành theo nhu cầu sửdụng của mình. Đây chính cơ hội lý tưởng cho các lập trình viên cũng như cácnhà phát triển.
Hoạt động “mượt” trên các máy tính có cấu hình yếu: Với Linux, khi nâng cấplên phiên bản mới, các máy tính có cấu hình yếu vẫn sẽ được nâng cấp và hỗ trợthường xuyên – tức chất lượng hoạt động vẫn trơn tru và ổn định.
Nhược điểm:
Số lượng ứng dụng hỗ trợ trên Linux còn rất hạn chế.
Một số nhà sản xuất không phát triển driver hỗ trợ nền tảng Linux.
Khó làm quen, đặc biệt nếu đã quá quen thuộc với Windows thì khi chuyển sangLinux sẽ cần một khoảng thời gian để làm quen nó.
<b>1.1.3. Kiến trúc của hệ điều hành Linux</b>
<i>Figure 1 : Kiến trúc của hệ điều hành Kernel</i>
Kernel: Đây là phần quan trọng và được ví như trái tim của hệ điều hành, phần kernelchứa các module, thư viện để quản lý và giao tiếp với phần cứng và các ứng dụng.
Shell: Shell là một chương trình có chức năng thực thi các lệnh từ người dùng hoặc từcác ứng dụng - tiện ích yêu cầu chuyển đến cho Kernel xử lý.
Applications: Là các ứng dụng và tiện ích mà người dùng cài đặt trên Server. Ví dụ:ftp, samba, Proxy, …
<b>1.2.Giới thiệu về Linux Kernel</b>
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9"><i>Figure 2 : Kiến trúc của Linux kernel</i>
Dựa vào chức năng của hệ điều hành, Linux Kernel chia thành 6 thành phần:Process Management: có nhiệm vụ quản lý tiến trình.
Memory Management: có nhiệm vụ quản lý bộ nhớ.Device Management: có nhiệm vụ quản lý thiết bị.
File system Management: quản lý dữ liệu trên thiết bị lưu trữ (ổ cứng).Network Management: quản lý gói tin theo mơ hình TCP/IP.
System call interface: cung cấp dịch vụ sử dụng phần cứng cho các tiến trình.
<b>1.3.Quản lý thiết bị (Device management)</b>
Quản lý thiết bị bao gồm các “driver” và mỗi driver chịu trách nhiệm điều khiển,giám sát, trao đổi dữ liệu với một thiết bị.
Driver là một trình điều khiển có vai trị điều khiển, quản lý, giám sát một thực thể nào đó.Một thành phần phần cứng có thể được điều khiển bởi một driver hoặc được điều khiểnbởi một thành phần phần cứng khác có driver của thành phần phần cứng đó quản lý. Drivergồm các lệnh có chức năng giúp CPU tương tác với thiết bị như chuột, bàn phím... Tuynhiên các thiết bị này sẽ khơng được trực tiếp nối với CPU, do đó các thiết bị này sẽ đượckết nối với CPU thông qua 1 thiết bị khác được gọi là device controller và mỗi devicecontroller sẽ có driver của riêng mình. Đứng từ góc độ của CPU, bộ điều khiển cũng chỉ làmột thiết bị. Do đó, cần có driver hướng dẫn CPU làm việc với bộ điều khiển. Driver nàyđược gọi là bus driver. Còn driver hướng dẫn CPU làm việc với thiết bị thì được gọi làdevice driver.
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10"><i>Figure 3: Tương tác giữa thiết bị và driver</i>
Các device controller thông thường được kết nối với CPU thông qua đường bus(PCI, IDE, USB, SPI, …). Trong vi điều khiển, CPU và các device controller thường đượcthiết kế trên một chip. Điều này cho phép giảm kích thước và giá thành, phù hợp với pháttriển hệ thống nhúng. Mà về mặt ngun tắc, sẽ khơng có gì khác biệt đối lớn đối với cácdriver trên các hệ thống máy tính cá nhân
<b>1.3.1. Device driver</b>
Các bus driver cung cấp giao diện đặc tả cho các giao thức phần cứng tương ứng. Nónằm ở tầng dưới cùng trong mơ hình phân lớp phần mềm của hệ điều hành. Nằm trên nó làcác device driver thực sự để vận hành các thiết bị, mang đặc trưng của từng thiết bị xácđịnh. Ngoài ra, mục đích quan trọng của các driver thiết bị là cung cấp một giao diện trừutường hóa cho người sử dụng, tức là cung cấp một giao diện lên tầng trên của hệ điềuhành. Một cách tổng quan, một driver sẽ bao gồm 2 phần quan trọng: a) giao tiếp với thiếtbị (Device-specific) b) giao tiếp với hệ điều hành (OS-specific)
<b>1.3.2. Bus driver</b>
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">Bus driver cung cấp interface thể hiện cho các phần cứng tương ứng. Nó nằm ởtầng cuối cùng trong mơ hình phân lớp hệ điều hành. Dưới bus driver là hardware và trênnó là device driver.
Bus driver gồm 2 phần:
Protocol abstraction: Thành phần này che giấu đi sự phức tạp của các giaothức trên bus, cung cấp các dịch vụ cho device driver sử dụng. Ví dụ nhưđọc/ghi một thanh ghi nào đó của thiết bị.
Protocol specific: Thành phần này chứa các lệnh hướng dẫn CPU làm việc vớibộ điều khiển, giúp đọc/ghi dữ liệu trên bus. Nó cũng được xây dựng dựa trêndatasheet của bộ điều khiển.
Một trong những công việc quan trọng của hệ điều hành là quản lý các thiết bị I/O khácnhau bao gồm chuột, bàn phím, touch pad, ổ đĩa, bộ điều hợp màn hình, thiết bị USB, mànhình được ánh xạ bit, đèn LED, bộ chuyển đổi tương tự sang kỹ thuật số, Bật / công tắc tắt,kết nối mạng, I / O âm thanh, máy in ..
<b>Tại sao lại cần có I/O? </b>
Cần có hệ thống I / O để nhận yêu cầu I / O của ứng dụng và gửi đến thiết bị vật lý,sau đó nhận bất kỳ phản hồi nào từ thiết bị và gửi đến ứng dụng(Nói một cách khác: Thiếtbị đầu vào cung cấp đầu vào cho một máy tính, trong khi các thiết bị đầu ra cung cấp mộtcách cho một máy tính để dữ liệu đầu ra để giao tiếp với người dùng hoặc máy tính khác. I/ O thiết bị là một thiết bị với cả hai chức năng).Dựa vào lượng dữ liệu mỗi lần thiết bị traođổi với CPU, thiết bị được chia làm 3 loại:
<b>2.1.1. Thiết bị khối (Đĩa từ, băng từ) (block devices):</b>
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">
<i>Figure 4: Block devices</i>
+ là thiết bị mà trình điều khiển giao tiếp bằng cách gửi toàn bộ khối dữ liệu. Ví dụ, đĩacứng, máy ảnh USB, Disk-On-Key
+ tương ứng với các tập tin đặc biệt trong chế độ khối (Block Mode). Các tập tin nàytương ứng với các thiết bị ngoại vi có cấu trúc dạng khối như ổ đĩa, có kiểu truy cậpbằng cách cung cấp một số khối đọc hoặc ghi. Các thao tác nhập/xuất này được thựchiện thơng qua một vùng đệm (Buffer Cache) và có thể truy nhập trực tiếp tới từng khối(Block) trên thiết bị.
+ Thơng tin được lưu trữ có kích thước cố định và địa chỉ riêng. + Có thể đọc ghi một khối độc lập với khối khác.
+ Tồn tại thao tác định vị thông tin (seek).
<b>2.1.2. Thiết bị ký tự (Máy in, Bàn phím, chuột, ...)( Character devices):</b>
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">
<i>Figure 5: Character devices</i>
+ tương ứng với các tập tin đặc biệt trong chế độ kí tự (Character Mode): Các tập tinnày tương ứng với các thiết bị ngoại vi không có cấu trúc, chẳng hạn như các cổng songsong hoặc nối tiếp mà trên đó dữ liệu có thể được đọc và ghi theo từng byte hoặc dòngbyte.
+ Chấp nhận luồng ký tự, khơng có cấu trúc khối. + Khơng có thao tác định vị thơng tin.
<b>2.1.3. Thiết bị mạng (NIC card, Wifi chip): </b>
Lượng dữ liệu nhỏ nhất mà CPU và thiết bị trao đổi với nhau là một gói tin, gồm nhiều byte. Gói tin có kích thước không cố định. Thông thường, network device là các thiết bị mạng.
(Device – Independent software)
Đặt tên, bảo vệ, tổ chức khối, tổ chức bộđệm, cấp phát…
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">Chương trình điều khiển thiết bị (Devicesdriver)
Thiết lập các thanh ghi và kiểm tra trạngthái thiết bị
Chương trình kiểm sốt ngắt (Interrupthandles)
Thơng báo cho chương trình điều khiểnthiết bị khi thao tác nhập/xuất hoàn tấtPhần cứng (Hardware) Thực hiện thao tác nhập/xuất
<small>Table 1: </small><i>Tổ chức và chức năng hệ thống nhập xuất</i>
Ví dụ tiến trình người dùng muốn đọc một khối dữ liệu trên đĩa sẽ gửi yêu cầu nhập/xuấtđến chương trình nhập/xuất độc lập thiết bị. Chương trình này sẽ tìm kiếm trong bộ đệmnhập/xuất, nếu khối cần đọc chưa có trong bộ đệm, nó sẽ gọi chương trình điều khiển thiếtbị. Chương trình điều khiển thiết bị gửi yêu cầu đến đĩa cứng và tiến trình người dùng sẽtạm ngưng cho đến khi thao tác đọc đĩa hoàn tất, đĩa sẽ phát sinh một ngắt thông báo đãđọc xong, gửi tín hiệu ngắt cho chương trình kiểm sốt ngắt. Chương trình kiểm sốt ngắtghi nhận trạng thái của thiết bị và đánh thức tiến trình của người dùng để tiếp tục thựchiện.
<b>2.3.Các phương pháp điều khiển I/O</b>
<b>2.3.1. Điều khiển bằng chương trình (Programmed I/O)</b>
Nguyên tắc:
o CPU trực tiếp điều khiển I/O thơng qua chương trình của người lập trình.Các tín hiệu điều khiển I/O:
Tín hiệu điều khiển (Control) Kích hoạt và khởi động thiết bị ngoạivi
Tín hiệu kiểm tra (Test) Kiểm tra trạng thái thiết bị ngoại viTín hiệu điều khiển đọc (Read) CPU nhận dữ liệu từ thiết bị ngoại vi
thơng qua thanh ghi đệm dữ liệuTín hiệu điều khiển ghi (Write) Dữ liệu chuyển đến thiết bị ngoại vi
thông qua thanh ghi đệm và bus dữ liệu<small>Table 2 : </small><i>Tín hiệu điều khiển I/O và chức năng</i>
Hoạt động:
o CPU yêu cầu thao tác với thiết bị.
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">o CPU kiểm tra các bit trạng thái:
Nếu chưa sẵn sàng thì quay lại kiểm tra.Nếu sẵn sàng thì chuyển sang trao đổi dữ liệu.
Sau khi gửi yêu cầu I/O, CPU phải đợi trạng thái sẵn sàng của thiết bịmà không thực hiện một chương trình khác, do đó gây tiêu tốn thờigian của CPU.
<b>2.3.2. Điều khiển bằng ngắt (Interrupt Driven I/O)</b>
CPU phát sinh một lệnh I/O đến các thiết bị I/O, sau đó tiếp tục việc xử lý cho đếnkhi nhận được một ngắt từ thiết bị I/O báo là đã hoàn tất nhập xuất, CPU tạm ngưngviệc xử lý hiện tại để chuyển qua xử lý ngắt.
Các phương pháp nối ghép ngắto Sử dụng nhiều đường yêu cầu ngắt
Mỗi module I/O được nối với một đường yêu cầu ngắt.CPU phải có nhiều đường tín hiệu yêu cầu ngắt.Hạn chế số lượng module I/O.
Các đường ngắt được quy định mức ưu tiên.o Hỏi vòng bằng phần mềm
CPU thực hiệu hỏi lần lượt từng module I/O.
Thứ tự các module được hỏi vịng chính là thứ tự ưu tiên.o Hỏi vịng bằng phần cứng
CPU phát tín hiệu chấp nhận ngắt (INTA) đến module I/O đầu tiên.Nếu module I/O đó khơng gây ra ngắt thì nó gửi tín hiệu đến modulekế tiếp cho đến khi xác định được module gây ngắt.
Thứ tự các module I/O kết nối trong chuỗi xác định thứ tự ưu tiên.o Sử dụng bộ điều khiển ngắt lập trình được PIC
PIC có nhiều đường vào yêu cầu ngắt có quy định mức ưu tiên.PIC chọn một u cầu ngắt khơng bị cấm có mức ưu tiên cao nhất gửitới CPU.
<b>2.3.3. Truy cập bộ nhớ trực tiếp DMA (Direct Memory Access)</b>
Xét quá trình đọc đĩa : CPU gửi cho bộ điều khiển đĩa các thông số : địa chỉ trên đĩacủa khối, địa chỉ trong bộ nhớ RAM, số Byte cần đọc, sau đó CPU sẽ thực hiệncông việc khác. Bộ điều khiển sẽ đọc khối trên đĩa, từng bit cho đến khi toàn bộ
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">khối được đưa vào buffer của bộ điều khiển. Tiếp theo bộ điều khiển sẽ phát ra mộtngắt để báo cho CPU là đã hoàn tất. CPU lấy dữ liệu trong buffer chuyển vào RAMbằng cách tạo vịng lặp lần lượt từng byte ( lãng phí thời gian của CPU )
Bộ điều khiển có thêm khả năng truy xuất bộ nhớ trực tiếp (DMA) : Sau khi bộđiều khiển đọc toàn bộ dữ liệu từ thiết bị vào buffer thì bộ điều khiển sẽ chuyểnbyte đầu vào RAM tại địa chỉ được mô tả bởi địa chỉ bộ nhớ DMA. Sau đó nótăng địa chỉ DMA và giảm số bytes phải chuyển. Quá trình này lặp lại cho tớikhi số bytes phải chuyển bằng 0, và bộ điều khiển tạo một ngắt. Như vậy bộđiều khiển tự chuyển khối vào trong bộ nhớ chính RAM.
Các kiểu thực hiện DMA:
o Block - transfer DMA: DMAC(DMA Controller) sử dụng bus để truyền cảkhối dữ liệu.
o Cycle Stealing DMA: DMAC yêu cầu CPU treo tạm thời từng chu kỳ bus,DMAC chiếm bus thực hiện truyền một từ dữ liệu.
o Transparent DMA: DMAC nhận biết những chu kỳ nào CPU khơng sử dụngbus thì chiếm bus để trao đổi một từ dữ liệu.
<b>2.4.Giao tiếp thiết bị I/O với hệ điều hành</b>
o Sau khi hệ điều hành gửi yêu cầu ra thiết bị ngoại vị, hệ điều hành cần phảibiết thiết bị ngoại vi hoàn thành yêu cầu vào ra hay gặp lỗi. Điều này có thểthực hiện theo 2 phương pháp ngắt và thăm dò.
<b>2.4.1. Ngắt (I/O interrupts): </b>
Interrupt I/O là một quá trình truyền dữ liệu (data transfer) trong đó thiết bị gắn ngồi (external device) hoặc thiết bị ngoại vi (peripheral) thơng báo cho CPU rằng nó đã sẵn sàng để giao tiếp và yêu cầu sự chú ý của CPU.
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">• Đây là cách đơn giản nhất để thiết bị I/O giao tiếp với bộ xử lý. Qúa trình kiểmtra trong một khoảng thời gian nhất định của thiết bị để xem đã đến lúc cho I/Ooperation tiếp theo hay chưa. I/O device chỉ cần đưa thông tin vào thanh ghi trạngthái và bộ xử lí (CPU) phải đến và lấy thơng tin.
• Polling là một giao thức thông báo cho CPU rằng một thiết bị cần được chú ý.Không giống như trong ngắt, nơi thiết bị nói với CPU rằng nó cần CPU xử lý,trong thăm dò CPU giữ hỏi thiết bị I/O có cần CPU xử lý hay khơng.
• CPU liên tục kiểm tra từng thiết bị gắn với nó để phát hiện xem có thiết bị nàocần CPU chú ý hay khơng. Mỗi thiết bị có một sẵn sàng ra lệnh bit cho biết trạngthái của thiết bị đó, tức là nó có một số lệnh được CPU thực thi hay khơng. • Nếu bit lệnh được đặt 1, sau đó nó có một số lệnh để được thực thi khác nếu bit 0,
thì nó khơng có lệnh. Nếu bit bận được thiết lập 1, thì nó đang bận thực hiện lệnhcủa một số thiết bị, cịn lại thì 0.
<b>2.5.Chuyển yêu cầu I/O thành các hoạt động phần cứng</b>
Người dùng yêu cầu dữ liệu bằng cách sử dụng tên tệp, cuối cùng phải được ánhxạ tới các khối dữ liệu từ một thiết bị cụ thể được quản lý bởi trình điều khiển thiết bị.
• Linux sử dụng <i><b>bảng mount </b></i>để ánh xạ các tiền tố tên tệp (ví dụ /usr) tới các thiếtbị được gắn kết cụ thể. Trong trường hợp nhiều mục nhập trong bảng gắn kếtkhớp với các tiền tố khác nhau của tên tệp thì mục nhập khớp với tiền tố dài nhấtsẽ được chọn (ví dụ /usr/home thay vì /usr trong đó cả hai đều tồn tại trong bảngmount và cả hai đều khớp với tệp mong muốn).
• Linux sử dụng các <i><b>tệp thiết bị</b></i> đặc biệt, thường nằm trong /dev, để đại diện vàtruy cập trực tiếp vào các thiết bị vật lý. o Mỗi tệp thiết bị có một số chính và phụđược liên kết với nó, được lưu trữ và hiển thị ở nơi kích thước tệp thường đi.
+ Số thiết bị chính là một chỉ mục trong một bảng trình điều khiển thiết bị vàcho biết trình điều khiển thiết bị nào xử lý thiết bị này (ví dụ: trình xử lý ổ đĩa).
+ Số thiết bị phụ là một tham số được chuyển cho trình điều khiển thiết bị vàcho biết thiết bị cụ thể nào sẽ được truy cập, trong số nhiều thiết bị có thể
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">được xử lý bởi trình điều khiển thiết bị cụ thể (ví dụ: một ổ đĩa hoặc phânvùng cụ thể).
Ví dụ hình dưới đây sẽ mơ tả chu kỳ điển hình của một yêu cầu đọc chặn, cho thấy rằngmột hoạt động I/O đòi hỏi nhiều bước cùng nhau tiêu tốn một số lượng lớn các chu kỳCPU.
</div>