Apa hubungan antara proses, utas kernel, proses ringan, dan utas pengguna di Unix? [Tutup]


12

Unix Internal oleh Vahalia memiliki angka yang menunjukkan hubungan antara proses, utas kernel, proses ringan, dan utas pengguna. Buku ini memberi perhatian paling besar pada SVR4.2, dan juga mengeksplorasi 4.4BSD, Solaris 2.x, Mach, dan Digital UNIX secara terperinci. Perhatikan bahwa saya tidak bertanya tentang Linux.

  1. Untuk setiap proses, apakah selalu ada satu atau lebih proses ringan yang mendasari proses? Gambar 3.4 tampaknya mengatakan ya.

    Mengapa Gambar 3.5 (a) menunjukkan proses langsung di atas CPU, tanpa proses yang ringan di antaranya?

  2. Untuk setiap proses ringan, apakah selalu ada satu thread kernel yang mendasari proses ringan? Gambar 3.4 tampaknya mengatakan ya.

    Mengapa Gambar 3.5 (b) menunjukkan proses ringan langsung di atas proses, tanpa ada benang kernel di antaranya?

  3. Apakah utas kernel satu-satunya entitas yang dapat dijadwalkan?

  4. Apakah proses ringan dijadwalkan hanya secara tidak langsung melalui penjadwalan utas kernel yang mendasarinya?

  5. Apakah proses dijadwalkan hanya secara tidak langsung melalui penjadwalan proses ringan yang mendasarinya?

Gambar 3-4.  Proses yang ringan

Gambar 3-5.  Implementasi utas pengguna


Memperbarui:

Saya mengajukan pertanyaan serupa untuk Linux. Apakah proses yang ringan dilampirkan ke utas kernel di Linux? Saya kira itu mungkin karena buku Konsep Sistem Operasi memperkenalkan konsep secara implisit menggunakan Unix, dan Unix dan Linux mungkin berbeda, jadi saya membaca tentang kernel Unix.

Saya menghargai balasan saat ini, tetapi saya berharap untuk membuka kembali posting sehingga saya dapat menerima balasan lain.


Mengapa pertanyaan seperti itu akan ditandai sebagai papan terlalu. Ini sebenarnya pertanyaan yang bagus tentang konsep Linux. Dokumen biasanya tidak cukup detail, penjelasannya akan menjadi jawaban yang bagus
炸鱼 薯条 德里克

Re moderator: Ini bukan jumlah pertanyaan murni tetapi sifat dari pertanyaan itu penting. Saya bertanya hubungan antara beberapa konsep yang terkait erat dan membingungkan. Saya kira orang yang tidak mengerti bisa berpikir bahwa hitungan pertanyaan itu penting.
Tim

Jawaban:


12

Lihat: Memahami Kernel Linux , Edisi ke-3 oleh Daniel P. Bovet, Marco Cesati

  • Penerbit: O'Reilly
  • Tanggal Pub: November 2005
  • ISBN: 0-596-00565-2
  • Halaman: 942

Dalam pengantar mereka, Daniel P. Bovet, dan Marco Cesati, mengatakan:

Secara teknis, Linux adalah kernel Unix yang sebenarnya, meskipun itu bukan sistem operasi Unix penuh, karena tidak mencakup semua aplikasi seperti utilitas sistem file, sistem windowing dan desktop grafis, perintah administrator sistem, editor teks, kompiler, dan sebagainya. di. Apa yang Anda baca di buku ini dan lihat di kernel Linux, karenanya, dapat membantu Anda memahami varian Unix lainnya juga.

Dalam paragraf berikutnya, saya akan mencoba untuk membahas sudut pandang Anda berdasarkan pemahaman saya terhadap fakta-fakta yang disajikan dalam "Memahami Kernel Linux" yang sebagian besar serupa dengan yang ada di Unix.

Apa artinya suatu proses? :

Proses adalah seperti manusia, mereka dihasilkan, mereka memiliki kehidupan yang lebih atau kurang signifikan, mereka secara opsional menghasilkan satu atau lebih proses anak, dan akhirnya mereka mati. Suatu proses memiliki lima bagian mendasar: kode ("teks"), data (VM), tumpukan, file I / O, dan tabel sinyal

