미션 1주차
운영체제
while(true){
wait(1); // 1초 멈춤
bool isActivated = checkSkillActivated(); // 체크
}
1. 위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?
-> 인터럽트를 사용한다. 인터럽트는 자신의 상태가 바뀔 때 CPU에 통보해주는 기법이다
프로그램과 프로세스가 어떻게 다른가요?
-> 프로그램 : 저장장치(HDD,SSD 등)에 저장되어 특정 작업을 수행하는 명렁어 모음
프로세스 : 메모리에 탑재되어 실행중인 프로그램
멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?
->멀티프로그래밍 : 메모리 위에 여러 개의 프로그램을 실행시켜 처리하는 것
멀티프로세싱 : 두 개 이상의 프로세서(CPU)가 각 프로세스를 처리하는 것
운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?
-> 관리하고자 하는 프로세스의 정보를 가지고 있는 PCB를 만들고 저장한다
컨텍스트 스위칭이란 뭔가요?
->실행되어야할 프로세스를 변경하기 위해 기존 프로세스의 정보를 PCB에 저장하고 실행될 프로세스의 PCB 내용대로 작업하는 것
자료구조와 알고리즘
여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.
이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.
-> 한번 정해진 교실의 학생들은 추가/삭제가 빈번하지 않기 때문에 연결리스트가 효율적이다 교실의 학생 수는 언제든지 바뀔 수 있기 때문에 미리 많은 공간을 마련해둬야 하는 해시테이블과 크기가 고정되어 있는 배열은 비효율적이다
여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.
-> Queue를 사용한다 FIFO방식으로 먼저 온 손님을 먼저 계산해줄 수 있기 때문
우리가 구현한 스택은 0번 인덱스, 즉 입구쪽으로 데이터가 삽입되고 나오는 구조입니다. 반대로 마지막 인덱스, 즉 출구쪽으로 데이터가 삽입되고 나오는 구조로 코드를 변경해주세요.
-> LinkedList의 insertLast , deleteLast 함수를 사용한다import { LinkedList } from "./linkedList.mjs"; class Stack { constructor() { this.list = new LinkedList(); } push(data) { this.list.insertAt(0, data); } insertLast(data) { this.list.insertLast(data); } deleteLast() { return this.list.deleteLast(); } pop() { try { return this.list.deleteAt(0); } catch (e) { return null; } } peek() { return this.list.getNodeAt(0); } isEmpty() { return this.list.count === 0; } } export { Stack };
해시테이블의 성능은 해시 함수에 따라 달라집니다. 수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다. 이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요. 힌트: charCodeAt() 함수를 이용 예시: name1 = "이운재"; name1.charCodeAt(0); // 51060 이운재의 0번 인덱스 ‘이’의 유니코드 출력
hashFunction(name){
return name.charAt(0) % 10;
}