[2] 스레드와 프로세스

김두미·2021년 12월 26일
0

OS

목록 보기
2/9
post-thumbnail

<kocw 반효경 교수님의 강의를 듣고 정리한 내용입니다>


4. 스레드

4-1 스레드란?

"Thread is basic unit of CPU utilization"
Thread : CPU의 수행 단위이다.

스레드는 동일한 프로세스에서 stack, Program Counter, register set를 별도로(독립적으로) 갖고있다.

스레드가 동료 스레드와 공유하는 부분 (=Task)
: 1. Code section
2. Data section
3. OS resources

4-2 스레드 이용의 장점 :

1. 응답성 :

하나의 서버 스레드가 blocked 상태인 동안에도 동일한 테스크(Task) 내의 다른 스레드가 실행 되어 빠른 처리 가능 [빠른 응답성]


ex) 네이버를 연다 -> 웹페이지를 읽어온다. (오래 걸림) (blocked상태)
이미지, 텍스트 파일 요청을 다른 스레드로 실행
여러 스레드를 사용하면 이미 읽어온 텍스트라도 화면이 올려주면 결과를 빨리 볼 수있다.

2. 자원 공유 :

동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능향상을 얻을 수 있다. [별도의 프로세스로 만들 경우에는 독자적인 주소공간 필요(메모리를 낭비)]
<자원을 효율적으로 사용>

3. 경제성 :

프로세스를 하나 만드는 것은 오래 걸리지만 스레드 하나 만드는 것은 오버헤드가 그렇게 크지 않다. + 문맥교환은 오버헤드가 크지만 스레드간의 CPU 스위치는 간단하다.

4. 병렬성 <CPU가 여러 개일 때>

스레드는 커널, 라이브러리를 통해 구현할 수 있다.

커널의 지원을 받아 구현하면 커널 스레드라고 한다.
커널이 스레드가 여러 개 있음을 한다.

라이브러리의 지원을 받아 구현하면 유저 스레드라고 한다.
커널이 프로세스에 스레드가 여러 개 있는 것을 모른다.




5. 프로세스 Management

5-1 . 프로세스의 생성

부모 프로세스를 복제 생성하여 자식 프로세스를 만든다.
-> 부모 프로세스의 주소 공간 내용(code, data, stack)을 그대로 복제해서 생성한다.

  • 그대로 복제 생성하는데 필요한 시스템 콜은 fork()
  • 새로운 프로그램으로 주소 공간을 덮어씌우는 시스템 콜은 exec()

fork, exec는 모두 시스템 콜이고 시스템 콜의 코드는 커널의 코드에 위치해있다.
즉, 부모 프로세스는 자식 프로세스를 만들어달라고 os에게 부탁한다.

프로세스의 세계에서는 자식 프로세스가 먼저 종료된 후에야 부모 프로세스가 종료할 수 있다.


5-2. 프로세스의 종료

[자발적 종료]
exit() -> 프로세스가 마지막 명령을 수행한 후 OS에게 이를 알려줌
자식 프로제스가 종료될 때 부모에게 output data를 보낸다.

[비자발적 종료]
abort()
-> 자식이 할당 자원의 한계치를 넘어설 때
-> 자식에게 할당된 태스크가 더 이상 필요하지 않음
-> 부모가 종료(exit)하는 경우 - 부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨
-> 키보드로 kill, break등을 친 경우

5-3 exec(), fork(), wait()

  • fork() :
    - 자식 프로세스는 부모 프로세스와 모든 문맥을 동일하게 가지고 있다.
    즉, 부모 프로세스가 현재 수행한 시점부터 수행하게 된다는 것이다. 부모에게는 return value가 양수, 자식 프로세스는 0을 갖게 된다.
    이를 통해 각자 다른 일을 하도록 프로그램을 작성할 수 있다.

- exec() : > 새로운 프로그램으로 태어나게 한다

-> 지금까지의 상태를 잊어버리고 그 주소공간을 완전히 새로운 프로그램으로 덮어씌운 후 첫 부분부터 다시 실행을 시작하도록 하는 시스템 콜이다.


  • wait() :

프로세스를 block상태로 만드는 시스템 콜

(자식 프로세스가 종료 되기를 기다리면서)
자식 프로세스가 종료되면 부모 프로세스는 block에서 ready상태로 변경된다.



5-4 프로세스 간 협력

  • 프로세스 간 협력 메커니즘 ( IPC : Inter process Communication)

[메세지를 전달하는 방법]

1) message passing :

커널을 통해 메세지 전달

  • 직접 전달 (이름을 명시적 표시)
  • 간접 전달
    [주소 공간을 공유하는 방법]

2)shared memory :

주소공간의 일부를 공유 한다.



profile
개발자를 꿈꾸는 대학생

0개의 댓글