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?
shell
operating-systems
history
44taka
sumber
sumber
Jawaban:
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.
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.
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.
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.
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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
sumber
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
init
yang 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 iniKemudian program
/bin/fancy
akan mencetak "Hello world!". Kami tidak perlu shell untuk itu. Jika Anda ingin memulai beberapa program lain, cukup buat proses baru denganman 2 fork
danman 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.
sumber
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:
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.
sumber
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.
sumber
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.
sumber