CS

CS_운영체제_프로세스 & 스레드

99duuk 2024. 6. 13. 04:27

프로세스와 스레드

▶  프로세스 (Process)

 

메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태
 

프로세스 구조

- 코드 영역: 프로그램 코드가 위치
- 데이터 영역: 프로그램 실행 중 사용하는 변수와 파일 등의 데이터가 저장
- 스택 영역: 함수 호출 시 되돌아올 주소와 변수 사용 범위에 영향을 미치는 영역
- 힙 영역: 동적으로 할당된 데이터가 저장되는 공간
 
코드 영역과 데이터 영역은 크기가 고정된 정적 영역이며,
스택 영역과 힙 영역은 프로세스 실행 동안 크기가 동적으로 변한다.
 
서로 다른 프로세스 간의 메모리 접근은 허용되지 않는다. 

의 생명 주기와 관련된 주요 상태와 상태 간의 전이


 

멀티태스킹 (Multi Tasking)

 OS를 통해 CPU 자원을 여러 프로세스 또는 스레드 간에 나누어 사용하는 행위

 
 

▶  스레드 (Thread)

 

스레드는 프로세스 내에서 실행되는 흐름의 단위로, 하나의 프로그램 내에서 여러 스레드가 존재 가능

 

스레드 구조

- 각각 스택만 따로 할당받고, 코드, 데이터, 힙 영역은 공유
- 스레드는 프로세스 내에서 동작되는 여러 실행의 흐름으로, 같은 프로세스 안의 스레드들은 같은 힙 공간을 공유
 

 
 

멀티 프로세스

 

멀티 프로세스는 하나의 애플리케이션을 여러 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
 

멀티 프로세스의 특징

- 안정성: 여러 자식 프로세스 중 하나에 문제가 발생해도 다른 자식 프로세스에 영향이 확산되지 않음
- 구현의 용이성: 각 프로세스가 독립적으로 동작하고 자원을 다르게 할당받음
- 통신의 복잡성: 프로세스 간 통신은 IPC(Inter-Process Communication)를 통해야 함
- 메모리 사용량 증가: 각 프로세스가 독립적인 메모리 공간을 사용함
- 성능 저하: 스케줄링에 따른 Context Switching이 많아지고 성능 저하가 발생할 수 있음
 
 

멀티 스레드

티 스레드는 하나의 프로그램을 여러 스레드로 구성하여 각 스레드가 하나의 작업을 처리하도록 하는 것
 

멀티 스레드의 특징

- 응답성: 프로그램의 자식 스레드가 오류 또는 긴 작업으로 중단되어도 프로그램이 계속 수행
- 자원 공유 용이: 스레드는 부모 프로세스의 자원과 메모리를 공유 가능
- 병렬 수행: 멀티 프로세스 구조에서 각각의 스레드가 다른 프로세스에서 병렬로 수행 가능
- 구현 및 디버깅의 어려움: 동기화와 교착 상태 문제에 주의
- 자원 공유의 위험: 자식 스레드 중 하나에 문제가 생기면 전체 프로세스에 영향을 줄 수 있음
          하나의 스레드가 데이터 공간 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 갖기 때문)

            멀티스레드의 안전성에 대한 단점은 Critical Section 기법을 통해 대비함
            하나의 스레드가 공유 데이터 값을 변경하는 시점에
             다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정

             상호 배제, 진행, 한정된 대기를 충족해야함

 

 


 
 

Process와 Thread의 차이

    - 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위
    - 스레드는 할당받은 자원을 이용하는 실행의 단위, 프로세스 내에 여러 개의 스레드가 있을 수 있음
 
 
 즉, 프로그램 하나가 프로세스이며, 그 안에서의 분기 처리가 스레드이다. 
 
 

멀티 프로세스 & 멀티 스레드

     ▷ 멀티 프로세스
     - 여러 프로세스로 구성하여 각 프로세스가 하나의 작업(task)을 처리
     - 장점 : 하나의 프로세스가 잘못되어도 프로그램은 동작 (메모리 침범 문제를 OS 차원에서 해결)
     - 단점 : 각각 독립된 메모리 영역을 갖고 있어, 작업량 많을 수록 오버헤드 발생. Context Switching 비용 발생
 
     ▷ 멀티 스레드
     - 여러 스레드로 구성하여 각 스레드가 작업을 처리
     - 장점 : 시스템 자원 소모 감소, 처리 비용 감소(실행 속도 향상), 스레드 간 자원 공유
     - 단점 : 디버깅 어려움, 동기화 이슈 발생, 하나의 스레드 오류로 전체 프로세스에 문제 발생
 

 

 Context Switching이란?

