ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [혼공컴운]스레드와프로세스
    CS지식/운영체제 2024. 2. 23. 13:43

    프로세스(Process)

     

    프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스라고 할 수 있습니다. 운영체제는 각 프로세스에게 독립적인 메모리 공간을 할당하고, 이 공간에서 프로세스는 코드를 실행하며 작동합니다.

    프로세스의 메모리 공간은 크게 네 가지 영역으로 나뉘어져 있습니다: Code, Data, Heap, Stack입니다.

    1. Code 영역: 이곳은 프로그램의 소스 코드가 저장되는 곳입니다. 우리가 작성한 함수, 조건문, 반복문 등의 코드가 이곳에 위치하게 됩니다.
    2. Data 영역: 전역 변수나 정적 변수가 저장되는 공간입니다. 프로그램이 실행되는 동안 이 변수들의 값은 변할 수 있지만, 메모리 공간의 크기는 변하지 않습니다.
    3. Heap 영역: 동적으로 할당되는 데이터가 저장되는 공간입니다. 프로그래머가 필요에 따라 메모리를 할당하거나 해제할 수 있는 공간으로, 필요에 따라 크기가 변할 수 있습니다.
    4. Stack 영역: 함수의 호출 정보와 지역 변수가 저장되는 공간입니다. 함수가 호출될 때마다 해당 함수의 반환 주소와 지역 변수 등이 스택에 쌓이게 되며, 함수가 종료되면 반환 주소를 따라 원래 위치로 돌아갑니다.

    이처럼 프로세스의 메모리는 서로 다른 용도와 규칙을 가진 여러 영역으로 나뉘어져 있습니다.

     

    다음으로 알아볼 정보는 PCB와 문맥교환입니다.프로세스에서 중요한 키워드입니다.

    프로세스 제어 블록(PCB)  문맥 교환

    프로세스 제어 블록(Process Control Block, PCB)은 컴퓨터 운영체제에서 프로세스의 정보를 저장하고 있는 중요한 자료구조입니다. 각각의 프로세스는 자신만의 PCB를 가지고 있어서, 운영체제가 프로세스를 관리하는 데 필요한 정보를 한 곳에서 찾을 수 있게 합니다.

    PCB에는 여러 가지 정보가 저장되는데, 이 중 몇 가지를 예로 들어 보겠습니다

    • 프로세스 ID : 프로세스의 고유한 값을 의미합니다.
    • 프로세스의 상태: 프로세스가 현재 어떤 상태인지를 나타냅니다. 예를 들어 실행 중인지, 대기 중인지, 종료된 상태인지 등입니다.
    • 프로그램 카운터 값: 다음에 수행할 명령어의 위치를 가리킵니다.
    • CPU 레지스터 값: CPU에서 현재 어떤 연산을 수행하고 있는지, 그 결과는 어떤지 등을 나타냅니다.
    • CPU 스케줄링 정보, 메모리 관리 정보, 입출력 상태 정보 등

    그래서 이 PCB가 왜 필요할까요? 그 이유는 '문맥 교환' 때문입니다.

    문맥 교환(Context Switching)이란, CPU가 한 프로세스에서 다른 프로세스로 제어권을 넘겨주는 과정을 말합니다. 예를 들어, 프로세스 A가 실행 중일 때 입출력을 해야 한다면, 프로세스 A는 대기 상태가 되고, 준비 상태에 있던 다른 프로세스 B가 실행 상태가 됩니다. 이럴 때 프로세스 A의 상태를 PCB에 저장하고, 프로세스 B의 상태를 PCB에서 불러오는 것이죠.

    이렇게 문맥 교환을 통해 여러 프로세스가 동시에 실행되는 것처럼 보이게 하는 것이 멀티태스킹입니다. 그런데 문맥 교환에는 시간이 소요되며, 이는 시스템의 성능을 저하시키는 요인이 됩니다. 따라서 문맥 교환의 횟수를 최소화하는 것이 중요합니다.

    마지막으로, 프로세스 문맥교환스레드 문맥교환에 대해 알아보겠습니다.

    프로세스 문맥 교환은 말 그대로 다른 프로세스로 제어권이 넘어갈 때 발생합니다. 이 때는 메모리 주소 체계가 달라서, 메모리 맵핑 정보를 다시 불러와야 합니다.

    반면에 스레드 문맥 교환은 같은 프로세스 내의 다른 스레드로 제어권이 넘어갈 때 발생합니다. 스레드는 같은 프로세스 내에서 메모리를 공유하기 때문에, 메모리 맵핑 정보를 다시 불러올 필요가 없습니다. 따라서 스레드 문맥 교환은 프로세스 문맥 교환보다 빠르다고 할 수 있습니다.

     

    스레드(Thread)

    스레드는 프로세스 내에서 실행되는 여러 흐름의 단위입니다.

    스레드의 특징은 프로세스 내에서 각각 Stack은 따로 할당받고, Code,Data,Heap영역은 공유하며 사용한다는 특징을 가지고 있습니다.

    한 프로세스 내에서 여러 스레드가 동시에 실행될 수 있으며, 각 스레드는 공유된 메모리 공간을 가지고 있어서 데이터 공유가 용이합니다.

    스레드의 장점은 멀티태스킹 시스템에서 여러 작업을 동시에 처리할 수 있다는 점입니다. 또한, 문맥 교환이 프로세스보다 경량화되어 있어서 오버헤드가 적습니다.

    하지만, 스레드 간의 데이터 공유 문제나 동기화 문제를 해결하기 위한 추가적인 처리가 필요합니다. 이는 공유 자원에 대한 접근을 동기화하여 충돌을 방지하고, 교착상태(Deadlock)를 방지하기 위한 조치가 필요합니다.

     

    멀티프로세스: 독립적인 프로세스를 활용한 방식

    멀티프로세스는 여러 개의 독립적인 프로세스를 동시에 실행하는 방식입니다. 각 프로세스는 자신만의 메모리 공간을 가지고 있습니다. 이 때문에, 한 프로세스에서 문제가 발생하더라도 다른 프로세스에는 영향을 미치지 않습니다. 각각의 프로세스는 독립적으로 실행되기 때문에, 동기화 작업이 필요하지 않습니다.

    하지만, 이러한 독립성은 자원 소모가 크다는 단점을 가지고 있습니다. 각 프로세스가 메모리를 개별적으로 차지하고, 프로세스 간 통신을 위해 IPC(Inter-Process Communication)를 사용해야 합니다. 또한, 프로세스 간에 제어를 넘기는 '문맥 교환'의 비용이 큽니다.

    멀티스레드: 하나의 프로세스 내에서 여러 스레드를 활용한 방식

    반면, 멀티스레드는 하나의 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 방식입니다. 스레드는 프로세스의 메모리를 공유하기 때문에, 서로 통신하는 데 추가적인 비용이 들지 않습니다. 이로 인해, 멀티스레드 방식은 메모리 사용이 효율적이며, 문맥 교환의 비용도 상대적으로 작습니다.

    그러나, 스레드들이 메모리를 공유한다는 것은 공유된 자원의 관리가 필요하다는 것을 의미합니다.그리고, 한 스레드에서 발생한 문제가 전체 프로세스에 영향을 미칠 수 있습니다.

     

    각각의 장단점을 가지고 있기 때문에, 각각의 상황에 알맞게 선택해 사용해야합니다.

     

     

    멀티스레드관련 추가정보)

    쓰레드는, 독립적으로 스택 영역과 PC Register를 갖고 있습니다. 그 이유는 쓰레드의 정의와 컨텍스트 스위칭에 있습니다.

     

    1) 독립적으로 스택 영역을 갖는 이유 : 

     스택 영역은 함수의 실행과 관련이 있습니다. 독립적으로 스택을 갖는다는 것은 곧 독립적으로 함수 호출이 가능하다는 것을 의미합니다. 즉, 프로세스 내의 독립적인 실행 흐름을 만들기 위해 쓰레드마다 스택 영역을 갖습니다.

     

    2) 독립적으로 PC Register를 갖는 이유 : 

     PC Register 값은, 쓰레드가 명령어를 어디까지 수행했는 지를 나타냅니다. 쓰레드는 CPU를 할당받았다가, 스케줄러에 의해서 선점당해 컨텍스트 스위칭이 일어납니다. 따라서 다시 해당 쓰레드가 실행될 때 어디까지 실행이 되었는지 알아야 하므로 독립적으로 PC Register 값을 갖게 됩니다.

    'CS지식 > 운영체제' 카테고리의 다른 글

    [혼공컴운] 운영체제 시작  (0) 2024.02.23
    [OS]가상메모리  (0) 2022.05.14
    [운영체제]메모리관리  (0) 2022.05.07
    [운영체제] 교착상태(Deadlock)  (0) 2022.04.17
    [운영체제] 프로세스 동기화  (0) 2022.04.10
Designed by Tistory.