inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 클럽 CS 3기] 1주차 운영체제 미션

박예은
0

Q1) 아래 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?

while(true){
    wait(1); // 1초 멈춤
    bool isActivated = checkSkillActivated(); // 체크
}

플레이어가 스킬을 사용한 경우에 이벤트를 발생시키거나 콜백 함수가 실행되도록 구현하여 무한 반복문을 돌면서 불필요한 자원 낭비를 막을 수 있다.
Java Script의 경우 eventListener를 사용하여 이벤트를 다룰 수 있고, C언어는 select나 kqueue와 같이 멀티플렉싱을 지원하는 시스템 콜 함수를 사용하여 작업이 완료된 경우 후속 작업을 처리하도록 구현할 수 있다.

 

폴링 방식(Polling)

I/O 작업이 완료되었는지 CPU가 주기적으로 확인하는 것
→ CPU의 낭비가 심하다.
⇒ 인터럽트 방식을 사용

인터럽트(Interrupt)

I/O 관리자에게 I/O 작업을 맡기고, CPU는 다른 작업을 처리.
I/O 작업 완료 시, 인터럽트 발생 → CPU가 완료된 I/O 작업을 이어서 처리
⇒ CPU의 낭비 없이 CPU의 처리량을 높일 수 있다.

 

Q2) 프로그램과 프로세스가 어떻게 다른가요?

시스템 · 운영체제 CS OS

답변 0