2008-09-24 33 views
32

Tôi đang lên kế hoạch phát triển một hệ điều hành cho kiến ​​trúc x86.Phát triển một hệ điều hành cho kiến ​​trúc x86

  • Tôi có các tùy chọn ngôn ngữ lập trình nào?
  • Loại trình biên dịch nào có sẵn, tốt nhất là trên môi trường Windows?
  • Có bất kỳ nguồn nào tốt sẽ giúp tôi tìm hiểu thêm về phát triển hệ điều hành không?
  • Bạn có nên thử nghiệm hệ điều hành của mình trên Máy ảo hoặc trên phần cứng vật lý không?

Mọi đề xuất?

+1

Điều gì sẽ là ngôn ngữ tốt nhất để sử dụng không? trong kiến ​​trúc X86, ngôn ngữ lắp ráp x86 và C được chọn tốt nhất! – AminM

+1

Bỏ phiếu để đóng quá rộng. Xem thêm: http://stackoverflow.com/questions/254149/how-do-you-write-a-basic-operating-system?rq=1u –

Trả lời

1

Nếu bạn đang thực hiện một hệ điều hành đầy đủ, bạn sẽ cần phải sử dụng một loạt các ngôn ngữ. Tôi sẽ mong đợi Assembly, C và C++ ít nhất.

Tôi sẽ sử dụng Máy ảo cho hầu hết các thử nghiệm.

+0

Tại sao bạn có thể cần cả C++ và C? –

+0

@Daniel: Mặc dù C rất tuyệt vời cho hiệu suất cao, lập trình cấp thấp gần mức phần cứng, tôi khuyên bạn nên sử dụng C++ cho tất cả các công cụ cấp cao khác. Không chắc chắn lý do tại sao bạn/sẽ không/cần C và C++. – GEOCHET

+3

@Rich: Bạn không cần nhiều hơn một ngôn ngữ. Bạn cũng có thể muốn sử dụng nhiều hơn một. Đừng nhầm lẫn giữa "cần" với "muốn rất nhiều vì những lý do tốt". –

3

Bạn có thể muốn tra cứu XINU. nó là một hệ điều hành nhỏ cho x86 mà không thực sự được sử dụng cho bất cứ điều gì khác hơn là bị giải thể bởi sinh viên.

-5

Nếu bạn muốn viết hệ điều hành thì bạn cần một vài người. Một hệ điều hành không thể viết một người. Tôi nghĩ rằng nó là tốt hơn để làm việc trên các dự án hệ điều hành hiện có

này chỉ có một là danh sách ngắn các dự án hệ điều hành. Làm thế nào bạn có thể thấy có một dự án cho mọi ngôn ngữ có thể.

+1

Viết hệ điều hành là một dự án tiêu chuẩn cho sinh viên đại học CS tại đây. Chỉ mất một học kỳ. –

+0

Một hệ điều hành chắc chắn có thể được viết bởi một người duy nhất. Làm thế nào nhiều tính năng nó có và làm thế nào đánh bóng nó có thể có thể được thực sự hạn chế, nhưng nó chắc chắn là có thể. –

2

Tôi đã thực hiện điều đó một lần cho 386SX, trên bo mạch PCI. Một nguồn tốt về cách khởi động một cpu X86 trong chế độ bảo vệ là mã nguồn của Linux. Nó chỉ là một vài câu lệnh lắp ráp. Sau đó, bạn có thể sử dụng gcc để biên dịch mã C của mình. Kết quả là objectcode ở định dạng ELF. Tôi đã viết trình liên kết của riêng mình, để tạo một chương trình ngoài mã đối tượng. Và vâng, nó đã hoạt động! Chúc may mắn.

5

Ngôn ngữ và trình biên dịch phụ thuộc hoàn toàn vào những gì bạn đang cố gắng hoàn thành. Tuy nhiên, tôi khuyên bạn nên tiếp cận vấn đề ở mức độ quá thấp.

Có các tài liệu ngoài đó về nguyên tắc cơ bản của hệ điều hành. MIT has OpenCourseware on the subject. Đọc qua số's Operating Systems series và xem những thứ như Minix.

Nhận ý tưởng về những gì ở ngoài đó. Bắt đầu mày mò với mọi thứ. Mượn ý tưởng và xem họ đi đâu. Bạn có thể tái tạo lại bánh xe nếu bạn thực sự muốn, nhưng bạn sẽ tìm hiểu thêm bằng cách xây dựng trên các tác phẩm của người khác.

+0

Tôi không đồng ý ở một mức độ nào đó.Bạn học khá nhiều bằng cách phát minh lại bánh xe - giả sử mục tiêu ở đây là tìm hiểu và không tạo ra một sản phẩm. Viết trình phân tích cú pháp của riêng bạn cho một ngôn ngữ lập trình nổi tiếng bằng tay chắc chắn là phát minh lại bánh xe, nhưng nó vẫn thường được sử dụng như một bài tập lập trình bởi vì, bằng cách đào sâu vào, bạn học được rất nhiều về cách phân tích cú pháp. Tương tự áp dụng với hệ điều hành. Thật tuyệt khi thấy người khác đã làm như thế nào, nhưng chỉ sau khi bạn tự mình thử nó. –

