[인프런 워밍업클럽 CS 2기] 1주차 미션
운영체제
while(true){
wait(1); // 1초 멈춤
bool isActivated = checkSkillActivated(); // 체크
}
위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다.
1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?
: 플레이어가 스킬을 사용했을 때 콜백을 받는 방식(비동기 프로그래밍 이벤트 처리)으로 문제를 해결할 수 있습니다.프로그램과 프로세스가 어떻게 다른가요?
: 프로그램은 앱, .exe파일과 같은 저장장치에 저장된 명령문의 집합체이고, 프로세스는 프로그램이 메모리에 올라갔을 때 실행중인 프로그램입니다.
그래서 컴퓨터 관점에서 보면 프로그램은 저장장치만 사용하는 수동적인 존재이고, 프로세스는 운영체제의 CPU 스케줄링 알고리즘에 따라 CPU도 사용하고, 필요에 따라 입출력도 하기에 능동적인 존재라고 볼 수 있습니다.멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?
: 멀티프로그래밍은 메모리 관점에서 메모리에 여러개의 프로세스가 올라온 것이고,
멀티프로세싱은 CPU의 관점에서 CPU가 여러개의 프로세스를 처리하는 것입니다.운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?
: 프로세스 생성 시, 프로세스의 정보를 가지고 있는 PCB를 만들고 저장합니다.PCB들은 연결리스트로 저장되고,
운영체제는 프로세스가 종료되면 연결리스트에서 해당 프로세스의 PCB를 제거합니다.
컨텍스트 스위칭이란 뭔가요?
: 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스의 상태를 저장하고, 다른 프로세스의 상태값으로 교체하는 작업입니다.
좀 더 정확하게는 PCB의 내용이 변경되는 것으로 프로세스 상태, 프로그램 카운터, 레지스터 정보, 메모리 관련 정보 등이 변경됩니다.컨텍스트 스위칭은
CPU 점유시간이 다 되거나,
I/O 요청이 있을 때, 또는
다른 종류의 인터럽트가 있을 때 발생하게 됩니다.
자료구조와 알고리즘
여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.
이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.
: 학번을 key값으로 가지는 해시테이블을 선택할 것입니다.
학생이 전학가거나 오는 상황에 있어 고정된 크기를 가지는 배열보다는 동적으로 크기 조정이 가능한 해시테이블이 유연합니다.
또한 해시테이블은 학번을 key값으로 사용하여 검색 시, 시간 복잡도 O(1)을 가지기 때문에 학생정보를 빠르게 검색할 수 있습니다.
만약 동일한 해시값을 갖는다면, 연결리스트 사용 등으로 충돌을 해결할 수 있습니다.여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.
: 큐(Queue)를 선택할 것입니다. First In First Out의 특성을 가지는 자료구조로 들어온 순서대로 처리되는 주문에 적합하다고 생각합니다.
회고
강의를 들을 때는 끄덕끄덕하며 다 이해되었다고 생각했는데, 막상 미션을 해결하려니 정리해서 작성하기에 조금 어려웠고, 또 가물가물한 부분도 있어 당황하기도 하였습니다.
그래서 다시 정리해뒀던 것을 찾아보며 미션을 하게 되었는데, 앞으로 일주일마다 제가 작성했던 발자국과 미션을 반복적으로 보면서 복습해야겠다고 생각하게 되었습니다.
댓글을 작성해보세요.