인프런 워밍업 클럽 스터디 2기 - CS 전공지식<10월 셋째주 미션>
운영체제
메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
(아래로 갈수록 속도는 감소한다. 용량은 증가한다)레지스터 : cpu가 사용하는 메모리 가용 공간이 가장 작고 속도가 제일 빠르다.
케시 : 미리 데이터를 저장하는 용도
메인메모리 : os와 process가 실행되는 공간
보조저장장치 : 비휘발성 데이터 저장소 프로그램이 저장
사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?
경계 레지스터
메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?
가변 분할 방식
프로세스 크기에 따라 메모리를 할당하기에 내부 단변화가 발생하지 않는다.
외부 단편화가 발생한다.
고정 분할 방식
구현 방식이 간단하다.
외부 단편화보다 공간 낭비가 심한 내부단편화가 발생한다.
CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?
스레싱
HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?
일반적으로 운영체제를 HDD 혹은 SDD에 저장합니다. 컴퓨터가 부팅되었을 때, os의 데이터, 코드, 힙영역을 메모리에 올려서 실행합니다. 따라서 현재 사용하고 있는 컴퓨터를 사용하기 위해서는 HDD, SDD가 필요합니다.
하지만 경량화된 운영체제를 usb에 저장하거나 운영체제를 사용하지 않는다면, 반드시 필요하다고는 할 수 없습니다.
파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?
파일 시스템은 파일 테이블의 헤더를 삭제하고 free block list에 추가합니다. 따라서 사용한 파일 정보가 남아있기 때문에 포렌식 복구가 가능합니다.
자료구조와 알고리즘
지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.
거품 정렬: 구현이 간단하다. 하지만 성능이 o(n^2)으로 좋지 않다.
삽입 정렬 : 거품정렬과 동일하게 구현이 간단하다. 하지만 이또한 성능이 좋지 않다. o(n^2)
선택 정렬 : 배열에서 가장 작은 값을 순차적으로 정렬하는 방법. 위의 정렬 방법과 똑같이 성능이 좋지 않다. o(n^2)
병합 정렬 : 재귀적인 방법을 활용하여 데이터를 작은 단위로 나누어 정렬을 진행하여 합치는 방법입니다. 위의 정렬 방법 보다 속도가 더 뛰어납니다. o(n*logn)
퀵 정렬 : pivot을 기준으로 데이터를 나눕니다. 이후 pivot을 재외하고 왼쪽 인덱스와 오른쪽 인덱스의 값을 pivot과 비교합니다. 왼쪽인덱스에는 pivot값보다 큰값이 나올때까지 인덱스를 증가하고, 오른쪽 인덱스는 pivot보다 작은 값이 나올때까지 인덱스 값을 감소합니다.
만약 각 인덱스가 교차되지 않았다면 양 값을 교환합니다.
해당 과정을 서로 교차 될때까지 수행합니다.
왼쪽, 오른쪽 인덱스가 교차되었다면, pivot과 오른쪽 인덱스를 교체합니다.
해당 방식을 통해 오른쪽 인덱스 값을 기준으로 정렬이 수행됩니다.
해당 과정을 왼쪽 인덱스를 기준으로 다시금 반으로 나누어 재귀적으로 수행합니다.
해당 방법은 최악의 경우 o(n^2)이고, pivot값을 잘 선택해야 합니다. 하지만 대채적으로 평균 성능인 o(n*logn)을 띄고 더 적은 비교와 메모리 공간을 차지하기 떄문에 병합 정렬보다 퀵정렬이 보다 띄어난 정렬 알고리즘으로 평가합니다.
메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.
타뷸레이션
메모제이션의 경우 스택에 계속 새로운 함수를 생성하기에 해당 방식 자체가 메모리를 낭비하게 됩니다. 이에 비해 타뷸레이션은 한번의 함수 호출로 모든 동작을 완료하기 때문에 코드의 작성이 복잡하게 되어도 메모리를 효육적으로 사용하는 것에는 타뷸레이션이 유리합니다.
댓글을 작성해보세요.