ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] Process and Thread - 프로세스와 쓰레드 개념과 차이점
    Computer Science/Operating System 2021. 2. 7. 02:28

    Process

    운영체제에서 말하는 프로세스란, Program in Execution 즉 실행중인 프로그램의 단위를 의미한다.

    단일 작업을 지원하던 이전 OS들과는 달리, 현재의 운영체제는 다중 동시 작업을 지원한다.

    그말은 즉슨 여러 프로세스가 메모리에 동시 적재되고, 한꺼번에 돌아가야 한다는 것을 뜻한다.

    시분할(time sharing)으로 인한 Multi Process 체제에서 각각의 프로세스는 현재 상태를 백업해야 할 필요성을 갖는다.

     

    따라서 각각의 프로세스는 특정 시점에서 프로세스의 상태를 나타내는 요소들의 집합을 뜻하는 Process Context를 갖게 되었다.

    Process Context에는 다음과 같은 요소들이 있다.

    - CPU 수행 상태를 나타내는 Hardware Context(Program counter, Register)

    : 프로세스가 CPU 제어권을 가지고 있을 때의 Register 상태, 프로세스 주소공간 - Code 영역의 어떤 코드를 실행시킬 지 가리키는 PC

    - 프로세스 주소 공간(code/data/stack 영역)

    : 특정 프로세스가 가지고 있는 실행 코드(Code 영역), 전역 변수 등을 저장하는 공간(Data 영역), 함수&지역변수를 저장하는 공간(Stack)으로 구성. 이 때, Stack과 Data 영역은 전역 변수 <-> 스택 구조의 특성을 활용하는 함수 및 지역변수의 활용을 위해 분리되었다. 모든 함수에서 공통적으로 사용하는 전역 변수는 Data 영역에 보관하여 메모리를 절약하기 위함.

    - 관련 커널 자료 구조(PCB, Kernel Stack)

    : 프로세스의 상태에 따라 교체되는 PCB(프로세스 메타데이터 저장소, CPU 스케줄링 시 프로세스의 특징을 담고 있음 ex. ID, state, priority, cpu register, usage 등)

     

    Process State Diagram(프로세스 상태도)

    Running: 현재 CPU를 점유하고 있는 상태. 프로세스의 주체에 따라 커널 모드/유저 모드로 나뉜다. 커널 모드는 권한 있는 명령 실행 권한, 주소 접근 권한, I/O 권한 등을 가진다. 사용자 프로그램은 커널의 권한을 직접 이용할 수 없고, System call, Interrupt 등을 이용해서 요청을 수행할 수 있다. mode bit을 이용해서 각 모드를 구분한다. (ex. 자이로드롭을 타고 있는 상태)

    Ready: 해당 프로세스가 주 메모리에 올라가서, CPU 할당을 대기하는 상태. Dispatcher 또는 단기 스케줄러에 의해 Running 상태로 전환될 수 있다. (ex. 자이로드롭을 타려고 줄을 선 상태)

    Blocked: Running 상태가 종료되었거나 프로세스의 상태 변경으로 인해 task를 지속할 수 없는 경우(I/O 요청 대기중) 전환된다. Event가 다시 발생했거나 I/O task가 완료된 경우 다시 Ready 상태로 전환될 수 있다. (ex. 자이로드롭을 이미 타서 떠났거나, 다시 타기 전 화장실에 가서 줄을 대기하지 않는 상태)

    New: 프로세스가 처음 생성됐을 때의 상태. Ready 상태로의 승인을 기다린다. 일반적인 OS에서는 Resource의 포화 상태가 잘 일어나지 않기 때문에 대부분이 바로 승인 가능하다. (ex. 롯데월드에 들어온 상태)

    Suspended: Virtual Memory(가상 메모리)를 지원하는 시스템에서,  주 메모리의 공간이 부족할 경우 보조 메모리(Disk)로 Swap Out될 수 있다. Suspended 상태는 Blocked/Ready 상태로 나뉘며 스케줄러에 의해 다시 주 메모리로 배치될 수 있다. (ex. 자이로드롭을 타고 싶지만, 대기열 거리두기로 인해 대기할 공간이 부족해서 서지 못 하는 상태)

     

    PCB(Process Control Block): OS가 각 프로세스를 관리하기 위해 유지하는 정보

    1️⃣ OS가 관리 상 사용하는 정보 - Process state & ID, Scheduling information, priority 

    2️⃣ CPU 수행 관련 하드웨어 값 - PC(program counter), registers

    3️⃣ 메모리 관련 - code, data, stack 정보 / 파일 관련 - open file descripters ..

     

    Context Switch

    : CPU를 한 프로세스에서 다른 프로세스로 넘겨주기 위해 이전의 프로세스 문맥을 저장하고 새로운 프로세스 상태를 적재하는 과정.

    현대의 대부분의 OS는 다중작업 & 실시간 처리 방식을 사용하기 때문에 프로세스 간의 CPU 점유 교환이 잦다. 이 때, CPU 점유를 빼앗기는 프로세스는 프로세스의 상태를 PCB에 저장하고, 새로 CPU를 점유하는 프로세스는 PCB에서 상태를 읽어오는 작업을 수행한다.

    context switching이 자주 발생할 경우 오버헤드가 발생하여 CPU의 처리가 느려질 수 있다(이런 경우를 방지하기 위해 멀티 프로세스 대신 멀티 쓰레드를 사용하기도 한다).

    CPU 점유 프로세스의 주체가 바뀔 때 마다 반드시 context switching이 발생하는 것은 아니다. (I/O)system call이나 (timer)interrupt가 발생할 경우, process state가 커널 모드로 바뀌기 때문에 이 때는 context swtiching이 발생하지 않는다.

     

    프로세스 집합 공간

    - Job Queue: 현재 시스템 내의 모든 프로세스 집합

    - Ready Queue: 현재 주 메모리 내에 있으면서 CPU를 잡아서 실행을 기다리는 프로세스 집합

    - Device Queue: I/O Device의 처리를 기다리는 프로세스 집합

     

    Process Scheduler

    - Long-term Scheduler: 프로세스에 메모리를 부여(New->Ready)하는 스케줄러. 프로세스를 Ready Queue로 보낸다. 실제로는 대부분의 프로세스가 생성과 동시에 Ready state로 전환되기 때문에 거의 사용하지 않는다.

    - Mid-term Scheduler: 여유 공간을 위해 현재 사용하지 않는 프로세스를 메모리에서 디스크로 쫓아내는 스케줄러. long-term scheduler와 함께 multi programming을 제어하는 데 사용된다.

    - Short-term Scheduler: 어떤 프로세스를 Running state로 전환할 지 계획하는 CPU 스케줄러.

     

    Thread

    - 한 프로세스 내에서 여러 CPU 수행 단위를 가지는 것. 고유한 PC(program counter), register set, stack space를 가진다.

    - 기본적으로 프로세스 마다 최소 1개의 쓰레드를 가지고 있다.

    - 다른 Thread와 Code section, Data section, OS Resource를 공유한다.

     

     

     

    ⭐ 장점

    1️⃣ Responsiveness: ex) 웹 페이지의 긴 응답 시간을 줄일 수 있다(code와 이미지 요청을 multi thread로 요청해서).

    2️⃣ Resource Sharing: 똑같은 일을 처리하는 프로세스를 쓰레드로 구현하면 자원을 아낄 수 있다.

    3️⃣ Economy: 프로세스의 생성 및 Context switching은 오버헤드가 크다

    4️⃣ MP구조: 각각의 쓰레드가 멀티 프로세스 환경에서 동작한다면 효율적으로 사용 가능하다.

     

    Multi Process vs. Multi Thread

    - Multi Process: 여러 CPU를 장착해서 한 개 이상의 프로세스를 동시에 병렬 처리하는 것

    ➡ 장점: 각각의 프로세스가 독립된 메모리 영역을 가져 서로의 영역을 침범하지 않아 안정성이 있다.

    단점: 작업량이 많을 수록 오버헤드가 발생한다. context switching으로 인한 성능 저하가 발생한다. 

    - Multi Thread: 하나의 응용 프로그램에서 여러 쓰레드를 구성해 각 쓰레드가 하나의 작업을 처리하는 것. 공유 메모리를 통해 다수의 작업을 동시에 처리한다.

    장점: 독립 프로세스에 비해 공유 메모리 만큼의 시간&자원 손실이 감소한다. 전역 및 정적 변수에 대해 자료 공유가 가능하다.

    단점: 안정성에 문제가 발생할 수 있다. 한 쓰레드가 공유 자원을 망가뜨리면 전체에 영향을 끼친다(-> 임계 구역, 공유 자원의 배타적 사용을 보장받기 위한 대기를 통해 대비할 수 있다).

Designed by Tistory.