컴퓨터 시스템: 프로그래머의 관점설명하다
프로세서는 일반적으로 일부 제어 레지스터의 모드 비트를 통해 이 기능을 제공하며, 이는 현재 프로세스에서 누리는 권한을 나타냅니다. 모드 비트가 설정되면 프로세스는 커널 모드(감독자 모드라고도 함)에서 실행됩니다. 커널 모드에서 실행되는 프로세스는 명령어 세트의 모든 명령어를 실행할 수 있고 시스템의 모든 메모리 위치에 액세스할 수 있습니다.
모드 비트가 설정되지 않으면 프로세스는 사용자 모드에서 실행됩니다. 사용자 모드의 프로세스는 프로세서 중지, 모드 비트 변경 또는 I/O 작업 시작과 같은 권한 있는 명령을 실행할 수 없습니다. 주소 공간의 커널 영역에 있는 코드나 데이터에 대한 직접 참조도 허용되지 않습니다. 그러한 시도는 치명적인 보호 실패로 이어질 수 있습니다. 사용자 프로그램은 시스템 호출 인터페이스를 통해 간접적으로 커널 코드와 데이터에 액세스해야 합니다.
애플리케이션 코드를 실행하는 프로세스는 처음에는 사용자 모드에 있습니다. 프로세스가 사용자 모드에서 커널 모드로 변경되는 유일한 방법은 인터럽트, 오류 또는 트랩핑 시스템 호출과 같은 예외를 통하는 것입니다. 예외가 발생하고 제어가 예외 처리기로 전달되면 프로세서는 모드를 사용자 모드에서 커널 모드로 변경합니다. 이 핸들러는 커널 모드에서 실행됩니다. 애플리케이션 코드로 돌아가면 프로세서는 커널 모드에서 사용자 모드로 모드를 변경합니다.
Linux는 다음과 같은 독창적인 메커니즘을 제공합니다./proc 파일 시스템을 사용하면 사용자 모드 프로세스가 커널 데이터 구조의 내용에 액세스할 수 있습니다.. /proc 파일 시스템은 많은 커널 데이터 구조의 내용을 사용자 프로그램이 읽을 수 있는 텍스트 파일 계층 구조로 내보냅니다. 예를 들어, /proc 파일 시스템을 사용하여 CPU 유형(/proc/cpuinfo) 또는 특정 프로세스에서 사용하는 메모리 세그먼트(/proc/process-id/maps)와 같은 일반 시스템 속성을 찾을 수 있습니다. Linux 커널 버전 2.6에는 시스템 버스 및 장치에 대한 추가 하위 수준 정보를 내보내는 /sys 파일 시스템이 도입되었습니다.
사용자 모드 프로세스가 /proc 및 /sys 파일 시스템을 통해 "커널 데이터 구조의 내용에 액세스"할 때 인터럽트, 오류 또는 트랩 시스템 호출과 같은 예외를 통해 "사용자 모드에서 커널 모드로 변경"해야 합니까? ?
감사해요.
답변1
파일에 대한 모든 액세스는 시스템 호출이나 메모리 액세스 트랩(메모리 매핑된 파일의 경우)을 통해 이루어지므로 프로세스는 파일에 액세스하기 위해 커널 모드로 전환됩니다(in 및 out뿐만 아니라 /proc
) /sys
.