inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

운영체제 공룡책 강의

12. 동기화 문제의 해결책: Chapter 6. Synchronization Tools (Part 2)

싱글 코어에서의 interrupt disable

623

akakakakak

작성한 질문수 83

0

안녕하세요 교수님, 질문 사항이 있어서 글을 남깁니다.

피터슨 알고리즘이 등장하기 전 interrupt disable 을 통해 mutual exclusion을 보장받는 방식에 대한 설명을 해주셨는데요.

싱글 코어인 상황에서 이와 같이 interrupt disable을 사용하게 된다면.. 이는 결국 non-preemptive 방식과 똑같아지는 것 아닌가? 하는 생각이 듭니다.

제가 맞게 생각한걸까요? 아니면 non-preemptive와는 다른 어떤 차이점이 존재하나요?

명절 잘 보내시고 시간 나실 때 답변 주시면 매우 감사하겠습니다!

동시성 운영체제

답변 1

0

주니온

안녕하세요?

모든 프로세스가 CPU 획득시에 interrupt disable 을 항상 켜도록 한다면

non-preemtive kerner과 동일하게 동작하는 게 맞겠습니다.

하지만,

interrupt는 필요할 때만 disable 시킨다면 preemptive kernel도 사용할 수 있고

interrupt는 꼭 context switching의 용도로만 사용하는 게 아니므로

interrupt disable 기능과 preemptive .vs. non-preemptive 커널과는

무관하다고 볼 수 있겠죠.

 

0

akakakakak

답변 감사합니다 교수님. 

그렇다면 강의에서 말씀하신 interrupt disable은 "필요한 경우에만" disable 하는 방식을 말씀하신 건가요?

그렇다면, 여러가지 경우에서 어떻게 필요한 경우에만 disable을 가능하게 할 수 있는지 설명을 부탁드려도 될까요?

너무 지엽적인 질문이라면 그냥 그렇게만 알고 넘어가겠습니다!

0

Karatus

안녕하세요. 좀 늦게 다는 사족이라 보실진 모르겠지만 일단 질문에 대한 답을 드리고자 합니다.

결론부터 말씀드리면 교수님 말씀대로 interrupt disable 기능과 kernel의 선점, 비선점은 관련이 없습니다. interrupt disable은 영어에서 알 수 있듯이 cpu 라인의 interrupt를 비활성화하는 것입니다. 

interrupt disable의 의의를 이해하려면 먼저 preemptive kernel에서 interrupt 또한 다른 interrupt request에 의해 preemption 될 수 있다는 걸 알아야 합니다(interrupts에도 priority가 존재합니다. 예를 들어 시스템이 호출하는 interrupt는 더 높은 priority를 가지고 있는거죠.).

그런데 디바이스 드라이버를 개발하다 보면 이 interrupt의 타이밍이 중요할 때가 있습니다(여러 경우 중 하나의 예). interrupt도 어떻게 보면 하드웨어로의 시그널이니까요. 이 타이밍을 정확히 주기 위해서는 해당 타이밍을 전달하는 시그널을 발생시키는 interrupt context 도중에는 다른 interrupt의 시그널이 방해가 되는 경우가 있습니다. 이럴 때는 다른 interrupt를 막기 위해 interrupt를 disable할 수 있는 함수를 linux kernel에서 제공합니다. 참고로 해당 인터페이스 함수는 local_irq_disable() 입니다(다시 돌려주는 함수는 local_irq_enable() 입니다). 

 

다시 질문자 님이 처음에 주신 질문으로 돌아가서 살펴보면 결국 mutual exclusion이 보장하기 위해서는 interrupt disable에 초점을 맞출 것이 아니라 hardware에서 지원하는 atomic operation이나 잘 설계된 알고리즘이 중점이 될 거라 생각합니다.

퀴즈 7번의 답에 대한 질문입니다.

0

554

1

이해하고 있는것이 맞는건지 궁금합니다 ㅠㅠ

0

821

1

타우시간

0

553

1

퀴즈1 1번 질문합니다 !

1

611

1

Page는 Text Data이외에 다른 메모리도 포함하나요?

1

373

0

IPC shared memory 코드

0

519

1

[간단한 질문 ]banker's algorithm 을 linux 에서 실제로 프로세스 관리할때 쓰이나요?

0

402

0

user mode i/o 관련 질문

0

283

1

shared memory 관련해서 질문 드립니다.

0

521

1

교수님 fork()함수에 대해 질문이 있습니다.

0

896

2

process 와 thread

0

375

1

교수님 Docker 로 실습해도 괜찮을까요?

1

867

1

Mac OS에서 Docker 이용하여 Ubuntu 20.04 환경설정 방법 공유

22

3329

2

moniter, condition variable, synchronized에 대해서 궁금한점이 있습니다..

0

675

1

왜 무료인지 이해를 못 하겠네요..

3

433

1

7.1 Classic Problems of Synchronization 질문이 있습니다

0

307

1

공룡책 8판과 10판중

0

610

1

6.3 peterson's solution 질문이 있습니다

0

222

1

08-01 연습문제 8번 질문있습니다!

0

280

0

06. 프로세스간 통신의 실제: Chapter 3. Processes (Part 4) 에 그림 3.16 3.17 실습 오류

0

263

1

안녕하세요 교수님 실습 해봤는데 LINE J가 실행이 됩니다

1

356

1

2강 실습을 위한 개발환경 구축(Windows 10 + WSL 2 + Visual Studio Code)에서 출력오류

0

344

1

아래 질문 관련하여 다시 문의드립니다

0

199

1

Thread & Concurrency (Part 2) 질문드립니다

0

186

1