Bagaimana Sistem Operasi berjalan pada chip yang sama yang seharusnya dikelola?

17

Dari bacaan saya tentang Sistem Operasi (membaca materi dasar di Wikipedia, situs teknologi, dll) Saya telah belajar bahwa Sistem Operasi adalah program yang memungkinkan program dan aplikasi untuk berinteraksi dengan perangkat keras dengan cara yang efisien dan aman.

Namun saya bingung tentang bagaimana Sistem Operasi mengawasi operasi komputer ketika itu sendiri perlu dioperasikan.

Apa yang saya maksud? Nah, cara saya membayangkan Sistem Operasi bekerja, adalah bahwa pada komputer, akan ada dua CPU. Satu yang menjalankan OS sepanjang waktu, dan satu lagi yang menggunakan OS untuk menjalankan komputer. Namun, ternyata OS tersebut berjalan pada CPU yang sama dengan proses lainnya. Ini seperti seorang manajer yang harus bekerja pada jalur produksi yang sama dengan karyawannya, dan hanya bisa menggunakan alat-alat listrik ketika karyawan lain selesai dengan mereka. Dia tidak akan menjadi manajer yang sangat efektif, karena dia tidak akan memiliki kemampuan untuk mengeluarkan pesanan jika karyawannya bahkan sedikit tidak disiplin.

Jadi bagaimana mungkin OS hanya menjalankan sebagian waktu pada CPU yang sama yang harus dibagi antara semua proses lainnya? Bagaimana akhirnya ini berhasil?

CodyBugstein
sumber
1
Seorang manajer seharusnya tidak menggunakan alat-alat listrik karyawannya! Sebagai gantinya, ia harus memastikan bahwa karyawan memiliki alat-alat listrik yang berfungsi.
MSalters

Jawaban:

15

CPU modern menyadari OS hingga tingkat tertentu. Mereka menyediakan beberapa "alat listrik" untuk yang pertama yang mengklaimnya. Biasanya ini adalah boot loader, yang kemudian menyerahkan kendali ke OS. Seseorang biasanya berbicara tentang "mode kernel" vs "mode pengguna" atau "dering 0" vs "dering 3" untuk membedakan antara satu proses dengan hak istimewa ekstra dan sisanya.

"Alat-alat listrik" ini adalah hak istimewa tertentu untuk manajemen sumber daya: Kontrol memori, akses ke perangkat keras dan berapa lama kode tingkat pengguna dapat dijalankan tanpa gangguan.

CPU menjalankan OS dengan hak-hak istimewanya ketika salah satu dari peristiwa berikut ini terjadi:

  1. Proses mode pengguna secara eksplisit menyerahkan kontrol ke proses mode kernel. Ini disebut a syscall .
  2. Proses mode kernel dapat menggunakan hak istimewanya untuk mendaftar ke acara tertentu (mis. Perangkat keras eksternal mengirimkan sinyal khusus ke CPU atau proses ruang pengguna mencoba mengakses sumber daya yang dipesan). Ketika terjadi genap, CPU segera menghentikan proses mode pengguna dan menyerahkan kontrol proses mode kernel. Biasanya seseorang berbicara dari interupsi .

Jadi OS dapat berjalan pada chip yang sama karena chip dibangun untuk ini. Itu dapat memesan hak khusus untuk dirinya sendiri. CPU dapat mengganggu semua bagian kode lainnya tanpa hak istimewa ini kapan saja dan menyerahkan kendali ke OS.

Beberapa chip dengan dukungan yang sangat terbatas (mis. Mikrokontroler ) tidak memiliki dukungan ini untuk kode istimewa khusus. Chip ini biasanya berjalan tanpa OS. Hanya ada satu program besar yang berjalan, yang dapat mengakses perangkat keras secara langsung, harus menanggapi gangguan perangkat keras dan dapat mengakses sumber daya kapan saja. Jika program itu membuat satu kesalahan, biasanya semuanya macet.

stefan.schwetschke
sumber
17

