인프런 워밍업 클럽 스터디 2기 CS 3주차 미션
# 운영체제
1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
레지스터: 가장 빠른 메모리로 CPU 내부에 있다. 잦은 메모리 접근으로 인한 성능 감소를 줄이기 위해 사용한다.
캐시: 레지스터 다음으로 빠른 메모리로 마찬가지로 잦은 메모리 접근으로 인한 성능 감소를 줄이기 위해 있다.
메모리: 프로세스들이 올라가 있는 메모리이다. 레지스터, 캐시, 메모리는 모두 휘발성 메모리이다.
보조기억장치: 비휘발성 메모리로, 이곳에 파일과 프로그램 등이 저장된다.
레지스터 -> 캐시 -> 메모리 -> 보조기억장치
이 순서에서 레지스터 쪽으로 갈 수록 가격이 비싸고 용량이 작으나 속도가 빠르다.
2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?
경계 레지스터 입니다.
경계 레지스터는 프로세스가 허락되지 않은 메모리 주소에 접근을 시도할 시에 프로세스를 강제 종료 시킵니다.
3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?
가변 분할 방식
프로세스에 크기에 맞는 메모리 공간을 할당하는 방식
장점: 프로세스를 메모리에 연속된 공간에 할당하여 내부 단편화가 발생하지 않는다.
단점: 외부 단편화 문제가 발생한다.
고정 분할 방식
프로세스 크기에 상관없이 운영체제에서 정한 크기만큼 프로세스에 공간을 할당하는 방식
장점: 프로세스를 관리하기 간단해진다.
단점: 내부 단편화 문제가 발생한다.
4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?
스레싱
메모리 부족으로 페이지 폴트가 너무 빈번하게 발생하여 대부분의 시간을 스왑을 하는데 보내는 것입니다.
5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?
이유를 함께 적어주세요.
꼭 필요하지는 않은 거 같습니다. HDD나 SSD는 보조 기억 장치이기 때문에 있으면 좋은 것이지, 컴퓨터를 실행할 때 필수적인 부품은 아닙니다. 컴퓨터를 실행할 때에는 CPU와 메모리만 있어도 실행이 될 거 같습니다.
6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?
파일을 삭제할 때 그 파일의 정보를 정말 삭제하는 것이 아니라, 파일의 헤더만 삭제하고 그 파일 위치를 free block list에 추가한다. 이렇게 실제론 삭제를 하지 않고 free block list에만 추가하는 것이기에, 새로운 데이터가 덮어쓰여지지 않았으면 복구가 가능합니다.
# 자료구조와 알고리즘
1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.
버블정렬, 선택정렬, 삽입정렬
세 정렬의 시간 복잡도: O(n^2)
장점: 구현이 쉽고 직관적이다.
단점: 성능이 그닥 좋지는 않다.
병합정렬
시간 복잡도: O(nlogn)
장점: 큰 문제를 작은 문제로 쪼개어 해결(정렬)하는 것으로 위 세 정렬 알고리즘보다 성능이 우수합니다.
단점: 정렬할 배열을 저장할 메모리가 추가로 필요합니다.
퀵정렬
시간 복잡도: worst-case일시 O(n^2)이지만 거의 모든 상황에서 O(nlogn)에 근접한 성능을 보이고 메모리를 더 사용하는 병합정렬보다 일반적으로 우수한 성능을 보입니다.
장점: 정렬 알고리즘 중 거의 가장 우수한 성능입니다.
단점: 피벗을 잘못 선택할 시 성능이 저하될 수 있습니다.
2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다.
여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.
타뷸레이션을 사용할 거 같습니다. 메모이제이션은 문제를 메모리를 많이 사용하나 직관적으로 재귀를 사용할 때 사용할 거 같고 타뷸레이션은 직관적이지 않은 문제를 메모리를 적게 사용하여 해결할 때 사용하는 게 좋으니 타뷸레이션을 사용하겠습니다.
댓글을 작성해보세요.