Lời khuyên cho một sinh viên đầy tham vọng về việc xây dựng hạt nhân của riêng bạn [đã đóng]


18

Tôi là một sinh viên đại học rất tham vọng, người muốn học khá nhiều thứ cần biết về máy tính (hãy đánh tôi nếu bạn muốn, tôi thích học). Gần đây tôi nghĩ rằng nó sẽ là một dự án thú vị (mặc dù dài dòng) để thiết kế và xây dựng hạt nhân của riêng tôi.

Tôi đã nhận được một số thông tin cơ bản và tôi đã thu thập được rằng tôi cần phải thành thạo hội và C / C ++ để thực sự làm việc này. Trong khi tôi đang làm việc trên những cái đó, tôi muốn tìm hiểu CÁCH kernel thực sự hoạt động từ góc độ lập trình. Tôi đã dành hàng giờ để duyệt mã kernel linux nhưng điều đó chỉ có thể đưa bạn đến nay.

Các bước cơ bản trong việc xây dựng một hạt nhân là gì? Những điều bạn cần giải quyết? Đặt hàng hay làm việc? Tôi biết tôi đang cắn rất nhiều nhưng tôi đủ quyết tâm để xử lý nó.


12
Không cần phải bash bạn vì muốn học mọi thứ. Nhưng nếu bạn có kế hoạch thực sự cố gắng, tốt hơn là bạn nên kéo dài tuổi thọ, một bộ não siêu phàm và không có kế hoạch nào khác cho cuộc sống của bạn;)

2
Tôi hy vọng sẽ có tất cả những thứ đó! Mặc dù không thực sự, tôi chỉ có một sự thôi thúc quá lớn để học hỏi.
n0pe

@delnan Bệnh tâm thần phân liệt hoang tưởng có thể là một điểm cộng quá: pagos.org
DanteTheEgregore

@DanteTheEgregore Cái gì?
Panzercrisis

Câu trả lời:


34

Những gì bạn cần làm là thiết kế hệ điều hành. Ngay cả khi, ví dụ, nếu bạn quyết định nó phải là một hệ thống giống như UNIX, vẫn có rất nhiều quyết định được đưa ra. Bạn muốn nó giống như UNIX bao nhiêu? Những phần nào của UNIX mà bạn thích và bạn nghĩ cần cải thiện điều gì?

Nếu bạn không đặt nó giống như UNIX, bạn sẽ có nhiều câu hỏi hơn để trả lời: các quy trình có nên tạo thành một cây hay chúng "phẳng"? Những loại giao tiếp liên quá trình nào bạn muốn hỗ trợ? Bạn có muốn nó là đa người dùng, hoặc chỉ đa tác vụ (hoặc có thể là tác vụ đơn)? Bạn có muốn nó là một hệ thống thời gian thực? Mức độ cô lập nào bạn muốn cung cấp giữa các nhiệm vụ? Nơi nào bạn muốn nó rơi vào thang đo nguyên khối so với hạt nhân vi mô? Ở mức độ nào (nếu có) bạn có muốn nó hỗ trợ hoạt động phân tán không?

Tôi thường muốn mưu chống lại học hạt nhân Linux cho cảm hứng của bạn. Điều đó không có gì chống lại hạt nhân Linux, nhưng một thực tế đơn giản là Linux chủ yếu dành cho sử dụng sản xuất, không phải cho giáo dục. Nó có rất nhiều tối ưu hóa, hack tương thích ngược, v.v., cực kỳ hữu ích cho sản xuất nhưng có nhiều khả năng gây mất tập trung hơn là giáo dục.

Nếu bạn có thể tìm thấy nó, một bản sao của cuốn sách Lion ( Bình luận của Lions về phiên bản UNIX thứ 6 , với Mã nguồn , của John Lions) là điểm khởi đầu dễ dàng hơn nhiều. Phiên bản thứ 6 UNIX vẫn nhỏ và đủ đơn giản để đọc và hiểu khá nhanh, mà không phải là một hệ thống đồ chơi đơn giản hóa.

Nếu bạn dự định nhắm mục tiêu x86 (ít nhất là chủ yếu), bạn cũng có thể muốn xem MMURTL V 1.0 của Richard Burgess. Điều này trình bày một hệ thống cho x86 sử dụng phần cứng x86 nhiều hơn so với dự định ban đầu của các nhà thiết kế CPU - điều mà hầu hết các hệ thống thực sự đều có lợi cho tính di động đối với các CPU khác. Như bạn có thể đoán, điều này có xu hướng được định hướng nhiều hơn về phần cuối của phần cứng. Các bản in có vẻ đắt tiền và khó tìm, nhưng bạn có thể tải xuống văn bản và mã miễn phí.

May mắn thay, có khá nhiều khả năng nữa - Thiết kế và triển khai hệ điều hành , chẳng hạn của Andrew Tanenbaum và Albert Woodhull.


Wow cảm ơn vì phản hồi tốt đẹp. Tôi sẽ xem xét tất cả những cuốn sách đó.
n0pe

