프로세스와 스레드

김시환·2023년 3월 18일
0

운영체제

목록 보기
1/7

프로세스

프로세스가 무엇이라고 물어보면, 어떻게 답해야 할까

The definition of a process, informally, is quite simple: it is a running program - OSTEP

OSTEP에서는 프로세스를 간단하게 실행중인 프로그램이라고 말한다.

그렇다면.. 프로그램은 어떻게 프로세스가 될까? (프로그램은 어떻게 실행될까)

프로세스가 생성되는 과정

프로그램은 디스크에 저장되어 있다. 누군가가 더블 클릭 같은 행동으로 프로그램을 실행시키면, 컴퓨터는 폰노이만 구조를 따르기 때문에 해당 프로그램은 메모리로 이동한다. 실행을 위해 메모리로 올라온 프로그램을 프로세스라고 생각하면 된다. 구체적으로 어떻게 프로그램이 실행되는지 알아보자.

  1. Loader에 의해서 Disk에 저장되어 있던 프로그램이 메모리에 적재된다.
    • 프로그램은 디스크 상에 ELF format 형태로 존재한다.
  2. stack생성 -> 지역 변수, 함수 매개변수, return address를 저장한다.
  3. heap 생성 -> 동적 변수 할당을 위한 공간
  4. I/O 설정과 같은 초기화 (OS가 함)
  5. 엔트리 포인트에서 프로그램 실행 (main)
프로그램을 왜 굳이 프로세스로 만들어서 사용할까?

=> (뇌피셜) 크롬 실행 파일이 있다고 했을 때, 실행을 하면 하나의 크롬 브라우저가 열린다. 
만약에 프로세스란 개념이 없이, 프로그램이 직접 디스크에서 메모리로 이동한다면, 
같은 프로그램을 여러 번 실행 시킬 수가 없다.
프로세스가 프로그램의 인스턴스라는 말이 위의 맥락과 비슷한 느낌인 것 같다.

스레드

스레드 : 프로세스 내의 실행 흐름

이렇게 말하면 너무 추상적이다.
스레드라는 개념이 왜 나왔는지 알아보면서 사전적 개념을 구체화해보자.

스레드는 Stack과 PC만을 고유한 자원으로 할당받고 나머지 자원들은 프로세스 내 하나를 공유한다.

<Stack이 독립적으로 할당되는 이유>
Stack에는 지역 변수나 함수 매개변수와 같이 함수를 실행하기 위해서 필요한 자원들이 저장되어 있다.
독립적인 Stack -> 독립적인 함수 호출 -> 독립적인 실행 흐름

<PC를 독립적으로 할당하는 이유>
PC 레지스터 : 다음 실행해야할 명령어의 위치를 가리키는 레지스터
스레드 별로 실행 흐름을 가지고 있기 때문에 다음 실행해야할 명령어도 스레드별로 관리해야한다.

스레드를 사용하면 얻는 장점

스레드를 사용하여 장점을 얻기 위해서는 프로세스 내에서 여러 개의 스레드를 사용해야함 (멀티 스레드)
이 장점을 멀티 프로세스와 멀티 스레드를 비교해보며 알아보자.

멀티 스레드가 멀티 프로세스보다 좋은 점

  1. 자원을 효율적으로 사용할 수 있다.
    • 스레드는 프로세스 내의 메모리 영역을 공유하기 때문에 자원을 효율적으로 사용할 수 있다.
  2. Context Switch 비용이 낮다.
    • 멀티 프로세스에서 context switch를 하면 프로세스에 대한 메모리 할당이 필요하다
    • 멀티 스레드는 메모리 영역을 공유하기 때문에 위 과정이 필요 없다.
  3. 스레드 간 데이터를 주고 받기가 수월하다.
    • 프로세스간 데이터를 주고 받기 위해서는 IPC가 필요하다.
  4. 캐시 효율이 높다.
    • 프로세스 컨텍스트 스위치가 발생하면, 새로운 메모리가 할당되며, 이전까지 쌓아뒀던 캐시가 무의미해질 수 있고, 새로 캐시를 쌓아가야한다.

멀티 프로세스가 멀티 스레드보다 좋은 점

  1. 멀티 프로세스는 한 프로세스에 문제가 발생하더라도 나머지 프로세스들은 영향을 받지 않는다. (안정적)
    • 멀티 스레드에서는 한 스레드에 문제가 발생하면 다른 스레드들에도 문제가 생길 수 있다.
  2. 멀티 스레드는 동기화 문제가 발생할 수 있다. 이를 고려해서 설계해야함!! -> 동기화 문제에 대해서는 나중에..
profile
1년차 개발자입니다.

0개의 댓글

관련 채용 정보