Kĩ Thuật Lập Trình Hệ Thống Linux [Chương 1]
1. Lịch sử và những tiêu chuẩn
Linux là một thành viên của họ hệ điều hành UNIX. Trong lĩnh vực máy tính, UNIX có một lịch sử dài. Phần đầu tiên của chương cung cấp sơ lược về lịch sử đó. Chúng ta bắt đầu bằng việc mô tả nguồn gốc của họ hệ điều hành UNIX và ngôn ngữ lập trình C, và sau đó xem xét hai phần quan trọng mà linux có thể tồn tại tới ngày nay, dự án gnu và sự phát triển của linux kernel.
Một trong những điểm đáng chú ý của UNIX là sự phát triển của nó không bị điều khiển bởi một nhà cung cấp hay một tổ chức nào. Mà thay vào đó, nhiều nhóm, bao gồm cả thương mại và phi thương mại, đều đóng góp vào sự tiến hóa của nó. Lịch sử đó đã tạo nên nhiều ý tưởng sáng tạo được thêm vào UNIX, nhưng cũng có những kết quả tiêu cực mà sự triển khai của UNIX bị phân chia theo thời gian, do đó viết những ứng dụng có thể chạy được trên tất cả các hệ thống UNIX là càng ngày càng khó. Điều này dẫn đến một sự chuẩn hóa sự triên khai UNIX, mà chúng ta sẽ thảo luận vào phần hai của chương này.
Hai định nghĩa trong cụm từ UNIX được sử dụng rộng rãi. Một trong số chúng biểu thị hệ điều hành mà trải qua kiểm tra chính thức về đặc điểm kỹ thuật và do đó được đảm bảo về thương hiệu UNIX bởi open group. Tại thời điểm đó, không một triển khai UNIX nào có được thương hiệu này. Định nghĩa còn lại có nghĩa gắn với cụm từ UNIX biểu thị những hệ thống mà giao diện và vận hành giống hệ thống UNIX cổ điển. Với định nghĩa này, linux được xem xét là một hệ thống UNIX. Chúng ta sẽ theo định nghĩa thứ hai của UNIX, vì vậy chúng ta thường nói những điều như "linux, giống như những sự hiện thực UNIX khác..."
1.1 Lịch sử vắn tắt của UNIX và C
Sự hiện thực UNIX đầu tiên được phát triển vào năm 1969(cùng năm sinh với Linus Torvalds) bởi Ken Thompson tại phòng thí nghiệm Bell, một chi nhánh của tập đoàn viễn thông, AT&T. Nó được viết bằng ngôn ngữ assembler cho một máy tính mini. Tên UNIX được đặt bằng cách chơi chữ của MULTICS((Multiplexed Information and Computing Service), tên của dự án hệ điều hành trước đó trong sự hợp tác giữa MIT và Genaral electric. Thompson đã đưa ra nhiều ý tưởng cho hệ điều hành mới của ông ấy từ MULTICS, bao gồm cấu trúc file system, một chương trình riêng biệt cho lệnh thông dịch, và khái niệm file là một chuỗi byte không có cấu trúc.
Vào năm 1970, UNIX được viết bằng ngôn ngữ máy cho máy tính mini, sau đó trên một máy tính mạnh hơn. Sự kế thừa đó còn được tìm thấy trong hầu hết các triển khai UNIX bao gồm linux.
Một thời gian ngắn, Dennis Ritchie, một trong những đồng nghiệp của Thompson tại phòng thí nghiệm đã thiết kế và hiện thực bằng ngôn ngữ C. Đó là một quá trình mang tính đột phá, C được theo sau một ngôn ngữ thông dịch, B. B được hiện thực bơi Thompson và nhiều ý tưởng của nó từ ngôn ngữ lập trình trước đó tên là BCPL. Năm 1973, C đã trưởng thành tới điểm mà UNIX kernel có thể hầu hết được viết theo ngôn ngữ mới này. UNIX do đó trở thành một trong những hệ điều hành sớm nhất được viết theo ngôn ngữ cấp cao, việc tương thích đối với các kiến trúc phần cứng khác là khả thi.
Nguồn gốc của C giải thích tại sao nó và hậu duệ của nó C++, được sử dụng rộng rã như là một ngôn ngữ lập trình hệ thống ngày nay. Ngôn ngữ được sự dụng rộng rãi trước đó được thiết kế với mục đích khác. FORTRAN cho các công việc tính toán toán học dành cho kĩ sư và các nhà khoa học; COBOL cho hệ thống thương mại xử lý lưu trữ dữ liệu đối tượng. C đáp ứng vào điểm còn thiếu, không giống như FORTRAN và COBOL, thiết kế của C xuất phát từ ý tưởng và như cầu của số ít cá nhân làm việc với mục đính duy nhất: Phát triển một ngôn ngữ bậc cao cho triển khai UNIX kernel và liên kết với phần mềm. Giống như bản thân hệ điều hành UNIX, C được thiết kế bởi chuyên gia lập trình cho chính họ sử dụng. Kết quả tạo ra một ngôn ngữ nhỏ gọn, hiệu quả, mạnh mẽ, mô đun hóa, thực dụng và mạch lạc trong thiết kế của nó.
Giữa những năm 1969 và 1979, UNIX trải qua một số lần release, gọi là "phiên bản". Thực ra, những bản release này chính là những "bản chụp nhanh" của những phiên bản trong quá trình phát triển tại AT&T. [Salus, 1994] những thời điểm đáng chú ý của 6 phiên bản UNIX đầu tiên:
- Phiên bản đầu tiên, tháng 11 năm 1971: tại thời điểm này, UNIX đang chạy trên PDP-11 và đã có một compiler FORTRAN và những phiên bản của nhiều chương trình vẫn được sử dụng cho đến ngày nay, bao gồm ar, cat, chmod, chown, cp, dc, ed, find, ln, ls, mail, mkdir, mv, rm, sh, su, who.
- Phiên bản thứ hai, tháng 6 năm 1972: tại thời điểm này, UNIX được cài đặt trên 10 máy trong AT&T.
- Phiên bản thứ ba, tháng 2 năm 1973: Phiên bản này được bao gồm một trình biên dịch C và lần đầu hiện thực kiểu đường ống.
- Phiên bản thứ tư, tháng 11 năm 1973: Đây là phiên bản đầu tiên được hầu hết viết hoàn toàn bằng C.
- Phiên bản thứ năm, tháng 6 năm 1974: Tại thời điểm này, UNIX được cài đặt trên hơn 50 hệ thống.
- Phiên bản thứ sáu, tháng 5 năm 1975: Đây là phiên bản đầu tiên được sử dụng rộng rãi bên ngoài AT&T.
Trải qua những đợt release này, sự sử dụng và uy tín của UNIX bắt đầu trải rộng, đầu tiên trong AT&T, và sau đó xa hơn. Một sự cống hiến quan trọng cho sự lan rộng này là việc xuất bản một bài báo trên UNIX trong tạp chí được đọc rộng rãi trên truyền thông của ACM ([Ritchie & Thompson, 1974]).
Tại thời điểm đó, AT&T đã đăng kí độc quyền trên hệ thống viễn thông được chính phủ Mỹ phê chuẩn. Những điều khoản cam kết với chính phủ Mỹ ngăn người khác bán phần mềm, có nghĩa là nó không thể bán UNIX như là một sản phẩm. Thay vào đó, bắt đầu từ năm 1974 với phiên bản thứ năm và đặc biệt là phiên bản thứ sáu. AT & T được cấp phép UNIX để sử dụng trong các trường đại học với một khoản phí phân phối danh nghĩa. Bản phân phối cho trường đại học được bao gồm tài liệu và kernel source code(khoảng 10000 dòng code vào thời điểm đó).
Bản phân phối UNIX của AT&T vào những trường đại học đã cống hiến tuyệt với cho cộng đồng và trong việc sử dụng hệ điều hành, và vào năm 1977, UNIX được chạy trên 500 miền, bao gồm 125 trường đại học trong nước mỹ và nhiều nước khác. UNIX cung cấp cho các trường đại học một hệ điều hành đa người dùng tương tác mà vừa rẻ vừa mạnh mẽ, tại thời điểm đó khi mà hệ điều hành thương mại rất đắt. Nó cũng đưa cho các nhà khoa học máy tính của các trường đại học source code của một hệ điều hành thực, cái mà họ có thể chỉnh sửa và cung cấp cho sinh viên của họ học từ đó và trải nghiệm. Nhiều trong số những sinh viên đó, được trang bị kiến thức UNIX và trở thành nhà truyền giáo UNIX. Những người khác đi tìm hoặc gia nhập vào vô số công ty khởi nghiệp bán những máy tính workstation rẻ dễ dàng chạy hệ điều hành UNIX.
Sự sinh ra của BSD và System V
Tháng một năm 1979 là thời điểm release phiên bản thứ 7 của UNIX, nó được cải thiện sự linh động của hệ thống và cung cấp tăng cường file system. Lần release này cũng chứa nhiều công cụ mới, bao gồm awk, make, sed, tar, uucp, Bourne shell, và FORTRAN 77 compiler, Phiên bản release thứ 7 cũng đáng kể bởi điều này, UNIX phân chia thành hai biến thể quan trọng, mà nguồn gốc của nó chúng ta sẽ mô tả ngắn gọn sau đây.
Thompson dành thời gian năm 1975/1976 học lên giáo sư tại trường đại học Clifornia tại Berkeley, trường đại học mà ông ấy đã tốt nghiệp. Ở đó, ông ấy làm việc với nhiều sinh viên đã tốt nghiệp, thêm nhiều tính năng mới vào UNIX. (Một trong những sinh viên này, Bill Joy, sau đó đồng sáng lập Sun Microsytems, một hướng đi mới trong thị trường UNIX workstation). Qua thời gian, nhiều tính năng mới và công cụ được phát triển tại Berkeley, bao gồm C shell, vi, cải thiện file system, sendmail, Pascal compiler, và quản lý bộ nhớ ảo trên kiến trúc mới Digital VAX.
Dưới cái tên Berkeley Software Distribution(BSD), phiên bản này của UNIX, bao gồm source code của nó, được phân phối rộng rãi. Bản phân phối đầy đủ đầu tiên là 3BSD vào tháng 12 năm 1979. Năm 1983, nhóm nghiên cứu hệ thống máy tính tại trường đại học đã release 4.2BSD. Phiên bản này đáng chú ý vì nó chứa phiên bản đầy đủ của giao thức TCP/IP, bao gồm ứng dụng sockets và nhiều ứng dụng mạng. 4.2BSD và bản trước đó 4.1BSD được phân phối rộng rãi trong các trường đại học trên toàn thế giới. Chúng cũng hình thành cơ bản cho SunOS(release lần đầu tiên năm 1983). Biến thể UNIX này được bán bởi Sun. Một phiên bản BSD đáng kể khác đó là 4.3, năm 1986, và cuối cùng là phiên bản 4.4BSD năm 1993.
Tích hợp đầu tiên của hệ thống UNIX đối với phần cứng khác PDP-11 diễn ra trong suốt từ năm 1977 tới năm 1978, khi Dennis và Steve Johnson tích hợp nó vào Interdata 8/32 và Richard Miller tại trường đại học Wollon-gong tại Australia.
1.2 Lịch sử vắn tắt của Linux
Cụm từ linux được sử dụng rộng rãi để ám chỉ toàn bộ họ hệ điều hành UNIX mà có sử dụng Linux kernel. Tuy nhiên, điều này là một thứ gì đó nhầm lẫn, vì nhiều thành phần chính chứa trong bản phân phối Linux thương mại điển hình thực sự bắt nguồn từ một dự án mà trước khi bắt đầu phát triển Linux vài năm.
1.2.1 GNU project
Trong năm 1984, Richard Stallman, một thiên tài lập trình đang làm việc tại MIT, được phân công làm việc trong việc tạo nên một bản UNIX miễn phí. Tầm nhìn của Stallman là một cái nhìn đạo đức và "miễn phí" được định nghĩa trong ngữ cảnh hợp pháp, hơn là trong ngữ cảnh tài chính. Tuy nhiên, Sự tự do hợp pháp mà Stallman mô tả mang theo một nghĩa không tường minh rằng phần mềm như hệ điều hành sẽ có sẵn hoặc giá rất thấp. Stallman đã chiến đấu chống lại các hạn chế pháp lý được đặt trên các hệ điều hành độc quyền bởi các nhà cung cấp máy tính. Những hạn chế này nghĩa là mua một phần mềm máy tính theo cách thông thường không thể nhìn thấy source code của phần mềm mà họ mua, và họ chắc chắn không thể copy, thay đổi, hoặc phân phối lại nó. Ông ấy đã chỉ ra rằng những cơ chế như thế khuyến khích các lập trình viên cạnh tranh với nhau và che dấu công việc của họ, hơn là cộng tác và chia sẻ nó.
Để hồi đáp, Ông đã bắt đầu một dự án mang tên GNU để phát triền một hệ điều hành hoàn toàn miễn phí, họ UNIX, bao gồm một kernel và tất cả những gói phần mềm liên quan, và khuyến khích những người khác tham gia cùng với ông ấy. Vào năm 1985, Stallman thành lập tổ chức Free Software Foundation (FSF), một tổ chức phi lợi nhuận để hỗ trợ dự án GNU cũng như phát triển phần mềm miễn phí.
Khi dự án GNU được bắt đầu, BSD không tự do theo nghĩa của Stallman. Sử dụng BSD vẫn yêu cầu giấy phép từ AT & T và người dùng có thể không tự do sửa đổi và phân phối lại mã AT & T đã hình thành một phần của BSD. Một trong những kết quả quan trọng của dự án GNU là sự phát triển của GNU Giấy phép Công cộng Chung (GPL), hiện thân pháp lý của ý niệm miễn phí của Stallman Phần lớn phần mềm trong bản phân phối Linux, bao gồm hạt nhân, được cấp phép theo GPL hoặc một trong một số giấy phép tương tự. Phần mềm được cấp phép theo GPL phải được cung cấp ở dạng mã nguồn và phải được tự do phân phối lại theo các điều khoản của GPL. Các sửa đổi đối với phần mềm được cấp phép GPL được cho phép tự do, nhưng bất kỳ sự phân phối nào của phần mềm được sửa đổi cũng phải được tuân theo các điều khoản của GPL. Nếu phần mềm sửa đổi được phân phối dưới dạng thực thi, tác giả cũng phải cho phép bất kỳ người nhận nào có tùy chọn lấy mã nguồn được sửa đổi không quá chi phí phân phối. Phiên bản đầu tiên của GPL được phát hành vào năm 1989. Phiên bản hiện tại của giấy phép, phiên bản 3, được phát hành vào năm 2007. Phiên bản 2 của giấy phép, được phát hành vào năm 1991, vẫn được sử dụng rộng rãi, và là giấy phép được sử dụng cho hạt nhân Linux.
Dự án GNU ban đầu không tạo ra một UNIX kernel, nhưng đã tạo ra một loạt các chương trình khác. Vì những chương trình này được thiết kế để chạy trên hệ điều hành giống UNIX, chúng có thể được sử dụng trên phiên bản UNIX đã tồn tại và, trong một số trường hợp, thậm chí được chuyển sang các hệ điều hành khác. Trong số các chương trình nổi tiếng được sản xuất bởi dự án GNU là Trình soạn thảo văn bản Emacs, GCC (ban đầu là trình biên dịch GNU C, nhưng bây giờ đã đổi tên thành Bộ sưu tập trình biên dịch GNU, bao gồm các trình biên dịch cho C, C ++ và các ngôn ngữ khác), bash shell và glibc (thư viện GNU C).
Vào đầu những năm 1990, dự án GNU đã tạo ra một hệ thống hầu như hoàn thành, ngoại trừ một thành phần quan trọng: một hạt nhân UNIX. Dự án GNU đã bắt đầu làm việc trên một thiết kế hạt nhân đầy tham vọng, được gọi là GNU / HURD, dựa trên vi nhân Mach. Tuy nhiên, HURD đã không thể được phát hành. (Vào thời điểm viết bài, công việc tiếp tục theo HURD, hiện chỉ chạy trên kiến trúc x86-32.)
Bởi vì một phần quan trọng của mã chương trình cấu thành những gì thường được gọi là hệ thống Linux thực sự xuất phát từ dự án GNU, Stallman thích sử dụng thuật ngữ GNU / Linux để chỉ toàn bộ hệ thống. Các câu hỏi đặt tên (Linux so với GNU / Linux) là nguồn gốc của một số cuộc tranh luận trong cộng đồng phần mềm tự do. Vì cuốn sách này chủ yếu liên quan đến API của Linux kernel, chúng ta thường sử dụng thuật ngữ Linux. Tất cả những gì được yêu cầu là một hạt nhân để đi với hệ thống UNIX hoàn chỉnh khác đã được dự án GNU tạo ra.
The Linux Kernel
Năm 1991, Linus Torvalds, một sinh viên Phần Lan tại Đại học Helsinki, lấy cảm hứng để viết một hệ điều hành cho máy tính Intel 80386 của mình. Trong quá trình nghiên cứu của mình, Torvalds đã tiếp xúc với Minix, một hoạt động giống UNIX nhỏ, hệ thống hạt nhân được phát triển vào giữa những năm 1980 bởi Andrew Tanenbaum, một giáo sư đại học ở Hà Lan. Tanenbaum thực hiện Minix, hoàn chỉnh với mã nguồn, có sẵn như một công cụ để dạy thiết kế hệ điều hành trong các khóa học đại học. Hạt nhân Minix có thể được xây dựng và chạy trên hệ thống 386. Tuy nhiên, vì mục đích chính của nó như một công cụ giảng dạy, nó được thiết kế phần lớn độc lập với kiến trúc phần cứng, và nó không tận dụng tối đa khả năng của bộ vi xử lý 386.
Torvalds do đó bắt đầu vào một dự án để tạo ra một Nhân UNIX hiệu quả, đầy đủ tính năng chạy trên 386. Trong vài tháng, Torvalds đã phát triển cơ bản kernel cho phép anh ta biên dịch và chạy các chương trình GNU khác nhau. Sau đó, vào Ngày 5 tháng 10 năm 1991, Torvalds yêu cầu sự giúp đỡ của các lập trình viên khác, bản thông báo sau đây được thông báo nhiều lần về phiên bản 0.02 của kernel của ông trong comp.os.minix Nhóm Usenet:
"Bạn có khao khát cho những ngày đẹp của Minix-1.1, khi những quý ông đã viết trình điều khiển thiết bị của riêng họ? Bạn không có dự án tốt đẹp nào và sắp chết khi cố cắn răng thử sửa đổi trên hệ điều hành cho nhu cầu của bạn? Bạn thấy nó bực bội khi mọi thứ hoạt động trên Minix? Không còn phải thức nhiều đêm để có được chương trình tiện lợi hoạt động? Thì, bài đăng này là dành cho bạn. Như tôi đã đề cập một tháng trước, tôi đang làm việc trên một phiên bản miễn phí của Minix trông giống như máy tính AT-386. Nó cuối cùng đã đạt đến giai đoạn có thể sử dụng được (mặc dù có thể không phụ thuộc vào những gì bạn muốn), và tôi sẵn sàng đưa ra mã nguồn phân phối rộng hơn. Nó chỉ là phiên bản 0.02. . . nhưng tôi đã chạy thành công bash, gcc, gnu-make, gnu-sed, nén, v.v."
Theo truyền thống thời gian được vinh danh của việc tạo ra các dòng vô tính UNIX kết thúc bằng chữ X, hạt nhân (cuối cùng) lại có tên Linux. Ban đầu, Linux đã được đặt theo một giấy phép hạn chế hơn, nhưng Torvalds sớm làm cho nó có sẵn theo GNU GPL. Cuộc gọi hỗ trợ tỏ ra hiệu quả. Các lập trình viên khác đã gia nhập Torvalds sự phát triển của Linux, thêm các tính năng khác nhau, chẳng hạn như hệ thống tệp được cải tiến , hỗ trợ mạng, trình điều khiển thiết bị và hỗ trợ đa bộ xử lý. Vào Tháng 3 năm 1994, các nhà phát triển đã có thể phát hành phiên bản 1.0. Linux 1.2 đã xuất hiện vào tháng 3 năm 1995, Linux 2.0 vào tháng 6 năm 1996, Linux 2.2 vào tháng 1 năm 1999 và Linux 2.4 Tháng 1 năm 2001. hạt nhân phát triển 2.5 bắt đầu vào tháng 11 năm 2001, và dẫn đến việc phát hành Linux 2.6 vào tháng 12 năm 2003.
Bên lề: BSD
Điều đáng lưu ý là UNIX miễn phí khác đã có sẵn cho x86-32 trong đầu những năm 1990. Bill và Lynne Jolitz đã phát triển một hệ thống BSD trưởng thành cho x86-32, được gọi là 386 / BSD. Bản tích hợp này được dựa trên BSD Net / 2 phát hành (tháng 6 năm 1991), một phiên bản của mã nguồn 4.3BSD, trong đó tất cả mã nguồn AT & T độc quyền còn lại đã được thay thế hoặc trong trường hợp trong số sáu tệp mã nguồn không thể được viết lại, loại bỏ một cách đáng kể. Jolitzes chuyển mã Net / 2 thành x86-32, viết lại các tệp nguồn bị thiếu và tạo bản phát hành đầu tiên (phiên bản 0.0) của 386 / BSD vào tháng 2 năm 1992.
Sau một làn sóng thành công ban đầu và phổ biến, làm việc trên 386 / BSD tụt lại vì nhiều lý do. Khi đối mặt với một bản vá lỗi ngày càng lớn, hai các nhóm phát triển thay thế sớm xuất hiện, tạo ra các bản phát hành riêng của họ trên 386 / BSD: NetBSD, trong đó nhấn mạnh tính di động cho một loạt các phần cứng nền tảng, và FreeBSD, nhấn mạnh hiệu suất và là phổ biến nhất của các BSD hiện đại. Bản phát hành NetBSD đầu tiên là 0.8, vào tháng 4 năm 1993. CD-ROM FreeBSD đầu tiên (phiên bản 1.0) xuất hiện vào tháng 12 năm 1993. Một BSD khác, OpenBSD, xuất hiện vào năm 1996 (như là một phiên bản đầu tiên được đánh số 2.0) sau khi forking từ dự án NetBSD. OpenBSD nhấn mạnh tính bảo mật. Vào giữa năm 2003, một BSD mới, DragonFly BSD, xuất hiện sau khi tách ra khỏi FreeBSD 4.x. DragonFly BSD dùng cách tiếp cận khác với FreeBSD 5.x đối với thiết kế cho các kiến trúc đa xử lý đối xứng (SMP).
Có lẽ không có thảo luận về BSDs vào đầu những năm 1990 là đầy đủ mà không đề cập đến các vụ kiện giữa Phòng thí nghiệm Hệ thống UNIX (USL, công ty con AT & T) tách ra để phát triển và thị trường UNIX) và Berkeley. Đầu năm 1992, công ty Berkeley Software Design, Incorporated bắt đầu phân phối một BSD UNIX, BSD / OS được hỗ trợ thương mại, dựa trên Bản phát hành Net / 2 và bổ sung 386 / BSD của Jolitzes. BSDi phân phối file cài đặt và mã nguồn với giá $ 995 (đô la Mỹ) và khuyên khách hàng tiềm năng sử dụng số điện thoại 1-800-ITS-UNIX
Vào tháng 4 năm 1992, USL đã nộp đơn kiện chống lại BSDi nhằm ngăn chặn BSDi khỏi việc bán một sản phẩm mà USL tuyên bố vẫn bị vướng bận bởi mã nguồn USL độc quyền và bí mật thương mại. USL cũng yêu cầu BSDi ngừng sử dụng lừa đảo số điện thoại. Tòa án cuối cùng đã bác bỏ tất cả nhưng hai tuyên bố của USL, và một counteruit của Đại học California chống lại USL sau đó, trong đó trường đại học tuyên bố rằng USL đã không đưa ra tín dụng hạn chế cho việc sử dụng mã BSD trong Hệ thống V.
Trong khi những điều này đang chờ giải quyết, USL đã được Novell mua lại, có CEO, Noorda, tuyên bố công khai rằng ông muốn cạnh tranh trên thị trường hơn là tại tòa án. Thoả thuận thu xếp cuối cùng đã đạt được vào tháng 1 năm 1994, với Đại học California được yêu cầu xóa 3 trong số 18.000 tệp trong Bản phát hành Net / 2, thực hiện một số thay đổi nhỏ đối với một vài tệp khác và thêm thông báo bản quyền USL vào khoảng 70 tệp khác mà trường đại học vẫn có thể tiếp tục phân phối tự do. Hệ thống được sửa đổi này đã được phát hành dưới dạng 4.4BSD-Lite vào tháng 6 năm 1994. (Bản phát hành cuối cùng từ trường đại học là 4.4BSD-Lite, Release 2 Tháng 6 năm 1995.) Tại thời điểm này, các điều khoản giải quyết pháp lý yêu cầu BSDi,FreeBSD và NetBSD thay thế cơ sở Net / 2 của họ bằng phiên bản 4.4BSD-Lite đã sửa đổi mã nguồn. mặc dù điều này gây ra một số chậm trễ trong sự phát triển của các dẫn xuất BSD, nó cũng có tác dụng tích cực hệ thống được đồng bộ hóa với ba năm phát triển công việc được thực hiện bởi Nhóm nghiên cứu hệ thống máy tính của trường đại học kể từ khi phát hành Net/2
Linux kernel version numbers
Giống như hầu hết các dự án phần mềm tự do, Linux theo mô hình phát hành nhanh, phát hành thường xuyên, để các bản sửa đổi hạt nhân mới xuất hiện thường xuyên (đôi khi thậm chí hàng ngày). Khi người dùng Linux tăng lên, mô hình phát hành đã được điều chỉnh để giảm sự gián đoạn
người dùng hiện tại. Cụ thể, sau khi phát hành Linux 1.0, các nhà phát triển hạt nhân
đã sử dụng lược đồ đánh số phiên bản hạt nhân với mỗi bản phát hành có số x.y.z: x đại diện cho phiên bản chính, y phiên bản nhỏ trong phiên bản chính và z sửa đổi phiên bản phụ (cải tiến nhỏ và sửa lỗi).
Theo mô hình này, hai phiên bản hạt nhân luôn được phát triển: một phiên bản ổn định chi nhánh để sử dụng trên các hệ thống sản xuất, thậm chí có một số phiên bản nhỏ, và một chi nhánh phát triển dễ biến mất hơn, điều này mang lại số lượng nhỏ lẻ cao hơn tiếp theo số phiên bản. Lý thuyết - không phải lúc nào cũng tuân theo nghiêm ngặt trong thực tế - là tất cả các tính năng mới sẽ được thêm vào trong chuỗi hạt nhân phát triển hiện tại, trong khi các tính năng mới các phiên bản trong chuỗi hạt nhân ổn định nên được hạn chế đối với các cải tiến nhỏ và sửa lỗi. Khi nhánh phát triển hiện tại được coi là phù hợp cho phát hành, nó đã trở thành nhánh ổn định mới và được gán một phiên bản mới. Ví dụ, nhánh hạt nhân phát triển 2.3.z dẫn đến 2.4 nhánh hạt nhân ổn định. Sau bản phát hành hạt nhân 2.6, mô hình phát triển đã được thay đổi. Các động lực chính cho sự thay đổi này phát sinh từ các vấn đề và thất vọng gây ra bởi khoảng thời gian dài giữa các phiên bản hạt nhân ổn định. (Gần ba năm trôi qua giữa việc phát hành Linux 2.4.0 và 2.6.0.) Đã có các cuộc thảo luận định kỳ về tinh chỉnh mô hình này, nhưng các chi tiết thiết yếu vẫn như sau: z Không còn sự tách biệt giữa hạt ổn định và hạt nhân phát triển nữa. Mỗi bản phát hành 2.6.z mới có thể chứa các tính năng mới và trải qua một vòng đời bắt đầu với việc bổ sung các tính năng mới, sau đó được ổn định. Khi phiên bản ứng cử viên được coi là đủ ổn định, nó được phát hành dưới dạng kernel 2.6.z. Chu kỳ phát hành thường dài khoảng ba tháng. bản phát hành 2.6.z ổn định có thể yêu cầu các bản vá lỗi nhỏ để khắc phục lỗi hoặc sự cố bảo mật. Nếu các bản sửa lỗi này có mức độ ưu tiên đủ cao và các bản vá lỗi được coi là đơn giản, đủ để được "rõ ràng" chính xác, sau đó, thay vì chờ đợi cho bản phát hành 2.6.z tiếp theo, chúng được áp dụng để tạo bản phát hành với một số dạng 2.6.z.r, trong đó r là một số thứ tự cho một sửa đổi nhỏ về điều này .Hạt nhân 2.6.z. z Trách nhiệm bổ sung được chuyển sang các nhà cung cấp phân phối để đảm bảo sự ổn định của hạt nhân được cung cấp với một bản phân phối.
Các chương sau này đôi khi cần lưu ý phiên bản hạt nhân trong đó một API cụ thể thay đổi (ví dụ, system call mới hoặc đã sửa đổi) đã xảy ra. Mặc dù, trước chuỗi 2.6.z, hầu hết các thay đổi hạt nhân xảy ra trong các nhánh phát triển được đánh số lẻ, chúng tôi thường đề cập đến phiên bản hạt nhân ổn định sau đây trong đó thay đổi xuất hiện, vì hầu hết các nhà phát triển ứng dụng thường sẽ sử dụng một hạt nhân ổn định, chứ không phải là một trong các hạt nhân phát triển. Trong nhiều trường hợp, lưu ý hạt nhân phát triển chính xác trong đó một tính năng cụ thể xuất hiện hoặc đã thay đổi.
Đối với những thay đổi xuất hiện trong chuỗi hạt nhân 2.6.z, chúng ta cần lưu ý chính xác phiên bản hạt nhân. Khi chúng ta nói rằng một tính năng mới trong kernel 2.6, không có một số sửa đổi z, có nghĩa là một tính năng đã được thực hiện trong chuỗi kernel 2.5 phát triển và xuất hiện lần đầu trong hạt nhân ổn định ở phiên bản 2.6.0. Tại thời điểm viết bài, hạt nhân Linux ổn định 2.4 vẫn được hỗ trợ bởi những người bảo trì kết hợp các bản vá lỗi và bản sửa lỗi cần thiết và định kỳ phát hành bản sửa đổi mới. Điều này cho phép các hệ thống được cài đặt tiếp tục sử dụng nhân 2.4, thay vì bị buộc phải nâng cấp lên một chuỗi hạt nhân mới (có thể đòi hỏi công việc quan trọng trong một số trường hợp).
Tích hợp vào các hệ thống phần cứng khác
Trong quá trình phát triển ban đầu của Linux, việc triển khai hiệu quả trên Intel 80386 là mục tiêu chính, thay vì tính di động cho các kiến trúc bộ vi xử lý khác. Tuy nhiên, với sự phổ biến ngày càng tăng của Linux, các tích đến bộ vi xử lý khác kiến trúc bắt đầu xuất hiện, bắt đầu với việc tích hợp vào chip Digital Alpha. Danh sách các kiến trúc phần cứng mà Linux đã được tích hợp tiếp tục phát triển và bao gồm x86-64, Motorola / IBM PowerPC và PowerPC64, Sun SPARC và SPARC64 (UltraSPARC), MIPS, ARM (Acorn), IBM zSeries (trước đây là System / 390),
Intel IA-64 (Itanium; xem [Mosberger & Eranian, 2002]), Hitachi SuperH, HP
PA-RISC và Motorola 68000
Bản phân phối Linux
Nói một cách chính xác, thuật ngữ Linux chỉ đề cập đến hạt nhân được phát triển bởi Linus Torvalds và những người khác. Tuy nhiên, thuật ngữ Linux thường được sử dụng để có nghĩa là hạt nhân, cộng với nhiều phần mềm khác (công cụ và thư viện) cùng nhau tạo nên một hệ điều hành. Trong những ngày đầu của Linux, người dùng được yêu cầu lắp ráp tất cả phần mềm này, tạo ra một hệ thống tập tin, và đặt một cách chính xác và cấu hình tất cả phần mềm trên hệ thống tệp đó. Điều này đòi hỏi thời gian và chuyên môn đáng kể. kết quả, một thị trường mở cho các nhà phân phối Linux, người đã tạo ra các gói (bản phân phối) để tự động hóa hầu hết quá trình cài đặt, tạo hệ thống tệp và cài đặt hạt nhân và phần mềm cần thiết khác. Các bản phân phối sớm nhất xuất hiện vào năm 1992 và bao gồm MCC tạm thời của Linux (Trung tâm Tin học Manchester, Vương quốc Anh), TAMU (Đại học Texas A & M) và SLS (SoftLanding Linux System). Phân phối thương mại còn tồn tại lâu đời nhất, Slackware, xuất hiện vào năm 1993. Bản phân phối Debian phi thương mại xuất hiện đồng thời, SUSE và Red Hat nhanh chóng theo sau. Ubuntu Hiện tại rất phổ biến phân phối lần đầu tiên xuất hiện vào năm 2004. Ngày nay, nhiều công ty phân phối cũng sử dụng các lập trình viên tích cực đóng góp cho dự án phần mềm miễn phí hiện có hoặc khởi tạo dự án mới.
Tiêu chuẩn hóa
Đến cuối những năm 1980, nhiều triển khai UNIX có sẵn cũng có nhược điểm. Một số triển khai UNIX dựa trên BSD, một số khác dựa trên trên Hệ thống V và một số đã sử dụng các tính năng từ cả hai biến thể. Hơn nữa, mỗi nhà cung cấp thương mại đã thêm các tính năng bổ sung riêng của mình. Hậu quả là phần mềm di chuyển từ một bản thực thi UNIX đến người khác trở nên khó khăn hơn. Tình trạng này tạo áp lực mạnh mẽ cho tiêu chuẩn hóa ngôn ngữ lập trình C và hệ thống UNIX, để các ứng dụng có thể dễ dàng được chuyển từ hệ thống này sang hệ thống khác. Bây giờ chúng ta nhìn thấy được các kết quả tiêu chuẩn.
1.3.1 Ngôn ngữ lập trình C
Vào đầu những năm 1980, C đã tồn tại được mười năm và được triển khai trên một loạt các hệ thống UNIX và trên các hệ điều hành khác. Khác biệt nhỏ đã phát sinh giữa các triển khai khác nhau, một phần vì các khía cạnh nhất định của các ngôn ngữ nên hoạt động không được nêu chi tiết trong tiêu chuẩn thực tế hiện tại cho cuốn sách năm 1978 của C, Kernighan và Ritchie, Ngôn ngữ lập trình C. (Các cú pháp C cũ hơn được mô tả trong cuốn sách đó đôi khi được gọi là C truyền thống hoặc K & R C.) Hơn nữa, sự xuất hiện của C++ vào năm 1985 đã nêu bật một số cải tiến nhất định và các bổ sung có thể được thực hiện cho C mà không phá vỡ các chương trình hiện có, các nguyên mẫu hàm, phân công cấu trúc, các loại vòng loại (const và volatile), các kiểu liệt kê và từ khóa void. Những yếu tố này tạo ra một cơ sở cho tiêu chuẩn hóa C vào năm 1989 với sự chấp thuận của tiêu chuẩn quốc gia Mỹ (ANSI) C tiêu chuẩn (X3.159-1989), sau đó được thông qua vào năm 1990 như là một tiêu chuẩn của Tổ chức Tiêu chuẩn Quốc tế (ISO) (ISO / IEC 9899: 1990). Cũng như xác định cú pháp và ngữ nghĩa của C, tiêu chuẩn này mô tả hoạt động của chuẩn C thư viện, bao gồm các hàm stdio, các hàm xử lý chuỗi, các hàm toán học, các tệp tiêu đề khác nhau, v.v. Phiên bản C này thường được gọi là C89 hoặc (ít phổ biến hơn) ISO C90, và được mô tả đầy đủ trong ấn bản thứ hai (1988) của Kernighan và Ngôn ngữ lập trình C của Ritchie.
Việc sửa đổi tiêu chuẩn C đã được ISO phê chuẩn vào năm 1999 (ISO / IEC 9899: 1999; xem http://www.open-std.org/jtc1/sc22/wg14/www/standards). Tiêu chuẩn này thường được gọi là C99, và bao gồm một loạt các thay đổi đối với ngôn ngữ và thư viện chuẩn của nó. Những thay đổi này bao gồm việc bổ sung dữ liệu long và Boolean các kiểu, C++ - kiểu (//) các chú thích, các con trỏ bị giới hạn và các mảng có độ dài biến đổi.(Tại thời điểm viết, công việc đang được tiến hành khi sửa đổi thêm tiêu chuẩn C, không chính thức có tên C1X. Tiêu chuẩn mới dự kiến sẽ được phê chuẩn vào năm 2011.) Các tiêu chuẩn C là độc lập với các chi tiết của bất kỳ hệ điều hành nào; có nghĩa chúng không được gắn với hệ thống UNIX. Điều này có nghĩa là các chương trình C được viết bằng chỉ thư viện C chuẩn phải được di chuyển đến bất kỳ máy tính và hệ điều hành nào cung cấp triển khai C.
Trong lịch sử, C89 thường được gọi là ANSI C, và thuật ngữ này đôi khi vẫn được sử dụng với ý nghĩa đó. Ví dụ, gcc sử dụng ý nghĩa đó; -bộ định danh –ansi của nó có nghĩa là "hỗ trợ tất cả các chương trình ISO C90". Tuy nhiên, chúng tôi tránh thuật ngữ này vì nó bây giờ hơi mơ hồ. Kể từ khi ủy ban ANSI thông qua C99 sửa đổi, nói đúng, ANSI C bây giờ là C99.
Các tiêu chuẩn POSIX đầu tiên
Thuật ngữ POSIX (viết tắt của Portable Operating System Interface) đề cập đến nhóm các tiêu chuẩn được phát triển dưới sự bảo trợ của viện Kỹ sư điện điện tử (IEEE), đặc biệt là Ủy ban tiêu chuẩn ứng dụng di động (PASC, http://www.pasc.org/). Mục tiêu của các tiêu chuẩn PASC là thúc đẩy khả năng di động ứng dụng ở cấp mã nguồn. Tên POSIX được đề xuất bởi Richard Stallman. X cuối cùng xuất hiện vì tên của hầu hết các biến thể UNIX kết thúc bằng X. Ghi chú tiêu chuẩn tên nên được phát âm là "pahz-icks", như "positive". Điều thú vị nhất của tiêu chuẩn POSIX cho mục đích của chúng tôi là tiêu chuẩn POSIX đầu tiên, được gọi là POSIX.1 (hoặc, đầy đủ hơn, POSIX 1003.1) và tiêu chuẩn POSIX.2 tiếp theo.
POSIX.1 and POSIX.2
POSIX.1 trở thành một tiêu chuẩn IEEE vào năm 1988 và với các phiên bản nhỏ, đã được thông qua như một tiêu chuẩn ISO vào năm 1990 (ISO / IEC 9945-1: 1990). (Các tiêu chuẩn POSIX gốc không có sẵn trực tuyến, nhưng có thể được mua từ IEEE tại http://www.ieee.org/.)
POSIX.1 ban đầu được dựa trên tiêu chuẩn không chính thức trước đó (1984) được đưa ra bởi một hiệp hội các nhà cung cấp UNIX được gọi là / usr / group.
POSIX.1 ghi lại một API cho một tập hợp các dịch vụ sẽ được cung cấp cho một chương trình bởi một hệ điều hành phù hợp. Hệ điều hành thực hiện điều này có thể được chứng nhận là tuân thủ POSIX.1. POSIX.1 dựa trên lời gọi hệ thống UNIX và hàm API thư viện C, nhưng nó không yêu cầu bất kỳ triển khai cụ thể nào được liên kết với interface này. Điều này có nghĩa là interface có thể được thực hiện bởi bất kỳ hệ điều hành nào, không cụ thể là một hệ điều hành UNIX. Trên thực tế, một số nhà cung cấp đã thêm API vào các hệ điều hành độc quyền của chúng làm cho chúng tuân thủ POSIX.1, Một số phần mở rộng cho tiêu chuẩn POSIX.1 ban đầu cũng rất quan trọng. IEEE POSIX 1003.1b (POSIX.1b, trước đây được gọi là POSIX.4 hoặc POSIX 1003.4), được phê chuẩn vào năm 1993, chứa một loạt các phần mở rộng thời gian thực theo tiêu chuẩn POSIX cơ bản. IEEE POSIX 1003.1c (POSIX.1c), được phê chuẩn vào năm 1995. Năm 1996, phiên bản sửa đổi của tiêu chuẩn POSIX.1 (ISO / IEC 9945-1: 1996) được tạo ra, cốt lõi không thay đổi, nhưng kết hợp thời gian thực và tiện ích mở rộng. IEEE POSIX 1003.1g (POSIX.1g) đã xác định các API mạng, bao gồm cả socket. IEEE POSIX 1003.1d (POSIX.1d), được phê chuẩn vào năm 1999 và POSIX.1j, được phê chuẩn vào năm 2000, đã xác định các phần mở rộng thêm thời gian thực cho tiêu chuẩn cơ bản POSIX.
Các phần mở rộng thời gian thực POSIX.1b bao gồm đồng bộ hóa tập tin; không đồng bộ I / O; quá trình lên lịch; đồng hồ và bộ hẹn giờ chính xác cao; và interprocess giao tiếp bằng cách sử dụng semaphores, bộ nhớ chia sẻ và hàng đợi tin nhắn. Các tiền tố POSIX thường được áp dụng cho ba phương thức giao tiếp giữa các quá trình để phân biệt chúng với các semaphores tương tự, nhưng cũ hơn, bộ nhớ chia sẻ và message queue. Một tiêu chuẩn liên quan, POSIX.2 (1992, ISO / IEC 9945-2: 1993), đã chuẩn hóa shell và các tiện ích UNIX khác nhau, bao gồm giao diện dòng lệnh của C trình biên dịch
Nhận xét
Đăng nhận xét