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

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

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

인터럽트를 사용하면 됩니다. 인터럽트의 동작 방식은 다음과 같습니다. CPU가 입출력 관리자에게 명령을 내리고 다른 작업을 합니다. 그런 다음 입출력 관리자는 입출력이 완료된 후 CPU에게 신호를 줍니다. CPU는 ISR(인터럽트 서비스 루틴)을 실행시켜 작업을 완료합니다. ISR이란 특정 인터럽트가 들어오면 그 인터럽트를 처리하는 함수입니다.

인터럽트를 사용하게 되면 비동기적으로 동작해서 성능에 이점이 있음. 인터럽트는 하드웨어, 소프트웨어 두가지 방식이 있습니다. 첫번째로 하드웨어 방식인데 입출력이 발생하는 경우 인터럽트가 발생합니다. 소프트웨어에서 발생하는 경우도 있는데 사용자 프로그램에서 유효하지 않은 메모리 접근이나 0으로 나누기 같은 사례에서 발생하게 됩니다.

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

프로그램은 저장장치에 저장된 명령문의 집합체입니다. 저장장치에만 저장이 되어 있는 상태입니다.

프로세스는 실행중인 프로그램이며 프로그램이 메모리에 올라간 경우입니다. 메모리도 사용, CPU 스케줄링 알고리즘에 따라서 CPU도 사용, 필요에 따라 입력과 출력을 합니다.

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

멀티프로그래밍은 메모리에 여러개의 프로세스가 올라가 처리하는 것입니다. CPU가 프로세스를 실행하다가 IO 작업을 만나면 기다리면서 다른 프로세스를 실행하게 됩니다. 멀티프로그래밍에서는 멀티태스킹을 하게 되는데 이는 각각의 프로세스를 짧게 실행시키면서 모든 프로세스를 동시에 실행시키는 것 처럼 느끼게 하는 기술입니다.

 

멀티프로세싱은 여러 CPU가 작업을 처리하는 것입니다. 실제로 여러 작업이 병렬적으로 돌아가게 됩니다.

 

요약하자면 멀티프로그래밍은 각각의 프로세스를 짧게 실행시키면서 모든 프로세스를 동시에 실행시키는 것 처럼 느끼게 하는 것이고 멀티프로세싱은 여러 CPU가 작업을 동시에 병렬적으로 처리하는 것을 말합니다.

4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?

PCB(Process Control Block)를 사용합니다. 해당 프로세스의 정보를 가지고 있는 것입니다.

PCB는 연결리스트라는 자료구조로 저장되며 프로세스가 종료되면 연결리스트에서 해당 프로세스의 PCB를 제거합니다.

 

PCB의 구조

포인터: 부모와 자식 프로세스에 대한 포인터와 할당된 자원에 대한 포인터 등이 있고 프로세스의 한 상태에서 다른 상태로 전환될 때 저장하는 포인터를 가지고 있음. 효율적인 접근을 위해서 포인터를 사용함.

프로세스 상태: 현재 프로세스의 다섯가지 상태(생성, 준비, 실행, 대기, 완료)를 나타냄

프로세스 ID: 프로세스를 식별하기 위한 숫자가 저장됨.

프로그램 카운터: 다음에 실행될 명령어의 주소를 포함하는 프로그램 카운터를 저장함. 다른 프로세스를 실행하다가 다시 돌아왔을 때 마저 명령을 실행해야해서 필수다.

레지스터 정보: 프로세스가 실행될 때 사용했던 레지스터 값들이 저장됨. 다른 프로세스를 실행하다가 다시 돌아왔을 때 이전에 사용하는 값을 복구하기 위한 용도다.

메모리 정보: 프로세스가 메모리에 있는 위치 정보, 메모리 침범을 막기 위한 경계레지스터 값등이 저장됩니다.

CPU 스케줄링 정보: CPU 스케줄링에 필요한 우선순위, 최종 실행시간, CPU 점유시간등이 저장됩니다.

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

프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해서 실행중인 프로세스 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 작업입니다.

컨텍스트 스위칭이 실행되면 PCB의 내용이 바뀌며 실행중인 프로세스의 작업내용을 PCB에 저장하고 실행될 기존 프로세스의 PCB의 내용대로 CPU가 다시 세팅됩니다.

PCB에서 변경되는 값으로는 프로세스 상태, 프로그램 카운터, 레지스터 정보, 메모리 정보 등이 있습니다.

한 프로세스가 CPU를 너무 오래 점유하는 경우 운영체제가 인터럽트를 발생시켜 컨텍스트 스위칭을 진행합니다. 컨텍스트 스위칭이 발생하는 경우는 CPU 점유시간이 만료되거나, IO요청이 있거나 다른 종류의 인터럽트가 있을 때 발생합니다.

댓글을 작성해보세요.

채널톡 아이콘