[F-Lab 모각코 챌린지] 40일차 - 프로세스와 스레드 정리
F-Lab 모각코 챌린지 40일차 - 프로세스와 스레드. 부족한 컴퓨터 과학 지식을 채우기 위하여 면접 단골 질문 중 하나인 프로세스와 스레드를 학습하고 정리하였습니다.
![[F-Lab 모각코 챌린지] 40일차 - 프로세스와 스레드 정리](/content/images/size/w1200/2023/07/f_lab_mogacko-1.png)
프로세스와 스레드
프로세스
사용자가 애플리케이션을 실행하면 운영체제로 부터 실행에 필요한 메모리를 할당 받아 애플리케이션의 코드를 실행하는 것
프로세스는 독립적인 주소 공간을 가지고 실행된다
애플리케이션은 멀티 프로세스를 만들기도 한다 (멀티 프로세스: 하나의 프로그램이 여러 프로세스를 생성, 실행하는 것)
컨텍스트 (Context)
프로세스는 코드, 데이터, 열린 파일의 식별자, 동적 할당 영역, 스택 등을 가지고 있는데, 이러한 것들을 문맥(Context) 라고 한다
프로세스와 프로세스는 서로 완전히 독립되어 있다. 때문에 프로세스간의 실행을 전환 하려면 이러한 문맥을 저장해 두었다가, 새로운 프로세스의 문맥을 불러들이는 과정을 거쳐야 한다.
컨텍스트 교환 (Context-Switching)
하나의 프로세스나 스레드가 CPU 를 사용하고 있는 상태에서 다른 프로세스나 스레드가 CPU 를 사용하도록 하기 위해, 이전 프로세스의 상태(context) 를 보관하고 새로운 프로세스의 상태를 적재하는 과정을 말한다
스레드는 프로세스의 코드, 데이터, 열린 파일 등을 공유 하는 작은 독립된 실행 단위이다
스레드는 레지스터와 스택만 독립적으로 가지고 있고 대부분의 문맥(Context)은 프로세스 안에서 공유한다. 때문에 스레드간 문맥(Context) 전환은 프로세스간 전환보다 훨씬 빠르고 운영체제 입장에서 비용이 낮다
시분할 (Time Sharing)
물리적인 코어가 싱글 코어(Single Core) 인 컴퓨터가 있다고 가정해보자.
우리의 컴퓨터는 한번에 하나의 일만 수행할까? 만일 하나의 일만 수행한다면, 프로그램을 한번에 하나만 실행시킬 것이다. 이를 해결하기 위해 동시성이 이라는 개념이 만들어졌다
하나의 프로세서(CPU Core) 가 매우 빠른 속도로 여러 작업들을 전환하여 여러 프로그램이 동시에 실행하면, 사용자는 해당 작업이 동시에 실행된다고 느낄 수 있다
운영체제에서는 시간을 아주 작은 단위로 나누고, 각 단위마다 다른 작업에 CPU 시간을 할당한다. 이를 시분할 이라고 부른다.
물론 이 과정에서 컨텍스트 스위칭이 일어난다
퀀텀 타임 (Quantum time) - 운영체제론
/ 타임 슬라이스(Time Sliced)
시분할 을 통해 나뉘어진 시간 조각을 퀀텀 타임 이라고 부른다
프로세스에게 주어진 퀀텀 타임을 소비하면 CPU 는 다른 프로세스를 실행한다.
굳이 CPU 에 국한 시키지 않더라도 실행 시키는 주체가 할당하는 시간 이라고 봐도 무방하다
멀티 스레드
멀티 스레드의 경우, 한 프로세스 내부에서 실행되기 때문에 프로세스의 메모리 영역을 공유한다.
공유하는 영역에 대해 제약 없이 서로 접근하게 되면 공유 데이터가 오염되는 일이 발생할 수 있기 때문에, 동기화(Synchronization) 기법이 필요하다
임계 영역(Critical section)
동시 접근하려고 하는 그 자원에서 문제가 발생하지 않게 스레드의 독점을 보장해줘야 하는 영역
락(Lock)
스레드 간 공유 영역을 사용할 때는 공유 영역을 사용하는 스레드가 작업을 끝내기 전까지 다른 스레드가 접근하지 못하도록 막는 것을 의미한다.
교착상태(Deadlock)
하나의 스레드가 임계영역에 접근 후 락을 해제하지 않고 사라지거나 두 개 이상의 스레드가 서로 작업이 끝나기를 무한정 기다리는 상태를 교착 상태 라고 한다
순환 대기 (Circular wait)
길을 가다 마주친 두 사람이 서로 길을 터주려고 하는데 계속 서로 먼저 가라는 소리만 한다면 아무도 앞으로 갈 수 없다.
스레드간 임계영역의 접근에서도 이러한 현상이 나타날 수 있는데, 이를 보고 순환대기라고 말한다. 데드락의 흔한 케이스중 하나.