Bagaimana cara kerja banyak tugas

15

Saya benar-benar tidak mengerti tentang cara kerja bagian dalam sistem operasi, tetapi saya dapat kira-kira kira-kira perilaku perkiraan dari banyak fungsi. Namun, satu hal yang tidak dapat saya pahami adalah multitasking.

Secara teori, sistem operasi mengatur waktu, menurut CPU untuk interval kecil ke berbagai program yang berjalan. Tapi itu tidak jelas bagaimana ini benar-benar bekerja.

Katakanlah sistem operasi ingin memulai program saya. Kode mesin dimuat di suatu tempat di RAM, mulai dari alamat tertentu. Saya kira lompatan harus dilakukan ke alamat itu, memungkinkan kode saya untuk mengeksekusi. Tetapi dengan cara ini, OS tidak bisa mendapatkan kembali kendali sampai saya melompat kembali.

Pada dasarnya, saya bisa membayangkan hanya dua cara untuk membuat ini bekerja, tetapi tidak ada yang benar-benar cocok:

  • Sistem operasi dapat membaca instruksi mesin yang ingin saya lakukan dan meniru mereka daripada mengeksekusi secara langsung. Saya sengaja tidak jelas, karena saya tidak tahu bagaimana ini akan bekerja, tetapi sepertinya itu akan sangat memperlambat program.

  • Atau, sistem operasi bisa menunggu sampai saya membuat panggilan sistem. Pada saat itu ia mendapatkan kembali kendali dan dapat memeriksa berapa lama saya telah menjalankan dan melakukan hal-hal pembagian waktu. Ini mungkin bekerja, tetapi tampaknya tidak dapat diandalkan, karena saya bisa membuat perhitungan panjang yang tidak melibatkan panggilan sistem dan menggantung semuanya untuk sementara waktu.

Jadi, sepertinya tidak ada mekanisme yang bekerja dengan baik. Bagaimana multitasking sebenarnya dilakukan?

Andrea
sumber
Meskipun tebakan Anda tidak sepenuhnya benar, masalah yang Anda tunjukkan adalah, well, yeah: "Saya bisa membuat perhitungan panjang yang tidak melibatkan pemanggilan sistem dan menggantung semuanya untuk sementara waktu."
jhocking
Kata kunci yang harus dicari:interrupt
SK-logic
Ya, tetapi siapa yang meluncurkan interupsi? Jika kode saya dieksekusi, OS tidak memiliki cara untuk menjalankan INTinstruksi. Sesuatu masih misterius bagi saya
Andrea
@ Andrea, jam harware memicu gangguan. Sesederhana itu. en.wikipedia.org/wiki/Scheduling_%28computing%29
SK-logic
Ok, sekarang saya mengerti. Jadi, jika saya mengerti dengan benar, ini adalah fitur berbasis perangkat keras, bukan sesuatu yang bisa diimplementasikan oleh OS.
Andrea

Jawaban:

21

OS memprogram penghitung waktu untuk memulai setiap beberapa mikrodetik (atau milidetik, tergantung pada kecepatan sistem). Timer ini meningkatkan interupsi perangkat keras, yang menyebabkan CPU menghentikan apa pun yang sedang dilakukannya, membuang semua isinya ke tumpukan dan memproses rutin interupsi yang ditunjukkan oleh alamat yang disediakan oleh pengendali interupsi. Rutin ini dapat memeriksa tumpukan dan berbagai variabel lain untuk membuat keputusan proses berjalan mana yang selanjutnya harus dilakukan kembali. Jika ini proses yang sama, rutin interupsi hanya kembali. Jika berbeda, bagian-bagian yang relevan dari tumpukan disimpan dan kemudian diganti dengan isi dari proses yang sebelumnya terganggu, jadi ketika rutinitas interupsi kembali, proses itu berlanjut. Selain fakta bahwa beberapa waktu telah berlalu,

Ini (untuk CPU modern) adalah versi yang SANGAT SANGAT disederhanakan dari apa yang terjadi, tetapi ini menjelaskan prinsipnya. Selain interupsi yang dikendalikan OS ini, ada juga interupsi yang disebabkan oleh peristiwa eksternal (mouse, keyboard, port serial, port jaringan, dll.) Yang diproses dengan rutin interupsi terpisah, yang biasanya terhubung ke event handler.

