개발자는 기록이 답이다

운영체제 Ch.3 - 시스템콜(system call)과 modebit 본문

CS/운영체제

운영체제 Ch.3 - 시스템콜(system call)과 modebit

slow-walker 2023. 10. 16. 21:25

시스템콜

시스템콜이란 운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의

서비스를 받기 위해 커널 함수를 호출할 때 이를 거쳐서 호출하도록 설계되어있습니다. 프로세스 관리(생성, 삭제 등), 파일관리, 디바이스 관리, 시간 및 날짜 관련 시스템, 프로세스 간 통신 때 이를 통해 커널함수를 호출합니다. 예를 들어 프로세스를 종료하는 kill()이라는 함수가 있습니다. 이 함수를 발동시키면 시스템콜을 거쳐서 커널함수가 호출되게 됩니다.

시스템 콜의 과정

만약 유저프로그램이 I/O 요청을 위한 트랩을 발동했다고 하면 다음과 같은 과정이 발생됩니다

  1. 유저 프로그램이 I/O 요청 트랩발동합니다.
  2. 올바른 I/O 요청인지 확인합니다.
  3. 유저 모드가 시스템콜을 통해 커널모드로 변환합니다.
  4. 이후 커널함수를 실행합니다.

ex) fs.readFile()

  1. 특정 프로그램을 실행합니다.
  2. 프로그램은 초기에 유저 모드 (Modebit=1)에서 실행되며, 이 상태에서는 권한이 제한됩니다.
  3. 파일을 읽기 위해 IO 요청을 합니다.
  4. 이때, 시스템 콜이라는 인터페이스를 통해 유저 모드에서 커널 모드로 변경됩니다. Modebit는 0으로 변경됩니다.
  5. "a.js"와 같은 파일은 실제로 컴퓨터 디스크에 저장된 파일입니다. 디스크를 접근하는거라 디스크 내의 파일 시스템을 통해 해당 파일을 읽어야 합니다.
  6. 파일 시스템과 관련된 커널 함수를 호출합니다.
  7. 호출이 끝나면 다시 시스템 콜을 통해 유저 모드로 전환됩니다.
  8. 이제 프로그램은 다음 줄을 실행합니다.

이런 순서로, 프로그램은 파일을 읽는 과정을 수행하며, 유저 모드와 커널 모드 간의 전환을 사용하여 파일 시스템과 상호작용합니다

 

커널함수

커널안에 있는 여러개의 함수를 뜻합니다. (native function이라고도 합니다.)

커널

운영체제의 핵심 부분이자 시스템콜을 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 합니다.

유저 모드

유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드입니다.

커널 모드

모든 컴퓨터 자원에 접근할 수 있는 모드입니다.

modebit

시스템콜이 작동될 때 modebit을 기반으로 유저 모드와 커널 모드를 구분합니다. modebit 은 1 또는 0의 값을 가지는 플래그 변수이며 1은 유저모드, 0은 커널모드를 가리킵니다.

시스템 콜의 장점

유저 프로그램은 시스템콜을 기반으로 커널과 분리가 되게 됩니다. 즉, 유저프로그램은 복잡한 파일 시스템과 프로세스 생성 등에 대한 내부동작을 신경쓸 필요가 없습니다.

 

예를 들어, mac OS에서 파일을 읽어오는 과정이 어떻게 이뤄지는지 모르지만,

 fs.readFilsSync(pt)

코드 한 줄로 mac OS의 파일시스템을 이용할 수 있습니다. 이처럼 추상화 계층이 있기 때문에 내부 동작을 신경스지 않아도 됩니다.

 

또한, 운영체제의 관리하에 프로그램이 운영되므로 시스템의 안정성과 보안이 강화됩니다.

예를 들어 공격자가 만든 카메라 앱 프로그램이 그냥 아무런 제약없이 커널에 접근할 수 있다고 가정해봅시다. 카메라에 관련한 메모리 등이 오염될 수 있고 그러면 카메라는 내 의도와는 관계없이 켜지게 되어 사생활이 노출 될 수도 있습니다. 이러한 것을 방지하기 위해 유저 모드에서 시스템 콜로만 커널 모드에 진입할 수 있는 단 하나의 통로를 만든 것입니다.

 

더 쉽게 얘기해서 만약에 카메라 앱 같은 경우에는 운영체제가 관리를 안해서 유저모드와 커널모드를 분리하지 않았을 경우, 내가 카메라앱을 키지도 않았는데 해킹당해서 사생활이 노출 될 수도 있습니다. 그런 보안적인 것들을 위해 시스템 콜이라는 계층이 있는 것이고, 커널모드 일때만 IO적인 요청을 처리할 수 있는 것입니다.