Có phải là một ý tưởng tốt để viết một hệ điều hành bằng ngôn ngữ kịch bản? [đóng cửa]


8

Có phải là một ý tưởng tốt để tạo ra một hệ điều hành được viết bằng ngôn ngữ kịch bản không?

Ví dụ, làm thế nào về việc tạo một hệ điều hành bằng Python?



Có những máy ảo được viết bằng Javascript ...
user16764

3
Một ý tưởng tốt như làm cho một chiếc xe ra khỏi tất cả nhựa và không có kim loại.
Công việc

Emacs là một hệ điều hành tốt, và elisp thực sự là một ngôn ngữ kịch bản, cả về cách sử dụng và phạm vi động của nó.
SK-logic

Câu trả lời:


15

Đó không chỉ là một ý tưởng tồi. Đó là khá nhiều không thể.

Làm thế nào để bạn thực hiện IO với một ngôn ngữ mà các cơ sở IO phụ thuộc hoàn toàn vào hệ điều hành máy chủ?

Làm thế nào bạn có thể thực hiện lập kế hoạch nguyên thủy mà không có bất kỳ nguyên thủy ngắt hữu ích?

Làm thế nào bạn có thể viết trình điều khiển thiết bị bằng ngôn ngữ không thể giải quyết một byte cụ thể?

Chỉnh sửa: - Chỉ để làm rõ một chút. Bạn không thể viết HĐH "thực" tương tác trực tiếp với máy bằng ngôn ngữ "scripting". Tuy nhiên, bạn có thể viết một "máy ảo" có thể sử dụng được nếu ngôn ngữ ghi chép đủ linh hoạt. Đối với việc triển khai thể hiện của Donald Knuths MIX (s) lý thuyết máy và một Sinclair ZX80 giả lập tốt, đủ để chạy pacman đã được viết bằng JavaScript.


2
@ClintNash thật sao? JavaScript theo định nghĩa sống trong môi trường thời gian chạy phải chạy trên hệ điều hành. Chắc chắn, về mặt lý thuyết có thể biên dịch nó thành nhị phân, nhưng điều này hầu như không nghe thấy. Node.js phải chạy trên hệ điều hành máy chủ. JavaScript không có quyền truy cập riêng vào các cấu trúc cần thiết để viết một os thực sự. Chắc chắn, một khi bạn ở mức độ trừu tượng đủ cao, bạn có thể bắt đầu sử dụng các tập lệnh, nhưng một cái gì đó bên dưới nó cần thực tế, trần trụi với khả năng kim loại để tương tác với phần cứng.
bunglestink

Tôi tin rằng bạn là chính xác @bunglestink. Tôi đã tham khảo cách sử dụng JS / OS ở lớp trừu tượng cao hơn. Tôi không chắc chắn ở mức độ nào Windows 8 tích hợp JS.
Jack Stone

1
Lisp không có các nguyên hàm gián đoạn hoặc IO và không thể truy cập bộ nhớ thô. Nó tự động gõ. Chưa hết, hệ điều hành của máy Lisp được viết bằng Lisp.
nikie

1
@nikie - có nhưng nó không phải là một hệ điều hành thực sự vẫn dựa vào hệ điều hành cơ bản cho tất cả các dịch vụ cơ bản.
James Anderson

6
Các máy @nikie Lisp được xây dựng dựa trên phần cứng chuyên dụng, về cơ bản đã triển khai máy ảo Lisp ở cấp độ phần cứng. Vì vậy, có, trong một số trường hợp có thể, nhưng thực sự tại thời điểm này, bạn đang thực sự triển khai HĐH của mình ở dạng nguyên thủy nhất có thể - ở cấp độ vi mã.
bunglestink

6

Trước khi bạn quyết định làm thế nào , bạn cần chỉ định những gì . HĐH mới này sẽ làm gì? Nó sẽ chạy ở đâu? Tại sao bất cứ ai sẽ bận tâm để sử dụng nó? vv Điều tiếp theo là xác định phẩm chất của HĐH. Tốc độ, bảo mật, phân luồng, quản lý bộ nhớ, đa tác vụ, định dạng tệp, hỗ trợ ngôn ngữ, bộ xử lý được hỗ trợ, v.v.

Từ việc trả lời các câu hỏi trên và xem xét nhiều phẩm chất của HĐH, bạn có thể xác định nên sử dụng công cụ nào để đạt được mục tiêu của mình.

Bây giờ, bạn có thực sự muốn làm tất cả điều đó?

Tôi giả sử rằng Python đã được sử dụng một phần trong việc viết các phần của Linux - Xem: Ngôn ngữ nào là Windows, Mac OS X và Linux được viết bằng ngôn ngữ nào?


3

Tôi biết đây không phải là một câu trả lời thích hợp, nhưng dự án này cho thấy một hệ điều hành đang hoạt động với một kernel được viết bằng JavaScript:

https://github.com/charliesome/jsos/

