[인프런 워밍업 클럽 2기 - CS] 3주차 미션
운영체제
1. 메모리의 종류는 어떤 것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
• 레지스터: CPU 내부에 있는 가장 빠른 메모리로, 휘발성이다. CPU가 데이터를 처리할 때 메인메모리에서 데이터를 가져와 레지스터에서 연산을 수행한다.
• 캐시: 레지스터보다는 느리지만 메인메모리보다는 빠른 메모리로, 필요한 데이터를 미리 저장해 CPU의 메모리 접근 시간을 줄인다.
• 메인메모리 (RAM): 실제 운영체제와 실행 중인 프로세스가 올라가는 공간으로, 휘발성이다. 가격이 비싸기 때문에 실행 중인 프로그램을 저장하는 용도로만 사용된다.
• 보조저장장치 (HDD/SSD): 비휘발성 메모리로, 데이터를 영구적으로 저장하는 장치이다. 메모리 중에서 가장 느리지만, 대용량 저장이 가능하고 가격이 저렴하다.
2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 무엇인가요?
경계 레지스터이다. 이 레지스터는 운영체제 영역을 보호하며, 프로세스가 경계를 벗어나면 그 프로세스를 종료시킨다.
3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 무엇인가요?
• 가변 분할 방식: 메모리를 프로세스 크기에 맞게 할당하므로 내부 단편화가 발생하지 않는다. 그러나 프로세스 종료 후 남은 공간이 연속적이지 않으면 외부 단편화가 발생할 수 있다.
• 고정 분할 방식: 메모리를 고정된 크기로 나누기 때문에 구현이 간단하고 오버헤드가 적다. 그러나 작은 프로세스도 큰 메모리 공간에 할당되므로 내부 단편화가 발생한다.
4. CPU 사용률을 높이기 위해 멀티프로그래밍을 올렸지만, 스왑이 너무 자주 발생해 CPU 사용률이 0%에 가까워지는 현상을 무엇이라고 하나요?
이 현상은 스레싱 (Thrashing)이라고 한다. 스왑이 너무 빈번하게 이루어져 CPU가 거의 사용되지 않는 상태를 의미한다.
5. HDD나 SSD는 컴퓨터를 실행시키는 데 꼭 필요한가요?
꼭 필요하지는 않다. 컴퓨터 부팅 시 운영체제를 메모리로 불러오는 저장장치가 필요하지만, 이 저장장치가 반드시 HDD나 SSD일 필요는 없다. 예를 들어, USB에 운영체제를 설치하여 이를 통해 부팅할 수도 있다.
6. 파일을 삭제해도 포렌식으로 복구할 수 있는 이유는 무엇인가요?
파일을 삭제하면 실제로는 파일 테이블의 헤더만 삭제되고, 데이터 블록은 그대로 남아 있기 때문이다. 복구를 원치 않는 경우, 데이터를 여러 번 덮어씌워야 한다.
자료구조와 알고리즘
1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.
• 버블 정렬 (Bubble Sort):
장점: 이해와 구현이 매우 간단하다.
단점: 성능이 매우 나쁘다.
시간 복잡도: O(n²).
• 선택 정렬 (Selection Sort):
장점: 이해와 구현이 간단하다.
단점: 성능이 좋지 않다.
시간 복잡도: O(n²).
• 삽입 정렬 (Insertion Sort):
장점: 구현이 쉽고, 적은 데이터에서는 효율적이다.
단점: 많은 데이터에서는 성능이 떨어진다.
시간 복잡도: O(n²).
• 병합 정렬 (Merge Sort):
장점: 안정적이며 성능이 우수하다.
단점: 추가적인 메모리 공간이 필요하고, 구현이 다소 어렵다.
시간 복잡도: O(nlogn).
• 퀵 정렬 (Quick Sort):
장점: 평균적으로 매우 빠르다.
단점: 피벗 선택이 잘못되면 O(n²)까지 성능이 떨어질 수 있다.
시간 복잡도: O(nlogn) (평균), O(n²) (최악).
2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다.
여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.
메모리가 부족한 경우 타뷸레이션 방식을 선택하는 것이 적절하다.
메모이제이션은 재귀 호출로 인해 스택 오버플로우 위험이 있으며, 메모리 사용량이 많아질 수 있다.
반면, 타뷸레이션은 반복문을 사용하여 미리 정해진 메모리 테이블로 문제를 해결하므로,
메모리 사용을 더 효율적으로 관리할 수 있다!
댓글을 작성해보세요.