인프런 워밍업 클럽 스터디 3기 - CS 전공지식(운영체제) <첫째 주 미션>

인프런 워밍업 클럽 스터디 3기 - CS 전공지식(운영체제) <첫째 주 미션>

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

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

인터럽트(Interrupt) 방식을 이용하면 성능을 개선하여 문제를 해결할 수 있을 것 같습니다. 인터럽트(Interrupt) 방식이란 I/O Device의 I/O 인터럽트 신호가 발생하면 CPU의 인터럽트 컨트롤러가 이를 받아 콜백 함수를 실행시킴으로써 이벤트를 처리하는 방식을 말합니다. 문제에 이 방식을 적용한다면 다음과 같이 구현할 수 있을 것 같습니다.

function onSkillActivated(callback) {
    console.log('스킬 활성화를 기다리는 중...');
    setTimeout(() => { callback(); }, 5000);
}

function handleSkillActivation() {
    console.log('스킬 활성화');
}

onSkillActivated(handleSkillActivation);

2. 프로그램과 프로세스가 어떻게 다른가요?

둘의 차이는 메모리에 할당되어 있는지 여부에 있습니다. 프로그램은 코드 및 데이터가 저장장치(HDD, SSD)에 들어 있는 경우로, 자기 코드가 실행되기를 기다립니다. 사용자가 exe 파일을 실행하는 등 프로그램을 실행하면 프로세스가 생성되어 메모리 할당, PCB 설정 등의 작업을 거쳐 대기 상태로 들어가고, 이후 Ready Queue에 있다가 CPU 스케줄러에 의해 CPU 리소스를 할당받게 됩니다. 이렇게 Running 상태에 들어가면 연산, 시스템 콜 호출 등 하드웨어 자원에 대한 일시 통제권을 갖고 필요한 처리를 할 수 있게 됩니다.


3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?

둘의 차이는 메모리 관점에서 보느냐, CPU 관점에서 보느냐에 따라 달라집니다. 멀티프로그래밍(Multi-programming)은 메모리 위에 여러 프로세스가 동시에 올라간 상태(=Running 상태)로 동작하는 방식이며, 멀티프로세싱(Multi-processing)은 단일 CPU 코어가 특정 프로세스를 정해진 Time Slice만큼 처리하는 시분할(Time-Sharing) 처리 방식을 말합니다. 현대 OS는 두 방식을 동시에 지원하므로 둘은 상호배반적인 개념이 아닙니다.


4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요? (질문이 다소 불분명하게 생각되어 두 가지로 답변하겠습니다.)

1. '프로세스 관리'를 특정 프로세스에 대한 CPU 리소스의 할당 및 제거로 볼 때

CPU Scheduling을 사용합니다. CPU Scheduling이란 Context Switching을 통해 적절한 스케줄링 알고리즘에 따라 Ready Queue 또는 Device Queue에 있는 PCB를 꺼내 Dispathing하는 것입니다. 리소스 사용률 향상, 오버헤드 최소화, 공평성 극대화, 처리량 증대, 대기시간 및 응답시간 최소화 등 다양한 목표를 만족하는 스케줄링 알고리즘을 환경에 맞게 적절히 활용하는 것이 핵심입니다.

2. '프로세스 관리'를 컨텍스트 스위칭의 관점에서 볼 때

PCB(Process Control Block)를 활용합니다. PCB(Process Control Block)란 특정 프로세스의 여러 정보를 포함하는 자료구조입니다. OS는 생성된 프로세스를 연결 리스트 형태인 PCB로 저장합니다. PCB에는 포인터, 프로세스 상태 정보, 프로세스 ID 등 Context Switching 시 멀티태스킹 처리의 안정성을 담보하는 데 도움이 되는 정보가 들어 있습니다.


5. 컨텍스트 스위칭이란 뭔가요?

컨텍스트 스위칭(Context Switching)이란 프로세스 전환(=멀티태스킹)을 위해 프로세스 상태값(=CPU 레지스터 값)을 PCB 형태로 Ready Queue 또는 Device Queue에 저장 및 불러오기하는 과정을 말합니다. Time Slice가 너무 짧아 Context Switching이 너무 자주 일어나면 Context Switching Overhead가 발생할 수 있으므로, 적절한 CPU Scheduling 알고리즘을 통해 적절한 Time Slice를 설정하거나, Thread Context Switching, Lazy Context Switching 등을 통해 오버헤드를 완화·개선할 수 있습니다.

댓글을 작성해보세요.

채널톡 아이콘