
인프런 워밍업 클럽 스터디 2기 - CS 미션 3
운영체제
1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
레지스터
가장 빠른 기억장소이며, CPU 내에 존재합니다.
휘발성 메모리입니다. -> 컴퓨터 전원이 꺼지면 데이터가 사라집니다.
CPU가 계산할 때 메인메모리에 있는 값을 레지스터로 가져와 계산을 합니다.
캐시
레지스터보다 느리고, 메인메모리보다 빠릅니다.
메인메모리에 있는 값을 레지스터로 가져오면 느리기 때문에, 필요할 것 같은 데이터를 미리 저장하는 곳입니다.
캐시는 여러 개로 나누어지고, L1 캐시에 데이터가 없다면 L2 캐시를 확인합니다.
메인메모리
실제 운영체제와 다른 프로세스들이 올라가는 공간입니다.
휘발성 메모리입니다.
가격이 비싸기 문에 데이터를 저장하기보다는 실행중인 프로그램만 올라갑니다.
HDD, SDD
비휘발성 메모리입니다. -> 파일을 저장하기 적합합니다.
가장 느린 메모리입니다.
가격이 저렴합니다.
2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?
경계 레지스터입니다.
메모리 관리자는 사용자 프로세스가 경계 레지스터의 값을 벗어났는지 검사하고 만약 벗어났다면 그 프로세스를 종료시킵니다.
3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?
가변 분할 방식
장점 : 메모리가 프로세스의 크기에 딱 맞게 할당되기 때문에, 프로세스 크기보다 더 크게 할당돼서 낭비되는 공간인 내부 단편화가 없습니다.
단점 : 새로운 프로세스에게 비연속된 공간의 메모리를 할당할 수 없는 외부 단편화가 발생합니다.
고정 분할 방식
장점 : 메모리를 같은 크기로 나누기 때문에 구현이 간단하고 오버헤드가 적습니다.
단점 : 내부 단편화가 발생합니다.
4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?
스레싱입니다.
5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?
이유를 함께 적어주세요.
USB 같은 보조기억장치가 있다면 꼭 필요하지는 않을 것 같습니다.
컴퓨터가 부팅이 될 때 바이오스가 실행된 후 부트로더를 메모리로 가져와서 실행합니다. 부트로더가 없으면 컴퓨터를 실행시킬 수 없습니다.
결국 부트로더가 저장될 수 있는 저장매체가 필요합니다.
6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?
파일이 삭제될 때 파일시스템은 파일의 모든 정보를 지우는 것이 아니라 파일 테이블의 헤더를 삭제합니다.
그리고 사용했던 파일 테이블의 블록을 free block list에 추가합니다.
사용했던 블록의 데이터는 그대로 남아있기 때문에 복구가 가능합니다.
자료구조와 알고리즘
1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.
버블정렬
장점 : 이해와 구현이 간단합니다.
단점 : 성능이 좋지 않습니다.
시간복잡도 : O(n^2)
선택정렬
장점 : 이해와 구현이 간단합니다.
단점 : 성능이 좋지 않습니다.
시간복잡도 : O(n^2)
삽입정렬
장점 : 이해와 구현이 간단합니다.
단점 : 성능이 좋지 않습니다.
시간복잡도 : O(n^2)
병합정렬
장점 : 성능이 좋습니다.
단점 : 이해와 구현이 어렵습니다.
시간복잡도 : O(nlogn)
퀵정렬
장점 : 성능이 좋습니다.
단점 : 이해와 구현이 어렵습니다.
시간복잡도 : 피벗이 한쪽에 쏠리는 경우 O(n^2), 피벗이 배열의 반을 가르는 경우 Ө(nlogn)
=> 피벗이 계속해서 한쪽에 쏠리는 경우가 드물기 때문에, 보통 Ө(nlogn) 의 시간복잡도를 가집니다.
2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다.
여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.
메모리가 부족한 시스템이라면 타뷸레이션을 사용할 것입니다.
메모이제이션으로 재귀 문제를 해결하는 것이 더 쉽다고 해도, 더 많은 메모리를 사용함으로 인해 시스템에 메모리 관련 이슈가 생긴다면 더 심각한 문제가 발생할 수 있다고 생각합니다.
타뷸레이션을 사용하는 방식이 문제 해결에는 더 어렵겠지만, 시스템에 크리티컬한 이슈를 피할 수 있다고 생각합니다.
댓글을 작성해보세요.