Seringkali proses / tugas / pengalihan konteks juga didasarkan pada ketersediaan sumber daya eksternal. Biasanya suatu proses yang membutuhkan data dari penyimpanan (yaitu tidak dalam RAM) akan menempatkan permintaan pada antrian, mengatur event handler untuk interupsi perangkat keras yang menunjukkan bahwa permintaan telah dilayani dan kemudian melepaskan kontrol ke penjadwal tugas (karena tidak ada titik menunggu). Sekali lagi, deskripsi yang sangat disederhanakan tentang apa yang sebenarnya terjadi, tetapi harus melayani tujuan dari jawaban ini.

wolfgangsz
sumber
5

Ini bervariasi dari satu sistem ke sistem lainnya.

Dalam sistem multitasking nonpreemptive (seperti Oberon asli, atau Apple Macintosh asli), sistem operasi secara berkala "mengumpulkan" semua tugas, memberi mereka kesempatan untuk melakukan pekerjaan. Tugas-tugas tersebut diharapkan dapat bermain dengan baik bersama. Jika mereka hanya memiliki sedikit pekerjaan yang harus dilakukan, mereka melakukannya dan kembali ke OS. Jika satu tugas memiliki sebagian besar untuk dilakukan, diharapkan memecahnya menjadi bagian-bagian kecil, dan bekerja satu bagian kecil setiap kali itu disurvei.

Interupsi perangkat keras (penyelesaian DMA drive disk, interupsi port serial, apa pun yang Anda lakukan) menyebabkan rutinitas interupsi dijalankan. Rutinitas interupsi ini pada gilirannya dapat memberitahukan tugas pekerjaan yang harus dilakukan ketika tugas berikutnya berjalan.

Dalam sistem multitasking nonpreemptive, kejadian atau tidak adanya interupsi tidak mempengaruhi tugas mana yang berjalan setelah rutin interupsi selesai.

Dalam sistem multitasking preemptive, dimungkinkan untuk suatu rutin interupsi untuk memaksakan perubahan penjadwalan. Dalam sistem multitasking preemptive round-robin tradisional, penghitung waktu berkala melakukan hal itu. Timer interrupt menyala, timer interrupt rutin melakukan sihir hitam untuk menyebabkan instruksi return-from-interrupt untuk kembali ke jadwal preemptive sistem operasi, daripada ke tugas yang sedang berjalan, mengambil prosesor dari tugas saat ini, dan (MUNGKIN) ) memberikannya ke tugas lain. Jika tidak ada tugas lain yang siap dijalankan pada saat itu, tugas saat ini akan mendapatkan prosesor lagi, hanya kehilangan beberapa waktu.

Multitasking preemptive dapat menyebabkan BANYAK masalah. Semua hal yang menjengkelkan tentang mutex dan bagian kritis dan pelukan mematikan dan inversi prioritas dan ... muncul ketika prosesor diambil dari Anda tanpa peringatan. Anda harus menggunakan semua hal itu untuk memberi tahu sistem operasi bahwa Anda berada di tengah-tengah pencampuran nitrogliserin dan mengambil prosesor dari Anda saat ini kemungkinan akan menghasilkan lubang virtual besar merokok di tengah lantai ruang server.

John R. Strohm
sumber
Apa yang buruk bisa terjadi jika prosesor diambil dari Anda tanpa peringatan? Saya kira Anda akan mendapatkan kembali kontrol prosesor dengan nilai yang sama di register. Bagaimana itu berbeda dari hanya menjaga perhitungan Anda?
Andrea
@ Andrea: Pengucilan bersama dan bagian-bagian penting adalah tentang tidak kehilangan prosesor pada saat kritis. Jika proses Anda memiliki sesuatu yang terkunci, dan Anda kehilangan prosesor, sesuatu itu tetap terkunci sampai Anda mendapatkan prosesor lagi. Ini bisa menimbulkan masalah.
John R. Strohm
@Andrea Anda akan mendapatkan kendali atas prosesor lagi, dan beberapa proses lain mungkin mengotak-atik memori yang akan Anda gunakan.
user253751
4

Timer interupsi dapat dihasilkan oleh perangkat keras komputer untuk mengganggu CPU. Dengan cara ini, berdasarkan algoritma penjadwalan yang digunakan oleh Sistem Operasi, OS dapat memutuskan apakah akan melanjutkan menjalankan program Anda saat ini atau beralih konteks ke program lain yang siap dijalankan.

nevayeshirazi
sumber