외로운 Nova의 작업실

c 소켓프로그래밍 공부 - 11(멀티프로세서) 본문

Programming/C

c 소켓프로그래밍 공부 - 11(멀티프로세서)

Nova_ 2022. 3. 31. 13:05

안녕하세요. 오늘부터는 다중 접속 서버에 대해서 배워보겠습니다.

다중 접속서버란 이전에 해왔던 echo서버는 하나의 소켓(손님이 한명)에대해서만 요청을 받고 응답하는 프로그램을 짯습니다.

하지만 이번에는 여러개의 소켓(손님이 여러명)에대해서 요청을 받고 응답하는 프로그램을 짜보겠습니다.

여러개의 소켓을 다루는 방법에는 총 3가지 방법이있습니다.

각각마다 호출하는 함수와 내부적으로 동작하는 방식이 다릅니다.

아래는 그 3가지 종류입니다.

1. 멀티프로세서서 기반 서버

2. 멀티플렉싱 기반 서버

3. 멀티쓰레드 기반 서버

 

첫번째로, 멀티 프로세서에대해서 배워볼까했습니다.

하지만 멀티 프로세서의 기능은 리눅스 운영체제에서 가능한 기능입니다.

정확히말하면 윈도우에서 c언어 수준으로 구현된 함수나 헤더파일이 없다는 뜻입니다.

하지만 멀티 프로세서의 개념은 알고 넘어갑시다!

 

먼저 프로세서란 정확히 "RAM(주기억장치)에 공간을 차지하고 있는 상태에서 실행되는 프로그램" 이라고 정의할 수 있습니다.

 

프로세서의 구조는 아래와 같습니다.

1. 스택 - 호출될 함수들이 들어있는 공간

2. 데이터영역 - 프로그램의 변수들이 들어있는 공간

3. 힙 - 동적 메모리할당에 쓰이는 공간

 

위의 3가지가 모여서 프로세서를 이루게 됩니다.

그렇다면 멀티프로세서라는 건 무엇일까요?

간단하게 똑같은 프로세서를 하나 더 만드는겁니다.

정확하게는 처음에 실행되는 프로세서가 자신과 똑같은 프로세서를 하나 더 만듭니다.

이떄, 프로세서의 구조들을 전부다 복사해서 하나 더 만듭니다.

 

아래는 멀티프로세서의 도식화입니다.

포로세서 1  ---> 프로세서 2

스택1         ---> 스택2

데이터영역1 ---> 데이터영역2

힙1            ---> 힙2

 

위와 같이 스택,데이터영역,힙을 공유하지않고 따로따로 만들게됩니다.

그리고 보통 프로세서1을 부모 프로세서 ,프로세서2를 자식 프로세서 라고 부릅니다.

이를 구현하는 함수들은 리눅스 운영체제에서만 돌어가는 함수들이기때문에 적지않고 동작하는 원리만 살짝 보겠습니다.

뭐 함수들이야 자식 프로세서를 생성하는 함수, 자식 프로세서를 없애는 함수등등이 있겠지만 말입니다.

 

아래는 멀티 프로세서 echo서버의 동작 원리입니다.

먼저 부모 프로세서는 소켓에대해서 연결을 받으면 자식 프로세서를 생성해서 소켓을 자식 프로세서에게 맡깁니다.

자식 프로세서는 요청이 들어오면 알아서 echo를 시키고 종료됩니다.

부모 프로세서는 또 요청이 들어오면 자식프로세서에게 맡깁니다.

자식 프로세서는 요청이 들어오면 알아서 echo를 시키고 종료됩니다.

부모 프로세서는 또 요청이 들어오면 자식프로세서에게 맡깁니다.

자식 프로세서는 요청이 들어오면 알아서 echo를 시키고 종료됩니다.

.

.

.

이것들을 반복합니다.

여기서 중요한 점은 자식 프로세서가 "알아서" 처리한다는 점입니다.

이것이 멀티프로세서의 원리입니다.

 

구현이 궁금하신 분은 인터넷에 찾아보시길 권해드립니다!

다음장은 다중접속서버2번째 멀티플렉싱에대해서 배워보겠습니다.

 

 

 

Comments