인프런 워밍업 클럽 2기 - CS 미션 1
운영체제
while(true){
wait(1); // 1초 멈춤
bool isActivated = checkSkillActivated(); // 체크
}
위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?
인터럽트를 사용합니다. 인터럽터 방식은 작업이 완료됬을 때 신호를 받아 CPU가 인터럽트 서비스 루틴을 실행시켜 작업을 완료합니다.
2. 프로그램과 프로세스가 어떻게 다른가요?
프로그램은 디스크 등에 저장된 명령문의 집합입니다. (수동적 존재)
프로세스는 프로그램이 메모리에 올라가 있는 상태입니다. (실행중인 프로그램)
3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?
멀티프로그래밍은 '메모리 관점' 에서 메모리에 여러가지 프로세스가 올라온 것을 의미합니다.
멀티프로세싱은 메모리에 올라와있는 여러 프로레스를 시분할처리로 CPU가 짧은 시간 교대로 실행하는 것을 의미합니다.
4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?
PCB 데이터 구조를 사용합니다. 각 프로세스의 상태, 프로그램 카운터, CPU 레지스터, 메모리 관리 정보 등이 포함되어 있습니다.
5. 컨텍스트 스위칭이란 뭔가요?
운영체제는 CPU를 효율적으로 사용할 수 있도록 여러 프로세스를 번갈아가며 CPU를 할당합니다. 이떄 각 프로세스의 작업 진행 사항을 유지할 수 있도록 실행중인 PCB 를 저장하고, 실행될 기존의 PCB 내용을 CPU에 세팅하는 것을 의미합니다.
자료구조와 알고리즘
1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.
헤시테이블을 선택하겠습니다. 학생에게는 구분을 위한 고유정보(학생번호) 등이 존재할 것입니다. 저장하고 열람한다는 조건을 따졌을 때, 해시테이블은 조회, 삽입 , 삭제 모두 O(1) 의 시간복잡도를 가져 , 빠르게 저장하고 열람할 수 있을 것입니다.
2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.
큐를 선택하겠습니다. 주문의 조건인 순서대로 처리하는 FIFO 방식인 큐가 적합한 자료구조라고 생각됩니다. 이 경우 주문의 삭제, 삽입은 모두 O(1)의 시간 복잡도를 가지게 됩니다. 물론 덱을 사용해도 성능상 차이는 없겠지만, 이 코드를 공유하게 될 동료들에게 '순서대로 처리한다' 라는 결론을 큐를 통해 직관적으로 전달할 수 있기 때문입니다.
댓글을 작성해보세요.