Tujuan dari suatu proses dalam Kernel adalah untuk bertindak sebagai entitas yang mengalokasikan sumber daya sistem (waktu CPU, memori, dll.). Ketika suatu proses dibuat, itu hampir identik dengan induknya. Ia menerima salinan (logis) dari ruang alamat orang tua dan mengeksekusi kode yang sama dengan orang tua, dimulai pada instruksi berikutnya setelah panggilan sistem pembuatan proses. Meskipun orang tua dan anak dapat berbagi halaman yang berisi kode program (teks), mereka memiliki salinan data yang terpisah (tumpukan dan tumpukan), sehingga perubahan oleh anak ke lokasi memori tidak terlihat oleh orang tua (dan sebaliknya) .

Bagaimana Proses Bekerja?

Program pelaksana membutuhkan lebih dari sekadar kode biner yang memberi tahu komputer apa yang harus dilakukan. Program ini membutuhkan memori dan berbagai sumber daya sistem operasi untuk dapat berjalan. "Proses" adalah apa yang kami sebut program yang telah dimuat ke dalam memori bersama dengan semua sumber daya yang diperlukan untuk beroperasi. Thread adalah unit eksekusi dalam suatu proses. Suatu proses dapat memiliki mana saja dari hanya satu utas ke banyak utas. Ketika suatu proses dimulai, itu diberikan memori dan sumber daya. Setiap utas dalam proses berbagi memori dan sumber daya itu. Dalam proses single-threaded, proses tersebut berisi satu utas. Proses dan utasnya adalah satu dan sama, dan hanya ada satu hal yang terjadi. Dalam proses multithreaded, proses tersebut berisi lebih dari satu utas, dan proses ini menyelesaikan sejumlah hal pada saat yang sama.

Mekanika sistem multi-pemrosesan, termasuk proses ringan dan berat:

Dalam proses kelas berat, banyak proses berjalan bersama secara paralel. Setiap proses kelas berat secara paralel memiliki ruang alamat memori sendiri. Komunikasi antar proses lambat karena proses memiliki alamat memori yang berbeda. Pergantian konteks antar proses lebih mahal. Proses tidak berbagi memori dengan proses lain. Komunikasi antara proses-proses ini akan melibatkan mekanisme komunikasi tambahan seperti soket atau pipa.

Dalam proses yang ringan, disebut juga benang. Utas digunakan untuk berbagi dan membagi beban kerja. Thread menggunakan memori dari proses yang mereka ikuti. Komunikasi antar-thread dapat lebih cepat daripada komunikasi antar-proses karena utas dari proses yang sama berbagi memori dengan proses yang mereka miliki. akibatnya komunikasi antara utas sangat sederhana dan efisien. Pergantian konteks antara utas dari proses yang sama lebih murah. Utas berbagi memori dengan utas lain dari proses yang sama

Ada dua jenis utas: utas level pengguna dan utas level kernel. Utas tingkat pengguna menghindari kernel dan mengelola pekerjaan sendiri. Utas tingkat pengguna memiliki masalah bahwa utas tunggal dapat memonopoli slice waktu sehingga kelaparan utas lainnya dalam tugas. Utas tingkat pengguna biasanya didukung di atas kernel di ruang pengguna dan dikelola tanpa dukungan kernel. Kernel tidak tahu apa-apa tentang thread tingkat pengguna dan mengelolanya seolah-olah itu adalah proses single-threaded. Dengan demikian, utas tingkat pengguna sangat cepat, ia mengoperasikan 100X lebih cepat dari utas kernel.

Utas tingkat kernel sering diimplementasikan dalam kernel menggunakan beberapa tugas. Dalam hal ini, kernel menjadwalkan setiap utas dalam kutu waktu dari setiap proses. Di sini, karena tanda centang jam akan menentukan waktu switching, tugas cenderung untuk menghilangkan timelice dari utas lainnya dalam tugas tersebut. Utas level kernel didukung dan dikelola langsung oleh sistem operasi. Hubungan antara utas tingkat pengguna dan utas tingkat kernel tidak sepenuhnya independen, bahkan ada interaksi antara kedua level ini. Secara umum, utas tingkat pengguna dapat diimplementasikan menggunakan salah satu dari empat model: banyak-ke-satu, satu-ke-satu, banyak-ke-banyak dan dua-tingkat model. Semua model ini memetakan utas level pengguna ke utas level kernel, dan menyebabkan interaksi dalam derajat yang berbeda antara kedua level.

