신문

  • 우크라 불안에 석유·천연가스ETF 두자릿수 급등…곡물株도 들썩

    정말.. 무섭다. 실제로 계속 기사가 나오니까 이게 뭔가 싶은 마음이 제일 크다.
    그리고 가장 의문점은 어쩌다가 이렇게 되었는지 이유도 아직 모른다는 것이다. 물론 내가
    이러한 위험의 경우에는 실물 경제가 더 빨리 움직이는 건가 싶기도 하다.

  • "여기가 바닥인줄 알았는데 지하실 있었다"…저가매수 개미들 어쩌나

    맨날 현금 비중을 늘리라고 한다. 나는 물론 매수의 기회로 잡을 거다.
    최근에 비트코인을 접하며 역시 공부를 하는 것은 중요하다는 것을 다시 한 번 느꼈다.
    그것 처럼 일단 샀으면 그냥 좀 가지고 있어야 겠다.
    물론 언제나 물량이 적었으니까 이번에는 충분한 물량을 가져갈 수 있는 기회가 되지 않을까.

  • 풍부한 자금에 유니콘 늘었지만…족쇄 풀어야 '데카콘' 간다

    현재 등장한 새로운 기업들 중 핀테크 기업이 많다고 함. 그리고, 소프트웨어 개발자가 핵심인력이라 한다. 이들이 대기업으로 가는 사례가 많으니 인재가 부족하다고 한다. 이 기사를 통해 내가 갈 수 있는 길이 많구나를 다시 한 번 느끼고 아직 젊으니까... 더 열심히 살아보자. 현재 하고 있는 프로젝트 부터 성과를 볼 수 있도록...



동기화 Tool

운영체제

Mutex(mutual exclusion(상호 배제)) Lock

2개의 프로세스를 관리
원자성 함수 : acquire(), release()
lock을 얻음 -> Critical Section 진입 -> lock을 반납 (lock을 key라고 봐도 됨)

Busy waiting(Spinlock)
무한 루프를 수행하는데 아무 코드도 실행하지 않는 것을 뜻함.
단점 : CPU 1개일 때, 다른 프로세스들은 CPU를 낭비하면서 대기하게 됨.
장점 : 다른 CPU에서 무한루프로 대기하다가, 문맥교환 없이 CPU 사용가능 (원래 wait -> ready -> CPU로 가서 비용이 큼)

Semaphore

n개의 프로세스를 관리 가능
객체임. 객체의 내부 변수를 통해 관리함.
원자성 함수 : wait(), signal() 가지고 있음 (P(), V()라고 부르기도 함)

Binary

범위를 0 ~ 1로 제한해서 mutex lock과 동일하게 사용

Counting

범위의 제한을 두지 않아서 유한한 객체를 관리할 수 있음.
1. 초기화를 n으로 하게 됨.(n개의 객체를 관리)
2. wait()을 통해 n--를 수행 n의 값이 음수가 되면 wait으로 들어감.
3. signal()을 통해 n++을 수행 n의 값이 0이하이면 wait에서 꺼냄.

busy waiting을 사용하는데 이를 해결하기 위해 P(), V()로 정의를 수정함.
wait()의 경우에도 wait queue로 갈 경우, busy waiting보다 해당 프로세스를 suspend하여 wait queue로 이동.
signal()이 오면 프로세스를 다시 시작해서 ready queue로 보냄.

여러 쓰레드를 통해 사용해도 동일한 공유 자원을 접근하면 timing error가 있음.
여러 객체에 이를 사용한다면 없을 거임.

Monitor

개념 정의의 경우 다른 곳 찾아 보자..

자바 Monitor
synchronized : 특정 코드 범위를 Critical Section으로 만듬.(acquire, release가 포함)
해당 코드 범위는 parameter로 객체 인스턴스가 필요. 해당 객체는 모니터락을 제공할 객체임.
wait(), notify() : lock을 요구하고, 반납하는 함수.

필요한 생각

  • static으로 선언된 변수를 여러 객체가 접근하게 된다면 상호 배제가 불가능 하다.
  • 동일한 객체를 통해 여러 쓰레드가 접근을 하는 경우를 원함.
  • this를 주든, 특정 객체를 주든 해당 lock을 점유하는 쓰레드는 1개여야 함.

Liveness

progress(Deadlock), bounded-waiting(starvation)으로 위의 것으로는 해결할 수 없음.

Deadlock과 priority inversion이 liveness를 실패하게 함.
Deadlock : waiting queue에서 동일하게 대기하고 있는 프로세스가 발생시킬 수 있는 이벤트를 대기하는 경우.(서로가 서로를 대기함. 교착상태임)

Priority Inversion : 우선순위가 낮은 프로세스가 모두 실행되어야 높은 놈이 실행 가능. 이를 위해 높은 우선순위를 주기도 함(낮은 놈에게)
ex)프로세스 "상", "중", "하"가 존재할 떄 "하"가 세마포어 요청을 한 후 공유자원을 가지고 실행 중이다가, "상"도 실행이 됨. 이 때 세마포어를 요청. "하"가 lock을 가지고 있어 블락이 된 상태. 근데 "중"이 들어오게 된다면 "중"이 실행 되고 "상"은 블락되어 있어 "중"이 끝나고 "하"가 끝나서 반납을 해야 "상"이 실행이 가능. 이 상황이 문제임.

0개의 댓글