일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Process Control Block
- Heap영역
- 커널 모드
- 프로세스 상태 전이도
- 문맥 교환
- 블로킹 논블로킹
- Multi-level Queue
- 교착 상태
- Activity
- 인터락 함수
- 방금 그 곡
- 동기 비동기
- 유저 모드의 동기화
- 커널 모드의 동기화
- 스레드 동기화
- 모니터(Monitor)
- Non-Preemptive
- The DIning Philosopher Problem
- 임계 구역
- 프로세스 제어 블록
- Stack영역
- 유저 모드
- 뮤텍스(Mutex)
- 프로세스
- 은행원 알고리즘
- 경량 프로세스
- The Banker's Algorithm
- 스레드
- Reentrant
- Light Weight Process
목록컴퓨터과학/운영체제 (23)
Blog For Me
최근에 lock 방법이 지닌 문제점을 해결하기 위하여 소프트웨어적 방법을 이용하기보다는 더 이상 쪼개지지 않는 원자적 명령어로 구현하거나 Interrupt 제어로 해결한다. 하드웨어 명령어 lock 함수 코드부분 void lock(struct lock *i) { while(i->held); i->held=1; } 이 lock 함수의 문제점은 A 프로세스가 2번 라인의 코드를 실행하고 다음에 3번 라인의 코드를 실행하기 직전에 Interrupt 걸렸을 상황에서 두드러진다. 즉, A 프로세스가 3번 코드인 'i->held=1'을 실행하기 직전에 Interrupt 걸려서 B 프로세스로 전환된 것이다. 그럼 B 프로세스는 아직 held 값이 0인 걸 보고 바로 임계영역에 진입해버리므로 Race Condition..
Peterson's Algorithm은 1981년 수학자였던 개리 피터슨이라는 사람이 고안한 알고리즘이다. 발표 당시 이 알고리즘에서는 오직 두 개의 프로세스에만 적용 가능하다고 했었지만 지금은 2개 이상의 프로세스들 사이에서도 이 방법이 통용된다. Lock 방식이 지니고 있는 문제점을 해결하기 위해 고안된 알고리즘이라 볼 수 있다. Peterson's Algorithm 구조 여러 개의 프로세스가 있을 때, i번째 프로세스의 Peterson 알고리즘 구조도 // flag: 신호, 공유자원을 사용하고 싶다라고 표현하기 위한 변수, 임계구역에 들어갈 때는 true, 나올 때는 false로 설정 // turn: 차례, 누구 차례인지를 명시하는 변수, turn = 0 이면, 0번째 프로세스가 임계 구역에 들어가..
Lock Lock은 의미 그대로 잠군다는 것을 뜻한다. 마치 화장실을 사용하고 있는 동안에 문을 잠궈서 자기가 사용하는 동안 아무도 못 들어오게 하는 것처럼, 특정 프로세스나 스레드가 lock을 통해 임계 영역을 잠궈서 혼자 사용할 수 있게 하는 방법이다. 이는 동기화 기법의 한 가지 방법이다. 은행 계좌 관련 사례를 살펴보자면 다음과 같다. A라는 사람과 B라는 사람이 같은 계좌를 공유하고, 그 계좌에는 현재 100만원 있다. 이때 우연찮게도 A와 B는 동시에 그 계좌에서 10만원을 인출하는 상황이 발생했다. 여기서 A라는 사람이 인출을 했는데 인출함수 수행하는 과정에서 4번째 줄에서 Timer Interrupt가 발생했다면, 스케줄러에 의해 B가 10만원을 인출하는 프로세스가 이 함수를 수행하는데, ..
뮤텍스와 모니터의 차이 뮤텍스는 다른 프로세스나 스레드 간의 동기화에 의해 사용된다. 반면, 모니터는 하나의 프로세스 내에서 다른 스레드 간에 동기화할때 사용된다. 뮤텍스는 운영체제 커널에 의해 제공되므로 무겁고 느리다. 반면, 모니터는 프레임워크나 라이브러리 그 자체에서 제공되므로 가볍고 빠르다. 세마포어와 모니터의 차이 모니터는 Java에서 모든 객체에 기본적으로 제공하지만, C에서는 사용이 불가능하다. 세마포어는 프로그래머가 상호 배제나 정렬의 목적으로 사용할 때 매번 Counter라는 변수값을 지정해줘야 하는 등 사용 방식이 번거롭다. 반면 모니터는 이러한 기능들이 캡슐화되어 있어 개발자는 Counter 값을 0 또는 1로 줘야 하는 등의 고민을 할 필요 없이 synchronized, wait()..
유저 모드의 동기화 임계 구역 기반의 동기화(Critical Section) 열쇠를 억은 프로세스만 임계 구역에 들어갈 수 있다. 즉, 한번에 하나의 스레드만 접근 가능하다. 임계 구역 진입을 위한 크리티컬 세션 오브젝트를 얻는다. 특정 스레드가 열쇠를 가지고 있으면, 그 스레드가 반환할 때까지 임계 구역은 blocking된다. 열쇠가 반환되면 임계 구역은 blocking 상태에서 벗어나게 되어 다른 스레드는 열쇠를 얻고 임계구역에 접근할 수 있다. 인터락 함수 기반의 동기화(Interlock) 함수 내부적으로 한 순간에 하나의 스레드에 의해서만 실행되도록 동기화된다. 임계 구역 기반의 동기화도 내부적으로 인터락 함수를 기반으로 구현된다. 유저 모드 기반으로 동작하여 속도가 빠르다. 커널 모드의 동기화 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/6GwOM/btrmFpKnCkY/8fHrKtEoD2TQMhF2fZaJcK/img.png)
스레드의 동기화 문제 스레드들은 서로 Stack 영역을 제외하고 나머지 Code 영역, Heap 영역, 그리고 Data 영역을 공유하고 있다. 따라서 이러한 공유 자원에 여러 스레드가 동시에 접근하면 Race Condition 같은 상황이 발생할 수 있다. 따라서 이를 막기 위해서 동기화 기법이 필요하다. 스레드의 동기화 실행 순서의 동기화: 스레드의 실행 순서를 정의하고, 반드시 이 순서를 따르도록 한다. 메모리 접근에 대한 동기화: 메모리 접근에 있어 동시 접근을 막으며, 실행 순서가 중요한 것이 아니면 한 순간에 하나의 스레드만 해당 자원에 접근 가능하도록 설계한다. 동기화 기법 유저 모드의 동기화 커널의 힘을 빌리지 않는 동기화 기법, 즉 커널의 코드가 실행되지 않는다. 동기화를 위한 커널 모드로..