[인프런 워밍업 클럽 CS 3기] 1주차 운영체제 미션
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) 프로그램과 프로세스가 어떻게 다른가요?프로그램저장장치에 저장된 코드의 집합으로, 정적인 상태이다.수동적프로세스실행 중인 프로그램으로, 프로그램이 메모리에 적재되어 운영체제의 관리하에 실행되는 동적 개체이다.능동적 Q3) 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티프로그래밍하나의 메모리에 여러 개의 프로세스를 적재하여 실행시키는 것이다.시분할(time-sharing) 시스템을 통해 여러 개의 프로세스가 동시에 실행되는 것처럼 보이게 할 수 있다. 실제로는 한 번에 하나의 프로세스만 실행된다.멀티프로세싱여러 개의 프로세서(CPU)가 여러 개의 프로세스를 실행시키는 것이다.실제로 여러 개의 프로세스가 동시에 실행될 수 있다. (병렬처리)동시에 작업되는 프로세스의 최대 수 = CPU 개수 Q4) 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요? 프로세스가 생성될 때 운영체제는 PCB(Process Control Block)를 생성한다. PCB에는 Process ID, 프로세스 상태, 포인터, PC(Process Counter), 레지스터 정보 등이 포함되어 있다. 이 정보를 통해(특히 PC, 레지스터 정보) 시분할 시스템에서 CPU 할당 시 이전 작업 상태를 이어받아 실행할 수 있다. Q5) 컨텍스트 스위칭이란 뭔가요?한 프로세스가 I/O 작업 요청이나 CPU 점유시간 초과 등으로 인해 CPU를 반납해야 할 경우, 인터럽트가 발생하여 운영체제가 해당 프로세스로부터 CPU 제어권을 회수한다.이때, 현재 실행 중인 프로세스의 레지스터 값 등을 PCB에 저장한다.이후, 다음에 실행할 프로세스의 PCB에 저장된 레지스터 값을 CPU에 로드하고,PC에 저장된 다음으로 실행할 명령어의 주소를 보고 프로세스의 작업을 이어서 진행한다.