Dalam bentuknya yang paling primitif, sistem operasi mengandalkan proses yang berperilaku baik dan menyerahkan kontrol kembali ke sistem operasi dari waktu ke waktu. Jika suatu proses tidak berperilaku baik, maka memang bisa terjadi bahwa sistem operasi membeku.

Namun sebagian besar CPU mengalami interupsi : gangguan menghentikan proses saat ini (preemption) dan kontrol tangan kembali ke sistem operasi. Anda dapat menjadwalkan interupsi terjadi pada interval tertentu, atau dipicu secara eksternal (misalnya menekan tombol reset).

Pada dasarnya, CPU berganti-ganti antara menjalankan OS dan menjalankan proses dengan kecepatan sangat cepat. Selain itu, CPU memiliki "mode pengguna" dan "mode kernel". Proses berjalan dalam mode pengguna dan OS berjalan dalam mode kernel. Menjalankan dalam mode pengguna mencegah proses mengeksekusi perintah terbatas (seperti IO). Jika suatu proses ingin menulis ke disk, ia harus meminta OS untuk melakukannya. OS beralih ke mode kernel dan melakukan penulisan atas nama proses (setelah memastikan proses memiliki izin yang diperlukan).

Tom van der Zanden
sumber
7
@ IMray Tidak juga, untuk CPU OS hanyalah sedikit kode. Namun, CPU memiliki banyak fitur yang dirancang untuk digunakan oleh pencipta OS.
Tom van der Zanden
3
Saya tidak tahu apakah "aware" adalah terminologi yang tepat, tetapi CPU tidak memiliki alasan untuk ada selain menjalankan OS. Jelas tidak sepenuhnya independen. Bahkan, CPU sepenuhnya bergantung pada OS untuk mengelola berbagai modenya dan jika tidak, katakan apa yang harus dilakukan.
Mohair
2
@ Mohair Ada banyak mikrokontroler yang berjalan tanpa OS sama sekali, apakah itu dianggap sebagai CPU?
Tom van der Zanden
2
"Apakah itu dianggap sebagai CPU?" Tentu saja mereka lakukan. Begitu juga 6502 di komputer pertama saya meskipun tidak memiliki cincin pengguna dan kernel yang berbeda, dan Anda dapat pokedari baris perintah untuk bekerja semua jenis kerusakan.
dmckee
2
@ TomvanderZanden bagaimana tepatnya the CPU switches back and forth between running the OS and running processes? Apa yang memicu sakelar?
jnovacho
1

Anda tidak memerlukan dua prosesor yang berbeda untuk mikroprosesor untuk menjalankan userspace dan kode ruang kernel. Pada dasarnya ini bekerja dengan cara ini ketika Anda menyalakan komputer Anda pada Bios Anda Bootloader (kode 512kb pada disk yang berakhir 55aa tanda tangan bootloader) untuk ram dan melalui bootloader ini kernel Anda dimuat ke ram dan berjalan selamanya sampai Anda mematikan komputer Anda. Dan kernel Anda mengelola memori dan tidak mengizinkan kode kernel Anda yang berada di ram tidak akan ditimpa oleh kode ruang pengguna. Untuk tujuan ini ada panggilan sistem yang menggunakan kode userspace dengan menggunakan panggilan sistem ini dan menambahkan kode userspace Anda ke ram dan mulai menjalankannya. Dalam sistem operasi, konsep ini diteliti sebagai Manajemen Memori. Inilah tautan yang bisa Anda baca, sangat bagus untuk memulai https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf

Yasin Fatullayev
sumber
0

Untuk membangun jawaban lain, lebih mudah untuk memahami jika Anda berpikir bahwa kernel itu sendiri bukan proses tetapi kode manajemen. Setiap proses pengguna dapat bergeser dari mode pengguna ke mode kernel dan menjalankan kode kernel (instruksi yang diprivatisasi) dengan menggunakan beberapa bagian dari ruang kernel. Kemudian proses dapat kembali ke mode pengguna dan berjalan di ruang pengguna lagi.

pengguna35809
sumber