7
Tôi đã thêm các liên kết đến các tệp PDF của cuốn sách và nguồn. Điều tuyệt vời về nguồn cho v6 UNIX là nó dài 100 trang, với 100 dòng trên mỗi trang. Và trong 10.000 dòng mã, bạn có một hệ điều hành hoàn chỉnh, đa nhiệm . Nếu bạn thực sự có thể hiểu được mã xung quanh nhận xét nổi tiếng ở dòng 2238, "Bạn không cần phải hiểu điều này", bạn có thể cho mình một Sao Vàng và một Bậc thầy danh dự. Thưởng thức!
Peter Rowell

Cảm ơn các liên kết! Bây giờ tôi phải tìm ra nơi để in cái này ....
n0pe

1
Minix (cuốn sách Tannenbaum) được thiết kế cho giáo dục và có thể chỉ là những gì cần thiết ở đây.

@PeterRowell, dmr tuyên bố đó là một lỗi trong cm.bell-labs.com/who/dmr/odd.html

12

Tôi khuyên bạn nên bắt đầu với một nhiệm vụ nhỏ, tập trung cao độ: sử dụng lắp ráp, viết chương trình bootstrap đồ chơi. Nó không phải làm gì nhiều. Bạn chỉ muốn máy tính tự động tải chương trình khi khởi động, in một thông báo xác nhận rằng nó đang chạy, đọc một số hình thức nhập của bàn phím, in một tin nhắn khác, sau đó tắt máy tính.

Điều này sẽ có một số lợi ích:

  1. Cuối cùng, bạn sẽ cần một quá trình bootstrap cho kernel của mình, vì vậy nó sẽ không phải là một bài tập vô nghĩa.
  2. Nó sẽ cung cấp cho bạn thực hành bằng văn bản trong lắp ráp.
  3. Nó sẽ giúp bạn thực hành viết các thói quen IO cấp thấp. Làm thế nào để bạn viết một tin nhắn lên màn hình, hoặc đọc một tổ hợp phím khi không có hệ điều hành để bạn gọi?
  4. Nó sẽ cung cấp cho bạn kinh nghiệm thực hiện nghiên cứu về các chi tiết kỹ thuật của CPU và bo mạch chủ. (Câu hỏi đầu tiên: làm thế nào để bo mạch chủ / cpu của bạn tìm thấy một chương trình có thể khởi động khi nó khởi động?)
  5. Viết hạt nhân đã trở thành một nhiệm vụ rất tinh vi, với một tấn tinh tế. Nhiệm vụ này sẽ cung cấp cho bạn một cái gì đó để bắt đầu và có thể giúp bạn không bị lạc trong cỏ dại trước khi bạn bắt đầu.

Một khi bạn có thể làm điều này, bạn sẽ có một ý tưởng tốt hơn nhiều về những gì bạn đang nhận được vào.


Cảm ơn vì điều này, tôi nghĩ rằng đây chính xác là những gì tôi sẽ cố gắng và làm. Đọc thêm trong tương lai của tôi.
n0pe

7

Học cách lập trình trong trình biên dịch chương trình là một khởi đầu tốt và thực hiện nó từ MSDOS 6.0 cũng có thể hữu ích do thiếu các tính năng tích hợp.

Đọc một cuốn sách hay như Khái niệm hệ điều hành sẽ là một khởi đầu công bằng để thiết kế kernel của riêng bạn. Bạn sẽ phải xử lý tải khởi động, quản lý trình điều khiển thiết bị, giao tiếp với BIOS, quản lý và tạo hệ thống tệp, lập lịch chương trình, tải và dỡ chương trình, thực hiện ít nhất một số loại vỏ (dễ dàng hơn nhiều khi xây dựng hệ thống cửa sổ).

C / C ++ sẽ chỉ hoạt động nếu kernel của bạn tương thích với các thư viện tiêu chuẩn cho các ngôn ngữ này, nếu không, bạn cũng cần phải viết một bản sao của các thư viện này.

Điều đó thậm chí không bắt đầu nghĩ về đa luồng, bảo mật hệ thống, mạng.


7

Minix là một bản sao Unix đẹp (lấy cảm hứng từ Linux) được viết cho giảng dạy.

Andrew S. Tannenbaum là một nhà văn và giáo viên xuất sắc và đã viết cả một cuốn sách về các hệ điều hành sử dụng Minix làm ví dụ (và bao gồm mã nguồn để làm theo): http://en.wikipedia.org/wiki/Operating_Systems:_Design_and_Imcellenceation

Cá nhân tôi thấy anh ta là một nhà văn giỏi hơn lập trình viên nên một số điều không rõ ràng như cá nhân tôi muốn, nhưng - hey - nó hoạt động!

Tôi có thể khuyên bạn nên xem xét điều này như một tài nguyên học tập. Nó cũng sẽ cung cấp cho bạn một ý tưởng về số lượng công việc cần thiết để thực sự sản xuất một cái gì đó thực sự có thể hữu ích.


Tôi khuyên bạn nên lấy sách vật lý. Dễ dàng hơn để ghi chú trong.

Thực sự nghĩ về nó, tôi nghĩ rằng tôi đã thấy cuốn sách trên Amazon với giá rẻ. Tôi có thể lấy nó ở đó. Cảm ơn
n0pe

Cũng lưu ý rằng đây là phiên bản thứ ba. Tôi tin rằng chúng tôi đã sử dụng phiên bản đầu tiên trở lại khi tôi có khóa học.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.