Một hệ điều hành trông như thế nào khi không có vỏ?


41

Một shell như bash hoặc command.com (tối đa Windows ME) hoặc CMD.EXE (trong các phiên bản sau) cung cấp giao diện (trong số những thứ khác) chấp nhận lệnh từ người dùng. Một hệ điều hành trông như thế nào trước khi một shell được chạy? Các hệ thống được sử dụng như thế nào trước khi lớp vỏ đầu tiên được phát triển (ví dụ UNIX vào đầu những năm 1970)? Nếu một máy tính thậm chí không thể chấp nhận các lệnh (không có dòng lệnh), làm thế nào người dùng có thể tương tác với nó? Giao diện cơ bản nhất này là gì? Tôi có thể chạy giao diện này trong trình giả lập thiết bị đầu cuối hay không có cách nào đi sau lớp vỏ?


2
(Như một bên: thuật ngữ shell không chỉ áp dụng cho shell dòng lệnh .)
Arjan

2
@Ramhound Tất nhiên bạn có thể tương tác với một hệ thống mà không cần dòng lệnh. Người ta có thể tranh luận về các cách tiếp cận thiết kế UI khác nhau trong cả tuần, nhưng chắc chắn có thể tương tác cả với Mac OS cổ điển cũng như Altair mặc dù không có dòng lệnh nào ngoài hộp.
một CVn

4
Giao diện cơ bản nhất có lẽ sẽ là bảng chuyển đổi như trong PDP11 / 04, v.v.
Tog

1
Cái này trông giống như cờ raspberrypi.org/archives/4300
Nico Burns

1
Trông giống như một cái cây rơi trong rừng mà không có ai xung quanh để nhìn thấy nó.
nathan hayfield

Câu trả lời:


35

Một hệ điều hành trông như thế nào trước khi một shell được chạy?

Phụ thuộc vào hệ điều hành và cách bạn cấu hình nó. Linux có thể được cấu hình để ghi văn bản khởi động vào thiết bị bảng điều khiển, cho dù là bảng điều khiển chế độ văn bản, bảng điều khiển bộ đệm khung hoặc cổng nối tiếp. Nó cũng có thể được cấu hình để hoàn toàn im lặng. Một số hệ thống / hệ điều hành có thể ghi thông tin chẩn đoán vào bộ nhớ không bay hơi có thể được truy cập bằng cách đặt hệ thống ở chế độ phát triển, gỡ lỗi hoặc chẩn đoán. Nhiều hệ điều hành hỗ trợ xuất thông tin khởi động và chẩn đoán cho một số dạng UART, có thể bằng cách nào đó có sẵn trên thiết bị ngay cả khi bị ẩn khỏi người dùng (google "Thêm cổng nối tiếp vào DD-WRT" để biết ví dụ về nơi các nhà sản xuất ẩn cổng nối tiếp và cách bạn có thể nhận được chúng).

Một hệ điều hành hoàn toàn không phải có màn hình ngoài - đó chỉ là một thiết bị khác cho HĐH.

Các hệ thống được sử dụng như thế nào trước khi lớp vỏ đầu tiên được phát triển (ví dụ UNIX vào đầu những năm 1970)?

Về cơ bản (và bỏ đi rất nhiều nhưng điều này sẽ giúp bạn có ý tưởng) - Bạn đã tải chương trình của mình, bằng cách lật công tắc trên bảng hoặc sử dụng đầu đọc băng giấy (các thiết bị này sẽ ghi trực tiếp vào bộ nhớ mà không cần sự can thiệp của CPU) CPU với một công tắc khác. CPU sẽ chạy chương trình này, tạo đầu ra và dừng lại. Đây là xử lý hàng loạt trái ngược với xử lý tương tác. Nếu bạn muốn chạy một chương trình khác, bạn phải làm điều này hơn.

Nếu một máy tính thậm chí không thể chấp nhận các lệnh (không có dòng lệnh), làm thế nào người dùng có thể tương tác với nó?

Tôi không phải là chuyên gia trong lĩnh vực này, nhưng các máy tính cũ, cũ như Altair, IMSAI và PDP-8 và các công tắc bảng mặt trước điều khiển trực tiếp CPU và có thể đọc và ghi bộ nhớ trực tiếp mà không cần sự can thiệp của CPU.

Giao diện cơ bản nhất này là gì?

