delpho

운영체제에 대하여 - 4 본문

CS

운영체제에 대하여 - 4

delpho 2022. 7. 27. 20:27

_1. Thread-safe 하다는 의미와 설계하는 법을 설명해보세요.

thread-safe는 어떤떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없다는 의미입니다. 공유 자원에 불변객체를 사용하거나 뮤텍스, 세마포어를 사용하여 통제할 수 있도록 설계하면 좀 더 thread-safe해집니다.

 

 

 

[ Thread-safe 하다 ]

 

  • 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음
  • 엄밀하게는, 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것으로 정의
    • 교착상태의 반대 의미로 생각해도 될듯?

 

[ Thread-safe 하게 설계하는 방법 ]

 

  1. Re-entrancy
    • 어떤 함수가 한 스레드에 의해 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하더라도 그 결과가 각각에게 올바르게 주어져야 한다.
    • 뭔가 말이 어려워 보이지만 결국 함수에서 사용되는 변수들을 각 스레드에게 독립적인(다른 스레드에게 영향을 주지 않음) 변수를 사용하도록 설계하라는 의미인 것 같다.
  2. Thread-local storage
    • 공유 자원의 사용을 최대한 줄여 각각의 스레드에서만 접근 가능한 저장소들을 사용함으로써 동시 접근을 막는다.
    • 즉, 스레드끼리 공유하는 힙, 데이터 영역의 자원 접근을 최소화하고, 각 스레드가 독립적으로 가지는 스택 영역의 자원만 사용하도록 설계하라는 의미인 것 같다.
  3. Immutable objects
    • 공유 자원을 사용한다면 불변 객체를 사용하라는 의미이다. 불변 객체는 변하지 않는 읽기 전용 자원이기 때문에 여러 스레드가 동시에 접근해도 스레드 안전성이 보장된다.
    • Java에서 대표적인 immutable 객체로 String 객체가 존재한다.
    • 만약 변경 가능한 객체를 사용한다면 공유 객체를 그대로 가져와서 사용하지 말고 새로운 객체를 생성하여 공유 자원 객체의 값들을 복사하여 사용하자.
  4. Mutual exclusion
    • 공유 자원을 꼭 사용해야 할 경우 해당 자원의 접근을 세마포어 등의 락으로 통제한다.
    • Java의 synchronized를 사용하라는 의미이다.
    • synchronized 키워드를 사용하면 어떤 한순간에는 하나의 스레드 만이 임계 영역(Critical Section) 안에서 실행하는 것이 보장된다.
  5. Atomic operations
    • 공유 자원에 접근할 때 원자 연산을 이용하거나 '원자적'으로 정의된 접근 방법을 사용함으로써 상호 배제를 구현할 수 있다.
    • 원자적 연산이란 중단되지 않는 연산을 의미하며 스레드가 절대 간섭할 수 없음이 보장된다.

 

 

 


_2. 프로세스 동기화에 대해 설명해보세요.

 

프로세스는 크게 다른 프로세스에게 영향을 받거나 주는 프로세스인 Cooperating process와 아무런 영향을 미치지 않는 프로세스인 Independent process 가 있습니다. 이 때, 다른 프로세스에게 영향을 주거나 받는 프로세스들이 공유 자원에 접근하더라도 이 자원의 일관성을 유지하는 것이 프로세스 동기화 입니다.

 

 

 

 

현대 컴퓨터의 메모리에는 여러 프로세스가 존재하는데, 이러한 프로세스들이 하나의 공유 메모리나 또 다른 프로세스에 접근할 때는 매우 신중해야 한다. 이처럼 한 프로세스가 다른 프로세스에게 영향을 받거나 주는 프로세스를 Cooperating process라고 한다. 반대로 아무런 영향을 미치지 않는 독립적인 프로세스는 Independent process이다.

 

현대 컴퓨터 환경에는 cooperating process가 훨씬 많이 존재하고, 이들은 서로 영향을 미치기 때문에 데이터나 흐름에 대한 동기화가 매우 중요하다. 프로세스 사이에 동기화를 하는 것을 프로세스 동기화(Process Synchronization) 라고 한다.(현재에는 대부분 쓰레드 기준으로 스위칭을 하므로, Thread synchronization으로 많이 불린다.)

 

대표적인 예로 기차표 예매가 있다. 어느 시간에 한 좌석의 기차표는 반드시 하나만 존재해야한다. 그런데 이를 예매하려는 사용자(프로세스)는 여러 명이다. 이 사용자들이 동시에 하나의 좌석 기차표를 구매하려고 하면 어떠한 일이 발생할까? 실제 환경에서는 당연하게도 동기화 문제를 해결한 시스템이므로 한 사람만이 기차표를 예매할 수 있을 것이다. 만약 동기화에 문제가 발생한다면 한 기차표를 여러 사람이 예매하는 불상사가 발생할 수 있다.

 

프로세스 동기화는 여러 프로세스가 공유하는 자원의 일관성을 유지하는 것이다. 가령 여러 프로세스가 동시에 하나의 공유된 자원에 접근하려고 할 때 이 프로세스들의 순서를 정하여 데이터의 일관성을 유지시켜주어야 한다.

 

 

 

 

 


출처

https://sorjfkrh5078.tistory.com/267

 

스레드 안전(Thread Safe)을 지키기 위한 방법

스레드란 CPU 이용의 기본 단위로써 프로세스의 실행 단위이다. 하나의 프로세스는 한 개 이상의 스레드를 가질 수 있는데, 이처럼 다수의 스레드를 수행하는 것을 멀티 스레딩이라고 한다. 프로

sorjfkrh5078.tistory.com

https://velog.io/@codemcd/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-8.-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8F%99%EA%B8%B0%ED%99%94-1

 

[운영체제(OS)] 8. 프로세스 동기화 1

현대 컴퓨터의 메모리에는 여러 프로세스가 존재하는데, 이러한 프로세스들이 하나의 공유 메모리나 또 다른 프로세스에 접근할 때는 매우 신중해야 한다. 이처럼 한 프로세스가 다른 프로세스

velog.io

 

'CS' 카테고리의 다른 글

운영체제에 대하여 - 6  (0) 2022.08.07
운영체제에 대하여 - 5  (0) 2022.07.30
운영체제에 대하여 - 3  (0) 2022.07.27
운영체제에 대하여 - 2  (0) 2022.07.24
운영체제에 대하여 - 1  (0) 2022.07.24