Post

[Tech] 프로세스 & 스레드 심화

[Tech] 프로세스 & 스레드 심화

면접cs

전에, 프로세스와 스레드를 다룬 내용의 글을 쓴 적이 있었다.

하지만, 내용이 부실함을 느꼈고, 심화적인 내용을 바탕으로 글을 정리하고자 한다.



프로세스 컴파일 과정

Image

프로세스 컴파일은 크게 4가지 과정을 거쳐서 일어난다.

1. 전처리(Pre-Processing)

  • 소스 코드 파일을 전처리 된 소스 파일로 변환하는 과정을 의미한다.
  • 소스 코드에서 주석을 전부 제거하고, 헤더 파일을 병합한다.
  • 이후, 매크로를 치환하고 적용한다.

2. 컴파일(Compile)

  • 전처리 된 소스 파일을 어셈블리어 파일로 변환하는 과정을 의미한다.
  • 이 때, 오류 처리코드 최적화 작업이 일어난다.

3. 어셈블리(Assembly)

  • 어셈블리어로 작성된 소스 코드를 오브젝트 파일로 변환하는 과정을 의미한다.
  • 여기서 오브젝트 파일은 사람이 알아볼 수 없는 기계어 코드로 변환된 파일이다.

4. 링킹(Linking)

  • 여러 오브젝트 파일들을 묶어 실행 파일을 만드는 과정을 의미한다.

이렇게 4가지 과정을 거쳐, CPU가 이해할 수 있도록 번역하는 작업을 거친다.



프로세스 상태 값

Image

프로세스는 다음과 같이 5가지의 상태 값을 가지며, 실행되면서 변한다.

  • new, 생성 상태
    프로세스가 생성된 상태를 의미한다.

  • running, 실행 상태
    CPU 소유권과 메모리를 할당받고, 명령어를 수행 중인 상태를 의미한다.

  • ready, 준비 상태
    프로세스가 CPU 스케줄러부터 CPU 소유권이 넘어오기를 기다리는 상태를 의미한다.

  • waiting, 대기 상태
    인터럽트에 의해, 프로세스가 어떤 이벤트가 일어나기를 기다리는 상태를 의미한다.

  • terminated, 종료 상태
    프로세스가 메모리와 CPU 소유권을 모두 놓고, 실행이 종료된 상태를 의미한다.

특히, 실행 상태에서 바뀔 수 있는 상태가 3가지며, 변환하는 작업을 생각하며 보자.



프로세스의 구조

Image

프로세스는 다음과 같이 4가지의 구조로 나뉘며, 할당된다.

  • Stack
    • 함수 매개변수, 반환 주소, 지역 변수가 저장된다.
    • 컴파일 때, 크기가 결정되고 동적인 메모리 특징을 갖는다.
    • 함수 호출의 임시 데이터 저장 장소로 동작한다.
  • Heap
    • 실행 중, 동적으로 할당되는 메모리이다.
    • 가변 크기의 데이터를 저장할 때 활용된다.
    • new(), malloc(), calloc() 등의 함수를 사용하여 할당 시, 해당 영역에서 메로리가 할당된다.
  • Data 영역
    • 전역변수, 정적변수가 저장된다.
  • Code 영역
    • 프로그램의 소스 코드가 저장된다.



PCB, 프로세스 제어 블록

  • Process Control Block
  • 운영체제에서, 프로세스에 대한 메타데이터를 저장한 데이터를 의미한다.
  • 프로세스마다 존재하며, 일반 사용자가 접근하지 못하도록 관리된다.

PCB의 구조

Image

  • 프로세스 상태: 프로세스의 현재 상태를 담는다.
  • 프로세스 식별자: 프로세스를 유일하게 식별할 수 있는 ID
  • 프로그램 카운터(PC): 다음에 수행할 명령어 주소
  • CPU 레지스터: 레지스터의 값이 담긴다.
  • 오픈파일 목록
  • 메모리 제한
  • 이 외에도, CPU 스케줄링 정보, 메모리 관리 정보, I/O 상태 정보가 담긴다.



싱글 스레드와 멀티 스레드

Image

위와 같이, 싱글 스레드멀티 스레드는 구분된다. 각각의 장단점에 대해 알아보자.

싱글 스레드

  • 하나의 프로세스에 하나의 스레드가 있는 구조
  • 하나의 레지스터와 스택으로 구성되어 있다.

싱글 스레드의 장점

  • 작업 전환(Context Switching)과 자원 접근에 대한 것을 신경쓰지 않아도 된다.
  • 비교적 적은 비용으로 구성 가능하다.

싱글 스레드의 단점

  • 여러 개의 CPU를 활용하지 못한다.
  • 비교적 적은 비용으로 구성 가능하다.
  • 순차적으로 실행해서, 많은 작업의 처리에서는 비효율적이다.

멀티 스레드

  • 하나의 프로세스에 여러 개의 스레드가 있는 구조
  • 각각 고유의 레지스터와 스택으로 구성되어 있다.
  • 프로세스 내에서는 자원을 공유하여, 중복을 최소화한다.

멀티 스레드의 장점

  • 스레드를 생성하는 과정이 비교적 빠르다.
  • 자원과 상태를 공유하여, 효율적인 운영이 가능하다.

멀티 스레드의 단점

  • 비교적 많은 비용이 필요하다.
  • 작업 전환과 스레드 스케줄링을 살펴야 한다.



✨ 출처

prepare_frontend_interview
Blog, 프로세스의 컴파일
Abraham Silberschatz, 운영체제


This post is licensed under CC BY 4.0 by the author.