프로세스와 쓰레드

이한수·2022년 3월 22일
0

개인 공부내용 정리 목적입니다.
참고 : 양희재 교수님 강의
참고 : https://velog.io/@codemcd/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-7.-%EC%93%B0%EB%A0%88%EB%93%9CThread

프로세스는 프로세스에 의해 만들어진다고 한다.

사실 제일 이해가 안가는 부분이었다. 하드디스크에서 프로그램을 메모리를 할당하여 실행되는 상태가 되었을 때를 프로세스라고 한다면서 갑자기 무슨 뜬구름 잡는 이야기인가 싶었다.

무튼 이것에 대한 것은 아래에서 바로 아래에서 얘기를 다시 하겠다.

메모리에 운영체제가 적재되면 가장 먼저 하는 일 중 하나가 최초의 프로세스를 생성하는 것이라고 한다. 이렇게 생성된 프로세스가 자식 프로세스를 만들고 또 그 자식 프로세스가 또 자식 프로세스를 만들고 과정을 반복한다.

이렇게 생성된 자식 프로세스는 각자 고유의 PID, 메모리 , CPU등 새 PCB가 할당되며 고유의 자원을 획득한다.

각 프로세스는 부모와 자식 관계를 갖고 자식끼리는 서로 형제 프로세스라고 한다.

또한 각 프로세스는 고유한 번호를 갖는데 이를 PID(Process Identitirer)라고 한다.

(처음으로 생성된 프로세스는 pid가 항상 1이다. )

자식 프로세스를 생성한 부모 프로세스는 2가지 행동을 한다.

  • 자식 프로세스가 끝날때 까지 기다린다.
  • 자식 프로세스와 함께 동작한다.

자식 프로세스는 다음 중 하나의 프로세스가 된다.

  • 부모 프로세스와 동일한 새로운 프로세스
  • 새로운 프로그램 실행.

즉 , 프로세스란 것이 프로그램이 메모리에 적재된 형태를 말한다기 보다는 , 먼저 프로세스가 생성되고 , 그렇게 생성되는 자식 프로세스 중에서 프로그램을 적재된 프로세스를 앞에서는 말하고 있었던 것이다.(속이 후련)

프로세스 생성

fork() 시스템 콜을 사용하여 생성한다.

만들어진 프로세스에서 프로그램을 실행하려면 exec() 시스템 콜을 사용한다.

프로세스 종료

exit() 시스템 콜을 사용한다.

종료되면 해당 프로세스가 사용한 모든 자원 등이 회수 되어 운영체제로 돌아간다.

쓰레드

프로그램 내부의 흐름이라고 한다.

하나의 프로그램은 하나의 쓰레드를 갖는다.

흠 ... 프로세스보다 좀 더 작은 단위라고 보면 될 것 같다.

다중 쓰레드

하나의 프로그램에 2개 이상의 쓰레드가 있는 것을 의미한다.

이전에 프로세스 별로 context switching이 일어난다고 했는데 , 현재는 대부분의 운영체제에서 다중 쓰레드를 지원하고 있으며 프로세스 안에서 여러 쓰레드를 번갈아가며 수행하다가 다른 프로세스로 넘어간다.

한가지 의문이 생긴다.

굳이 더 작게 나눈 이유는 무엇일까?? 작게 나누면 나눈 만큼 context switching이 더 자주 발생하여 overhead 문제가 커질 텐데 라고 생각이 들었었다.

그에 대한 반박으로 유튜브를 예로 들자면

동영상은 파일을 읽어오고 출력하고 하는 작업을 거의 동시처럼 진행하고 있다.

바로 납득 되었다. 즉 , 하나의 문맥이란 하나의 작업을 수행하는 단위로 보면 되고 , 그 작업을 수행하는 단위가 여러 개로 나뉘어 번갈아가며 수행이 되기에 우리는 여러 작업을 동시에 사용하라 수 있는 것이다.

프로세스 내부에 쓰레드가 존재하는 것인데 , 그럼 각각의 쓰레드는 프로세스의 자원을 어떻게 사용할까??

code , data 메모리 공간은 여러 쓰레드가 공유한다.

프로세스 자원도 마찬가지다. 단 , 쓰레드 또한 수행되다가 context switching이 발생하므로 , 고유의 정보를 가는 것들이 있는데 PC , SP(stack pointer) ,register , stack등이 있다.

profile
성실하게

0개의 댓글