Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- react
- 협업
- memory
- Redux
- 코드업
- react-redux
- web
- OS
- 리덕스장바구니
- Operating System
- 자료구조
- 프로그래머스
- CPU 스케줄링
- 기초100제
- 일상
- 분할메모리할당
- 스프링
- 공부
- Java
- 타입스크립트
- codeup
- error
- 알고리즘
- 백준
- js to ts
- Spring
- C++
- 파이썬
- 정렬
- 토이프로젝트
Archives
- Today
- Total
감자튀김 공장🍟
[OS] 상호배제(Mutual exclusion)이란? 본문
반응형
앞서 읽고 오기
- https://good-potato.tistory.com/60
- 상호배제 : 멀티 스레드가 실행되는 환경에서, 한 스레드가 임계 구역을 진입하면 배타적으로 실행되도록 보장하는 기법이다.
상호배제를 포함한 프로그램 작성
- 임계구역 코드의 앞 뒤 부분에는 임계구역에 대한 상호 배제를 만들기 위해 임계구역 진입 코드(entry 코드)와 임계구역 진출 코드(exit 코드)가 반드시 있어야 한다.
- 일반 코드 - 공유 데이터를 액세스하지 않는 코드 부분
- 임계구역 진입 코드 (entry code)
- 임계구역에 진입하기 전 필요한 코드
- 다른 스레드가 임계구역에 들어가 있는지 검사하여 임계구역에 들어가 있는 스레드가 없는 경우 다른 스레드가 들어오지 못하도록 조치를 취함
- 만일 임계구역에 이미 들어가 있는 스레드가 있다면, 이 스레드가 임계구역을 벗어날 때까지 현재 스레드를 대기시키는 코드
- 임계구역 코드
- 공유 데이터를 접근하는 코드를 포함
- 한 스레드에 의해서만 배타적으로 사용되도록 보장되어야 함
- 짧을수록 좋음
- 임계구역 진출 코드 (exit code)
- 임계구역의 실행을 마칠 때 필요한 코드
- 대기 중인 스레드나 다른 스레드가 임계구역에 진입할 수 있도록, entry 코드에서 취한 조치를 풀어 놓는 코드
- entry code와 exit code는 짝을 이루어서 구현해야한다.
상호배제 구현
- 소프트웨어적 방법 - Peterson's 알고리즘
- 하드웨어적 방법 - 인터럽트 서비스 금지, 원자 명령 사용 < 최근에 사용 중인 방법
상호배제 방법1 - 인터럽트 서비스 금지
- 임계구역으로 진입할 때, entry 코드에서 인터럽트 서비스를 금지하는 명령어를 싱행하는 방법이다. 이렇게 하면, 스레드가 임계구역을 실행하고 있을 때 선점(preemption) 되지 않는다.
- 문제점 : 멀티코어를 비롯한 다중 CPU 시스템에서는 활용할 수 없다. CPU가 모든 인터럽트를 무시하게 될 수 있기 때문이다.
상호배제 방법2 - 원자 명령(atomic instruction) 사용
- 문제 상황
- lock 값을 읽어 들이는 명령과 lock 변수에 1을 저장하는 명령어 사이에 컨텍스트 스위칭이 발생할 때 문제가 발생한다.
- 해결 방법
- lock 값을 읽어 들이는 명령과 lock 변수에 1을 저장하는 명령 사이에 컨텍스트 스위칭이 일어나지 않도록 이 두 명령을 하나의 명령으로 만드는 것이다.
- 이를 원자 명령(atomic instruction) 혹은 TSL(Test and Set Lock) 명령어라고 부른다.
참고
운영체제(Operating system), 황기태 지음
반응형
'Study > Operating System' 카테고리의 다른 글
[OS] 교착 상태(DeadLock)이란? (0) | 2022.04.08 |
---|---|
[OS] 뮤텍스(Mutex) VS 세마포(Semaphore) (0) | 2022.04.07 |
[OS] 동기화(Synchronous)에 대해서 (0) | 2022.04.05 |
[OS] CPU 스케줄링 알고리즘 (CPU Scheduling Algorithm) (0) | 2022.04.04 |
[OS] CPU 스케줄링 알아보기 (CPU Scheduling) (0) | 2022.04.03 |
Comments