프로세스와 쓰레드

이연희·2022년 4월 26일
0

OS

목록 보기
1/10

1. 프로세스

프로그램 vs 프로세스

💡 프로그램은 저장장치에 저장되어 있는 정적인 상태를 의미하고, 프로세스는 실행을 위해 메모리에 올라온 동적인 상태를 의미한다.
표현차이: 프로그램을 "작성한다", 프로세스를 "실행한다"

  • 프로그램이 프로세스가 되기 위해서 프로세스 제어 블록(Process Control Block)이 필요하다.

    	프로세스 제어 블록에 담긴 정보
    	1) 프로세스 구분자: 프로세스를 구분하는 구분자 
    	2) 메모리 관련 정보: 프로세스의 메모리 위치 정보
    	3) 각종 중간값: 프로세스가 사용했던 중간값, 이전에 실행할 때 사용했던 레지스터의 값
    	(ex.어떤 단품 요리까지 손님에게 제공되었는지 주문서에 표시하는 것과 유사)
  • 어떤 프로그램이 프로세스가 되었다는 것은 운영체제로부터 프로세스 제어 블록을 받았다는 의미이다.

프로세스의 구조

🔹 코드영역

  • 프로그램의 본문이 기술된 곳으로 텍스트 영역이라고도 한다.

  • 프로그래머가 작성한 프로그램은 코드영역에 탑재된다.

🔹 데이터 영역

  • 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳이다.

🔹 스택 영역

  • 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳이다.

  • ex. 프로세스 내에서 함수를 호출하면 함수를 수행하고 원래 프로그램으로 되돌아 올 위치를 스택영역에 저장한다.

  • 스택영역은 운영체제가 사용자의 프로세스를 작동하기 위해 유지하는 영역이기 때문에 사용자에게는 보이지 않는다.

프로세스 생성과 복사

🔹 fork() 시스템 호출

  • 개념: 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수

  • 목적: 빠른 자식 프로세스 실행

  • 프로세스를 복사할 때 기존의 프로세스는 부모 프로세스가 되고 새로 생긴 프로세스는 자식 프로세스가 된다. 두 프로세스는 부모-자식 관계로 연결된다.

🔻 동작과정

  • 프로세스 구분자(PID)가 바뀐다. 주민번호의 개념과 같다.

  • 부모 프로세스 구분자(PPID)와 자식 프로세스 구분자(CPID)가 바뀐다. 그림에서 fork()된 자식 프로세스에서 PPID는 부모 프로세스의 PID인 326이고, CPID는 -1이다.

🔻 장점

  • 기존 메모리에서 복사하기 때문에 자식 프로세스의 생성 속도가 빠르다.

  • 부모 프로세서가 사용하던 모든 자원을 추가 작업 없이 자식 프로세스에 상속할 수 있다. 즉, 추가 작업 없이 자원을 상속할 수 있다.

  • 부모 프로세스와 자식 프로세스가 자식 프로세스 구분자(CPID)와 부모 프로세스 구분자(PPID)로 연결되어 있다. 따라서 자식 프로세스를 종료하면 프로세스가 사용하던 메모리 영역, 파일, 하드웨어를 부모 프로세스가 정리 할 수 있다.

프로세스의 전환

🔹 exec() 시스템 호출

  • 개념: 기존의 프로세스를 새로운 프로세스로 전환하는 함수이다. 프로세스는 그대로 둔 채 내용만 바꾸는 시스템 호출이고, 호출시 현재의 프로세스가 완전히 다른 프로세스로 전환된다.

  • 목적: 프로세스의 구조체를 재활용하기 위함이다.

🔻 동작과정

  • 코드 영역에 있는 기존의 내용을 지우고 새로운 코드로 바꾼다.

  • 데이터 영역이 새로운 변수로 채워지고 스택 영역이 리셋된다.

  • 각종 프로세스 구분자(PID,PPID,CPID)를 제외하고 프로세스의 내용을 새로운 것으로 바꾼다.

🔻 장점

  • 이미 만들어진 프로세스 제어 블록, 메모리 영역, 부모-자식 관계를 활용할 수 있어서 편리하다.

  • 새로운 코드 영역만 가져오면 되기 때문에 운영체제의 작업이 수월하다.