3

Sử dụng ANSI C và bắt đầu với trình giả lập. Khi bạn chuyển sang một máy thực sự, sẽ có một số mã lắp ráp. Việc chuyển ngữ cảnh và xử lý ngắt (ví dụ) dễ viết hơn trong trình biên dịch.

Andy Tannenbaum đã viết một cuốn sách hay về hệ điều hành. Nhiều cái khác tốt tồn tại.

Chúc may mắn!Không có gì giống như việc viết hệ điều hành của riêng bạn, tuy nhiên nhỏ.

+1

Andy ... Anh ấy là bạn của bạn? – stdcall

3

Ngoài ra, hãy xem OSDev.org có tất cả thông tin bạn cần để bắt đầu.

41

Đối với dự án năm cuối cùng của tôi trong ảnh ghép, tôi đã phát triển một hệ điều hành x86 nhỏ với trình quản lý bộ nhớ ảo, hệ thống tệp ảo và đa nhiệm hoàn toàn ưu tiên. Tôi đã làm cho nó mã nguồn mở và mã được rất nhiều nhận xét, kiểm tra trang giả mạo nguồn của nó tại địa chỉ:

https://github.com/stephenfewer/NoNameOS

Từ kinh nghiệm của tôi, tôi có thể giới thiệu như sau:

Bạn sẽ nhu cầu ngôn ngữ lắp ráp x86 cho các phần khác nhau, điều này không thể tránh khỏi, nhưng có thể được giữ ở mức tối thiểu. Khá nhanh, bạn sẽ chạy mã C, đây là một lựa chọn đã được chứng minh cho sự phát triển hệ điều hành. Một khi bạn có một số loại quản lý bộ nhớ có sẵn, bạn có thể đi vào C++ nếu bạn thích (bạn cần một số loại quản lý bộ nhớ cho những thứ như mới và xóa).

Bất kể bạn chọn ngôn ngữ nào, bạn vẫn cần lắp ráp & C để mang hệ thống khởi động từ đó BIOS để bạn vào bất kỳ biểu mẫu có thể sử dụng nào.

Cuối cùng, ngôn ngữ chính bạn chọn sẽ tùy thuộc vào loại hệ điều hành bạn muốn phát triển.

Môi trường phát triển của tôi là cổng Windows của các công cụ phát triển GNU DJGPP cùng với bộ hợp nhất NASM. Đối với IDE của tôi, tôi đã sử dụng Eclipse của IBM với plugin CDT, cung cấp môi trường phát triển C/C++ trong Eclipse.

Để thử nghiệm, tôi khuyên bạn nên BOCHS, trình giả lập PC x86 nguồn mở. Nó cho phép bạn khởi động hệ điều hành của bạn một cách nhanh chóng, rất tuyệt vời để kiểm tra và có thể được tích hợp vào nhật thực để bạn có thể xây dựng và chạy hệ điều hành của bạn chỉ với một nút bấm. Tôi cũng khuyên bạn nên sử dụng cả VMWare và PC vật lý đôi khi bạn có thể nhận một số lỗi nhỏ như vậy.

P.S. Phát triển hệ điều hành thực sự thú vị nhưng rất chuyên sâu, tôi đã lấy phần tốt nhất trong 12 tháng. Lời khuyên của tôi là lên kế hoạch tốt và thiết kế của bạn là chìa khóa! thưởng thức :)

+1

Tôi muốn giới thiệu Qemu (không biết nếu nó chạy trên các cửa sổ) như là máy ảo chính vì nó là khá nhanh hơn một chút so với BOCHS! Đối với các lỗi khó chịu hơn tôi thường sử dụng BOCHS vì nó có khả năng gỡ lỗi tuyệt vời và tích hợp với gdb. –

+0

@QAZ, tôi hiểu đây là một bài đăng khá muộn nhưng bạn có liên kết mới với dự án của mình không? Liên kết này đã chết. – AedonEtLIRA

+0

@QAZ, Bạn có thể vui lòng cung cấp liên kết mới cho dự án của mình không? – vjain27

5

Nó không quan trọng, ngôn ngữ bạn chọn. Nếu ngôn ngữ là Turing-hoàn thành, sau đó bạn có thể viết một hệ điều hành trong đó.

