[인프런 워밍업 클럽 2기 CS] 2주차 발자국
운영체제
SJF (Shortest Job First)
가장 짧은 실행 시간을 가진 작업을 먼저 처리하는 스케줄링 알고리즘
평균 대기 시간을 최소화하는 효과가 있지만, 실행 시간을 정확히 예측하기 어려워 사용에 제한이 있음
RR (Round Robin)
각 프로세스에 고정된 시간 할당량(타임 슬라이스)을 부여하여 순환 방식으로 CPU를 할당하는 알고리즘
공정성을 보장하지만, 타임 슬라이스 설정이 성능에 큰 영향을 미침
MLFQ (Multi-Level Feedback Queue)
다중 우선순위 큐를 사용하여 프로세스의 특성에 따라 동적으로 우선순위를 조정하는 스케줄링 알고리즘
CPU Bound 프로세스는 장시간 CPU를 점유하여 우선순위가 낮은 큐로 이동
I/O Bound 프로세스는 자주 I/O 작업을 수행하여 높은 우선순위 큐로 유지
프로세스 간 통신 (Inter-Process Communication, IPC)
프로세스들이 데이터를 교환하거나 동기화하기 위해 사용하는 메커니즘
주요 방법: 파이프, 메시지 큐, 공유 메모리, 소켓
효율적인 통신을 위해 다양한 기술이 사용됨
공유 자원과 임계 구역 (Critical Section)
여러 프로세스나 스레드가 동시에 접근할 수 있는 자원을 사용할 때 발생할 수 있는 문제를 방지
자원 접근을 제한하는 코드 블록을 임계 구역이라고 함
임계 구역을 효과적으로 관리하는 것이 중요함
세마포어 (Semaphore)
임계 구역을 제어하기 위한 동기화 도구로, 자원의 사용 가능 수를 추적하는 카운터 사용
P (wait) 연산: 자원을 요청하고, 사용 가능할 때까지 대기
V (signal) 연산: 자원을 해제하고, 대기 중인 프로세스에게 자원을 양도
이를 통해 동시 접근 문제를 해결
모니터 (Monitor)
고수준의 동기화 메커니즘
데이터 구조와 관련 연산을 하나의 단위로 묶어 상호 배제를 보장
세마포어보다 구조화된 접근을 제공하여 동시성 문제를 쉽게 관리
데드락이란? (feat. 식사하는 철학자)
두 개 이상의 프로세스가 서로가 점유하고 있는 자원을 기다리며 무한히 대기하는 상태
식사하는 철학자 문제는 이를 설명하는 대표적인 예제로, 철학자들이 포크를 공유하며 식사할 때 발생할 수 있는 교착상태를 보여줌
데드락 해결 (feat. 은행원 알고리즘)
교착상태를 방지하거나 해결하기 위한 방법 중 하나로 은행원 알고리즘을 사용
시스템이 안전 상태(safe state)를 유지하도록 자원 할당을 사전에 검증하여 교착상태를 예방
안전 상태란 모든 프로세스가 요청을 완료할 수 있는 상태를 의미함
메모리 종류
주기억장치(RAM): 휘발성 메모리로 프로그램 실행 중 데이터를 저장
보조기억장치(HDD, SSD): 비휘발성 메모리로 영구적으로 데이터를 저장
캐시 메모리: CPU와 주기억장치 간의 속도 차이를 줄이기 위해 사용되는 고속 메모리
메모리와 주소
메모리는 고유한 주소(address)를 통해 접근
각 메모리 셀은 고유한 주소를 가지며, 프로그램은 이 주소를 사용하여 데이터를 읽거나 씀
주소 체계는 메모리 관리와 프로세스 간의 통신에 중요한 역할을 함
메모리 할당 방식
정적 할당: 컴파일 시 메모리 크기가 결정되며, 프로그램 실행 중 변경되지 않음
동적 할당: 프로그램 실행 중에 메모리를 할당하고 해제할 수 있음
자료구조와 알고리즘
재귀 (Recursion)
함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법
문제를 더 작은 하위 문제로 분할하여 해결
기저 조건을 정의하여 재귀 호출을 종료
재귀적으로 생각하기
문제를 자기 자신과 유사한 더 작은 문제로 분해하여 해결하는 접근 방식
특히 데이터 구조의 트리 구조나 분할 정복 알고리즘에서 유용함
재귀 - 하노이 탑 (Tower of Hanoi)
재귀적 접근을 통해 해결할 수 있는 고전적인 문제
n개의 원반을 시작 기둥에서 목표 기둥으로 옮기는 과정에서 재귀 호출을 이용하여 효율적으로 문제를 해결
정렬 - 버블정렬 (Bubble Sort)
인접한 요소를 비교하여 필요에 따라 교환하면서 리스트를 정렬하는 단순한 정렬 알고리즘
구현이 쉽지만 시간 복잡도가 O(n²)으로 비효율적임
정렬 - 선택정렬 (Selection Sort)
리스트에서 가장 작은(또는 큰) 요소를 찾아 현재 위치에 교환하는 방식으로 정렬하는 알고리즘
시간 복잡도는 O(n²)이며, 데이터 이동이 적은 편이지만 안정적이지 않음
2주차 후기
운영체제에서 처음 접하는 단어들이 난무하는 2주차였다. 잠시 정신이 혼미할 뻔 했지만 😵💫 내용을 차근히 따라가면서 조금씩 이해해 나갈 수 있었던 것 같다. 특히 개념 - 개념과 관련된 문제와 그 원인 - 해결의 관점에서 접근하니 나름 재밌게 공부했던 것 같다.
알고리즘은 말은 많이 들어봤지만 실제로 잘 써본 경험은 없는 개념들에 대해 공부했다. 실제로 구현도 해 보면서 진행하니 이해하는 데 많은 도움이 되었다.
이번 주는 '프론트엔드 개발자로 일을 할 때 이런 개념들까지도 알아야하나?'라는 생각이 들었던 것 같다. 뭔가 프론트보다는 서버에서 더 많이 접할 것 같은 느낌? 그래도 알아두면 나중에 도움이 될 테니 이해를 잘 해둬야겠다는 생각을 했다.
댓글을 작성해보세요.