Skip to content

Files

Latest commit

66a9e6e · May 15, 2023

History

History
101 lines (72 loc) · 5.66 KB

시스템 콜(System Call).md

File metadata and controls

101 lines (72 loc) · 5.66 KB

System Call

커널 (Kernel)

커널은 운영체제 중 항상 메모리에 올라가 있는 운영체제의 핵심 부분으로써 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하는 역할을 하며 컴퓨터 자원들을 관리하는 역할을 한다.

컴퓨터 전원을 켜면 운영체제는 이와 동시에 수행되며 메모리에 올라가게 된다.

하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라가면 한정된 메모리 공간에서 낭비가 심할 것이다. 따라서 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고, 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다.

이때 메모리에 상주하는 운영체제의 부분을 커널이라고 한다.

.

커널의 기능

  • 프로세스 관리 : 프로세스의 생성 및 제거를 담당. 스케줄러를 이용하여 여러 프로세스 동작을 제어한다.
  • 메모리 관리 : 각 프로세스가 독립적으로 사용할 수 있는 가상 주소 공간을 제공.
    • 가상 주소 공간? - 프로세스가 실행되는 물리 메모리의 실제 주소를 가리키는 주소들의 집합, 가상 주소를 물리 주소로 매핑하며 실행이 된다.
  • 파일 시스템 관리 : 시스템에 동작하는 모든 자원을 파일처럼 다룰 수 있도록 인터페이스를 제공한다.

.

커널 모드와 유저 모드

CPU는 사용자 어플리케이션 (User application)이 시스템을 손상시키는 것을 방지하기 위해 2가지 모드를 제공한다.

CPU에 있는 Mode bit로 모드를 구분하여 0은 '커널모드(kernel mode)', 1은 '사용자모드 (user mode)'로 나뉘어서 구동된다. 운영체제에서 프로그램이 구동되는데 있어서 파일을 읽어오거나, 파일을 쓰거나, 혹은 화면에 메세지를 출력하는 등 많은 부분이 커널 모드를 사용한다.

위 그림과 같이 사용자 process는 User Mode에서 실행되다가 시스템 자원을 사용해야할 때 시스템 콜을 호출해서 커널 모드로 전환되어 작업을 수행하고 완료 시 다시 사용자 모드로 전환한다.

사용자 모드 (User Mode)

  • 사용자가 접근할 수 있는 영역으로 사용자 모드에서 사용자 어플리케이션 코드가 실행된다.
  • 코드 영역, 데이터 영역, 스택 및 힙 영역 을 가리켜 유저 영역 이라고 한다.
  • 사용자가 접근할 수 있는 영역에 제한이 있기 때문에 해당 모드에서는 하드웨어(디스크, I/O 등)에 접근할 수 없다. 접근을 위해서는 '시스템 콜(System Call)'을 사용해야 한다.

커널 모드 (Kernel Mode)

  • 운영체제(OS)가 CPU를 사용하는 모드이다. 시스템 콜을 통해 커널모드로 전환이 되면 운영체제는 하드웨어를 제어하는 명령어를 실행한다.
  • 모든 하드웨어, 주소 공간에 접근이 가능하다.
  • 프로세스 제어, 파일 조작, 장치(I/O, 타이머) 조작 등의 명령을 할 수 있다.
  • 사용자 모드보다 더 높은 권한이 필요하다. (관리자 권한)

.

시스템 콜 (System Call)

실행되는 프로세스가 운영체제와 통신할 수 있는 유일한 방법.

OS는 다양한 서비스를 수행하기 위해 하드웨어를 직접적으로 관리한다. 이와 반면 응용 프로그램은 OS가 제공하는 인터페이스를 통해서만 자원을 사용할 수 있다. OS가 제공하는 이러한 인터페이스를 '시스템 콜 (system call)' 이라고 한다.

시스템 콜은 이러한 커널 영역의 기능을 사용자 모드가 사용 가능하게, 즉, 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 할 수 있게 해준다.

보통 직접적으로 시스템콜을 사용하기 보다는 API(라이브러리 함수)를 통해 사용하게 된다.

.

시스템 콜의 유형

  1. 프로세스 제어 (Process Control)

    • 끝내기(exit), 중지 (abort)
    • 적재(load), 실행(execute)
    • 프로세스 생성(create process) - fork
    • 프로세스 속성 획득과 속성 설정
    • 시간 대기 (wait time)
    • 사건 대기 (wait event)
    • 사건을 알림 (signal event)
    • 메모리 할당 및 해제
  2. 파일 조작 (File Manipulation)

    • 파일 생성 / 삭제 (create, delete)
    • 열기 / 닫기 / 읽기 / 쓰기 (open, close, read, wirte)
    • 위치 변경 (reposition)
    • 파일 속성 획득 및 설정 (get file attribute, set file attribute)
  3. 장치 관리 (Device Manipulation)

    • 하드웨어의 제어와 상태 정보를 얻음 (ioctl)
    • 장치를 요구(request device), 장치를 방출 (relese device)
    • 읽기 (read), 쓰기(write), 위치 변경
    • 장치 속성 획득 및 설정
    • 장치의 논리적 부착 및 분리
  4. 정보 유지 (Information Maintenance)

    • getpid(), alarm(), sleep()
    • 시간과 날짜의 설정과 획득 (time)
    • 시스템 데이터의 설정과 획득 (date)
    • 프로세스 파일, 장치 속성의 획득 및 설정
  5. 통신 (Communication)

    • pipe(), shm_open(), mmap()
    • 통신 연결의 생성, 제거
    • 메시지의 송신, 수신
    • 상태 정보 전달
    • 원격 장치의 부착 및 분리
  6. 보호 (Protection)

    • chmod()
    • umask()
    • chown()