Seperti apa sistem operasi tanpa shell?

41

Shell seperti bash atau command.com (hingga Windows ME) atau CMD.EXE (dalam versi yang lebih baru) menyediakan antarmuka yang (antara lain) menerima perintah dari pengguna. Seperti apa sistem operasi sebelum shell dijalankan? Bagaimana sistem digunakan sebelum shell pertama dikembangkan (misalnya UNIX pada awal 1970-an)? Jika komputer bahkan tidak dapat menerima perintah (tidak ada baris perintah), bagaimana pengguna dapat berinteraksi dengannya? Apa antarmuka paling dasar ini? Bisakah saya menjalankan antarmuka ini dalam emulator terminal atau apakah tidak ada cara di balik shell?

44taka
sumber
2
(Sebagai tambahan: istilah shell tidak hanya berlaku untuk shell command line .)
Arjan
2
@Ramhound Tentu saja Anda dapat berinteraksi dengan sistem tanpa baris perintah. Orang dapat berdebat manfaat dari berbagai pendekatan desain UI sepanjang minggu, tetapi tentu saja mungkin untuk berinteraksi baik dengan Mac OS klasik maupun Altair meskipun tidak memiliki baris perintah di luar kotak.
CVn
4
Antarmuka paling dasar mungkin akan menjadi panel saklar seperti pada PDP11 / 04 dll
Tog
1
Yang ini terlihat seperti catur raspberrypi.org/archives/4300
Nico Burns
1
Sepertinya pohon tumbang di hutan tanpa ada yang melihat.
nathan hayfield

Jawaban:

35

Seperti apa sistem operasi sebelum shell dijalankan?

Tergantung pada OS dan bagaimana Anda mengkonfigurasinya. Linux dapat dikonfigurasi untuk menulis teks boot ke perangkat konsol, baik konsol mode teks, konsol framebuffer atau port serial. Itu juga dapat dikonfigurasikan untuk benar-benar diam. Beberapa OS / sistem dapat menulis informasi diagnostik ke memori non-volatile yang dapat diakses dengan menempatkan sistem dalam mode pengembang, debug, atau diagnostik. Banyak sistem operasi mendukung keluaran boot dan informasi diagnostik ke beberapa bentuk UART, yang entah bagaimana mungkin tersedia pada unit bahkan jika disembunyikan dari pengguna (google "Tambahkan port serial ke DD-WRT" untuk contoh di mana produsen menyembunyikan port serial dan bagaimana Anda bisa mendapatkan mereka).

OS tidak harus memiliki tampilan eksternal sama sekali - itu hanyalah perangkat lain untuk OS.

Bagaimana sistem digunakan sebelum shell pertama dikembangkan (misalnya UNIX pada awal 1970-an)?

Pada dasarnya (dan banyak meninggalkan tetapi ini seharusnya memberi Anda ide) - Anda memuat program Anda, baik dengan membalik sakelar pada panel atau menggunakan kertas-tape reader (perangkat ini akan menulis ke memori secara langsung tanpa intervensi CPU) dan kemudian mulai CPU dengan sakelar lain. CPU akan menjalankan program ini, menghasilkan output, dan berhenti. Ini adalah pemrosesan batch yang bertentangan dengan pemrosesan interaktif. Jika Anda ingin menjalankan program yang berbeda, Anda harus melakukan ini lagi.

Jika komputer bahkan tidak dapat menerima perintah (tidak ada baris perintah), bagaimana pengguna dapat berinteraksi dengannya?

Saya bukan ahli dalam bidang ini tetapi komputer lama, lama seperti Altair, IMSAI, dan PDP-8 dan yang demikian memiliki saklar panel depan yang secara langsung mengontrol CPU dan dapat langsung membaca dan menulis memori tanpa campur tangan CPU.

Apa antarmuka paling dasar ini?

