홀수 번호의 Windows 프로세스 ID가없는 이유는 무엇입니까?
Windows로 꼼꼼하게 살펴보고 배우면서 배우는 경우 Windows 프로세스 및 스레드 ID가 짝수이고 4의 배수임을 알 수 있습니다. 그게 왜? 오늘의 수퍼 유저 Q & A 게시물에는 호기심 많은 독자의 질문에 대한 답변이 있습니다..
오늘의 질문 및 답변 세션은 Q & A 웹 사이트의 커뮤니티 중심 그룹 인 Stack Exchange의 하위 부문 인 수퍼 유저의 도움으로 이루어졌습니다..
질문
수퍼 유저 Peter Hahndorf는 홀수 번호의 Windows 프로세스 ID가없는 이유를 알고 싶어합니다.
Windows에서 프로세스 ID를 보는 방법은 여러 가지가 있습니다. PowerShell 사용 :
나는이 결과를 얻는다.
보시다시피, 모든 프로세스 ID는 짝수이며, 그뿐 아니라 4의 배수입니다. 원하는만큼 열심히 볼 수 있으며 적어도 Windows NT 기반 버전에서는 홀수 번호의 프로세스 ID를 찾지 않습니다. 그 이유는 무엇입니까??
홀수 번호의 Windows 프로세스 ID가없는 이유는 무엇입니까??
대답
수퍼 유저 기고 가인 DavidPostill이 답변 해주었습니다.
홀수 번호의 Windows 프로세스 ID가없는 이유는 무엇입니까??
커널 핸들을 할당하는 동일한 코드는 프로세스 및 스레드 ID를 할당하는데도 사용됩니다. 커널 핸들은 4의 배수이기 때문에 프로세스와 스레드 ID도 같습니다..
프로세스 ID와 스레드 ID가 4의 배수 인 이유는 무엇입니까??
Windows NT 기반 운영 체제에서 프로세스 ID와 스레드 ID는 항상 4의 배수가됩니다. 이것은 단지 우연의 일치인가??
예, 단지 우연의 일치입니다. 프로그래밍 계약의 일부가 아니기 때문에 의존해서는 안됩니다. 예를 들어 Windows 95 프로세스 및 스레드 ID는 항상 4의 배수가 아니 었습니다. 비교해 보면, 커널 핸들이 항상 4의 배수 인 이유는 스펙의 일부이며 가까운 장래에 보장 될 것입니다.
프로세스 및 스레드 ID는 코드 재사용의 부작용으로 4의 배수입니다. 커널 핸들을 할당하는 동일한 코드는 프로세스 및 스레드 ID를 할당하는데도 사용됩니다. 커널 핸들은 4의 배수이기 때문에 프로세스와 스레드 ID도 마찬가지입니다. 이는 구현 세부 사항이므로이 코드에 의존하는 코드를 작성하지 마십시오. 너의 호기심을 만족 시켜줄거야..
출처: 프로세스 ID와 스레드 ID가 4의 배수 인 이유는 무엇입니까??
커널이 항상 4의 배수를 처리하는 이유는 무엇입니까??
잘 알려지지 않은 것은 커널 핸들의 맨 아래 2 비트가 항상 0이라는 것입니다. 즉, 숫자 값은 항상 4의 배수입니다. 이것은 커널 핸들에만 적용됩니다. 의사 핸들 또는 다른 유형의 핸들 (USER 핸들, GDI 핸들, 멀티미디어 핸들 등)에는 적용되지 않습니다. 커널 핸들은 CloseHandle 함수에 전달할 수있는 것들입니다..
적어도 커널 핸들의 맨 아래 비트는 항상 0 인 GetQueuedCompletionStatus 함수에 의해 암시됩니다. 이는 완료 포트 알림을 표시하지 않도록 이벤트 핸들의 맨 아래 비트를 설정할 수 있음을 나타냅니다. 이 작업을 수행하려면 하단 비트는 일반적으로 0이어야합니다..
이 정보는 대부분의 응용 프로그램 작성자에게는 유용하지 않습니다. 핸들러는 핸들을 계속해서 불투명 한 값으로 처리해야합니다. 태그 비트에 관심이있는 사람들은 하위 수준의 클래스 라이브러리를 구현하거나 큰 프레임 워크에 커널 객체를 래핑하는 사람들입니다..
출처: 커널이 항상 4의 배수를 처리하는 이유는 무엇입니까??
더 읽을 거리
Old New Thing : Raymond Chen의 Windows 진화를 통한 실용 개발Microsoft의 수석 소프트웨어 설계 엔지니어)
설명에 추가 할 것이 있습니까? 의견에서 소리가 나지. 다른 기술에 정통한 Stack Exchange 사용자의 답변을 더 읽고 싶습니까? 전체 토론 스레드를 여기에서 확인하십시오..