Jika Anda suka mengutak-atik Windows dan belajar ketika Anda pergi, Anda mungkin telah memperhatikan bahwa proses Windows dan ID thread bahkan bernomor dan kelipatan empat. Mengapa demikian? Posting SuperUser Q & A saat ini memiliki jawaban atas pertanyaan pembaca yang ingin tahu.
Sesi Tanya & Jawab hari ini hadir untuk memberi kami hak milik SuperUser-sub divisi Stack Exchange, pengelompokan situs web Q & A berbasis komunitas.
Pembaca SuperUser 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 bernomor genap, tidak hanya itu, mereka semua kelipatan empat. Anda dapat melihat sekeras yang Anda inginkan dan Anda tidak akan pernah menemukan ID proses bernomor ganjil, setidaknya tidak pada versi apa pun yang berbasis Windows NT. Apa alasannya untuk ini?
Mengapa tidak ada ID proses Windows bernomor ganjil?
Kontributor SuperUser DavidPostill memiliki jawabannya untuk kami:
Mengapa tidak ada ID proses Windows bernomor ganjil?
Kode yang sama yang mengalokasikan pegangan kernel juga digunakan untuk mengalokasikan proses dan ID untaian. Karena gagang kernel adalah kelipatan empat, begitu juga proses dan ID untaian.
Mengapa proses dan ID thread kelipatan empat?
Pada sistem operasi berbasis Windows NT, ID proses dan untaian selalu terjadi menjadi kelipatan empat. Apakah ini hanya kebetulan?
Ya, itu hanya kebetulan, dan Anda tidak boleh bergantung padanya karena itu bukan bagian dari kontrak pemrograman. Misalnya, proses Windows 95 dan ID untaian tidak selalu kelipatan empat. Sebagai perbandingan, alasan bahwa pegangan kernel selalu merupakan kelipatan empat adalah bagian dari spesifikasi dan akan dijamin untuk masa mendatang.
ID proses dan untaian merupakan kelipatan dari empat sebagai efek samping dari penggunaan kembali kode. Kode yang sama yang mengalokasikan pegangan kernel juga digunakan untuk mengalokasikan proses dan ID untaian. Karena gagang kernel adalah kelipatan empat, begitu juga proses dan ID untaian. Ini adalah detail implementasi, jadi jangan menulis kode yang bergantung padanya. Saya hanya memberitahu Anda untuk memuaskan rasa ingin tahu Anda.
Sumber: Mengapa proses dan ID thread kelipatan empat?
Mengapa kernel selalu menangani kelipatan empat?
Sesuatu yang tidak terlalu dikenal adalah bahwa dua bagian bawah dari gagang kernel selalu nol; dengan kata lain, nilai numeriknya selalu kelipatan empat. Perhatikan bahwa ini hanya berlaku untuk pegangan kernel; itu tidak berlaku untuk pseudo-handle atau jenis pegangan lainnya (pegangan PENGGUNA, pegangan GDI, pegangan multimedia, dll.). Kernel handles adalah hal-hal yang dapat Anda lewati ke fungsi CloseHandle.
Setidaknya itu bit paling bawah dari handle kernel selalu nol ditunjukkan oleh fungsi GetQueuedCompletionStatus, yang menunjukkan bahwa Anda dapat mengatur bit bawah dari handle event untuk menekan pemberitahuan port completion. Agar ini berfungsi, bagian bawah biasanya harus nol.
Informasi ini tidak berguna bagi sebagian besar penulis aplikasi, yang harus terus memperlakukan pegangan sebagai nilai buram. Orang-orang yang akan tertarik dengan bit tag adalah mereka yang mengimplementasikan pustaka kelas tingkat rendah atau membungkus objek kernel di dalam kerangka kerja yang lebih besar.
Sumber: Mengapa kernel selalu menangani kelipatan empat?
Bacaan lebih lanjut
The New New Thing: Pengembangan Praktis Sepanjang Evolusi Windows oleh Raymond Chen (Principal Software Design Engineer di Microsoft)
Memiliki sesuatu untuk ditambahkan ke penjelasan? Bicaralah di komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang paham teknologi lainnya? Lihat diskusi lengkap di sini.