# monitor

Thread의 safety와 unsafety - [AI + 웹개발 취업캠프, 정보통신산업진흥원(NIPA)]
Thread의 safety와 unsafety란? 스레드 안전성(thread-safety) > 동시에 여러 스레드가 동일한 데이터에 접근할 때(다중 스레드 환경에서) 데이터의 일관성이 유지되는 것 다중 스레드 환경에서 프로그램의 실행에 문제가 없는 것 Thread-sate하다라는 의미는 두 개 이상의 스레드가 race condition에 들어가거나 같은 객체에 동시에 접근해도 연산 결과는 정합성이 보장될 수 있게 메모리 가시성이 확보된 상태다. 다중 스레드 환경에서 적절한 동기화 도구 없이 여러 스레드가 동일한 데이터를 동시에 수정하려 할 경우 데이터의 상태가 불

Process Synchronization
이화여자대학교 반효경 교수님의 2014년 Operating System 강의를 시청한 후 정리한 내용이다. http://kocw.net/home/cview.do?cid=3646706b4347ef09 Race Condition 위 두 개의 코드는 각각 Producer와 Consumer로, count 변수의 값을 증가 또는 감소하는 역할을 한다. 만약 Producer와 Consumer가 둘 다 실행되어 동일한 count 변수를 바꾼다고 할 때, 아래와 같은 문제가 발생할 수 있다. count의 초기 값은 5라고 가정할 때, 이상적인
[Postgres] 성능 분석
Mastering Postgresql 13 chapter 6 을 간단히 정리한 글입니다. Spotting problems Inspecting estimates 실제와 다를 수 있기 때문에 Analyze 로 해야함 과소평가되는 cross-column correlation 를 주의할 필요가 있다 Inspecting buffer usage 램에 캐싱된 데이터를 가져오는 것이 디스크에서 블록사이즈로 가져오는 것 보다 100배 빠름 Fixing high buffer usage CLUSTER 사용 특정 인덱스에 맞게 테이블 row 를 rewrite 테이블 락을 사용하기 때문에 OLTP 에서는 어려움 Understanding and fixing joins Getting joins right outer join 은 생각한 대로 동작하지 않음 Processing outer joins inner joi

[Operating System] Monitors
Semaphore, Mutex는 물론 Synchronization 문제를 해결하는 데에 많은 도움이 되는 도구들이지만, 실제로 프로그래밍 시에 실수를 굉장히 자주하게 되는 부분이기도 하다. 간단한 high-level language construct를 이용하는 것이 좋다. -> Monitor가 있다. Monitor Usage abstract data type(ADT)는 데이터와 데이터에 작용할 수 있는 함수들을 캡슐화한다. monitor type 또한 mutual exclusion을 구현하는 데에 사용되는 ADT이다. local variable은 local function으로만 접근 가능하다. -> OOP의 class와 비슷한 개념인듯. 기본적으로 monitor construct에는

