1.프로세스의 생성

 

프로세스를 생성하는 방법은 exec 계열의 함수를 이용해 생성하는 것이다. 현재 프로세스에서 어떠한 것을 실행한다라는 의미로 해석된다. 하지만 이렇게 프로세스를 생성하면 현재 프로세스의 상태를 완전히 덮어버리게 된다. 이것은 운영체제는 동시에 단지 하나의 프로세스만을 가질수 있다는 것이다.

따라서 리눅스에서 프로세스는 사용자가 생성할수 있으나, 프로세스가 또다른 프로세스를 생성하는것도 가능하다.

이를 통해 진정한 멀티프로세스 환경을 제공한다.

 

Tree of Processes in Linux

 

fork를 통해 부모프로세스로부터 생성된 자식프로세스는 부모로부터 많은 정보들을 그대로 상속받는다.  

위의 그림처럼 계속해서 자식프로세스가 만들어진다면 결국 가장 조상격의 프로세스가 존재하기 마련이다.

이러한 프로세스들은 각자의 프로세스 아이디(pid)로써 구분할수 있으며 부모와 자식프로세스간의 통신으로는 signal이라는 매체를 사용하게 된다.

 

이 과정에서 부모프로세스가 자식프로세스보다 먼저 끝난다면(죽는다면) 남은 자식프로세스는 고아프로세스 라고 하며, 반대로 부모프로세스가 자식프로세스의 종료상태를 회수하지 못한상태에서 자식프로세스가 먼저 죽는다면 이를 좀비프로세스라고 한다. 자세한코드는 Linux programming에서 다루겠다.

 

 

 

 

2.쓰레드(Thread)

 

그렇다면 쓰레드란 무엇일까. 

결국 자식프로세스를 생성하게 되면 부모프로세스의 데이터정보를 모두 가져간다고 했다.

프로세스의 생성

 

하지만 쓰레드를 생성할시,

쓰레드 생성

 

이처럼 전역변수와 코드영역을 공유하고

고유의 스택만 생성해 가져가게 된다.

 

정리하자면, 

 

우리가 컴퓨터를 사용할때 게임을하며 음악을 들으며 인터넷브라우저를 켜놨다고 가정하자.

동시에 이러한 작업이 이루어질 수 있는 것은 CPU가 시간을 분할하여 CPU를 사용할 수 있는 제어권을 각각의 프로그램에게 한번씩 나누어주고 있기 때문이다.

보통 이 하나의 작업 즉, 운영체제에서 실행중인 하나의 프로그램을 프로세스라고 하며

작업이 여러 개 이루어진다는 것은 프로세스가 여러개가 동시에 동작하고 있다는 의미이다.

그리고 이처럼 두개 이상의 프로세스가 실행되는 것을 멀티프로세스 라고 하며 이 멀티프로세스를 실행하여 일을 처리하는 것을 멀티 태스킹이라고 한다.

쓰레드는 위에서 설명한 프로세스 내에서 실행되는 세부 작업의 단위이다. 여러개의 쓰레드가 모여 하나의 프로세스를

구성하며, 이 하나의 프로세스를 구성하는 여러개의 쓰레드를 멀티쓰레드라고 부른다.

스타크래프트 유닛들도 모두 멀티쓰레드로 구현된것..!

 

멀티쓰레드의 장점

 

Responsiveness(응답성)  may allow continued execution if part of process is blocked, especially important for user interfaces

Resource Sharing(자원공유)  threads share resources of process, easier than shared memory or message passing

Economy(절약성)  cheaper than process creation, thread switching lower overhead than context switching

Scalability(확장성)  process can take advantage of multicore architectures

 

 

또한 멀티쓰레드에사는 어떤 쓰레드가 먼저 실행이 될지는 아무도 알 수 없다.

 

 

 

프로세스와 쓰레드의 차이에 관해 정리된 블로그

 

 

프로세스와 스레드의 차이

기술 면접 단골손님 feat. 운영체제 | 프로세스와 스레드에 대해서 설명해주세요. 익숙한 질문입니다. 신입 개발자 면접 질문 목록에 빠지지 않고 등장하는 질문인데요. 아무리 쉽고 익숙한 질문

brunch.co.kr

 

 

면접에서 운영체제 질문을 받으면?

매일 진행하는 스터디의 2주차 주제는 운영체제 였는데 운영체제 내부의 다양한 기술적인 이야기는 스터디원들이 이야기 해줄 것 같아서 면접에서 물어볼 만한 os 질문들을 모아 봤다.

velog.io

 

 

 

 

 

쓰레드 동기화

 

 

 

운영체제 - deadlock과 starvation

교착상태(deadlocck)와 기아상태(Starvation) 교착상태란? 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에, 다음 단계로 진행하지 못하는 상태 배치 처리 시스템에서는 �

velog.io