첫번째 미션
운영체제
C
while(true){
wait(1); // 1초 멈춤
bool isActivated = checkSkillActivated(); // 체크
}
위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다.
이 방식은 폴링방식입니다.
1초마다 체크하기 때문에 성능에 좋지 않습니다.
이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?
매 순간 체크 해야하는 폴링 방식이 아니라 인터럽트 방식을 적용한다.
코드로 구현하자면 콜백 방식을 적용한다는 것이 조금 더 올바른 표현 방식으로 생각됩니다.
게임 루프
(물리 => 사용자 입력 => 게임 로직 => 렌더링)
사용자 입력 부분에서 스킬 사용이 되었다면 해당 순간에 콜백함수를 호출하여 게임로직에 적용되면
매 순간 체크하는 것이 아닌 해당 사용자 입력 순간에만 적용하기에 오버헤드가 감소할 것 입니다.
2. 프로그램과 프로세스가 어떻게 다른가요?
프로그램은 저장장치에 코드, 데이터영역이 저장되는 것을 의미하며,
프로세스는 해당 프로그램이 메모리에 올라가 코드, 데이터, 힙, 스택영역과 PCB를 할당받아 CPU를 통해
실행되는 것을 의미합니다.
3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?
멀티프로그래밍은 메모리내에 여러 프로그램을 올리는 것이고,
멀티프로세싱은 운영체제의 시분할을 이용하여 여러 프로세스를 빠르게 전환하여 사용자 입장에서 동시에 처리되는 것처럼 느껴지는 작업을 의미한다.
4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?
PCB를 통해 프로세스의 정보를 갱신하고, CPU 스케줄링을 통해 프로세스들의 CPU 점유를 결정한다.
5. 컨텍스트 스위칭이란 뭔가요?
프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 현재 실행중인 PCB상태를 수정하고 다른 프로세스의 PCB정보를 가져와서 CPU를 다시 세팅하는 과정을 의미한다.
자료구조와 알고리즘
1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.
이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요?
이유를 함께 적어주세요.
강의에는 없지만, 동적배열과 해시 테이블을 같이 사용할 것 같습니다.
키 값으로 학년, 반을 구분하고 벨류 값에는 동적배열을 넣어 학생의 출석번호를
인덱스로 삼아 참조하는 방식을 사용할 것 같습니다.
해시 테이블을 사용한 이유는 학년, 반을 통해 학생이 소속되어 있는 교실을 찾을 수 있으며,
교실의 학생 수는 반 마다 다를 수 있기에, 확장성과 참조속도를 고려하여 동적배열이 어울려 보입니다.
2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다.
주문은 들어온 순서대로 처리됩니다.
이 때 여러분이라면 어떤 자료구조를 선택하실 건가요?
이유를 함께 적어주세요.
기본적으로는 큐를 사용하지만, 큐를 응용하여 다중 큐를 구현할 것 같습니다.
고객의 메뉴 선택에 따라 오래 걸리는 음식이 있고, 메뉴가 다양할 수도 있습니다.
이러한 조건으로 여러 개의 다중 큐를 만들어 손님들의 평균 대기 시간을 줄이려는 시스템을 구축할 것 같습니다.
걸리는 시간에 의한 조건만 추가하면 안되고, 후순위 메뉴가 주문이 들어온 지 얼마나 경과했냐 또한 고려해야 합니다.
댓글을 작성해보세요.