masukkan deskripsi gambar di sini

Utas vs. Proses

  1. Program dimulai sebagai file teks dari kode pemrograman,
  2. Program ini dikompilasi atau ditafsirkan ke dalam bentuk biner,
  3. Program ini dimuat ke dalam memori,
  4. Program menjadi satu atau lebih proses yang sedang berjalan.
  5. Proses biasanya independen satu sama lain,
  6. Sementara utas ada sebagai bagian dari suatu proses.
  7. Thread dapat berkomunikasi satu sama lain dengan lebih mudah daripada proses,
  8. Tetapi utas lebih rentan terhadap masalah yang disebabkan oleh utas lain dalam proses yang sama

Referensi:

Memahami Kernel Linux, Edisi ke-3

Lebih banyak 1 2 3 4 5

...............................................

Sekarang, mari sederhanakan semua istilah ini ( paragraf ini dari sudut pandang saya ). Kernel adalah antarmuka antara perangkat lunak dan perangkat keras. Dengan kata lain, kernel bertindak seperti otak. Ini memanipulasi hubungan antara bahan genetik (yaitu kode dan perangkat lunak turunannya), dan sistem tubuh (yaitu perangkat keras atau otot).

Otak ini (yaitu kernel) mengirimkan sinyal ke proses yang bertindak sesuai. Beberapa dari proses ini seperti otot (yaitu benang), masing-masing otot memiliki fungsi dan tugasnya sendiri, tetapi mereka semua bekerja bersama untuk menyelesaikan beban kerja. Komunikasi antara benang ini (yaitu otot) sangat efisien dan sederhana, sehingga mereka mencapai pekerjaan mereka dengan lancar, cepat dan efektif. Beberapa utas (yaitu otot) berada di bawah kendali pengguna (seperti otot-otot di tangan dan kaki kita). Yang lain di bawah kendali otak (seperti otot-otot di perut, mata, jantung yang tidak kita kendalikan).

Utas ruang-pengguna menghindari kernel dan mengelola tugas-tugas itu sendiri. Seringkali ini disebut "kerja sama multitasking", dan memang itu seperti ekstremitas atas dan bawah kita, itu di bawah kendali kita sendiri dan bekerja bersama untuk mencapai pekerjaan (yaitu latihan atau ...) dan tidak memerlukan perintah langsung dari otak. Di sisi lain, utas Kernel-Space sepenuhnya dikendalikan oleh kernel dan penjadwalnya.

...............................................

