[인프런 워밍업클럽 CS 2기] 3주차 미션
운영체제
메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
: 레지스터 - 가장 빠른 기억장소로 CPU 내에 존재하고 있고, 휘발성 메모리입니다
캐시 - 레지스터는 CPU가 사용하는 메모리로 빠른데, 그에 비해 메인메모리는 너무 느린편이라 메인메모리에 있는 데이터를 레지스터에 옮기려면 한참 걸리기 때문에 필요할 것 같은 데이터를 미리 가져와서 캐시에 저장합니다. 캐시는 휘발성 메모리입니다.
메인 메모리 - 실제 운영체제와 다른 프로세스들이 올라가는 공간으로 휘발성 메모리입니다.
보조저장장치 - 프로그램 파일들을 저장하고, 비휘발성 메모리입니다.사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?
: 경계 레지스터 입니다.메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?
: 가변 분할 방식
장점 - 메모리에 연속된 공간에 할당되기 때문에 더 크게 할당되서 낭비되는 공간인 ‘내부 단편화’가 없습니다.
단점 - ‘외부 단편화’ 발생합니다.
고정 분할 방식
장점 - 구현이 간단하고, 오버헤드가 적습니다.
단점 - 작은 프로세스도 큰 영역에 할당되서 공간이 낭비되는 ‘내부 단편화’가 발생합니다.CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?
: 스레싱입니다. 근본적인 원인은 물리메모리의 크기가 부족한 것으로, 하드웨어적으로 해결하려면 메모리 크기를 늘리면 됩니다. 운영체제면으로 해결하게 하려면 프로세스가 실행되는 동안 해당 프로세스에게 맞는 적절한 페이지 수를 결정함으로써 해결합니다.HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.
: 일반적으로 꼭 필요합니다. 왜냐하면 컴퓨터 부팅을 위해 운영체제 실행을 해야하고, 파일 접근이나 프로그램 실행을 위해 필요하기 때문입니다.파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?
: 파일이 삭제될 때 실제 데이터가 완전히 제거되지 않고, 파일 시스템의 관리 정보만 업데이트되기 때문입니다.
만약 특정 파일 삭제 시, 파일시스템은 파일의 모든 정보를 지우는 것이 아니라 파일 테이블의 헤더를 삭제하고 free block list에 추가하는 방법으로 처리하기 때문에 포렌식으로 파일 복구가 가능합니다.
자료구조와 알고리즘
지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.
: 버블정렬
장점 - 이해와 구현이 간단함 / 단점 - 성능이 O(n^2)으로 좋지 않음 / 성능 - O(n^2)
선택정렬
장점 - 이해와 구현이 간단함 / 단점 - 성능이 O(n^2)으로 좋지 않음 / 성능 - O(n^2)
삽입정렬
장점 - 이해와 구현이 간단함 / 단점 - 성능이 O(n^2)으로 좋지 않음 / 성능 - O(n^2)
병합정렬
장점 - 성능이 O(nlogn)으로 좋음 / 단점 - 이해와 구현이 어려움 / 성능 - O(nlogn)
퀵정렬
장점 - 성능이 O(nlogn)으로 좋음 / 단점 - 이해와 구현이 어려움 / 성능 - O(nlogn) (피벗이 한쪽에 쏠리면 최악의 경우 O(n^2)이긴 함)메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.
: 메모리가 부족한 시스템에서 문제를 해결할 때는 타뷸레이션을 선택하는 것이 더 좋을 것 같습니다.
그 이유는 타뷸레이션은 메모이제이션에 비해 적은 메모리를 사용함에도 불구하고 빠른 시간을 보이기 때문입니다.
회고
아직 내용을 완벽하게 이해하지 못하여 이번주 강의를 다시한번 복습할 예정인데, 그래도 미션을 통해 한번 더 살펴보면서 들었던 내용들을 머릿속에 떠올려볼 수 있어서 좋았습니다.
또한 메모리 부족 시스템에서의 메모이제이션, 타뷸레이션과 선택과 같이, 현재 가지고 있는 환경에 따라 로직을 어떻게 만들지에 대한 고민이 실제 무엇인가 개발할 때도 중요하다는 생각이 들었습니다.📝⭐️
댓글을 작성해보세요.