워밍업 클럽(CS) 첫번째 미션📓
운영체제
1번
while(true){
wait(1); // 1초 멈춤
bool isActivated = checkSkillActivated(); // 체크
}
Q : 위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다. 이 방식은 폴링방식입니다. 1초마다 체크하기 때문에 성능에 좋지 않습니다. 이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?
A : 인터럽트
🔎개념
폴링 : 주기적으로 CPU가 확인해줘야 하니 성능이 좋지 않다.
인터럽트 : 폴링 방식의 단점을 해결
하드웨어 인터럽트 : 입출력 등과 같은 인터럽트
소프트웨어 인터럽트 : 사용자 프로그램에서 발생한 인터럽트
예시) 유효하지 않은 메모리 접근, 0으로 나누는 명령
2번
Q : 프로그램과 프로세스가 어떻게 다른가요?
A : 프로그램이 메모리에 올라가 실행 중일 때를 프로세스라고 부른다.
🔎개념
프로그램
하드디스크 등과 같은 저장장치에 저장된 명령문의 집합체
애플리케이션이나 앱이라고 불림
Windows 운영체제에서는 .exe 파일의 모습
컴퓨터 관점에서 하드디스크 즉 저장 장치만 사용하는 수동적 존재
프로세스
실행중인 프로그램
하드디스크에 저장된 프로그램이 메모리에 올라갔을 때
메모리도 사용, 운영체제의 CPU 스케줄링 알고리즘에 따라 CPU도 사용, 입출력 사용하는 능동적 존재
프로세스의 구조
Code 영역 : 자신을 실행하는 코드 저장
Data 영역 : 전역 변수와 Static(정적) 변수 저장
Stack 영역 : 지역 변수, 함수 호출시 매개변수와 돌아갈 주소가 저장
Heap 영역 : 프로그래머가 런타임시 할당할 수 있는 메모리 공간
3번
Q : 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?
A : 멀티프로그래밍은 메모리의 관점, 멀티프로세싱은 CPU의 관점으로 정의
🔎개념
유니프로그래밍 : 메모리에 프로세스 1개
멀티프로그래밍 : 메모리에 여러 개의 프로세스
멀티프로세싱 : CPU가 여러 개의 프로세스를 처리하는 것
4번
Q : 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?
A : PCB(Process Control Block)
🔎개념
프로세스가 만들어지면 운영체제는 해당 프로세스의 정보를 가지고 있는 PCB를 만들고 저장
PCB들은 연결리스트로 저장
운영체제는 프로세스가 종료되면 연결리스트에서 해당 프로세스의 PCB 제거
PCB의 구조
포인터 : 부모와 자식 프로세스에 대한 포인터, 할당된 자원에 대한 포인터, 프로세스의 한 상태에서 다른 상태로 전환될 때 저장하는 포인터
프로세스 상태 : 현재 프로세스의 다섯가지 상태(생성, 준비, 실행, 대기, 완료)
프로세스 ID : 프로세스를 식별하기 위한 숫자
프로그램 카운터 : 다음에 실행될 명령어의 주소를 포함하는 프로그램 카운터 저장
레지스터 정보 : 프로세스가 실행될 때 사용했던 레지스터 값
프로그램 카운터와 마찬가지로 CPU를 뺏기고 다시 시작할 때 이전에 사용하던 값을 복구하기 위한 용도
메모리 관련 정보 : 프로세스가 메모리에 있는 위치 정보, 메모리 침범을 막기 위한 경계레지스터 값
CPU 스케줄링 정보 : CPU 스케줄링에 필요한 우선순위, 최종 실행시간, CPU 점유시간 등
5번
Q : 컨텍스트 스위칭이란 뭔가요?
A : 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스의 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 작업
🔎개념
컨텍스트 스위칭이 일어날 때 PCB의 내용이 변경됨
실행중인 프로세스의 작업내용을 PCB에 저장하고 실행될 기존 프로세스의 PCB의 내용대로 CPU가 다시 세팅
컨텍스트 스위칭이 일어날 때 PCB의 프로세스 상태, 프로그램 카운터, 각종 레지스터값 등이 변경
자료구조와 알고리즘
1번
Q : 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.
A : 연결리스트, 데이터의 추가와 삭제가 간단한 작업으로 가능하기 때문에 학생이 전학을 오고 갈 때 관리가 쉬울 것으로 판단했습니다.
2번
Q : 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.
A : 큐, FIFO 먼저 들어간 데이터가 먼저 나오는 규칙이기 때문에 순서대로 들어온 주문을 처리하기 위해선 큐 자료구조가 적합하다고 판단했습니다.
댓글을 작성해보세요.