[인프런 워밍업클럽 CS 2기] 1주차 미션
while(true){
wait(1); // 1초 멈춤
bool isActivated = checkSkillActivated(); // 체크
}
위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?
- 인터럽터를 사용합니다.
- 인터럽터는 비동기로 동작하고 기다리지 않고 다른작업을 합니다.
- 비동기 작업을 사용하면 성능상의 이점이 있습니다.
프로그램과 프로세스가 어떻게 다른가요?
- 프로그램
- 프로그램은 롤과, 지니뮤직, vscode, 크롬과 같은 HDD나SSD에 저장 되어 있는 수동적인 존재
- 프로세스
- 프로세스는 프로그램이 실행되어 HDD에서 RAM(메모리)로 할당되면서 실행중인 프로그램입니다.
- 프로세스는 필요에 따라 I/O(입출력) 작업이 이루어진다.
- 운영체제의 CPU스케줄링 알고리즘에 따라서 CPU를 사용.
멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?
멀티 프로그래밍은
메모리 관점
에서 여러개의 프로세스가 올라오는것이다.
멀티 프로세싱은
CPU 관점
에서 CPU가 여러개의 프로세스를 처리 하는것.
운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?
프로세스의 정보를 가지고 있는 PCB를 만들고, 저장합니다. PCB는 포인터, 프로세스 상태, 레지스터 정보, 메모리 관련 정보, CPU 스케쥴링 정보 등으로 구성되어 있습니다.
운영체제는 프로세스가 종료되면 연결리스트에서 해당 프로세스의 PCB를 제거합니다.
컨텍스트 스위칭이란 뭔가요?
컨텍스트 스위칭이란 프로세스를 실행하는 도중에 다른 프로세스를 실행하기 위해 실행중인 프로세스의 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 작업 입니다.
CPU에서 시분할 처리는 컨텍스트 스위칭이 매우 빠르게 일어나기 때문에, 여러 프로세스가 동시에 실행되는 것처럼 보이는 현상입니다.
해당 컨텍스트 스위칭을 하는 이유는 CPU 점유시간이 다되었거나, I/O 입출력 작업 요청이 있거나, 다른종류의 인터럽트가 있을때 발생합니다.
컨텍스트 스위칭이 발생할때 프로세스가 하던일을 멈추고 CPU 건네주고 다시 자기 차례가 왔을때 이전에 하던 작업을 그대로 하기 위해서 컨텍스트 스위칭이 발생할때는 CPU레지스터 값과 프로그램 카운터(PC)등을 저장 해야 합니다.
근데 이때 컨텍스트 스위칭이 CPU 점유시간이 다되었을때 발생하는데 CPU 점유 시간을 결정하는 것이 CPU 스케줄링 알고리즘 입니다.
자료구조와 알고리즘
1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.
셋(Set) 자료형을 사용 할것 같습니다.
- 셋 자료형을 중복을 허용하지 않기 때문입니다. 왜냐하면 학생 같은경우에는 각 학반, 학생번호, 이름이 있는데 이는 중복되지 않아야 하기 때문에 무결성을 보장 해야 합니다.
- 셋 자료형은 해시테이블 기반으로 빠른 데이터 읽기, 삽입, 삭제가 가능하기 때문 입니다.
- 셋도 해시테이블을 사용하기 때문에 해시 테이블의 단점인 메모리를 많이 차지한다는 점이 있는데 이는 학생이 중복 데이터가 발생하지 않기 때문에 1억건 이런식으로 발생하지 않기 때문에 메모리문제가 발생하지 않을것으로 예상 됩니다.
여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.
>Queue
자료구조를 사용할것 같습니다. 이유는 위의 문제처럼주문은 들어온 순서대로 처리 되어야 하기 떄문에
FIFO
먼저 들어온것이 먼저 나가는 구조를 가진Queue
자료구조가 적합 합니다.
>비슷한 자료구조인 Stack
을 만약 사용해서 구현 했다고 가정하면 주문을 제일 먼저 한 사람이 제일 마지막에 처리 되면서 엄청난 컴플레인을 받을것 같습니다. 왜냐하면 마트에서 계산 할려고 줄을 섯는데 제일 마지막에 줄을 선사람부터 계산을 하게 된다고 가정을 하면 굉장히 불공평 하기 때문입니다.
미션 회고
분명히 공부하고 정리 할때 까지만해도 이해한것 같았고 넘어갔는데 미션을 제 스스로의 힘으로 풀려고 하니까 벅찼다. 뭐랄까 아 이거 뭐였지? 저거 뭐였지? 공부를 했는데 기억이 안나는것은 정말 허무하다. 그래도 다시 보고 미션으로 정리를 한번 더 했으니 기억에 더 오래 남기를 빌어본다.
다음 미션에서는 스스로 직접 60%이상 풀 수 있는걸 목표로 하자!
댓글을 작성해보세요.