Bài giảng Hệ điều hành - Chương 4: Hệ điều hành Linux
Lịch sửLinux
n Nguyên tắc thiết kế
n Lập trình Kernel Modules
n Quản lý quá trình
n Định thời
n Quản lý bộnhớ
n Hệthống file
n Hệthống xuất nhập (I/O)
n Truyền thông liên quá trình
n Cấu trúc mạng
n Bảo mật
thi một chương trình mới, tiến trình được cho một không gian địa chỉ ảo mới hoàn toàn rỗng; các thủ tục tải chương trình đưa các region bộ nhớ ảo đến trú ở không gian địa chỉ này n Tạo một tiến trình mới với fork bao gồm việc tạo một bản sao đầy đủ của không gian địa chỉ ảo của tiến trình đang có l Kernel sao chép VMA descriptors của tiến trình cha, sau đó tạo một tập hợp page table cho tiến trình con l Page tables của tiến trình cha được sao chép trực tiếp vào con, với reference count của mỗi trang được che giấu được tăng lên l Sau fork, tiến trình cha và con chia sẻ cùng những trang bộ nhớ vật lý trong không gian địa chỉ của chúng 21.42 Bộ Nhớ Ảo (tt) n Hệ thống VM paging di chuyển các trang bộ nhớ từ bộ nhớ chính ngoài ra ngoài bộ nhớ khi bộ nhớ được cần cho thứ gì khác n Hệ thống VM paging có thể được chia làm hai phần: l Giải thuật pageout-policy quyết định khi nào và trang nào được ghi ra ngoài đĩa l Cơ chế thực sự thực hiện việc di chuyển, và page dữ liệu trở lại vào bộ nhớ vật lý khi cần 21.43 Bộ Nhớ Ảo (tt) n Linux kernel duy trì một vùng (region) không đổi không phụ thuộc kiến trúc gồm không gian địa chỉ ảo của mỗi tiến trình cho việc sử dụng bên trong nó n Khu vực (area) bộ nhớ ảo này gồm hai vùng (region) : l Một area tĩnh chứa các page table references cho mỗi trang vật lý bộ nhớ sẵn dùng trong hệ thống, do đó có một sự chuyển đổi đơn giản từ địa chỉ vật lý sang ảo khi chạy mã kernel l Reminder của phân đoạn dự trữ không được dự trữ cho một mục đích xác định nào; các page-table entry của nó có thể được thay đổi trỏ tới bất cứ khu vực (area) nào của bộ nhớ 21.44 Thực Thi và Tải Chương Trình Người Dùng n Linux duy trì một bản các hàm để tải chương trình; nó cho mỗi hàm cơ hội để tải file được cho khi có một lời gọi hệ thống n Việc đặng ký các thủ tục đa loader cho phép Linux hỗ trợ cả các định dạng nhị phân ELF và a.out n Ban đầu, các trang binary-file được map vào bộ nhớ ảo l Chỉ khi một chương trình cố truy cập một trang cho trước thì mới tạo ra một lỗi trang trong trang đang được tải vào bộ nhớ vật lý n Một file định dạng nhị phân ELF chứa một header theo sau bởi vài phân đoạn (section) page-aligned l ELF loader làm việc bằng cách đọc header và map các phân đoạn của file vào các region riêng biệc của bộ nhớ ảo 21.45 Bố Trí Bộ Nhớ cho Chương Trình ELF 21.46 Liên Kết Tĩnh và Động n Một chương trình có các hàm thư viện ghi trực tiếp trong file thực thi nhị phân của chương trình thì liên kết tĩnh (statically) với các thư viện của nó n Điểm bất lợi duy nhất của liên kết tĩnh là mỗi chương trình tạo ra phải sao chép chính xác các hàm thư viện giống nhau n Liên kết động (dynamic) hiệu quả hơn về cả sử dụng bộ nhớ vật lý lẫn không gian đĩa vì nó tải các thư việc hệ thống vào bộ nhớ chỉ một lần 21.47 Các Hệ Thống File n Với người dùng, hệ thống file của Linux có vẻ như là một cây thư mục có cấp bậc tuân theo UNIX semantics n Bên trong, kernel giấu các chi tiết hiện thực và quản lý nhiều hệ thống file khác nhau thông qua một lớp trừu tượng, đó là, hệ thống file ảo virtual file system (VFS) n Linux VFS được thiết kế quanh các nguyên tắc hướng đối tượng và gồm có hai thành phần : l Một tập hợp các định nghĩa xác định một file object (được cho phép) trông như thế nào Các cấu trúc Inode-object và file-object biểu diễn các file riêng biệc file system object biểu diễn cả một hệ thống file l Một lớp phần mềm để thao tác các đối tượng này 21.48 Hệ Thống File Ext2fs của Linux n Ext2fs dùng một cơ chế tương tự của BSD Fast File System (ffs) cho việc định vị các block dữ liệu tới một file xác định n Khác biệt chính giữa ext2fs và ffs liên quan tới cách cấp phát đĩa của chúng l Trong ffs, đĩa được cấp phát tới file theo block 8Kb, với các block được chia nhỏ thành các phân mảnh 1Kb để lưu trữ các file nhỏ hay các block được làm đầy một phần ở cuối file l Ext2fs không dùng phân mảnh; nó thực hiện cấp phát với các đơn vị nhỏ hơn Kích thước block mặc định trong ext2fs là 1Kb, mặc dù block 2Kb và 4Kb cũng được hỗ trợ l Ext2fs dùng các cách cấp phát được thiết kế để đặt các block kề luận lý của một file vào các block kề vật lý trên đĩa, do đó nó có thể chấp nhận một yêu cầu I/O cho vài block đĩa như một thao tác đơn 21.49 Ext2fs các Cách Cấp Phát Block 21.50 Hệ Thống File Proc của Linux n Hệ Thống file proc không lưu trữ dữ liệu, mà, nội dung của nó được tính toán theo yêu cầu theo các yêu cầu file I/O người dùng n proc phải hiện thực một cấu trúc thư mục, và nội dung file trong đó; sau đó nó phải xác định một inode number duy nhất và bền vững cho mỗi thư mục và file trong đó l Nó sử dụng inode number này để xác định thao tác nào cần thiết khi một người dùng cố đọc từ một file đặc biệt hay thực hiện tìm kiếm trong một inode thư mục đặc biệt l Khi dữ liệu được đọc từ một trong những file này, proc thu thập thông tin thích hợp, định dạng nó thành văn bản và đặt nó vào buffer đọc của tiến trình yêu cầu 21.51 Input và Output n Hệ thống file hướng thiết bị của Linux truy cập kho lưu trữ đĩa qua hai cache : l Dữ liệu được cached trong page cache, được hợp nhất với hệ thống bộ nhớ ảo l Metadata được cached trong buffer cache, một cache riêng biệt được ghi mục lục (index) bởi disk physical block n Linux chia tất cả thiết bị thành ba lớp: l block devices cho phép truy cập ngẫu nhiên vào các block dữ liệu có kích thước cố định và hoàn toàn độc lập l character devices gồm hầu hết các thiết bị khác; chúng không cần hỗ trợ functionality của các file thông thường l network devices được kết nối thông qua networking subsystem của kernel 21.52 Cấu Trúc Device-Driver Block 21.53 Block Devices n Cung cấp giao diện chính đến tất cả thiết bị đĩa trong một hệ thống n Block buffer cache thực hiện hai chức năng chính: l Hoạt động như một hồ chứa các buffers cho I/O tích cực l Phục vụ như một cache cho I/O đã hoàn tất n Request manager quản lý việc đọc và ghi nội dung buffer từ và đến một block device driver 21.54 Character Devices n Một device driver không cung cấp truy cập ngẫu nhiên vào các block dữ liệu cố định n Một character device driver phải đăng ký một tập hợp các hàm hiện thực các thao tác file I/O khác nhau của driver n Kernel hẩu như không thực hiện tiền xử lý một yêu cầu đọc hay ghi file đến một character device, mà đơn giản chuyển yêu cầu đến cho thiết bị n Ngoại lệ chính của nguyên tắc này là tập hợp con đặc biệt gồm các character device drivers thực hiện terminal devices, đã được kernel duy trì một giao diện chuẩn cho nó 21.55 Giao Tiếp Liên Tiến Trình n Như UNIX, Linux thông báo cho các tiến trình biết có một sự kiện xuất hiện thông qua các tín hiệu n Có một số lượng tín hiệu giới hạn, và chúng không thể mang thông tin: chỉ có sự kiện một tín hiệu xuất hiện là có giá trị với tiến trình n Linux kernel không sử dụng các tín hiệu để giao tiếp với các tiến trình đang chạy ở kernel mode, mà, giao tiếp nội trong kernel được thực hiện thông qua các trạng thái định thời và các cấu trúc hàm đợi wait.queue 21.56 Chuyển Dữ Liệu Giữa các Tiến Trình n Cơ chế pipe (đường ống) cho phép một tiến trình con kế thừa một kênh giao tiếp từ cha nó, dữ liệu viết lên một đầu của pipe có thể được đọc ở đầu còn lại n Bộ nhớ chi sẻ cung cấp một cách giao tiếp cực nhanh; bất cứ dữ liệu nào được viết bởi một tiến trình vào một shared memory region (vùng bộ nhớ chia sẻ) có thể được đọc ngay lập tức bởi bất cứ tiến trìn nào đã map vùng (region) đó vào không gian địa chỉ của nó n Tuy nhiên, để đạt được sự đồng bộ, bộ nhớ chia sẻ phải được sử dụng kết hợp với cơ chế giao tiếp liên tiến trình 21.57 Shared Memory Object n Shared-memory object hành động như một backing store cho các shared-memory regions cùng cách mà một file có thể hành động với một memory-mapped memory region n Shared-memory mappings hướng các lỗi trang map trong các trang từ một đối tượng shared-memory bền vững n Shared-memory object nhớ nội dung của chúng cả khi không có tiến trình nào đang map chúng vào bộ nhớ ảo 21.58 Cấu Trúc Mạng n Networking là lĩnh vực mấu chốt của tính hữu dụng của Linux l Nó hỗ trợ các nghi thức Internet chuẩn cho UNIX cho các giao tiếp UNIX l Nó cũng hiện thực các nghi thức tự nhiên đối với các hệ điều hành nonUNIX, đặc biệt, các nghi thức được sử dụng trên các mạng PC, như Appletalk và IPX n Bên trong, networking trong Linux kernel được hiện thực bởi ba lớp phần mềm: l The socket interface l Protocol drivers l Network device drivers 21.59 Cấu Trúc Mạng (tt) n Tập hợp quan trọng nhất của các nghi thức trong hệ thống Linux networking là bộ internet protocol suite l Nó hiện thực việc truyền gửi (routing) giữa các host khác nhau ở bất cứ nơi đâu trong mạng l Trên cùng của nghi thức routing được xây dựng trên các nghi thức UDP, TCP và ICMP 21.60 An Ninh n Hệ thống pluggable authentication modules (PAM) có sẵn dưới Linux n PAM dựa trên một thư viện chia sẻ có thể được sử dụng bởi bất kỳ thành phần hệ thống nào cần nhận biết người dùng n Điều khiển truy cập các hệ thống dưới UNIX, bao gồm Linux, được thực hiện thông qua việc sử dụng các unique numeric identifiers (uid và gid) n Điều khiển truy cập được thực hiện bằng cách cấp cho các đối tượng một protections mask, xác định các chế độ nào —read, write, hay execute— được cấp cho tiến trình với truy cập người dùng, nhóm, hay tất cả 21.61 An Ninh (tt) n Linux tăng cơ chế chuẩn UNIX setuid bằng hai cách : l Nó thực hiện POSIX specification’s saved user-id mechanism, cho phép một tiến trình lặp đi lặp lại việc bỏ và lấy lại uid hiệu quả của nó l Nó thêm vào một đặc tính tiến trình cấp cho một tập hợp con các quyền của uid hiệu quả n Linux cung cấp một cơ chế khác cho phép một khách hàng chuyển có lựa chọn lối vào cho một file đơn vào tiến trình server nào đó mà không cấp cho nó đặc quyền nào khác 21.62 End of Chapter 21
File đính kèm:
- Bài giảng Hệ điều hành - Chương 4 Hệ điều hành Linux.pdf