• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

non-preemptive kernel 설명에 대해 질문드립니다.

21.10.28 09:03 작성 조회수 160

0

안녕하세요, 좋은 강의 올려주셔서 감사합니다.
 
44분 즈음에서 non-preemptive kernel을 설명하시면서
 
"count++; 를 해서 1을 다 증가시킬 때까지 context switch가 안 일어난다"고 말씀해주셨는데요,
 
교안에서 non-preemptive kernel에 대해 써져 있는 것은 "a kernel-mode prcoess will run until it exits kernel mode"라고 적혀있잖아요?
 
 
저는 kernel-mode process는 O/S(또는 kernel)을 의미하고 user-mode process는 사용자가 작성한 프로그램을 의미한다고 이해하고 있습니다.
 
memory 상에 user address space와 kernel address space가 분리되어 있고, 당연히 user process는 코드, 데이터, 스택, 힙 모두 user address space 상에 존재할 것입니다.
 
여기서 "count++;"라는 코드는 유저가 작성한 코드이므로 user address space 상에 존재할 것이고, 마찬가지로 "count"라는 전역 변수 역시 user address space 상에 존재할 것이라 생각합니다.
 
 

(여기부터 질문입니다.)

(1) 그런데 교안에 적혀 있는 "a kernel-mode process"라는 것은, 제가 이해한 바에 따르면 O/S를 의미하는데, "count++;"라는 코드가 kernel data에 영향을 끼칠 수 있나요?
 
(2) 또다른 질문을 드리면, 혹시 user process들이 kernel data를 공유하는 경우가 있나요? 예를 들어, "count"가 kernel의 전역 변수여서 user process가 이에 대해 access하면 user-mode에서 kernel-mode로 전환되어 요청을 처리하게 되는 건가요?
 
만약 그런 경우가 있다면, 반대로 user process가 user data를 공유하는 경우도 존재하는지 궁금합니다.

답변 1

답변을 작성해보세요.

1

non-preemptive 라는 것은 커널이 실행 중인 프로세스가

스스로 CPU를 내려놓기 이전에 강제로 CPU를 빼앗을 수 없다는 뜻입니다.

 

즉, kernel mode 냐, user mode 냐, 라는 것은 부차적인 문제이고,

스스로는 CPU를 내려 놓지 않기 때문에, count++의 세부적인 세 가지 동작을

마무리 하지 않은 상태에서 CPU를 내려 놓지 않으므로 (context switch가 안 일어나므로)

count++ 에 race condition이 발생하지 않는다, 라고 이해하시면 좋을 것 같습니다.