인프런 워밍업 클럽 스터디 3기 - CS 전공 지식<3월 첫째주 발자국>
1주차 학습 내용
자료구조와 알고리즘
시간복잡도란?
"특정 알고리즘이 어떤 문제를 해결하는 데 걸리는 시간"
주로 사용하는 측정 기법은 Big-O 이다. Big-O란 데이터가 늘어남에 따라 계산량이 얼마나 늘어나는지를 최악의 경우 기준으로 평가하는 방법이다.
O(n) 선형시간 알고리즘이다. 데이터가 많아질수록 계산량(n)이 증가한다.
O(1) 상수시간 알고리즘이다. 데이터의 크기와 상관없이 상수의 시간이 걸린다.
배열 vs 연결 리스트
배열: 연속된 메모리에 데이터를 저장하여 인덱스 접근이 O(1)로 빠르지만, 삽입/삭제 시 성능 저하 발생.
연결 리스트: 임의의 메모리 위치에 데이터를 저장하며 삽입/삭제가 O(1)로 빠르지만, 조회 성능이 O(n)로 낮음.
스택 vs 큐 vs 덱
스택 : 마지막에 추가된 요소가 먼저 제거됨. 후입선출
큐: 먼저 추가된 요소가 먼저 제거됨. 선입선출
덱: 양쪽에서 삽입과 삭제가 가능한 자료구조
해시테이블 vs set
해시테이블: 키 - 값 구조를 가지고 조회에 O(1) 성능을 가진다. 대신 메모리를 많이 차지함.
파이썬의 딕셔너리 구조를 말하는거 같다.
set: 중복되지 않는 요소의 집합. 요소의 존재 여부를 빠르게 파악
운영체제
폰노이만 구조
폰노이만 구조는 메모리에 프로그램을 저장하고, 버스를 통해 데이터를 전송해서 CPU에서 처리하는 방식이다.
메모리 종류
RAM: 전원이 꺼지면 데이터가 사라지는 휘발성 메모리이다.
ROM: 한 번 쓰면 계속 남는 비휘발성 메모리이다.
부팅 과정: 부팅할 때 BIOS가 실행되고, 하드웨어에 이상이 없는지 체크한다.
인터럽트: 인터럽트는 CPU가 작업을 잠시 멈추고, 중요한 작업을 먼저 처리하는 방식이다.
프로세스: 프로세스는 실행 중인 프로그램이다.
멀티프로그래밍: 멀티프로그래밍은 메모리 내에서 여러 개의 프로세스를 동시에 관리하는 방식이다.
멀티프로세싱: 멀티프로세싱은 여러 개의 CPU로 작업을 병렬 처리하는 방식이다.
프로세스 상태 변화
생성 → 준비 → 실행 → (대기) → 완료
생성: PCB(Process Control Block)를 생성하고, 메모리 적재를 요청한 상태. 승인이 나면 준비 상태로 이동.
준비: CPU 할당을 기다리는 상태. 대부분의 프로세스가 이 상태에 있음.
실행: CPU를 할당받아 실행되는 상태. 단, 정해진 시간만큼만 실행되며 시간이 초과되면 다시 준비 상태로 이동.
대기: 입출력(I/O) 요청 등으로 대기하는 상태. CPU는 다른 프로세스에 할당되며, 입출력 완료 후 다시 준비 상태로 이동.
완료: 모든 작업을 마치고 프로세스가 종료되는 상태.
쓰레드
프로그램을 중복해서 실행 할 경우 프로세스의 복사도 같이 일어난다.(크롬탭10개 생성 시 프로세스도 10개 실행)
이럴 때 메모리의 부하를 막기위해 나온 것이 쓰레드다. 쓰레드는 프로세스 내에 존재하고 1개 이상이 있을 수 있다.
쓰레드는 PCB, 코드, 데이터, 힙영역을 공유한다. 단 스택은 공유하지 않고 쓰레드마다 하나씩 가지고 있다.
CPU 스케줄링 알고리즘
FIFO (First In First Out): 먼저 들어온 순서대로 실행. 실행 시간이 긴 프로세스가 앞에 있으면 전체 대기 시간이 길어질 수 있어 현대 운영체제에서는 잘 쓰이지 않음.
SJF (Shortest Job First): 실행 시간이 짧은 순서대로 실행. 평균 대기 시간을 줄일 수 있지만, 실행 시간이 긴 프로세스는 계속 뒤로 밀려나는 스타베이션(기아) 문제가 발생할 수 있어 잘 사용되지 않음.
RR (Round Robin): 각 프로세스에 타임슬라이스(정해진 시간)를 할당해 순환하며 실행.
타임슬라이스가 너무 크면 여러 프로세스가 실행될 때 응답성이 떨어지고,
너무 작으면 컨텍스트 스위칭 비용이 증가해 성능이 저하됨.
MLFQ (Multi-Level Feedback Queue): 현대 운영체제에서 많이 사용하는 CPU 스케줄링 기법.
여러 개의 우선순위 큐를 사용해 CPU 실행시간에 따라 우선순위를 조정.
CPU Bound 프로세스는 점점 낮은 우선순위 큐로 이동하며 타임슬라이스가 커짐.
I/O Bound 프로세스는 높은 우선순위를 유지해 빠르게 실행됨.
FIFO, SJF, RR의 장점을 조합한 방식으로, 효율적인 CPU 자원 관리를 가능하게 함.
1주차 회고
파이썬에 너무 익숙해져 있어서 그런가 자바스크립트 코드를 읽고 이해하는데 어려움이 있었다.
댓글을 작성해보세요.