Một cách chính xác, thuật ngữ "Linux" được sử dụng để chỉ Nhân Linux nhưng tên này được sử dụng một cách rộng rãi để miêu tả tổng thể một hệ điều hành giống Unix còn được biết đến dưới t
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Khoa Kỹ thuật máy tính
TIỂU LUẬN
HỆ ĐIỀU HÀNH
ĐỀ TÀI TÌM HIỂU LINUX KERNEL: CÁC THÀNH PHẦN, DỊCH VỤ
GIÁO VIÊN HƯỚNG DẪN:
THS HÀ LÊ HOÀI TRUNG
NHÓM SINH VIÊN:
TP Hồ Chí Minh, tháng 12 năm 2012
Trang 2Mục lục
I Tổng quan Linux 3
1 Lịch sử linux 3
2 Điều khoản của cấp giấy phép 6
II Kernel linux 6
1 Hạt nhân là gì ? 6
Kernel linux 6
2 Các thành phần chính của một Kernel 8
2.1 Thiết kế tích hợp 10
2.2 User - Mode and Kernel – Mode 11
3 Bối cảnh các quy trình của hạt nhân 11
3.1 Quy trình tiến triển: 12
3.2 Quy trình gián đoạn (ngắt) 12
3.3 Quy trình hạt nhân ( Kernel ) : 12
4 Phiên bản nhân Linux : 12
Cách quy ước và số hiệu phiên bản nhân Linux 13
6 Khám phá Kernel 14
Cây danh mục kernel 15
III Tổng kết 17
IV Tài liệu tham thảo: 18
Trang 3I Tổng quan Linux
1 Lịch sử linux
Vào tháng Tư năm 1991, Linus Torvalds, một sinh viên 21 tuổi tại Đại học Helsinki (Phần Lan) bắt đầu làm việc trên một số ý tưởng đơn giản đối với một hệ điều hành Ông bắt đầu với một bộ chuyển đổi công việc trong hợp ngữ Intel 80386 và một trình điều khiển thiết bị đầu cuối
Ngày 17/9/1991, Linus Torvalds chính thức thông báo sự ra đời của nhân Linux đầu tiên phiên bản 0.0.1 Linux chào đời với đoạn "tuyên cáo" ngắn gọn sau:
“ I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones This has been brewing since April, and is starting to get ready I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout
of the file-system (due to practical reasons) among other things)
I've currently ported bash(1.08) and gcc(1.40), and things seem to work This implies that I'll get something practical within a few months [ ] Yes - it's free of any minix code, and it has a multi-threaded fs It is NOT portable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that's all I have”
Linus Torvalds"
Linux là một phiên bản hệ điều hành miễn phí giống như hệ điều hành Unix Linux được thiết kế riêng dành cho hệ máy PC, và có nhiều cải tiến cho người sử dụng có thể so sánh với hiệu suất cao nhất của trạm làm việc UNIX Một vài hãng lớn như IBM, Compaq
đã tham gia sử dụng Linux
Cũng có một vài công ty đã bắt đầu đóng gói Linux như Redhat, Samba, Corel Mặc dù vậy họ cũng chỉ có thể thêm vào các gói dịch vụ và các tài liệu hướng dẫn qua các phần mềm chạy trên linux Ngày càng nhiều các công ty thương mại sử dụng Linux trên các mạng của họ nhờ tính hiệu quả, bảo mật tốt (do linux được xây dựng trên nên mã nguồn mở) và khả năng tiết kiệm về tài chính của nó Linux là một hệ điều hành đa nhiệm
và hỗ trợ nhiều người dùng cùng lúc
Trang 4Linux cũng có tất cả các đặc tính và thế mạnh của Unix Unix là một hệ điều hành mạng phổ biến trên thế giới Nó được cung cấp miễn phí trên mạng internet và tích hợp một số lượng lớn các phần mềm mã nguồn mở Từ 1991 Linux đã nhanh chóng phát triển
và được coi là hệ điều hành thay thế cho Window và các hệ thống Unix Khi Redhat phát hành bản Linux thương mại có sự hỗ trợ về kĩ thuật và các bản hướng dẫn Linux trở lên cực kì phổ biến,ngày càng nhiều người sử dụng cài đặt Linux trên các máy tính cá nhân, các công ty sử dụng Linux để quản lý mạng của họ Linux trở thành hiện tượng mới nhất
để bình luận trên thị trường hệ điều hành và phần mềm máy tính
Một cách chính xác, thuật ngữ "Linux" được sử dụng để chỉ Nhân Linux nhưng tên này được sử dụng một cách rộng rãi để miêu tả tổng thể một hệ điều hành giống Unix (còn được biết đến dưới tên GNU/Linux) được tạo ra bởi việc đóng gói nhân Linux cùng với các thư viện và công cụ GNU, cũng như là các bản phân phối Linux
Thực tế thì đó là tập hợp một số lượng lớn các phần mềm như máy chủ Web, các ngôn ngữ lập trình, các hệ quản trị cơ sở dữ liệu, các môi trường làm việc desktop, như GNOME và KDE, và các ứng thích hợp cho công việc văn phòng như Open office
Khởi đầu, Linux được phát triển cho dòng vi xử lý 386, hiện tại hệ điều hành này hỗ trợ một số lượng lớn các kiến trúc Vi xử lý, và được sử dụng trong nhiều ứng dụng khác nhau từ máy tính cá nhân cho tới các siêu máy tính và các thiết bị nhúng như là các máy điện thoại di động
Linux hiện nay có nhiều bản phân phối khác nhau, một phần là bởi vì tính chất nguồn mở của nó Sau đây là một số bản phân phối chủ yếu:
Trang 62 Điều khoản của cấp giấy phép
Ban đầu, Torvalds phát hành Linux theo một giấy phép là cấm việc sử dụng thương mại Điều này đã nhanh chóng thay đổi cho phép Công cộng GNU (GPL), như các phiên bản 0,12 Giấy phép này cho phép phân phối và bán các phiên bản sửa đổi và cố định có thể của Linux, nhưng đòi hỏi tất cả những bản sao sẽ được phát hành theo giấy phép tương
tự và phải kèm theo mã nguồn tương ứng hoàn toàn
II Kernel linux
1 Hạt nhân là gì ?
Kernel là lõi của một hệ điều hành Hệ điều hành nhận được yêu cầu từ người sử dụng và quá trình đó thay mặt cho người dùng Những yêu cầu đó được nhận bởi lệnh Shell hoặc một số loại khác của giao diện người dùng và được xử lý bằng kernel Vì vậy, kernel như là một công cụ của hệ điều hành cho phép người dùng sử dụng hệ thống máy tính Shell là phần bên ngoài của hệ điều hành cung cấp một giao diện cho người dùng để giao tiếp với kernel
Thiết kế của một hệ điều hành
Kernel linux
Nhân linux là một hệ điều hành đa người dùng và đa nhiệm vân hành giống như hệ điều hành của Unix về phương diện và thiết bị ngoại vi Linux có tất cả các đặc tính của
Trang 7Unix cộng với những cái cải thiện gần đây đã tăng thêm tính linh hoạt của hệ Linux Toàn
bộ mã nguồn và tiện ích dành cho linux hoàn toàn miễn phí
Ban đầu nhân linux được thiết kế cho chế độ bảo vệ CPU 80386 Intel 80386 được thiết kế với tính năng đa nhiệm (mặc dù hầu hết Intel CPU đã được sử dụng với tính năng DOS đơn nhiệm) và Linux tận dụng những đặc tính năng cao có sẵn trong CPU Cơ chế quản lí bộ nhớ cực kì mạnh với 80368 (so với những CPU trước kia) Thủ tục dấu chấm động cho phép linux hoạt động trên những máy móc không có bộ đồng xử lí toán học
Linux cho phép dùng chung các tập tin có thể thi hành để nhỡ có nạp nhiều bản sao của một chương trình ứng dụng đặc biệt (do một người dùng chạy nhiều tác vụ) thì tất cả tác vụ có thể dùng chung một bộ nhớ Tiến trình này gọi là sao chép trên trang ghi, sử dụng triệt để Ram của bộ nhớ
Nhân linux còn hỗ trợ tiến trình phân trang theo yêu cầu, có nghĩa là chỉ những phần nào cần thiết của chương trình thì mới được đọc và Ram để sử dụng bộ nhớ tối ưu hơn Linux dùng một tổ hợp nhớ duy nhất cho phép bộ nhớ rãnh trên hệ thống được sử dụng như một bộ nhớ cache truy cập nhanh chóng và hiệu quả các chương trình và các dữ liệu được sử dụng thường xuyên Do nhu cầu sử dụng bộ nhớ tăng nên bộ nhớ cache phải tự động điều chỉnh
Để phục vụ cho những yêu cầu bộ nhớ quá lớn trong khi Ram bộ nhớ quá nhỏ Linux hỗ trợ không gian tráo đổi, không gian tráo đổi cho phép các trang nhớ được ghi vào một vùng đĩa giành sẵn và được sử dụng như một vùng mở rộng của một bộ nhớ vật lý Bằng cách di chuyển tới lui các trang giữa không gian tráo đổi và Ram Linux có thể vận hành nhưu thể nó có Ram vật lý nhiều hơn thực tế bù lại tốc độ truy cập vào đĩa cứng sẽ chậm hơn là giảm tốc độ vận hành của máy
Linux sử dụng rộng rãi thư viện dùng chung động Thư viện này sử dụng một vùng thư viện chung cho nhiều ứng dụng khác nhau, cắt giảm đáng kể kích thước của mỗi trình ứng dụng linux cho phép tính năng kết nối toàn bộ thư viện (gọi là thư viện nối kết tinh) tạo điều kiện di dời đến những máy không có thư viện động
Để mọi người chấp nhận linux hệ điều hành cung cấp nhiều hệ thống tập tin khác nhau kể cả những hệ thống tập tin tương thích với DOS và OS/2 Hệt thống tập tin riêng của linux gọi là ext2fs, được thiết kế để tận dụng tối đa đĩa
Trang 8Linux thật sự thích hợp cho công đoạn phát triển trình ứng dụng bằng những ngôn ngữ mới, là một bộ phận của phần mềm phân phối, có một số trình biên dịch như C, C++, Fortran, Pascal, LISP, Ada, Basic và Smalltalk Nhiều trong số những trình biên dịch, công
cụ gỡ rối và trình hiệu chỉnh của linux mới nhất xuất phát từ dự án GNU của hiệp hội phần mềm miễn phí (FSF- Free Software Foundation)
2 Các thành phần chính của một Kernel
Hình vẽ trên mô phỏng kiến trúc nhân Linux
Bộ phận định thời cho tiến trình (Process Scheduler-SCHED)
Như bạn biết về cơ bản PC vẫn là một hệ thống xử lý đơn, tức là chỉ có 1 lệnh thực thi tại một thời điểm Tuy nhiên các hệ điều hành đa nhiệm (multi-task) như Windows, Linux… đều cho phép nhiều chương trình chạy cùng một lúc Làm sao chúng làm được như vậy? Bằng cách chuyển quyền thực thi qua lại giữa các chương trình thật nhanh làm cho chúng ta có cảm giác các chương trình chạy cùng lúc với nhau Ví dụ bạn vừa đánh
Trang 9Winword vừa chơi Winamp thì thật ra SCHED sẽ chạy Winword 5,10 lệnh xong chuyển qua Winamp 5,10 lệnh rồi chuyển lại… Việc này cực kì nhanh nên bạn không có cảm giác
gì
Hệ điều hành MSDOS ngày xưa thật sự là hệ điều hành đơn nhiệm, tuy nhiên bạn vẫn có thể bẩy ngắt 1Ch (hook interrupt) để giả lập đa nhiệm Interrupt 1Ch thực chất được Timer IRQ (6 hay 8) gọi Timer IRQ là một ngắt cứng tức là tín hiệu do bộ phát xung gởi tới CPU Mặc định là 1/13 giây 1 lần bộ phát xung này gởi 1 tín hiệu IRQ đến CPU Khi đó CPU sẽ ngưng lệnh đang thi hành chuyển qua xử lý ngắt Timer IRQ sau đó sẽ gọi ngắt 1Ch Nếu bạn viết 1 chương trình con hook int 1Ch, thì bạn sẽ có cảm tưởng nó chạy song song với chương trình chính (thật ra 1/13s nó mới chạy 1 lần) Ứng dụng cái này người ta viết một chương trình chạy banner trong màn hình DOS, hay chương trình ping-pong gồm
1 hay nhiều trái tim chạy va đập vào các cạnh của màn hình, trong khi vẫn chạy DOS
Các hệ điều hành đa nhiệm sau này đều xử dụng nguyên tắc này để làm SCHED Tuy nhiên 1/13s thì không đủ nhanh để switch qua nhiều tiến trình nhưng xài hàm của BIOS ta có thể tăng tốc cho SCHED 1/100s 1 lần chẳng hạn
Bộ quản lý bộ nhớ (Memory Manager-MM)
Bộ nhớ qui ước (conventional memory) của PC chỉ có 640K thôi Do chương trình BIOS chỉ quản lý được tới FFFFF, mà vùng nhớ cao (High memory từ A0000 trở lên) dùng
để ánh xạ (map) BIOS, Video card memory và các thiết bị ngoại vi khác, vùng nhớ còn xài được (Low memory) là từ 9FFFF trở xuống
Dùng calculator đổi 9FFFF ra decimal bạn sẽ có đúng 640K Chắc bạn ngạc nhiên hỏi rằng cây RAM 512M mua hết $70 của tôi biến đâu mất rồi??? Nó còn có 1 page 64K trong vùng nhớ cao Tuy nhiên bạn có thể thay đổi ánh xạ để truy xuất hết 512M RAM card màn hình cũng tương tự như vậy Ở chế độ bảo vệ (protect mode) của CPU 32bit đưa
ra khái niệm virtual memory (bộ nhớ ảo) Lúc này mỗi process được cấp cho 4G virtual memory từ 00000000-FFFFFFFF Nhưng kernel sẽ giữ 1 table mô tả ánh xạ từng page của virtual memory với physical memory Physical memory bây giờ bao gồm cả RAM và swap disk space Tất nhiên là 4G virtual memory không bao giờ được ánh xạ đầy đủ (ánh xạ hết lấy gì cho mấy process khác chạy) Phần lớn mặc dù có đánh địa chỉ, nhưng chỉ khi bạn đọc hoặc ghi lên đó thì kernel mới allocate từ physical memory
Trang 10Hệ thống tập tin ảo (Virtual File System – VFS)
Hệ thống này không chỉ cung cấp truy xuất đến hệ thống file trên harddisk mà còn cho tất cả các thiết bị ngoại vi Nếu như Triump tất cả là thời trang thì ta có thể nói ở Linux tất cả là file Ý tưởng này bắt nguồn từ Unix và các hệ điều hành sau này điều thiết lập theo hướng đấy Đừng quên là trong DOS bạn dùng copy xxx con để in file xxx ra màn hình Khi đó “con” là filehandler cho thiết bị xuất chuẩn (console)
Giao diện mạng (Network Interface - NET)
Linux dựng sẵn TCP/IP trong kernel Thành phần này của Linux Kernel cung cấp truy cập và kiểm soát các thiết bị mạng khác nhau
Bộ truyền thông nội bộ (Inter-process communication IPC)
Cung cấp các phương tiện truyền thông giữa các tiến trình trong cùng hệ thống Hệ thống phụ IPC cho phép các tiến trình khác nhau có thể chia sẻ dữ liệu với nhau
2.1 Thiết kế tích hợp
Như chúng ta biết Kernel được tạo từ những thành phần khác nhau Mẫu thiết kế tích hợp cho biết làm thế nào các thành phần khác nhau được tích hợp để tạo ra hình ảnh của nhị phân Kernel
Có 2 mẫu thiết kế tích hợp được sử dụng cho Kernel hệ điều hành, nguyên khối và vi mô Trong mẫu thiết kế nguyên khối, tất cả các thành phần của Kernel được xây dựng cùng nhau thành một hình ảnh nhị phân tĩnh Vào thời gian khởi động, toàn bộ kernel được nạp và sau đó chạy như một tiến trình duy nhất trong một không gian địa chỉ duy nhất Tất cả các thành phần
Trang 11hay dịch vụ của kernel tồn tại trong hình ảnh kernel tĩnh Tất cả các dịch vụ của kernel đều hoạt động và có giá trị trong tất cả các thời gian Ngoài ra, từ bên trong kernel mọi thứ nằm trong một không gian địa chỉ duy nhất, vì vậy không có loại IPC nào của cơ chế cần thiết cho việc giao tiếp giữa các dịch vụ kernel Đối với tất cả những lý do này kernel nguyên khối có hiệu suất cao Hầu hết các kernel Unix là những kernel nguyên khối
Nhược điểm của thiết kế này là một khi hình ảnh của kernel tĩnh được tải, bạn không thể thêm hoặc loại bỏ bất kỳ thành phần hoặc dịch vụ từ kernel Ngoài ra bộ nhớ của nó cao Vì vậy, hiệu suất cao hơn trong trường hợp kernel nguyên khối
Loại thứ 2 của kernel là kernel vi mô Trong kernel vi mô là một hình ảnh kernel tĩnh duy nhất không được xây dựng, thay vì đó hình ảnh kernel được chia thành những dịch vụ nhỏ khác nhau Vào thời gian khởi động, lõi của các dịch vụ kernel được nạp, chúng được chạy trong chế
độ đặc quyền Bất cứ một dịch vụ nào được yêu cầu, nó phải nạp để chạy Không giống như kernel nguyên khối, tất cả các dịch vụ không được nạp và chạy trong suốt thời gian Chúng chạy khi được yêu cầu Ngoài ra, không giống như kernel nguyên khối, dịch vụ trong kernel vi mô chạy trong không gian địa chỉ riêng Vì vậy, việc giao tiếp giữa các dịch vụ khác nhau đòi hỏi phải có chơ chế IPC Đối với những lý do này kernel vi mô không phải là kernel có chức năng cao nhưng chúng lại yêu cầu tài nguyên ít hơn để chạy
Linux kernel điều tốt nhất cho 2 thiết kế này Về cơ bản thì nó sử dụng kernel nguyên khối, tất cả linux kernel và các dịch vụ của nó đều chạy như một tiến trình duy nhất, trong một không gian địa chỉ duy nhất, đạt hiệu suất rất cao Nhưng mà nó cũng có khả năng tải hoặc không tải các dịch vụ trong thời gian chạy ở các dạng mô hình kernel
2.2 User - Mode and Kernel – Mode
Trong một hệ thống, Linux kernel chạy theo một chế độ đặc quyền đặc biệt so với các ứng dụng người dùng Kernel chạy trong một không gian bộ nhớ được bảo vệ và nó được truy cập vào toàn bộ phần cứng Không gian bộ nhớ này và việc đặc quyền chung này được gọi là không gian kernel hoặc chế độ kernel Ngược lại, các ứng dụng người dùng chạy theo không gian người dùng
và được giới hạn truy cập đến tài nguyên và phần cứng Những ứng dụng không gian người dùng không thể truy cập trực tiếp và bộ nhớ không gian kernel nhưng kernel được truy cập tới toàn bộ không gian bộ nhớ
3 Bối cảnh các quy trình của hạt nhân