[kernel|user] 모드에서 코드가 실행된다는 것은 무엇을 의미합니까?

[kernel|user] 모드에서 코드가 실행된다는 것은 무엇을 의미합니까?

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

답변1

커널 모드

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

사용자 모드 이 모드에서 실행되는 코드는 운영 체제의 API를 통한 하드웨어 수정으로 제한됩니다. 그것할 수 없다하드웨어에 직접 액세스별말씀을요.

흥미롭게도 일반적인 아키텍처에서는 이는 운영 체제뿐만 아니라 하드웨어에 의해 시행됩니다. 특히,x86 아키텍처가지다보호 링.

이러한 분리의 가장 큰 장점은 사용자 모드에서 실행되는 동안 프로그램이 충돌하더라도 항상 치명적인 것은 아니라는 것입니다. 실제로 현대 시스템에서는대개아니요.

확인하다제프의받아 적어. 이것은 그의 평소 좋은 것입니다.

답변2

짧은 대답은 다음과 같습니다. 프로그램이 시간을 보내는 위치만 알려줍니다.

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

1. 커널 모드로 진입

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

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

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

  • 디스크에서 파일 콘텐츠에 액세스
  • 여유 메모리 예약
  • 웹캠 드라이버에서 비디오 프레임 가져오기
  • 이미지 데이터를 그래픽 카드로 보냅니다.
  • 네트워크 패킷을 보냅니다.

이 기본(하드웨어에 가까운) 기능은 커널의 일부입니다. 이것은 컴퓨터의 모든 것 뒤에 있는 중앙 프로그램입니다. 프로그램 실행에 필요한 모든 것을 관리합니다.

커널의 기능을 사용하기 위해 프로그램 실행 경로는 실제로 사용자 모드에서 커널 코드로 점프합니다. 커널은 작업을 완료하고 실행 경로를 다시 사용자 모드로 전환합니다.

프로그램이 커널 모드에서 많은 시간을 소비한다는 것은 일반적으로 하드웨어 관련 활동을 많이 수행하고 있음을 의미합니다. 예를 들어 디스크 검색 또는 비디오 스트리밍이 있습니다. 하드웨어가 오작동할 수도 있으며, 이로 인해 처리 속도가 느려지고 프로그램이 커널 공간에서 비정상적으로 많은 시간을 소비하게 됩니다.


2가지 차이점

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

그러나 커널 내부에는 안전 확인을 수행하거나 충돌을 방지하거나 메모리의 잘못된 부분에 쓸 공간이 많지 않습니다. 이는 커널이 다른 프로그램에 제공할 수 있는 서비스입니다. 이는 프로그램이 세상이 다르게 보인다고 믿도록 속여서(프로그램은 가상의 샌드박스/제한된 환경에 있음) 프로그램에 들어오고 나가는 모든 것을 번역하고 보호할 수 있습니다.

커널 자체에는 커널을 보호할 만한 것이 없기 때문에 많은 보호 기능을 제공하지 않습니다. 그것은 시스템의 핵심이며, 그것이 멈추면 모든 것이 끝난다. 커널 패닉이 발생하거나 Windows에서는 유명한 BSOD가 발생합니다.

이는 커널 기반 코드의 위험이며 성능 요구 사항이 낮은 더 많은 하위 시스템이 사용자 공간으로 이동되는 이유이기도 합니다. 그러나 하드웨어와 관련된 기본적인 부분은 대개 커널 코드이므로 빠르게 변경되지 않습니다.

답변3

차이점은 현재 실행 중인 코드가 다양한 하드웨어와 직접 상호 작용할 수 있는지 여부입니다. 커널 모드 코드는 장치 버스에 쓰기, 메모리 맵 변경, 실행 중인 프로세스 전환 등을 수행할 수 있습니다. 사용자 모드는 계산을 수행하고 커널에 대한 시스템 호출을 수행하여 나머지 세계와 상호 작용할 수 있습니다.

관련 정보