Pekerjaan Berlapis
Aplikasi dapat menggunakan pekerjaan berlapis untuk mengelola subset proses. Pekerjaan berlapis juga memungkinkan aplikasi yang menggunakan pekerjaan untuk menghosting aplikasi lain yang juga menggunakan pekerjaan.
Windows 7, Windows Server 2008 R2, Windows XP dengan SP3, Windows Server 2008, Windows Vista dan Windows Server 2003: Proses dapat dikaitkan hanya dengan satu pekerjaan. Pekerjaan berlapis diperkenalkan di Windows 8 dan Windows Server 2012.
Topik ini memberikan gambaran umum tentang pekerjaan berlapis dan perilaku pekerjaan berlapis:
- Hierarki Pekerjaan Berlapis
- Membuat Hierarki Pekerjaan Berlapis
- Batas Pekerjaan dan Pemberitahuan untuk Pekerjaan Berlapis
- Akuntansi Sumber Daya untuk Pekerjaan Berlapis
- Penghentian Pekerjaan Berlapis
Untuk informasi umum tentang pekerjaan dan objek pekerjaan, lihat Objek Pekerjaan.
Hierarki Pekerjaan Berlapis
Pekerjaan berlapis memiliki hubungan induk-anak di mana setiap pekerjaan anak berisi subset proses dalam pekerjaan induknya. Jika proses yang sudah dalam pekerjaan ditambahkan ke pekerjaan lain, pekerjaan ditumpuk secara default jika sistem dapat membentuk hierarki pekerjaan yang valid dan tidak ada pekerjaan yang menetapkan batas UI (SetInformationJobObject dengan JobObjectBasicUIRestrictions).
Gambar 1 menunjukkan hierarki pekerjaan yang berisi pohon proses berlabel P0 hingga P7. Pekerjaan 1 adalah pekerjaan induk Pekerjaan 2 dan Pekerjaan 4, dan merupakan leluhur dari Pekerjaan 3. Job 2 adalah induk langsung dari Job 3; Job 3 adalah anak segera dari Job 2. Pekerjaan 1, 2, dan 3 membentuk rantai pekerjaan di mana Pekerjaan 1 dan 2 adalah rantai pekerjaan induk Pekerjaan 3. Pekerjaan akhir dalam rantai pekerjaan adalah pekerjaan langsung proses dalam pekerjaan tersebut. Di Gambar 1, Pekerjaan 3 adalah pekerjaan langsung dari proses P2, P3, dan P4.
Pekerjaan berlapis juga dapat digunakan untuk mengelola grup proses serekan. Dalam hierarki pekerjaan yang ditunjukkan pada Gambar 2, Pekerjaan 1 adalah pekerjaan induk Pekerjaan 2. Perhatikan bahwa hierarki pekerjaan mungkin hanya berisi bagian dari pohon proses. Pada Gambar 2, P0 tidak dalam hierarki, tetapi anaknya memproses P1 hingga P5.
Membuat Hierarki Pekerjaan Berlapis
Proses dalam hierarki pekerjaan secara eksplisit dikaitkan dengan objek pekerjaan menggunakan fungsiAssignProcessToJobObject atau terkait secara implisit selama pembuatan proses, sama seperti untuk pekerjaan mandiri. Urutan di mana pekerjaan dibuat dan proses ditetapkan menentukan apakah hierarki dapat dibuat.
Untuk membangun hierarki pekerjaan menggunakan asosiasi eksplisit, semua objek pekerjaan harus dibuat menggunakan CreateJobObject, maka AssignProcessToJobObject harus dipanggil beberapa kali untuk setiap proses untuk mengaitkan proses dengan setiap pekerjaan yang harus dimilikinya. Untuk memastikan bahwa hierarki pekerjaan valid, pertama-tama tetapkan semua proses ke pekerjaan di akar hierarki, lalu tetapkan subset proses ke objek pekerjaan anak segera, dan sebagainya. Jika proses ditetapkan ke pekerjaan dalam urutan ini, pekerjaan anak akan selalu memiliki subset proses dalam pekerjaan induknya saat hierarki sedang dibuat, yang diperlukan untuk bersarang. Jika proses ditetapkan ke pekerjaan secara acak, pada titik tertentu pekerjaan anak akan memiliki proses yang tidak berada dalam pekerjaan induknya. Ini tidak diperbolehkan dengan berlapis dan akan menyebabkan AssignProcessToJobObject gagal.
Ketika proses secara implisit dikaitkan dengan pekerjaan selama pembuatan proses, proses anak dikaitkan dengan setiap pekerjaan dalam rantai pekerjaan proses induknya. Jika objek pekerjaan langsung memungkinkan pelarian, proses anak memisahkan diri dari objek pekerjaan langsung dan dari setiap pekerjaan dalam rantai pekerjaan induk, meningkatkan hierarki sampai mencapai pekerjaan yang tidak mengizinkan pelarian. Jika objek pekerjaan langsung tidak memungkinkan breakaway, proses turunan tidak memisahkan diri bahkan jika pekerjaan dalam rantai pekerjaan induknya mengizinkannya.
Batas pekerjaan dan Pemberitahuan untuk Pekerjaan Berlapis
Untuk batas sumber daya tertentu, batas yang ditetapkan untuk pekerjaan dalam rantai pekerjaan induk menentukan batas efektif yang diberlakukan untuk pekerjaan anak. Batas efektif untuk pekerjaan anak bisa lebih ketat daripada batas induknya, tetapi tidak boleh kurang ketat. Misalnya, jika kelas prioritas pekerjaan anak ABOVE_NORMAL_PRIORITY_CLASS dan kelas prioritas pekerjaan induknya NORMAL_PRIORITY_CLASS, batas efektif untuk proses dalam pekerjaan anak adalah NORMAL_PRIORITY_CLASS. Namun, jika kelas prioritas pekerjaan anak BELOW_NORMAL_PRIORITY_CLASS, batas efektif untuk proses dalam pekerjaan anak adalah BELOW_NORMAL_PRIORITY_CLASS. Batas efektif diberlakukan untuk kelas prioritas, afinitas, biaya penerapan, batas waktu eksekusi per proses, batas kelas penjadwalan, dan set kerja minimum dan maksimum. Untuk informasi selengkapnya tentang batas sumber daya tertentu, lihat SetInformationJobObject.
Ketika peristiwa tertentu terjadi, seperti pembuatan proses baru atau pelanggaran batas sumber daya, pesan dikirim ke port penyelesaian I/O yang terkait dengan pekerjaan. Pekerjaan juga dapat mendaftar untuk menerima pemberitahuan ketika batas tertentu terlampaui. Untuk pekerjaan yang tidak berlapis, pesan dikirim ke port penyelesaian I/O yang terkait dengan pekerjaan. Untuk pekerjaan berlapis, pesan dikirim ke setiap port penyelesaian I/O yang terkait dengan pekerjaan apa pun dalam rantai pekerjaan induk pekerjaan yang memicu pesan. Pekerjaan anak tidak perlu memiliki port penyelesaian I/O terkait untuk pesan yang dipicu untuk dikirim ke port penyelesaian I/O pekerjaan induk yang lebih tinggi dalam rantai pekerjaan. Untuk informasi selengkapnya tentang pesan tertentu, lihat JOBOBJECT_ASSOCIATE_COMPLETION_PORT.
Akuntansi Sumber Daya untuk Pekerjaan Berlapis
Informasi akuntansi sumber daya untuk pekerjaan berlapis menjelaskan penggunaan setiap proses yang terkait dengan pekerjaan tersebut, termasuk proses dalam pekerjaan anak. Oleh karena itu, setiap pekerjaan dalam rantai pekerjaan mewakili sumber daya agregat yang digunakan oleh prosesnya sendiri dan proses setiap pekerjaan anak di bawahnya dalam rantai pekerjaan.
Penghentian Pekerjaan Berlapis
Ketika pekerjaan dalam hierarki pekerjaan dihentikan, sistem mengakhiri proses dalam pekerjaan itu dan semua pekerjaan anaknya, dimulai dengan pekerjaan anak di bagian bawah hierarki. Sumber daya terutang yang digunakan oleh setiap proses yang dihentikan dibebankan ke pekerjaan induk.
Handel pekerjaan harus memiliki hak akses JOB_OBJECT_TERMINATE, sama seperti untuk pekerjaan mandiri.