2. 쓰레드

쓰레드의 정의

💡 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위이다.

  • CPU가 처리하는 작업의 단위는 프로세스로부터 전달받은 쓰레드이다. 운영체제 입장에서의 작업 단위는 프로세스이고 CPU입장에서의 작업 단위는 쓰레드인 것이다.

쓰레드 관련 용어

🔹 멀티쓰레드

  • 프로세스 내 작업을 여러 개의 쓰레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영 기법이다.

🔹 멀티태스킹

  • 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법이다. 이렇게 여러 쓰레드에 시간을 잘게 나누어주는 시스템을 시분할 시스템이라고 한다. 시분할 세스템에서 운영체제가 CPU에 전달하는 작업은 프로세스가 아니라 쓰레드이다.

🔹 멀티프로세싱

  • CPU를 여러 개 사용하여 여러 개의 쓰레드를 동시에 처리하는 작업 환경을 말한다.멀티프로세싱은 하나의 컴퓨터에 여러 개의 CPU 혹은 CPU 내 여러 개의 코어에 쓰레드를 배정하여 동시에 작동하는 것이다.

  • 네트워크로 연결된 여러 컴퓨터에 쓰레드를 나누어 협업하는 분산 시스템도 멀티프로세싱이라고 한다.

🔹 CPU 멀티쓰레드

  • 한 번에 하나씩 처리해야 하는 쓰레드를 파이프라인 기법을 이용하여 동시에 여러 쓰레드를 처리하도록 만든 병렬 처리 기법이다.

멀티쓰레드

🔹 멀티태스킹 vs 멀티쓰레드

  • fork() 호출로 여러개의 프로세스를 만들면 필요 없는 정적 영역이 여러 개가 된다.

  • 하나의 프로세스 내에 여러 개의 쓰레드를 생성하는 멀티쓰레드는 코드, 파일 등의 자원을 공유함으로써 자원의 낭비를 막고 효율성을 향상한다.

🔻 멀티쓰레드의 장점

  • 응답성 향상: 사용자의 작업 요구에 빨리 응답 가능하다.

  • 자원 공유: 한 프로세스 내에서 독립적인 쓰레드를 생성하면 프로세스가 가진 자원을 모든 쓰레드가 공유하게 되어 작업을 원활하게 진행할 수 있다.

  • 효율성 향상: 여러 개의 프로세스를 생성하는 것과 달리 불필요한 자원의 중복을 막음으로써 작업을 원활하게 진행할 수 있다.

  • 다중 CPU 지원: 2개 이상의 CPU를 가진 컴퓨터에서 멀티쓰레드를 동시에 처리하여 CPU 사용량이 증가하고 프로세스의 처리 시간이 단축된다.

🔻 멀티쓰레드의 단점

  • 모든 쓰레드가 자원을 공유하기 때문에 한 쓰레드에 문제가 생기면 전체 프로세스에 영향을 미친다.

🔻 멀티쓰레드 모델

  • 사용자 쓰레드: 사용자 레벨에서 관련 라이브러리를 사용하여 구현하며, 라이브러리는 커널이 지원하는 스케줄링이나 동기화 같은 기능을 대신 구현해준다.
  • 커널 쓰레드: 커널이 멀티쓰레드를 지원하는 방식이다.
  • 멀티레벨 쓰레드: 사용자 쓰레드와 커널 쓰레드를 혼합한 방식으로 하이브리드 쓰레드라고도 한다.

동적할당 영역

  • 프로세스는 코드 영역, 데이터 영역, 스택 영역 그리고 힙 영역을 가지고 있다.

  • 코드 영역과 데이터 영역은 프로세스가 실행되기 직전에 위치와 크기가 결정되고 실행되는 동안 변하지 않으므로 정적 할당 영역이라고 부른다.

  • 스택 영영과 힙 영역은 프로세스가 실행되는 동안 만들어지는 영역으로 크키가 늘어났다 줄어들기도 하는 동적 할당 영역이다.

profile
공부기록

0개의 댓글