전체 글

전체 글

    전통적 동기화 예제 (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;

    프로세스 동기화

    1. 프로세스 동기화 프로세스 동기화는 쓰레드 동기화를 의미한다. 1) Independent process vs Cooperating process Cooperating process란 시스템 내 다른 프로세스와 영향관계에 있는 프로세스를 의미한다. - 프로세스 간 통신 : 전자우편, 파일전송 - 프로세스 간 자원공유 : 메모리 상의 자료들, 데이터베이스 등 - 예 : 명절 기차표 예약, 대학 온라인 수강신청, 실시간 주식거래 2) Cooperating process에서 동기화 문제 Concurrent access는 공유하는 데이터에 대해 데이터 정합성 문제를 일으킬 수 있다. 즉, 데이터 오류가 발생할 수 있다. 데이터 정합성이 유지되도록 Cooperating process의 실행 순서를 정해줄 필요가..

    프로세스 동기화

    1. 쓰레드(Thread) 쓰레드(Thread)란 프로그램 내부의 흐름, 맥을 의미한다. 1) Multithreads 다중 쓰레드(Multithreads)란 한 프로그램에 2개 이상의 맥이 흐르는 것을 말한다. 맥이 매우 짧은 시간 간격으로 빠르게 스위칭 되면 여러 맥이 동시에 실행되는 것처럼 보인다. (concurrent vs simultaneous; 한번에 하나만 처리되지만 마치 동시에 처리되는 것처럼 보이는 것을 concurrent라고 한다.) 예1: Web browser ; 화면 출력하는 쓰레드 + 데이터 읽어오는 쓰레드 예2: Word processor; 화면 출력하는 쓰레드 + 키보드 입력받는 쓰레드 + 철자/문법 오류 확인 쓰레드 그외) 음악 연주기, 동영상 플레이어, Eclipse IDE ..

    프로세스 생성과 종료

    1. 프로세스 생성(Process Creation) 프로세스는 프로세스에 의해 만들어진다! - 부모 프로세스(Parent process) - 자식 프로세스(Child process) cf. 형제 프로세스(Sibing process) : 같은 부모 프로세스에서 나온 자식 프로세스는 형제 프로세스이다. - 프로세스 트리(process tree) 1) Process Identifier(PID) Typically an integer number (0, 1, ...) : 0은 가장 처음 생성되는 프로세스이다. cf. PPID : 부모의 PPID (Parent PID) 2) 프로세스 생성 - fork() system call - 부모 프로세스 복사 - exec() - 실행파일을 메모리로 가져오기, 즉 실행파일을 메..

    CPU 스케쥴링 알고리즘(3) - Multilevel Queue Scheduling, Multilevel Feedback Queue Scheduling

    1. Multilevel Queue Scheduling 1) Process groups - System processes : o/s 프로세스(ex. 파일 읽기) - Interactive processes : 사용자 프로세스 (ex. 게임) - Interactive editing processes : 편집하는 프로그램 (ex. word) - Batch processes : 일괄적으로 처리하는 프로세스 - Student processes 2) Single ready queue - Several separate queues 위 그룹처럼 각각 성질이 다른 큐를 하나의 Ready Q로 처리하는 것은 무리가 있다. 왜냐하면 각기 다른 중요도를 갖고 있기 때문이다. 그래서 각 그룹 별로 여러개의 큐를 둔다. 각각의 ..