운영체제/운영체제 정리

11. 프로세스와 쓰레드

100win10 2019. 11. 11. 00:20

 

프로세스는 기본적으로 메인 메모리에 올라와있는 프로그램을 말한다.

 

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

 

즉 한 프로세스는 부모 프로세스를 가진다.  OS는 부팅 후 첫 번째 프로세스를 만든다. 그러면 그 프로세스는 여러 자식

 

프로세스를 만들게 된다.

 

PID : 프로세스들에게 각각의 unique한 번호를 부여하는 것.

 

 

 

 

파일을 생성하는 시스템 콜은 open() 인 것처럼 역시 프로세스를 생성하는 시스템 콜이 있는데

 

바로 fork() 이다.

 

호출 시 새로운 프로세스를 만들게 되고 만들어진 프로세스를 메인 메모리에 가져오는 콜을 exec()

 

 

이라고 한다.

 

windows 10에서의 프로세스들

 

 

 

프로세스 종료하는 콜은 exit()이다.

 

exit()을 호출하면 해당 프로세스가 가진 모든 자원을 모두 회수하고 그 자원은 O/S가 가져가서

 

다른 프로세스에게 나누어 주게 된다.

 

 

 

스레드

 

스레드는 프로그램 내부의 흐름, 맥 이라고 한다.

 

하나의 프로그램은 일반적으로 하나의 흐름을 가지고 있다.

ex ) 자바의 메인 쓰레드

 

 

다중 쓰레드는 말 그대로 흐름이 여러 개 있는 것인데 어떻게 동시에 여러 개의 스레드가 돌 수 있을까?

 

이런 맥들이 빠른 시간 간격으로 스위칭되기 때문. 여러 스레드가 동시에 실행 되는 것처럼 보인다.

 

ex ) Web browser

 

화면을 출력하는 쓰레드 + 데이터를 읽어오는 쓰레드

 

ex ) Word processor

 

화면 출력 쓰레드 + 키보드 입력받는 쓰레드 + 철자/문법 오류 확인 쓰레드

 

앞서 봤던 이 그림은 사실 P1에 프로세스에 일부분을 실행하다가 다른 부분을 실행하게 된다.

 

P2와 P3로 마찬가지이다. 따라서 Context Switching의 단위는 프로세스가 아닌 스레드인 것

 

 

 

스레드의 구조

 

- 프로세스의 메모리 공간을 공유한다. ( 메모리 안에 있는 code, data ) 

 

- 프로세스의 자원을 공유한다. ( file , i/o... )

 

하지만 스택은 공유하지 않는다.  하나의 스레드가 실행하면서 함수 호출을 하게 될 텐데 return address 나 parameter

 

을 스택에 저장하게 된다. 스위칭 시 다른 스레드로 가야 하기 때문에 공유하지 않는다.

 

- 비공유 : 개별적인 PC, SP, registers, stack 등

 

 

 

프로세스(스레드) 동기화

 

만일 p1과 p2에 아무 관계가 없다면 independent process 영향을 받거나 미치면 Cooperating process이라고 한다.

 

실제로는 Indepdent 한 프로세스보다는 Cooperating 프로세스들이 훨씬 많다.

 

이때 스레드들이 공통된 자원을 동시에 접근하여 쓰려고 한다면 문제점이 발생할 수 있다.

 

따라서 이런 문제점을 해결하기 위해서 영향을 주고받는 스레드 들 간에 순서를 잘 정하여 데이터의 일관성이

유지되게 하는 것이 프로세스 동기화이다.

 

그렇다면 어떤 방식으로 프로세스 동기화를 해야 할까?

 

 

 

 

https://brunch.co.kr/@kd4/3

 

프로세스와 스레드의 차이

기술 면접 단골손님 feat. 운영체제 | 프로세스와 스레드에 대해서 설명해주세요. 익숙한 질문입니다. 신입 개발자 면접 질문 목록에 빠지지 않고 등장하는 질문인데요. 아무리 쉽고 익숙한 질문도 머릿속에서만 생각한다면 질문을 받았을 때 말로 표현하기 힘듭니다. 때문에 이 포스팅을 작성합니다. 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행

brunch.co.kr