🧡 찐막_25% 쿠폰 부활! 🧡

인프런 워밍업 클럽 스터디 2기 CS 3주차 과제

인프런 워밍업 클럽 스터디 2기 CS 3주차 과제

운영체제

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

  • 레지스터

    • 휘발성 메모리

    • 컴퓨터의 bit는 레지스터의 크기를 말한다

    • 메인메모리의 값을 가져와서 레지스터에서 연산 후 다시 메인메모리로 저장

  • 캐시

    • 레지스터와 메인메모리 속도 차이 때문에 미리 데이터를 가져오는 곳

    • 여러개이다

  • 메인메모리(RAM)

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

    • 휘발성 메모리

    • 가격이 비싸다

  • 보조저장장치(HDD, SSD)

    • 파일 저장 공간

    • 비휘발성 메모리

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

     

     

    경계 레지스터

주소 처음에는 운영체제를 두는 공간이 있는데 만약 사용자가 악의적은 프로세스를 넣어서 침범한다면 위험하다

이런 이유로 물리적으로 분리하는 경계 레지스터를 만들었다.

경계 레지스터는 프로세스가 할당받지 않은 주소를 침범했다면 종료시킨다.

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

  1. 가변 분할 방식

    1. 메모리에 연속해서 프로세스를 집어넣는 것

    2. 연속 메모리 할당

    3. 장점

      1. 낭비되는 공간 없음

    4. 단점

      1. 외부 단편화

        1. 만약 프로세스가 끝나면 빈 공간이 생긴다

        2. 빈 공간이 여러개일 때 합치면 프로세스에게 줄 크기더라도 연속돼있지 않으면 사용이 불가능하다

        3. 합칠 수는 있지만 다른 프로세스들을 정지키시고 해야 하기 때문에 힘들다

  2. 고정 분할 방식

    1. 프로세스의 크기에 상관없이 메모리를 정해진 크기로 나눈다.

    2. 프로세스도 그 크기에 맞춰서 넣는다

    3. 비연속 메모리 할당

    4. 장점

      1. 구현이 간단하다

      2. 오버헤드가 적다

    5. 단점

      1. 공간이 남는 상황이 있다

         

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

스레싱

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

컴퓨터가 부팅되려면 HDD나 SSD와 같은 저장장치가 필수적입니다.

허나 둘 중에 하나만 있어도 작동은 가능합니다.

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

삭제된 파일의 데이터가 실제로는 물리적 디스크에 그대로 남아 있기 때문입니다.

자료구조와 알고리즘

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

- 버블정렬

가장 쉬운 정렬이지만 성능이 좋지 않다

바로 옆의 숫자와 비교해서 정렬하는 방식

걸리는 시간은 O(n^2)이다.

장점

  • 이해와 구현이 간단하다

단점

  • O(n^2)로 성능이 그리 좋지 않다

- 선택 정렬

이해와 구현이 간단하지만 역시 성능이 아쉽다

배열의 모드 값을 비교 후 가장 작은 값을 첫번째 원소로 가져온다

그 이후 정렬된 영역 뒤부터 다시 가장 작은 원소를 첫번째로 가져온다

걸리는 시간 또한 O(n^2)이다.

버블정렬과 같이 시간이 오래 걸린다.

장점

  • 이해와 구현이 간단하다

단점

  • O(n^2)로 성능이 그리 좋지 않다

- 삽입정렬

삽입 정렬은 두 영역으로 나눠서 진행된다.

시간복잡도 : O(n^2)

장점 : 구현하기 쉽다

단점 : 시간이 오래 걸린다

- 병합정렬

정렬해야 할 것을 아주 잘게 나눈 다음 정렬하고 병합하고를 반복하는 정렬방법이다.

시간복잡도 : O(nlogn)

장점 : 성능이 훨씬 좋다

단점 : 이해와 구현이 어려움

- 퀵 정렬

배열의 값 중 한가지를 피벗으로 설정(설정방법은 여러가지)

맨 왼쪽, 맨 오른쪽, 양쪽 이동값 만들기

왼쪽 이동값이 피벗보다 크면 정지 -> 오른쪽 이동값이 피벗보다 작으면 정지 -> 둘다 정지하면 교환 -> 둘이 만나면 오른쪽 이동값 위치에 피벗값 변경

-> 이후 피벗값 기준 좌우 따로 정렬

시간복잡도 : O(nlogn), O(n^2)

장점 : 성능이 훨씬 좋다

단점 : 이해와 구현이 어려움

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

타뷸레이션

  1. 메모리제이션은 호출 스택이 깊어질 경우 스택 오버플로우가 발생할 위험이 있다.

  2. 타뷸레이션은 반복문을 사용해 순차적으로 계산하기 때문에 오버헤드가 적고 더 빠르게 동작한다.

  3. 타뷸레이션은 메모리 사용량이 명확히 정해져 있고, 일반적으로 문제 크기에 따라 고정된 크기의 테이블을 사용하기 때문이다.

댓글을 작성해보세요.

채널톡 아이콘