🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

미션 3

운영체제

  1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.

  • RAM (Random Access Memory): 주기억장치로, 실행 중인 프로그램과 데이터를 일시적으로 저장하는 메모리입니다. 전원이 꺼지면 저장된 데이터가 사라지는 휘발성 메모리입니다.

  • ROM (Read-Only Memory): 비휘발성 메모리로, 데이터를 읽을 수만 있고, 수정은 불가능합니다. 주로 컴퓨터 부팅에 필요한 기본적인 데이터를 저장합니다.

  • 캐시 메모리: CPU와 RAM 사이에 위치한 고속 메모리로, 자주 사용되는 데이터를 빠르게 접근할 수 있게 해줍니다. 속도가 빠르지만 용량이 작습니다.

  • 가상 메모리: 실제 물리 메모리보다 더 많은 메모리를 사용할 수 있도록 보조기억장치(HDD, SSD)의 일부를 메모리처럼 사용하는 기술입니다.


    2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?

  • 베이스 레지스터(Base Register): 사용자 프로세스의 메모리 접근을 관리하며, 프로세스가 사용할 수 있는 메모리 영역의 시작 주소를 저장합니다.

  • 한계 레지스터(Limit Register): 사용자 프로세스가 사용할 수 있는 메모리 영역의 끝 주소를 저장하여, 프로세스가 할당된 영역을 넘지 못하게 방지합니다.


  1. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?

  • 고정 분할 방식 (Fixed Partitioning)

    • 장점: 구현이 간단하며, 메모리 관리의 오버헤드가 적습니다.

    • 단점: 고정된 크기의 메모리 분할로 인해 내부 단편화(메모리 낭비)가 발생할 수 있습니다. 미리 분할된 크기가 비효율적일 수 있습니다.

  • 가변 분할 방식 (Dynamic Partitioning)

    • 장점: 프로세스의 크기에 맞춰 메모리를 동적으로 할당하므로 내부 단편화를 줄일 수 있습니다.

    • 단점: 외부 단편화가 발생할 수 있으며, 메모리 할당 및 해제 시 관리 비용이 증가합니다.

       


  1. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?

스레싱(Thrashing): CPU 사용률을 높이기 위해 많은 프로그램을 동시에 실행하지만, 실제로 메모리 부족으로 인해 스왑이 과도하게 발생하고, CPU가 거의 사용되지 않는 현상을 말합니다. 이는 시스템 성능을 크게 저하시킵니다.


  1. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?

  • 필요함: HDD나 SSD는 운영체제, 프로그램, 데이터가 저장되는 비휘발성 저장장치입니다. 컴퓨터를 실행하기 위해 운영체제와 필수 파일들을 읽어야 하므로, HDD나 SSD가 없으면 컴퓨터를 부팅하거나 정상적으로 작동할 수 없습니다.

  • 이유: RAM은 휘발성 메모리로 전원이 꺼지면 데이터가 사라지기 때문에, 비휘발성 메모리인 HDD나 SSD에 데이터를 영구적으로 저장할 수 있어야 컴퓨터가 데이터를 유지하고 부팅할 수 있습니다.

     


  1. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?

파일을 삭제해도, 실제 데이터는 저장 장치에 그대로 남아있고, 파일 시스템에서는 해당 파일의 위치 정보만 지워집니다. 이 때문에 데이터가 덮어쓰기 되기 전까지는 복구 소프트웨어나 포렌식 기술로 파일을 복구할 수 있습니다.


자료구조와 알고리즘

  1. 지금까지 배운 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²)

       


  1. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.

타뷸레이션(Tabulation): 메모리가 부족한 시스템에서는 일반적으로 타뷸레이션을 선택하는 것이 더 효율적입니다. 이유는 메모이제이션이 재귀를 사용하는 반면, 타뷸레이션은 반복을 사용하여 불필요한 재귀 호출을 방지하고, 추가적인 메모리 소비를 줄일 수 있기 때문입니다.

댓글을 작성해보세요.

채널톡 아이콘