개발자 끄적끄적

논리 주소 공간과 실행 모드 본문

운영체제

논리 주소 공간과 실행 모드

햏치 2024. 3. 13. 17:11

<응용 프로그램의 자원 접근 문제>
- 다중프로그래밍 OS에서는 다수의 app 동시 실행
- app이 직접 컴퓨터 자원에 접근하면 충돌 혹은 훼손 발생 가능
  - 다른 app이 적재된 메모리 훼손
  - 다른 app이 생성한 파일 훼손
  - app이 커널 적재된 영역 훼손



<응용 프로그램의 자원 접근 문제의 해결책>
- 응용 프로그램의 자원 접근 불허 : 자원에 대한 접근 커널에게만 부여

- 메모리 '주소 공간'을 분리
  - 사용자 주소 공간 : 응용 프로그램 적재
  - 커널 주소 공간 : 커널 적재

- CPU '실행 모드'를 분리
  - 사용자 모드 : 응용 프로그램 실행
    - 커널 기능 필요시 시스템 호출  이용 -> 커널 모드로 전환
  - 커널 모드 : 커널 모드 실행



<논리 주소 공간 : 사용자 공간과 커널 공간>
- 논리 주소 공간 : 'CPU'가 접근하는 주소 범위
  - 사용자 주소 공간(user space)
    - 각 응용프로그램이 나누어 적재되고 사용되는 공간

  - 커널 주소 공간(kernel space)
    - 커널에 의해 배타적으로 사용 
      - 커널 코드, 커널 데이터, 디바이스 드라이버 등

- 분리 이유
  - 커널 코드/데이터를 app에서 부적절하게 접근하지 못하도록 하기 위해



<주소 공간은 가상 주소 공간>
- 주소 공간은 물리 메모리 주소 범위와 무관
  - 사용자/app 관점에서 보는 주소 범위
    - 물리적인 실제 메모리 주소 범위와는 무관
 - 각 사용자/app은 전체 메모리를 사용한다고 착각하게 끔 OS가 지원



<CPU의 실행 모드 : 사용자 모드와 커널 모드>
- CPU는 '모드 레지스터(Mode Register)'를 통해 현재 모드 식별
  - 사용자 모드(User Mode)
    - 사용자 주소 공간만 접근 가능
    - 커널 주소 공간 접근 불허 <- 예외 발생 후 강제 종료
    - 특권 명령(privileged instruction)실행 불허  <- 예외 발생 후 강제 종료

 - 커널모드(Kernel Mode, Supervisor Mode)
    - 모든 주소 공간 접근 가능(즉, 사용자공간과 커널공간)
    - 특권 명령 실행 가능
    - HW 접근 제어 가능



<특권 명령어(시스템 관련 처리를 위한 특별한 CPU 명령)>
- 커널 모드에서 실행할 목적으로 설계된 명령어
  - I/O : 하드웨어 제어 및 장치로부터의 입출력
  - halt 
    - CPU의 작동을 중지시키고 idle 상태로 만든다
    - 인터럽트 수신 때까지 일시 중지하여 전력 소모를 줄인다
 - 인터럽트 플래그 설정 : 인터럽트를 허용할 지의 여부를 결정
  - 타이머 설정
  - 컨텍스트 스위칭



<사용자 모드와 커널 모드의 비교>
- 사용자 모드(User Mode)
  1) CPU 메모리 엑세스 범위 : 사용자 공간에 국한, 커널 공간 액세스 불가
  2) CPU의 하드웨어 엑세스 여부 : 불가
  3) CPU가 처리 가능 명령 : 특권 명령어(Prvilieged instruction)를 제외한 모든 CPU 명령어
  4) 오류 발생 시 처리 : 사용자 프로그램만 실행 종료, 시스템은 종료되지 않는다

- 커널 모드(Kernel Mode)
  1) CPU 메모리 엑세스 범위 : 커널 공간을 포함한 모든 메모리 공간
  2) CPU의 하드웨어 엑세스 여부 : 모든 하드웨어 액세스 가능
  3) CPU가 처리 가능 명령 : 특권 명령어(Prvilieged instruction)를 포함한 모든 CPU 명령어
  4) 오류 발생 시 처리 : 시스템에서 심각한 오류가 발생한 것으로 시스템 종료



<실행 모드와 관련된 다양한 이슈>
1. 사용자 모드와 커널 모드는 누구의 기능인가? : CPU의 기능(모드 레지스터)이다
2. OS가 모드를 구분해 작동하는 이유는? : 
  - 커널 공간(코드와 데이터)에 대한 보안/보호
  - 실수/고의로 인한 접근으로부터 보호
  - app에서 오류 발생 시 전체 시스템에 영향을 주지 못한다

3. app이 커널 코드를 호출할 수 있는가? 불가, 반드시 시스템 호출을 통해 간접호출해야한다 -> 운영체제가 제공해주는 시스템 호출을 이용

4. 어느 모드가 많이 사용될까? : 커널모드(ex. System idle process 등)

'운영체제' 카테고리의 다른 글

운영체제와 인터럽트(Interrupt)  (0) 2024.03.13
커널(Kernel)과 시스템 호출(System Call)  (0) 2024.03.13
운영체제  (0) 2024.03.09