Laman » bagaimana untuk » Kenapakah Tidak Ada ID Proses Windows Beragun Nombor?

    Kenapakah Tidak Ada ID Proses Windows Beragun Nombor?

    Jika anda suka bermain-main dengan Windows dan belajar semasa anda pergi, anda mungkin dapati bahawa proses Windows dan ID thread adalah nombor yang hampir sama dan gandaan empat. Kenapa begitu? Siaran Q & A SuperUser hari ini mempunyai jawapan kepada soalan pembaca yang ingin tahu.

    Sesi Soalan & Jawapan hari ini datang kepada kami dengan ihsan SuperUser-bahagian pembahagian Stack Exchange, kumpulan yang diketuai oleh komuniti laman web Q & A.

    Soalan

    Pembaca SuperUser Peter Hahndorf ingin tahu mengapa tidak terdapat ID proses Windows yang bernombor ganjil:

    Terdapat banyak cara untuk melihat ID proses dalam Windows. Menggunakan PowerShell:

    Saya mendapat keputusan ini:

    Seperti yang anda dapat lihat, semua ID proses adalah nombor yang diperkatakan, bukan sahaja itu, semuanya adalah gandaan empat. Anda boleh melihat keras seperti yang anda mahukan dan anda tidak akan mendapati ID proses yang bernombor ganjil, sekurang-kurangnya tidak pada mana-mana versi yang berasaskan Windows NT. Apakah sebabnya ini?

    Kenapa tidak terdapat ID proses Windows yang bernombor ganjil?

    Jawapan

    Penyumbang SuperUser DavidPostill mempunyai jawapan untuk kami:

    Kenapa tidak terdapat ID proses Windows yang bernombor ganjil?

    Kod yang sama yang memperuntukkan pegangan kernel juga digunakan untuk memperuntukkan proses dan ID thread. Oleh kerana pemegang kernel adalah berbilang daripada empat, jadi proses dan ID thread.

    Mengapa proses dan benang ID kelipatan empat?

    Pada sistem pengendalian Windows NT, proses dan ID thread selalu berlaku untuk beberapa daripada empat. Adakah ini hanya satu kebetulan?

    Ya, ia hanya satu kebetulan, dan anda tidak boleh bergantung kepadanya kerana ia bukan sebahagian daripada kontrak pengaturcaraan. Sebagai contoh, proses Windows 95 dan ID benang tidak selalunya gandaan empat. Sebagai perbandingan, sebab bahawa kernel mengendalikan sentiasa berganda empat adalah sebahagian daripada spesifikasi dan akan dijamin untuk masa depan yang boleh dijangka.

    ID proses dan benang adalah gandaan empat sebagai kesan sampingan penggunaan semula kod. Kod yang sama yang memperuntukkan pegangan kernel juga digunakan untuk memperuntukkan proses dan ID thread. Oleh kerana pemegang kernel adalah kelipatan empat, begitu juga proses dan ID thread. Ini adalah perincian pelaksanaan, jadi jangan tulis kod yang bergantung padanya. Saya hanya memberitahu anda untuk memuaskan rasa ingin tahu anda.

    Sumber: Mengapa proses dan benang ID kelipatan empat?

    Mengapakah kernel mengendalikan sentiasa pelbagai daripada empat?

    Sesuatu yang tidak diketahui dengan baik adalah bahawa dua bit bawah pemegang kunci sentiasa sifar; dalam erti kata lain, nilai numerik mereka sentiasa berganda daripada empat. Ambil perhatian bahawa ini hanya terpakai untuk pengendalian kernel; ia tidak terpakai kepada pseudo-handle atau kepada mana-mana jenis pemegang lain (pemegang PENGGUNA, pemegang GDI, pemegang multimedia, dll.). Mengendalikan kernel adalah perkara yang anda boleh lulus ke fungsi CloseHandle.

    Bahawa sekurang-kurangnya bit bawah pemegang kernel selalu sifar yang tersirat oleh fungsi GetQueuedCompletionStatus, yang menunjukkan bahawa anda boleh menetapkan bit bawah pengendali acara untuk menyekat pemberitahuan port penyelesaian. Agar ini berfungsi, bit bawah biasanya mesti sifar.

    Maklumat ini tidak berguna untuk kebanyakan penulis aplikasi, yang perlu terus mengendalikan pengendalian sebagai nilai-nilai terang. Orang-orang yang berminat dalam tag tag adalah mereka yang melaksanakan perpustakaan peringkat rendah atau membungkus objek kernel di dalam kerangka yang lebih besar.

    Sumber: Mengapakah kernel mengendalikan sentiasa pelbagai daripada empat?

    Bacaan lanjut

    The New Thing: Perkembangan Praktik Sepanjang Evolusi Windows oleh Raymond Chen (Jurutera Reka Bentuk Perisian Utama di Microsoft)


    Mempunyai sesuatu untuk menambah penjelasannya? Bunyi dalam komen. Ingin membaca lebih banyak jawapan dari pengguna Stack Exchange yang berteknologi tinggi? Lihat thread perbincangan penuh di sini.