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 hanya dapat dikaitkan dengan satu pekerjaan. Pekerjaan berlapis diperkenalkan di Windows 8 dan Windows Server 2012.

Topik ini memberikan gambaran umum tentang pekerjaan bersarang dan perilaku 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 dari Pekerjaan 2 dan Pekerjaan 4, dan merupakan leluhur pekerjaan 3. Pekerjaan 2 adalah induk langsung dari Pekerjaan 3; Pekerjaan 3 adalah anak langsung dari Pekerjaan 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 dari proses dalam pekerjaan itu. Pada Gambar 1, Pekerjaan 3 adalah pekerjaan langsung dari proses P2, P3, dan P4.

gambar 1. hierarki pekerjaan berlapis yang berisi pohon proses

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 proses anaknya P1 hingga P5.

gambar 2. hierarki pekerjaan berlapis yang berisi proses peer

Membuat Hierarki Pekerjaan Berlapis

Proses dalam hierarki pekerjaan secara eksplisit dikaitkan dengan objek pekerjaan menggunakan fungsi AssignProcessToJobObject atau secara implisit terkait 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, lalu AssignProcessToJobObject harus dipanggil beberapa kali agar setiap proses mengaitkan proses dengan setiap pekerjaan yang seharusnya 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 dalam urutan acak, pada titik tertentu pekerjaan anak akan memiliki proses yang tidak ada dalam pekerjaan induknya. Ini tidak diizinkan oleh bersarang 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 breakaway, proses anak memisahkan diri dari objek pekerjaan langsung dan dari setiap pekerjaan dalam rantai pekerjaan induk, naik hierarki sampai mencapai pekerjaan yang tidak mengizinkan pelarian. Jika objek pekerjaan langsung tidak memungkinkan breakaway, proses turunan tidak memisahkan diri meskipun pekerjaan dalam rantai pekerjaan induknya memungkinkannya.

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 dipicunya 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 luar biasa 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.