[CS Study] OS - System call

Frye 'de Bacon·2023년 11월 22일
0

Computer Science(CS)

목록 보기
20/40

Dual mode

대부분의 메모리는 다수의 프로세스를 구동시키는 멀티 프로그래밍 환경이 구축되어 있으며, 따라서 OS는 어떤 프로세스가 다른 프로세스 혹은 OS 자체에 부적절한 접근을 하지 못하도록 보호할 필요가 있다. 이를 위해 자원에 대한 접근 수준에 따라 권한 레벨을 설정하는 CPU 보호 링(CPU protection ring)의 개념이 등장하였고, 일반적으로 0부터 3까지의 숫자로 표현되는 이 CPU 보호 링에서 가장 높은 권한을 지닌 레벨 0을 커널 모드(Kernel mode), 가장 낮은 권한을 지닌 레벨 3을 사용자 모드(User mode)로 구분한다.

위험한 상황을 발생시킬 수 있는 명령 등은 커널 모드에서만 작동 가능하도록 하고, 사용자 모드에서는 그렇지 않은 연산들을 수행하도록 구분함으로써 시스템을 보호하는 것이다.

Mode bit

  • 커널 모드와 사용자 모드를 구분하기 위해 CPU 내부에 위치하는 비트
  • CPU는 이를 보고 현재 커널 모드(0)인지 사용자 모드(1)인지를 파악한다.

커널 모드(Kernel mode)

커널 모드는 OS의 핵심 기능을 수행하는 커널(Kernel)이 실행되는 모드로서, 커널은 OS의 핵심 기능을 수행하고 모든 메모리 및 하드웨어와 직접 상호작용할 수 있는 권한을 가지고 있다.
하드웨어의 제어, 메모리의 관리, 인터럽트의 처리 등과 같이 중요한 작업은 이 커널 모드에서 수행되며, 커널 모드에서 실행되는 코드는 높은 권한을 가지므로 시스템에 큰 영향을 미칠 수 있다. 따라서 엄중히 관리되어야 한다.

사용자 모드(User mode)

일반적으로 응용 프로그램이 실행되는 모드로, 여기서 실행되는 코드들은 제한된 권한을 가지며 OS의 자원에 직접 접근하는 것이 불가능하다. 대부분의 응용 프로그램은 사용자 모드에서 실행되며, 사용자가 요청한 작업을 처리하고 결과를 출력하는 등의 기능을 수행하게 된다.
그러나 응용 프로그램도 시스템의 자원을 활용해야 하는 경우가 있는데, 이때 '커널 모드로의 전환'을 요청하기 위하여 사용하는 것이 바로 시스템 콜(System call)이다.



인터럽트(Interrupt)

시스템 콜에 대해 이야기하기에 앞서 인터럽트에 대해 이야기해 보자.
OS 구동 시 부팅 과정에서 필요한 작업을 수행하기 위해 커널 모드로 동작하지만, 부팅이 완료되면 곧 OS는 사용자 모드로 전환한다. 그리고 사용자 모드에서 프로그램들이 실행되어 작업을 수행하던 중, 인터럽트(Interrupt)가 발생하면 모드 비트를 0으로 전환하여 운영체제의 모드가 커널 모드로 변경된다.

여기서 언급된 인터럽트는 무엇일까. 인터럽트는 CPU가 프로세스를 처리하던 중 입출력 장치 등에서 I/O 작업 등이 요청되어 해당 요청을 처리해야 할 경우 처리 중이던 프로세스를 잠시 중단하고 해당 요청을 처리한 뒤 다시 실행 중이던 프로세스로 돌아오는 것을 말한다.

인터럽트의 구분

인터럽트는 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 구분할 수 있다.

구분내용예시
하드웨어 인터럽트입출력 장치, 타이밍 장치, 전원 등 외부적인 요인(H/W)에 의해 발생키보드 혹은 마우스 입력 등
소프트웨어 인터럽트소프트웨어가 OS 서비스를 요청하거나 에러를 일으켰을 경우 발생파일 읽기/쓰기, division by 0 exception, 오버플로우 등

