[인프런 워밍업 클럽 2기 - CS] 미션 - 1주차
운영체제
1) 아래 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?
while(true){
wait(1); // 1초 멈춤
bool isActivated = checkSkillActivated(); // 체크
}
위 방식을 해결하기 위해서는 인터럽트 방식을 사용하는게 좋습니다.
문제가 코드로 주어졌기 때문에 인터럽트와 비슷한 동작을 하는 코드를 만들어 보았습니다.
// 1~4 중 랜덤한 초 후에 "skillActivated" 라는 log 출력과 true를 반환하는 함수
const skillActivate = () => {
return new Promise((resolve) => {
const randomTime = Math.floor(Math.random() * 4) + 1;
console.log(`${randomTime}초`);
setTimeout(() => {
console.log("skillActivated");
resolve(true);
}, randomTime * 1000);
});
};
// 1초마다 "working" 이라는 log를 출력하며,
// skillActivate 의 true 반환을 기다렸다가 isActivated가 true가 되면 log 메시지를 출력하고 종료
const work = async () => {
let isActivated = false;
const workingInterver = setInterval(() => {
console.log("working");
}, 1000);
isActivated = await skillActivate();
if (isActivated) {
console.log("isActivated");
clearInterval(workingInterver);
}
};
work();
2) 프로그램과 프로세스가 어떻게 다른가요?
- 프로그램: 저장장치에 저장되어있는 상태 = HDD/SDD에 저장된 상태 = 수동적
- 프로세스: 실행중인 프로그램 = RAM에서 실행중인 상태 = 능동적
3) 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?
- 멀티프로그래밍: 메모리 관점
- 멀티프로세싱: CPU 관점
메모리에 여러개의 프로세스가 있으면(멀티프로그래밍), 그걸 CPU가 돌아가면서 돌림(멀티프로세싱).
4) 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?
프로세스의 정보를 가지고 있는 PCB라는 것을 만들고, 프로세스가 종료되면 해당 PCB를 연결리스트에서 제거합니다.
5) 컨텍스트 스위칭이란 뭔가요?
CPU는 시분할로 작동하기 때문에 A라는 작업을 하다가 B라는 작업을 해야되는 경우 같이 일을 스위칭 하는 것을 말합니다.
스위칭 하는 과정에서 나중에 다시 해당 작업을 하기 위해 레지스터를 PCB에 저장하고 불러오는 방식으로 작업을 이어서 할 수 있습니다.
자료구조와 알고리즘
1) 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.
이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.
저라면 배열을 사용하겠습니다.
일반적으로 학교는 번호를 순서대로 매겨 학생의 정보를 입력합니다.
때문에 index +1 이 학생의 번호가 될 수 있습니다.
중간에 학생이 전학을 가더라도, 학생의 번호를 당겨올 필요가 없으며, 전학간 학생의 정보만을 전학으로 수정하면 됩니다.
반대로 전학을 오는 학생이 있을 수 있으나 보통 2명이 넘지는 않기 때문에 교실의 학생 수 보다 +2 크기의 배열을 처음에 할당하면 된다고 생각합니다.
이렇게 하면 배열의 장점인 빠른 읽기/쓰기를 사용하면서, 배열의 단점인 데이터 삽입에 대한 대비를 할 수 있습니다.
2) 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.
주문이 들어온 순서대로 처리 하려면, 들어온 순서대로 나가는 큐 구조를 사용할 것 입니다.
이와는 좀 별개의 내용으로, 최근 흑백요리사를 보면서 분담 작업하는 것을 보았습니다.
때문에 만약 주문처리 프로그램이 음식점이고, 메뉴별로 분담이 되어있는 상태라면, 주문이 순서대로 처리 되면서, 전체 주문음식 수가 표시되는 기능을 추가하는게 좋다고 생각합니다.
만약 스택 구조로 지금 나가야되는 주문만 보고 해당되는 작업만을 하는 것은 비효율 적이기 때문에, 현재 주문 된 음식이 종류별로 몇개씩 있는지 확인 후, 한번에 여러개를 만든다든지, 자신에게 해당되는 음식이 없다면 많이 주문된 음식의 준비를 돕는등의 방식으로 처리하는게 더 효율적 이지 않을까 라는 생각을 해당 문제를 생각하면서 했습니다.
댓글을 작성해보세요.