[인프런 워밍업 클럽 2기 CS] 2주차 발자국

[인프런 워밍업 클럽 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주차였다. 잠시 정신이 혼미할 뻔 했지만 😵‍💫 내용을 차근히 따라가면서 조금씩 이해해 나갈 수 있었던 것 같다. 특히 개념 - 개념과 관련된 문제와 그 원인 - 해결의 관점에서 접근하니 나름 재밌게 공부했던 것 같다.

알고리즘은 말은 많이 들어봤지만 실제로 잘 써본 경험은 없는 개념들에 대해 공부했다. 실제로 구현도 해 보면서 진행하니 이해하는 데 많은 도움이 되었다.

이번 주는 '프론트엔드 개발자로 일을 할 때 이런 개념들까지도 알아야하나?'라는 생각이 들었던 것 같다. 뭔가 프론트보다는 서버에서 더 많이 접할 것 같은 느낌? 그래도 알아두면 나중에 도움이 될 테니 이해를 잘 해둬야겠다는 생각을 했다.

댓글을 작성해보세요.

채널톡 아이콘