Các trình điều khiển cho VGA và bàn phím cũng được viết bằng JavaScript bằng cách sử dụng các ngắt. Tôi đã phát triển một triển khai OpenGL 1.1 cho chính nó một thời gian trước đây và nó hoạt động khá độc đáo.


5
Trên thực tế, có vẻ như bộ tải khởi động và các tính năng cấp thấp được viết bằng c và lắp ráp ... Ngoài ra, toàn bộ máy ảo js được triển khai trong c ...
bunglestink

Tại thời điểm đó, bạn cũng có thể lập luận rằng các hệ điều hành không thể được viết bằng C, bởi vì các phần cần phải được viết bằng x86.
Vượt qua

1
điểm tốt, không thể tranh luận với điều đó. Asm sẽ luôn được yêu cầu ở một số cấp độ; mặc dù, tôi tin rằng phần duy nhất hoàn toàn phải được viết bằng asm trên x86 là bộ tải khởi động. Sau đó, hầu hết các triển khai C đều có các tính năng lắp ráp nội tuyến có thể cho phép bạn xây dựng bất cứ thứ gì ở trên đó. Điều này trái ngược với một ngôn ngữ kịch bản luôn phải có một mức độ trừu tượng thấp hơn của môi trường thời gian chạy, vì nó không bao giờ chạm vào phần cứng mà không trải qua quá trình trừu tượng hóa thời gian chạy.
bunglestink

3

Không, nó thậm chí không thể (độc quyền)

Tại sao? Hãy xem xét những điều sau đây:

Một ngôn ngữ kịch bản là gì?

Hãy đưa ra hai giả định sau đây về định nghĩa của "ngôn ngữ kịch bản":

  1. Ngôn ngữ sống trong một môi trường thời gian chạy.
  2. Ngôn ngữ không có quyền truy cập vào con trỏ bộ nhớ thô.

Hệ thống vận hành là gì?

Giả sử rằng mục tiêu chính của Hệ điều hành có thể được đơn giản hóa như sau:

  • để cung cấp một sự trừu tượng giữa các chương trình người dùng và phần cứng họ chạy theo

Theo những định nghĩa này, về mặt logic, ngôn ngữ script không thể là một hệ điều hành. Tại sao?

  1. Một hệ điều hành phải có quyền truy cập thô, không ràng buộc vào bộ nhớ của máy tính để giao tiếp với phần cứng. Vì các ngôn ngữ script không có quyền truy cập vào các con trỏ bộ nhớ thô, chúng không thể làm điều này.
  2. Vì ngôn ngữ kịch bản yêu cầu môi trường thời gian chạy, nhưng chúng không thể nói chuyện trực tiếp với phần cứng, môi trường phải được mã hóa bằng ngôn ngữ khác có khả năng này. Trong trường hợp này (như với JSOS đã được đưa lên trong các bài đăng khác), một ngôn ngữ cấp thấp hơn phải được sử dụng để giao tiếp với máy.

Có thể viết một lượng mã tối thiểu bằng ngôn ngữ "thô" như C, nhưng theo định nghĩa, ngôn ngữ được biên dịch thô sẽ luôn cần thiết. Một khi điều này được thực hiện, các phần khác của HĐH có thể được thực hiện bằng ngôn ngữ kịch bản, nhưng ngôn ngữ kịch bản không bao giờ có thể được sử dụng một mình.


Để công bằng, một hệ điều hành thông thường sẽ thiết lập thời gian chạy cho C và hiển thị các tóm tắt phần cứng cơ bản trước khi thực sự chạy mã C. Bạn có thể làm tương tự bằng cách đơn giản cung cấp thời gian chạy JavaScript. Thời gian chạy này cao hơn C một chút, nhưng về cơ bản, nó thực chất là Mô hình Đối tượng Thành phần hiện đại, ngoại trừ JSON có ý nghĩa hơn ini và javascript tự mô tả theo mặc định, do đó bạn không cần thư viện kiểu. JavaScript tự mô tả đến mức nó có thể nhận các hàm của đối tượng thông qua toString, thao tác chúng và lưu trữ chúng trở lại trên đĩa. Không thể tưởng tượng được việc sử dụng nó cho kernel.
Dmitry

0

Tôi phải duy trì rằng về nguyên tắc, có thể viết một hệ điều hành bằng python. Bạn sẽ phải tạo một trình biên dịch ngôn ngữ từ cấp thấp đến thấp, cũng như thêm các mô-đun vào thư viện tiêu chuẩn cung cấp quyền truy cập vào các phần cấp thấp của máy tính của bạn. Nhưng nếu hai mảnh đó được đặt đúng chỗ thì có thể.

Tuy nhiên,

  1. Sẽ rất khó để viết một trình biên dịch tạo mã hiệu quả
  2. Python sẽ khó xử khi truy cập các chi tiết cấp thấp

3
Ngoài ra, Python trong kịch bản này sẽ không còn đủ điều kiện là 'ngôn ngữ kịch bản' theo bất kỳ định nghĩa hợp lý nào.
tdammers

@tdammers, tôi coi ngôn ngữ kịch bản là một khái niệm không rõ ràng.
Winston Ewert
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.