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

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

운영체제

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

  • 레지스터: CPU 안에 있는 메모리로 매우 빠름, 캐시를 먼저 확인해보고 없으면 메모리에서 가져옴.

  • 캐시: 레지스터에서 사용할 데이터를 미리 저장해 놓는 장치

  • 메인메모리: 실제 운영체제와 프로세스들이 올라가는 공간, 보조장치보다 비싸기 때문에 실행중인 프로그램만 올림

  • 보조저장장치: 상대적으로 저렴한 가격을 이용해 저장공간으로서 사용됨.

순서대로 속도가 빠르며 용량이 작고 가격이 비쌈. => 비싼 메모리로 전부 만들 수 없으니, 가격별로 역할에 맞게 만들어서 역할 분담하여 사용됨 => 일반 가정에서도 사용 가능한 가격의 컴퓨터

보조저장장치를 제외한 나머지는 모두 휘발성 메모리

 

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

경계 레지스터

 

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

가변 분할 방식

  • 장점: 더 크게 할당돼서 낭비되는 공간인 "내부 단편화"가 없음.

  • 단점: "외부 단편화" 발생

     

    외부 단편화: 할당된 메모리 작업이 끝난 공간이 연속적이지 못해, 이후에 배정되어야 하는 프로세스가 빈 공간 영역보다 커서 할당되지 못하는 문제

     

고정 분할 방식

  • 장점: 구현이 간단함, 오버헤드가 적음.

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

 

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

스레싱

 

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

꼭 필요하냐고 한다면 그렇지는 않습니다.

일반적인 경우는 저장장치에 운영체제를 설치하고 이를 컴퓨터 부팅할때 메모리로 불러와 동작을 합니다.

그런데 저장장치는 HDD나 SSD만 있는것이 아닙니다. 대표적인 예시로 USB에 운영체제를 설치하고 이를 불러와 컴퓨터를 가동하는 방식도 존재합니다.

따라서 HDD나 SSD가 꼭 필요하냐고 한다면 그렇지는 않습니다.

 

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

파일을 삭제했을 때, 실제로는 파일 테이블의 헤더를 삭제하고 free block list에 추가하는 방식이라 블록의 데이터는 그대로 남아있게 되며, 이를 포렌식으로 복구하는것입니다.

만약 복구가 되는걸 원치 않는다면 여러번 데이터를 씌워서 해당 블록에 새로운 데이터가 덮어 씌워지도록 해야합니다.

 


자료구조와 알고리즘

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

버블 정렬 (Bubble Sort)

  • 장점: 이해와 구현이 간단함

  • 단점: 성능이 좋지 않음

  • 성능: O(n^2)

 

선택 정렬 (Selection Sort)

  • 장점: 이해와 구현이 간단함

  • 단점: 성능이 좋지 않음

  • 성능: O(n^2)

 

삽입 정렬 (Insertion Sort)

  • 장점: 이해와 구현이 간단함

  • 단점: 성능이 좋지 않음

  • 성능: O(n^2)

 

병합 정렬 (Merge Sort)

  • 장점: 성능이 좋음

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

  • 성능: O(nlogn)

 

퀵 정렬 (Quick Sort)

  • 장점: O(nlogn)의 성능을 낼 수 있음.

  • 단점: 피벗이 한쪽으로 치우치면 O(n^2)의 성능이 나올 수도 있음. 재귀적인 기법으로 이해와 구현이 어려움.

  • 성능: O(nlogn) or O(n^2)

이론적인 성능만 보자면 병합정렬이 더 좋다고 판단될 수 있지만, 피벗을 보통 중간값으로 설정하여 O(n^2)의 성능이 나올 경우가 드물기 때문에 일반적으로 O(nlogn)의 성능을 가짐. 게다가 퀵 정렬이 더 적은 비교와 더 적은 메모리 공간을 차지하기 때문에 더 좋은 알고리즘으로 평가됨.

 

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

우선은 메모이제이션으로 구현을 합니다.

그리고 메모리가 많이 부족한지를 따져보고, 많이 부족하다면 빠르게 타뷸레이션으로 변경하고, 아니라면 천천히 타뷸레이션으로 변경할 것이지만, 결론적으로는 타뷸레이션으로 변경할 것입니다.

 

이유는 재귀로 쉽게 구현이 가능할 것 같다는 내용으로 미루어보아 빠르게 메모이제션으로 구현을 한 후, 이게 잘 동작하는지 체크하고, 이 내용을 바탕으로 타뷸레이션을 구현하면, 빠르게 문제를 해결함과 동시에 타뷸레이션을 구현하는 바탕이 되어 줄 수 있기 때문입니다.

그리고 타뷸레이션으로 변경함으로서 차후 문제였던 메모리 부족 현상도 줄일 수 있습니다.

댓글을 작성해보세요.

채널톡 아이콘