Tuy nhiên, tính biểu cảm của ngôn ngữ sẽ làm cho một số loại thiết kế rất dễ thực hiện hoặc rất khó thực hiện. Ví dụ, "sự sống động" và tính năng động của các hệ điều hành Smalltalk cũ phụ thuộc vào thực tế là chúng được thực hiện trong Smalltalk. Bạn có thể làm điều đó trong C, quá, nhưng nó có thể sẽ rất khó mà bạn thậm chí sẽ không nghĩ về nó. JavaScript hoặc Ruby OTOH có lẽ sẽ rất phù hợp.

Microsoft Research's Singularity là một ví dụ khác. Nó chỉ đơn giản là không thể được thực hiện trong bất cứ điều gì khác hơn Sing #, Spec#C# (hoặc các ngôn ngữ tương tự), bởi vì rất nhiều kiến ​​trúc phụ thuộc vào an toàn loại tĩnh và tính xác thực tĩnh của các ngôn ngữ đó.

Một điều cần ghi nhớ: không gian thiết kế cho các hệ điều hành được triển khai trong C được khám phá khá nhiều. Có nghĩa là hàng ngàn người trong số họ. Tuy nhiên, trong các ngôn ngữ khác, bạn có thể thực sự khám phá ra một thứ mà trước đây chưa từng phát hiện ra!Chỉ có khoảng một tá hệ điều hành được viết bằng Java, khoảng nửa tá trong C#, thứ gì đó theo thứ tự của hai hệ điều hành trong Haskell, chỉ một bằng Python và không có bằng Ruby hoặc JavaScript.

Hãy thử viết hệ điều hành trong Erlang hoặc Io và xem cách điều đó ảnh hưởng đến suy nghĩ của bạn về Hệ điều hành!

+6

"Nếu ngôn ngữ là Turing-hoàn thành, sau đó bạn có thể viết một hệ điều hành trong đó." Đây không phải là sự thật. Java là Turing-complete nhưng có một số phần của một hệ điều hành không thể thực hiện được trong Java (ví dụ cổng I/O). Turing-complete không * không * có nghĩa là bạn có thể làm mọi thứ với nó. – Job

+1

làm thế nào bạn có thể khởi động máy tính với ngôn ngữ khác với ASM ??? – AminM

+1

@JesonPark: Bạn không thể khởi động máy tính bằng ASM. Bạn chỉ có thể khởi động nó với mã máy gốc. Vì vậy, bạn làm điều đó giống như cách bạn làm điều đó với ASM: bạn dịch chương trình từ ngôn ngữ sang mã máy gốc. –

4

Có khóa học hệ điều hành được cung cấp tại Đại học Maryland sử dụng GeekOS. Đây là một hệ điều hành nhỏ, được nhận xét rộng rãi được thiết kế cho các mục đích giáo dục có thể chạy bằng các trình mô phỏng Bochs hoặc QEMU.

Để biết ví dụ về cách nó được sử dụng trong khóa học, hãy xem một đề nghị trước đó của khóa học tại lớp học webpage. Ở đó, bạn sẽ tìm thấy các bài tập mà bạn phải thêm chức năng khác vào GeekOS.

Đây là cách tuyệt vời để làm quen với một hệ điều hành nhỏ và đơn giản chạy trên kiến ​​trúc x86.

1

Không nghi ngờ gì, tôi muốn sử dụng Ada. Đó là ngôn ngữ lập trình hệ thống đa năng tốt nhất mà tôi đã gặp, không có thanh nào. Một ví dụ, Ada tốt hơn nhiều cho việc xác định bố cục bit của các đối tượng trong một bản ghi hơn C. Ada cũng hỗ trợ các bản ghi chồng lên các vị trí bộ nhớ cụ thể. C yêu cầu bạn chơi với con trỏ để đạt được hiệu quả tương tự. Điều đó có hiệu quả, nhưng có nhiều lỗi hơn. Ada cũng có hỗ trợ ngôn ngữ cho các ngắt.

Loại khác: An toàn. Ada mặc định ràng buộc kiểm tra các phép gán mảng, nhưng cho phép bạn tắt nó khi cần. C "mặc định" để không bị ràng buộc kiểm tra trên mảng, vì vậy bạn phải tự mình làm bất cứ khi nào bạn muốn. Thời gian đã cho thấy rằng đây là không phải là mặc định phù hợp. Bạn sẽ quên một nơi cần thiết. Khai thác tràn bộ đệm là lỗ hổng bảo mật phổ biến nhất được sử dụng bởi bánh quy giòn. Họ có toàn bộ trang web giải thích cách tìm và sử dụng chúng.

Để tìm hiểu về cách thực hiện điều này, hai cuốn sách tôi biết là XINU (Unix ngược, không liên quan gì đến Khoa học học) và Project Oberon. Bài đầu tiên được sử dụng trong khóa học sau đại học của hệ điều hành của tôi, và bài thứ hai được viết bởi Nikalus Wirth, tác giả của Pascal.

1

C có lẽ hầu hết ... tất cả lớn OS-es đã được viết bằng C/C++ hoặc Objective-C (Apple)

Các vấn đề liên quan