일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- react
- do it! html+css+자바스크립트 웹 표준의 정석
- 코딩자율학습
- https://api.jquery.com/
- html 기본문서
- html 필수태그
- 혼자 공부하는 컴퓨터구조+운영체제
- 메모리와 캐시 메모리
- 코딩 자율학습 html + css + 자바스크립트
- TS
- 코딩 자율학습
- css배경
- HTML
- Git
- Do it
- css박스 모델
- cpu 성능 향상 기법
- 이벤트
- propschildren
- CSS
- html 문서작성
- 자바스크립트
- css필수 속성
- 코딩 자율학습 html + css + 자바스크립트]
- do it! 한권으로 끝내는 웹 기본 교과서 html+css+자바스크립트 웹 표준의 정석
- CPU
- JavaScript
- JS
- html 실무
- 코딩
- Today
- Total
게으른 나에게
[혼자 공부하는 컴퓨터구조+운영체제] "chapter12. 프로세스 동기화" 본문
12-1 동기화란
동시다발적으로 실행되는 프로세스들은 공동의 목적을 올바르게 수행하기 위해 서로 협력하여 실행되는 프로세스들은 실행순서와 자원의 일관성을 보장하기 때문에 반드시 동기화 되어야 함.
동기화 의미
프로세스 동기화: 프로세스들 사이의 수행시기를 맞추는 것.
"프로세스들 사이의 수행시기를 맞추는 것"
1. 실행순서 제어
실행순서 제어: 프로세스를 올바른 순서대로 실행.
실행순서를 위한 동기화: 동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것.
Writer라는 프로세스(Book.txt파일에 값을 저장하는 값)와 Reader라는 프로세스(Book.txt파일에 저장된 값을 읽어들이는 프로세스)가 동시에 실행 중
Reader 프로세스는 Writer프로레스 실행이 끝나야 실행 가능. = Reader 프로세스는 'Book.txt 안에 값이 존재한다'는 특정 조건이 만족되어야만 실행 이어나갈 수 있음.
2. 상호배제
상호배제: 공유가 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘.
상호배제를 위한 동기화: 동시에 접근해서는 안되는 자원에 동시에 접근하지 못하게 하는 것
계좌에 10만원 저축되어 있는 상태.
프로세스 A: 2만원 저축.
프로세스 B: 5만원 저축.
프로세스 A
① 계좌의 잔액 읽어 들임.
② 읽어 들인 잔액에 2만원 더함.
③ 더한 값 저장
프로세스 B
① 계좌의 잔액 읽어 들임.
② 읽어 들인 잔액에 5만원 더함.
③ 더한 값 저장
동기화가 제대로 이루어지지 않은 경우
동기화가 제대로 이루어진 경우(올바르게 실행하기 위해서는 한 프로세스가 잔액에 접근했을 때 다른 프로세스 기다려야 함)
생산자와 소비자 문제
생산자: 물건을 계속해서 생산하는 프로세스
소비자: 물건을 계속해서 소비하는 프로세스
생산자와 소비자는 동시에 실행되는 스레드 될 수 있음.
생산자와 소비자는 '총합'이라는 데이터 공유.
생산자: 버퍼에 물건을 넣은 후, 물건의 총합에 해당하는 변수 1 증가.
소비자: 버퍼에 물건을 빼낸 후 물건의 총합에 해당하는 변수 1 감소.
물건 처음에 10개 존재.
생산자와 소비자 동시에 실행 -> 총합이 10이 아닌 다른수 or 실행중 오류
제대로 동기화 되지 않았기 때문에 발생한 문제
공유 자원과 임계 구역
공유자원: 전역변수 / 파일 / 입출력장치 / 보조기억장치 (두개 이상 프로세스 동시에 실행하면 문제가 발생하는 자원 존재)
임계구역: 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
두개 이상의 프로세스가 임계 구역에 진입하고자 하면 둘 중 하나는 대기.
레이스 컨디션: 잘못된 실행으로 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제 발생. 데이터의 일관성 깨지는 문제 발생.
ex) 계좌 잔액 문제, 생산자 소비자 문제
레이스컨디션이 발생하는 근본적 이유
고급언어 실행과정 -> 저급언어 변환 실행
이때 "문맥교환"
=> 상호배제를 위한 동기화: 이와 같은 일이 발생하지 않도록 두개 이상의 프로세스가 임계 구역에 동시에 접근하지 못하도록 관리.
임계 구역 문제 해결 방법
1. 상호배제: 한 프로세스가 임계구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없음.
2. 진행: 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 함.
3. 유한대기: 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스 언젠가 임계 구역에 들어올 수 있어야 함.(임계구역에 들어오기 위해 무한정 대기 안됨)
12-2 동기화 기법
뮤텍스 락
뮤텍스 락: 동시에 접근해서는 안되는 자원에 동시 접근하지 않도록 만드는 도구. 상호배제 위한 동기화 도구. 임계 구역에 있음을 알리는 도구.
하나의 전역변수와 두개의 함수로 구현
-자물쇠 역할: 프로세스들이 공유하는 전역 변수 lock
-임계 구역을 잠그는 역할: acquire 함수
-임계 구역의 잠금을 해제하는 역할: release 함수
acquire 함수
프로세스가 임계 구역에 진입 전 호출 함수.
임계 구역이 잠겨있다면, 열릴 때 까지(lock -> false), 반복적 확인.
임계 구역이 열려 있다면, 임계 구역을 잠그는 (lock -> true) 함수
release 함수
임계 구역에서의 작업이 끝나고 호출하는 함수.
현재 잠긴 임계 구역을 열어주는 (lock -> false)함수
임계 구역 전후로 호출함으로써 하나의 프로세스만 임계 구역에 진입 가능.
바쁜 대기: 임계구역이 잠겨있을 때 lock을 반복적 확인.
세마포
뮤텍스 락의 단점(하나의 공유 자원에 접근하는 프로세스)을 상정한 방식.
공유 자원 여러개 있는 상황에서도 적용 가능.
-전역 변수 S: 임계 구역에 진입할 수 있는 프로세스 개수
-wait 함수: 임계 구역에 들어가도 좋은지, 기다려야 할지 알려주는 함수
-signal 함수: 임계 구역 앞에 기다리는 프로세스에 가도 좋다고 신호를 주는 함수
wait 함수
임계 구역에 진입할 수 있는 프로세스 개수 0 이하 -> 사용할 수 있는 자원 반복적 확인
임계 구역에 진입할 수 있는 프로세스 개수 1개 이상 -> S 1 감소, 임계 구역 진입
signal 함수
임계 구역에서의 작업을 마친 뒤 S 1 증가.
busy wait를 극복하지 못한 세마포
문제
사용할 수 있는 공유 자원이 없는 경우 프로세스 무작정 무한히 반복하며 S 확인. CPU 주기 낭비.
-wait 함수
만일 사용할 수 있는 자원 없을 경우 -> 프로세스 상태, 대기 -> 프로세스의 PCB를 세마포를 위한 대기큐에 넣음
-> 다른 프로세스가 임계 구역에서 작업 끝나면 singal 함수 호출 -> signal 함수 대기중인 프로세스 대기 큐에서 제거 -> 프로세스 상태 준비상태 변경, 준비큐 이동.
세마포의 변수를 S를 0으로 두고 먼저 실행할 프로세스 뒤에 signal 함수,
다음에 실행할 변수 wait 함수.
모니터
세마포의 단점.
모니터: 공유 자원과 공유 자원에 접근 위한 인터페이스(통로) 묶어 관리. 프로세스는 반드시 인터페이스 통해서만 공유 자원 접근.
공유 자원에 접근하고자 하는 프로세스 큐 삽입 -> 큐에 삽입된 순서대로 하나씩 공유자원 이용
조건 변수: 프로세스나 스레드의 실행순서 제어하기 위해 사용하는 특별 변수. wait, signal 연산 수행.
wait 연산: 호출한 프로세스 상태 -> 대기 상태 -> 일시적 조건 변수에 대한 대기큐 삽입
signal 연산: wait 연산으로 일시 중지된 프로세스 호출하여 실행 재개.
① 특정 프로세스가 아직 실행될 조건이 되지 않았을 때 wait 통해 실행 중단.
② 특정 프로세스가 실행될 조건이 충족되었을 때 signal을 통해 실행 재개.
출처
'My Study > 서적 공부' 카테고리의 다른 글
[혼자 공부하는 컴퓨터구조+운영체제] "chapter14. 가상 메모리" (4) | 2024.08.20 |
---|---|
[혼자 공부하는 컴퓨터구조+운영체제] "chapter13. 교착 상태" (0) | 2024.08.17 |
[혼자 공부하는 컴퓨터구조+운영체제] "chapter11. CPU 스케줄링" (1) | 2024.08.11 |
[혼자 공부하는 컴퓨터구조+운영체제] "chapter10. 프로세스와 스레드" (3) | 2024.08.05 |
[Do it! 한권으로 끝내는 웹 기본 교과서 HTML+CSS+자바스크립트 웹 표준의 정석] "자바스크립트 기초-넷째마당: 15 함수와 이벤트" (0) | 2024.08.04 |