Tài liệu Tìm hiểu linux kernel: các thành phần, dịch vụ

  • Số trang: 18 |
  • Loại file: PDF |
  • Lượt xem: 284 |
  • Lượt tải: 3
tranphuong

Đã đăng 59174 tài liệu

Mô tả:

ĐẠ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 -