1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo Cáo Cuối Kỳ Quản Lý Thiết Bị Io Trong Linux Usb Keyboard Driver.pdf

36 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘIVIỆN ĐIỆN TỬ - VIỄN THÔNG

-BÁO CÁO CUỐI KỲ

QUẢN LÝ THIẾT BỊ I/O TRONG LINUX USB KEYBOARD DRIVER

Giảng viên hướng dẫn: TS Nguyễn Thanh BìnhMã lớp: 137325

Nhóm sinh viên thực hiện: Nhóm 13

Trịnh Xuân Việt 20193194Nguyễn Đức Khôi 20192942

Hà Nội, 16/12/2022

Trang 2

Chương 1: Tổng quan về Linux 7

1.1. Giới thiệu tổng quan về Linux 7

1.1.1.Lịch sử phát triển của hệ điều hành Linux 7

1.1.2.Ưu và nhược điểm của hệ điều hành Linux 7

1.1.3.Kiến trúc của hệ điều hành Linux 8

1.2. Giới thiệu về Linux Kernel 8

1.3. Quản lý thiết bị (Device management) 9

1.3.1.Device driver 10

1.3.2.Bus driver 10

Chương 2: Hệ thống I/O 11

2.1. Phân loại các thiết bị I/O 11

2.1.1.Thiết bị khối (Đĩa từ, băng từ) (block devices): 11

2.1.2.Thiết bị ký tự (Máy in, Bàn phím, chuột, )( Character devices): 12

2.1.3.Thiết bị mạng (NIC card, Wifi chip): 13

2.2. Tổ chức các hệ thống nhập/xuất và chức năng 13

2.3. Các phương pháp điều khiển I/O 14

2.3.1.Điều khiển bằng chương trình (Programmed I/O) 14

2.3.2.Điều khiển bằng ngắt (Interrupt Driven I/O) 15

2.3.3.Truy cập bộ nhớ trực tiếp DMA (Direct Memory Access) 15

2.4. Giao tiếp thiết bị I/O với hệ điều hành 16

2.4.1.Ngắt (I/O interrupts): 16

2.4.2.Xử lý ngắt: 16

2.4.3.Thăm dò (polling): 16

2.5. Chuyển yêu cầu I/O thành các hoạt động phần cứng 17

Chương 3: Driver cho thiết bị USB 19

3.1. Tổng quan giao thức USB 20

3.1.1.Chuẩn tín hiệu 20

3.1.2.Mô hình mạng 21

Trang 3

3.1.3.Các thành phần cơ bản của giao thức USB 22

3.2. Mô hình phân lớp hệ thống USB trên Linux 23

3.3. Kịch bản hoạt động 25

3.3.1.Hoạt động trong phần cứng 25

3.3.2.Hoạt động trong kernel 26

Chương 4: Driver cho bàn phím USB 30

4.1. Các bước viết Driver cho một thiết bị USB 30

4.2. Viết một USB Driver cơ bản và nạp driver vào hệ thống 30

4.3. Makefile 35

4.4. Viết driver cho bàn phím USB 39

4.4.1Khung chương trình 39

4.4.2Các thư viện sử dụng trong chương trình 41

4.4.3Bảng dữ liệu điều khiển bàn phím 41

4.4.4Hàm thăm dò thiết bị probe 42

4.4.5Hàm ngắt 45

4.4.6Khởi tạo driver 47

4.4.7Giải phóng tài nguyên 52

4.5. Chương trình tầng User 53

KẾT LUẬN 0

Tài liệu tham khảo 0

Trang 4

DANH MỤC HÌNH VẼ, BẢNG BIỂUHÌNH VẼ:

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

Trang 5

DANH MỤC TỪ VIẾT TẮT

CPU Central Processing Unit Bộ xử lý trung tâm

DMA Direct Memory Access Truy cập bộ nhớ trực tiếp

HOẠT ĐỘNG NHÓMPhân công nhiệm vụ

1 Nguyễn Thế Huy 2 Trịnh Xuân Việt 3 Nguyễn Đức Khôi 4 Lê Minh Khải

Môi trường trao đổi hoạt động nhóm: Internet

• 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, …

Trang 6

Lời mở đầu

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 quá 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 quát 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 TS Nguyễn Thanh Bình đã định hướng đề tài và giúp đỡ chúng em hoàn thànhbáo cáo này.

Trang 7

Chương 1: Tổng quan về Linux1.1.Giới thiệu tổng quan về Linux

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 toá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.

1.1.1 Lịch sử phát triển của hệ điều hành Linux

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.

1.1.2 Ưu và nhược điểm của hệ điều hành Linux

Ư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.

Trang 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ó.

1.1.3 Kiến trúc của hệ điều hành Linux

Figure 1 : Kiến trúc của hệ điều hành Kernel

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, …

1.2.Giới thiệu về Linux Kernel

Trang 9

Figure 2 : Kiến trúc của Linux kernel

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.

1.3.Quản lý thiết bị (Device management)

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.

Trang 10

Figure 3: Tương tác giữa thiết bị và driver

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 nguyên 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

1.3.1 Device driver

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)

1.3.2 Bus driver

Trang 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.

Chương 2: Hệ thống I/O2.1.Phân loại các thiết bị I/O

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

Tại sao lại cần có I/O?

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:

2.1.1 Thiết bị khối (Đĩa từ, băng từ) (block devices):

Trang 12

Figure 4: Block devices

+ 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).

2.1.2 Thiết bị ký tự (Máy in, Bàn phím, chuột, )( Character devices):

Trang 13

Figure 5: Character devices

+ 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.

2.1.3 Thiết bị mạng (NIC card, Wifi chip):

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…

Trang 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 soá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

Table 1: Tổ chức và chức năng hệ thống nhập xuất

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 soát ngắt Chương trình kiểm soá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.

2.3.Các phương pháp điều khiển I/O

2.3.1 Điều khiển bằng chương trình (Programmed I/O)

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ệuTable 2 : Tín hiệu điều khiển I/O và chức năng

Hoạt động:

o CPU yêu cầu thao tác với thiết bị.

Trang 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.

2.3.2 Điều khiển bằng ngắt (Interrupt Driven I/O)

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 yêu cầu ngắt không bị cấm có mức ưu tiên cao nhất gửitới CPU.

2.3.3 Truy cập bộ nhớ trực tiếp DMA (Direct Memory Access)

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ộ

Trang 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.

2.4.Giao tiếp thiết bị I/O với hệ điều hành

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ò.

2.4.1 Ngắt (I/O interrupts):

Interrupt I/O là một quá trình truyền dữ liệu (data transfer) trong đó thiết bị gắn ngoà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.

Trang 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.

2.5.Chuyển yêu cầu I/O thành các hoạt động phần cứng

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 bảng mount để á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 tệp thiết bị đặ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ể

Trang 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

Ngày đăng: 13/06/2024, 09:28