Tôi tin rằng hầu hết các CPU hiện đại không có "cổng JTAG" cho phép các loại hoạt động trực tiếp giống nhau. Hãy nhớ rằng trong một thời gian dài, hầu hết các máy tính đều được mong đợi có ROM hoặc phần sụn kiểm soát hệ thống khi được bật trước khi đưa nó vào HĐH. Ở đây, các tiện ích tiền khởi động có thể tồn tại hoặc một cơ chế tối thiểu để tải các tiện ích đó tồn tại. Một số bộ tải khởi động như U-Boot có thể được truy cập thông qua cổng nối tiếp. Bộ tải khởi động không chạy "phía sau" HĐH, chúng tải HĐH, điều khiển tay cho nó và sau đó chúng không còn chạy.

Tôi có thể chạy giao diện này trong trình giả lập thiết bị đầu cuối hay không có cách nào đi sau lớp vỏ?

Không, bạn cần một giao diện JTAG. Đó là lặn vào lĩnh vực điện tử và tôi thừa nhận tôi không biết rất nhiều về nó, ngoại trừ việc tôi GuruPlug đi kèm với một và tôi có thể trực tiếp chương trình chip flash trên ban lãnh đạo GuruPlug với nó - có nghĩa là nếu có điều gì giết chết bootloader trên Xin chào, tôi có một cách "độc lập với CPU" để flash lại.


4
Giao diện JTAG cho phép (với sự trợ giúp của bộ điều khiển chuyên dụng) truy cập vào các giao diện thử nghiệm của tất cả các thành phần bỏ qua các chế độ hoạt động bình thường. Tùy thuộc vào chức năng kiểm tra được hiển thị, bạn có thể lập trình bộ nhớ, kiểm soát đầu vào / đầu ra, khởi động / dừng CPU hoặc đọc các thanh ghi bên trong.
Chaos_99

23

Một hệ điều hành không phải cung cấp hệ vỏ vì thuật ngữ này thường được sử dụng ngày nay (có nghĩa là một ứng dụng sẽ chấp nhận các lệnh tương tác từ người dùng), nhưng một hệ điều hành như vậy sẽ không thực sự "trông giống" bất cứ thứ gì đối với người dùng. Như Oliver Salzburg đã đề cập, nó có thể sẽ chỉ hiển thị một màn hình trống (nếu nó có hỗ trợ đầu ra hiển thị), mặc dù không có lý do gì nó phải làm. Lấy ví dụ đầu ra chẩn đoán của nhân Linux trong quá trình khởi tạo và khởi động kernel.

Shell, cho dù là shell đồ họa, trình thông dịch dòng lệnh hay thứ gì khác, sử dụng các phương tiện được cung cấp bởi hệ điều hành để làm những việc như đọc lệnh, khởi chạy quy trình, chuyển hướng I / O, v.v.

Tuy nhiên, không có lý do tại sao ứng dụng sử dụng các phương tiện đó phải là một vỏ .

Ngày xưa, các hệ điều hành chỉ đơn giản là một tập hợp các "thói quen hữu ích" mà mỗi ứng dụng sẽ phải viết lại từ đầu và máy tính về cơ bản là các thiết bị xử lý hàng loạt. Những thứ như I / O của tập tin, đĩa và máy in có lẽ là một trong những thứ đầu tiên được thu thập vào cái mà ngày nay được gọi là hệ điều hành, tiếp theo là lập lịch xử lý (đáng chú ý là Máy tính Hướng dẫn Apollo đầu thập niên 1960 là một máy tính đa nhiệm). Các ứng dụng sau đó có thể thực hiện các cuộc gọi đến HĐH thay vì sử dụng các thói quen của riêng chúng để thực hiện những việc đó, điều này làm giảm độ phức tạp của lập trình và có thể giúp giảm kích thước mã hoặc thời gian thực hiện (vì các phương tiện hệ thống đó có thể được tối ưu hóa và gỡ lỗi rất nhiều sau đó mọi người sẽ có lợi) . Khi máy tính ngày càng trở nên phổ biến, các hệ điều hành đã thêm các tính năng chủ yếu tập trung vào người dùng, như cách người dùng tương tác với máy tính và ra lệnh theo kiểu tương tác; shell đồ họa chỉ đơn giản là một phần mở rộng của dòng lý luận đó.

