[23.03.21] Daily Posting

HeeJun·2023년 3월 21일
0

Operating System

목록 보기
1/9

이 블로그의 목적은 학습한 내용의 정리와 더 나아가 다양한 기술들에 대한 정리와 정보 공유가 목적입니다.

혹시 글의 내용 중 틀린 부분이 있다면 댓글 남겨주세요!!!

프로세스(Process) & 스레드(Thread) [1]

오늘 포스팅 할 내용은 프로세스와 스레드에 대한 개념이다.

바로 프로세스에 대한 설명부터 시작해보자.

프로세스(Process)

  • 정의
    • 컴퓨터에서 실행되고 있는 프로그램
    • 운영체제로부터 자원을 할당 받은 작업의 단위. 즉, 독립적인 메모리 공간을 할당 받아 실행되는 프로그램
  • 각 프로세스는 별도의 메모리 공간에서 실행. 각 프로세스 간 변수나 자료구조에 대한 접근이 제한되어 있다.
    • 프로세스가 별도의 메모리 공간을 받아 실행된다는 것은 메모리1에 1번 프로세스, 메모리2에 2번 프로세스 이런 이야기가 아니라
      전체 메모리 공간을 나누어 각 공간에 주소를 매겨 사용하기에 1번지 ~ 10번지는 1번 프로세스 영역, 11번지 ~ 20번지는 2번 프로세스 영역 이런 방식으로 할당한다는 이야기이다.
  • 프로세스 간 자원에 접근하기 위해 IPC 통신을 사용한다.

프로세스 주소 공간

  • 프로세스는 독립된 메모리 영역을 Code / Data / Stack / Heap 영역으로 할당받는다.
    • Code 영역 : Code(명령어 집합) 자체가 존재하는 메모리 영역
    • Data 영역 : 전역 변수, 정적(Static) 변수, 배열 등...
      • Data 영역은 다시 Data 영역과 BSS(Block Started By Symbol) 두 가지로 구분된다.
      • Data 영역 : 초기화 된 데이터 Ex) int a = 10;
      • BSS 영역 : 초기화 되지 않은 데이터 Ex) int a;
    • Heap 영역 : 프로세스 실행 중 동적으로 할당되는 데이터 Ex) C언어의 malloc, calloc과 C++, Java의 new
    • Stack 영역 : 지역 변수, 함수의 매개 변수, return 값 등의 임시 데이터

"프로세스와 프로그램이 같은거 아냐?"에 대한 대답은 NO!

  • 프로그램은 HDD, NAND와 같은 2차 저장장치에 저장되어 있는 아직 실행이 되지 않은 코드 덩어리들을 말하는 것이고,
    프로세스는 1차 저장장치인 Main Memory 공간을 할당 받은 프로그램을 말하는 것이다.

스레드(Thread)

  • 정의
    • 프로세스 내에서 실행되는 여러 흐름의 단위
    • 쉽게 설명하면 "에스프레소 한 잔을 만든다"는 하나의 프로세스를 "원두를 갈아낸다, 머신을 통해 에스프레소를 추출한다, 잔에 담는다" 같이 3개의 스레드로 나눌 수 있다
  • 기본적으로 프로세스는 최소 1개의 스레드를 소유하고 이를 메인 스레드라 한다
  • 스레드는 프로세스 안에서 존재한다
  • 스레드는 프로세스 안에서 Stack 영역만 독립적으로 할당받는다
  • 스레드는 Code / Data / Heap 영역은 서로 공유한다 ( 공유 자원으로 인해 발생 할 수 있는 문제들이 있지만 그것들은 추후에 설명하겠다)

오늘은 프로세스와 스레드에 대한 개념을 설명했다
다음 포스팅에서는 멀티 프로세스 & 스레드, 프로세스 스케줄링 등 프로세스와 스레드에 관한 추가적인 내용을 다루도록 하겠다

profile
내가 작성한 코드 한 줄로 누군가를 편하게

0개의 댓글