[OS 운영체제] 프로세스와 스레드

WONNY_LOG·2023년 6월 27일

STUDY

목록 보기
6/6

프로그램 ?

파일이 저장장치에만 올라가있고, 메모리에는 올라가있지 않은 정적인상태이다.

보조기억장치 (하드디스크,SSD)에 존재하며 실행되기를 기다리는 명령어(코드)와 정적인 데이터의 묶음이다. 즉, 코드덩어리

특징

  • 모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해 줘야 실행될 수 있다. (=> 메모리공간의 중요성)
  • 프로그램을 실행하는 순간 파일은 컴퓨터 메모리에 올라가게 되고, 운영체제로부터 시스템 자원(CPU)을 할당받아 프로그램 코드를 실행시켜 서비스를 이용할 수 있게 되는 것이다.


ex) 윈도우 프로그램, 맥 프로그램 같이 컴퓨터에서 실행 할 수 있는 파일.
아직 실행하지 않은 상태라서, 정적 프로그램(static Program) 이라고 부르기도 한다.

프로세스 ?

운영체제로부터 자원을 할당 받은 작업의 단위를 의미한다.

가상 메모리 공간, 코드, 데이터, 시스템 자원의 집합체로,
메모리에 적재되고 CPU(프로세서) 자원을 할당 받아 실행중이거나 대기중인 프로그램이다. 즉, 코드덩어리를 실행할 것.

특징

  • 프로세스는 별도의 독립적인 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근 할 수 없다.
  • 프로세스간의 자원에 접근하려면, 프로세스 간의 통신(IPC, inter-process communication)을 사용해야한다. ex) 소켓, 파일, 파이프
  • 프로그램은 하나 이상의 프로세스를 가진다!


ex) 윈도우는 작업관리자를 열어보면 프로세스에 나오는 게 실행되고 있는 프로그램.
맥은 응용 프로그램 강제 종료 열어보면 실행되고 있는 프로그램.


프로세스의 메모리(자원) 구조

프로그램이 여러개 실행된다면 각 프로그램별 메모리에 프로세스들이 담길 주소 공간이 생성되게 되고 그 안에 Code, Data, Stack, Heap 공간이 만들어지게 된다.

코드 영역(Code / Text)

프로그래머가 작성한 프로그램 함수들의 코드가 CPU가 해석 가능한 기계어 형태로 저장되어 있는 곳 (명령어, 실행코드들 집합장소)

데이터 영역(Data)

코드가 실행되면서 사용하는 전역 변수나 각종 데이터들이 모여있는 곳
데이터영역은 .data ,.rodata, .bss 영역으로 세분화 된다.

  • .data : 전역 변수 또는 static 변수 등 프로그램이 사용하는 데이터를 저장
  • .BSS : 초기값 없는 전역 변수, static 변수가 저장
  • .rodata : const같은 상수 키워드 선언 된 변수나 문자열 상수가 저장


힙 영역(Heap)

로그램 실행 중 사용자에 의해 동적으로 메모리 공간이 할당되는 데이터들을 위해 존재하는 곳

스택 영역(Stack)

지역 변수와 같은 호출한 함수가 종료되면 되돌아올 임시적인 자료를 저장하는 독립적인 공간

Stack은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
만일 stack 영역을 초과하면 stack overflow 에러가 발생한다.


  • 코드 영역/데이터 영역 : 선언할 때 그 크기가 결정되는 정적 영역
  • 스택 영역/힙 영역 : 프로세스가 실행되는 동안 크기가 늘어났다 줄어들기도 하는 동적 영역

프로세스의 5가지 상태 (Five-State Process Model)

New(생성)

프로세스가 생성될 예정이지만 아직 생성되지 않은 상태. 보조 메모리에 존재함

Ready(준비)

프로세스가 생성되어 CPU에서 실행할 준비가 된 상태. 이때, 메인 메모리로 로드된다.

Running(수행)

실행을 위해 CPU에 의해 선택되어 현재 수행 중인 프로세스.

Blocked/Waiting(블록/대기)

프로세스 실행 중간에 저장매체를 access해서 더 이상 실행이 불가능한 상태. (특정 이벤트 발생 대기 상태)

Exit/Terminated(종료)

프로세스 수행이 완료되거나, 어떤 이유로 중단되었을 때 프로세스 풀에서 방출된 상태


프로세스의 한계로 탄생한 스레드

