Userland와 커널의 차이점은 무엇입니까?

Userland와 커널의 차이점은 무엇입니까?

유저랜드가 무엇인지 정확히 이해하려고 노력 중입니다. 내가 묻는 모든 사람은 "커널이 아닌 모든 것"이라고 말합니다. 하지만 그것은 나에게 실질적인 것이 아닙니다. 내가 그 커널을 읽을 때 사용자 영역이나 그와 유사한 것에서 해당 드라이버를 실행할 수 있습니다. 무슨 일이 일어날지 전혀 상상할 수 없습니다!. 따라서 누군가가 이 점에 대해 저를 바로잡아주면 감사하겠습니다.

답변1

한 가지 개념적 수준에서 커널은 하드웨어 보호의 "더 높은 권한" 수준에서 실행되는 모든 것입니다. 이는 x86 프로세서의 링 0, ARM의 시스템 모드, MIPS의 커널 모드, 68xxx의 감독자 모드 등과 같습니다. 커널은 일반적으로 소프트웨어 인터럽트(시스템 호출) 또는 하드웨어 인터럽트(디스크 드라이브, 네트워크)인 인터럽트 기반입니다. 카드, 하드웨어 타이머).

동일한 개념 수준에서 "사용자 영역"은 최소 권한 모드(x86 CPU의 링 3, ARM 또는 MIPS의 사용자 모드 등)에서 실행되는 것입니다. 사용자 영역은 커널이 사소한 하드웨어 차이를 완화하여 모든 프로그램에 동일한 API를 제공하는 방식을 활용합니다. 예를 들어 일부 무선 카드에는 다른 카드에 비해 추가 제어 레지스터가 있거나 수신 패킷에 대한 온보드 버퍼가 다소 포함될 수 있습니다. 드라이버 코드는 이러한 차이점을 설명하고(때때로 고급 기능이나 특이한 기능을 무시하여) 모든 프로그램에 동일한 소켓 API를 제공합니다.

일부 프로세서(예: x86, VAX, Alpha AXP)에는 3개 이상의 모드가 있지만 일반 Unix 아키텍처는 중간 모드를 사용하지 않습니다.

Unix, Linux 또는 *BSD에서 실행되는 프로그램과 프로세스는 사용자 영역입니다. 프로세스는 선점형이므로 실제로 커널 실행을 볼 수 없으며 read()시스템 호출 반환이나 신호 처리기 기능 실행과 같은 부작용만 볼 수 있습니다.

특정 질문에 답하기 위해 Unix, Linux에서 *BSD "드라이버"는 일반적으로 네트워크 카드, 디스크 드라이브, 비디오 카드 등 일부 하드웨어의 특정 특성을 처리하는 작은 소프트웨어입니다. 드라이버 소프트웨어는 하드웨어 인터럽트나 하드웨어의 매핑된 메모리 등에 액세스하기 위해 거의 항상 링 0/관리자 모드/커널 공간에서 실행되어야 합니다. 드라이버는 특정 하드웨어 기능을 관리하고 해당 하드웨어를 하드웨어 작동 방식에 대한 커널 코드의 표준화된 또는 관례화된 보기에 맞추도록 만듭니다. 따라서 사용자 영역에서 드라이버를 실행하려면 커널이 매핑된 메모리, 장치 레지스터, 인터럽트 또는 기타 특수 기능과 같은 사용자 영역 프로그램을 표시해야 합니다. 장치에 필요할 수 있는 특수 기능은 사용자 프로그램에 제공되는 일반적인 Unix 스타일 API에 쉽게 맞지 않기 때문에 까다로울 수 있습니다. 또한 사용자 토지 프로그램은 일반적으로 인터럽트에 그렇게 빠르게 응답하지 않기 때문에 스케줄링이 문제입니다.

답변2

대부분의 최신 CPU에는핵심또는 감독자 모드 및 제한된사용자방법. 이는 CPU의 하드웨어 기능입니다. "Userland"는 사용자 모드에서 실행되는 코드의 또 다른 이름입니다.

