[인프런 워밍업클럽 CS 2기] 3주차 미션
운영체제
메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
<aside>
메모리는 레지스터, 캐시 | 메인메모리(RAM) | 보조저장장치(HDD, SSD)로 나눌 수 있다.
레지스터
가장 빠른 메모리, CPU내 존재, 휘발성 메모리, bit는 레지스터의 크기임
CPU 계산시 레지스터로 가져와서 연산을 하고, 결과는 다시 메인메모리(RAM)에 저장시킴
메인메모리에 있는 값을 옮기려면 느리기때문에, 필요한 값은 미리 옮김
CPU의 한사이클에 접근할 수 있어서 굉장히 빠름
캐시
메인메모리에 있는 데이터를 미리 옮긴 곳이 캐시임
성능의 이유로 여러개를 둠 (L1, L2, …)
CPU의 수~수십 사이클에 접근할 수 있어서 빠름
메인메모리
실제 운영체제와 다른 프로세스들이 올라가는 공간
전원이 꺼지면 데이터가 지워짐 = 휘발성 메모리
보조저장장치보다 속도는 빠르지만 가격이 비싸기 때문에 데이터 저장보다는 실행중인 프로그램을 올리는 용도로 사용됨
CPU의 수백 사이클에 접근해서 시간이 걸림
보조저장장치
속도 느림, 용량 큼, 가격 저렴, 비휘발성 메모리
CPU 수백만 사이클에 접근해 시간이 많이소요됨 </aside>
사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?
<aside>
경계 레지스터
</aside>
메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?
<aside>
가변 분할 방식(세그멘테이션)
프로세스의 크기에 따라 메모리를 나누는 방식
한 프로세스가 메모리의 연속된 공간에 할당되기 때문에
연속 메모리 할당
이라고 함장점 : 메모리가 연속된 공간에 할당되기 때문에 더 크게 할당돼서 낭비되는 공간인
내부 단편화
가 없음단점 : 두개의 빈공간을 합해서 60MB가 있을때, 60MB의 새로운 프로세스를 연속된 공간에 할당하지 못하는
외부 단편화
가 발생함⇒ 조각 모음 : 외부 단편화가 발생한 공간을 합쳐줌
조각모음 실행 시, 현재 메모리에서 실행되고 있는 프로세스들의 작업을 일시 중지해야하고, 메모리 공간을 이동시키는 작업을 해야하기 때문에 오버헤드가 발생하게 됨
고정 분할 방식(페이징)
프로세스의 크기와는 상관없이 정해진 크기로 메모리를 할당하는 방식
한 프로세스가 메모리에 분산되어 할당되기 때문에
비연속 메모리 할당
이라고 함장점 : 같은 크기로 나누기 때문에 구현이 간단하고, 오버헤드가 적음
단점 : 작은 프로세스도 큰 영역에 할당돼서 공간이 낭비되는
내부 단편화
가 발생함⇒ 해결하는 방법은 없고, 분할되는 크기를 조절해서 내부단편화를 최소화 함
</aside>
CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?
<aside>
스레싱
⇒ CPU 스케쥴러는 CPU 사용률이 낮아지면 더많은 프로세스를 메모리에 올리게 되고 반복되다보면 어느새 CPU 사용률은 0에 가깝게 떨어지게 되며, 이를 스레싱 이라고 부름
</aside>
HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.
<aside>
HDD는 주변장치로써 버스도 분리되어 있어서 실행에는 필요없다고 느낄 수 있는데 운영체제를 RAM에 올리면 컴퓨터가 끄고 켜질때마다 날아가기때문에 꼭 필요하고, 데이터 스왑시 에서도 필요하다.
SSD는 부팅속도나, 프로그램을 실행하고 처리할때 속도면에서 도움을 줘 현대에서는 필수로 자리잡고 있는 것 같다.
</aside>
파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?
<aside>
파일시스템의 프리블록리스트를 통해 특정 파일을 지워도,파일 테이블의 헤더를 삭제하고 프리블록리스트에 추가하기때문에 사용했던 블록의 데이터는 그대로 남아있어서 복구가 가능하다.
</aside>
자료구조와 알고리즘
지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.
<aside>
버블 정렬 : O(n^2)
장점 : 구현이 간단하고, 코드가 직관적임
단점 : 속도가 느리고, 비효율적임
선택 정렬 : O(n^2)
장점 : 메모리 사용이 적고, 자료 이동 횟수가 적음
단점 : 속도가 느리고, 큰 데이터를 다룰 때 비효율적임
삽입 정렬 : O(n^2)
장점 : 거의 정렬된 데이터를 처리할 때 효율적임
단점 : 데이터가 많을수록 성능이 떨어짐
병합정렬 : O(nlogn)
장점 : 성능이 지금까지 배운 정렬보다 좋음
단점 : 재귀적인 기법을 이용해 이해와 구현이 어려움
퀵정렬 : 새타(nlogn), O(n^2)
장점 : 성능이 지금까지 배운 정렬보다 좋음
단점 : 재귀적인 기법을 이용해 이해와 구현이 어려움 </aside>
메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.
<aside>
메모리가 부족한 시스템이라면 결과값을 그때 그때 계산해서 사용하는 메모이제이션을 택할 것 같다. 해시테이블을 이용해 속도도 올리고 계산결과값을 저장하는 장점도 있기 때문이다.
</aside>
댓글을 작성해보세요.