1.프로세스의 생성
프로세스를 생성하는 방법은 exec 계열의 함수를 이용해 생성하는 것이다. 현재 프로세스에서 어떠한 것을 실행한다라는 의미로 해석된다. 하지만 이렇게 프로세스를 생성하면 현재 프로세스의 상태를 완전히 덮어버리게 된다. 이것은 운영체제는 동시에 단지 하나의 프로세스만을 가질수 있다는 것이다.
따라서 리눅스에서 프로세스는 사용자가 생성할수 있으나, 프로세스가 또다른 프로세스를 생성하는것도 가능하다.
이를 통해 진정한 멀티프로세스 환경을 제공한다.
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
또한 멀티쓰레드에사는 어떤 쓰레드가 먼저 실행이 될지는 아무도 알 수 없다.
프로세스와 쓰레드의 차이에 관해 정리된 블로그
쓰레드 동기화
'OS' 카테고리의 다른 글
[OS] CPU 스케줄링(CPU Scheduling) (0) | 2020.06.07 |
---|---|
[OS] 프로세스간 통신(Inter Process Communication) (0) | 2020.06.07 |
[OS] 문맥교환(Context Switch) (0) | 2020.06.07 |
[OS] 인터럽트(Interrupt) 원리 (0) | 2020.06.07 |
[OS] 프로세스의 상태(Process State)와 입출력(I/O) 구조 (0) | 2020.06.07 |