[인프런 워밍업 클럽 3기] CS - 3주차 미션 & 발자국
운영체제
1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
레지스터
가장 빠른 메모리
CPU 내에 존재
휘발성 메모리 (컴퓨터 꺼지면 데이터 사라짐)
CPU 구분시 말하는 32/64bit 는 레지스터의 크기를 말하는 것.
CPU는 계산시 메인메모리 (RAM)에 있는 값을 레지스터로 가져와서 계산하고 그 결과를 다시 메인메모리에 저장시킴
메인메모리
레지스터와 메인메모리 사이에는 휘발성 메모리인 캐시 가 있음.
메인메모리는 너무 느리기 때문에 필요할 것 같은 데이터를 미리 캐시로 가져옴.
캐시는 성능의 이유로 여러개를 둠.
만약 CPU가 값을 요청해 레지스터로 옮겨야 할 때 L1캐시(가장빠름) -> L2캐시 (L3..) -> 메인메모리
순서로 값이 있는지 확인함.
===
메인 메모리는 실제 운영체제와 다른 프로세스들이 올라가는 공간.
전원 공급 안되면 데이터가 지워지기에 휘발성 메모리
HDD, SDD 보다 속도가 빠르지만 비싸기 때문에 데이터 저장보단 실행 중인 프로그램만 올림.
보조저장장치 (HDD, SSD)
비휘발성 메모리.
가격이 쌈.
2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?
경계 레지스터. 메모리 관리자가 사용자 프로세스가 경계 레지스터의 값을 벗어났는지 감시하고, 만약 벗어난다면 해당 프로세스를 종료시킨다.
3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?
가변 분할 방식
장점 : 메모리의 연속된 공간에 할당 되기에 더 크게 할당되어 낭비되는 공간인 내부 단편화가 적다.
단점 : 한 프로세스가 분산되어 할당되므로 메모리 공간이 남아있어도 추가적 할당을 할 수 없는 외부 다편화가 발생한다.
고정 분할 방식
장점 : 구현이 간단하고 오버헤드가 적다.
단점 : 한 프로세스보다 더 큰 메모리가 할당 될 수 있고 이로 인해 특정 메모리보다 더 큰 공간이 할당되는 내부 단편화가 발생할 수 있다.
4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?
스레싱.
물리 메모리의 크기가 부족해서 일어나는 현상. SWAP시의 컨텍스트 스위칭으로 인해 발생한다.
5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.
HDD나 SSD가 "꼭" 필요한 건 아니다. 운영체제를 ROM, USB 또는 외부 저장장치에서 부팅하면 HDD나 SSD 없이도 컴퓨터를 실행할 수 있다. 하지만 대부분의 경우 컴퓨터가 안정적으로 동작하려면 운영체제를 저장할 영구 저장장치가 필요해서, 일반적으로 HDD나 SSD가 필수로 여겨진다.
메모리는 휘발성이라 전원이 꺼지면 데이터가 사라진다. 그래서 데이터를 영구적으로 저장할 수 있는 HDD나 SSD 같은 장치가 중요하다.
6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?
OS의 파일 시스템에는 파일 관리를 위해 빈 공간을 모아 두는 Free block list가 있다. 특정 파일을 삭제하면, 파일 시스템은 파일의 모든 정보를 지우는 대신 파일 테이블의 헤더만 삭제하고, 그 파일이 차지하던 블록을 free block list에 추가한다.
이렇게 되면 사용자 입장에서는 파일이 삭제된 것처럼 보인다. 하지만 실제로는 사용된 블록의 데이터가 그대로 남아 있기 때문에, 이후 포렌식을 통해 해당 데이터를 복구할 수 있다.
자료구조와 알고리즘
1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.
버블 정렬
시간 복잡도: O(n²)
장점: 구현이 쉽고 안정 정렬
단점: 매우 비효율적
선택 정렬
시간 복잡도: O(n²)
장점: 데이터 이동 횟수 최소
단점: 안정 정렬이 아님, 느림
삽입 정렬
시간 복잡도: O(n²)
장점: 거의 정렬된 데이터에 빠름 (O(n))
단점: 역순이면 O(n²)
병합 정렬
시간 복잡도: O(n log n)
장점: 항상 빠르고 안정 정렬
단점: 추가 메모리 필요 (O(n))
퀵 정렬
시간 복잡도: O(n log n) (최악 O(n²))
장점: 평균적으로 가장 빠름, 메모리 적게 사용
단점: 최악의 경우 O(n²)
2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.
재귀 호출이 과도하게 깊어지면 스택 메모리 한계를 초과하는 스택 오버플로우가 발생할 수 있습니다. 이 문제를 해결하기 위해 타뷸레이션 방식을 활용하면 반복문과 배열을 사용해 중간 계산 결과를 저장함으로써 메모리를 더 효율적으로 관리하고 성능도 향상시킬 수 있습니다.
짧은 기간이었지만 이번 워밍업 클럽 스터디에 참가하면서 미뤄왔던 CS 학습을 시작하고 집중도 있게 할 수 있었다. 쉽고 재밌게 잘 설명해주시는 강의 덕분에 부담감 적게 흥미를 유지하며 학습해나갈 수 있었고, 강사님께서 직접 내주시는 미션을 수행하며 더 효과적인 학습을 할 수 있었다. 이번 학습을 시작으로 앞으로도 꾸준히 흥미를 갖고 CS 관련 학습을 이어가야겠다.
댓글을 작성해보세요.