Mengapa tidak ada ID proses Windows bernomor ganjil?
Jika Anda suka bermain-main dengan Windows dan belajar sambil jalan, Anda mungkin telah memperhatikan bahwa proses Windows dan ID utas bernomor genap dan berlipat empat. Mengapa demikian? Posting Tanya Jawab Pengguna Super hari ini memiliki jawaban atas pertanyaan pembaca yang penasaran.
Sesi Tanya Jawab hari ini datang kepada kami berkat SuperUser-subdivisi Stack Exchange, pengelompokan situs web Q&A berbasis komunitas.
Pertanyaan
Pembaca Pengguna Super Peter Hahndorf ingin tahu mengapa tidak ada ID proses Windows bernomor ganjil:
Ada banyak cara untuk melihat ID proses di Windows. Menggunakan PowerShell:
Saya mendapatkan hasil ini:
Seperti yang Anda lihat, semua ID proses diberi nomor genap, tidak hanya itu, semuanya adalah kelipatan empat. Anda dapat terlihat sekeras yang Anda inginkan dan Anda tidak akan pernah menemukan proses ID bernomor ganjil, setidaknya tidak pada versi apa pun yang berbasis Windows NT. Apa alasannya??
Mengapa tidak ada ID proses Windows bernomor ganjil?
Jawabannya
Kontributor SuperUser, DavidPostill, memiliki jawaban untuk kita:
Mengapa tidak ada ID proses Windows bernomor ganjil?
Kode yang sama yang mengalokasikan pegangan kernel juga digunakan untuk mengalokasikan ID proses dan utas. Karena pegangan kernel adalah kelipatan empat, demikian pula ID proses dan utas.
Mengapa ID proses dan utas berlipat dari empat?
Pada sistem operasi berbasis Windows NT, ID proses dan utas selalu merupakan kelipatan empat. Apakah ini hanya kebetulan??
Ya, itu hanya kebetulan, dan Anda tidak boleh mengandalkan itu karena itu bukan bagian dari kontrak pemrograman. Misalnya, proses Windows 95 dan ID utas tidak selalu merupakan kelipatan empat. Sebagai perbandingan, alasan bahwa kernel selalu menangani kelipatan empat adalah bagian dari spesifikasi dan akan dijamin untuk masa yang akan datang..
ID proses dan utas adalah kelipatan empat sebagai efek samping dari penggunaan kembali kode. Kode yang sama yang mengalokasikan pegangan kernel juga digunakan untuk mengalokasikan ID proses dan utas. Karena pegangan kernel adalah kelipatan empat, demikian pula ID proses dan utas. Ini adalah detail implementasi, jadi jangan menulis kode yang bergantung padanya. Saya hanya memberitahu Anda untuk memuaskan keingintahuan Anda.
Sumber: Mengapa ID proses dan utas berlipat dari empat?
Mengapa kernel menangani selalu kelipatan empat?
Sesuatu yang tidak terlalu dikenal adalah bahwa dua bit paling bawah dari kernel selalu nol; dengan kata lain, nilai numeriknya selalu kelipatan empat. Perhatikan bahwa ini hanya berlaku untuk tangkai kernel; itu tidak berlaku untuk pseudo-handle atau jenis pegangan lainnya (pegangan USER, pegangan GDI, gagang multimedia, dll.). Kernel menangani adalah hal-hal yang dapat Anda berikan ke fungsi CloseHandle.
Paling tidak bit paling bawah dari pegangan kernel selalu nol disiratkan oleh fungsi GetQueuedCompletionStatus, yang menunjukkan bahwa Anda dapat mengatur bit bawah dari event handle untuk menekan penyelesaian penyelesaian port. Agar ini berfungsi, bit bawah biasanya harus nol.
Informasi ini tidak berguna untuk sebagian besar penulis aplikasi, yang harus terus memperlakukan pegangan sebagai nilai buram. Orang-orang yang tertarik pada bit tag adalah mereka yang mengimplementasikan pustaka kelas tingkat rendah atau sedang membungkus objek kernel di dalam kerangka kerja yang lebih besar.
Sumber: Mengapa kernel menangani selalu kelipatan empat?
Bacaan lebih lanjut
The Old New Thing: Pengembangan Praktis Sepanjang Evolusi Windows oleh Raymond Chen (Insinyur Desain Perangkat Lunak Utama di Microsoft)
Punya sesuatu untuk ditambahkan ke penjelasan? Berbunyi dalam komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang mengerti teknologi lainnya? Lihat utas diskusi lengkap di sini.