18Aug
Jika Anda suka bermain-main dengan Windows dan belajar saat Anda pergi, Anda mungkin telah memperhatikan bahwa proses Windows dan ID benang bahkan diberi nomor dan kelipatan empat. Mengapa demikian? Today's SuperUser Q & Sebuah posting memiliki jawaban atas pertanyaan pembaca yang penasaran.
Pertanyaan Hari Ini &Sesi jawaban datang kepada kami atas izin SuperUser - subdivisi dari Stack Exchange, pengelompokan berbasis komunitas dari Q & A situs web.
Pertanyaan
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 bahkan diberi nomor, tidak hanya itu, semuanya adalah kelipatan dari empat. Anda bisa terlihat sekeras yang Anda mau dan Anda tidak akan pernah menemukan ID proses bernomor ganjil, setidaknya tidak pada versi yang berbasis Windows NT.Apa alasannya?
Mengapa tidak ada ID proses Windows yang bernomor ganjil?
Jawaban
Kontributor SuperUser DavidPostill memiliki jawabannya untuk kita:
Mengapa tidak ada ID proses Windows yang bernomor ganjil?
Kode yang sama yang mengalokasikan pegangan kernel juga digunakan untuk mengalokasikan ID proses dan benang. Karena menangani kernel adalah kelipatan dari empat, begitu pula ID proses dan benang.
Mengapa proses dan ID benang kelipatan empat?
Pada sistem operasi berbasis Windows NT, ID proses dan benang selalu terjadi beberapa kelipatan. Apakah ini kebetulan?
Ya, itu hanya sebuah kebetulan, dan Anda tidak boleh bergantung padanya karena ini bukan bagian dari kontrak pemrograman. Sebagai contoh, Windows 95 proses dan benang ID tidak selalu kelipatan dari empat. Sebagai perbandingan, alasan bahwa menangani kernel selalu merupakan kelipatan dari empat adalah bagian dari spesifikasi dan akan dijamin di masa yang akan datang.
Proses dan ID benang adalah kelipatan empat sebagai efek samping penggunaan kembali kode. Kode yang sama yang mengalokasikan pegangan kernel juga digunakan untuk mengalokasikan ID proses dan benang. Karena menangani kernel adalah kelipatan dari empat, begitu pula ID proses dan benang. Ini adalah detail implementasi, jadi jangan menulis kode yang bergantung padanya. Saya hanya mengatakan untuk memuaskan rasa ingin tahu Anda.
Mengapa ID proses dan benang kelipatan empat?
Mengapa menangani kernel selalu kelipatan empat?
Sesuatu yang tidak terlalu terkenal adalah bahwa dua bit dasar dari handle kernel selalu nol;Dengan kata lain, nilai numerik mereka selalu merupakan kelipatan dari empat. Perhatikan bahwa ini hanya berlaku untuk pegangan kernel;itu tidak berlaku untuk pseudo-handle atau tipe pegangan lainnya( pegangan USER, pegangan GDI, pegangan multimedia, dll.).Kernel menangani adalah hal yang bisa Anda lewati ke fungsi CloseHandle.
Paling tidak, bit paling bawah dari pegangan kernel selalu nol tersirat oleh fungsi GetQueuedCompletionStatus, yang mengindikasikan bahwa Anda dapat mengatur bit paling sedikit dari pegangan acara untuk menekan pemberitahuan port penyelesaian. Agar hal ini berhasil, bit paling bawah biasanya nol.
Informasi ini tidak berguna bagi sebagian besar penulis aplikasi, yang harus terus menangani pegangan sebagai nilai buram. Orang-orang yang tertarik pada tag bit adalah mereka yang menerapkan perpustakaan kelas tingkat rendah atau membungkus objek-objek kernel di dalam kerangka kerja yang lebih besar.
Sumber: Mengapa menangani kernel selalu kelipatan empat?
Bacaan Lebih Lanjut
The Old New Thing: Perkembangan Praktis Sepanjang Evolusi Windows oleh Raymond Chen( Principal Software Design Engineer di Microsoft )
Ada sesuatu yang perlu ditambahkan ke penjelasan? Terdengar dalam komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange tech-savvy lainnya? Simak thread diskusi selengkapnya disini.