과거 여러개의 프로세스가 동시에 실행될 수 있는 멀티태스킹이 불가능했던 프로세스의 한계를 해결하기 위해 등장항 스레드(Thread)
ex) 과거에는 파일을 다운 받으면 실행 시작부터 실행 끝까지 프로세스 하나만을 사용했어서 다운이 완료 될때까지 하루종일 기다렸다.
하지만, 똑같은데 여러 개의 프로세스로 만들면, 메모리 차지 ⬆️ CPU에서 할당 받는 자원이 중복된다.

스레드란

하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위
프로세스를 처리하는 것

프로세스 생성시 기본적으로 main 스레드가 생성되는데, 현재 운영체제에서 한 프로세스는 하나 이상의 스레드를 가진다!
다중처리 시스템에서 여러 스레드가 병렬로 실행될 수 있다!

ex) 하나의 크롬브라우저가 실행되면 프로세스 하나 생성된다.
해당 브라우저에서 파일다운과 서치가 동시에 가능하다.
이유는 하나의 프로세스 안에서 여러가지 작업들 흐름이 동시에 진행되기 때문에 가능하다.
이러한 일련의 작업 흐름들을 스레드라고하며 여러개가 있는 스레드를 멀티스레드라고 한다.

특징

  • 프로세스 내에서 Stack 만 따로 할당 받고, Code, Data, Heap 영역은 공유한다.
  • 한 프로세스 내에서 동작 되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
  • 각 스레드는 별도의 레지스터와 스택을 갖지만, heap 메모리는 고유해서 서로 다른 스레드에서 가져와 읽고 쓸 수 있게 된다.
  • 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 변경 결과를 즉시 볼 수 있다.

프로세스와 스레드 차이

프로세스는 컴퓨터에서 현재 실행되고 있는 프로그램으로 독립적인 메모리 공간
스레드는 프로세스 내에서 실행되는 흐름으로 프로세스 자원을 공유함



프로세서(CPU(Central Processor Unit))란

하나의 하드웨어 부품으로, 프로그램을 기억 장치로부터 읽어 데이터를 처리하고, 각종 장치를 구동하는 역할을 담당한다.

연산 처리, 비교처리, 데이터 전송, 편집, 변환, 테스트와 분기 등의 데이터를 처리한다.

특징

  • 중앙처리장치로 프로그램 또는 기타 구성요소로부터 명령을 수신하고 처리한다.
  • 구성 요소는 주로 이진 신호(1과 0)를 해석하는 기본 개념을 기반으로한다.
    => 제조가 쉽지 않음을 의미
  • 프로그램의 명령을 실행하는 유일한 구성요소기때문에 빠를수록 좋음
  • 하나의 CPU를 가지고 있는 컴퓨터는 프로세스를 동시에 실행 시킬 수 없다. 따라서 CPU는 고속으로 여러 프로세스를 일정한 기준으로 순서를 정해 실행한다.
  • 디스패처 (Dispatcher)를 이용해 프로세서를 한 프로세스로부터 다른 프로세스로 교체해주는 프로그램이다.
    쉽게 말해 프로그램이 실행되다 중단되고, 다음 프로그램을 실행하게 해주는 프로그램!


프로세스 스케쥴링

하나의 CPU를 가지고 있는 컴퓨터는 프로세스를 동시에 실행시킬 수 없다. 따라서 CPU는 고속으로 여러 프로세스를 일정한 기준으로 순서를 정해서 실행한다. 이러한 CPU 할당 순서 및 방법을 결정하는 과정을 프로세스 스케줄링이라고 하며 CPU 스케줄러가 이를 담당한다.



멀티 태스킹

단일 CPU에서 여러 응응 프로그램이 동시에 실행되는것처럼 보이도록 하는 시스템이다.

컴퓨터가 발전하면서 멀티태스킹을 이용하여 프로세스는 여러개가 동시에 실행될 수 있다.
프로세스를 실행하는 프로세서(CPU)가 실행할 프로세스를 빠른속도로 교체하고 있기 때문이다.

멀티 태스킹 vs. 멀티 프로세싱

  • 둘 다 시분할 시스템 방식으로 CPU 자원을 짧은 텀으로 받아 수행하는 방식.
  • 멀티 태스킹은 단일 CPU 단위로 이루어짐.
  • 멀티 프로세싱은 다중 CPU에 하나의 프로그램을 병렬로 실행해서 실행 속도를 극대화시킨다는 차이가 있다. 물론 CPU마다 여러 프로세스를 수행하게 하는 것은 덤.





















CPU 스케쥴링
프로세스와 스레드
프로세스
프로세스2
프로세스 테크톡
브라우저 동작원리

0개의 댓글