게으른 개발자

6강-1. Process Synchronization 1 본문

cs/운영체제

6강-1. Process Synchronization 1

Tomato_Coffee 2023. 11. 4. 22:39

E-box, S-box는 교수님이 만든 용어임

여러 주체가 하나의 데이터를 접근할 때=> race condition (경쟁 상태)

cpu가 여러 개가 있을 때, 공유 메모리를 사용할 때 race condition 가능성 있다.

커널 데이터를 접근할 때도 race condition이 발생한다.


Count++ 하는 과정

  1. Count 값을 cpu 안에 있는 register로 불러들인다.
  2. register 값을 1 증가
  3. register 값을 Count 변수에 같다가 쓴다.(저장)
  4. 커널 모드에서 연산이 실행 중일 때는 해당 작업이 끝날 때까지는 interrupt 처리를 안 한다.(disable)
  5. 작업 끝난 다음에 인터럽트 처리 루틴으로 넘겨서 race condition이 발생하지 않도록 한다.

interrupt handler도 커널에 있는 코드이다.

 


해결책 : 할당된 시간이 끝났더라도 커널 모드에서 작업을 수행중일 때는 preempt (선점) 하지 않는다.


cpu가 여러개 있을 경우에 어떻게 race condition을 막을까?

방법 1 : 커널에 접근하는 cpu를 매 순간 하나만 허용

----> 커널 전체를 하나의 lock으로 막고, 커널을 빠져나올 때 lock을 풀고

------> 이 방법을 쓰면 cpu가 여러개 있더라도 하나만 접근가능함.  (비효율적이다)

방법 2 : 방법 1 보다 효율적이다.


공유 데이터를 접근하는 코드가 Critical section이다.

즉, 이 프로세스가 Critical section(공유 데이터에 접근하는 코드)에 있으면 cpu를 뺏겨서 다른 프로세스에게 cpu가 넘어가더라도 cpu 제어권을 잡은 다른 프로세스가 공유 데이터를 접근하는 Critical section에 들어가지 못한다. 따라서 실행하지 못하고 기다려야 한다.

 

 

'cs > 운영체제' 카테고리의 다른 글

6강-3. Process Synchronization 3  (0) 2023.11.05
6강-2. Process Synchronization 2  (0) 2023.11.05
5강-3. CPU Scheduling 3  (0) 2023.11.04
5강-2. CPU Scheduling 2  (1) 2023.11.04
5강-1. CPU Scheduling1  (0) 2023.11.03