2013-07-07 3 views
3

사용자 모드에서 실행 중이고 커널 모드에서 실행중인 스레드는 무엇을 의미합니까? 이것은 사용자 모드의 스레드 실행 명령과 커널 모드의 스레드 실행 명령과 관련이 있습니까? 친절하게 정교하게. 또한, 스레드가 사용자 모드에서 실행 중일 때 일시 중단 상태가되면 커널 모드에서 실행될 수 있습니까? 그렇다면 어떻게 가능합니까? 지금까지는 일시 중지 된 스레드가 완전히 일시 중지된다는 점만 알고 있습니다. 즉, CPU가 다른 스레드를 예약하기 위해 컨텍스트 전환을 수행합니다.사용자 및 커널 모드의 스레드

+2

"사용자 모드 스레드"또는 "커널 모드 스레드"라는 용어는 여러 컨텍스트에서 여러 정의가 있습니다. 예를 들어, "사용자 모드 스레드"는 사용자 공간 스케줄러에 의해 스케줄 된 스레드를 의미하거나 사용자 공간에서 실행되는 스레드를 의미 할 수 있습니다. 그 경우에 –

+0

내 질문은이 두 가지 모드가 무엇입니까? 어떻게 다르고 그들이 무엇을 포함합니까? –

답변

2

사용자 모드에서 실행 중이고 커널 모드에서 실행중인 스레드는 무엇을 의미합니까?

문맥이없는 문구로 사람이 무엇을 의미하는지 알 수있는 방법이 없습니다. 추측해야만한다면, 사용자 공간 스케쥴러 또는 커널 스케쥴러에 의해 스레드가 스케쥴되었는지 여부를 말하는 것입니다. 그러나 실제로 스레드가 사용자 코드 또는 커널 코드를 실행하는지 여부를 묻는 것이 가능할 수도 있습니다.

사용자 모드의 스레드 실행 명령과 커널 모드의 스레드 실행 명령과 관련이 있습니까? 친절하게 정교하게.

수 있습니다. 또한 그렇지 않을 수도 있습니다. 문맥이없는 문구로 사람이 무엇을 의미 하는지를 알 수있는 방법이 없습니다.

또한 스레드가 사용자 모드에서 실행 중일 때 일시 중단 상태가되면 커널 모드에서 실행될 수 있습니까? 그렇다면 어떻게 가능합니까?

커널이 스레드를 스케줄하는 구현의 경우, 스케줄러는 커널 공간에서 실행 중입니다. 실제로 스레드를 일시 중단하는 코드는 다양한 커널 스케줄러 데이터 구조에 스레드를 추가해야하기 때문에 일반적으로 커널 공간에서도 실행됩니다. 따라서 스레드를 다시 시작하는 스레드는 커널 공간에서도 실행됩니다. 보다 높은 수준의 뷰에서 동일한 실행 스레드가 커널 스케줄러가되어 "실행"할 사용자 공간 스레드를 선택한 다음 해당 스레드가 "될"수 있습니다.

은 지금까지 나는 경우 일시 중단 된 스레드가 완전히 중단 될 것이라고 만 알고 즉 다른 스레드를 예약하는 CPU에 의해 개최됩니다 컨텍스트 스위치.

오른쪽 및 그 커널 코드입니다. 따라서 동일한 코어가 사용자 공간 코드를 실행하고 커널 코드를 실행 한 다음 다른 스레드의 사용자 공간 코드를 실행합니다.

+0

답장을 보내 주신 David 께 감사드립니다. 이 매달린 상황에 유감입니다. 답장을 읽은 후에 제 질문에이 두 가지 모드가 무엇입니까? 어떻게 다르고 그들이 무엇을 포함합니까? 내 컨텍스트가 사용자 모드 동기화 및 커널 모드 동기화와 관련되어 있다고 생각하십시오. 왜, 어떤 블로그는 커널 모드보다 더 빠르게 사용자 모드에서 실행하는 을 실행할 때이 모드를 전환하는 데 약간의 시간이 걸린다 고 말합니다. 그래서 두 가지 모드가 무엇인지, 무엇이 포함되어 있으며 주소 공간에서 코드의 두 부분이로드되는지는 궁금합니다. –

0

최신 운영 체제에는 사용자 코드와 커널 코드를 구분하는 하드웨어 지원 기능이 있습니다. x86 아키텍처에서는 일반 사용자 코드에 액세스 할 수없는 메모리 페이지를 설정할 수 있으며, 페이지 폴트를 트리거하여 OS가 오류가있는 프로그램에서도 계속 작동 할 수 있도록합니다.

커널 모드에서 실행되는 코드는 더 높은 권한을 가지지 만 모든 공간이 사용자 공간에서 쉽게 액세스 할 수있는 것은 아닙니다. 사용자 코드가 멈 추면 OS가이를 지울 수 있습니다. 커널 모드 코드가 멈 추면 권한 수준이 얼마나 높은지에 따라 쉽지 않을 수 있습니다.

+0

하지만 여전히 전환에 대한 혼란 스러워요/두 코드 ... 제발 내 질문의 두 번째 부분을 참조하십시오 ... –

+0

내가 말했듯이, 세부 하드웨어 특정 있습니다. X86 아키텍처의 경우 보통 커널은 가장 높은 권한을 가진 링 0에서 실행되어야합니다. 사용자 코드는 링 3에서 실행됩니다. Windows AFAIK 링 1,2에서는 IMO가 사용되지 않습니다. 보호는 CPU에 어떤 권한 레벨이 허용되는지를 알려주는 제어 구조를 가짐으로써 강제됩니다. 여기에는 메모리 보호뿐 아니라 다양한 명령어의 금지가 포함될 수 있습니다. X86 아키텍처를 전환하는 방법에 대한 자세한 내용은 "보호 모드 전환"에 대해 google을 보거나 Intel 프로그래머 매뉴얼을 참조하십시오. – Devolus

+0

안녕 Devolus, 설명해 주셔서 감사합니다. 그러나 혼란은 여전히 ​​지속됩니다. –

관련 문제