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

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

운영체제

세그멘테이션(배치정책)

  • 메모리를 논리적 단위(세그먼트)로 분할

  • 각 세그먼트는 다양한 크기 가능

  • 외부 단편화 문제 발생 가능

페이징(배치정책)

  • 메모리를 동일한 크기의 페이지로 분할

  • 물리 메모리와 가상 메모리 간 매핑

  • 내부 단편화 발생 가능, 외부 단편화 해결

페이지드 세그멘테이션(배치정책)

  • 세그멘테이션과 페이징 결합

  • 세그먼트를 페이지 단위로 나눔

  • 유연성과 효율성 향상

디맨드 페이징(가져오기 정책)

  • 필요한 페이지만 메모리에 로드

  • 페이지 부재 시 디스크에서 가져옴

  • 메모리 사용 효율성 증가

페이지 교체정책

  • FIFO, LRU, LFU 등 다양한 알고리즘

  • 새 페이지 로드 시 어떤 페이지를 교체할지 결정

  • 페이지 부재율 최소화 목표

스레싱과 워킹셋

  • 스레싱: 과도한 페이지 교체로 성능 저하

  • 워킹셋: 프로세스가 자주 참조하는 페이지 집합

  • 워킹셋 관리로 스레싱 방지

주변장치(I/O 디바이스, 저장장치)

  • CPU, 메모리 외 하드웨어 장치

  • 입력, 출력, 저장 기능 수행

  • 인터럽트 기반 동작

마우스/키보드

  • 사용자 입력 장치

  • 이벤트 기반 동작

  • 인터럽트 처리 필요

하드디스크/Flash Memory(SSD)

  • 하드디스크: 기계식, 대용량, 저렴

  • SSD: 전자식, 고속, 고가

  • 비휘발성 저장 장치

파일과 파일시스템

  • 파일: 관련 데이터의 논리적 집합

  • 파일시스템: 파일 저장, 조직, 검색 관리

  • 메타데이터 관리 포함

디렉토리

  • 파일들의 논리적 컨테이너

  • 계층적 구조 (트리 구조)

  • 파일 검색, 그룹화 용이

파일과 디스크

  • 파일 할당 방식: 연속, 연결, 인덱스 할당

  • 빈 공간 관리

  • 디스크 스케줄링 알고리즘

 

자료구조와 알고리즘

정렬 - 삽입정렬

  • 원리: 정렬된 부분에 새 원소를 적절한 위치에 삽입

  • 시간 복잡도: 평균 및 최악 O(n^2), 최선 O(n)

  • 특징: 작은 데이터셋에 효율적, 부분 정렬된 배열에 유리

  • 안정적 정렬 알고리즘

정렬 - 병합정렬

  • 원리: 분할 정복 방식, 작은 부분으로 나누고 병합하며 정렬

  • 시간 복잡도: 항상 O(n log n)

  • 특징: 대규모 데이터 정렬에 효율적, 추가 메모리 필요

  • 안정적 정렬 알고리즘

정렬 - 퀵정렬

  • 원리: 피벗 선택 후 분할 정복 방식으로 정렬

  • 시간 복잡도: 평균 O(n log n), 최악 O(n^2)

  • 특징: 실제 구현에서 매우 빠름, 불안정 정렬

  • 피벗 선택 방법이 성능에 큰 영향

동적 프로그래밍 - 메모이제이션

  • 원리: 계산 결과를 저장하고 재사용 (캐싱)

  • 특징: 주로 하향식(top-down) 접근법

  • 장점: 중복 계산 방지로 효율성 향상

  • 적용: 피보나치 수열, 최장 공통 부분 수열 등

동적 프로그래밍 - 타뷸레이션

  • 원리: 작은 부분 문제부터 해결하며 표를 채움

  • 특징: 상향식(bottom-up) 접근법

  • 장점: 일반적으로 메모리 사용량이 적음

  • 적용: 냅색 문제, 최단 경로 문제 등


3주차 후기

지난 주차보다는 익숙한 단어들이 많이 보였다. 그래서 조금 가벼운 마음으로 시작했다가 어김없이 혼돈으로 접어드는 루트의 반복이었던 주였다. 언제쯤 이 단어와 개념과 친구 먹을 수 있을까 😂

운영체제에서는 가상 메모리에 대해 배우면서 세그멘테이션과 페이징의 개념을 잡고, 메모리 관리 기법의 발전 과정을 따라 공부해 보았다. 입출력 장치와 파일 시스템에 대해 공부하면서는 하드웨어와 소프트웨어의 상호작용을 중점으로 공부했는데, SSD와 하드디스크에 대한 내용을 공부할 때는 노트북 살 때의 경험을 떠올리면서 들으니 다른 파트보다 조금 더 재밌게 들을 수 있었던 것 같다.

알고리즘에서는 다양한 정렬 방법들과 동적 프로그래밍에 대해 배웠다. 정렬에 대해 공부할 때는 각각의 장단점을 비교하면서 언제 적합하게 사용할 수 있을지를 주요 포인트로 공부했다. 이미 이전에도 몇 번 봤던 개념이라 막 어렵다는 느낌은 없었다. 그런데 동적 프로그래밍이 개인적으로 좀 어려웠던 것 같다. 동적인건 언제나 어렵다, 다 정적이었으면 좋겠다 라고 궁시렁 거리면서 공부했다. 그래도 감자쌤과 함께 찬찬히 공부하니 완벽하게는 아니어도 어렴풋이 개념은 잡을 수 있었던 것 같다.

 


인프런 워밍업 클럽 2기 후기

한 번도 공부해보지 않은 CS를 공부해보겠다고 시작한 워밍업 클럽은 생각보다 빠르게 지나갔다. 회사 일이랑 이직 준비랑 다른 스터디에 엄청 치이면서도 워밍업 클럽을 포기하지 않은 건, 하루에 수행할 수 있는 적합한 학습량과 감자쌤의 친절나긋한 설명 덕분이 아닐까 싶다. 그리고 워밍업 클럽을 같이 진행하면서 열심히 하시는 다른 분들의 모습에도 많은 자극을 받았던 것 같다. 3주 동안 감자쌤과 함께 배운 내용들을 완벽하게 이해했다고 할 수는 없지만, 전반적인 내용을 파악했고 어느 부분이 어려운지도 알았으니 앞으로 공부하면서 부족한 부분들을 더 채워나가야겠다.

댓글을 작성해보세요.

채널톡 아이콘