Slide bài giảng hệ điều hành
Trang 14 Hệ điều hành Linux
Trang 3Mục tiêu
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
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
Xem xét cách quản lý bộ nhớ trong Linux
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
Trang 4Lịch sử
thêm kernel(nhân) với mục đích chính là có khả năng thích hợp với Unix
thế giới, hầu hết họ trao đổi đều qua internet
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ó 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.
dụng, và các công cụ quản lý
Trang 5The Linux Kernel
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
Linux 1.0 (3-1994) có thêm một số tính năng mới:
Hỗ trợ thêm giao thức mạng TCP/IP theo chuẩn UNIX
Các chương trình mạng được hỗ trợ giao tiếp socket tương thích BCD
Hỗ trợ giao tiếp Device-driver để có thể chạy IP trong mạng Ethernet
Tăng cường hệ thống file
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.
Hỗ trợ thêm phần cứng
Phiên bản 1.2 (5-1995) là bản Linux kernel cho PC cuối cùng
Trang 6Linux 2.0
6-1996, 2.0 thêm 2 tính năng mới:
Hỗ trợ thêm cấu trúc phức tạp, bao gồm cồng Alpha 64-bit
Hỗ trợ cấu trúc đa vi xử lý
Các tính năng khác:
Cải thiện mã quản lý bộ nhớ
Cải thiện hiệu suất TCP/IP
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
Giao diện cấu hình chuẩn
Được dùng cho Motorola 68000-series vi xử lý, hệ thống Sun Sparc,
PC và hệ thống PowerMac
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
Trang 7 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ế
Trang 8Linux Distributions
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
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
Mỗi nhà phân phối bao gồm SLS và Slackware
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
Gói định dạng file RPM cho phép tích hợp giữa các nhà phân phối Linux
Trang 9Giấy phép Linux
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
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
Trang 10Nguyên tắc thiết kế
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
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
Mục tiêu thiết kế chính là tốc độ, hiệu quả và tiêu chuẩn hóa
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
Trang 11Các thành phần hệ thống Linux
Trang 12Các thành phần hệ thống Linux(Cont.)
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
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
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
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
Trang 13Các thành phần hệ thống Linux(Cont.)
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
system utilities thực thi các thao tác quản lý chuyên dụng cá nhân
Trang 14Kernel modules
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
Kernel module có thể thực thi trình điều khiển thiết bị, file hệ
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
Linux module hỗ trợ 3 thành phần:
Quản lý module
Điều khiển đăng ký
Giải quyết mâu thuẫn
Trang 15Quản lý Module
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
Quá trình nạp module được chia thành 2 phần khác nhau:
Quản lý các đoạn mã module trong bộ nhớ nhân
Những module được phép tham khảo và trình bày tượng trưng
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
Trang 16Driver Registration (đăng ký bộ phận điều khiể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
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õ
Trang 17Giải quyết mâu thuẫ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
Module giải quyết mâu thuẫn có mục đích:
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
Ngăn ngừa sự quấy rối của các trình quản lý thiết bị đến
autoprobes
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
Trang 18Quản lý tiến trình
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
Câu lệnh fork để tạo quá trình mới
Một chương trình được chạy sau lời gọi: execve
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
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
Trang 19Đồng nhất tiến trình
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
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
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
Đượ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
Trang 20Môi trường tiến trình
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:
The argument vector lists the command-line arguments used to invoke the running program; conventionally starts with the name of the program itself
The environment vector is a list of “NAME=VALUE” pairs that
associates named environment variables with arbitrary textual
values
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
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ộ
Trang 21Ngữ cảnh quá trình
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
Đị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
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
Bảng file là một mảng các con trỏ đến cấu trúc file kernel
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
Trang 22Ngữ cảnh quá trình
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
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 đó
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
Virtual-memory context mô tả tất cả nội dung của không gian địa
chỉ riêng nó
Trang 23Quá trình và luồng
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ó
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
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ó
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
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
Trang 24 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
Như ví dụ 2.5, giải thuật định thời mới – ưu tiên, độ ưu tiên cơ sở
Sắp xếp thời gian thực
Giá trị đẹp
Trang 25Qua hệ giữa độ ưu tiên và độ dài phân thời
gian
Trang 26Danh sách các địa chỉ được ưu tiên
Trang 27 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
Đồ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
Trang 28Đồng bộ hóa Kernel
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
Trang 29Đồng bộ hóa Kernel
Để 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
Interrupt service routines được chia thành a top half and a
Trang 31Định Thời Tiến Trình
Linux dùng hai giải thuật định thời tiến trình:
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
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
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
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
credits:
Trang 32Định Thời Tiến Trình (tt)
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ó
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
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
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
Trang 33Thực Hiện Đa Tiến Trình Đồng Bộ
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
Để 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
Trang 34Quản Lý Bộ Nhớ
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ớ
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
Chia bộ nhớ thành 3 miền (zones) khác nhau về đặc tính
Trang 35Quan Hệ giữa các Miền và Địa Chỉ Bộ Nhớ
trong 80x86
Trang 36Chia Bộ Nhớ thành một Buddy Heap
Trang 37 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)
Cũng sử dụng slab allocator cho bộ nhớ kernel
Trang 3821.07
Trang 39Bộ Nhớ Ảo
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
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 :
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)
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
Trang 40Bộ Nhớ Ảo (tt)
Các region (vùng) bộ nhớ ảo có các đặc điểm dựa trên:
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)
Phản ứng của region với việc ghi (page sharing hay write)
copy-on- 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
Trang 41Bộ Nhớ Ảo (tt)
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
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ó
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
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
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
Trang 42Bộ Nhớ Ảo (tt)
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
Hệ thống VM paging có thể được chia làm hai phần:
Giải thuật pageout-policy quyết định khi nào và trang nào được ghi ra ngoài đĩa
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