본문 바로가기
학교 공부/분산 및 병렬처리

[분산 및 병렬처리 시스템] 프로세스란?

by 그적 2020. 10. 23.

 분산 시스템의 "전체적인 숲"을 보면서, 분산 시스템에서 주로 많이 사용하는 소프트웨어 아키텍처나 시스템 아키텍처를 배웠다. 혹은 구조적인 측면(client-server, p2p, hybrid architecture)을 보았다. 이번엔 수행하고자 하는 실제 애플리케이션에서 기본 동작하기 위해서 "프로세서"라는 개념을 배워보겠다.

  ** 프로세서는 통상적으로 하드웨어를 뜻하고, process는 소프트웨어라고 의미하는 것을 기억하자.

 

분산 시스템이 아닌 시스템에서 스레드를 사용하는 것은 단순한 프로그램을 수행하는 것과 같다. 즉, 컴퓨터는 하나의 CPU를 가지고 프로세서가 프로그램을 하나씩 돌리는 것이다. 우리도 알다시피 하나의 프로세서에는 하나의 프로그램만 수행할 수 있는데, 그럼 우리가 멀티적으로 움직일 수 있는 건 어떻게 가능한가?

 

Virtualization이다. 실제 운영체제가 주요하게 하는 역할이 "컴퓨터 하드웨어의 구성요소 가상화"인 것이다. 이 가상화를 통해서 multi programming이 가능하도록 하는 것이다. 이 의미는 실제로는 물리 프로세서가 하나인데, 단독으로 사용할 수 있는 프로세스를 제공하는 것처럼 보이도록 "illusion"을 주는 것이다.

 ** virtualization은 클라우드의 필수적인 요소이다. 

 

프로세스란(Process)?

: 프로그램 단위의 기능적 관점에서는 Independent Execution unit, 혹은 Indenpendent Address domain으로 부른다. 이 두 가지 언어 앞에 모두 indenpendent가 붙는데, "독립적이다"는 건 메모리 상에서 address domain이 할당되어 프로세스가 수행할 수 있는 공간이 각각 존재한다는 것이다. 따라서 다른 프로세스의 메모리 영역을 침범하거나 데이터를 호출할 수 없기 때문에 독립적이라고 말한다.

 프로세스가 서로 통신을 할 때, IPC(Inter Process Control) 과정을 거친다. pipe, shared memory, signal, socket 등을 사용하고, 유저 프로세스가 운영체제에게 system call을 요구하여 자원을 사용할 수 있다. 그 안에서 유저 모드에서 커널 모드로 스위칭이 일어나기 때문에 컴퓨터에게 부담이 된다.

Context Switching as the result of IPC

 

 

 이러한 문제를 해결하기 위해 가벼운 형태의 execution unit이 필요하다. 그것이 thread(스레드)이다.

스레드의 장점은 애플리케이션이 커뮤니케이션을 할 때, 가벼우면서도 응집력이 강하다는 것이다. 기존에는 프로세스 각각에 할당된 address domain을 공유할 수 없었는데 스레드들이 하나의 프로세스 도메인 안에 존재하여 공유 메모리를 가지고 서로 상호작용할 수 있다.

프로세스 내 자원들 간에 공유가 이뤄질 수 있는 스레드는 자원 사용에 대해서 충돌할 일이 없다. 하지만 이로인해 시스템의 consistency가 깨질 수 있으므로 mutex, condition valuable을 잘 활용해야 한다.

 

>> 더 구체적인 내용은 jihyeong-ji99hy99.tistory.com/25?category=813054 를 참고하자!

 

(추가)

multi thread 형태가 나오게 된 이유는 시스템의 성능 향상을 목적으로 한다. concurrent 하거나 parallel 한 방법으로 CPU를 운영하면서 수행 성능이 더 좋아지도록 하기 위해서이다.

 

댓글