프로세스와 스레드

박정훈·2022년 1월 16일
0

Computer Science

목록 보기
1/3

프로세스와 스레드 자세한 설명

프로그램이란?

저장 장치에 저장은 되어있지만, 아직 메모리에 올라가지 않은, 정적인 상태를 의미한다. 그러니까 사용자가 클릭해서 실행하기 이전의 파일을 의미한다. 그저 코드 덩어리다.

프로세스란?

프로세스는 운영체제 위에서 연속적으로 실행 되고 있는 독립된 메모리를 가진 프로그램을 의미한다. 따라서 프로세스 끼리는 서로 접근 할 수 없다.(진짜?)

스레드란?

프로세스에서 다루는 일꾼이다. 하나의 프로세스에서 여러개가 동작할 수 있다. 프로세스는 운영체제로부터 독립적인 자원을 할당받는다면 스레드는 프로세스 내부의 자원을 공유해서 사용한다.

프로세스와 스레드 딥다이브

메모리 구조

프로세스는 각각 Code, Data, Stack, Heap 형식의 메모리 구조를 가진다. 프로세스는 독립된 메모리 영역을 가지기 때문에 다른 프로세스의 메모리에 접근 할 수 없다. 반면에 스레드는 프로세스내의 stack 을 제외한 부분의 메모리를 공유한다. 스레드도 자기 할일이 있기 때문에 본인들의 stack이 있다.

오류 발생시

프로세스는 오류가 발생하면 자기 혼자만 실행을 멈추고 종료된다. 스레드는 경우가 다른데, Code, Data, Heap 메모리 영역을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생하면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다.

싱글 스레드

하나의 프로세스에서 하나의 스레드가 실행된다.

싱글스레드의 장점

자원 접근에 대한 동기화를 신경 쓸 필요가 없다. Context Switching을 요구하지 않는다.

싱글스레드의 단점

여러개의 CPU를 활용하지 못한다.

멀티태스킹, 멀티스레드

멀티태스킹

하나의 운영체제 안에서 여러 프로세스가 실행되는 것이다. 여러개의 프로세스가 동시에 실행되는 것처럼 보이게 한다.

멀티스레드

하나의 프로세스 안에서 여러 스레드가 동작하는 것을 의미한다.

멀티스레드의 장점

  1. Context-Switching 할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
  2. 스레드는 프로세스 내의 자원을 공유하기에 응답시간이 빠르다.

멀티스레드의 단점

  1. 스레드 하나가 프로세스 내 자원을 망친다면 프로세스가 맛이 간다.
  2. 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생한다.
  3. 스레드 스케줄링을 신경써야 한다.

동기화 문제?

여러 스레드가 전역 변수를 사용하고 있는 경우라고 해 보자. A 스레드에서 자원 사용하다, 해당 자원에 대한 제어권이 다른 스레드로 넘어가고, 수정이 되었다. 그리고 다시 A 스레드에게 제어권이 돌아갔을 때 해당 자원에 접근하지 못하게 되거나, 수정된 자원에 접근하지 못하는 오류가 발생한다. 이처럼 여러 스레드가 함께 전역 변수를 사용할 경우 발생할 수 있는 충돌을 동기화 문제라고 한다. 스레드의 스케쥴링은 프로그래머의 영역이다. 신중하게 접근해야겠다.

정말? 진짜 프로세스간 접근은 불가능?

처음에 적어놓은 링크다.
1. IPC(Inter-Process Communication)을 사용한다.
2. LPC(Local inter-Process Communication)을 사용한다.
3. 별도로 공유 메모리를 만들어서 정보를 주고받도록 설정해주면 된다.

프로그램 > 프로세스 > 스레드

profile
그냥 개인적으로 공부한 글들에 불과

0개의 댓글