- CPU가 하나의 프로세스나 스레드에서 다른 프로세스나 스레드로 전환할 때 발생
   (프로세스의 상태 정보를 저장하고 복원하는 일련의 과정) 

 

 

  • 현재 실행 중인 프로세스의 상태 저장: CPU가 현재 실행 중인 프로세스의 레지스터, 프로그램 카운터, 스택 포인터 등 중요한 상태 정보를 PCB(Process Control Block)라는 데이터 구조에 저장
  • 새로운 프로세스의 상태 로드: 스케줄러가 새로운 프로세스를 선택하고, 해당 프로세스의 PCB로부터 상태 정보를 불러와 CPU 레지스터에 로드
  • 컨텍스트 스위칭 완료 후 새 프로세스 실행: 새로운 프로세스가 실행을 시작

 

컨텍스트 스위칭에는 CPU 시간, 메모리 리소스 등의 오버헤드가 발생합니다. 이는 실제로 유용한 작업을 수행하는 데 사용되지 않는 시간이므로 비용으로 간주

 

스케줄링으로 인해 발생하는 대기 시간의 일부로 볼 수 있다 !

→ 프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재함

 
 

멀티 프로세스 대신 멀티 스레드를 사용하는 이유

     ▷ 자원의 효율성 증대
     - 프로세스를 생성하여 자원을 할당하는 시스템 호출이 줄어들어 자원을 효율적으로 관리할 수 있음
     - 스레드는 프로세스 내의 메모리를 공유하므로 스레드 간 데이터 주고받기가 간단하고 시스템 자원 소모 감소
 
     ▷ 처리 비용 감소 및 응답 시간 단축
     - 프로세스 간의 통신보다 스레드 간의 통신 비용이 적으므로 작업 간 통신 부담 감소
     - 프로세스 간 전환 속도보다 스레드 간 전환 속도가 빠름
     - 주의할 점: 동기화 문제와 스레드 간 자원 공유 문제.
 

 

Thread Safe란?

- 여러 스레드가 동시에 사용되어도 안전한 것
 

 

프로세스와 스레드의 차이

 
     ▷ 프로그램(Program)
     - 실행 가능한 파일로, 메모리에 올라가지 않은 정적인 상태(코드 덩어리)
 
     ▷ 프로세스(Process)
     - 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
     - 운영체제로부터 시스템 자원을 할당받는 작업의 단위
 
     ▷ 스레드(Thread)
     - 프로세스 내에서 실행되는 여러 흐름의 단위
     - 프로세스가 할당받은 자원을 이용하는 실행의 단위
 

 

프로세스의 특징

- 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당
- 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있음
- 각 프로세스는 별도의 주소 공간에서 실행되며, 다른 프로세스의 변수나 자료구조에 접근할 수 없음
- 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야 함
 

 스레드의 특징

- 스레드는 프로세스 내에서 각각 스택만 따로 할당받고, 코드, 데이터, 힙 영역은 공유
- 스레드는 프로세스 내에서 동작되는 여러 실행의 흐름으로, 같은 프로세스 안의 스레드끼리 주소 공간과 자원을 공유
- 각 스레드는 별도의 레지스터와 스택을 가지고 있지만, 힙 메모리는 서로 읽고 쓸 수 있음
- 한 스레드가 프로세스 자원을 변경하면, 다른 스레드도 그 변경 결과를 즉시 볼 수 있음


멀티 프로세스와 멀티 스레드의 차이

     ▷ 멀티 프로세스
     - 여러 프로세스로 구성하여 각 프로세스가 하나의 작업(task)을 처리
     - 장점 : 하나의 프로세스가 잘못되어도 프로그램은 동작
     - 단점 : Context Switching 비용 발생
 
     ▷ 멀티 스레드
     - 여러 스레드로 구성하여 각 스레드가 작업을 처리
     - 장점 : 시스템 자원 소모 감소, 처리 비용 감소(실행 속도 향상), 스레드 간 자원 공유
     - 단점 : 디버깅 어려움, 동기화 이슈 발생, 하나의 스레드 오류로 전체 프로세스에 문제 발생
 
 
 


 

'CS' 카테고리의 다른 글

CS_운영체제_인터럽트 & 시스템콜  (0) 2024.06.16
CS_운영체제_CPU 스케줄링  (2) 2024.06.15
CS_운영체제_메모리  (0) 2024.06.13
CS_운영체제_운영체제와 컴퓨터  (0) 2024.06.13
CS_네트워크_로드밸런싱  (0) 2024.06.07