[운영체제] 시스템콜

지니🧸·2023년 4월 7일
0

CS 저장소

목록 보기
1/48
post-custom-banner

🐝 시스템 콜

System calls: 시스템 콜, 시스템 호출

  • 소프트웨어 인터럽트의 한 종류

운영체제는 커널 모드사용자 모드로 나뉘어 구동

  • CPU는 사용자 애플리케이션이 시스템을 손상시키는 것을 방지하기 위해 2가지 모드 제공
    • CPU에 있는 Mode bit로 모드를 구분하여 0은 커널모드, 1은 사용자모드로 나뉨
  • 커널 모드: 파일 읽기/쓰기/출력
    • 커널: 운영체제 부분 중 메모리에 상주하는 것 > 운영체제의 핵심적인 부분
  • 사용자 모드: 사용자 애플리케이션 코드 실행, 사용자가 접근할 수 있는 영역에 제한 있음, 하드웨어 접근 안됨 (시스템 콜 필요)

시스템 콜: 운영체제의 커널이 제공하는 서비스에 대해 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스 (사용자가 커널 자원을 사용할 수 있도록 만들어 놓은 함수)

  • 사용자 프로그램이 특권 명령의 수행이 필요할 때 운영체제에게 특권 명령의 대행 요청
  • 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 사용
  • 주로 여러 종류의 기능으로 나뉘어짐
  • 각 시스템 콜에 번호 할당 > 시스템 콜 인터페이스는 번호에 따라 인덱스 되는 테이블 유지
  • 운영체제는 커널 영역에서 해당 인덱스가 가리키는 주소에 저장되어있는 루틴 수행
  • 작업 완료 후 CPU에게 인터럽트 발생시켜 수행 완료 알림

🐝 시스템 콜 예시

