다중 프로그래밍이란, 여러 개의 프로세스들이 존재할때(보통의 경우에 해당)
프로세스들은 서로 독립적으로 동작하고, 공유자원 or 데이터가 있을 때 문제가 발생한다.
이때 동기화가 필요하며, 동기화란 프로세스들이 서로 정보를 공유하며 동작을 맞추는 것이다.
비동기적 => 프로세스들이 서로에 대해 모름
병행적 => 여러 개의 프로세스들이 동시에 시스템에 존재
병행 수행중인 비동기적 프로세스들이 공유 자원을 동시 접근할 때, 문제가 발생할 수 있다.
그러므로 동기화가 필요하다!
Shared data(공유 데이터) => 여러 프로세스들이 공유하는 데이터
Critical section(임계 영역) => 공유 데이터를 접근하는 코드영역
Mutual exclusion(상호배제) => 둘 이상의 프로세스가 동시에 critical section에
진입하는것을 막는것
두 프로세스는 sdata에 1을 더하는 연산을 더한다 할 때, 메모리에는 sdata 의 값이
2가 되어야 한다. 하지만 실제로 그렇게 되지 않을 수 있다.
기계어 명령의 특성 중 한 기계어 명령의 실행 도중 인터럽트를 받지 않기 때문이다.
sdata += 1 은 machine은 3개로 번역한다.
레지스터에 sdata 값을 Load 해와라, 레지스터에서 1을 더해라, 이 레지스터 값을
shared data에다 다시 저장해놓아라.
만약 저 프로세스의 1,2,3 사이에 preemption이 발생하고, 그 때, 다른 프로세스가
같은 연산을 한다면 둘다 sdata에 1을 반환한다. 이렇게 실행 순서에 따라 결과가
달라질 수 있는것을 Race Condition 이라 한다.
이를 막기위해 등장한 것이 Mutual Exclusion 이다.
즉 프로세스 입장에서, 내가 이것을 실행하는동안 다른 프로세스가 이 작업을
하지 못하도록 막아달라고 요청하는것이다.
이 Mutual Exclusion을 구현하기 위한 기본연산은
enterCS() primitive(노크역할) => critical section 진입 전 검사,
exitCS() primitive => critical section 을 벗어날 때 후처리 하는 과정(시스템에 알림)
이렇게 두가지가 있다.
'CS > OS' 카테고리의 다른 글
Deadlock Resolution 1 (기본개념 및 분류) (0) | 2022.02.11 |
---|---|
Process Scheduling 2(기본 스케줄링 및 알고리즘) (0) | 2022.02.04 |
Process Scheduling 1 (0) | 2022.02.02 |
스레드 관리(Thread management) (2) | 2022.01.30 |
프로세스(Process) 관리, 자원(Resource)의 개념 (0) | 2022.01.29 |