모드 간의 큰 차이점 중 하나는 대부분의 최신 CPU의 MMU가 해당 모드에서 작동하는 방식에 관한 것입니다.

MMU를 사용하면 커널이 RAM의 블록(또는 페이지)을 재정렬하여 물리적으로 RAM에 있는 순서와 다른 순서로 코딩하는 것처럼 보이도록 할 수 있으며 사용자 모드 코드가또는 "잘못" 특정 페이지에 액세스하면 커널 모드로 돌아갑니다. 사용자 모드는 MMU가 수행하는 작업을 변경할 수 없으며 커널 모드에서만 변경할 수 있습니다.

따라서 MMU를 사용하면 커널 모드 코드가 다음과 같은 모든 종류의 멋진 작업을 수행할 수 있습니다.

  • 사용자 모드 코드에 메모리를 "배열"하거나 "매핑"하여 해당 코드에서 연속적인 RAM이 있다고 생각하도록 합니다.
  • 프로세스가 메모리를 사용하기 전에 이를 요청해야 하는 동적 메모리 관리 체계를 구현합니다.
  • 사용자 프로세스가 의도하지 않은 메모리를 사용하는 경우 중지합니다.
  • 사용 가능한 메모리가 부족하면 가장 적게 사용된 페이지를 디스크로 교체하고 프로세스가 해당 페이지에 액세스하려고 하면 다시 교체합니다.

커널/사용자 모드와 함께 MMU가 멀티태스킹 운영 체제의 초석이라는 것을 알 수 있으며 이러한 도구를 사용하면 프로세스 아이디어와 같은 더 높은 수준의 작업을 수행하는 시스템을 만들 수 있습니다. 커널은 각 프로세스에 대한 페이지 테이블을 유지 관리하고 기본적으로 MMU가 사용자 모드로 전환되기 전에 MMU를 다시 프로그래밍하고 타임슬라이스에 대한 프로세스에 대한 제어권을 부여합니다. 프로세스가 메모리를 획득하는 것과 같은 것들은 malloc커널이 MMU 페이지 테이블을 수정하게 만듭니다.

다시 말하지만, 사용자 모드는 페이지 테이블에 대해 아무것도 할 수 없으며(실제로 페이지 테이블이 존재하는지 알 필요도 없습니다), 메모리가 필요하면부르다사용자 모드에서 커널 모드로 전환되는 커널. CPU는 다음과 같은 간단한 메커니즘을 제공합니다.소프트웨어 인터럽트이것을하기 위해,Linux 커널이 사용하는 다른 더 빠른 방법이 있습니다.

사용자 모드에 존재하는 이러한 보호 기능으로 인해 프로그램이 충돌하거나 문제가 발생하여 자신을 덮어쓰는 경우 커널이 이 프로세스를 중지할 수 있습니다. 커널 모드에서는 이 보호 기능이 존재하지 않으므로 커널 작동이 중지되고 전체 시스템도 작동이 중지됩니다. 이와 같이 복구할 수 없는 오류가 커널 모드에서 발생하는 경우 이를 커널 패닉이라고 합니다. 보다"커널 패닉"이란 무엇입니까?자세한 내용은.

커널은 사용자 영역에서 해당 드라이버를 실행할 수 있습니다

CPU의 커널 또는 감독자 모드는 사용자 모드가 I/O 장치에 직접 액세스하는 것을 방지합니다. 이를 위해서는 커널을 호출해야 한다는 아이디어입니다. Linux에서 장치와 직접 통신하는 코드(커널 모드에서 실행됨)는 다음과 같습니다.장치 드라이버(일종의커널 모듈lsmod, insmod, modprobe, 및 ) 과 같은 명령을 사용하여 조작할 수 있습니다 rmmod.

가장 간단한 설정 하에 커널 모드에서 실행되는 장치 드라이버에 버그가 있고 RAM에 있는 임의의 항목을 덮어쓰는 등 불쾌한 작업을 수행하면 어떻게 될까요(커널 모드에 있으므로 모든 RAM에 무제한으로 액세스할 수 있고 덮어쓸 수 있음) 커널 자체). 커널 자체나 다른 프로세스에 아무 것도 할 수 없도록 장치 드라이버를 사용자 모드에서 실행할 수 있다면 좋을 것입니다.

