프로세스와 스레드

somedaycode·2021년 1월 23일
2
post-thumbnail

프로세스와 스레드

프로세스

  • 프로세스는 컴퓨터 프로그램이 실행되어 돌아가고 있는 상태이다.
  • 즉, 실행중인 프로그램을 의미한다.
  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위이다.

프로세스 메모리

메모리: 프로그램 실행을 윈한 데이터를 저장한다.

프로세스는 운영체제로부터 독립된 메모리 영역을 할당 받는다.

---------------- //Highest memory address
|  스택 (Stack)|
|    (Heap)  |
| 데이터 (Data)|
|  코드 (Code) |
---------------- //Lowest memory address

스택

  • 함수 호출과 전반적인 처리 그리고 지역변수 같은 일시적인 데이터를 저장하는 메모리 영역이다.
  • 스택 영역은 push로 데이터를 저장하고 pop으로 데이터를 인출한다. 이러한 결과로 스택은 높은 주소 -> 낮은 주소로 할당된다.

데이터

  • 프로그램의 변수와 파일 등의 각종 데이터를 저장한다.
  • 전역변수와 정적 변수가 이곳에 저장된다.
  • 또한, 초기화한 데이터 구조에 따라 읽고 쓰는게 가능한 영역이다.

GVAR, BSS 로 나누어져 있다.
GVAR 전역 변수, 초기값 있는 전역 변수. 배열, static으로 선언된 변수가 들어간다
BSS 전역 변수, 초기값 없는 전역변수. 배열, static으로 선언된 변수가 들어간다

  • 사용자가 직접 관리할 수 있으며, '그래야만 하는' 영역이다.
  • 동적 할당 영역이다.
  • 메모리의 낮은 주소 -> 높은 주소 방향으로 할당된다.
동적할당영역? 
 프로그램이 실행 중인 동안(런 타임에) 크기가 결정되는 것을 말한다.

코드

  • 텍스트 영역

  • 프로그램의 시작부터 끝까지 메모리에 계속 남아있는다.

  • 프로세서가 실행할 코드를 저장해 놓은 영역이다.

  • 동시적 병렬적
    동시성 프로세스하나가 여러 작업을 돌아가면서 일부분 식 진행

프로세스 문맥이란? (Context Switching)

시스템 호출이나 인터럽트로 실행 중인 프로세스의 제어를 다른 프로세스에 넘겨 실행 상태가 되도록 하는 것을 Context Switching이라고 한다.

프로세스의 상태

커널 내에는 준비 큐, 대기 큐, 실행 큐 등의 자료 구조가 있으며 커널은 이것들을 이용하여 프로세스의 상태를 관리한다.

생성(create) : OS나 프로그램에서 요청받아 프로세스를 생성하면 PCB를 만들어 주소공간을 할당한다.
실행(running) : 프로세스가 CPU를 차지하여 명령어들이 실행되고 있다.
준비(ready) : 프로세스가 CPU를 사용하고 있지는 않는 상태이다. 하지만 언제든지 사용할 수 있는 상태로, CPU가 할당되기를 기다리고 있다. 일반적으로 준비 상태의 프로세스 중 우선순위가 높은 프로세스가 CPU를 할당받는다.
대기(waiting) : 보류(block)라고 부르기도 한다. 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태를 말한다.
종료(terminated) : 프로세스 실행의 종료를 의미한다.

스케줄링?

시스템이 실행하고자 할 때 프로세서(CPU)를 프로그램들에게 할당하는 과정


스레드 (Thread)

프로세스의 실행단위

  • 기본적으로 프로세스를 한개 만들면 한개 이상의 스레드가 생긴다.
  • 하나의 스레드는 메인 스레드이며, 추가로 스레드를 생성하지 않는다면 모든 프로그램은 메인 스레드에서 실행된다.

프로세스와의 차이점

프로세스는 별도의 주소 공간에서 실행되며 한 프로세스는 다른 프로세스의 변수나 자료 구조에 접근할 수 없다. 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스간 통신을 사용해야한다. 파이프 파일 소켓 등

스레드는 프로세스를 생성하면 해당 프로세스의 스레드도 함께 생성된다. 프로세스 내에서 각각 스택만 따로 할당 받고 텍스트, 데이터, 영역은 공유한다. 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다. 한 스레드가 프로세스 자원을 변경하면 다른 이웃 쓰레드도 그 변경 결과를 즉시 볼 수 있다.

종류

  • 싱글 스레드: 하나의 프로세스, 하나의 스레드
  • 멀티 스레드: 하나의 프로세스, 여러개의 스레드

References

프로세스와 쓰레드의 차이 - Park_juyoung
프로세스 메모리구조, 시스템 호출 - 그저그런 컴공생
프로세스 - 위키백과
쓰레드란? - 코딩스타트

profile
천천히 꾸준히

0개의 댓글