Dalam menanggapi pertanyaan Anda:

  1. Apakah proses selalu dilaksanakan berdasarkan pada satu atau lebih proses ringan? Gambar 3.4 tampaknya mengatakan ya. Mengapa Gambar 3.5 (a) menunjukkan proses langsung di atas CPU?

    Ya, ada proses ringan yang disebut utas, dan proses kelas berat.

    Proses kelas berat (Anda dapat menyebutnya proses sinyal) membutuhkan prosesor itu sendiri untuk melakukan lebih banyak pekerjaan untuk memesan eksekusi, itu sebabnya Gambar 3.5 (a) menunjukkan proses langsung di atas CPU.

  2. Apakah proses yang ringan selalu dilaksanakan berdasarkan thread kernel? Gambar 3.4 tampaknya mengatakan ya. Mengapa Gambar 3.5 (b) menunjukkan proses ringan langsung di atas proses?

    Tidak, proses yang ringan dibagi menjadi dua kategori: Proses level pengguna dan level kernel, seperti yang disebutkan di atas. Proses tingkat pengguna bergantung pada perpustakaannya sendiri untuk memproses tugasnya. Kernel itu sendiri menjadwalkan proses tingkat kernel. Utas tingkat pengguna dapat diimplementasikan menggunakan salah satu dari empat model: banyak-ke-satu, satu-ke-satu, banyak-ke-banyak dan dua-tingkat. Semua, model ini memetakan utas level pengguna ke utas level kernel.

  3. Apakah utas kernel satu-satunya entitas yang dapat dijadwalkan?

    Tidak, utas tingkat kernel, dibuat oleh kernel itu sendiri. Mereka berbeda dari utas level pengguna dalam kenyataan bahwa utas level kernel tidak memiliki ruang alamat terbatas. Mereka hanya hidup di ruang kernel, tidak pernah beralih ke ranah pengguna-tanah. Namun, mereka sepenuhnya dapat dijadwalkan dan entitas yang dapat ditentukan sebelumnya, seperti proses normal (catatan: dimungkinkan untuk menonaktifkan hampir semua interupsi untuk tindakan kernel yang penting). Tujuan utas kernel sendiri adalah terutama untuk melakukan tugas pemeliharaan pada sistem. Hanya kernel yang dapat memulai atau menghentikan utas kernel. Di sisi lain, proses tingkat pengguna dapat menjadwalkan dirinya berdasarkan pustaka sendiri dan pada saat yang sama dapat dijadwalkan oleh kernel berdasarkan model dua tingkat dan banyak-ke-banyak (disebutkan di atas),

  4. Apakah proses ringan yang dijadwalkan hanya secara tidak langsung melalui penjadwalan thread kernel yang mendasarinya?

    Utas kernel dikendalikan oleh scheduler kernel itu sendiri. Utas pendukung di tingkat pengguna berarti ada perpustakaan tingkat pengguna yang ditautkan dengan aplikasi dan perpustakaan ini (bukan CPU) menyediakan semua manajemen dalam dukungan runtime untuk utas. Ini akan mendukung struktur data yang diperlukan untuk mengimplementasikan abstraksi utas dan menyediakan semua sinkronisasi penjadwalan dan mekanisme lain yang diperlukan untuk membuat keputusan manajemen sumber daya untuk utas ini. Sekarang, beberapa proses utas level pengguna dapat dipetakan ke dalam utas level kernel yang mendasarinya dan ini termasuk pemetaan satu-ke-satu, satu-ke-banyak dan banyak-ke-banyak.

  5. Apakah proses dijadwalkan hanya secara tidak langsung melalui penjadwalan proses ringan yang mendasarinya?

    Itu tergantung pada apakah itu proses yang berat atau ringan. Heavy adalah proses yang dijadwalkan oleh kernel itu sendiri. proses ringan dapat dikelola di level kernel dan di level pengguna.


Terima kasih. (1) unix.stackexchange.com/questions/472354/… (2) Saya secara khusus bertanya tentang Unix bukan LInux, meskipun saya menghargai balasan Anda, terutama sangat berguna untuk Linux, dan harap Anda dapat membiarkannya apa adanya.
Tim

1
"Tujuan utas kernel sendiri terutama untuk melakukan tugas pemeliharaan pada sistem" - dapatkah Anda menguraikan atau memberikan referensi, Goro
iruvar

@iruva Saya percaya "tugas pemeliharaan" bukan istilah yang akurat, misalnya, manajemen daya dikendalikan oleh utas kernel dan tidak ada hubungannya dengan tugas pemeliharaan. Sebenarnya, referensi yang disediakan bersama dengan posting ini memiliki info yang kaya tentang utas kernel. Jika Anda ingin saya menguraikan, silakan posting pertanyaan baru tentang utas kernel dan fungsi / tipe / bagaimana mereka dibuat ... dll dan saya senang menjelaskannya. Jawaban ini cukup panjang dan tidak dapat menerima informasi tambahan!

@Tim: Versi Unix apa yang Anda tanyakan? Khususnya sistem kuno yang Anda sebutkan seperti yang dibahas dalam buku ini? Apakah BSD modern disertakan? Apakah Solaris 11 termasuk? Apakah MacOS X Leopard (UNIX bersertifikat) termasuk?
user1686

@grawity Saya bertanya tentang buku itu, jadi apa pun yang digunakan buku itu. Jika Anda tahu versi lain, itu bagus untuk diketahui juga.
Tim
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.