인프런 워밍업 클럽 CS 2기 - 3주차 미션
운영체제
1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
레지스터
휘발성 메모리
컴퓨터의 bit = 레지스터의 크기
메인메모리의 값을 가져와서 레지스터에서 연산하고 메인메모리로 저장
캐시
레지스터와 메인메모리 속도 차이 때문에 미리 데이터를 가져다 놓는 곳
메인메모리(RAM)
휘발성 메모리
실제 운영체제와 다른 프로세스들이 올라오는 공간
가격이 비쌈
보조저장장치(HDD / SSD)
비휘발성 메모리
파일 저장 공간
2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?
경계 레지스터(Boundary Register): 주기억 장치(RAM)내에 존재하는 프로그램은 크게 운영체제와 사용자 영역으로 나뉜다. 사용자가 영역에 존재하는 OS영역에 침범하거나, 프로세스 경계를 벗어났다면 강제로 종료시킴
3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?
가변 분할 방식
프로세스가 크다면, 메모리도 크게 할당
장점: '내부 단편화(연속된 공간에 할당되므로, 더 크게 할당되어 낭비되는 공간)'가 없음
단점: '외부단편화(공간이 남는데 연속된 공간이 아니라 할당 할 수 없는 현상)' 발생
고정 분할 방식
일정 크기로 나누고, 프로세스 크기와 상관없이 메모리 할당
장점: 구현이 간단하며, 오버헤드가 적음
단점: 크기보다 더 할당되는 '내부 단편화'가 발생
4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?
스레싱
5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.
운영체제(OS)와 소프트웨어, 그리고 데이터를 저장하고 실행할 수 있도록 해 주기 때문에 실질적인 컴퓨터 사용을 위해선 꼭 필요하다.
6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?
파일시스템의 효율적인 관리를 위해 빈 공간에 모아둔 free block List가 있다. 특정 파일을 삭제하면 파일시스템은 파일테이블의 헤더를 삭제하고 free block list를 추가하는데,
이렇게 삭제된 위치는 사용자로 하여금 삭제된 것처럼 보인다.
실제로는 물리적 디스크에 그대로 남아 있으므로 복구할 수 있다.
자료구조와 알고리즘
1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.
버블 정렬
장점: 이해와 구현이 쉽다.
단점: 성능이 좋지 않다.
시간 복잡도: O(n²)
선택정렬
장점: 이해와 구현이 쉽다.
단점: 성능이 좋지 않다.
시간 복잡도: O(n²)
삽입정렬
장점: 이해와 구현이 쉽다.
단점: 성능이 좋지 않다.
시간 복잡도: O(n²)
병합정렬
장점: 성능이 좋다.
단점: 정렬 배열을 저장한 메모리 공간 필요하다.
시간 복잡도: O(n log n)
퀵정렬
장점: 성능이 좋다.
단점: 피벗설정을 잘못할 경우 O(n²)의 성능이 될 수 있다. 저장할 공간이 추가로 필요하다.
시간 복잡도: O(n log n)
2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.
- 메모이제이션 (Memoization)
방식: 재귀 호출 과정에서 계산된 값을 메모리에 저장하고, 동일한 계산이 필요할 때 저장된 값을 재사용하는 방식이다. 즉, 하향식(Top-Down) 접근법으로, 문제를 재귀적으로 나누면서 필요할 때마다 계산을 수행한다.
장점
재귀적인 접근이기 때문에 구현이 직관적이며, 복잡한 문제를 분할하여 풀기 좋다.
필요한 부분만 계산해서 저장하므로, 일부 입력값에 대해서만 최적화된 결과를 저장할 수 있다.
단점
각 재귀 호출마다 스택을 사용하므로, 호출 깊이가 깊어지면 스택 오버플로우가 발생할 수 있다.
메모리를 적게 사용하려는 상황에서 재귀 호출의 오버헤드와 캐싱을 위한 메모리 사용이 부담이 될 수 있다.
- 타뷸레이션 (Tabulation)
방식: 작은 문제부터 차례대로 해결하면서, 테이블에 저장된 값을 이용해 큰 문제를 푸는 방식이다. 이는 상향식(Bottom-Up) 접근법으로, 배열을 사용해 반복적으로 값을 계산해 나가는 방식이다.
장점
반복적인 접근 방식을 사용하기 때문에 스택 오버플로우의 위험이 없다.
재귀 호출이 없어 호출 스택을 줄일 수 있어 메모리 사용을 최적화할 수 있다.
단점
모든 경우를 계산해서 테이블에 저장하므로, 메모리 사용량이 많을 수 있다.
문제를 작은 부분으로 분해하여 해결하는 과정이 덜 직관적일 수 있다.
이에 따라, 메모리가 부족한 시스템에서 안정성을 고려한다면, 타뷸레이션을 선택하겠다.
댓글을 작성해보세요.