[Computer Science] Operating System(Process & Thread)

Arkiee·2022년 10월 22일
1

Computer Science

목록 보기
1/9
post-thumbnail
post-custom-banner

운영체제란,

  • 일반적으로 하드웨어를 관리하고, 응용 프로그램과 하드웨어 사이에서 인터페이스 역할을 하며 시스템의 동작을 제어하는 시스템 소프트웨어를 운영체제라고 합니다.

프로세스란,

  • 프로세스(process)는 실행 중인 하나의 애플리케이션을 말한다. 사용자가 애플리케이션을 실행하면 운영체제는 메모리를 할당하여 애플리케이션의 코드를 실행시키는데 이것을 프로세스라고 합니다.

프로세스의 주소공간에 대해 설명하시오.

  • 프로그램이 CPU에 의해 실행되면 프로세스가 생성되고 메모리에 '프로세스 주소 공간'이 할당됩니다. 이 때 프로세스 주소 공간은 코드, 데이터, 스택, 힙 영역으로 이루어져 있습니다.
    • 코드 Segment: 프로그램 소스 코드 저장
    • 데이터 Data: 전역 변수 저장
    • 스택 Stack: 함수, 지역 변수 저장
    • 힙 Heap: 동적 할당 시 사용

쓰레드(Thread)란 무엇인가?

  • 쓰레드란 프로세스 내에서 실행되는 실행 단위이다. 프로세스가 할당받은 자원을 이용하며 메모리, 자원 등을 공유한다. 프로세스의 Code, Data, Heap 영역을 공유하고 있으며, Stack만 스레드 별로 가지게 됩니다.

다른 자원들은 공유하지만 굳이 스택만 분리해서 사용하는 이유는?

  • 후입 선출이라는 스택의 특성과 연관이 있습니다. 코드와 데이터 힙 영역을 공유하는 것에는 큰 문제가 없지만, 스택 영역은 스택이 쌓이면 위에서부터 프로세스가 섞인 채로 순서대로 나오게 되므로 더 복잡해지기 때문에 원활한 실행 흐름을 위해 스택은 독립적으로 존재하게 됩니다.

멀티 프로세스 대신 멀티 쓰레드를 사용하는 이유는?

  • 프로그램을 여러 개 실행하는 것보다 하나의 프로그램 안에서 여러 작업을 해결하기 위해서 입니다. 이유는 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있습니다. 또한, 프로세스간의 통신보다 쓰레드 간의 통신의 비용이 적은 것이 멀티 쓰레드를 사용하는 이유입니다.

Thread-Safe란?

  • 멀티쓰레드 환경에서 여러 쓰레드가 동시에 하나의 객체 및 변수에 접근할 때 충돌이 발생하지 않고 동작하는 것을 "Thread-Safe하다"라고 합니다.

Mutex와 Semaphore의 차이는?

  • Mutex는 동기화 대상이 오직 하나뿐일 때, Semaphore는 동기화 대상이 하나 이상일 때 사용합니다.
  • 뮤텍스: 한 쓰레드, 프로세스에 의해 소유될 수 있는 Key를 기반으로 한 상호배제기법
  • 세마포어: Signaling mechanism. 현재 공유자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타내는 값을 두어 상호배체를 달성하는 기법

※ 그 외

  • Semaphore는 Mutex가 될 수 있지만 역은 안된다.
  • Mutex는 상태가 0, 1 두 개 뿐인 binary Semaphore
  • Semaphore는 시스템 범위에 걸쳐있고 파일시스템상의 파일 형태로 존재하는 반면, Mutex는 프로세스 범위를 가지며 프로세스가 종료될 때 가동으로 Clean up 된다.

심화

자바 쓰레드란?

  • 일반 쓰레드와 거의 차이가 없으며, JVM가 운영체제의 역할을 한다.
  • 자바에는 프로세스가 존재하지 않고 쓰레드만 존재하며, 자바 쓰레드는 JVM에 의해 스케줄되는 실행 단위 코드 블록이다.
  • 자바에서 쓰레드 스케줄링은 전적으로 JVM에 의해 이루어진다.

