인프런 워밍업 클럽 - CS 3주차 과제

인프런 워밍업 클럽 - CS 3주차 과제

운영체제

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

레지스터

  • 가장 빠른 기억장소

  • CPU 내에 존재

  • 휘발성 메모리

  • CPU를 나타내는 값에서 32bit, 64bit가 레지스터의 크기를 의미한다.

  • CPU는 계산을 수행할 때 메인 메모리에 있는 값을 레지스터로 가져와서 계산한다.

캐시

  • 휘발성 메모리

  • 레지스터와 메인 메모리 사이의 속도 간극을 메우기 위한 저장소

  • 필요한 데이터를 미리 가져와 저장하는 저장소

  • 성능의 이유로 여러 개가 존재한다.
    ex) L1, L2, L3

  • CPU가 값을 요청해 레지스터로 값을 옮겨야 하는 경우 빠른 캐시를 순차적으로 확인하고, 캐시에 데이터가 없으면 메인 메모리를 조회한다.

메인메모리

  • 휘발성 메모리

  • OS와 다른 프로세스들이 올라가는 공간

  • 데이터를 저장하기 보다는 실행중인 프로그램만 저장한다.

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

  • 경계 레지스터

    • H/W적으로 OS 공간과 사용자 공간을 나누는 레지스터

    • CPU 내에 존재한다.

    • 메모리 관리자가 사용자 프로세스가 경계 레지스터의 값을 벗어났다면 검사하고, 벗어났다면 해당 프로세스를 종료시킨다.

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

가변 분할 방식 장점

  • 메모리를 가변적으로 분할할 수 있다.

  • 코드 영역, 데이터 영역, 스택 영역, 힙 영역을 모듈로 처리할 수 있어 공유와 각 영역에 대한 메모리 접근보호가 편리하다.

가변 분할 방식 단점

  • 외부 단편화가 발생한다.

고정 분할 방식 장점

  • 메모리를 효율적으로 관리할 수 있다.

고정 분할 방식 단점

  • 내부 단편화가 발생한다.
    But. 가변 분할 방식의 단점인 외부 단편화에 비해 많은 공간을 차지하지 않는다.

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

  • 쓰레싱

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

  • 필요하다고 생각한다.

  • 컴퓨터가 부팅될 때 ROM에 저장된 바이오스가 실행되고, 바이오스는 주요 하드웨어에 이상이 없는지 체크한다. 이 때 저장장치에 문제가 있다면 부팅이 정상적으로 이뤄지지 않는다.

  • OS는 주로 HDD나 SSD에 설치되고 저장되고, 부팅시에 주요 장치에 이상이 없다면 HDD나 SSD의 마스터 부트 레코드에 저장된 부트로더를 메모리로 가져와서 실행시킨다.

  • 위의 2가지 이유 때문에 HDD와 SSD가 없어서는 안된다고 생각한다.

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

  • 파일시스템은 효율적인 공간 관리를 위해 Free Block List라는 목록을 관리한다.

  • 파일이 지워질 때 파일 시스템이 파일의 모든 정보를 지우는 것이 아니라 파일 테이블의 헤더를 삭제하고 Free Block List에 추가한다.
    → 실제로 파일의 데이터를 지우는 것이 아니다.

  • 이러한 특성으로 인하여 포렌식으로 파일을 복구할 수 있는 것이다.

자료구조와 알고리즘

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

버블 정렬

장점

  • 이해와 구현이 간단하다.

단점

  • 성능이 좋지 않다.

시간 복잡도

  • O(n^2)

선택 정렬

장점

  • 이해와 구현이 간단하다.

단점

  • 성능이 좋지 않다.

시간 복잡도

  • 최악 : O(n^2) - 배열이 역순으로 정렬되어 있는 경우

삽입 정렬

장점

  • 구현이 간단하고 이해하기 쉽다.

  • 추가적인 메모리 소비가 적다.

단점

  • 성능이 좋지 않다.

  • 데이터의 상태에 따라 성능 편차가 크다.

    • 최선 : O(n)

    • 최악 : O(n^2)

시간 복잡도

  • O(n^2)

병합 정렬

장점

  • 속도가 빠르다.

단점

  • 병합 과정에서 임시 배열이 필요하기 때무넹 추가적인 메모리 공간을 사용한다.

  • 이해와 구현이 복잡하다.

시간 복잡도

  • O(n log n)

퀵 정렬

장점

  • 공간 효율성: 추가 메모리 공간을 거의 필요로 하지 않는 제자리 정렬 알고리즘

  • 캐시 친화적: 지역성이 좋아 캐시 성능이 우수

  • 병렬화 가능: 분할 정복 접근 방식으로 인해 병렬 처리에 적합

단점

  • 불안정 정렬: 동일한 키 값을 가진 요소들의 상대적 순서가 보존되지 않을 수 있다.

  • 최악의 경우 성능: 피벗 선택이 잘못되면 O(n^2)의 시간 복잡도를 가질 수 있다.

  • 재귀적 특성: 재귀 호출로 인해 스택 오버플로우가 발생할 수 있다.

시간 복잡도

  • 평균 케이스: O(n log n)

  • 최악의 케이스: O(n^2)

  • 최선의 케이스: O(n log n)

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

  • 타뷸레이션을 사용할 것 같다.

    • 메모이제이션의 경우 재귀호출이기 때문에 메모리를 많이 사용하기 때문에 메모리가 부족한 시스템에서 사용하는 것은 적합하지 않다.

댓글을 작성해보세요.

채널톡 아이콘