불행하게도 사용자 모드에서 커널 모드로 전환하는 경우(컨텍스트 스위치)은 기본적으로 CPU의 전체 상태를 각 프로세스 또는 커널 자체에 대해 켜고 꺼야 하기 때문에 느립니다. 따라서 우리는 안전과 속도라는 두 가지 상충되는 점을 가지고 있으며 이것이 논쟁과 설계의 핵심입니다.

사용자 모드에서 가능한 한 많은 작업을 시도하는 커널을 호출합니다.마이크로커널, Linux는 그 반대입니다.단단히 짜여 하나로 되어 있는. Linux용 사용자 모드 드라이버가 존재하며(예를 들어 FUSE를 살펴보세요)뼈대그게 가능합니다.

답변3

Bruce의 말을 토대로 커널에 제공되는 모든 코드는 신뢰할 수 있어야 합니다. 커널에 의해 악성 코드가 실행될 수 있는 경우 게임이 종료됩니다. 여기서는 사용자 실행 코드와 커널 실행 코드의 권한 분리가 작용합니다. 사용자가 실행하는 코드가 반드시 악으로부터 100% 자유로울 필요는 없습니다. 커널에 의해 직접 실행되지는 않습니다.

Userland 프로그램은 단순히 API 및 로드된 모듈과 같은 커널의 노출된 부분과 상호 작용합니다. 예를 들면 다음과 같습니다 iptables. 실제로 작업을 수행하는 여러 커널 모듈(.ko) 또는 '드라이버'가 있습니다 iptables.넷필터 프레임워크. 를 사용하여 명령을 실행하면 /sbin/iptables커널에 로드된 netfilter 모듈과 통신하는 userland 구성 요소를 사용하게 됩니다. 이를 통해 커널이 실수로 사용자 코드를 실행할 수 없도록 분리할 수 있습니다.

답변4

Unix/Linux 운영 체제에서는사용자 공간그리고커널 공간. 이는 사용자 영역과 커널이 속한 위치의 동의어일 뿐입니다.

다음과 같이 이해하시면 됩니다. 사용자 공간에서 진행되는 모든 작업과 상호 작용할 수 있습니다. 커널 공간에서는 그렇지 않습니다. 데몬, 라이브러리 및 애플리케이션은 사용자 공간에 속합니다. 운영 체제 커널 외부에서 실행되는 모든 코드는 사용자 공간(사용자 영역)에 속합니다.

커널 공간은 커널 자체가 실행되는 곳입니다. 루트도 접근할 수 없는 제한된 영역입니다. 그러나 루트 사용자는 커널이 제공하는 인터페이스(procfs, sysfs)를 통해 일부 커널 매개변수를 조작할 수 있습니다.

시스템 메모리는 커널과 사용자 공간의 차이를 설명하는 좋은 예입니다. 사용자 공간에서 실행되는 데몬을 실행하려면 약간의 메모리가 필요합니다. 커널은 사용 가능한 모든 메모리를 관리합니다. 데몬은 커널에서 일부 "가상 메모리"를 가져오는데, 여기서 데몬은 그것이 물리적 메모리인지 스왑 공간인지 등을 인식하지 못합니다. 커널은 프로세스가 어떤 종류의 메모리를 얻는지 결정하는 것입니다. 메모리 관리는 커널 공간에서 이루어지기 때문입니다. 커널 공간에서 일어나는 다른 일로는 프로세스 스케줄링, 프로세스 간 통신, 메모리 보호 및 관리, 시스템 호출 등이 있습니다.

유저랜드란 정확히 무엇인가요?

따라서 사용자 영역은 운영 체제 리소스(I/O, 네트워크, 메모리, CPU 시간)와 상호 작용할 때 데몬이 수행하는(또는 수행할 수 있는) 작업입니다. 이러한 리소스는 커널 공간의 프로세스에서 숨겨져 있습니다.

짧은 대답:

조종사를 위한 비행기의 조종석이 바로 그것이다.

관련 정보