[인프런 워밍업클럽 CS 2기] 3주차 미션

[인프런 워밍업클럽 CS 2기] 3주차 미션

운영체제

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

    <aside>

    • 메모리는 레지스터, 캐시 | 메인메모리(RAM) | 보조저장장치(HDD, SSD)로 나눌 수 있다.

    • 레지스터

      • 가장 빠른 메모리, CPU내 존재, 휘발성 메모리, bit는 레지스터의 크기임

      • CPU 계산시 레지스터로 가져와서 연산을 하고, 결과는 다시 메인메모리(RAM)에 저장시킴

      • 메인메모리에 있는 값을 옮기려면 느리기때문에, 필요한 값은 미리 옮김

      • CPU의 한사이클에 접근할 수 있어서 굉장히 빠름

    • 캐시

      • 메인메모리에 있는 데이터를 미리 옮긴 곳이 캐시임

      • 성능의 이유로 여러개를 둠 (L1, L2, …)

      • CPU의 수~수십 사이클에 접근할 수 있어서 빠름

    • 메인메모리

      • 실제 운영체제와 다른 프로세스들이 올라가는 공간

      • 전원이 꺼지면 데이터가 지워짐 = 휘발성 메모리

      • 보조저장장치보다 속도는 빠르지만 가격이 비싸기 때문에 데이터 저장보다는 실행중인 프로그램을 올리는 용도로 사용됨

      • CPU의 수백 사이클에 접근해서 시간이 걸림

    • 보조저장장치

      • 속도 느림, 용량 큼, 가격 저렴, 비휘발성 메모리

      • CPU 수백만 사이클에 접근해 시간이 많이소요됨 </aside>

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

    <aside>

    경계 레지스터

    </aside>

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

    <aside>

    • 가변 분할 방식(세그멘테이션)

      • 프로세스의 크기에 따라 메모리를 나누는 방식

      • 한 프로세스가 메모리의 연속된 공간에 할당되기 때문에 연속 메모리 할당 이라고 함

      • 장점 : 메모리가 연속된 공간에 할당되기 때문에 더 크게 할당돼서 낭비되는 공간인 내부 단편화 가 없음

      • 단점 : 두개의 빈공간을 합해서 60MB가 있을때, 60MB의 새로운 프로세스를 연속된 공간에 할당하지 못하는 외부 단편화 가 발생함

        ⇒ 조각 모음 : 외부 단편화가 발생한 공간을 합쳐줌

        • 조각모음 실행 시, 현재 메모리에서 실행되고 있는 프로세스들의 작업을 일시 중지해야하고, 메모리 공간을 이동시키는 작업을 해야하기 때문에 오버헤드가 발생하게 됨

    • 고정 분할 방식(페이징)

      • 프로세스의 크기와는 상관없이 정해진 크기로 메모리를 할당하는 방식

      • 한 프로세스가 메모리에 분산되어 할당되기 때문에 비연속 메모리 할당 이라고 함

      • 장점 : 같은 크기로 나누기 때문에 구현이 간단하고, 오버헤드가 적음

      • 단점 : 작은 프로세스도 큰 영역에 할당돼서 공간이 낭비되는 내부 단편화 가 발생함

        ⇒ 해결하는 방법은 없고, 분할되는 크기를 조절해서 내부단편화를 최소화 함

    </aside>

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

    <aside>

    스레싱

    ⇒ CPU 스케쥴러는 CPU 사용률이 낮아지면 더많은 프로세스를 메모리에 올리게 되고 반복되다보면 어느새 CPU 사용률은 0에 가깝게 떨어지게 되며, 이를 스레싱 이라고 부름

    </aside>

  5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.

    <aside>

    HDD는 주변장치로써 버스도 분리되어 있어서 실행에는 필요없다고 느낄 수 있는데 운영체제를 RAM에 올리면 컴퓨터가 끄고 켜질때마다 날아가기때문에 꼭 필요하고, 데이터 스왑시 에서도 필요하다.

    SSD는 부팅속도나, 프로그램을 실행하고 처리할때 속도면에서 도움을 줘 현대에서는 필수로 자리잡고 있는 것 같다.

    </aside>

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

    <aside>

    파일시스템의 프리블록리스트를 통해 특정 파일을 지워도,파일 테이블의 헤더를 삭제하고 프리블록리스트에 추가하기때문에 사용했던 블록의 데이터는 그대로 남아있어서 복구가 가능하다.

    </aside>

자료구조와 알고리즘

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

    <aside>

    1. 버블 정렬 : O(n^2)

      • 장점 : 구현이 간단하고, 코드가 직관적임

      • 단점 : 속도가 느리고, 비효율적임

    2. 선택 정렬 : O(n^2)

      • 장점 : 메모리 사용이 적고, 자료 이동 횟수가 적음

      • 단점 : 속도가 느리고, 큰 데이터를 다룰 때 비효율적임

    3. 삽입 정렬 : O(n^2)

      • 장점 : 거의 정렬된 데이터를 처리할 때 효율적임

      • 단점 : 데이터가 많을수록 성능이 떨어짐

    4. 병합정렬 : O(nlogn)

      • 장점 : 성능이 지금까지 배운 정렬보다 좋음

      • 단점 : 재귀적인 기법을 이용해 이해와 구현이 어려움

    5. 퀵정렬 : 새타(nlogn), O(n^2)

      • 장점 : 성능이 지금까지 배운 정렬보다 좋음

      • 단점 : 재귀적인 기법을 이용해 이해와 구현이 어려움 </aside>

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

    <aside>

    메모리가 부족한 시스템이라면 결과값을 그때 그때 계산해서 사용하는 메모이제이션을 택할 것 같다. 해시테이블을 이용해 속도도 올리고 계산결과값을 저장하는 장점도 있기 때문이다.

    </aside>

댓글을 작성해보세요.

채널톡 아이콘