Saya percaya sebagian besar jika tidak semua CPU modern memiliki "port JTAG" yang memungkinkan jenis operasi langsung yang sama. Ingatlah bahwa untuk waktu yang lama sebagian besar komputer diharapkan memiliki ROM atau firmware yang mengendalikan sistem ketika dihidupkan sebelum menyerahkannya ke OS. Di sini, utilitas pra-boot bisa ada, atau mekanisme minimal untuk memuat utilitas seperti itu ada. Beberapa bootloader seperti U-Boot dapat diakses melalui port serial. Bootloader tidak menjalankan "di belakang" OS, mereka memuat OS, mengendalikannya, dan kemudian mereka tidak lagi berjalan.

Bisakah saya menjalankan antarmuka ini dalam emulator terminal atau apakah tidak ada cara di balik shell?

Tidak, Anda memerlukan antarmuka JTAG. Itu terjun ke ranah elektronik dan saya akui saya tidak tahu banyak tentang itu, kecuali bahwa GuruPlug saya datang dengan satu dan saya dapat langsung memprogram chip flash pada papan GuruPlug dengan itu - artinya jika sesuatu membunuh bootloader pada GuruPlug, saya memiliki cara "CPU independent" untuk mem-flash-nya kembali.

LawrenceC
sumber
4
Antarmuka JTAG memungkinkan (dengan bantuan pengontrol khusus) akses ke antarmuka uji semua komponen yang melewati mode operasi normal. Bergantung pada fungsionalitas tes yang diekspos, Anda dapat memprogram memori, mengontrol input / output, memulai / menghentikan CPU atau membaca register internal.
Chaos_99
23

Sistem operasi tidak harus menyediakan shell seperti istilah yang umum digunakan saat ini (artinya aplikasi yang akan menerima perintah secara interaktif dari pengguna), tetapi sistem operasi seperti itu tidak akan benar-benar "terlihat seperti" apa pun sama sekali bagi pengguna. Seperti yang disebutkan Oliver Salzburg, layar mungkin hanya akan menampilkan layar kosong (jika memiliki dukungan output tampilan sama sekali), meskipun tidak ada alasan untuk itu. Ambil contoh output diagnostik kernel Linux selama proses boot dan inisialisasi kernel.

Shell, apakah shell grafis, interpreter baris perintah atau yang lainnya, menggunakan fasilitas yang disediakan oleh sistem operasi untuk melakukan hal-hal seperti membaca perintah, memulai proses, melakukan pengalihan I / O dan sebagainya.

Namun, tidak ada alasan mengapa aplikasi yang menggunakan fasilitas tersebut harus menjadi shell .

Di masa lalu, sistem operasi hanyalah kumpulan dari "rutinitas yang berguna" yang setiap aplikasi harus menulis ulang dari awal, dan komputer pada dasarnya adalah perangkat pengolah batch. Hal-hal seperti file, disk dan printer I / O mungkin termasuk yang pertama yang dikumpulkan ke dalam apa yang sekarang dikenal sebagai sistem operasi, diikuti oleh penjadwalan proses (perlu dicatat bahwa awal-awal 1960-an Apollo Guidance Computer adalah komputer multitasking). Aplikasi kemudian dapat melakukan panggilan ke OS alih-alih menggunakan rutinitas mereka sendiri untuk melakukan hal-hal seperti itu, yang mengurangi kompleksitas pemrograman dan mungkin membantu mengurangi ukuran kode atau waktu eksekusi (karena fasilitas sistem tersebut dapat sangat dioptimalkan dan didebug satu kali setelah semua orang mendapat manfaat) . Ketika komputer menjadi semakin umum, sistem operasi menambahkan fitur yang sebagian besar berpusat pada pengguna, seperti cara bagi pengguna untuk berinteraksi dengan komputer dan memberikan perintah secara interaktif; cangkang grafis hanyalah perpanjangan dari garis penalaran itu.

