인프런 워밍업 클럽 2기 - CS전공지식 스터디 미션 03 입니다.

인프런 워밍업 클럽 2기 - CS전공지식 스터디 미션 03 입니다.

CS전공지식 미션 2

운영체제

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

  • 레지스터

    • CPU 내부에 있는 가장 빠른 메모리로 CPU가 계산하기위해 데이터를 임시로 저장

    • CPU가 직접 접근할 수 있으며, 64bit 32bit CPU라는 말도 CPU의 연산단위이면서 레지스터의 크기를 나타냄

  • 캐시

    • L1, L2, L3 캐시등이 있으면 CPU와 메모리 사이의 속도차이를 줄이기 위해 임시로 데이터를 저장하는 공간

  • 메인 메모리

    • 일반적으로 RAM을 의미하며 포노이만 구조의 CPU가 연산하기위해 프로세스를 올리는 공간

    • 전원이 꺼지면 데이터도 사라지는 휘발성 메모리임

  • 보조저장장치

    • SSD, HDD 등으로 데이터를 영구적으로 저장할 수 있음, 메모리보다 속도가 느림

    • 전원이 꺼져도 데이터가 남아있는 비휘발성 메모리임

       


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

경계레지스터 : CPU내부에 존재해서 맨 앞에 저장하고 있는 운영체제 영역의 최대 범위를 기록하고 있어, 침범하지 못하게 함, 만약 경계 레지스터의 값을 넘긴 프로세스가 있으면 해당 프로세스를 종료시킴


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

가변분할방식은 프로세스의 크기에 맞춰 메모리를 분할하는 방식으로 프로세스의 영역별로 메모리를 분할 할 수 있어, 메모리 접근권한이나 메모리 공유를 할 수 있음, 그러나 외부단편화가 발생하여 메모리낭비가 생길 수 있음

 

고정분할방식은 고정된 크기로 메모리를 분할 하는 방식으로 가변분할방식의 외부단편화를 제거할 수 있음, 그러나 고정된 크기에 프로세스를 나눠서 할당하기 때문에 내부 단편화가 발생할 수 있고, 프로세스 영역별로 나눌수 없어 메모리 접근권한이나 공유하는데 어려움이 있음


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

  • 스레싱

    • 많은 프로그램을 메모리에 올리면 스왑이 빈번하게 일어날 수 있음

    • 이때 CPU가 실제 작업을 처리하지 못하고 스왑 작업에만 몰두하게 되어 CPU를 사용하지 못하는 현상을 말함


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

꼭 필요하지는 않음

컴퓨터가 실행되기 위해서는 RAM이 필요하지만, HDD나 SSD는 데이터의 영구적 저장을 위한 보조 장치
만약 시스템이 네트워크 기반 부팅을 사용하거나 RAM 디스크를 활용하는 경우, HDD나 SSD 없이도 컴퓨터를 실행할 수 있음. 다만 RAM은 전원이 꺼지면 데이터가 모두 사라지기 때문에 일반적으로는 운영체제를 포함한 데이터를 저장하기 위해 HDD나 SSD가 필요


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

파일을 삭제하더라도 실제로 데이터는 즉시 삭제되지 않고, 파일 시스템에서 해당 파일의 참조만 제거됨
실제 데이터는 디스크에 그대로 남아 있기 때문에 포렌식 도구를 이용해 복구할 수 있음.
완전한 삭제를 위해서는 데이터를 덮어쓰는 과정을 거쳐야 함

자료구조와 알고리즘

  1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.

  • 버블 정렬 (Bubble Sort)

    • O(n²)

    • 장점 : 단순한 구조로 이해 & 구현이 쉬움, 거의 정렬된 배열에서는 빠르게 종료될 수 있음

    • 단점 : 속도가 느리고, 다른 효율적인 정렬 알고리즘에 비해 많이 사용되지 않음

  • 선택 정렬 (Selection Sort)

    • O(n²)

    • 장점 : 메모리 사용이 적고, 단순한 구조로 이해 & 구현이 쉬움

    • 단점 : 속도가 느리고, 다른 효율적인 정렬 알고리즘에 비해 많이 사용되지 않음

  • 삽입 정렬 (Insertion Sort)

    • O(n²)

    • 장점 : 작은 데이터나 거의 정렬된 데이터에 대해 매우 효율적

    • 단점 : 속도가 느려서 대규모 데이터에 비효율적

  • 병합 정렬 (Merge Sort)

    • O(n log n)

    • 장점 : 속도가 빠르며 대규모 데이터에서도 일정한 성능을 보임

    • 단점 : 추가 메모리 공간이 필요하며, 메모리 효율이 떨어질 수 있음

  • 퀵 정렬 (Quick Sort)

    • 평균 O(n log n), 최악 O(n²)

    • 장점 : 평균적으로 매우 빠르고, 메모리 사용이 적음

    • 단점 : 피벗 선택에 따라 성능이 달라지며, 최악의 경우 속도가 느려질 수 있음 (그러나 최악이 되는 경우는 거의 없음)


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

  • 메모이제이션(Memoization)

    • 재귀를 사용하면서 이미 계산된 값을 기억하고 활용하는 방식으로, 필요할 때 계산된 값을 바로 반환해서 사용

    • 재귀 구조를 그대로 유지하면서도 중복 계산을 피할 수 있음

  • 타뷸레이션(Tabulation)

    • 문제를 하위 문제부터 점진적으로 해결하는 방식으로, 반복문을 사용해 값을 채워나가는 방식

메모리 부족한 상황이라면 타뷸레이션을 사용할 것 같습니다.
타뷸레이션은 스택 오버플로우 위험이 없고, 재귀 호출에 따른 추가적인 메모리 오버헤드가 발생하지 않기 때문에 메모리를 더 효율적으로 사용할 수 있습니다.

 

댓글을 작성해보세요.

채널톡 아이콘