open() > open("data.txt".O_RDONLY);

  1. eax 레지스터에 시스템 콜 번호를 넣고
  • EAX, Extended Accumulator Register:
    • 산술 등 논리 연산 수행
    • 함수의 반환값이 이 레지스터에 저장
  1. ebx 레지스터에는 시스템 콜에 해당 인자값을 넣고
  • EBX, Extended Base Register: pointer to data in the DS segment
  • 예시에서는 ("data.txt".O_RDONLY")가 인자임
  1. 소프트웨어(내부) 인터럽트 명령을 호출하면서 0x80 값을 넘겨줌
  • int 0x80 명령어는 마지막에 항상 들어감
    • CPU가 제공하는 OP code 중 int와 인터럽트의 번호를 넣어주는 것
    • 0x80이 시스템 콜의 번호 의미
    • 인터럽트는 내부의 코드와 별개로 외부에서 실행되지만 해당 명령어를 통해 내부 코드 안에서 강제 실행 가능

시스템 콜 작동 과정

응용프로그램에서 시스템 콜을 호출하면 0x80 인터럽트 발생

0x80 값을 넘겨주면 무엇이 일어나는가?

  • 해당 인터럽트를 받으면 CPU는 사용자 모드를 커널 모드로 변경함 > 시스템 자원 접근 가능
  • IDT (Interrupt Descriptor Table)에 접근
    • IDT는 인터럽트의 번호와 해당 번호에 맞는 코드가 들어있는 주소 포함
  • 0x80값을 넘겼기 때문에 IDT에서 해당 주소 (함수)를 찾아 실행
    • 이 함수에 system_call() 함수가 저장되어 있음
  • system_call() 함수 실행 > eax로부터 받은 시스템 콜 번호에 해당 함수를 호출함 (ebx로 받은 인자값 같이 넘겨줌)
  • 커널 모드에서 호출한 함수 실행 > 실행 완료 후 사용자 모드로 변경 > 해당 프로세스의 다음 코드 실행

시스템 콜이 발생했을 때 추가적인 정보가 필요하면 이 정보가 담긴 매개변수를 OS에 전달한다
매개 변수 전달 방법:

  • 매개변수를 CPU 레지스터에 전달
    • 전달해야 하는 매개변수보다 레지스터의 수가 작을 수 있음 > 적합X
  • 매개변수를 연속적(블록)/불연속적(테이블)으로 메모리에 저장해 해당 메모리의 주소를 레지스터에 전달
    • 매개변수의 갯수/길이 제한 X > 선호
  • 스택에 매개변수를 담음
    • 매개변수의 갯수/길이 제한 X > 선호

🐝 시스템 콜 유형

  1. 프로세스 컨트롤 (Process control)
  • 끝내기 (end), 중지 (abort)
  • 적재 (load), 실행 (execute)
  • 프로세스 생성 (create process)
  • 프로세스 속성 획득과 설정 (get process attribute, set process attribute)
  • 시간 대기 (wait time, wait event)
  • 사건 알림 (signal event)
  • 메모리 할당 및 해제 (malloc, free)
  1. 파일 조작 (File manipulation)
  • 파일 생성 (create file), 파일 삭제 (delete file)
  • 열기 (open), 닫기 (close)
  • 읽기 (read), 쓰기 (write), 위치 변경 (reposition)
  • 파일 속성 획득 및 설정 (get/set file attribute)
  1. 장치 관리 (Device management)
  • 장치 요구 (request devices), 장치 방출 (release device)
  • 읽기, 쓰기, 위치 변경
  • 장치 속성 획득, 장치 속성 설정
  • 장치의 논리적 부착 (attach) 또는 분리 (detach)
  1. 정보 유지 (Information maintenance)
  • 시간과 날짜의 설정과 획득 (time)
  • 시스템 데이터의 설정과 획득 (date)
  • 프로세스 파일, 장치 속성의 획득 및 설정
  1. 통신 (Communication)
  • 통신 연결의 생성, 제거
  • 메시지의 송신, 수신
  • 상태 정보 전달
  • 원격 장치의 부착 및 분리
  1. 보안
  • Permission 획득
  • Permission 설정

🐝 운영체제의 Dual Mode

목적: 운영체제 보호

  • 사용자와 운영체제는 시스템 자원을 공유함
  • 사용자에 제한을 두지 않으면 사용자가 메모리 내의 주요 운영체제 자원을 망가뜨릴 위험
  • 운영체제의 원활한 작동/기능을 위해서는 사용자의 시스템 자원 접근을 제한하는 보호 장치가 필수적임

Dual mode operation: 사용자가 접근할 수 없는 모드 (kernel mode)와 사용자가 접근할 수 있는 모드 (user mode)로 나뉨

  • 커널 모드: supervisor mode, system mode, privileged mode
  • 사용자 모드에서는 불법적인 명령 못함

구조

  • 사용자가 사용하는 응용 프로그램은 사용자 모드에서 작동함
  • 해당 프로그램이 운영체제에게 시스템 사용을 요청하면 커널모드로 바뀜 > 요청된 시스템 실행 후 다시 사용자 모드로 전환
  • Mode bit, 모드 비트: 커널/사용자 모드를 구분짓기 위해 모드비트라고 하는 비트가 컴퓨터의 하드웨어에 추가됨
    • 커널모드(0) 또는 사용자 모드(1)를 나타냄
    • 모드 비트를 사용해 운영체제를 위해 실행되는 작업고 사용자를 위해 실행되는 작업 구분

🐝 시스템 콜 구분 방법

커널은 내부적으로 시스템 콜 구분을 위해 기능별로 고유 번호 할당 & 그 번호에 해당하는 제어루틴을 커널 내부에 정의

  • 시스템 콜이 발생하면 해당 기능번호 확인

  • 커널은 인터럽트를 발생시킨 명령을 검사하여 어떤 시스템 호출이 발생했는지 결정

  • 이 때 전달된 인자가 사용자 프로그램이 요청하는 서비스 유형을 표시함

  • 커널은 인자가 정확하고 합법적인지 검증하고 요청 실행


참고:

profile
우당탕탕
post-custom-banner

0개의 댓글