Ngoài ra, cách đây không lâu (nghĩ đến cuối những năm 1980), việc viết các ứng dụng để chạy trên phần cứng máy tính cá nhân vẫn chưa có sự hỗ trợ của bất kỳ hệ điều hành thông thường nào. Điều này đặc biệt hữu ích cho các trò chơi, vì nó tránh được bộ nhớ và xử lý chung của hệ điều hành, nhưng tôi chắc chắn cũng có những ví dụ khác. Trong những trường hợp đó, ở một mức độ nào đó, ứng dụng là hệ điều hành của chính nó và do đó, giao diện người dùng được cung cấp bởi ứng dụng đó là vỏ.


4
Ngày nay, rất phổ biến để viết các chương trình chạy trên kim loại trần mà không có hệ điều hành - có lẽ phổ biến hơn bao giờ hết. Ngày nay, hầu hết mọi thứ có thiết bị điện tử đều có vi điều khiển. Một số trong các hệ thống nhúng như ô tô hoặc bộ định tuyến này có hệ điều hành, nhưng những thứ đơn giản như máy điều nhiệt, máy giặt, v.v ... thường không có.
Jeanne Pindar

1
@JeannePindar Điểm tốt; Tôi đã làm rõ rằng tôi có nghĩa là trong bối cảnh của máy tính cá nhân.
một CVn

11

Các máy tính ban đầu không có HĐH theo nghĩa chúng ta sử dụng từ này ngày nay. Họ tiếp xúc với các chức năng được triển khai trong phần cứng trực tiếp cho bất kỳ chương trình nào chạy trên nó. Chỉ có một chương trình chạy trên chúng cùng một lúc. Bản thân chương trình phải điều khiển tất cả các tác vụ, không có gì được thực hiện "dưới nền" bởi một hệ điều hành.

Nhưng vẫn có một điểm vào để người dùng bắt đầu một chương trình. Nếu bạn kéo dài từ, bạn có thể gọi đây là "vỏ". Nhưng về cơ bản, nó chỉ là phần cứng chờ người dùng nhập bit đầu tiên của chương trình để chạy. Có thể ở dạng nút ấn, công tắc bật, dây được kết nối trên tổng đài, thẻ đột lỗ, phim đục lỗ hoặc băng từ. Có lẽ họ thậm chí có thể chọn từ một số tùy chọn chương trình được tải trước đó. Nhưng ngay cả việc chọn từ một danh sách được hiển thị dưới dạng đèn phát sáng bằng cách nhấn một nút bên cạnh nó có thể được coi là một 'vỏ'.

Vì vậy, nếu định nghĩa của bạn về 'shell' là 'giao diện chấp nhận các lệnh từ người dùng', thì sẽ không có thời gian trước đó, ít nhất là đối với các thiết bị mà bạn thậm chí sẽ mơ hồ gọi máy tính.

Bạn có thể muốn xem trang wikipedia khá hay về lịch sử điện toán , mặc dù nó không tập trung nhiều vào phối cảnh đầu vào / đầu ra.


6

Nó có thể sẽ là một màn hình trống.

Các vỏ có lẽ đặt tên là vỏ vì nó là một lớp vỏ bao quanh hạt nhân (kernel là hệ điều hành). Vì vậy, theo một nghĩa nào đó, nó là giao diện người dùng cho hệ điều hành, bất kể giao diện đó là gì.

Nếu một hệ điều hành chỉ có một chức năng duy nhất là tắt máy tính và bạn sẽ xây dựng một chương trình chấp nhận bất kỳ đầu vào bàn phím nào và sau đó gọi chức năng đó, thì đó là vỏ. Không cần phải có giao diện dòng lệnh phức tạp để xây dựng một cái gì đó có giao diện với người dùng.


2

