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ị IO 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ị IO; • Vận dung để định nghĩa các tác vụ cho một thiết bị và IO 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ị.
Đạ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: duynguyen@cse.hcmut.edu.vn Ngày 24 tháng 11 năm 2016 Mục lục Giới thiêu Cơ sở lý thuyết 2.1 I/O subsystem 2.2 I/O hardware 2.3 Cấu trúc bus PC 2.4 Các ký thuật thực I/O Nội 3.1 3.2 3.3 4 4 dung thực hành Xem xét cầu trúc PC Xem xét I/O bus tiêu biểu USB Xem xét I/O device tiêu biểu pcnet32 7 Bài tập 11 Giới thiêu Mục tiêu Bài thực hành giúp sinh viên làm rõ khái niệm lý thuyết thành phần điểu khiển thiết bị I/O Nội dung Sinh viên thí nghiệm nội dung sau • Giới thiệu tổ chức thiết bị hệ thống minh họa qua ví dụ PC • Xem xét cấu trúc driver quản lý bus hệ thống • Xem xét cấu trúc driver quản lý thiết bị Kêt đạt Sau thực thí nghiệm, sinh viên • Hiểu cách HĐH quản lý hệ thống thiết bị I/O; • Vận dung để định nghĩa tác vụ cho thiết bị I/O subsystem • Thiết kế thực giao tiếp cho chương trình quản lý thiết bị Cơ sở lý thuyết 2.1 I/O subsystem Các thiết bị I/O khác biệt chức tốc độ nên cần phương thức quản lý điểu khiển khác Các I/O subsystem thiết kế hỗ trợ riêng cho nhóm thiết bị với đặc thù riêng Triết lý thiết kế: (i) phải hướng đến việc hỗ trợ cho phạm vi thiết bị lớn bao gồm thiết bị dùng cho hệ thống (ii) phat triển thiết kế cho thiết bị hoàn toàn mà giao diện sử dụng không phù hợp để ưng dụng Để đảm bảo triết lý thuyết kế, trình điểu khiển thiết bị (device driver) cung cấp cho I/O subsystem giao diện để truy cập thiết bị 2.2 I/O hardware Phần cứng kết nối : kết nối hệ thống máy tính thiết bị I/O có hai dạng: • Port • Bus Phần cứng điều khiển : thiết bị phần cứng giao tiếp hệ thống máy tính 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 ghi liệu/trạng thái/lệnh controller • Memory-mapped I/O 2.3 Cấu trúc bus PC 2.4 Các ký thuật thực I/O Phần cứng kết nối : kết nối hệ thống máy tính thiết bị I/O có hai dạng: • Polling (programmed I/O): kiểm tra trạng thái thiết bi muốn thực 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), có ngắt xảy 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ó bảng vector ngắt chứa địa trình phục vụ ngắt (interrupt handler) 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 Hình 2.1: Đơn vị lưu trữ vật lý parition block Hình 2.2: Đơn vị lưu trữ vật lý parition block Nội dung thực hành 3.1 Xem xét cầu trúc PC để tiến hành cấu trúc, thiết bị cần cài đặt công trụ hỗ trợ truy vấn thông tin cài đặt hệ điều hành quản lý Thông tin hệ điều hành cập nhật có thiết bị gắn vào hệ thống (hotplug) hệ thống detect (built-in) thông qua hoạt động probe, thao tác (operation) nhà sản xuất (vendor chuẩn bị) $ sudo lshw Các thông tin thiết bị xếp theo bus 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 |− c a c h e : L1 16KB |−memory : 512MiB |−bank0 : s i z e 512MiB width : b i t |−bank : [ empty ] |− p c i : width 32− b i t c l o c k : 3MHz |− p c i : c l o c k : 6 Mhz p c i bus_master |− i s a : c l o c k : 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 : b i t c l o c k : 3 Mhz msi msix bus_master |− d i s p l a y : UNCLAIMED |− s c s i : UNCLAIMED |− p c i : width : b i t c l o c k 33MHz |− usb0 : width : 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 : b i t c l o c k 33MHz d r i v e r=p c n e t |− multimedia UNCLAIMED |− usb1 : width : 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 : |− p c i : | − |− s c s i : l o g i c a l n a m e : / dev / sda s i z e : 2MiB p a r t i t i o n e d : dos |− volume : e x t l o g i c a l n a m e : / dev / sda1 |− s c s i : 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 thấy số thông tin chương trình điều khiển thiết bị (device driver): • Nhóm thiết bị bus: pci, uhci, ehci • Nhóm thiêt bị đầu cuối: pcnet32, dummy, atta_piix Thông tin đầy đủ 260 (loại) thiết bị Linux hỗ trợ liệt kê danh sách tài liệu tham khảo kernel Document/devices.txt (char) Memory devices (block) RAM disk (char) Pseudo-TTY masters (block) Floppy disks (char) Pseudo-TTY slaves (block) IDE harddisk/CD-ROM interface 3.2 Xem xét I/O bus tiêu biểu USB gồm uhci, ehci tổ chức theo dạng bus Các thao tác chủ yếu probe poll thông tin danh sach ID thiết bị nằm hàm polling 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 trỏ hàm đến thao 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, | − 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 chia sẻ thao tác 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 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 I/O subsystem driver cung cấp khai báo cấu trúc net_device_ops Chi tiết đầy đủ operation hỗ trợ hệ thống khai báo 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 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 _ s e t _ m u l t i c a s t _ l i s t , | − ndo_do_ioctl = p c n e t _ 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 _ 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 giao tiếp # 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 Bài tập Hướng dẫn tập Sinh viên thực BT1 BT2 Đây thao tác sử dụng công cụ để trích xuất thông tin quản lý đãi cứng/thư mục/file BT3 tập mở rộng thực tracing driver từ vfs subsystem to driver ata_piix BT1 (3 điểm) Sinh viên thực thao tác xem thông tin tập tin bus PC BT2 (3 điểm) Sinh viên thực thao tác xem thông tin driver bus usb pcnet32 BT3 (4 điểm) Sinh viên thực thao tác trích xuất thông tin giao tiếp driver ata_piix BT4 (Mở rộng) Sinh viên thiết kế driver cho device đặc tả giao tiếp từ I/O subsystem đến device driver operations (ops) Loại thiết bị bus kết nối sinh viên tùy chọn 11 [...]... 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à pcnet 32 BT3 (4 điểm) Sinh viên thực hiện... hiện thao tác xem thông tin driver bus usb và pcnet 32 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