ĐẠ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:
NGUYỄN MINH TUẤN
08520444
LÊ DUY TÂN
11520350
NGUYỄN VĂN QUYỀN
11520324
DƯƠNG TUẤN PHONG
11520284
TP. Hồ Chí Minh, tháng 12 năm 2012
Mụ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.
3.
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
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
2
I. 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.
3
Linux 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:
4
5
2. Đ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
6
Unix 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.
7
Linux 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
8
Winword 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.
9
Hệ 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
10
hay 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
11
Toàn bộ mã kernel có thể được chia thành ba loại:
Quy trình tiến triển
Quy trình gián đoạn (ngắt)
Quy trình hạt nhân ( Kernel )
3.1 Quy trình tiến triển:
Người sử dụng các ứng dụng không thể truy cập vào không gian kernel trực tiếp nhưng có
một giao diện sử dụng các ứng dụng người dùng có thể gọi các hàm được định nghĩa trong không
gian kernel. Giao diện này được gọi là cuộc gọi của hệ thống. Một ứng dụng người dùng có thể
yêu cầu cho các dịch vụ kernel bằng cách sử dụng một hệ thống gọi.
Read(), write() là các ví dụ của việc gọi hệ thống. Một ứng dụng người dùng gọi read(),
write() nghĩa là lần lượt gọi sys_read() / sys_write() trong không gian kernel. Trong trường hợp
này mã kernel thực hiện theo yêu cầu của ứng dụng không gian người sử dụng. Vì vậy, mã kernel
được thực hiện theo yêu cầu hoặc đại diện cho người sử dụng một ứng dụng được gọi là quá trình
mã ngữ cảnh hệ thống. Tất cả các lệnh gọi đều được xếp vào thể loại này.
3.2 Quy trình gián đoạn (ngắt)
Bất cứ khi nào một thiết bị muốn giao tiếp với kernel, nó sẽ gửi một tín hiệu gián đoạn cho
kernel. Các kernel tại thời điểm nhận được một yêu cầu ngắt từ phần cứng, nó bắt đầu thực hiện
một số thủ tục đáp ứng với yêu cầu ngắt. Việc phản ứng này được gọi là dịch vụ thường xuyên bị
gián đoạn hoặc là xử lý một quy trình ngắt. Chương trình xử lý thường xuyên được cho là thực
hiện trong quy trình gián đoạn.
3.3 Quy trình hạt nhân ( Kernel ) :
Có một số mã trong nhân Linux mà không phải là được gọi bởi một ứng dụng người dùng
cũng không được gọi bằng một quy trình ngắt. Mã này là không thể thiếu cho hạt nhân và vẫn tiếp
tục chạy.
VD: Quản lý bộ nhớ, quản lý tiến trình, danh mục nhập/xuất (I/O), tất cả các mã trên đều nằm
trong thể loại này. Mã này được thực hiện trong quy trình hạt nhân (Kernel).
4. Phiên bản nhân Linux :
Để biết phiên bản Linux kernel có thể sử dụng lệnh 'uname' với các tùy chọn "-r". uname là
một lệnh tiện ích.
12
VD:
Trong phần đầu của kết quả trả về, có thể thấy một chuỗi chấm thập phân: 2.6.18. Đây là
phiên bản Linux kernel. Trong chuỗi này chấm thập phân (2.6.18), giá trị 2 biểu thị số phiên bản
chính thức, 6 là các bản vá cập nhập và giá trị thứ ba 18 được gọi là số serial. Các bản phát hành
chính kết hợp với việc phát hành rời rạc sau đó được gọi là chuỗi hạt nhân.
Số phiên bản phụ lẻ (serial) được coi như một phiên bản phát triển, có khi phiên bản phụ
được xem xét như một bản ổn định. Phiên bản phát triển được đưa ra nhanh và hay thay đổi và
điều đó đồng nghĩa với việc là những người phát hành tung ra những phiên bản phát triển để thí
nghiệm. Họ không dùng những phiên bản này trong môi trường thương mại. Vì chính môi trường
đó sẽ cản trở sự hướng tới một phiên bản ổn định, lý do là sẽ xuất hiện nhiều sự cản trở bỏi những
người dùng mới.
Điều này đúng cho tất cả các hạt nhân Linux từ trước cho đến 2.6 series. Từ 2.6 trở đi tất cả
các phiên bản được coi là ổn định. Ở đây chủ yếu dựa trên 2.6 series nhưng chúng tôi sẽ cố làm
nổi bật sự khác biệt quan trọng từ 2.6 và hàng loạt các hạt nhân 2.4.
Cách quy ước và số hiệu phiên bản nhân Linux
Phiên bản của nhân Linux có quy ước rất đơn giản và dễ nhớ. Vấn đề này cần nắm rõ trước
khi chọn một phiên bản nào đó của nhân Linux để vá và biên dịch.
Phiên bản của nhân Linux bao gồm ba nhóm số tách ra bởi các dấu chấm.
Ví dụ: 2.4.26
-
Số thứ nhất: 2 là số hiệu phiên bản chính.
-
Số thứ nhì: 4 là chỉ định cho tình trạng phiên bản. Nếu số này là số chẵn, nó chỉ định
cho phiên bản ổn định (stable), có thể dùng cho môi trường production.
-
Nếu số này là số lẻ, nó chỉ định cho phiên bản không ổn định, nó thường dùng trong
môi trường đang phát triển (development).
-
Các kernel thuộc dạng này thường có nhiều lỗi và không ổn định. Nếu dùng các phiên
bản này để tìm lỗi và thông báo cho nhóm phát triển nhân Linux thì đây là điều rất tốt.
Không nên dùng phiên bản phát triển cho môi trường production.
13
-
Số thứ ba: 26 là chỉ định cho số hiệu phát hành của một phiên bản nhân Linux. Một
phiên bản ổn định của một nhân Linux có thể có nhiều số hiệu phát hành khác nhau.
Đây là các quy ước chung cho dạng nhân Linux "vanilla" có nghĩa là ứng dụng cho các
phiên bản nhân từ http://www.kernel.org, các phiên bản nhân được điều chỉnh bởi mỗi bản phân
phối có những điểm dị biệt.
Có nhiều bản Linux xử dụng số hiệu con2 (extra-version) cho phiên bản nhân họ đã điều
chỉnh. Ví dụ RedHat có những cập nhật phụ cho các kernel như: 2.4.20-8 chẳng hạn. Điều cần
nắm ở đây là chỉ nên xử dụng phiên bản ổn định (stable) của nhân Linux (số chẵn ở giữa) cho môi
trường production và dùng phiên bản thử nghiệm3 (development) của nhân Linux (số lẻ) cho môi
trường thử nghiệm và phát triển.
5. Ngu n Linux Kernel
Để xây dựng các Linux kernel, bạn sẽ cần kernel mới nhất hoặc bất kỳ nguồn kernel nào khác
ổn định.
Các nguồn phát hành phiên bản ổn định kernle 2.6.33 hay các phiên bản khác nhau của
Linux nguồn kernel có thể được tìm thấy tại http://www.kernel.org. ạn có thể lấy bản m i nhất
h
c bất k bản phát hành ổn định nà khác của nguồn kernel t đó.
Giả sử bạn đã tải về mã nguồn kernel là bản phát hành ổn định trên hệ thống. Mã nguồn
kernel được nén trong một tarball, có thể là "linux-2.6.33.tar.gz”. Đặt tarball này vào thư mục
/usr/src. Bạn sẽ có một thư mục có tên là Linux ở thư mục /user/src. Sẽ có một thông báo cảnh
cáo, xin đừng can thiệp vào thư mục /user/src/linux. Chỉ cần lưu các nguồn kernel thuộc tarball
của /user/src và tar (giải nén) nó bằng cách sử dụng lệnh:
Vd: #tar –xvzf linux-2.6.33.tar.gz
Lệnh này sẽ tạo một thư mục với tên linux-2.6.33 và nó sẽ tar (giải nén) toàn bộ mã nguồn
kernel vào thư mục này.
Trong trường hợp bạn không thể truy cập internet để tải bản Linux kernel, bạn cũng có thể
có được những mã nguồn Linux kernel từ bất kỳ của bạn b hoặc các bản copy khác (CD,
DVD…).
6. Khám phá Kernel
14
Phần lớn nguồn Kernel được viết bằng ngôn ngữ C. Nó được tổ chức thành nhiều danh
mục và tiểu danh mục khác nhau. Mỗi danh mục được đặt tên theo nội dung của nó
Danh mục cấu trúc kernel có thể xem như biểu đồ dưới đây.
Cây danh mục kernel
Đây là hướng dẫn ngắn gọn về những danh mục mà bạn sẽ thấy trong hệ thống kernel
a. Arch/: Kernel linux có thể được cài đặt bằng công cụ cho các server lớn. Nó hổ trợ
intel, alpha, mips, arm, cấu trúc bộ xử lý sparc. Danh mục ‘arch’ có thể chứa các thư
mục nhỏ cho một bộ xử lý cụ thể. Mỗi thư mục nhỏ chứa 1 mã cấu trúc độc lập.
Ví dụ, đối với một PC, mã sẽ là thư mục arch/i386, đối với bộ xử lý arm, mã sẽ là
thư mục arch/arm/arm64.
b. Init/: LITO hay linux đưa kernel vào bộ nhớ và sau đó kiểm soát theo chuỗi lắp ráp,
arch/x86/kernel/head_x.S chuỗi này chịu tránh nhiệm về khởi tạo phần cứng và do đó
có tính cấu trúc cụ thể. Khi phần cứng đã được tạo xong, phần kiểm soát được chuyển
qua start_kernel() được xác định trong init/main.c. Phần này tương tự với chức năng
chính trong chương trình C, nó là điểm bắt đầu của phần mã kernel. Sau khi thiết lập
phần cấu trúc xong, phần thiết lập kernel bắt đầu và mã của nó được lưu theo danh mục
init. Mã này giúp cho quá trình thiết lập kernel bao gồm thiết lập địa chỉ trang, lập
biểu, bẫy, đường dây yêu cầu ngắt, tín hiệu, báo giờ, thiết bị cuối... Mã theo danh mục
này cũng giúp quá trình khởi động...
15
c. crypto/: Thư mục này chứa mã nguồn những thuật toán và mã hoá, chẳng hạn như:
md5, sha1, blowfish, serpent và nhiều hơn nữa. Những thuật toán được bổ sung như
module kernel. Chúng có thể được nạp vào và không nạp trong lúc chạy chương trình.
Chúng ta sẽ bàn về module kernel trong những chương tiếp theo.
d. Documentation/: Thư mục này chứa nội dung của kernel
e. drivers/: Nếu chúng ta hiểu mã ổ cứng, nó gồm 2 phần. Một phần liên kết với người
dùng, nhận yêu cầu từ người dùng, thể hiện kết quả cho người dùng. Phần còn lại làm
việc với ổ cứng, ví dụ điều khiển nhận và gởi yêu cầu đến và từ ổ cứng. Phần giao tiếp
với người dùng gọi là phần cứng độc lập và nằm ở thư mục ‘drivers’. Thư mục này
chứa mã nguồn của các ổ cứng khác nhau. Những ổ cứng được cài đặt như những
module kernel. Sự thật là đa số mã kernel linux cầu thành mã của ổ cứng vì thế những
thảo luận của chúng ta sẽ xoay quanh ổ cứng. Thư mục này được chia nhỏ thành nhiều
thư mục con phụ thuộc vào mã ổ cứng mà nó chứa.
drivers/block/: Chứa ổ cứng cho công cụ khoá – đĩa cứng
drivers/cdrom/: Chứa ổ cứng cho ổ CD-ROM
drivers/char/: Chứa ổ cứng cho các công cụ như điểm cuối, cổng tín
hiệu, chuột ...
drivers/isdn: Chứa ổ ISDN
drivers/net/: Chưa ổ cứng cho thẻ mạng
drivers/pci: Chứa ổ cứng cho kết nối .......... và kiểm soát
drivers/scsi/: Chứa giao diện scsi cho ổ cứng
drivers/ide/: Chứa ổ cứng cho công cụ IDE
drivers/sound: Chứa những ổ cứng cho âm thanh
Phần khác của một ổ cứng làm việc với công cụ là phần cứng độc lập, cụ thể hơn. Nó phụ
thuộc vào loại bus dùng trong tiếp xúc. Loại mã cụ thể của bus này nằm ở thư mục arch/
directory.
f. fs/: Linux được hổ trợ từ nhiều hệ thống file như ext2, ext3, fat, vfat, ntfs, nfs, jffs và
nhiều hơn. Tất cả mã nguồn cho những file khác nhau này được hổ trợ trong thư mục
này theo những danh mục con như fs/ext2, fs/ext3 etc. Và linux cung cấp hệ thống file
16
ảo giống như lớp bọc cho những file khác. Hệ thống file ảo tương tác có thể giúp người
dùng sử dụng hệ thống file khác với gốc ( ‘/’). Mã này cho vfs cũng nằm ở đây. Cơ cấu
dữ liệu liên quan vfs được xác định trong include/linux/fs.h. Hãy chú ý điều này rất
quan trọng để phát triển file cho kernel.
g. Kernel/: Là một trong các thư mục quan trọng nhất của kernel. Thư mục này chứa mã
cho hệ thống con của kernel như mã hệ thống cuộc gọi, báo giờ, lập biểu, DMA, gián
đoạn nắm bắt tín hiệu. Cấu trúc cụ thể của mã kernel là arch/*/kernel.
h. Include/: Cùng với kernel/ thư mục này là include/ thư mục này rất quan trọng.
i. Lib/: thư viện của kernel được lưu giữ trong thư mục này
j. mm/: Thư mục này rất quan trọng là thư mục cho phát triển kernel. Nó chứa mã chung
quản lý bộ nhớ và hệ thống bộ nhớ ảo. Mã kiến trúc cụ thể là trong kiến trúc thư mục /
* / mm /. Điều này một phần của mã kernel có trách nhiệm yêu cầu / giải phóng bộ nhớ,
tin nhắn, xử lý lỗi trang, lập bản đồ bộ nhớ, lưu trữ khác nhau.
k. security/ : Thư mục chứa chức năng an ninh và mã SELinux dùng trong module kernel
l. sound/: Thư mục chưa mã hệ thống âm thanh.
Ngoài những danh mục quan trọng như trên, dưới đây là những file theo nguồn kernel.
1.
COPYING - Copyright và giấy phép (GNU GPL v2).
2.
CREDITS - partial credits-file người có đóng góp cho dự án linux.
3.
MAINTAINERS – danh sách người bảo trì hệ thống kernel và ổ cứng, mô tả cách lưu
những thay đổi.
4.
Makefile – makefile chính và gốc của Kernel.
5.
README – phần này là ghi chú của kernel. Giải thích cách cài đặt và sửa kernel và
những gì phải làm khi hệ thống sai.
III.
Tổng kết
Từ cuối năm 2010 đến nay đã có thêm gần 200 công ty tham gia phát triển Linux. Nhiều
hãng lớn như Microsoft, Samsung, Texas Instruments gần đây tích cực đóng góp cho dự án
này.
17
Như trước đây, các nhà phát triển độc lập vẫn tạo ra nhiều thay đổi hơn cả trong nhân
Linux (gần 40% các bản vá - patch). Tuy nhiên năm nay bắt đầu thấy rõ xu hướng gia tăng tích
cực của các công ty, chủ yếu là các công ty Mỹ. Theo tính toán của Linux Foundation, trong
một năm lại đây, có gần 200 tổ chức đã tham gia dự án.
10 công ty lớn nhất tham gia phát triển nhân Linux có Red Hat, Intel, Novell, IBM, Texas
Instruments, Broadcom, Nokia, Samsung, Oracle và Google. Linux Foundation nói rằng các
nhà sản xuất di động và giải pháp nhúng tham gia dự án tích cực hơn cả. Họ không chỉ hỗ trợ
về phần cứng mà còn mang lại những thay đổi trong các lĩnh vực quan trọng nhất của nhân
Linux. Trước hết, đó là Samsung và Texas Instruments, những công ty có đóng góp lần lượt
bằng 1,7% và 3% trên tổng số các đóng góp.
"Linux - nền tảng điện toán tương lai - đồng tác giả của bản báo cáo Amanda McPherson bình
luận - Các nhà phát triển độc lập và các công ty đang tham gia vào việc phát triển hệ điều hành
này tích cực hơn so với trước đây, đặc biệt là trong lĩnh vực di động, điện toán đám mây và
các công nghệ nhúng. Số lượng thành viên đang tăng chứng tỏ Linux nhanh chóng phù hợp
với các khả năng mới của thị trường, giảm chi phí và cung cấp hỗ trợ chất lượng, lâu dài".
IV.
Tài liệu tham thảo:
Tham khảo ở một số trang web và diễn đàn như sau:
-
http://www.quantrimang.com.vn
-
http://en.wikipedia.org/wiki/Linux_kernel
-
http://www.gocit.vn/bai-viet/tim-hieu-ve-he-dieu-hanh-linux
-
http://forum.ubuntu-vn.org
18
- Xem thêm -