Bài giảng Hệ điều hành - Chương 4: Hệ điều hành Linux

pdf 62 trang huongle 3380
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ điều hành - Chương 4: Hệ điều hành Linux", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_he_dieu_hanh_chuong_4_he_dieu_hanh_linux.pdf

Nội dung text: Bài giảng Hệ điều hành - Chương 4: Hệ điều hành Linux

  1. 4.4. HHệệ đđiiềềuu hhàànhnh LinuxLinux 21.1
  2. HHệệ đđiiềềuu hhàànhnh LinuxLinux n 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 21.2
  3. MMụụcc tiêutiêu n Khảo sát lịch sử hệ điều hành Unix - nguồn gốc của Linux và một số nguyên tắc bắt buộc để thiết kế Linux n Nghiên cứu mô hình xử lý Linux bằng việc minh họa cách định thời các quá trình và cung cấp truyền thông liên quá trình. n Xem xét cách quản lý bộ nhớ trong Linux n Tìm hiểu xem Linux hiện thực hệ thống file và quản lý các thiết bị xuât nhập như thế nào 21.3
  4. LLịịchch ssửử n Linux là một hệ điều hành tiên tiến và miễn phí dựa trên tiêu chuẩn Unix n Ban đầu Linux phát triển nhỏ. Đến năm 1991 Linus Torvalds kết hợp thêm kernel(nhân) với mục đích chính là có khả năng thích hợp với Unix n Lịch sử cho thấy Linux là sự cộng tác của nhiều người sử dụng trên toàn thế giới, hầu hết họ trao đổi đều qua internet n Linux được thiết kế để có thể chạy hiệu quả trên những phần cứng máy tính thông thường, hơn nữa Linux còn có thể chạy trên nhiều nền phần cứng khác. n Nòng cốt của hệ điều hành Linux kernel là toàn bộ nguyên bản, nhưng nó có thể chạy nhiều phần mềm Unix miễn phí, đólàkết quả của việc tích hợp code để có thể thích hợp Unix. n Thêm vào đó, thay đổi Linux bao gồm cung cấp thêm kernel, các ứng dụng, và các công cụ quản lý 21.4
  5. TheThe LinuxLinux KernelKernel n Phiên bản 0.01 (5-1991) không có mạng, chỉ có thể chạy trên 80386- tương thích với vi xử lý intel và trên phần cứng máy tính, đặc biệt bị giới hạn trong giao tiếp device-drive, và chỉ cung cấp cho hệ thống file Minix n Linux 1.0 (3-1994) có thêm một số tính năng mới: l Hỗ trợ thêm giao thức mạng TCP/IP theo chuẩn UNIX l Các chương trình mạng được hỗ trợ giao tiếp socket tương thích BCD l Hỗ trợ giao tiếp Device-driver để có thể chạy IP trong mạng Ethernet l Tăng cường hệ thống file l Hỗ trợ cách sắp xếp cho điều khiển SCSI giúp tăng hiệu quả truy xuất đĩa. l Hỗ trợ thêm phần cứng n Phiên bản 1.2 (5-1995) là bản Linux kernel cho PC cuối cùng 21.5
  6. LinuxLinux 2.02.0 n 6-1996, 2.0 thêm 2 tính năng mới: l Hỗ trợ thêm cấu trúc phức tạp, bao gồm cồng Alpha 64-bit l Hỗ trợ cấu trúc đa vi xử lý. n Các tính năng khác: l Cải thiện mã quản lý bộ nhớ l Cải thiện hiệu suất TCP/IP l Hỗ trợ vào nhân(kernel) sơ cấp các luồng, và tự động nạp các module theo yêu cầu l Giao diện cấu hình chuẩn n Được dùng cho Motorola 68000-series vi xử lý, hệ thống Sun Sparc, PC và hệ thống PowerMac n 2.4 và 2.6 tăng thêm hỗ trợ SMP, thêm nhật ký trong hệ thống file, ưu tiên kernel, hỗ trợ bộ nhớ 64-bit 21.6
  7. HHệệ ththốốngng LinuxLinux n Linux dùng nhiều công cụ giống như: hệ thống Berkeley’s BSD,hệ thống MIT’s X Window, và dự án Free Software Foundation's GNU n Một thư viện nhỏ được bắt đầu bằng dự án GNU, và cộng đồng Linux đã dần dần cải thiện. n Mạng Linux-công cụ quản lý được bắt nguồn từ mã 4.3BSD; Nguồn gốc của mã BSD gần đây như Free BSD đã mượn lại từ bảng mã này của Linux n Các hệ thống Linux được duy trì bởi một mạng lưới lỏng lẻo của các cộng tác trên Internet, với một số lượng nhỏ của các trang web công cộng hoạt động với tiêu chuẩn thực tế 21.7
  8. LinuxLinux DistributionsDistributions n Tập hợp các gói trước khi biên dịch hay distributions, bao gồm hệ thống Linux cơ bản, cài đặt hệ thống, quản lý tiện ích và cơ chế sẵn sàng để cài đặt các gói của công cụ tiện ích n Các phân phối đầu tiên quản lý các gói bằng cách đơn giản là cung cấp phương tiện để bung tất cả các tập tin vào nơi thích hợp; các phân phối sau này bao gồm các gói quản lý nâng cao n Mỗi nhà phân phối bao gồm SLS và Slackware l Red Hat và Debian là các nhà phân phối phổ biến bao gồm các nguồn thương mại và không thương mại n Gói định dạng file RPM cho phép tích hợp giữa các nhà phân phối Linux 21.8
  9. GiGiấấyy phphéépp LinuxLinux n Nhân Linux được phân phát bởi GNU General Public License (GPL), các điều khoản trong đó được đặt ra bởi Free Software Foundation n Bất cứ ai sử dụng Linux, hay tạo ra các ứng dụng của Linux, có thể làm mất nguồn gốc của các sản phẩm độc quyền; phần mềm phát hành dưới GPL có thể không được cấp phát lại như là sản phẩm binary-only 21.9
  10. NguyênNguyên ttắắcc thithiếếtt kkếế n Linux là một hệ thống đa tác vụ, đa người dùng với tập hợp các công cụ thích hợp với Unix n Các hệ thống tập tin của nó tôn trọng triệt để UNIX semantic truyền thống , và nó thực hiện đầy đủ các tiêu chuẩn mô hình mạng UNIX n Mục tiêu thiết kế chính là tốc độ, hiệu quả và tiêu chuẩn hóa n Linux được thiết kế để có thể tuân thủ với các tài liệu liên quan posix ; ít nhất có hai phân phối Linux đã chính thức được cấp giấy chứng nhận posix. Giao diện lập trình Linux tuân thủ SVR4 UNIX semantics, hơn là để hoạt động BSD. 21.10
  11. CCáácc ththàànhnh phphầầnn hhệệ ththốốngng LinuxLinux 21.11
  12. CCáácc ththàànhnh phphầầnn hhệệ ththốốngng Linux(Cont.)Linux(Cont.) n Giống như hiện thực UNIX, code tạo thành Linux gồm có 3 phần chính; quan trọng nhất là sự khác biệt giữa nhân(kernel) và các phần khác n Kernel có trách nhiệm duy trì những phần trừu tượng quan trọng của hệ điều hành. l Kernel code thực thi trong chế độ kernel với khả năng truy xuất đến tất cả các tài nguyên vật lý của máy tính l Tất cả các mã kernel và cấu trúc giữ liệu được giữ trong cùng một không gian địa chỉ đơn 21.12
  13. CCáácc ththàànhnh phphầầnn hhệệ ththốốngng Linux(Cont.)Linux(Cont.) n Hệ thống thư viện định nghĩa một tập hợp chuẩn các hàm,thông qua các hàm này các ứng dụng có thể tương tác với nhân, và hiện thực một số chức năng của hệ điều hành, mà không cần ưu tiên qua mã kernel. n system utilities thực thi các thao tác quản lý chuyên dụng cá nhân 21.13
  14. KernelKernel modulesmodules n Những phần của mã kernel có thể được biên dịch, load, và unload không phụ thuộc vào những phần còn lại của kernel. n Kernel module có thể thực thi trình điều khiển thiết bị, file hệ thống, hay một giao thức mạng. n Giao diện module cho phép người sử dụng thứ 3 viết và phân phát trong phạm vi giới hạn của họ,có thêm trình điều khiển thiết bị hay file hệ thống –chúng không được phân phối dưới dạng GPL n Kernel modules cho phép Linux được thiết lập theo một tiêu chuẩn,nhân nhỏ nhất mà không cần xây dựng thêm bất kỳ trình điều khiển thiết bị nào. n Linux module hỗ trợ 3 thành phần: l Quản lý module l Điều khiển đăng ký l Giải quyết mâu thuẫn 21.14
  15. QuQuảảnn lýlý ModuleModule n Hỗ trợ việc nạp module vào bộ nhớ, cho phép chúng giao tiếp với các phần còn lại của kernel n Quá trình nạp module được chia thành 2 phần khác nhau: l Quản lý các đoạn mã module trong bộ nhớ nhân l Những module được phép tham khảo và trình bày tượng trưng n Module requestor quản lý các yêu cầu nạp dữ liệu; nó cũng liên tục hỏi nhân xem các module động đã được nạp vẫn còn sử dụng không, và khi không cần nữa module này sẽ được xóa 21.15
  16. DriverDriver RegistrationRegistration ((đăđăngng kýký bbộộ phphậậnn đđiiềềuu khikhiểển)n) n Cho phép module nói với phần còn lại của nhân rằng có một drive mới vừa được thêm vào n Kernel duy trì một bảng động có lưu tất cả các driver, và cung cấp một tập hợp các routine cho phép các driver này thêm vào hay gõ bỏ ra khỏi bảng bất cứ lúc nào. n Bảng đăng ký bao gồm những phần sau: l Trình quản lý thiết bị l Hệ thống file l Giao thức mạng l Định dạng nhị phân 21.16
  17. GiGiảảii quyquyếếtt mâumâu thuthuẫẫnn n Là một kỹ thuật cho phép các tài nguyên khác nhau dành riêng các tài nguyên trong phần cứng và bảo vệ các tài nguyên này khỏi các tình huống bất ngờ được dùng từ các driver khác n Module giải quyết mâu thuẫn có mục đích: l Ngăn ngừa các va chạm khi các module truy xuất tài nguyên của phần cứng. l Ngăn ngừa sự quấy rối của các trình quản lý thiết bị đến autoprobes l Giải quyết các mâu thuẫn khi các driver cố gắng truy xuất vào cùng một phần cứng 21.17
  18. QuQuảảnn lýlý titiếếnn trtrììnhnh n Quản lý tiến trình Unix chia việc tạo quá trình và việc chạy các quá trình mới thành hai thao tác độc lập. l Câu lệnh fork để tạo quá trình mới l Một chương trình được chạy sau lời gọi: execve n Trong UNIX, một chương trình bao gồm tất cả các thông tin phải duy trì t track để chứa các bối cảnh của một hiện thực đơn trong quá trình đơn n Trong Linux, đặc tính của quá trình chia thành 3 nhóm: đặc tính của quá trình, môi trường, và bối cảnh. 21.18
  19. ĐĐồồngng nhnhấấtt titiếếnn trtrììnhnh n ID của quá trình (PID). Định danh đơn cho quá trình; dùng cho những quá trình đặc biệt trong hệ điều hành khi một quá trình gọi một system call để signal, modify, hay wait một quá trình khác n Credentials. Mỗi quá trình phải có một ID liên hệ với người sử dụng và một hay nhiều nhóm ID có thể quyết định quyền truy xuất vào tài nguyên và file của hệ thống n Personality. Trong những hệ thống Unix thì không thể tìm thấy nhưng trong Linũ thì mỗi quá trình có một định danh liên kết cá nhân- mà nó có thể sửa các sematic của một số system call l Được sử dụng đầu tiên bởi các thư viện mô phỏng để yêu cầu các system call này thích hợp với một số tính năng của Unix 21.19
  20. MôiMôi trtrưườờngng titiếếnn trtrììnhnh n Môi trường tiến trình được thừa kế từ các tiến trình cha mẹ, và được soạn thảo thành 2 vector kết thúc bằng 0: l The argument vector lists the command-line arguments used to invoke the running program; conventionally starts with the name of the program itself l The environment vector is a list of “NAME=VALUE” pairs that associates named environment variables with arbitrary textual values n Qua các biến môi trường trong số các quá trình và các biến được thừa kế của tiến trình con, việc chuyển thông tin đến các phần của phần mềm hệ thống user-mode trở nên linh động n Biến môi trường cung cấp cơ chế tùy định của hệ điều hành. Cơ chế này được tạo ra ở mỗi quá trình, chứ không phải là định cầu hình hệ thống cho toàn bộ 21.20
  21. NgNgữữ ccảảnhnh ququáá trtrììnhnh n Trạng thái-thay đổi liên tục của một quá trình đang chạy tại một điểm thời gian n Định thời ngữ cảnh là một phần quan trọng của ngữ cảnh quá trình; đó là thông tin mà bộ định thời cần có để tạm ngưng hay khởi động lại quá trình n Kernel duy trì thông tin accounting về tài nguyên hiện hành được sử dụng bởi mỗi quá trình, tổng số tài nguyên được sử dụng bởi quá trình từ lúc bắt đầu đến khi kết thúc n Bảng file là một mảng các con trỏ đến cấu trúc file kernel l Khi tạo một file xuất nhập bằng system call, quá trình đề cập các file bởi địa chỉ của nó trong bảng 21.21
  22. NgNgữữ ccảảnhnh ququáá trtrììnhnh n Trong khi đó, bảng các tập tin liệt kê các file đang mở, file-system context cung cấp yêu cầu để mở một file mới l Những tập tin gốc hiện tại và đường dẫn mặc định được dùng cho việc tìm kiếm file mới được chứa trong đó n Signal-handler table định nghĩa các công việc trong không gian địa chỉ quá trình được gọi khi có một tín hiệu đặc biệt đến n Virtual-memory context mô tả tất cả nội dung của không gian địa chỉ riêng nó 21.22
  23. QuQuáá trtrììnhnh vvàà luluồồngng n Linux dùng các cách trình bày giống nhau về bản chất của các quá trình và luồng; một luồng đơn giản chỉ là một quá trình mới, mà xảy ra việc chia sẻ không gian địa chỉ với quá trình cha của nó n Sự phân biệt chỉ được tạo ra khi có một luồng mới tạo ra bằng việc gọi system call clone l fork tạo ra một quá trình con, có khả năng sở hữu toàn bộ quá trình ngữ cảnh của nó l clone tạo ra một quá trình mới giống như chính nó, nhưng được cho phép để chia sẻ cấu trúc dữ liệu của quá trình cha n Sử dụng clone để tạo một ứng dụng fine-grained điều khiển chính xác những gì được chia sẻ giữa hai luồng 21.23
  24. ĐĐịịnhnh ththờờii n Nhiệm vụ là chỉ định thời gian CPU cho các tác vụ khác nhau trong phạm vi hệ điều hành n Trong khi định thời thường được xem như là việc chạy và ngắt các quá trình. Trong Linux, việc chạy các chươn trình cũng bao gồm các tác vụ kernel khác nhau n Việc chạy các tác vụ kernel bao gồm cả các tác vụ yêu cầu bởi các quá trình đang chạy và các tác vụ thực thi thay mặt cho một thiết bị điều khiển n Như ví dụ 2.5, giải thuật định thời mới – ưu tiên, độ ưu tiên cơ sở l Sắp xếp thời gian thực l Giá trị đẹp 21.24
  25. QuaQua hhệệ gigiữữaa đđộộ ưưuu tiêntiên vvàà đđộộ ddààii phânphân ththờờii giangian 21.25
  26. DanhDanh ssááchch ccáácc đđịịaa chchỉỉ đđưượợcc ưưuu tiêntiên 21.26
  27. ĐĐồồngng bbộộ hhóóaa KernelKernel n Một yêu cầu cho việc thực thi chế độ nhân có thể xảy ra theo hai cách: l Khi một chương trình đang chạy có thể yêu cầu một dịch vụ của hệ điều hành, hoặc rõ ràng hơn thì qua system call. Ví dụ: khi lỗi trang xảy ra. l Một trình điều khiển có thể chuyển các ngắt, các ngắt này làm cho CPU bắt đầu thực thi từng ngắt n Đồng bộ nhân yêu cầu các framework để cho phép các vùng tranh chấp của nhân chạy mà không ngắt các vùng tranh chấp khác 21.27
  28. ĐĐồồngng bbộộ hhóóaa KernelKernel n Linux dùng 2 kỹ thuật để bảo vệ vùng tranh chấp: 1. Mã kernel bình thường thì nonpreemptible (until 2.4) – khi có một ngắt xảy ra trong khi chương trình đang thực thi một tác vụ của hệ thống nhân, cờ need_resched của kernel được bật lên để bộ định thời sẽ chạy system call đến khi hoàn thành và điều khiển trả về chế độ người sử dụng 2. Kỹ thuật thứ hai là vùng tranh chấp xảy ra trong service routine –bằng cách dùng ngắt vi xử lý để điều khiển không cho ngắt xảy ra trong vùng tranh chấp, kernel đảm bảo rằng nó có thể xử lý mà không có một lỗi nào do các cấu trúc dữ liệu chia xẻ truy suất cùng lúc 21.28
  29. ĐĐồồngng bbộộ hhóóaa KernelKernel n Để tránh những bất lợi hiệu suất , các nhân Linux dùng những cấu trúc đồng bộ, để cho phép những vùng tranh chấp dài chạy mà không vô hiệu các ngắt cho độ dài của tất cả các vùng tranh chấp n Interrupt service routines được chia thành a top half and a bottom half. l Top half là interrupt service routine bình thường và chạy mà không cho phép ngắt lặp lại l Bottom half chạy cho phép tất cả các ngắt, bằng một bộ dịnh thời nhỏ để chắc rằng các bottom half không bao giờ ngắt chính nó l Kiến trúc này được hoàn thành bởi một cơ chế để vô hiệu hoá lựa chọn các bottom half trong khi đang thực thi bình thường, mã nhân foreground 21.29
  30. CCáácc CCấấpp ĐĐộộ BBảảoo VVệệ NgNgắắtt n Mỗi mức có thể bị ngắt bởi mã thực thi cấp cao, nhưng không bao giờ bị ngắt bởi mã thực thi cùng cấp hay thấp hơn n Tiến trình người dùng luôn có thể bị chiếm ưu tiên bởi tiến trình khác khi một time-sharing scheduling interrupt xuất hiện 21.30
  31. ĐĐịịnhnh ThThờờii TiTiếếnn TrTrììnhnh n Linux dùng hai giải thuật định thời tiến trình: l Một giải thuật time-sharing để định thời ưu tiên cân bằng giữa nhiều tiến trình l Một giải thuật real-time cho các tác vụ mà ở đómức ưu tiên tuyệt đối quan trọng hơn sự cân bằng n Một lớp định thời tiến trình sẽ xác định giải thuật nào được áp dụng n Với các tiến trình time-sharing, Linux dùng một giải thuật có ưu tiên dựa trên credit l Luật crediting credits credits := + priority 2 chia các nhân tố trong cả lịch sử của tiến trình và mức ưu tiên của nó l Hệ thống crediting này tự động dánh ưu tiên các tiến trình tương tác hay I/O-bound 21.31
  32. ĐĐịịnhnh ThThờờii TiTiếếnn TrTrììnhnh (tt)(tt) n Linux hiện thực các lớp định thời FIFO và round-robin real-time trong cả hai trường hợp, mỗi tiến trình có một mức ưu tiên ngoài lớp định thời của nó l Scheduler chạy tiến trình có mức ưu tiên cao nhất; với các tiến trình có cùng mức ưu tiên, nó chạy tiến trình đã chờ lâu nhất l Các tiến trình FIFO tiếp tục chạy đến khi chúng thoát hay bị chặn lại l Một tiến trình round-robin sẽ bị chiếm ưu tiên sau một khoảng và chuyển vào cuối hàng đợi định thời, do đó các tiến trình round-robing có cùng mức ưu tiên tự động chia sẻ thời gian với nhau 21.32
  33. ThThựựcc HiHiệệnn ĐĐaa TiTiếếnn TrTrììnhnh ĐĐồồngng BBộộ n Linux 2.0 là Linux kernel đầu tiên hỗ trợ thiết bị phần cứng SMP; các tiến trình hay tuyến có thể thực thi song song trên có bộ xử lý riêng biệt n Để duy trì các yêu cầu đồng bộ hóa không ưu tiên của kernel, SMP đòi hỏi một hạn chế, thông qua một kernel spinlock đơn, mà mỗi lần chỉ có một bộ xử lý có thể thực thi mã kernel-mode 21.33
  34. QuQuảảnn LýLý BBộộ NhNhớớ n Hệ thống quản lý bộ nhớ vật lý của Linux xử lý việc cấp phát và giải phóng các trang, nhóm trang và các block bộ nhớ n Có các cơ chế phụ để xử lý bộ nhớảo, bộ nhớ được map vào không gian địa chỉ của các tiến trình đang hoạt động n Chia bộ nhớ thành 3 miền (zones) khác nhau về đặc tính 21.34
  35. QuanQuan HHệệ gigiữữaa ccáácc MiMiềềnn vvàà ĐĐịịaa ChChỉỉ BBộộ NhNhớớ trongtrong 80x8680x86 21.35
  36. ChiaChia BBộộ NhNhớớ ththàànhnh mmộộtt BuddyBuddy HeapHeap 21.36
  37. QuQuảảnn LýLý BBộộ NhNhớớ VVậậtt LýLý n Page allocator cấp phát và giải phóng tất cả trang vật lý; nó có thể cấp phát một khoảng các trang kề vật lý với nhau nếu có yêu cầu n Allocator dùng một giải thuật buddy-heap để lưu dấu các trang vật lý có thể dùng được l Mỗi region (vùng) nhớ có thể cấp phát được ghép cặp với vùng kế bên l Mỗi khi hai region bạn bè đều được giải phóng chúng kết hợp để tạo một region lớn hơn l Nếu một yêu cầu bộ nhớ nhỏ không được đáp ứng bằng cách cấp phát một region nhớ nhỏ còn trống, thì một region trống lớn hơn sẽ được chia ra làm hai để đáp ứng yêu cầu n Việc cấp phát bộ nhớ trong Linux kernel xuất hiện cả tĩnh (drivers dự trữ một khu vực bộ nhớ liên tiếp trong lúc khởi động hệ thống) hay động (thông qua page allocator) n Cũng sử dụng slab allocator cho bộ nhớ kernel 21.37
  38. 21.0721.07 21.38
  39. BBộộ NhNhớớ ẢẢoo n Hệ thống VM duy trì không gian bộ nhớ thấy được cho mỗi tiến trình: nó tạo các trang bộ nhớảo theo yêu cầu, và quản lý việc tải các trang từ đĩa hoặc swap trở ra đĩa khi cần n VM manager giữ hai quan điểm riêng biệt về một không gian địa chỉ bộ nhớ của tiến trình : l Một quan điểm luận lý mô tả các chỉ thị liên quan đến việc bố trí không gian địa chỉ  Không gian bộ nhớ gồm một bộ các vùng nonoverlap, mỗi cái biểu diễn một tập con không gian địa chỉ kế tiếp nhau và đồng chỉ trang (page-aligned) l Một quan điểm vật lý về mỗi không gian địa chỉ được chứa trong các bảng (table) trang phần cứng cho tiến trình 21.39
  40. BBộộ NhNhớớ ẢẢoo (tt)(tt) n Các region (vùng) bộ nhớảo có các đặc điểm dựa trên: l Backing store, mô tả nguồn gốc các trang dành cho một region; các regions thường được backed bởi một file hoặc không có gì hết (demand-zero memory) l Phản ứng của region với việc ghi (page sharing hay copy-on- write) n Kernel tạo một không gian địa chỉảo mới 1. Khi một tiến trình chạy một chương trình mới bằng lời gọi hệ thống exec 2. Trong lúc tạo một tiến trình mới bằng lời gọi hệ thống fork 21.40
  41. BBộộ NhNhớớ ẢẢoo (tt)(tt) n Khi thực 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.41
  42. BBộộ NhNhớớ ẢẢoo (tt)(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.42
  43. BBộộ NhNhớớ ẢẢoo (tt)(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.43
  44. ThThựựcc ThiThi vvàà TTảảii ChChươươngng TrTrììnhnh NgNgưườờii DDùùngng 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.44
  45. BBốố TrTríí BBộộ NhNhớớ chocho ChChươươngng TrTrììnhnh ELFELF 21.45
  46. LiênLiên KKếếtt TTĩĩnhnh vvàà ĐĐộộngng 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.46
  47. CCáácc HHệệ ThThốốngng FileFile 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.47
  48. HHệệ ThThốốngng FileFile Ext2fsExt2fs ccủủaa LinuxLinux 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.48
  49. Ext2fsExt2fs ccáácc CCááchch CCấấpp PhPháátt BlockBlock 21.49
  50. HHệệ ThThốốngng FileFile ProcProc ccủủaa LinuxLinux 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.50
  51. InputInput vvàà OutputOutput 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.51
  52. CCấấuu TrTrúúcc DeviceDevice DriverDriver BlockBlock 21.52
  53. BlockBlock DevicesDevices 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.53
  54. CharacterCharacter DevicesDevices 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.54
  55. GiaoGiao TiTiếếpp LiênLiên TiTiếếnn TrTrììnhnh 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.55
  56. ChuyChuyểểnn DDữữ LiLiệệuu GiGiữữaa ccáácc TiTiếếnn TrTrììnhnh 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.56
  57. SharedShared MemoryMemory ObjectObject 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.57
  58. CCấấuu TrTrúúcc MMạạngng 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.58
  59. CCấấuu TrTrúúcc MMạạngng (tt)(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.59
  60. AnAn NinhNinh 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.60
  61. AnAn NinhNinh (tt)(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.61
  62. EndEnd ofof ChapterChapter 2121 21.62