Đại học Bách Khoa TP. HCM, Khoa KH & KTMT
Bài thực hành số 13
Môn: Hệ điều hành
Phương-Duy Nguyễn
Email:
Ngày 24 tháng 11 năm 2016
1
Mục lục
1 Giới thiêu
2 Cơ sở lý thuyết
2.1 I/O subsystem . . . . . . .
2.2 I/O hardware . . . . . . . .
2.3 Cấu trúc bus trong PC . . .
2.4 Các ký thuật thực hiện I/O
3 Nội
3.1
3.2
3.3
3
.
.
.
.
4
4
4
4
4
dung thực hành
Xem xét cầu trúc trong PC . . . . . . . . . . . . . . . . . . . . . . . . . .
Xem xét I/O bus tiêu biểu USB . . . . . . . . . . . . . . . . . . . . . . . .
Xem xét I/O device tiêu biểu pcnet32 . . . . . . . . . . . . . . . . . . . .
7
7
8
9
4 Bài tập
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
2
1 Giới thiêu
Mục tiêu Bài thực hành giúp sinh viên làm rõ các khái niệm lý thuyết về thành phần
điểu khiển thiết bị I/O
Nội dung Sinh viên được thí nghiệm các nội dung như sau
• Giới thiệu về tổ chức thiết bị trong hệ thống minh họa qua ví dụ PC.
• Xem xét cấu trúc driver quản lý bus trên hệ thống.
• Xem xét cấu trúc driver quản lý thiết bị
Kêt quả đạt được
Sau khi thực hiện thí nghiệm, sinh viên có thể
• Hiểu được cách HĐH quản lý hệ thống các thiết bị I/O;
• Vận dung để định nghĩa các tác vụ cho một thiết bị và I/O subsystem
• Thiết kế và hiện thực giao tiếp cho một chương trình quản lý thiết bị.
3
2 Cơ sở lý thuyết
2.1 I/O subsystem
Các thiết bị I/O khác biệt về chức năng tốc độ... nên cần các phương thức quản lý và
điểu khiển khác nhau. Các I/O subsystem được thiết kế hỗ trợ riêng cho từng nhóm
thiết bị với các đặc thù riêng. Triết lý thiết kế: (i) phải hướng đến việc hỗ trợ cho một
phạm vi thiết bị lớn bao gồm cả các thiết bị mới dùng cho hệ thống hiện tại (ii) phat
triển thiết kế cho thiết bị hoàn toàn mới mà giao diện sử dụng hiện tại không phù hợp
để ưng dụng.
Để đảm bảo triết lý thuyết kế, thì các trình điểu khiển thiết bị (device driver) cung cấp
cho I/O subsystem một giao diện thuần nhất để truy cập các thiết bị.
2.2 I/O hardware
Phần cứng kết nối
: kết nối giữa hệ thống máy tính và các thiết bị I/O có hai dạng:
• Port
• Bus
Phần cứng điều khiển : là thiết bị phần cứng giao tiếp giữa hệ thống máy tính và
phần cứng thiết bị.
• Controller: SCSI host adapter, memory controller..
Phần cứng giao tiếp :
• I/O port: dùng lệnh I/O để tác động lên các thanh ghi dữ liệu/trạng thái/lệnh
của controller.
• Memory-mapped I/O
2.3 Cấu trúc bus trong PC
2.4 Các ký thuật thực hiện I/O
Phần cứng kết nối
: kết nối giữa hệ thống máy tính và các thiết bị I/O có hai dạng:
• Polling (programmed I/O): kiểm tra trạng thái thiết bi khi muốn thực hiện I/O.
Tiêu tốn vòng lặp để kiểm tr trạng thái (busy-wait)
• Interrupt-driver I/O: CPU có ngõ Interrupt request (IR), khi có ngắt xảy ra CPU
chuyển quyền điều khiển cho chương trình sử dụng ngăt (interrupt handler). Hệ
thống có một bảng vector ngắt chứa địa chỉ các trình phục vụ ngắt (interrupt
handler)
4
CPU
Graphics
card slot
Clock
Generator
Front-side
bus
Chipset
High-speed
graphics bus
LAGP or PCI
Expressf
Memory Slots
Northbridge
Memory
bus
(memory
controller hub)
Internal
Bus
Southbridge
PCI
Bus
(I/O controller
hub)
IDE
SATA
USB
Ethernet
Audio Codec
CMOS Memory
Cables and
ports leading
off-board
PCI Slots
LPC
Bus
Flash ROM
(BIOS)
Super I/O
Serial Port
Parallel Port
Floppy Disk
Keyboard
Mouse
5
Hình 2.1: Đơn vị lưu trữ vật lý parition và block
Hình 2.2: Đơn vị lưu trữ vật lý parition và block
6
3 Nội dung thực hành
3.1 Xem xét cầu trúc trong PC
để tiến hành cấu trúc, thiết bị cần cài đặt các công trụ hỗ trợ truy vấn thông tin cài đặt
do hệ điều hành quản lý. Thông tin này được hệ điều hành cập nhật khi có một thiết bị
được gắn vào trong hệ thống (hotplug) hoặc được hệ thống detect (built-in) thông qua
hoạt động probe, đây là thao tác (operation) do nhà sản xuất (vendor chuẩn bị).
$ sudo lshw
Các thông tin thiết bị được sắp xếp theo bus như trong cấu trúc đề cập ở lý thuyết, cụ
thể:
|− c o r e : motherboard I n t e l 440BX r e f e r e n c e
|− f i r m w a r e : Phoenix BIOS
|−cpu : I n t e l (R) Core (TM) i 3
|− c a c h e : L1 16KB
|−memory : 512MiB
|−bank0 : s i z e 512MiB width : 3 2 b i t
|−bank : 1 [ empty ]
|− p c i : width 32− b i t c l o c k : 3 3MHz
|− p c i 0 : c l o c k : 6 6 Mhz p c i bus_master
|− i s a : c l o c k : 3 3 Mhz i s a bus_master
|− i d e : c l o c k 33Mhz d r i v e r=a t a _ p i i x l a t e n c y =64
|− b r i d g e : UNCLAIMED
|− g e n e r i c : width : 6 4 b i t c l o c k : 3 3 Mhz msi msix bus_master
|− d i s p l a y : UNCLAIMED
|− s c s i : UNCLAIMED
|− p c i 1 : width : 3 2 b i t c l o c k 33MHz
|− usb0 : width : 3 2 b i t c l o c k 33MHz d r i v e r=uhci_hcd l a t e n c y =64
|− network : width : 3 2 b i t c l o c k 33MHz d r i v e r=p c n e t 3 2
|− multimedia UNCLAIMED
|− usb1 : width : 3 2 b i t c l o c k 33MHz d r i v e r=e h c i −p c i
|− p c i : 2
|− p c i : 3
| −...
|− s c s i 0 : l o g i c a l n a m e : / dev / sda s i z e : 5 1 2MiB p a r t i t i o n e d : dos
|− volume : e x t 4 l o g i c a l n a m e : / dev / sda1
|− s c s i 1 : DVD−RAM w r i t e r l o g i c a l n a m e / dev /cdrom / dev /dvd . . .
|− r e m o t e a c c e s s
|− network : DISABLE d r i v e r=dummy d r i v e r v e r s i o n =1.0
Trong đó chúng ta có thể thấy một số thông tin về chương trình điều khiển thiết bị
(device driver):
• Nhóm thiết bị bus: pci, uhci, ehci
7
• Nhóm thiêt bị đầu cuối: pcnet32, dummy, atta_piix
Thông tin đầy đủ hơn 260 (loại) thiết bị Linux hỗ trợ được liệt kê ở danh sách tài liệu
tham khảo của kernel Document/devices.txt
1. (char) Memory devices
2. (block) RAM disk
3. (char) Pseudo-TTY masters
4. (block) Floppy disks
5. (char) Pseudo-TTY slaves
6. (block) IDE harddisk/CD-ROM interface
7. ...
3.2 Xem xét I/O bus tiêu biểu USB
gồm uhci, ehci... được tổ chức theo dạng bus. Các thao tác chủ yếu là probe và poll
trên thông tin danh sach ID thiết bị nằm ở hàm polling trong drivers/usb/core/hcd.c
usb_hcd_poll_rh_status() (rh=root hub, hcd=host controller device).
Viêc cài đặt driver khai báo cấu trúc pci_driver chứa danh sách các con trỏ hàm đến
các thao các cơ bản: probe/remove/shutdown
# Trace i n f o from Linux / d r i v e r s / usb / h o s t / e h c i −p c i . c
|− s t r u c t p c i _ d r i v e r e h c i _ p c i _ d r i v e r
Command : modeproble e h c i −hcd
|− . p r o b l e = ehci_pci_probe ( r e c a l l usb_hcd_pci_probe )
|−hcd−>r s r c _ s t a r t=p c i _ r e s o u r c e _ s t a r t
|−hcd−>r s r c _ l e p c _ r e s o u r c e _ l e n
|−hcd−>r e g s=ioremap ( r s r c _ s t a r t , r s r c _ l e n )
|− dev_set_drvdata(&dev−>dev , hcd )
|− for_each_companion ( dev , hcd , ehci_post_add )
/∗ I t e r a t e o v e r PCI d e v i c e s in t h e same s l o t a s pdev and c a l l f n f o r e
/∗ Companion d e v i c e s h o u l d be e i t h e r UHCI , OHCI o r EHCI h o s t ∗/
|− . remove = ehci_pci_remove
|− . shutdown = ush_hcd_pci_shutdown
|− . d r i v e r = usb_hcd_pci_pm_ops #(PM=power management )
| −. suspend = hcd_pci_suspend ,
| −. suspend_noirq = hcd_pci_suspend_noirq ,
| −. resume_noirq = hcd_pci_resume_noirq ,
| −. resume = hcd_pci_resume ,
| −. f r e e z e = check_root_hub_suspended ,
| −. f r e e z e _ n o i r q = check_root_hub_suspended ,
| −. thaw_noirq = NULL,
8
| −. thaw = NULL,
| −. p o w e r o f f = hcd_pci_suspend ,
| −. p o w e r o f f _ n o i r q = hcd_pci_suspend_noirq ,
| −. r e s t o r e _ n o i r q = hcd_pci_resume_noirq ,
| −. r e s t o r e = hcd_pci_restore ,
| −. runtime_suspend = hcd_pci_runtime_suspend ,
| −. runtime_resume = hcd_pci_runtime_resume ,
3.3 Xem xét I/O device tiêu biểu pcnet32
Các thiết bị đàu cuối cùng chia sẻ các thao tác cơ bản probe/remove/shutdown
# Tracing i n f o from Linux / d r i v e r s / n e t / e t h e r n e t /amd/ p c n e t 3 2 . c
s t a t i c s t r u c t pci_driver pcnet32_driver = {
| −. name = DRV_NAME,
| −. probe = pcnet32_probe_pci ,
| −. remove = __devexit_p ( pcnet32_remove_one ) ,
| −. i d _ t a b l e = pcnet32_pci_tbl ,
| −. suspend = pcnet32_pm_suspend ,
| −. resume = pcnet32_pm_resume ,
};
Các thao tác (ops) giao tiếp với các I/O subsystem do driver cung cấp khai báo trong
một cấu trúc net_device_ops. Chi tiết đầy đủ về các operation hỗ trợ bởi hệ thống khai
báo tại include/linux/netdevice.h
# Tracing i n f o from Linux / d r i v e r s / n e t / e t h e r n e t /amd/ p c n e t 3 2 . c
s t a t i c c o n s t s t r u c t net_device_ops pcnet32_netdev_ops = {
| −. ndo_open = pcnet32_open ,
| −. ndo_stop
= pcnet32_close ,
| −. ndo_start_xmit = pcnet32_start_xmit ,
| −. ndo_tx_timeout = pcnet32_tx_timeout ,
| −. ndo_get_stats = pcnet32_get_stats ,
| −. n d o _ s e t _ m u l t i c a s t _ l i s t = p c n e t 3 2 _ s e t _ m u l t i c a s t _ l i s t ,
| −. ndo_do_ioctl = p c n e t 3 2 _ i o c t l ,
| −. ndo_change_mtu = eth_change_mtu ,
| −. ndo_set_mac_address = eth_mac_addr ,
| −. ndo_validate_addr = eth_validate_addr ,
#i f d e f CONFIG_NET_POLL_CONTROLLER
| −. n d o _ p o l l _ c o n t r o l l e r = p c n e t 3 2 _ p o l l _ c o n t r o l l e r ,
#e n d i f
};
Các I/o Subsystem gọi lại các giao tiếp này
9
# Tracing i n f o from n e t / c o r e / n e t p o l l . c
v o i d netpoll_send_skb_on_dev ( s t r u c t n e t p o l l ∗np , s t r u c t sk_buff ∗ skb ,
s t r u c t n e t _ d e v i c e ∗ dev
|− n e t p o l l _ p o l l _ d e v
10
4 Bài tập
Hướng dẫn bài tập Sinh viên thực hiện BT1 và BT2. Đây là các thao tác cơ bản sử
dụng công cụ để trích xuất thông tin quản lý đãi cứng/thư mục/file. BT3 là bài tập mở
rộng thực hiện tracing driver từ vfs subsystem to driver ata_piix
BT1 (3 điểm) Sinh viên thực hiện thao tác xem thông tin tập tin trên bus PC
BT2 (3 điểm) Sinh viên thực hiện thao tác xem thông tin driver bus usb và pcnet32
BT3 (4 điểm) Sinh viên thực hiện thao tác trích xuất thông tin và giao tiếp trên driver
ata_piix
BT4 (Mở rộng) Sinh viên thiết kế một driver cho một device mới và đặc tả các giao
tiếp từ I/O subsystem đến device driver operations (ops). Loại thiết bị và bus kết nối
do sinh viên tùy chọn.
11