}

블로그 소개


*여러분들의 따듯한 댓글은 5%, 팔로우는 10% 블로그 포스팅 속도와 퀄리티를 높여줍니다.*

프로필

팔로우 해주시면 포스트할 때 큰 힘이 됩니다!!! 사실 저도 이 팔로우가 무슨 기능이 있는지는 모르겠습니다만, 팔로우 수가 늘면 '날 응원해주는 사람들이 있구나' 생각이 들어서 큰 힘이 됩니다.

팔로어

다른 페이지로 이동


리눅스 독학 페이지 운영체제 독학 페이지 네트워크 독학 페이지 하드웨어 독학 페이지 프로그래밍 독학 페이지 보안 페이지

오스 페이지 다이어트 정보 페이지 게임 정보 페이지 인생 꿀팁


****사진을 클릭하시면 페이지로 이동할 수 있습니다!****

<===***===↓↓↓You can use translate on the chrome↓↓↓===***===>

2021년 1월 18일 월요일

시스템콜이란? 쉽고 자세히!

 안녕하세요~ 마무입니다. 오늘은 모든 운영체제에서 사용되는 "시스템콜이란", "syscall", "system call"이란 것이 무엇인지 알아보는 포스트를 써보도록 하겠습니다!

오늘 이 포스트를 다 읽으시면 다음에 시스템 콜(system call)이란 용어가 나와도 헷갈리지 않고, 이해가 되실겁니다!

---목차---

1. 기본적인 운영체제 기능

2. system call이란? 사용하는 이유

i)syscall이란?

----------

입니다.


여기에 없는 정보나 더 궁금하신 정보들은 

운영체제 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_14.html

리눅스 독학페이지 : https://mamu2830.blogspot.com/p/blog-page_13.html

에 있을 수 있습니다!



1. 기본적인 운영체제 기능


'시스템콜(system call)'이란 것을 알기전에 저희는 먼저 기본적인 운영체제의 기능에 대해서 알고 있어야합니다. 

물론 당연히 이 부분은 알고 계신 분들이 많을거라 생각이 듭니다!(여러분들은 컴퓨터쪽 종사자일테니까요 하핳)

하지만! 잘 모르는 사람들이 있을수도 있기에 그런 분들을 위해 간략하게 알려드리도록 하겠습니다.

기본적으로 '운영체제(Operating System)' Operating(운영)이란 이름에 걸맞게 컴퓨터를 제대로 실행 및 사용하게 해주는 프로그램입니다.

운영체제가 하는 역할과 중요성은 차마 다 쓰지 못할정도로 너무나 많습니다. 

우리 눈에 정~말 간단해 보이는 마우스를 움직이는 것부터(마우스란 하드웨어로부터 오는 신호를 모니터 픽셀과 함께 해석하여 필요한 계산값을 CPU에 전달하고, 계산받은 값을 프로그램에 전달해주거나 화면에 보여주는 것) 

우리가 더블 클릭한 프로그램 실행과 종료까지...(프로그램의 실제 위치를 찾아가고{정확힌 파일시스템 역할}, 데이터가 저장된 디스크 위치를 찾고, 그 위치에 적힌 데이터가 얼마나 메모리를 필요로 할지 계산하고, 프로그램의 코드를 메모리에 올리고{실행하고}, 종료)

지금 딱 운영체제가 하는 수~ 많은 역할 중 딱 2개만 말했지만 사실 그 2개도 각각 엄청 복잡한 과정을 통해 이루어진다 것이죠... 그러니 말하지 않은 운영체제 역할들을 말하려면 끝이 없겠죠?(사실 말한 2가지도 간략하게 설명한 것으로, 실제 과정은 더욱 어마어마 합니다..)

이정도로 운영체제가 하는 역할이 사실 많고 중요하기에 그냥 운영체제가 없으면 컴퓨터를 사용 못한다. 라고 생각해도 될 정도죠.

그만큼 복잡하고 중요한 프로그램이 바로 '운영체제'이기 때문에 컴퓨터 사용에 필수적이며, 그래서 운영체제의 가격이 비싼것도 사실 어느정도 이해가 되는 부분입니다.

음... 운영체제가 중요한 건 알겠는데 그게 'system call'이란 것과 무슨 관계가 있나요?

후후.. 무슨 관계가 있냐고요? 바로 시스템 콜(system call)이란 것이 바로 프로세스가 운영체제(system)에게 운영체제 기능 요청하는(call) 것이기 때문이죠!



 2. system call이란? 사용하는 이유


'시스템콜(system call)'이란 프로세스가 컴퓨터를 관리하는 시스템(system)인 운영체제에게 어떤 기능(서비스)를 사용하게 해달라고 요청(call)할 때 사용하는 방법입니다.

위에서 알려드린대로, 컴퓨터의 대부분의 활동은 운영체제를 통해 실행 및 관리가 됩니다.

실행중인 프로그램인 '프로세스'도 결국 운영체제를 통해 실행이 되고 관리가 되죠. 

예시를 들자면 '운영체제'회사 관리자'프로세스'는 말단 직원인겁니다. 

'프로세스3'이란 직원이 자기 자리에 앉아 자신의 프로그램 코드를 실행중이였는데, 만약 자기 프로그램외 특정 파일 데이터를 필요로 한다고 쳐봅시다. 이럴 때 그냥 조용히 독자적으로 파일 데이터를 읽어들일 수 있을까요? 

