관리 메뉴

클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

운영체제 시작하기 4 - 운영체제의 큰 그림 3 : 시스템 호출 실습해보기 본문

알고리즘 및 자료 관리/알고리즘 & 코딩테스트

운영체제 시작하기 4 - 운영체제의 큰 그림 3 : 시스템 호출 실습해보기

huenuri 2024. 10. 17. 11:53

시스템 호출에 대한 심화 학습을 진행해보려고 한다. 시스템 호출은 운영체제 서비스를 제공받기 위한 방법이므로 시스템 호출 종류만 잘 파악해도 해당 운영체제를 깊이 있게 이해할 수 있다. 이곳에서는 유닉스, 리눅스의 운영체제에서 사용하는 대표적인 시스템 호출의 종류에 대해 알아보겠다. 
 
 
우선 시스템 호출을 정리한 테이블을 살펴보기로 하자.

시스템 호출의 종류

https://minchul.net/self-learning-cs/system_calls/syscalls.html

리눅스 시스템 호출 정리 이하 문서는 리눅스의 시스템 콜(x86)을 일부 정리한 문서입니다. 시스템 호출의 이름(Name)을 클릭하면 해당 시스템 호출에 대한 자세한 정보를 안내하는 공식 페이지로

minchul.net

 
 

 
이런 식으로 시스템 호출이 정리되어 있다. 이 외에도 정말 많은 시스템 호출이 있지만 일부만 정리한 것이다. 그리고 Difinition에서 링크를 클릭하면 해당 시스템 콜에 대한 라인 넘버가 정의되어 있다. 
 

 
리눅스 코드를 코드상으로 관찰하고 싶을 때 참고해볼 수 있을 것이다.


 
 
 
 

리눅스에서 시스템 콜 호출하는 방법

이제 리눅스의 우분투를 활용해 시스템 콜을 관찰하는 방법을 살펴보려고 한다.

 
STRACE를 사용하고자 하면 해당 도구를 설치해야 한다. 이 도구를 사용해서 시스템 호출을 관찰할 수 있게 된다.
 

 
이렇게 ls라고 치면 현재 파일과 폴더의 경로가 보인다. ls 명령어도 바이너리 파일로 실행이 가능하다.
 

 
bin/ls를 치면 파일이 실행되는 것이 보인다. 이 명령어를 실행할 때도 시스템 콜이 여러 번 발생할 수 있다. 이때 사용하는 명령어가 strace이다. 그 뒤에 ls 명령어가 위치해 있는 경로를 써주면 ls라는 명령어가 호출하는 시스템 콜의 종류를 보여준다.
 

 

 
예를 들어 hello, honging!이라는 문자열을 출력하는 간단한 프로그래을 만들어보겠다.
 

 
이 또한 strace를 통해 시스템 콜을 호출해보았다.
 
 
 

 
비교적 간단한 프로그램임에도 내부적으로는 시스템 콜을 빈번하게 호출하는 것을 알 수 있다.


 
 
 
 
 

macOS에서 시스템 호출하는 방법

리눅스와 미고는 운영체제의 결이 같다. 윈도우 운영체제와는 결이 다르다. 
 

 
여기서도 ls 명령어의 종류를 볼 수 있다.
 
 

 
리눅스에서는 strace라는 명령어로 시스템 호출을 했지만, 미고에서는 sudo라는 관리자 권한이 필요하다.
 

 
 
개발자가 작성하는 프로그래밍 언어들은 내부적으로 위와 같은 시스템 호출을 통해 실행된다. 가령 C 언어에서 무언가를 화면에 출력하라는 코드인 printf도 내부적으로 시스템 호출을 통해 실행된다.
운영체제는 제공하는 서비스가 매우 다양하기에 시스템 호출의 종류도 다양하다.


 
 
 

학습을 마치고

시스템 호출을 어떻게 작성하고 불러올 수 있는지 배울 수 있었다. 보기만 해도 어렵지만 그래도 학습한 내용을 정리하면서 살펴보았다. 나중에 이런 것들도 직접 코드를 작성하고 다루게 될테니 지금은 맛보기를 한다고 생각할 것이다.
전에는 이런 부분을 공부해볼 생각도 하지 못했겠지만 그래도 관심이 생겼다는 것 자체가 매우 큰 변화와 성장이다.