[kernel | user] 모드에서 코드가 실행될 때 무엇을 의미합니까?


14

커널 또는 사용자 모드에서 코드가 실행될 때 무엇을 의미합니까?

답변:


15

커널 모드

이 모드에서 실행되는 프로그램은 기본 하드웨어에 대한 전체 액세스 권한을 갖습니다. 모든 CPU 명령을 실행하고 모든 메모리 주소에 액세스하며 본질적으로 원하는 것을 수행 할 수 있습니다.

이 모드에서 실행되는 사용자 모드 코드는 OS API를 통한 하드웨어 수정으로 제한됩니다. 그것은 할 수없는 하드웨어에 직접 액세스 전혀 .

여기서 흥미로운 점은 일반적인 아키텍처에서 OS뿐만 아니라 하드웨어를 통해 적용된다는 것입니다. 특히 x86 아키텍처 보호 링이 있습니다.

이러한 종류의 분리의 가장 큰 장점은 프로그램이 사용자 모드에서 작동을 중단 할 때 항상 치명적이지는 않다는 것입니다. 사실, 현대 시스템에서는 일반적으로 하지 않습니다.

Jeff의 글을 확인하십시오 . 그의 평소 좋은 물건입니다.


3

짧은 대답은 프로그램이 어디에서 시간을 보내고 있는지 알려줍니다.

더 긴 답변을 위해 두 단계로 설명하겠습니다. 먼저:

1. 커널 모드 들어가기

작성하는 모든 일반 코드는 "사용자 모드"에서 실행됩니다.

프로그램은 라이브러리를 사용하여 일반적인 작업을 수행 할 수 있습니다. 이것은 또한 사용자 모드 코드입니다.

어떤 시점에서 프로그램에는 시스템의 핵심 기능이 필요할 수 있습니다. 예를 들면 다음과 같습니다.

  • 디스크에서 파일 내용에 액세스
  • 여유 메모리 부분 예약
  • 웹캠 드라이버에서 비디오 프레임 가져 오기
  • 이미지 데이터를 그래픽 카드로 전송
  • 네트워크 패킷 전송

하드웨어에 가까운이 필수 기능은 커널의 일부입니다. 그것은 컴퓨터의 모든 것을 뒷받침하는 중심 프로그램입니다. 작동하기 위해 프로그램이 필요로하는 모든 것을 관리합니다.

커널에서 함수를 사용하기 위해 프로그램 실행 경로는 문자 그대로 사용자 모드에서 커널 코드로 점프합니다. 커널은 작업을 수행하고 실행 경로를 다시 사용자 모드로 접습니다.

프로그램이 커널 모드에서 많은 시간을 보내면 종종 많은 하드웨어 관련 활동을하고 있음을 의미합니다. 예를 들어 디스크 탐색 또는 비디오 스트리밍. 하드웨어도 제대로 작동하지 않을 수 있습니다. 처리 속도가 느려지고 프로그램이 커널 공간에서 비정상적인 시간을 소비하게합니다.


2 차이

커널 공간의 코드는 성능이 뛰어납니다. 커널의 다른 부분은 직접 커널을 호출 할 수 있으며 코드는 경계 검사없이 시스템의 모든 리소스에 직접 액세스 할 수 있습니다. 커널 / 사용자 모드 사이의 전환은 비용이 많이 드는 작업이므로 커널 코드에서 모든 것을 실행하면 완전히 피할 수 있습니다.

그러나 커널 내부에는 보안 검사, 충돌 방지 또는 잘못된 메모리 부분에 쓸 공간이 없습니다. 커널이 다른 프로그램에 제공 할 수있는 서비스입니다. 그것은 세상이 다르게 보인다고 생각하도록 프로그램을 속입니다 (프로그램은 가상의 샌드 박스 / 제한된 환경에 살고 있습니다).

커널 자체는 보호 할 수있는 것이 없기 때문에 보호 할 수 없습니다. 그것은 시스템의 핵심이며, 그것이 멈 추면 모든 것이 끝납니다. 커널 패닉이나 Windows에서 유명한 BSOD를 얻습니다.

이는 커널 기반 코드의 위험이며 성능 요구 사항이 낮은 하위 시스템이 사용자 공간으로 이동하는 이유입니다. 그러나 필수 하드웨어 관련 부분은 일반적으로 곧 변경되지 않는 커널 코드입니다.


2

현재 실행중인 코드가 다양한 하드웨어와 직접 상호 작용할 수 있는지 여부의 구별입니다. 커널 모드 코드는 장치 버스에 쓰거나 메모리 매핑을 변경하고 실행중인 프로세스를 전환하는 등의 작업을 수행 할 수 있습니다. 사용자 모드는 계산을 수행 할 수 있으며 시스템 호출을 커널로 만들어 다른 세계와 상호 작용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.