[CS] - 운영체제(2)

박진우·2022년 8월 16일
0

Computer Science

목록 보기
6/7

💡 멀티 프로세스/스레드

◽ 멀티 프로세싱 (Multi-processing)

멀티 프로세싱은 하나의 프로그램여러 개의 프로세스로 구성해서 다수의 각 프로세스가 서로 협력적으로 1개의 작업처리하는 것을 의미한다.


  • 특징

    • 개의 프로세스가 죽어도 자식 프로세스 이외의 다른 프로세스들은 계속 실행된다.

    • Context Switching을 위한 오버헤드(캐시 초기화, 인터럽트 등)가 발생한다.

    • 프로세스는 각각 독립적인 메모리를 할당받았기 때문에 통신하는 것이 어렵다.

    • 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높다.

    • 멀티 스레드보다 많은 메모리공간CPU 시간을 차지하는 단점이 있다.




◽ 멀티 스레드

하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고, 자원의 생성관리 중복성 최소화하여 수행 능력을 향상 시키는 것

  • 프로세서가 여러 개인 경우 멀티 스레드를 통해 병렬성(Parallelism)
    높여 여러 작업이 동시에 수행될 수 있다.
  • 하나의 프로그램에서 동시에 여러 개의 일을 수행할 수 있도록 해준다.



◽ 멀티쓰레드의 장점

◾ 1. 응답성(Responsiveness)

  • 작업을 분리해서 수행하므로 실시간으로 사용자에게 응답할 수 있다.

  • 프로그램의 스레드중단되거나, 긴 작업을 수행하더라도 프로그램의 수행계속 되어 사용자에 대한 응답성이 증가한다.

◾ 2. 자원 공유(Resource sharing)

자신이 속한 프로세스 내 스레드들메모리 자원 공유하여 효율적으로 사용할 수 있다.

◾ 3. 경제성(Economy)

  • 프로세스를 새로 생성하는 비용보다 스레드를 새로 생성하는 게 훨씬 싸다.

  • Context switching의 오버헤드 또한 스레드가 더 경제적이다.

  • 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간시스템 자원 소모 줄어든다.

◾ 4. 확장성(Scalability)

  • 멀티 스레드인 경우 한 프로세스를 여러 프로세서에서 수행할 수 있으므로 훨씬 효율적이다. 

  • 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 병렬성이 증가한다.




◽ 멀티 쓰레드 프로그래밍 작성 시 유의점


멀티 쓰레드 프로그램을 개발한다면, 다수의 쓰레드공유 데이터동시에 접근하는 경우에 상호 배제를 제거해 교착 상태예방하고 동기화 기법을 통해 동시성 문제가 발생하지 않도록 주의해야 한다.




💡커널 레벨 스레드 & 사용자 레벨 스레드

◽ User-level Thread

사용자 스레드는 커널 영역의 상위에서 지원되며 일반적으로 사용자 수준라이브러리를 통해 구현된다.

이 경우 커널은 스레드의 존재를 인식하지 못하기 때문에 커널의 개입을 받지 않는다.


운영체제는 프로세스 안에 여러 스레드가 있다는 것을 모르기 때문에 커널은 하나의 프로세스로 인식한다.
따라서 하나의 스레드중단되면 같은 프로세스 내의 모든 스레드가 중단된다.

동일한 메모리 영역에서 스레드가 생성, 관리되므로 속도가 빠르다.

장점

  • 사용자 영역에서 생성 및 관리되므로 속도가 빠르다.

  • 커널의 개입을 받지 않기 때문에 이식성(portability)이 높다.


단점

  • 커널에서 스레드가 하나라고 판단하기 때문에 하나의 스레드중단되면 나머지 모든 스레드 역시 중단된다.




◽ 커널 레벨 스레드

  • 커널 수준 스레드는 운영체제가 지원하는 스레드 기능으로 구현되며, 커널이 스레드의 생성스케줄링 등을 관리한다.

  • 사용자수준 스레드와 커널 수준 스레드가 일대일(1:1)로 매핑.

  • 사용자 수준 쓰레드를 생성하면 이에 대응하는 커널 스레드 자동으로 생성.




◽ 혼합형 스레드

사용자 수준 스레드 커널 수준 스레드혼합한 구조이며, 이는 사용자 수준 스레드와 커널수준 스레드의 단점을 극복한 방법이다.

사용자 수준 쓰레드는 커널 수준 쓰레드와 비슷한 경량 프로세스에 다대다로 매핑되고, 경량 프로세스 커널 수준 쓰레드 일대일로 매핑된다.

➡️ 결국 다수의 사용자 수준 쓰레드다수의 커널 쓰레드가 다대다(n:m)로 매핑

장점

  • 프로세스 내 스레드들이 병행으로 수행이 가능.

  • 스레드 풀링 기법을 통해 일대일 스레드 매핑에서의 오버헤드를 줄여줍니다.

스레드 풀링 (Thread pooling)


시스템이 관리하는 쓰레드의 풀을 응용 프로그램에 제공하여 스레드를 효율적으로 사용할 수 있게 하는 방법이다.

  • 미리 생성한 스레드재사용하도록 하여 스레드를 생성하는 시간을 줄여 시스템의 부담을 덜어준다.

  • 또한 동시에 생성할 수 있는 스레드수를 제한하여 시스템자원 소비 줄여서 응용 프로그램의 전체 성능을 일정 수준으로 유지합니다.

0개의 댓글