인프런 워밍업 클럽 스터디 2기 CS 1주차 과제
운영체제
1.
while(true){
wait(1); // 1초 멈춤
bool isActivated = checkSkillActivated(); // 체크
}
Q1 > 위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링 방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?
A1 > 인터럽트이다.
인터럽트 방식은 하드웨어 장치에서 많이 사용되고 소프트웨어적(Python에서는)으로는 asyncio를 사용한다. 위 코드에서는플레이어가 스킬을 사용했을때, 인터럽트를 발생시키는 방식이 좀더 효율적이라는 것.(flag와 같은 역할을 한다고 생각함.)
그렇다고 풀링 방식이 안좋은 건 아니다. 실시간 데이터를 모니터링하거나 수집해야 할 경우 폴링 방식을 사용한다면 원활하게 데이터 수집이 가능해지기 때문이다.
Q2 > 프로그램과 프로세스가 어떻게 다른가요?
A2 > 프로그램은 하드디스크에 저장된 명령문의 집합체이다. 즉, 애플리케이션이라고도 불린다.
프로세스는 프로그램이 메모리에 올라가서 실행되는 활동 단위이다. 즉, 실행 중인 프로그램을 의미한다.
Q3 > 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?
A3 > 메모리 관점, CPU 관점으로 나뉘게 된다.
멀티프로그래밍은 메모리에 여러개의 프로세스가 올라와 있는 상황을 말한다.
-> 이렇기 때문에 우리는 컴퓨터에 여러 개의 프로그램을 실행(프로세스)할 수 있게 된다.
멀티프로세싱은 CPU가 시분할 처리로 각각의 프로세스를 짧은 시간동안 교대로 실행하는 것을 말한다.
-> 이렇기 때문에 우리는 컴퓨터가 동시에 여러 개의 프로그램을 실행(프로세스)하는 것처럼 보인다.
Q4 > 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?
A4 > PCB(Process Control Block)를 사용한다.
우리가 햄버거, 라면 등과 같은 인스턴스 음식을 먹을때, 영양정보를 확인한다.(해당 제품의 구성 확인 가능)
PCB도 영양정보와 같은 역할을 담당한다. 운영체제는 프로세스의 정보를 PCB에 저장한다.
PCB는 포인터, 프로세스 상태, 프로세스 ID, 프로그램 카운터, 레지스터 정보, 메모리 관련 정보, CPU 스케쥴링
정보를 담는다.
Q5 > 컨텍스트 스위칭이란 무엇인가요?
A5 > 컨텍스트 스위칭이란 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스의 상태를
저장하고 다른프로세스의 상태로 저장하는 작업이다.
여기서 프로세스의 시분할 처리를 위한 다섯가지 상태를 알고 있으면 좋은데,
1. 생성 2. 준비 3. 실행 4. 대기 5. 완료로 나뉜다.
예를 들어, 내가 롤이라는 게임을 하고 있다가 크롬을 켜서 웹툰을 본다면 롤이라는 프로세스는 실행 상태에서 준비
상태로 돌입하고 크롬이라는 프로세스는 준비 상태에서 실행 상태로 바뀌게 된다. 이때 CPU는 롤이라는 프로세스의 PCB는 저장하고 크롬 프로세스의 PCB로 다시 세팅하는 것이다.
자료구조와 알고리즘
Q1 > 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이때 여러분이라면 학생의 정보를
저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.
A1 > 딕셔너리를 사용한다. 해시테이블이라고도 한다.
딕셔너리의 장점은 시간복잡도가 O(1)이다. 시간 복잡도가 O(1)이기 때문에 빠르게 접근할 수 있으며, key와 value 형식이기 때문에 관리하기도 용이하며 해당 필드에 쉽게 추가, 삽입도 가능하다.
Q2 > 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다.
이때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.
A2 > FIFO의 자료구조를 갖는 큐를 사용하는 것이 적합하다.
문제에 직면할 때, LIFO, FIFO, LIFO&FIFO 중 어떤 문제인지 정확하게 아는 것이 중요하다.
이 질문에선 '주문이 들어 온 순서대로 처리한다' 가 핵심이며, 처음 들어온 것이 가장 처음으로 나가는 구조를 갖는
큐를 사용하는 것이 가장 적절하다.
댓글을 작성해보세요.