본문 바로가기
운영체제

03. System Call

by kwon5346 2024. 4. 3.
반응형

System Call

일반 user mode에서 동작하다가 CPU가 interrupt를 받으면 CPU는 kernal mode로 바꾸고 발생한 interrupt에 따라 작업을 한다.

즉, interrupt가 발생하면 user mode -> kernal 모드로 transition이 일어난다고 할 수 있다.
kernal mode로 전환되는 방법중 interrupt가 아닌 다른 방법이 바로 System Call이다.

system call이란 운영체제가 제공하는 서비스를 부르기 위한 프로그래밍 인터페이스 라고 정의할 수 있다. 보통 API를 통하여 호출된다.
특정 low-level 작업(예:하드웨어를 직접 접근하는 작업)은 assembly 명령을 사용하여 작성되어야 하더라도 이러한 Call은 일반적으로 C와 C++언어로 작성된 함수 형태로 제공된다.


Multi-mode CPU

user가 시스템의 중요한 부분에 함부로 접근하는 것을 막기 위하여 CPU는 2가지 모드로 나뉘어 운영된다.

  • User mode : 어느 정도의 제한이 있고, 가벼운 명령어들을 처리할 수 있는 모드
  • Kernal mode : 모든 명령어들이 처리 가능하고, 메모리와 CPU를 직접적으로 건드릴 수 있기 때문에 잘못하면 컴퓨터에 치명적인 손상을 가할 수 있다. 운영체제는 CPU의 kernal mode를 관리감독하는 역할을 수행한다.

유저모드에서 가능한 명령어는 모두 커널모드에서 사용이 가능하고, 반대로 커널모드에서만 사용할수 있는 명령어들을 privileged instruction 이라고 한다.


Privileged Instructions

privileged instruction은 조심해서 사용하여야 하는 명령어들이다.

  • Accessing/munuplating system registers
    레지스터에 관한 명령이다. interrupt에 관여하는 IDT명령이나 control register처럼 레지스터에 관한 중요한 명령은 privileged instruction이다. 레지스터는 CPU안에 들어있기 때문에 매우 중요하다.
    • interrupt descriptor table(IDT)
    • Control registers
  • Accessing I/O devices
    키보드가 디스크의 접근에 관한 명령어로, 키보드나 디스크의 input을 함부로 가로채는 것은 위험하기 때문에 privileged instruction이다.
    • E.g., IN/OUT instructions in IA-32
  • Memory state management
    메모리 상태를 관리하는 명령어도 privileged instruction이다.
    • Page table updates, page table pointers, TLB loads, etc
  • HTL instruction in IA-32
    컴퓨터를 종료시킬 수 있는 명령어이다.

Interrupt vs Exception

Interrupt

  • 하드웨어에 의해 발생된다.
  • asynchronously 하게 발생된다. (Occurs at any time)

Exception

  • 소프트웨어 실행중에 발생된다.
  • synchronously 하게 발생된다.
  • 주로 user mode에서 privileged instrution을 실행하려다가 발생한다.

A View of Operating System Services

Services Provided by the OS

  • program execution(프로그램 수행)
    • 시스템은 프로그램을 메모리에 적재해 실행할 수 있어야 한다.
    • 프로그램은 정상적이든, 비정상적이든 실행을 끝낼 수 있어야 한다.(오류를 표시하면서)
  • I/O operations(입출력 연산)
    • 실행중인 프로그램은 입출력을 요구할 수 있다. 이러한 입출력에는 파일 혹은 입출력 장치가 연관될 수 있다.
  • file system manipulation(파일 시스템 조작)
    • 프로그램은 파일을 읽고, 쓰고, 만들고, 삭제할 필요가 있다.
    • 또한 파일을 찾을 수 있어야 하고 파일의 정보를 열거할 수 있어야 한다.
  • Communication(통신)
    • 한 프로세스가 다른 프로세스와 정보를 교환해야 할 필요가 있는 여러 상황이 있다.
      • 동일한 컴퓨터에서 수행되고 있는 프로세스들 사이의 통신
      • 네트워크에 의해 함께 묶여 있는 서로 다른 컴퓨터 시스템상에서 수행되는 프로세스들 사이의 통신
    • 공유 메모리(shared memory) 또는 메세지 전달(message passing)기법을 사용하여 구현된다.
  • Error detection(오류 탐지)
    • 운영체제는 항상 모든 가능한 오류를 의식하고 있어야 한다.
      • 오류는 CPU,메모리 하드웨어,I/O devices 또는 user program에서 일어날 수 있다.
      • OS는 올바르고 일관성 있는 계산을 보장하기 위해 각 유형의 오류에 대해 적절한 조치를 취해야 한다.
      • 디버깅 설비는 시스템을 효율적으로 사용할 수 있는 사용자와 프로그래머의 능력을 향상시킨다.
  • Resource allocation(자원 할당)
    • 다수의 프로세스나 다수의 작업이 동시에 실행될 때, 그들 각각에 자원을 할당해 줘야 한다.
    • 다양한 type의 resources - CPU cycles, main memory, file storage, I/O devices
  • Accounting(회계)
    • 어떤 프로그램이 어떤 종류의 resource를 얼마나 많이 사용하는지 추적한다.
  • Protection and security(보호와 보안)

Types of System Calls

시스템 콜은 아래 다섯 가지 중요한 범주로 묶을 수 있다.

  • File management
    • 파일 생성,삭제
    • 파일 open,close
    • read, write, reposition(위치 변경)
    • 파일 속성 획득 및 설정
  • Device management
    • 장치를 요구, 장치를 방출
    • read, write, reposition
    • 장치 속성 획득 및 설정
    • 장치의 논리적 attach or detach
  • Information maintenance(정보 유지)
    • 시간과 날짜의 설정과 획득
    • 시스템 데이터의 설정과 획득
    • 프로세스, 파일, 장치 속성의 획득 및 설정
  • Commmunications
    • 통신 연결의 생성, 제거
    • 메세지의 송신, 수신
    • 상태 정보 전달
    • 원격(remote)장치의 attach and detach
  • Protection
    • control access to resources
    • get and file permissions
    • allow and deny user access

Standard C Library Example

표준 C 라이브러리는 많은 버전의 UNIX, Linux를 위한 system call interface를 제공한다.

printf()문을 호출하는 C 프로그램을 예로 들어보자.
C 라이브러리는 이 printf() 호출을 가로채고 write() system call을 부른다.
C 라이브러리는 write()의 반환 값을 받아 이를 사용자 프로그램에게 되돌려 준다.


반응형

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

06. Process Scheduling(2)  (0) 2024.04.24
05. Process Scheduling  (0) 2024.04.24
04. Inter-Process Communication  (0) 2024.04.18
02. Processes  (5) 2024.04.03
01. Introduction to Operating Systems  (0) 2024.04.02