일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Heap영역
- 프로세스 제어 블록
- 은행원 알고리즘
- 스레드
- 프로세스 상태 전이도
- Light Weight Process
- 문맥 교환
- Activity
- The DIning Philosopher Problem
- The Banker's Algorithm
- 유저 모드
- Reentrant
- 유저 모드의 동기화
- Multi-level Queue
- 인터락 함수
- 방금 그 곡
- 임계 구역
- Process Control Block
- 블로킹 논블로킹
- 동기 비동기
- Non-Preemptive
- 프로세스
- 커널 모드의 동기화
- 뮤텍스(Mutex)
- 경량 프로세스
- 교착 상태
- 스레드 동기화
- Stack영역
- 모니터(Monitor)
- 커널 모드
목록전체 글 (36)
Blog For Me
뮤텍스와 모니터의 차이 뮤텍스는 다른 프로세스나 스레드 간의 동기화에 의해 사용된다. 반면, 모니터는 하나의 프로세스 내에서 다른 스레드 간에 동기화할때 사용된다. 뮤텍스는 운영체제 커널에 의해 제공되므로 무겁고 느리다. 반면, 모니터는 프레임워크나 라이브러리 그 자체에서 제공되므로 가볍고 빠르다. 세마포어와 모니터의 차이 모니터는 Java에서 모든 객체에 기본적으로 제공하지만, C에서는 사용이 불가능하다. 세마포어는 프로그래머가 상호 배제나 정렬의 목적으로 사용할 때 매번 Counter라는 변수값을 지정해줘야 하는 등 사용 방식이 번거롭다. 반면 모니터는 이러한 기능들이 캡슐화되어 있어 개발자는 Counter 값을 0 또는 1로 줘야 하는 등의 고민을 할 필요 없이 synchronized, wait()..
유저 모드의 동기화 임계 구역 기반의 동기화(Critical Section) 열쇠를 억은 프로세스만 임계 구역에 들어갈 수 있다. 즉, 한번에 하나의 스레드만 접근 가능하다. 임계 구역 진입을 위한 크리티컬 세션 오브젝트를 얻는다. 특정 스레드가 열쇠를 가지고 있으면, 그 스레드가 반환할 때까지 임계 구역은 blocking된다. 열쇠가 반환되면 임계 구역은 blocking 상태에서 벗어나게 되어 다른 스레드는 열쇠를 얻고 임계구역에 접근할 수 있다. 인터락 함수 기반의 동기화(Interlock) 함수 내부적으로 한 순간에 하나의 스레드에 의해서만 실행되도록 동기화된다. 임계 구역 기반의 동기화도 내부적으로 인터락 함수를 기반으로 구현된다. 유저 모드 기반으로 동작하여 속도가 빠르다. 커널 모드의 동기화 ..
스레드의 동기화 문제 스레드들은 서로 Stack 영역을 제외하고 나머지 Code 영역, Heap 영역, 그리고 Data 영역을 공유하고 있다. 따라서 이러한 공유 자원에 여러 스레드가 동시에 접근하면 Race Condition 같은 상황이 발생할 수 있다. 따라서 이를 막기 위해서 동기화 기법이 필요하다. 스레드의 동기화 실행 순서의 동기화: 스레드의 실행 순서를 정의하고, 반드시 이 순서를 따르도록 한다. 메모리 접근에 대한 동기화: 메모리 접근에 있어 동시 접근을 막으며, 실행 순서가 중요한 것이 아니면 한 순간에 하나의 스레드만 해당 자원에 접근 가능하도록 설계한다. 동기화 기법 유저 모드의 동기화 커널의 힘을 빌리지 않는 동기화 기법, 즉 커널의 코드가 실행되지 않는다. 동기화를 위한 커널 모드로..
Race Condition 프로세스들이나 스레드들이 공유 자원에 대해 경쟁 상태에 있는 것을 의미한다. 다시 말해서, 여러 프로세스들과 스레드들이 공유 자원에 동시에 접근할 때, 접근 타이밍과 순서가 얽혀서 의도한 결과가 달라지는 데이터 일관성을 해칠 수 있는 상태에 이르게 될 수 있다. 예를 들어, 5의 값을 가지고 있는 공유 자원인 count가 있고, 이 자원에 동시에 접근하는 스레드 A, B가 있다. 여기서 A는 count++를 수행하고, B는 count--를 수행한다. 스레드 A는 내부적으로 이러한 작업을 수행한다. register1 = count register1 = register1 + 1 count = register1 한편, 스레드 B는 내부적으로 이러한 작업을 수행한다. register2..
동기와 비동기 동기(Synchronous, 동시에 발생) 동시에 일어난다는 의미이다. 즉, 요청과 그 결과가 동시에 일어난다는 약속을 의미한다. 요청을 하면, 시간이 얼마나 걸리든 상관없이 요청한 자리에서 결과가 주어져야 한다. 요청과 결과가 모두 한 자리에서 동시에 일어나게 된다. 여러 노드 사이의 작업 처리 단위를 동시에 맞추겠다는 의도를 포함하고 있다. 설계가 매우 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 한다는 단점이 존재한다. 비동기(Asynchronous, 동시에 발생하지 않는) 동시에 일어나지 않음을 의미한다. 즉, 요청과 결과가 동시에 일어나지 않는다는 약속을 의미한다. 요청한 그 자리에서 결과가 주어지지 않는다. 노드 사이의 작업 처리 단위를 동시에 맞추지 않아..
문제링크: https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 문제 풀이 입력 받은 전선의 길이들을 오름차순으로 정렬한다. 처음에 minWire 값을 1로 잡고, maxWire 값을 입력한 랜선 중 가장 긴 길이로 지정한다. (minWire + maxWire) / 2 의 값을 midWire 변수에 대입하고, 각 길이를 mid 값으로 나누어 몇 개씩 전선을 만들 수 있는지 총합을 구한다. 만약에 만들 수 있는 전선의 개수..