아니죠~ 멋대로 다른 파일을 읽어들이는 것도 문제지만 기본적으로 파일을 읽고, 메모리에 데이터를 올리는 것은 운영체제의 역할입니다.

이런 경우 '프로세스3(ps3)'는 관리자 운영체제에게 허락을 요청(call)을 할 수 밖에 없습니다.

어떤 뭐뭐 파일 데이터가 필요하니 사용해도 되겠습니까? 라고 말이죠.

비단 특정 파일이 필요한 경우만 해당되는게 아니죠~ 당연히 운영체제가 관리하는 모든 자원(네트워크, 디스크, 메모리 등등등)을 '프로세스'가 필요로 할 경우 전부다 이 '시스템콜(system call)'을 통해 사용해야합니다.

파일을 여는 것(open)도 그렇고, 기존 프로세스를 다른 프로그램으로 바꾸는 것(exec), 똑같은 프로세스를 하나 더 만드는 것(fork) 그리고 다른 프로세스에게 어떤 행위를 지시하는 시그널(신호)을 보낼 때(kill)도 말이죠.  

이런 이미지처럼 말입니다.




그리고 그런 시스템 콜들은 실제로 운영체제에서 사용하라고 만들어놓은 코드들(함수)로, 프로그래밍을 할 때 시스템콜이 들어있는 헤더파일을 불러와서 사용합니다.

'리눅스인 경우'에는 man 페이지에 '시스템 콜(함수)'가 어떤 헤더파일에 들어있고그 함수에서 사용하는 변수나, 함수의 이름들 또 매개변수를 무엇을 받으며, 어떤 값을 반환하는지 등등 자세하게 정보가 적혀있습니다.



이렇게 말이죠. 

또한 여러분들도 예상하시다시피 프로세스가 실행되면서 실시간으로 필요한 자원들은 정말 어마어마하게 다양하고 많을 겁니다. 그렇기에 당연히 필요할 때마다 사용하라고 만들어놓은 시스템콜(system call)종류도 엄청나게 많습니다.

현대 운영체제들은 보통 수 백개의 시스템콜들을 가지고 있다고 합니다.(리눅스와 OpenBSD는 300개가 넘는 수, NetBSD는 500개에 가까운 수, 윈도우 7인 경우 700개 가까이 있다고 합니다) 출처 : https://en.wikipedia.org/wiki/System_call

그리고 엄청나게 많은 시스템 콜(system call)들중에 위에서 앞서 언급한 우리들이 잘 아는 시스템콜인 "open(), exec(), fork(), kill()"들이 포함되는 것이죠!


i) syscall이란? 


음.. 그런데 제목에 있는 syscall이란 뭔가요?

아! 제가 말을 안했군요! 컴퓨터 공학에선 수 많은 프로그램 및 명령어들을 줄여서 쓰는 것처럼 이 'system call'을 줄여서 'syscall'이라고도 합니다. 딱히 어렵지 않죠? ㅎㅎ




이야 그 동안 너무 오랫동안 포스트를 못해서 죄책감이 좀 있었습니다... 포스트를 못하는데도 많은 분들이 정말 따뜻한 댓글들을 달아주셔서 말이죠...

사실 헬스장에 가서 운동하고 그 뒤 카페에서 가서 아메리카노 하나 마시며 포스트하는게 제 최근 일상이였는데, 코로나 정책이 강화됨에 따라 그 모든 걸 할 수가 없어서 되게 우울하게 살고 있었거든요... 집에서 조용히 포스트 쓰려고 노력해도 잘 안써지고... 

그러나! 오늘부터 다시 비록 9시까지지만 헬스장과 카페를 갈 수 있게 됐기에 다시 열심히 포스트를 해보려 합니다! 

하... 헬스장에서 운동 끝내고 카페에 가서 마시는 이 아메리카노가 이렇게 맛있었는지 몰랐었네요... 정말 눈물나게 맛있슴다..

소소한 일상이 이렇게 귀중한지는 역시 잃어봐야 아는 것 같아요 ㅠㅠ

여러분들의 따뜻한 댓글과 좋아요, 팔로우 클릭을 저에게 큰 힘이 돼 포스트 퀄리티 향상에 큰 도움이 됩니다! 

다음에는 "API"란 것과 "system call과 API"차이에 대해서 포스트해보겠습니다!



댓글 2개:

  1. 설명 잘 하시네요. 잘 읽었습니다

    답글삭제
    답글
    1. 잘 읽으셨다니 다행입니다 ㅎㅎ 따뜻한 댓글 감사합니다!

      삭제

#1 여러분들이 소중한 시간을 투자해 달아주시는 따뜻한 댓글들은 저에게 정말 큰 힘이 됩니다!

#2 저의 각 포스트들은 엄청난 노력과 시간 투자를 통해 만들어진 포스트들로, 무단 복제나 모방하는 것을 금지합니다.

#3 저의 포스트에도 틀린 정보가 있을 수도 있습니다. 그럴 경우 친절한 말투로 근거와 함께 댓글로 달아주시면 정말 감사하겠습니다!

* 바쁜 개인 일정으로 댓글 답변이 많이 느립니다 *