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 | 31 |
Tags
- html/css/js
- 너비우선탐색
- 자바스크립트
- DFS
- 부트캠프
- js
- LinkSnap
- KAKAO
- github
- 패스트캠퍼스
- 알고리즘
- CS
- CSS
- 백준
- git
- cpu
- 국비지원취업
- 코테
- 그리디
- 호이스팅
- BFS
- 국비지원
- 야놀자
- computerscience
- Javascript
- nodejs
- 프론트엔드개발자
- 코딩테스트
- 컴퓨터과학
- 컴퓨터공학
Archives
- Today
- Total
My Boundary As Much As I Experienced
경쟁 상태(Race Condition) 본문
여러 프로세스가 하나의 공유 자원에 접근하려 할 때 발생하는 문제이다.
데이터의 최종 상태는 마지막에 접근한 프로세스에 따라 달라진다고 한다.
이런 문제 때문에 상호 배제(Mutual Exclusion)이 필요하다.
컴퓨터 시스템에서 데이터 연산의 순서는 이렇다.
연산할 데이터를 저장 공간에서 가져온다. -> 연산한다. -> 연산한 결과를 저장 공간에 반영한다.
그런데 여러 실행 주체가 1개의 공통 데이터를 수정할 때 예상치 못한 경쟁 상태가 발생하는 것이다.
count++와 count--가 서로 참조해서 예상치 못한 값을 나오게 하는 예시.
경쟁 상태가 일어나는 경우
- 커널 작업을 수행하는 중에 인터럽트 발생
- 문제점 : 커널모드에서 데이터를 로드하여 작업을 수행하다가 인터럽트가 발생하여 같은 데이터를 조작하는 경우
- 해결법 : 커널모드에서 작업을 수행하는 동안, 인터럽트를 disable 시켜 CPU 제어권을 가져가지 못하도록 한다.
- 프로세스가 'System Call'을 하여 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환이 발생할 때
- 문제점 : 프로세스1이 커널모드에서 데이터를 조작하는 도중, 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우 ( 프로세스2가 작업에 반영되지 않음 )
- 해결법 : 프로세스가 커널모드에서 작업을 하는 경우 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 함
- 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 때 (위 사진 예시)
- 문제점 : 멀티 프로세서 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우
- 해결법 : 커널 내부에 있는 각 공유 데이터에 접근할 때마다, 그 데이터에 대한 lock/unlock을 하는 방법
'Computer Basics' 카테고리의 다른 글
페이징 & 세그멘테이션 (0) | 2023.10.05 |
---|---|
세마포어(Semaphore) & 뮤텍스(Mutex) (0) | 2023.09.12 |
동기식 (Synchronous) / 비동기식 (Asynchronous) 이란? (0) | 2023.09.05 |
데드락(Deadlock) (0) | 2023.09.05 |
CPU Scheduling (0) | 2023.09.05 |