Long-range FPV and Monitor
Long-range Video When I want to integrate a camera with some robot projects, I usually use ESP32-CAM modules, which are cheap and pretty fast. However, that only works when we have wi-fi available or are close to the module during AP mode. Sometimes, we want to receive video from very remote places, and my solution for it was to use FPV modules that many drone hobbyists use. FPV modules use radio signals, which are slower than wi-fi but have a range of 5 km in open areas. However, those mo
Monitor
지난 포스팅에서 Semaphore에 대해서 알아보았습니다. 그때 살펴본 Semaphore는 오래된 동기화 도구이기에, 이번 포스팅에서는 Java에서 사용하는 동기화 도구인 Monitor에 대해서 알아보도록 하겠습니다. Monitor 세마포어 이후 프로세스 동기화 도구의 일종 세마포어보다는 고수준의 개념을 가짐 구조 공유자원 : Common Variable 공유자원 접근 함수 두 개의 큐 Mutual Exclusion Queue : 공유자원 접근함수에는 최대 1개의 쓰레드만이 접근할 수 있다. 1개 이상이 되면 Queue에서 대기! Conditional Synchronization Queue : 진입 쓰레드가 block 상태로 변경되면서 새 쓰레드가 CS에 진입할 수 있도록 하는 queue
[프로세스 동기화] 모니터
세마포어와 뮤텍스를 통해서 임계구역에 대해 상호배제를 통한 동기화를 알아보았다. 두개의 동기화 방법의 단점이라면 임계구역으로 들어가기전 wait(), 임계구역을 빠져나올때 signal 혹은 release를 해주는 등의 코드를 프로그래머가 직접 넣어주어야 하는것이다. 프로그램이 복잡해지면 실수가 발생하기 쉽다. 이번에는 자바와같은 고급언어에서 임계구역에 대한 스레드 세이프한 연산을 지원해주는 모니터(Moniter)에 대해서 알아보겠다. 모니터 모니터는 문자 그대로 객체에 대한 모니터링을
[Swift] Network 상태 체크하기
Declaration swift에서 개발을 하다보면 꼭 필요한것이 네트워크 상태 체크입니다. 네트워크 상태 체크를 어떻게 하는것이 좋을지 고민하다 찾아보니 방법은 의외로 간단 했습니다. 우선 swift에는 Network라는 기본 라이브러리가 있는데 이것을 이용해주면 됩니다. 이것을 이용하면 현재 네트워크의 상태, 종류 등.. 다양한 정보들을 알 수 있습니다. 기본적으로 어떻게 사용하는지 하나씩 알아보도록 합시다. How To Use 첫번째로 네트워크 상태를 항상 체크할 수 있는 monitor 객체와 이것에 필요한 DispatchQueue가 필요합니다. 다음으로는 네트워크 상태가 업데이트 됐을 때 어떤 동작을 할지에 대한 updateHandler를 정의하도록 합시다. 여기서 리턴값으로 NWPath라는 객체를 던져주는데 해당 객체에는 네트워크 인터페이스에 대한 값을 가지고 있지 않지만 정보는 갖고 있어서 어떤 타입을 사용하고
병행 프로세스와 동기화
병행 프로세스 병행 프로세스는 다른 프로세스의 상태를 전혀 모르는 상태로 실행한다. 이것을 병행 프로세스의 비동기성이라고 한다. 병행 프로세스가 비동기적으로 실행될 때, 공유 자원에 접근하는 경우 데이터의 무결성이 훼손될 수 있다. 따라서 중간에 싱크가 필요한 경우, 운영체제가 개입하여 적절한 처리가 필요하다. 공유된 자원 접근의 rule 한 번에 한 프로세스만이 접근하도록 하고 해당 자원에 대해 의도했던 실행을 완료하도록 보장한다. 프로세스가 공유 자원에 접근할 때 처리할 것 count라는 변수에 프로세스 A와 프로세스 B가 접근하는 상황에서, A의 count에 대한 조작 중 CPU가 B로 넘겨지더라도 B의 count에 대한 조작은 허용되어서는 안된다. 경쟁 상태 프로세스들이 공유 데이터에 대해 서로 접근을 시도하는 상황 이로 인해 발생하는 문제 상호 배제 교착 상태(Deadlock) 기아(Starvati

[운영 체제]Process Synchronization
Process Synchronization 공유 데이터(shared data)의 동시 접근(concurrent acecss)은 데이터의 불일치 문제(inconsistency)를 발생시킬 수 있다 일관성(consistency)를 위해 협력프로세스간의 실행순서를 정해주는 메커니즘이 필요 Race Condition 여러 프로세스들이 동시에 데이터에 접근하는 상황에서, 어떤 순서로 데이터에 접근하느냐에 따라 결과 값이 달라질 수 있는 상황 → 공유 데이터의 동시 접근(Concurrent access)은 데이터의 불일치 문제를 발생시킬 수 있다. Race condition을 막고 일관성을 유지하기 위해서는 협력 프로세스 간의 실행 순서를 정해주는 메커니즘인동기화(Synchronization)가 필요. 1. 커널모드 running 중 interrupt가 발생하는 경우 
인프런 공룡책 정리 - Section 08 | CS Study
⚠️ 해당 포스팅은 인프런 공룡책 강의를 듣고 개인적으로 정리하는 글입니다. 정확하지 않은 정보가 있을 수 있으니 주의를 요합니다. Section 08 Chapter 7 CPU Synchronization Example Classic Problems of Synchronization 다수 동시성 제어의 고전적 문제에는 여러가지가 있다. : The Bounded-Buffer Problem (한정 버퍼 문제) : The Readers-Writers Problem : The Dining-Philosophers Problem (철학자들의 저녁식사 문제) The Bounded-Buffer Problem 다시 **[생산자 - 소비자](https://velog.io/@hoyaho/%EC%9D%B8%ED%94%84%EB%9F%
Lecture 22
8.7 Monitor Types explicit scheduling you indicate a task to wait or resume internal scheduling (uCondition) external scheduling (accept) implicit scheduling monitor automatically makes a task to wait or resume monitor selects (enter/exit) Explicit Signal General Model of Monitor: When an active task signals blocked task in conditions, it moves the t

Lecture 21
External scheduling is not as powerful as internal scheduling. You cannot access information within the routine if you need to wait after cooperation, you need condition lock. Ex) the dating service problem after some questions, you get a compatibility code - ccode depending on your ccode, you get your match. senario: a girl comes in with ccode if there is no boy with same cc

인프런 공룡책 정리 - Section 07 | CS Study
⚠️ 해당 포스팅은 인프런 공룡책 강의를 듣고 개인적으로 정리하는 글입니다. 정확하지 않은 정보가 있을 수 있으니 주의를 요합니다. Section 07 Chapter 6 CPU Synchronization Tools (2) Higher-level software tools to solve the CSP 고차원의 소프트웨어에서 임계 영역을 해결하기 위해 여러가지 옵션이 존재한다. Mutex Locks : 동기화를 위한 가장 간단한 옵션 Spin Lock : 뮤텍스락과 비슷하지만, 컨텍스트 스위칭을 일으키지 않는 옵션 Semaphore : 가장 강력하고, 편리하고, 효과적인 옵션 Monitor : 뮤텍스와 세마포어의 단점을 해결한 옵션 Liveness : 진전(데드락) 문제를 해결한 옵션

Lecture 20
Can we get some help from the compiler for concurrency errors? 8.1 Critical Regions Declare which variables are to be shared: The program will not even compile if you lock and release around critical section! This cannot do simultanious read :/ Does this help us with deadlock? Not reall
하루일지 - 22.02.15
신문 우크라 불안에 석유·천연가스ETF 두자릿수 급등…곡물株도 들썩 > 정말.. 무섭다. 실제로 계속 기사가 나오니까 이게 뭔가 싶은 마음이 제일 크다. 그리고 가장 의문점은 어쩌다가 이렇게 되었는지 이유도 아직 모른다는 것이다. 물론 내가 이러한 위험의 경우에는 실물 경제가 더 빨리 움직이는 건가 싶기도 하다. "여기가 바닥인줄 알았는데 지하실 있었다"…저가매수 개미들 어쩌나 > 맨날 현금 비중을 늘리라고 한다. 나는 물론 매수의 기회로 잡을 거다. 최근에 비트코인을 접하며 역시 공부를 하는 것은 중요하다는 것을 다시 한 번 느꼈다. 그것 처럼 일단 샀으면 그냥 좀 가지고 있어야 겠다. 물론 언제나 물량이 적었으니까 이번에는 충분한 물량을 가져갈 수 있는 기회가 되
프로세스 동기화
프로세스들은 작업을 진행하며 서로 데이터를 주고 받아야 하는 경우가 생깁니다. 프로세스끼리 통신을 하는 경우 누가 먼저 작업할지, 언제 작업이 끝날지 등을 서로 알려주어야 하는데 이를 "동기화"라고 합니다. 프로세스 간 통신 프로세스는 시스템 내에서 독립적으로 실행되기도 하고 데이터를 주고 받으며 협업하기도 합니다. 프로세스의 통신은 크게 다음과 같은 종류가 있습니다. 프로세스 내부 데이터 통신: 하나의 프로세스에 2개 이상의 스레드가 존재하는 경우의 통신으로 스레드끼리의 통신입니다. 전역 변수나 파일을 이용하여 데이터를 주고 받습니다. 프로세스 간 데이터 통신: 같은 컴퓨터에 있는 여러 프로세스끼리 통신하는 경우로, 공용 파일이나 운영체제가 제공하는 파이프를 사용하여 통신합니다. 네트워크를

운영체제_10
10번째 수업 Synchronization 에 관련된 문제 3가지 Bounded-buffer Problem (Producer-Consumer Problem) Readers and Writers Problem Dining-Philosophers Problem Bounded-buffer Problem 유한한 버퍼의 크기 Producer 공유데이터에 만들어서 버퍼에 집어 넣음 (빈 버퍼가 있으면) 공유버퍼 전체에 lock 빈 버퍼에 데이터 입력, 빈 버퍼 위치 변경 lock 해제 Consumer Consumer는 Producer 프로세스와 정반대. 유한한 크기때문에 생기는 문제 생산자 입장 한꺼번에 도착해 공유버퍼가 다 채워져 있는 경우, Consumer가 아닌 Producer가 또 오면, 생산자 입장에서는 사용할 수 있는 자원이 없다. 즉, 버퍼가 비어질 때까지