Juga, belum lama (pikirkan hingga akhir 1980-an), masih cukup umum untuk menulis aplikasi untuk dijalankan pada perangkat keras komputer pribadi yang telanjang, tanpa bantuan sistem operasi biasa. Ini sangat berguna untuk gim, karena menghindari memori dan pemrosesan overhead sistem operasi yang tepat, tapi saya yakin ada contoh lain juga. Dalam kasus tersebut, sampai batas tertentu, aplikasi tersebut adalah sistem operasinya sendiri dan sebagai konsekuensinya, antarmuka pengguna yang disediakan oleh aplikasi tersebut adalah shell.

sebuah CVn
sumber
4
Sangat umum hari ini untuk menulis program yang berjalan di atas logam tanpa sistem operasi - mungkin lebih umum daripada sebelumnya. Dewasa ini hampir semua yang memiliki elektronik di dalamnya memiliki mikrokontroler. Beberapa sistem tertanam ini seperti mobil atau router memiliki sistem operasi, tetapi hal-hal sederhana seperti termostat, mesin cuci dll. Pada umumnya tidak.
Jeanne Pindar
1
@JeannePindar Poin bagus; Saya sudah mengklarifikasi maksud saya dalam konteks komputer pribadi.
CVn
11

Komputer awal tidak memiliki OS dalam arti kita menggunakan kata hari ini. Mereka mengekspos fungsi yang diimplementasikan dalam perangkat keras langsung ke program apa pun yang berjalan di atasnya. Hanya ada satu program yang berjalan pada mereka pada saat yang sama. Program itu sendiri harus mengendalikan semua tugas, tidak ada yang dilakukan 'di latar belakang' oleh OS.

Tetapi masih ada titik masuk bagi pengguna untuk memulai program. Jika Anda merentangkan kata, Anda bisa menyebutnya "shell". Tetapi pada dasarnya, itu hanya perangkat keras yang menunggu pengguna untuk memasukkan bit pertama dari program yang akan dijalankan. Baik itu dalam bentuk tombol yang ditekan, sakelar yang dibolak-balik, kabel yang terhubung pada papan switch, kartu punch, film berlubang atau pita magnetik. Mungkin mereka bahkan dapat memilih dari beberapa opsi program yang dimuat sebelumnya. Tetapi bahkan memilih dari daftar yang ditampilkan sebagai lampu bercahaya dengan menekan tombol di sebelahnya sudah dapat dianggap sebagai 'shell'.

Jadi, jika definisi Anda tentang 'shell' adalah 'antarmuka yang menerima perintah dari pengguna', maka tidak ada waktu sebelumnya, setidaknya untuk perangkat yang Anda bahkan akan secara samar-samar memanggil komputer.

Anda mungkin ingin memeriksa halaman wikipedia yang cukup bagus tentang sejarah komputasi , meskipun tidak banyak fokus pada perspektif input / output.

Kekacauan_99
sumber
6

Mungkin akan menjadi layar kosong.

The shell mungkin bernama shell karena merupakan shell sekitar kernel (kernel menjadi sistem operasi). Jadi, dalam arti tertentu, itu adalah antarmuka pengguna untuk sistem operasi, antarmuka apa pun itu.

Jika sistem operasi hanya memiliki satu fungsi tunggal, yang akan mematikan komputer, dan Anda akan membangun sebuah program yang menerima input keyboard apa pun dan kemudian memanggil fungsi itu, maka itu adalah shell. Tidak perlu memiliki antarmuka baris perintah yang kompleks untuk membangun sesuatu yang berinteraksi dengan pengguna.

Der Hochstapler
sumber
2