프로세스와 쓰레드를 설명할 수 있는 예시를 말해보시오.

  • 게임으로 쉬운 예를 생각해 볼 수 있습니다. 게임을 실행하면 배경 사운드가 나오고, 화면에 영상이 나오고 유저 캐릭터, NPC 등 다양한 상호작용이 가능합니다. 이것은 단일 프로세스의 단일 쓰레드로는 불가능합니다. 사운드를 들려주는 쓰레드, 애니메이션을 보여주는 쓰레드, 캐릭터를 움직이게 하는 쓰레드, 등이 각자 자기 할일을 하고 있으며, 각각의 쓰레드가 CPU의 자원을 독점적으로 쓰지 않고 적절히 양보하면서 쓰기 때문에 가능합니다.

프로세스의 주소공간을 나눈 이유는?

  • 최대한 데이터를 공유하여 메모리 사용량을 줄여야 합니다. Code는 같은 프로그램 자체에서는 모두 같은 내용이기 때문에 따로 관리하여 공유합니다. Stack과 data를 나눈 이유는, 스택 구조의 특성과 전역 변수의 활용성을 위한 것입니다. 프로그램의 함수와 지역 변수는, LIFO(후입선출) 특성을 가진 스택에서 실행됩ㄴ디ㅏ. 따라서 이 함수들 안에서 공통으로 사용하는 '전역 함수'는 따로 지정해주면 메모리를 아낄 수 있습니다.

[개념정리]

멀티 프로세스와 멀티 쓰레드

  • 멀티 프로세스
    • 장점
      • 하나의 프로세스가 비정상적으로 종료되더라도 다른 프로세스가 영향을 받지 않음
      • 멀티 스레드처럼 동기화 작업이 별도로 필요하지 않음
    • 단점
      • 자원 소모, 메모리 낭비, 문맥 교환(context switching)으로 인한 비효율성
      • IPC 통신으로 인한 비용
  • 멀티 쓰레드
    • 장점
      • 문맥 교환에 소비되는 시간을 줄일 수 있음(스택 영역만 문맥교환이 일어남)
      • 자원을 공유하기 때문에 메모리 낭비를 줄임
    • 단점
      • 여러 개의 쓰레드는 프로세스 내부의 자원을 공유하기 때문에 하나의 쓰레드가 자신의 데이터 공간을 망가뜨린다면 해당 프로세스의 데이터를 공유하고 있는 모든 쓰레드의 치명적인 문제를 발생시킨다.
      • 여러 개의 쓰레드를 이용하는 경우, 미묘한 시간차나 잘못된 변수를 공유함으로써 오류가 발생할 가능성이 있음. 따라서, 쓰레드 간에 통신할 경우에는 충돌 문제가 발생하지 않도록 동기화 문제를 해결해야 합니다.

Mutex와 Semaphore의 차이

1. 가장 큰 차이점은 관리하는 동기화 대상의 개수

  • Mutex는 동기화 대상이 오직 하나, Semaphore는 동기화 대상이 하나 이상일 때 사용

2. Semaphore는 Mutex가 될 수 있지만 Mutex는 Semaphore가 될 수 없음

  • Mutex는 상태가 0, 1 두 개 뿐인 Binary Semaphore

3. Semaphore는 소유할 수 없는 반면, Mutex는 소유가 가능하며 소유주가 이에 대한 책임을 가짐

  • Mutex의 경우 상태가 두 개 뿐인 lock이므로 lock을 가질 수 있다.

4. Mutex의 경우, Mutex를 소유하고 있는 쓰레드가 이 Mutex를 해제할 수 있다. 하지만, Semaphore의 경우 이러한 Semaphore를 소유하지 않는 쓰레드가 Semaphore를 해제할 수 있음

5. Semaphore는 시스템 범위에 걸쳐있고 파일시스템상의 파일 형태로 존재하는 반면, Mutex는 프로세스 범위를 가지며 프로세스가 종료될 때 자동으로 Clean up 된다.

profile
꿈을 꾸는 개발자
post-custom-banner

0개의 댓글