번외3: 프로그램, 프로세스, 쓰레드

Hyeonmin Han·2022년 5월 5일
0

Computer Network

목록 보기
6/8

간단 정리

  • 프로그램 : 컴퓨터가 일련의 동작을 하게끔 하는 명령어들의 집합
  • 프로세스 : 운영체제 내에서 실행되고 있는 프로그램
  • 쓰레드 : 프로세스 내에서 실행되고 있는 작업 단위. 기본적으로는 프로세스 당 한 개의 쓰레드로 동작함

프로그램 (Program)

프로그램을 설명하기 전에, 명령어에 대해 알아보자.

명령어 (Instruction)

명령어란, CPU가 어떤 동작을 취할 것인지를 나타내는 가장 작은 단위이다. 예를 들어, CPU 내부의 레지스터 중 r1, r2가 있다고 하자. 그리고, r1에 저장된 값과 r2에 저장된 값을 더한 값을 r1에 저장한다는 명령어가 있다고 하자. 이러한 명령어를 실행함으로써, CPU는 먼저 r1과 r2에 저장된 값을 가져온 후 CPU 내부의 ALU (Arithmetic and Logic Unit; 산술 논리 연산 장치)에서 덧셈 연산을 수행한다. 이후, 계산 결과값은 다시 r1 레지스터에 저장된다. 이처럼 명령어는 CPU 안에서 어떤 작업을 처리한 후, 처리한 결과를 레지스터 혹은 메모리에 반영하는 작업을 수행한다. 물론, 처리한 명령어에 따라 반영되지 않을 수도 있다.

프로그램의 실행 과정

프로그램을 실행하는 과정에 대하여 알아보자.

  • 프로그램은 명령어의 집합이다. 다시 말해, 하나 이상의 명령어들이 프로그램을 구성하고 있는 것이다. 일반적으로, 명령어는 CPU에서 한 번에 하나씩 실행할 수 있다. 그렇기 때문에, 처리할 명령어가 어떤 것인지 특정할 필요가 있다. 이러한 기능을 수행할 레지스터가 이러한 이유 때문에 CPU에 존재하는데, 이를 프로그램 카운터 (Program Counter; PC)라고 한다.

  • 프로그램이 실행되는 과정은 이렇다.

    1. 저장 장치에 있는 프로그램이 실행될 때, 메인 메모리에 프로그램을 구성하는 명령어들이 로드된다.
    2. 프로그램 카운터가 처리할 명령어가 위치한 메모리 주소를 지정한다. CPU가 명령어를 처리할 때가 되면 프로그램 카운터에 저장된 주소를 가지고 메인 메모리에서 명령어를 가져온다. (Fetch)
    3. 가져온 명령어를 해독 (Decode) 하여 처리해야 할 명령어가 무엇인지, 명령어에서 쓸 피연산자는 무엇인지 알아낸다.
    4. 해독한 명령어의 내용을 바탕으로 CPU는 일련의 작업을 수행한다. (Execute)
    5. 작업 수행 중 레지스터 (Access Register) 혹은 메인 메모리 접근 (Access Memory)이 필요할 경우, 이를 수행한다. 처리가 끝나면 다음에 처리할 명령어의 주소를 프로그램 카운터에 업데이트하고 (Writeback), 다음 명령어를 프로그램 카운터에 저장된 메모리 주소를 통해 가져온다.

프로세스 (Process)

프로세스는 운영체제에서 현재 실행 중인 프로그램을 의미한다. 실제 컴퓨터의 운영체제에서는 한 번에 하나의 프로그램만이 실행되고 있지 않고, 여러 개의 프로그램이 동시에 실행되고 있다. 실제로는, 운영체제가 여러 개의 프로그램이 동시에 실행될 수 있도록, 스케줄링과 같은 기법으로 운영체제 내부의 시스템 리소스를 실시간으로 관리하고 있기 때문이다. 운영체제에 의해 리소스를 제때 할당받고, 동시에 실행되고 있는 프로그램을 프로세스라고 할 수 있다.

스레드 (Thread)

스레드는 프로그램 내에서, 특히 프로세스 내에서 실행되는 작업의 흐름, 작업 단위를 의미한다. 일반적으로 프로세스 내에서는 하나의 스레드가 동작하지만, 프로그램에 따라서는 두 개 이상의 스레드가 동작할 수 있다. 이러한 방식을 멀티스레드 (Multithread)라고 한다.

멀티프로세스와 달리, 멀티스레드에서는 스레드들이 프로세스 내에 있는 메모리를 공유해서 사용할 수 있다. 그리고, 프로세스 간 작업 전환 속도보다 스레드 간 작업 전환 속도가 더 빠르다는 특징이 있다.

스레드가 같은 메모리를 공유해서 사용할 때, 메모리에 두 개 이상의 스레드가 접근하는 상황이 발생하면, 접근한 순서에 따라 메모리에 저장된 값 또는 프로그램의 실행 결과가 달라질 수 있다. 따라서 멀티스레드 프로그램을 작성한다면, 이러한 상황을 피할 수 있는 방법을 반드시 적용해야 한다.

출처

profile
네트워크, 클라우드에 관심이 있는 시스템 엔지니어 지망생

0개의 댓글