 
    인프런 워밍업 클럽 3기 CS - 1주차 발자국
[강의 내용]
운영체제
폴링과 인터럽트
- 폴링 : CPU가 입출력 명령이 완료되었는지 주기적으로 확인하는 방식 - CPU가 주기적으로 확인해줘야 하기 때문에 성능이 좋지 않음 
 
- 인터럽트 : 입출력 명령이 완료되면 CPU에게 신호를 주고 CPU는 신호를 받아 인터럽트 서비스 루틴을 실행시켜 작업을 완료하는 방식 - 비동기적으로 동작하기 때문에 성능에 이점이 있음 
- 인터럽트는 하드웨어 인터럽트와 소프트웨어 인터럽트가 존재 
 
프로그램과 프로세스
- 프로그램 : 하드디스크에 저장되어 있는 실행파일(.exe 파일) 
- 프로세스 : 프로그램을 실행하여 해당 프로그램이 하드디스크에서 메모리로 올려져서 실행 중인 프로그램 
멀티 프로그래밍과 멀티 프로세싱
- 멀티 프로그래밍 : 하나의 CPU에서 여러 개의 프로세스를 메모리에 올려서 처리하는 기술 
- 멀티 프로세싱 : 여러 개의 CPU를 이용하여 프로세스를 처리하는 기술 
PCB(Process Control Block)
- 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구 
- PCB들은 연결 리스트 자료구조로 저장 
프로세스 상태
- 생성(new) : PCB를 생성하고 메모리에 프로그램 적재를 요청한 상태 
- 준비(ready) : 프로세스가 CPU를 사용 위해 기다리는 상태 
- 실행(running) : 프로세스가 CPU를 할당 받아 실행 중인 상태 
- 대기(waiting) : 프로세스가 특정 이벤트를 기다리는 상태 
- 완료(terminated) : 프로세스가 종료된 상태 
컨텍스트 스위칭
- 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행 중인 프로세스 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 작업 
쓰레드
- 프로세스 내부에 존재하는 운영체제가 실행하는 단 
- 쓰레드는 프로세스의 PCB, 코드, 데이터, 스택, 힙을 공유 
- 프로세스에 문제가 생기면 프로세스를 공유하는 모든 쓰레드에 문제가 발생 
스케쥴링
- 프로세스에게 CPU를 할당/해제하는 알고리듬 
- 어떤 프로세스에게 얼마의 시간 동안 CPU를 할당할지에 따라 스케쥴링이 결정됨 
FIFO(First In First Out)
- 먼저 들어온 프로세스가 먼저 처리하는 방식 
- 프로세스가 끝나지 않으면 다음 프로세스를 실행할 수 없음 
SJF(Shortest Job First)
- 버스트 타임이 가장 짧은 프로세스를 먼저 실행하는 방식 
- 어떤 프로세스가 얼마나 실행될지 예측할 수 없기 때문에 실제로는 구현되지 못한 스케쥴링 
- 버스트 타임이 짧은 프로세스가 계속 들어오면 버스트 타임이 긴 프로세스는 계속 실행할 수 없는 기아 상태가 발생하게 됨 
RR(Round Robin)
- 프로세스에게 CPU를 할당하고 일정 시간이 지나면 현재 프로세스의 CPU를 다른 프로세스에게 할당하는 방식 
- 타임 슬라이스가 크면 먼저 들어온 프로세스를 먼저 처리하는 FIFO 스케쥴링과 같아짐 
- 타임 슬라이스가 작으면 프로세스의 처리량보다 컨텍스트 스위칭의 처리량이 커짐 
MLFQ(Multi Level Feedback Queue)
- 여러 개의 우선순위를 가진 큐를 사용 
- 높은 우선순위를 가진 큐는 타임 슬라이스가 작고 낮은 우선순위를 가진 큐는 타임 슬라이스가 큼 
- 프로세스가 스스로 CPU를 반납하면 CPU 사용이 적다는 의미로 I/O 바운드 프로세스일 가능성이 높음 
- 프로세스가 타임 슬라이스를 오버하여 CPU를 강제로 뺏기면 CPU 사용이 많다는 의미로 CPU 바운드 프로세스일 가능성이 높음 
자료구조와 알고리듬
자료구조
- 데이터가 어떤 구조로 저장되고 어떻게 사용되는지를 나타내는 용어 - 가장 간단한 자료구조는 변수 
 
- 변수를 어떤 규칙에 따라 생성하고 사용하는지에 따라서 배열, 스택, 큐 등의 다양한 자료구조가 됨 
시간 복잡도
- 알고리듬의 성능을 측정하는 척도 - 실제 성능을 측정하지 않고 연산의 횟수를 계산하여 대략적인 성능을 측정 
- 알고리듬에서 성능에 가장 큰 영향을 주는 연산은 반복문 
 
- 표기법 - 빅 오(Big-O) 표기법은 함수의 상한을 표기 
- 빅 오메가(Big-Ω) 표기법은 함수의 하한을 표기 
- 빅 세타(Big-θ) 표기법은 함수의 평균을 표기 
 
