본문 바로가기

CS/운영 체제

4.4 스레드의 추가적 이슈들

4.4 스레드의 추가적 이슈들
4.4.1 멀티스레드와 fork(), exec()
4.4.2 자원 동기화 문제
4.4.3 스레드 요약

4.4.1 멀티스레드와 fork(), exec()

 만약 멀티 스레드에서 fork() 시스템 콜을 실행한다면 어떻게 될까?

 

 여러 스레드 중 한 스레드가 fork()를 호출할 시, 새로운 프로세스는 fork()를 호출한 스레드만 복제할 것이다. 코드 자체는 복사가 되겠지만, 호출한 스레드만 Running state가 되는 것이다. 또한 한 스레드가 exec()를 호출할 경우 프로세스 전체가 사라진다.

 

 그렇다면 fork()가 모든 스레드를 복제한다면 어떻게 될까?

 fork() 이후 exec()를 호출한다면 어차피 바뀔 것이므로 모든 스레드를 복제할 이유가 없을 것이다. 그러나 exec()가 호출되지 않는 상황에서는 모든 스레드의 복제가 유의미하다.

 

4.4.2 자원 동기화 문제

 여러 스레드들은 하나의 자원을 공유한다. 여기서 공유 데이터 훼손 문제가 발생할 수 있다.

 

Therad-safe

 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다. 이러한 Thread-safe를 지키기 위한 네 가지 방법이 있다.

 

  1. Re-entrancy : 어떤 함수가 한 스레드에 의해 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하더라도 그 결과가 각각에게 올바르게 주어져야한다.
  2. Thread-local storage : 공유 자원의 사용을 최대한 줄여 각각의 스레드에서만 접근 가능한 저장소들을 사용함으로써 동시 접근을 막을 수 있다. 이 방식은 동기화 방법과 관련되어있고, 공유 상태를 피할 수 없을 때 사용한다.
  3. Mutual exclusion : 공유 자원을 꼭 사용해야 할 경우 해당 자원의 접근을 세마포어 등의 락으로 통제한다.
  4. Atomic operations : 공유 자원에 접근할 때 원자 연산을 사용하거나 '원자적'으로 정의된 접근 방법을 사용함으로써 상호 배제를 구현한다.

4.4.3 스레드 요약

 프로세스는 스레드들의 공유 공간이다. 프로세스에서 스레드의 주소 공간이 형성되고 공유되는 것이다.

 

 프로세스는 운영체제가 응용프로그램을 적재하는 단위이고, 스레드는 실행하는 단위이다.

  • PCB에 저장된 정보는 환경 컨텍스트
  • TCB에 저장된 정보는 실행 컨텍스트

 다른 프로세스에 속한 스레드로의 스위칭보다 동일한 프로세스에 속한 스레드 스위칭은 속도가 빠르다.

 

 프로세스에 속한 모든 스레드가 종료할 때, 프로세스가 종료한다.

 

 스레드로 프로그램을 작성할 경우의 이점

 1. 병렬 실행 덕분에 실행 성능이 좋아진다.

 

 2. 우수한 응답성을 지닌다.

    - 한 스레드가 블록되어도 다른 스레드를 통해 사용자 인터페이스가 가능하다. 이는 서버 프로그램을 운영하는데 용이하다.

 

 3. 시스템 자원 사용의 효율성도 좋아진다.

    - 스레드는 프로세스에 비해 생성 유지 시 메모리나 자원을 적게 사용하기 때문이다.

 

 4. 응용 프로그램의 구조를 단순화 할 수 있다.

    - 응용 프로그램을 작업 기준으로 여러 함수로 분할할 수 있다.

    - 각 함수 별로 스레드를 만들어 동시 실행할 수 있다.

    - 새로운 기능을 추가하기 용이하며, 프로그램의 높은 확장성등의 유용성이 있다.

 

 5. 작성이 쉽고 통신이 효율적이다.

 

 

 스레드 요약

 프로세스의 컨텍스트 스위칭 오버헤드로 인해 스레드의 개념이 등장했다. 오늘 날, 스레드가 실질적인 실행 단위이며, 프로세스는 스레드의 컨테이너이다. 함수 하나를 스레드 하나로 보면 쉽다.

 

 스레드 주소 공간은 프로세스 주소 공간 내에 형성된다.

 

 스레드 관련 연산에는 스레드 라이프 사이클과 생성, 종료, 조인, 양보 등의 동작이 있다. 또한 TCB로 제어된다.

 

 멀티 스레딩 모델에는 사용자 레벨 스레드와 커널 레벨 스레드가 있었다.

'CS > 운영 체제' 카테고리의 다른 글

4.3 스레드 모델  (3) 2024.04.20
4.2 스레드 Deep dive  (5) 2024.04.20
4.1 스레드 개요  (1) 2024.04.20
4.0 스레드  (1) 2024.04.20
3.4 프로세스 계층 구조  (2) 2024.04.20