Programming

    프로세스 동기화 도구 - 모니터(Monitor)

    1. 모니터(Monitor) 모니터란 세마포 이후의 프로세스 동기화 도구이다. 세마포보다 한단계 높은 고수준 개념이다. 1) 모니터의 구조 모니터는 공유자원 + 공유자원 접근함수로 이루어져 있다. 모니터에는 2개의 큐가 존재한다. 하나는 배타동기를, 또하나는 조건동기를 처리한다. 공유자원 접근함수에는 최대 1개의 쓰레드만 진입 가능하다. 진입한 쓰레드가 조건동기로 블록되면 새 쓰레드가 진입할 수 있다.새 쓰레드는 조건동기로 블록된 쓰레드를 깨울 수 있다.(notify())깨워진 쓰레드는 현재 쓰레드가 나가면 재진입할 수 있다. 2. 자바 모니터 자바의 모든 객체는 모니터가 될 수 있다. - 배타동기 : synchronized 사용하여 지정 - 조건동기 : wait(), notify(), notifyAll..

    교착상태 처리

    교착상태를 처리하는 방법에는 4가지가 있다. 1. 교착상태 방지(Deadlock Prevention) 2. 교착상태 회피(Deadlock Avoidance) 3. 교착상태 검출 및 복구(Deadlock Detection ) 4. 교착 상태 무시 (Don't Care) 1. 교착상태 방지 교착상태의 4가지 필요조건 중 한 가지 이상 불만족하게 만들어 교착상태를 방지한다. 1) 상호배타조건을 불만족 프로세스끼리 자원을 공유가능하도록 만든다. 그러나 이 방법은 원천적으로 불가능할 수도 있다. 2) 보유 및 대기 조건을 불만족 자원을 가지고 있으면서 다른 자원을 기다리지 않게 만든다. 예를 들어 자원이 없는 상태에선 모든 자원을 대기하게 만들 수 있다. 그래서 일부 자원만 접근가능하다면 프로세스가 보유하고 있는..

    전통적 동기화 예제 (3) 식사하는 철학자 문제

    1. Dining Philosopher Problem 1) 식사하는 철학자 문제 5명의 철학자와 5개의 젓가락이 있다고 가정해보자. 철학자는 생각 → 식사 → 생각 → 식사 과정을 반복한다. 철학자는 자신의 왼쪽 젓가락을 집고, 오른쪽 젓가락을 집어야만 식사가 가능하다. 젓가락을 세마포로 구현하면 프로그램으로 구현할 수 있다. (# of permit = 1) 젓가락은 왼쪽 젓가락을 먼저 사용하고, 오른쪽 젓가락을 나중에 사용해서 철학자가 식사할 수 있도록 구현한다. 2) 잘못된 결과 도출 : starvation 실제로 이를 프로그램으로 구현하면 모든 철학자가 식사를 하지 못해 굵어죽는 상황이 발생한다. 즉, 도중에 프로그램이 멈추는 현상이 계속해서 발생하게 된다. 이러한 현상이 발생하는 이유는 교착상태(..

    전통적 동기화 예제 (2) 공유 데이터베이스 접근

    Readers - Writers Problem 1) 공통 데이터베이스 - Readers : read data, never modify it - Writers : read data and modify it - 상호배타 : 한 번에 한개의 프로세스만 접근가능하도록 => 공유 데이터베이스에서 비효율적 2) 효율성 제고 공유 데이터에 대한 읽기, 쓰기는 임계구역 내에서 발생한다. Writer 간에는 상호배타를 보장해야 한다. 즉, 한 번에 한 Writer만 공유 데이터에 접근가능하도록 만든다. Reader 간에는 상호배타를 적용하지 않는다. 그래서 다수의 Reader 가 동시에 공유데이터를 읽을 수 있도록 한다. 물론, Writer가 공유 데이터에 접근할 때 Reader는 접근할 수 없고, Reader가 접근할..

    전통적 동기화 예제 (1) 생산자 - 소비자 문제

    1. 전통적 동기화 예제 1) 생산자 소비자 문제 (Producer - Consumer Problem) - 생산자 - 소비자 문제 - 유한 버퍼 문제 (Bounded Buffer Problem) 2) 공유 데이터베이스 접근 (Readers-Writers Problem) 3) 식사하는 철학자 문제 (Dining Philosopher Problem) 2. 생산자 소비자 문제 (Producer - Consumer Problem) 생산자가 데이터를 생산하면 소비자는 생산된 데이터를 소비한다. 예) 컴파일러 > 어셈블러, 파일 서버 > 클라이언트, 웹서버 > 웹클라이언트 컴파일러가 생산한 코드를 어셈블러가 소비해서 실행가능한 오브젝트 코드로 만든다고 볼 수 있다. 1) Bounded Buffer 생산된 데이터는 ..

    CORS 설정시 PUT, DELETE 요청하면 OPTIONS 403에러가 나는 경우

    백엔드 API 구현한 뒤 다음과 같이 CORS 전역 설정을 하였는데 오류가 났었습니다. 게시글 조회, 등록의 경우 CORS 설정이 잘 되었으나 게시글 수정, 삭제할 때 CORS 설정이 적용이 안되서 OPTIONS 403 에러가 났었습니다. @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*"); } } 해결 방법 오버라이딩한 메소드 addCorsMappings의 인자값 CorsRegistry를 보면 다음 메소드를 볼 수 있습니다. 그래서 Ma..

    세마포 예제(Java)

    BankAccount Problem(은행계좌 문제) 세마포를 사용해 해결할 수 있는 문제는 Mutual exclusion(상호 배타)와 Ordering(순서를 어떻게할지) 이다. 다음 예제 코드를 통해 위 문제에 대한 세마포의 활용방법을 알아보자. 1. Mutual exclusion(상호 배타) : 한번에 한 쓰레드만 접근하도록 부모님은 은행 계좌에 입금; 자녀는 출금하는 예제이다. Thread를 상속받은 Parent와 Child 클래스를 만들어 BankAccount에 각각 입금, 출금을 반복해본다. public class Test { public static void main(String[] args) throws InterruptedException { BankAccount b = new BankAc..

    프로세스 동기화 도구 - 세마포

    1. 동기화 도구 종료 - Semaphors(세마포) : 가장 전통적인 동기화 도구 - Monitors - Misc. 2. Semaphores(세마포) 사전적 정의 : n. (철도의) 까치발 신호기, 시그널; (군대의) 수기 신호 세마포란 동기화 문제 해결을 위한 소프트웨어 도구를 말한다. 네덜란드의 Edsger Dijkstra가 제안했다. 구조 : 정수형 변수 + 두개의 동작(P, V) 동작 : P: Proveren(test) => acquire() V: Verhogen(increment) => release() 코드: 1) 일반적 사용(1) : Mutual exclusion(상호 배려) - sem.value = 1;