[ CS / OS ] Process & Thread

황승환·2022년 2월 7일
0

CS

목록 보기
27/60

Process & Thread

Program

  • 프로그램은 어떤 작업을 위해 실행할 수 있는 파일

Process

  • 프로세스는 컴퓨터에서 연속적으로 실행 중인 프로그램
  • 디스크로부터 메모리에 적재되어 CPU를 할당받아 실행(독립적인 개체)
  • OS로부터 시스템 자원(주소공간, 파일, 메모리, ...)을 할당받는 작업의 단위
    - 프로세스가 할당받는 OS의 시스템 자원:
    • Stack(함수의 인자, 지역 변수, return address 저장), Data(전역변수 저장), Code, Heap(실행 중 동적 할당)의 구조로 되어 있는 독립적인 메모리 영역
    • CPU 시간
    • 운영되기 위해 필요한 주소 공간

Process 특징

  • 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받음
  • 기본적으로 프로세스 하나 당 1개 이상의 스레드를 포함
  • 각 프로세스는 별도의 주소 공간에서 실행되고, 다른 프로세스의 변수나 자료구조에 접근할 수 없음 (프로세스는 독립적임)
  • 하나의 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, Inter-Process Communication)을 사용해야함
    - ex) 파이프, 파일, 소켓 등을 이용한 통신 방법 이용

PCB

  • 특정 프로세스에 대한 중요한 정보를 저장하고 있는 OS의 자료구조
  • OS는 프로세스가 하나 생성될 때마다 프로세스를 관리하기 위해 생성된 프로세스에 해당하는 고유한 PCB를 생성
  • 프로세스가 Context Swtich에 의해 CPU를 반환할 때에 작업 진행 상황을 PCB에 저장하고, CPU를 다시 할당 받으면 PCB에서 진행 상황 정보를 불러옴
  • PCB에 저장되는 데이터
    - PCB는 프로세스의 중요한 정보를 저장
    • 프로세스 식별자(Process ID: PID): 프로세스 식별 번호
    • 프로세스 상태(Process Status): new(새로운 프로세스), ready(실행 준비가 된 프로세스), running(CPU를 할당받아 실행 중인 프로세스), waiting(CPU를 반환하고 재할당을 기다리는 프로세스), terminated(종료된 프로세스)
    • 프로그램 카운터(Program Counter: PC): 프로세스가 다음 실행할 명령어의 주소
    • CPU 레지스터
    • CPU 스케줄링 정보: 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
    • 메모리 관리 정보: 페이지 테이블, 세그먼트 테이블 등
    • 입출력 상태 정보: 프로세스에 할당된 입출력 장치들, 열린 파일 목록
    • 어카운팅 정보: 사용된 CPU 시간, 시간 제한, 계정 번호 등

Thread

  • 프로세스의 실행 단위, 프로세스 내에서 실행되는 여러 흐름의 단위
  • 프로세스의 특정한 수행 경로
  • 하나의 프로세스 내에서 동작되는 여러 실행 흐름으로 프로세스 내의 주소 공간이나 시스템 자원을 공유할 수 있음 (프로세스가 할당 받은 시스템 자원을 이용하는 실행의 단위)
  • Thread ID, 프로그램 카운터(PC), 레지스터 집합, Stack으로 구성
  • 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복을 최소화하여 수행 능력을 향상시키는 것을 멀티 쓰레딩(Multi-Threading)이라 함
    - 각각의 스레드는 독립적인 작업을 수행하기 때문에 각자의 Stack, PC 레지스터를 가짐

Thread 특징

  • 프로세스 내에서 각각 Stack만 따로 할당받고, Code, Data, Heap 영역은 공유
  • 같은 프로세스에 존재하는 여러 스레드들은 같은 Heap 공간을 공유하고, 다른 프로세스의 메모리에는 직접 접근할 수 없음
  • 하나의 스레드가 프로세스의 자원을 변경하면, 다른 이웃 스레드(Sibling Thread)도 그 변경 결과를 즉시 볼 수 있음(자원을 공유하고 있기 때문)

Thread의 독립적인 Stack

쓰레드마다 독립적인 Stack을 가지는 이유는 무엇일까?

  • Stack은 함수 호출 시 전달되는 함수의 인자, return address, 지역 변수를 저장하는 메모리 공간
  • Stack 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 의미이고, 이는 독립적인 실행 흐름이 추가되는 것
    - 스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 Stack을 할당 (자원의 생성과 관리의 중복을 최소화하여 수행 능력을 향상시키기 위한 최소한의 독립적인 시스템 자원을 할당한 것)

Thread의 PC 레지스터

스레드는 Stack과 함께 PC 레지스터도 독립적으로 가진다.

  • PC는 스레드가 명령어의 어디까지 실행하였는지를 저장
  • 스레드는 CPU를 할당 받고 스케줄러에 의해 CPU를 다시 선점당하기 때문에 명령어가 연속적으로 실행되지 않음
    - 다시 CPU를 할당 받았을 때 실행했던 위치부터 다시 실행하기 위해 PC 레지스터에 실행 위치를 기억
profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글