Từ quan điểm lịch sử, tôi đoán rằng đã có thẻ Punched ( https://en.wikipedia.org/wiki/Punched_card ). Để tương tác với một hệ thống máy tính. Nhưng tôi đoán điều này là để quay trở lại cho câu hỏi của bạn.


Thẻ đục lỗ là (là) một cơ chế lưu trữ dữ liệu, không phải là một phần hiển thị của hệ điều hành.
một CVn

2

Hệ điều hành đầu tiên tôi sử dụng (1981) sau khi học đại học là PRIMOS trên máy tính mini Prime. Đây là một hệ điều hành chia sẻ thời gian và nó hỗ trợ một số người dùng, mỗi người sử dụng một thiết bị đầu cuối được kết nối với máy tính thông qua cáp RS232. Bạn phải đăng nhập vào thiết bị đầu cuối cung cấp tên người dùng và mật khẩu. Phiên cuối của bạn là một loại vỏ. Bạn có thể chỉnh sửa các tập tin, biên dịch, chạy tất cả những thứ chúng ta làm ngày nay. Tất cả các thiết bị đầu cuối đã truy cập vào cùng một hệ thống nộp đơn. Phần lớn các thiết bị đầu cuối này không hơn máy đánh chữ - không có biên tập viên WYSISWYG, thậm chí emacs là một giấc mơ.

Hệ điều hành được cấu trúc nhiều như hiện tại và có thể được tưởng tượng như một lớp vỏ hành tây. Lớp trong cùng có chức năng ở mức rất thấp - như kiểm soát phần cứng, truy cập bộ nhớ. Đi ra ngoài, hệ thống tập tin sẽ được thêm vào và sau đó là các lớp người dùng. Trong chương trình của bạn, bạn sẽ có thể tương tác với một số lớp, nhưng không phải với các lớp trong cùng (vì vậy bạn sẽ không thể gây rối với việc chia sẻ thời gian hoặc phần cứng thực tế - đèn và vv). Một máy tính không có vỏ sẽ giống như một trong các lớp bên trong này, nó có thể có thể truy cập vào đĩa cứng và đầu đọc băng (thực sự!), Nhưng nó sẽ không biết về các tệp hoặc người dùng.

Để khởi động máy tính sớm, bạn cần tải một bộ hướng dẫn cơ bản (điều này có thể liên quan đến việc chuyển đổi các công tắc vật lý theo trình tự được thiết lập trên máy tính). Trình tự này sẽ bắt đầu một chương trình nhỏ thứ hai, có thể cho phép đầu đọc băng hoạt động. Sau đó, bạn sẽ tải một hệ thống phức tạp hơn thông qua đầu đọc băng, có thể mang ổ đĩa trực tuyến. Bạn có thể tưởng tượng một hệ điều hành không có vỏ giống như một trong những bộ tải ban đầu này.

Ngày nay các máy tính có trình tự tương tự, vì vậy khi bạn khởi động máy, nó sẽ tải BIOS của nó, khởi động các đĩa, card mạng, card màn hình, sau đó BIOS tìm kiếm một chương trình cụ thể trên đĩa cứng và chạy nó (trên Windows ít nhất). Unix làm một cái gì đó tương tự, nó dần dần thiết lập kernel bắt đầu với các mô-đun rất cơ bản và xây dựng trên chúng cho đến khi nó đến dấu nhắc đăng nhập


1

Hệ điều hành như một định nghĩa là khá mơ hồ. Có phải đó là một hạt nhân chính nó? Nó có phải là kernel và các công cụ đi kèm không? Linux là kernel nhưng GNU / Linux là hệ điều hành dựa trên kernel Linux và các công cụ dự án GNU. Shell là một phần không thể thiếu của hệ điều hành như vậy.

Tuy nhiên, một khi Linux khởi động và kết thúc với "khởi động", bạn cần cho nó biết chương trình nào sẽ chạy. Từ đó trở đi mọi thứ đều nằm trong tay của chương trình cụ thể đó. Theo mặc định, nó sẽ initbiết phải làm gì tiếp theo và cuối cùng có thể đưa bạn đến màn hình đăng nhập GUI đẹp. Nhưng nó không phải theo cách đó. Bạn có thể khởi động như thế này

kernel /boot/vmlinuz-2.6.30 root=/dev/sda1 ro init=/bin/fancy

Sau đó, chương trình /bin/fancysẽ in "Xin chào thế giới!". Chúng tôi không cần vỏ cho điều đó. Nếu bạn muốn bắt đầu một số chương trình khác chỉ spawn một quá trình mới bằng man 2 forkman 2 execve, hoặc đọc từ thiết bị đầu cuối và chấp nhận đầu vào của người dùng. Vẫn không cần vỏ.

Theo quan điểm của tôi, hệ điều hành shell là một chương trình có thể đọc đầu vào của người dùng và sau đó bắt đầu một chương trình khác. Nếu bạn nghĩ về nó, nó khá rõ ràng tại sao người ta muốn viết một chương trình như vậy.

Ngay cả khi bạn không cần phải đọc đầu vào của người dùng một cách tương tác, việc viết tập lệnh shell đơn giản cho nhiệm vụ của bạn sẽ thuận tiện hơn nhiều. Trong trường hợp đó, nó chỉ là trình thông dịch của các lệnh shell được lưu trữ. Bạn cũng có thể viết chương trình của bạn bằng thông dịch viên của một số ngôn ngữ khác.


1

Các hệ điều hành không có vỏ dòng lệnh hoặc giao diện đồ họa có nhiều loại "khuôn mặt" khác.

Các hệ thống nhúng chỉ thực hiện công việc của chúng mà không cần bất kỳ giao diện người dùng nào, như hệ thống quản lý động cơ trong xe của bạn (mà bạn có thể nhận được bằng một số cách thông qua giao diện OBD2 và thiết bị đầu cuối phù hợp). Hoặc có thể có bàn phím kỹ thuật số, núm hoặc bất cứ thứ gì (nghĩ: lò vi sóng, thang máy hoặc tấm mặt của hệ thống âm thanh hiện đại). Cho dù bạn coi những điều này như một hình thức vỏ là chủ quan, tất nhiên.

Dưới đây là một công thức cấp cao về cách, như một người có sở thích, bạn có thể tạo ra một máy tính hữu ích mà không cần vỏ trên đó:

  • Xây dựng một bảng mạch cho một vi điều khiển, hoặc có được một bảng chung.
  • Móc nó lên để lái một số thiết bị hữu ích, như, cảm biến độ ẩm và van nước. Bộ vi điều khiển có các chân ngoại vi cho mục đích này: UART, GPIO, v.v.
  • Viết chương trình cơ sở để theo dõi cảm biến và tưới nước cho đất.
  • Tải lên chương trình cơ sở thông qua các công cụ phát triển (Vì vậy, không cần phải có vỏ trên máy chủ để tải và chạy bất cứ thứ gì, và phần sụn được lưu trong bộ nhớ flash trên chip). Lập trình có thể liên quan đến vi điều khiển được cắm vào một bảng lập trình đặc biệt hoặc có thể có cách thực hiện trong khi nó đang ngồi trong bảng thực tế của bạn. Bảng giao diện với PC của bạn (hiện tại thông qua USB chẳng hạn) và bạn sử dụng một số công cụ: như IDE hoặc công cụ dòng lệnh trên máy chủ.
  • Triển khai điều này: về cơ bản bây giờ là một hộp đen điện tử bằng cách nào đó theo dõi độ ẩm của đất và bật nước, không có đầu vào hoặc đầu ra nào khác.

Các máy tính đa năng rất sớm không có vỏ có một số phương tiện đầu vào, như đọc thẻ đục lỗ. Nhưng tất nhiên, các thẻ đục lỗ phải được phân biệt: một thẻ đục lỗ có cho máy tính một số lệnh đặc biệt, hay nó là một phần của chương trình Fortran? Vì vậy, "ngôn ngữ kiểm soát công việc" đã được phát triển, đó là các dòng lệnh thực tế.

Trước khi bấm thẻ và ngôn ngữ kiểm soát công việc, các lập trình viên phải chuyển đổi các công tắc để đưa mã nhị phân vào máy. Bạn có thể đã nghe những câu chuyện từ những người chơi cũ đã phải "chuyển đổi" trình tự hướng dẫn để khởi tạo bootstrap. Điều này vẫn được thực hiện cho đến ngày nay, theo một cách nào đó: các thiết bị vẫn tồn tại có bộ nhảy hoặc công tắc DIP và có một số lợi thế so với các cài đặt trong phần sụn.


0

Máy tính đầu tiên tôi bị kẹt là một chiếc Siemens 305 vào năm 1977, tôi đang học FORTRAN IV. Nó có một máy đánh chữ để chạy các lệnh và in thông báo chẩn đoán trên giấy, đầu đọc punchcard, đầu đọc / ghi punchtape và máy in. Đừng quên ổ cứng loại bỏ 40 MB, 16 inch hoặc hơn. Vì vậy, nó đã có một vỏ, và giao diện là máy chữ.


0

Tôi nhớ việc chạy trình gỡ lỗi và trình soạn thảo văn bản (DDT và emacs) tương đương với trình vỏ lệnh vào những năm 1970. Vì vậy, nếu bạn chạy emacs trong chế độ bảng điều khiển với bất kỳ chương trình nào khác được thực hiện thông qua eshell cho trình gỡ lỗi thực thi chương trình, bạn sẽ có trải nghiệm gần gũi.

Lưu ý rằng emacs có một môi trường hoàn chỉnh, vì vậy ngoài việc chỉnh sửa lịch sử lệnh tốt và nhiều thiết bị đầu cuối ảo, bạn có một tiện ích macro và script rất có khả năng được tích hợp.

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.