미션 3
운영체제
메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
RAM (Random Access Memory): 주기억장치로, 실행 중인 프로그램과 데이터를 일시적으로 저장하는 메모리입니다. 전원이 꺼지면 저장된 데이터가 사라지는 휘발성 메모리입니다.
ROM (Read-Only Memory): 비휘발성 메모리로, 데이터를 읽을 수만 있고, 수정은 불가능합니다. 주로 컴퓨터 부팅에 필요한 기본적인 데이터를 저장합니다.
캐시 메모리: CPU와 RAM 사이에 위치한 고속 메모리로, 자주 사용되는 데이터를 빠르게 접근할 수 있게 해줍니다. 속도가 빠르지만 용량이 작습니다.
가상 메모리: 실제 물리 메모리보다 더 많은 메모리를 사용할 수 있도록 보조기억장치(HDD, SSD)의 일부를 메모리처럼 사용하는 기술입니다.
2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?
베이스 레지스터(Base Register): 사용자 프로세스의 메모리 접근을 관리하며, 프로세스가 사용할 수 있는 메모리 영역의 시작 주소를 저장합니다.
한계 레지스터(Limit Register): 사용자 프로세스가 사용할 수 있는 메모리 영역의 끝 주소를 저장하여, 프로세스가 할당된 영역을 넘지 못하게 방지합니다.
메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?
고정 분할 방식 (Fixed Partitioning)
장점: 구현이 간단하며, 메모리 관리의 오버헤드가 적습니다.
단점: 고정된 크기의 메모리 분할로 인해 내부 단편화(메모리 낭비)가 발생할 수 있습니다. 미리 분할된 크기가 비효율적일 수 있습니다.
가변 분할 방식 (Dynamic Partitioning)
장점: 프로세스의 크기에 맞춰 메모리를 동적으로 할당하므로 내부 단편화를 줄일 수 있습니다.
단점: 외부 단편화가 발생할 수 있으며, 메모리 할당 및 해제 시 관리 비용이 증가합니다.
CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?
스레싱(Thrashing): CPU 사용률을 높이기 위해 많은 프로그램을 동시에 실행하지만, 실제로 메모리 부족으로 인해 스왑이 과도하게 발생하고, CPU가 거의 사용되지 않는 현상을 말합니다. 이는 시스템 성능을 크게 저하시킵니다.
HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?
필요함: HDD나 SSD는 운영체제, 프로그램, 데이터가 저장되는 비휘발성 저장장치입니다. 컴퓨터를 실행하기 위해 운영체제와 필수 파일들을 읽어야 하므로, HDD나 SSD가 없으면 컴퓨터를 부팅하거나 정상적으로 작동할 수 없습니다.
이유: RAM은 휘발성 메모리로 전원이 꺼지면 데이터가 사라지기 때문에, 비휘발성 메모리인 HDD나 SSD에 데이터를 영구적으로 저장할 수 있어야 컴퓨터가 데이터를 유지하고 부팅할 수 있습니다.
파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?
파일을 삭제해도, 실제 데이터는 저장 장치에 그대로 남아있고, 파일 시스템에서는 해당 파일의 위치 정보만 지워집니다. 이 때문에 데이터가 덮어쓰기 되기 전까지는 복구 소프트웨어나 포렌식 기술로 파일을 복구할 수 있습니다.
자료구조와 알고리즘
지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.
버블 정렬 (Bubble Sort)
장점: 구현이 매우 쉽고, 적은 양의 데이터를 처리할 때는 효율적일 수 있습니다.
단점: 모든 데이터에 대해 계속해서 비교하고 교환해야 하므로 매우 비효율적입니다.
시간 복잡도: O(n²)
삽입 정렬 (Insertion Sort)
장점: 거의 정렬된 데이터에 대해서는 매우 효율적이며, 추가 메모리가 필요하지 않습니다.
단점: 데이터의 양이 많을 경우 비효율적입니다.
시간 복잡도: O(n²)
병합 정렬 (Merge Sort)
장점: 안정적인 정렬이며, 큰 데이터를 다룰 때도 효율적입니다. 분할 정복 기법을 사용합니다.
단점: 추가적인 메모리 공간이 필요하며, 재귀적으로 호출하므로 스택 오버플로우 가능성이 있습니다.
시간 복잡도: O(n log n)
퀵 정렬 (Quick Sort)
장점: 평균적으로 매우 빠른 정렬 알고리즘으로, 실무에서 가장 많이 사용됩니다.
단점: 최악의 경우 시간 복잡도가 O(n²)가 될 수 있으며, 재귀 호출로 인한 스택 오버플로우가 발생할 수 있습니다.
시간 복잡도: 평균 O(n log n), 최악 O(n²)
선택 정렬 (Selection Sort)
장점: 추가 메모리가 필요하지 않으며, 작은 데이터를 정렬할 때 적합합니다.
단점: 비효율적이며, 데이터를 많이 교환해야 합니다.
시간 복잡도: O(n²)
메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.
타뷸레이션(Tabulation): 메모리가 부족한 시스템에서는 일반적으로 타뷸레이션을 선택하는 것이 더 효율적입니다. 이유는 메모이제이션이 재귀를 사용하는 반면, 타뷸레이션은 반복을 사용하여 불필요한 재귀 호출을 방지하고, 추가적인 메모리 소비를 줄일 수 있기 때문입니다.
댓글을 작성해보세요.