Dari pandangan historis, saya kira ada kartu Punched ( https://en.wikipedia.org/wiki/Punched_card ). Untuk berinteraksi dengan sistem komputer. Tapi saya kira ini jauh ke belakang untuk pertanyaan Anda.

Daniel Stutz
sumber
Kartu berlubang adalah mekanisme penyimpanan data, bukan bagian yang terlihat dari sistem operasi.
CVn
2

OS pertama yang saya gunakan (1981) setelah kuliah adalah PRIMOS pada komputer mini Prime. Ini adalah sistem operasi pembagian waktu dan mendukung sejumlah pengguna, masing-masing menggunakan terminal yang terhubung ke komputer melalui kabel RS232. Anda harus masuk ke terminal untuk memberikan nama pengguna dan kata sandi. Sesi terminal Anda adalah semacam shell. Anda dapat mengedit file, mengkompilasi, menjalankan semua hal yang kami lakukan saat ini. Semua terminal memiliki akses ke sistem pengarsipan yang sama. Sebagian besar terminal ini tidak lebih dari mesin tik - tidak ada editor WYSISWYG, bahkan emacs adalah mimpi.

Sistem operasi terstruktur seperti sekarang dan dapat dibayangkan sebagai lapisan kulit bawang. Lapisan terdalam memiliki fungsi tingkat yang sangat rendah - seperti kontrol perangkat keras, akses memori. Keluar, sistem file akan ditambahkan dan kemudian lapisan pengguna. Dalam program Anda, Anda akan dapat berinteraksi dengan beberapa lapisan, tetapi tidak dengan yang paling dalam (sehingga Anda tidak akan dapat mengacaukan pembagian waktu atau perangkat keras yang sebenarnya - lampu dan sebagainya). Komputer tanpa cangkang akan seperti salah satu lapisan dalam ini, mungkin dapat mengakses hard disk dan tape reader (sungguh!), Tetapi tidak akan tahu tentang file atau pengguna.

Untuk mem-boot komputer awal, Anda perlu memuat sekumpulan instruksi dasar (ini mungkin melibatkan pengalihan sakelar fisik dalam urutan sekumpulan pada komputer). Urutan ini akan memulai program kecil kedua, yang mungkin memungkinkan tape reader berfungsi. Kemudian Anda akan memuat sistem yang lebih kompleks melalui tape reader, yang mungkin membawa drive disk on line. Anda bisa membayangkan OS tanpa shell sebagai seperti salah satu loader awal ini.

Saat ini komputer memiliki urutan yang sama, jadi ketika Anda memulai mesin, ia memuat BIOS-nya, yang mulai disk, kartu jaringan, kartu video dan sebagainya, maka BIOS mencari program tertentu pada hard disk dan menjalankannya (pada Windows paling sedikit). Unix melakukan hal serupa yang secara progresif mengatur kernel mulai dengan modul yang sangat dasar dan membangunnya sampai sampai ke prompt login

Derek Knight
sumber
1

Sistem operasi sebagai definisi agak ambigu. Apakah itu kernel itu sendiri? Apakah itu kernel dan juga alat yang menyertainya? Linux adalah kernel tetapi GNU / Linux adalah sistem operasi yang didasarkan pada kernel Linux dan alat proyek GNU. Shell adalah bagian integral dari sistem operasi tersebut.

Namun, begitu Linux selesai dan selesai dengan "boot", Anda harus memberi tahu program apa yang harus dijalankan. Sejak saat itu semuanya ada di tangan program khusus itu. Secara default itu inityang tahu apa yang harus dilakukan selanjutnya dan mungkin pada akhirnya akan membawa Anda ke layar login GUI yang bagus. Tetapi tidak harus seperti itu. Anda bisa boot seperti ini

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

Kemudian program /bin/fancyakan mencetak "Hello world!". Kami tidak perlu shell untuk itu. Jika Anda ingin memulai beberapa program lain, cukup buat proses baru dengan man 2 forkdan man 2 execve, atau baca dari perangkat terminal dan terima input pengguna. Masih tidak perlu shell.

Dalam pandangan saya shell sistem operasi adalah program yang dapat membaca input pengguna dan kemudian memulai program lain. Jika Anda memikirkannya, cukup jelas mengapa seseorang ingin menulis program seperti itu.

Bahkan jika Anda tidak perlu membaca input pengguna secara interaktif, jauh lebih mudah untuk menulis skrip shell sederhana untuk tugas Anda. Dalam hal ini hanya interpreter dari perintah shell yang tersimpan. Anda juga dapat menulis program Anda dengan juru bahasa lain.

Miroslav Koškár
sumber
1

Sistem operasi tanpa cangkang baris perintah atau antarmuka grafis memiliki banyak jenis "wajah" lainnya.

Sistem tertanam hanya melakukan pekerjaan mereka tanpa antarmuka pengguna, seperti sistem manajemen mesin di mobil Anda (yang dapat Anda dapatkan melalui beberapa cara melalui antarmuka OBD2 dan terminal yang sesuai). Atau mungkin memiliki keypad digital, kenop atau apa pun (pikirkan: oven microwave, lift, atau pelat muka sistem suara modern). Apakah Anda menganggap ini sebagai bentuk shell itu subjektif, tentu saja.

Berikut adalah resep tingkat tinggi tentang bagaimana, sebagai penghobi, Anda dapat membuat komputer yang bermanfaat tanpa cangkang:

  • Buat papan sirkuit untuk mikrokontroler, atau dapatkan papan generik.
  • Hubungkan untuk menggerakkan beberapa perangkat yang berguna, seperti, katakanlah, sensor kelembaban, dan katup air. Mikrokontroler memiliki pin periferal untuk tujuan ini: UART, GPIO, dan sebagainya.
  • Tulis firmware untuk memonitor sensor, dan sirami tanah.
  • Unggah firmware melalui alat pengembangan (Jadi, tidak diperlukan shell pada komputer host untuk memuat dan menjalankan apa pun, dan firmware disimpan dalam memori flash pada chip). Pemrograman mungkin melibatkan mikrokontroler yang dicolokkan ke papan pemrograman khusus, atau mungkin ada cara melakukannya saat ia duduk di papan Anda yang sebenarnya. Papan antarmuka ke PC Anda (saat ini via USB, misalnya) dan Anda menggunakan beberapa alat: seperti IDE, atau alat baris perintah pada host.
  • Menyebarkan hal itu: sekarang pada dasarnya sebuah kotak hitam elektronik yang entah bagaimana memantau kelembaban tanah dan menyalakan air, tanpa input atau output lainnya.

Komputer serba guna yang sangat awal memiliki cangkang memiliki beberapa input, seperti membaca kartu berlubang. Tetapi tentu saja, kartu berlubang harus dibedakan: apakah kartu berlubang memberi komputer beberapa perintah khusus, atau itu bagian dari program Fortran? Jadi "bahasa kontrol pekerjaan" harus dikembangkan, yang merupakan baris perintah de-facto.

Sebelum menekan kartu dan bahasa kontrol pekerjaan, programmer harus mengaktifkan sakelar untuk memasukkan kode biner ke dalam mesin. Anda mungkin pernah mendengar cerita dari orang-orang tua yang harus "mengaktifkan" urutan instruksi untuk memulai bootstrap. Ini masih dilakukan hari ini, dengan cara: perangkat masih ada yang memiliki jumper atau DIP switch, dan ada beberapa keuntungan untuk ini dibandingkan dengan pengaturan di firmware.

Kaz
sumber
0

Komputer pertama yang saya gunakan adalah Siemens 305 pada tahun 1977, saya belajar FORTRAN IV. Itu mesin tik untuk menjalankan perintah dan mencetak pesan diagnostik di atas kertas, pembaca kartu punch, pembaca punchtape / penulis dan printer. Tidak ketinggalan harddisk 40 MB yang bisa dilepas, 16 inci atau lebih. Jadi sudah ada shell, dan antarmuka adalah mesin tik.

ott--
sumber
0

Saya ingat menjalankan debugger dan editor teks (DDT dan emacs) sebagai setara dengan shell perintah di tahun 1970-an. Jadi, jika Anda menjalankan emacs dalam mode konsol dengan program lain yang dijalankan melalui eshell ke debugger yang menjalankan program, Anda akan memiliki pengalaman yang dekat.

Perhatikan bahwa emacs memiliki lingkungan lisp lengkap, jadi di samping pengeditan riwayat perintah yang baik dan beberapa terminal virtual, Anda memiliki fasilitas makro dan skrip yang sangat mumpuni.

mpez0
sumber