운영체제 이중 동작 모드(OS dual-mode-operation)

seo young park·2023년 8월 20일
0

CS

목록 보기
1/1

📝 이중 동작 모드(OS dual-mode-operation)

이미지 출처

이중 동작 모드란 다중 프로그래밍 환경에서 운영체제를 보호하는 보안 기법이다. 응용 프로그램이 운영체제의 자원(메모리, CPU, 하드디스크 등)에 직접 접근하는 것을 방지하기 위해 유저 모드(User mode), 커널 모드(Kernel mode) 두 가지 모드로 분리되어있다. CPU는 두 가지 모드에서 명령어를 실행할 수 있는데 요청에 따라 모드를 전환한다.

유저 모드(User mode)와 커널 모드(Kernel mode)

  • 유저 모드
    • 일반적인 응용 프로그램은 유저 모드에서 실행된다.
    • 프로세스는 자체 가상 주소 공간을 얻는다. (분리된 공간에서 작동하므로 다른 프로세스에 영향을 끼치지 않는다.)
    • 시스템 데이터에 제한적으로 접근할 수 있으며, 하드웨어에 직접 접근하는 명령어는 실행할 수 없다.
    • 시스템 콜*을 통해 커널 모드로 전환할 수 있다.
  • 커널 모드
    • 모든 시스템 자원에 접근할 수 있다.
    • 프로세스는 단일 가상 주소 공간을 얻는다. (문제가 발생하면 전체 운영체제에 영향을 끼친다.)

시스템 콜(System call)

이미지 출처 - Operating System Concepts 10th

시스템 콜이란 응용 프로그램이 운영체제 서비스를 요청하기 위한 인터페이스로 프로세스 제어, 파일 조작, 장치 관리, 정보 유지, 통신, 보호 등 6가지로 분류된다.

  1. 프로세스 제어 (Process Control)
  • 종료(exit), 중지 (abort)
  • 적재(load), 실행(execute)
  • 프로세스 생성(create process)
  • 프로세스 속성 획득과 설정(get process attribute and set process attribute)
  • 시간 대기 (wait time)
  • 사건 대기 (wait event)
  • 사건을 알림 (signal event)
  • 메모리 할당 및 해제 (malloc, free)
  1. 파일 조작 (File Manipulation)
  • 파일 생성 / 삭제 (create, delete)
  • 열기 / 닫기 / 읽기 / 쓰기 (open, close, read, wirte)
  • 위치 변경 (reposition)
  • 파일 속성 획득 및 설정 (get file attribute, set file attribute)
  1. 장치 관리 (Device Manipulation)
  • 하드웨어의 제어와 상태 정보를 얻음 (ioctl)
  • 장치를 요구(request device), 장치를 방출 (relese device)
  • 읽기 (read), 쓰기(write), 위치 변경
  • 장치 속성 획득 및 설정
  • 장치의 논리적 부착 및 분리 (attach, detach)
  1. 정보 유지 (Information Maintenance)
  • 시간과 날짜의 설정과 획득 (time)
  • 시스템 데이터의 설정과 획득 (date)
  • 프로세스 파일, 장치 속성의 획득 및 설정
  1. 통신 (Communication)
  • 통신 연결의 생성, 제거
  • 메시지의 송신, 수신
  • 상태 정보 전달
  • 원격 장치의 부착 및 분리
  1. 보호 (Protection)
  • 파일 권한 변경 (chmod)
  • 파일 소유자 변경 (chown)

하드웨어 인터럽트와 소프트웨어 인터럽트

시스템 콜은 인터럽트의 일종으로 인터럽트와 유사한 방식으로 처리된다. 인터럽트란 CPU가 프로그램을 실행 중일 때 입출력 장치에 의한 예외상황이 발생한 경우, 프로세스를 중단하고 마이크로 프로세스를 통해 처리하는 것을 의미한다. 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나뉜다.

  • 하드웨어 인터럽트
    • 전원 이상(Power fail interrupt)
    • 기계 고장(Machine Check interrupt)
    • 키보드/마우스/프린트/저장장치 등 입출력(I/O interrupt)
    • 외부 신호(External interrupt)
  • 소프트웨어 인터럽트
    • 프로세스의 잘못된 명령어
    • 시스템 콜

시스템 콜의 동작 방식

예를 들어 어떤 응용 프로그램이 하드 디스크 데이터를 읽으려고 하는 상황을 가정해보자.

  1. 응용 프로그램
    응용 프로그램 실행 도중 하드 디스크의 데이터를 읽어야하는 상황이 발생한다.

  2. 시스템 콜 호출 요청
    응용 프로그램이 커널의 서비스를 사용하기 위해 해당 기능을 나타내는 시스템 콜을 호출한다. 이를 위해 레지스터에 시스템 콜의 고유번호를 저장하고 필요한 인자값을 설정한다.

  3. 인터럽트 발생
    응용 프로그램이 시스템 콜을 호출하면, 해당 시스템 콜의 고유번호를 포함한 정보를 갖고 0x80 인터럽트를 발생시킨다. CPU는 유저 모드에서 커널 모드로 전환된다.

  4. 기존 프로세스 컨텍스트 저장
    현재 실행중인 프로세스 상태, 레지스터 값, 메모리 주소 등을 해당 프로세스의 PCB(Process Control Block)에 저장한다. 시스템 콜 처리 이후에 복구하기 위한 단계다.

  5. 인터럽트 서비스 루틴 실행

  • 인터럽트 디스크립터 테이블(IDT): 각 인터럽트 또는 예외에 대한 핸들러 함수의 주소와 관련된 정보를 갖고 있는 테이블로 커널 모드에서 접근 가능한 메모리에 위치한다.

  • 인터럽트 서비스 루틴(ISR): IDT에서 호출되는 특정 인터럽트 또는 예외에 대한 처리를 위한 함수 또는 코드 블록으로 커널은 이 루틴을 통해 해당 인터럽트의 작업을 수행한다.

커널은 인터럽트 디스크립터 테이블(IDT)을 통해 해당 시스템 콜의 인터럽트 서비스 루틴(ISR)의 주소를 찾아 필요한 작업을 수행한다.

  1. 사용자 모드 복귀
    시스템 콜이 성공적으로 처리되면 커널은 IRET(Interrupt Return) 명령어를 사용하여 커널 모드에서 사용자 모드로 전환하고 응용 프로그램이 시스템 콜을 호출한 위치로 돌아간다.

🔗 참고 링크

링크1
링크2

0개의 댓글