simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • JVM메모리구조
  • null
  • 스프링
  • 404
  • 자바프로그램
  • 자바
  • 자바프로그래밍
  • controllerTest
  • 컨트롤러
  • scanner #next() #nextLine()
  • 참조타입
  • 참조변수
  • 자바메모리구조

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

[운영체제] 스레드 - 동기화, 뮤텍스/세마포어, 데드락/스타베이션
Computer Science/OS

[운영체제] 스레드 - 동기화, 뮤텍스/세마포어, 데드락/스타베이션

2022. 7. 23. 20:49

|  쓰레드란?

- Light Weight Process

- 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위

출처:위키백과

 

|  프로세스와 쓰레드의 차이점

  프로세스 스레드
차이점 프로세스 간에 독립적이다 프로세스의 서브셋
각각의 프로세스가 독립적인 자원 가짐 프로세스 자원 공유
프로세스 자신만의 주소영역을 가짐 스레드는 주소 영역을 공유한다
IPC 기법으로 통신 가능 별도의 통신 기법이 필요 없다

 

|  스레드 장단점 정리

  내용 추가 설명
장점 성능 향상 멀티 스레드로 병렬 처리
응답성 향상 다수의 사용자의 요청이 오거나,
여러개의 처리와 동시에 요청이 이루어질 때 응답성이 향상
자원 공유 효율 프로세스 내부에서 스레드 간 자원 공유(IPC X)
단점 한 스레드가 프로세스 전체에 영향을 준다 멀티 프로세스의 경우, 하나의 프로세스가 문제가 있어도
다른 프로세스에 영향 주지X
동기화 이슈 동기화 코드를 적절히 추가해야한다.

 

|  스레드 동기화 이슈 이해

동기화(Synchronization) : 작업들 사이에 실행 시기를 맞추는 것

- 여러 개의 스레드가 하나의 자원에 동시에 접근, 수정할 때 동기화 이슈가 발생한다. 

 

|  동기화 이슈 해결 코드 작성 방법

임계 구역에 대한 접근을 막기 위해 Locking 매커니즘이 필요하다

  Mutual exclusion (상호 배제) = Mutex Semaphore (세마포어)
공통점 임계 구역에 대해 Locking(자바는 synchronized)을 걸어 동기화 이슈 해결
차이점 임계 구역에 하나의 스레드만 들어갈 수 있게 한다. 임계 구역에 여러 스레드가 들어갈 수 있게 한다
(Counter를 두어 동시 접근 가능 수 제어)

[ 자바 코드 예시 ]

class Shared { // 공유 자원
 
    // 임계 자원(공유 데이터)
    private static int sharedData = 0; 
 
    // 임계 영역(임계 자원을 사용하는 부분에 동기화 코드 추가)
    public synchronized void count(int n){
        sharedData = sharedDate + n;
    }
}

class Visitor extends Thread { // 공유 자원 방문자
	
    private int n;
    
    Visitor(int n) {
    	this.n = n;
    }
    
    @Override
    public void run(){
        for (int i = 0; i < 100; i++){
            MainThread.shared.count(n);
        }
    }
}

public class MainThread{

    public static Shared sharedData = new Shared();

    public static void main(String[] args) throws Exception{
        
        for (int i = 0; i < 100; i++){
            Visitor visitor = new Visitor(i);
            visitor.start(); // 누가 언제 sharedData를 갱신하는지 모른다.
        }
    }
}

 

|  데드락(교착 상태)과 스타베이션(기아 상태) 개념 이해

  데드락(교착상태) 스타베이션(기아 상태)
의미 무한 대기 상태 우선순위에 따른 자원 미할당 상태
언제? 여러 프로세스가 동일 자원 점유 요청할 때 여러 프로세스가 부족한 자원을 점유하려 경쟁할 때
어디서? 프로세스, 스레드 모두에서 발생 가능 프로세스에서만 발생
어떻게? 두 개 이상의 작업이
상대방의 작업이 끝나는 걸 기다림
특정 프로세스의 우선순위가 낮아
영원히 자원을 할당받지 못하게 됨
비고

내 폰의 어떤 앱이 갑자기 멈춰버렸다.
-> 운영체제가 보통 어느정도 시간이 지나면
    강제 종료시켜 버린다.
기아 상태는 우선순위를 변경하면 해결된다.
- 프로세스 우선순위 수시 변경
- 오래 기다린 프로세스 순위 변경
- 우선순위가 아닌 FIFO 기반 요청큐 사용

출처 - 위키 백과

 

|  확인하기

1. 프로세스 간에 어떻게 통신하는지, 쓰레드와 비교하여 설명하라

2. 프로세스와 쓰레드의 차이점

3. 언제 멀티 프로세스를 사용하고, 언제 쓰레드를 써야하나

4. 쓰레드 동기화란 무엇이며 왜 사용해야 하나

5. 뮤텍스와 세마포어의 차이점에 대해 설명하라

 

[ 출처 ]

부트 캠프 강의를 듣고 책, 블로그 내용 등을 참조하여 정리하였습니다.

 

[참고]

위키백과

https://jhnyang.tistory.com/3

https://donghoson.tistory.com/8?category=799810 

https://brunch.co.kr/@kd4/3

 

'Computer Science > OS' 카테고리의 다른 글

[운영체제] 파일 시스템  (0) 2022.07.25
[운영체제] 가상 메모리와 페이징 시스템  (0) 2022.07.23
[운영체제] 프로세스와 스케줄러  (0) 2022.07.23
[운영체제] 운영체제란? 커널, 시스템 콜, 커널 모드  (0) 2022.07.23
[컴퓨터 구조] 컴퓨터 구조  (0) 2022.07.11
    'Computer Science/OS' 카테고리의 다른 글
    • [운영체제] 파일 시스템
    • [운영체제] 가상 메모리와 페이징 시스템
    • [운영체제] 프로세스와 스케줄러
    • [운영체제] 운영체제란? 커널, 시스템 콜, 커널 모드
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바