배열(Array)
- 프로그래머가 요청한 크기만큼 메모리에 연속된 공간을 할당 - 프로그래머가 처음 요청한 크기의 공간을 변경하기 어려움 
- 필요한 메모리 공간의 크기를 몰라서 처음부터 많은 메모리 공간을 할당하는 경우가 많아 메모리 낭비가 심함 
 
- 배열은 데이터를 탐색할 때 인덱스를 사용하여 데이터에 바로 접근할 수 있기 때문에 탐색 성능은 O(1)의 성능을 가짐 
- 배열은 데이터를 삽입, 삭제할 때 삽입, 삭제하는 데이터의 인덱스 위치 이후에 있는 모든 데이터를 이동 시켜야 하기 때문에 삽입, 삭제 성능은 O(n)의 성능을 가짐 
연결 리스트(Linked List)
- 각 노드가 데이터를 담는 변수 하나와 다음 노드를 가리키는 변수로 이루어진 자료구조 - 다음 노드를 가리키는 변수가 있어 필요할 때 새로운 노드를 생성하여 연결해줄 수 있음 
- 연결 리스트의 첫 번째 노드의 주소만 알고 있으면 다른 모든 노드로 접근이 가능 
 
- 연결 리스트는 데이터를 탐색할 때 첫 번째 노드부터 단계적으로 탐색해야 하기 때문에 탐색 성능은 O(n)의 성능을 가짐 
- 연결 리스트는 새로운 노드를 삽입, 삭제할 때 노드를 탐색 후 새로운 노드를 삽입, 삭제만 하면 되기 때문에 삽입, 삭제 성능은 O(1)의 성능을 가짐 
스택(Stack)
- 가장 최근에 들어온 데이터가 가장 먼저 나가는 LIFO(Last In First Out) 방식의 자료구조 
- 스택은 데이터를 탐색할 때 모든 데이터를 삭제하면서 읽고 삭제한 데이터를 다시 스택에 넣어줘야 하기 때문에 탐색 성능은 O(n)의 성능을 가짐 
- 스택은 데이터를 삽입할 때 스택의 맨 위에 데이터를 삽입하기 때문에 삽입 성능은 O(1)의 성능을 가짐 
- 스택은 데이터를 삭제할 때 스택의 맨 위에 있는 데이터를 삭제하기 때문에 삭제 성능은 O(1)의 성능을 가짐 
큐(Queue)
- 가장 먼저 들어온 데이터가 가장 먼저 나가는 FIFO(First In First Out) 방식의 자료구조 
- 큐도 스택처럼 데이터를 탐색할 때 모든 데이터를 삭제하면서 읽고 삭제한 데이터를 다시 큐에 넣어줘야 하기 때문에 탐색 성능은 O(n)의 성능을 가짐 
- 큐는 데이터를 삽입할 때 큐의 맨 뒤에 데이터를 삽입하기 때문에 삽입 성능은 O(1)의 성능을 가짐 
- 큐는 데이터를 삭제할 때 큐의 맨 앞에 있는 데이터를 삭제하기 때문에 삭제 성능은 O(1)의 성능을 가짐 
덱(Deque)
- 덱은 double-ended queue로 데이터를 head, tail 양쪽 방향에서 삽입, 삭제가 가능한 자료구조 - 스택과 큐의 특징을 모두 가짐 
 - 해시 테이블(Hash Table) 
- Key-Value를 한 쌍으로 데이터를 저장하는 자료구조 - 배열 안에 연결 리스트를 생성하여 같은 인덱스를 갖는 데이터를 연결하는 방식으로 데이터를 저장 
- 해시 함수를 이용하여 Key 값을 인덱스로 변경하여 해시 테이블에 골고루 퍼지게 저장하는 것이 성능의 핵심 - 따라서 해시 함수의 성능이 매우 중요 
 
 
- 해시 테이블은 데이터를 탐색할 때 Key 값만 알면 데이터에 바로 접근할 수 있기 때문에 탐색 성능은 O(1)의 성능을 가짐 
- 해시 테이블은 데이터를 삽입, 삭제할 때 Key 값을 이용하여 데이터를 바로 삽입, 삭제하기 때문에 삽입, 삭제 성능은 O(1)의 성능을 가짐 
해시 셋(Hash Set)
- Key 값만 사용하여 해시 테이블에 저장하는 자료구조 - Key 값이 Key이면서 Value가 됨 
- Key와 Value가 같기 때문에 중복된 데이터를 저장할 수 없음 
 
1주차 강의 회고
- 발자국의 내용 요약을 작성할 때 진짜로 내용을 요약한 것이 아닌 알고 있는 내용을 나열한 것 같아서 다음 작성할 때는 좀 더 핵심 내용만 작성해 볼 것 
- 다음 주에는 강의 내용 이외의 내용들을 더 세세하게 찾아보면서 강의를 학습하며 1주차의 강의를 복습해 나갈 것 
[미션]
미션을 해결하는 과정
- 일단 미션의 내용을 보고 알고 있는 내용을 전부 작성한 후 미션의 내용과 맞는 강의 내용을 찾아보면서 미션을 해결 
1주차 미션 회고
- 미션을 해결할 때 강의 내용을 찾아보기 전에 이미 알고 있는 내용을 좀 더 생각해서 나열해 보고 해결 방법을 찾는 것이 좋을 것 같음 
댓글을 작성해보세요.