여기서 소프트웨어 인터럽트는 다시 세 가지로 나눌 수 있다.

구분내용예시
Trap의도적으로 일으킨 인터럽트로 ISR 종료 후 실행을 재개함시스템 콜
Fault복구가 가능할 수도 있는 예외로, ISR 종료 후 실행 재개가 가능division by 0, 잘못된 메모리 접근
Abort복구 불가능한 예외로, ISR 실행 시 프로세스 강제 종료하드웨어 고장

Interrupt Service Routine(ISR) : 인터럽트가 걸릴 경우 CPU로부터 제어권을 넘겨받아 인터럽트의 종류별로 인터럽트 핸들러(Interrupt handler)의 주소가 담긴 테이블(Interrupt vector)을 보고 해당 인터럽트 핸들러의 주소로 이동하여 해당 기능을 처리하는 기계어 코드 루틴

인터럽트의 처리 과정

  1. 인터럽트 요청
  2. 프로세스 실행 중단(실행 중이던 명령까지만 수행)
  3. PCB(Process Control Block)에 현재 프로세스 상태 저장, PC(Program Counter)에 다음 실행할 명령 주소 저장
  4. 인터럽트 벡터를 읽고 인터럽트 처리 루틴 실행(인터럽트 처리)
  5. 처리 완료 시 저장했던 프로세스 상태 복구
  6. 인터럽트 해제 및 중단된 프로세스 재개


시스템 콜(System call)

시스템 콜, 또는 시스템 호출은 응용 프로그램이 커널 모드에서의 명령 수행을 필요로 하는 경우 운영 체제에 요청하여 커널 영역의 기능을 사용자 모드에서 사용 가능하도록, 즉 프로세스가 하드웨어 등에 직접 접근하여 필요한 기능을 할 수 있도록 해 주는 일종의 인터페이스이다.
대략적인 시스템 콜의 동작에 대해 정리하면 다음과 같다.

  1. 일반적으로 시스템 콜은 여러 종류의 기능으로 나누어진다.
  2. 각 시스템 콜에는 번호가 할당되고 시스템 콜 인터페이스는 시스템 콜 번호와 시스템 콜 핸들러 함수 주소로 구성되는 시스템 콜 테이블을 생성 및 유지한다.
  3. OS는 자신의 커널 영역에서 해당 인덱스가 가리키는 주소에 저장되어 있는 루틴을 수행한다.
  4. 작업이 완료되면 CPU에 인터럽트를 발생시켜 수행이 완료되었음을 알린다.

시스템 콜의 유형

시스템 콜은 일반적으로 다음과 같은 여섯 가지로 구분할 수 있다.

  1. 프로세스 제어(Process control)
    • 프로세스 생성 및 종료
    • 메모리 적재(load) 및 실행(execute)
    • 프로세스 속성 값 확인, 지정
    • wait 이벤트 및 signal 이벤트
    • 예 : fork, wait, exec 등
  2. 파일 조작(File manipulation)
    • 파일 생성 및 삭제
    • 파일 열기 및 닫기
    • 파일 읽기, 쓰기, 위치 변경 등
    • 파일 속성 값 확인, 지정
    • 예: open, read, write, close 등
  3. 장치 조작(Device manipulation)
    • 장치의 요구(request)및 방출(relese)
    • 읽기, 쓰기, 위치 변경 등
    • 장치 속성 확인 및 지정
    • 장치의 비물리적(논리적) 해제 및 장착
  4. 정보 유지(Information maintenance)
    • 시간 및 날짜의 설정 및 획득
    • 시스템 데이터 설정 및 획득
    • 프로세스, 파일, 디바이스 속성 설정 및 획득
  5. 통신(Communication)
    • 커뮤니케이션 연결 생성 및 삭제
    • 메시지 송수신
    • 상태 정보 전달
    • 원격 장치의 해제 및 장착
  6. 보안(Protection)
    • Permission 획득 및 설정
    • Permission 설정


참고 자료

profile
AI, NLP, Data analysis로 나아가고자 하는 개발자 지망생

0개의 댓글