Computer Science/Operation System

[OS] SystemCall (시스템 콜)

검은 까마귀 2024. 1. 10. 14:41

이번주안에 OS 관련공부를 마칠 수 있을지는 잘 모르겠다. OS는 공룡책도 있을 만큼 공부해야하며 여전히 발전하고 있기때문에 꾸준히 공부를 해야한다. 클라우드니 쿠버네티스니 모두 OS의 기본적인것들로 발전된 집합체이다.

 

2024.01.09 - [Computer Science/Operation System] - [OS] CPU Scheduling(CPU 스케듈링)

 

[OS] CPU Scheduling(CPU 스케듈링)

2024.01.03 - [Computer Science/Operation System] - [OS] 프로세스 & 쓰레드(Process & Thread) [OS] 프로세스 & 쓰레드(Process & Thread) #개요 CS를 공부할때는 언어에 대해서 1차적인 고민을 해야한다. 우리는 PC를 사용

blaj2938.tistory.com

 

CPU 스케듈링에 이어서 이번에는 System Call(시스템 콜)에 대해서 알아보자.

 

# Kernel(커널) 영역

OS를 공부하면 자주 나오는 용어가 있다 Kernel(커널)이다. 커널이 뭘까?

 

네이버 사전에 검색을 하게되면 알맹이, 핵심이라는 뚯이 나온다. 즉 운영체제의 핵심(Core)이라고 볼수 있겠다.

(왜 코어라는 이름을 안붙이고 Kernel이라고 했을까...??)

 

컴퓨팅에서 가장 심장부와 같은 역할을 한다는 것이다. 아래는 커널의 일부기능을 작성한다.

  • 리소스 관리: 메모리, 프로세서 및 장치와 같은 하드웨어 리소스를 관리
  • 메모리 관리: 운영체제의 다른 부분과 프로세스에 대한 메모리 할당 및 할당 해제 관리
  • 프로세스 관리: 프로세스를 만들고 관리
  • 인터럽트 처리: 하드웨어 인터럽트 처리
  • 프로그램간 통신: 프로그램간 통신과 프로그램과 디바이스 통신 방법 제공

 

우리가 앞서 포스팅한 CPU 스케듈링 또한 Kernel 영역에서 실행이된다. 이것 말고 Kernel은 아주 많은 역할을 하게 된다. 커널도 여러가지 종류가 있지만 오늘은 Kernel의 System Call에서 다루어야하니 차후에 공부해보도록 하겠다.

암튼, Kernel에서는 컴퓨터의 중요한 자원을 관리하고 있다는 것을 기억하면 된다.

# Kernel(커널) 모드 & User(사용자) 모드

 

 

Kernel은 컴퓨터의 중요한 자원을 관리하고 있게 되는데 이 중요한 자원에 함부로 접근이 가능하면 안된다는거다. 그래서 운영체제에서는 영역별로 사용할 수 있는 모드를 나누었다.

  • Kernel 모드
    • 모든 자원에 접근, 명령이 가능
  • User 모드
    • 사용자가 접근할 수 있는 영역으로 제한
    • 코드 작성, 프로세스 실행 가능

어찌되었던 User 모드에서 Kernel 모드로 아니면 반대로 전환하는 과정이 필요하다. 우리가 프로세스를 실행하면 메모리, 프로세서에 자원을 활용해야하기 때문이다. 그래서 이러한 모드를 전환하는데 필요한 의사소통의 수단이 System Call이다.

# System Call(시스템 콜)

이제 본문으로 돌아와서 System Call을 살펴보겠다. 사실 어려운 내용은 아니다. 다시 설명하자면 제한된 영역에 접근하기 위해서는 우리도 경찰이나 군인에게 우리의 신분을 확인 시켜주고 답변을 얻는다. User가 Kernel 모드에 접근하기 위해서는 System Call을 사용해야한다는 것이다.

더보기

※Device Driver(장치 드라이버)

 

우리가 윈도우 PC를 사용하다 보면 "장치 드라이버를 업데이트 해주세요."라는 문구를 종종 마주한다. 내가 이해하기에는 Device Driver는 Interface와 비슷하다고 생각한다. Kernel 영역에 존재하는 자원에 접근하기 위해 외부 I/O들과 통신하게 해주는 통번역기와 같다. 컴퓨터 내부의 통신시스템을 활용하여 외부의 하드위에어들에게 명령어를 전달해주게 된다.

 

# System Call(시스템 콜) 종류

C언어를 기준으로 설명하도록 하겠다.(JAVA는 고수준의 언어이기 때문에 API를 제공)

  1. Process 제어
    • 새 Process 생성 : frok( ) 
    • Process 실행 :  exec( ) 
    • Process 대기 :  wait( ) 
    • Process  종료 :  exit( ) 
  2. File 조작
    • 파일 열기 :   open( ) 
    • 파일 읽기 :   read( ) 
    • 파일 쓰기 :   write( ) 
    • 파일 닫기 :   close( ) 
  3. Device 관리
    • 장치제어 :  ioctl( ) 
    • 장치에서 읽기/쓰기 :  read( ) / write( ) 
  4. 정보 유지
    • Process Id 가져오기 :  getpid( )  
    • Process 일시 중지 :  sleep( ) 
  5. 통신
    • 파이프 생성 :  pipe( ) 
    • 공유 메모리 접근 :  shmget( ) 
    • 파일 또는 장치를 메모리에 맵핑 :  mmap( ) 
  6. 보호
    • 권한 관리

 

System Call을 위와 같이 6개의 종류로 사용될수 있다. C, C++과 같은 저수준의 언어에서 System Call을 사용할 수 있게된다. 

 

# System Call(시스템 콜) 흐름

System Call을 공부하다보면 User 모드에서 Kernel 모드를 거쳐 System Call이 반환하는 그림을 많이 볼 수 있다.

 

System Call을 공부하는 것은 그렇게 어렵지는 않다. 공부하면서 왜 라는 질문이 던져지지 않는다. 당연히 Kernel에는 중요한 자원을 많이 관리하기때문에 사용자/Kernel을 나눌 수 밖에 없었고 결국 나누어진 영역에서 상대방 영역에 접근하기 위해서는 모종의 Interface가 필수적인 요소이다. 집을 지을때 방을 만들어두고 방문이 없으면 무슨 소용인가? 들락날락 할 수 있는 방문이 있어야 한다. System Call은 그런 것이다.

 

물론, 위에 System Call이 동작하는 원리가 공부하기 쉽고 이해하기 쉽게 매우 간단하게 그려진 것이다. C나 C++ 내부에는 더 복잡하게 동작할것이라는 것이다. Interface와 같은 역할을 하는것은 OS뿐만 아니라 Network, Language 등등에서 많이 등장하게 되니 꼭 동작 방식은 기억하는 것이 좋을거 같다.

반응형