인프런 워밍업 클럽 2기 - CS 미션 3
# 운영체제
1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
레지스터 > 캐시 > 메인메모리(RAM) > 보조저장장치(HDD,SSD)
오른쪽으로 갈수록 속도는 느리고, 가격이 저렴해짐.
레지스터 - cpu 내부의 저장장치로, cpu가 계산하기 위해 데이터를 임시 저장
캐시 - cpu와 메모리 사이의 속도 차이를 줄이기 위해 데이터를 임시로 저장해두는 곳
cpu 계산에 필요할만한 데이터를 미리 가져옴
메인메모리 - 실제 운영체제와 프로세스들이 올라가는 공간
전원이 꺼지면 데이터도 사라지는 휘발성 메모리 공간
보조저장정치 - SSD, HDD 등으로 데이터 영구저장
전원이 꺼져도 데이터가 남는 비휘발성 메모리
2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?
경계레지스터 : CPU 내부에 존재하는 레지스터로 메모리관리자가 프로세스가 경계를 벗어났는지 검사하고, 만약 벗어났다면 그 프로세스를 종료시킨다.
3. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?
가변 분할 방식 : 프로세스가 크다면, 메모리도 크게 할당
장점 : 연속된 공간에 할당되어, 더 크게 할당되어 낭비되는 공간 '내부 단편화'가 없음
단점 : '외부단편화' 발생 -> 공간이 남는데 연속된 공간이 아니라 할당 할 수 없음.
고정 분할 방식 : 일정 크기로 분할하여, 프로세스 크기와 상관없이 메모리 할당
장점 : 구현이 간단하며 , =오버헤드가 적음
단점 : 크기보다 더 할당되는 '내부 단편화' 발생
4. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?
스레싱
5. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?
꼭 필요하진 않다. '실행'만 시키는 용도로는 꼭 필요하지 않지만, 컴퓨터를 사용하기 위해서는 필요합니다.
이유를 함께 적어주세요.
6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?'
파일 삭제시 실제 파일이 삭제되는 것이 아닌, 그 파일의 헤더만 지우고, Free Block List에 추가하게된다. 즉 해당 데이터에 새로운 데이터가 덮어지기 전까지는 파일을 복구할 수 있다.
# 자료구조와 알고리즘
1. 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.
버블 정렬
O(n²)
장점 : 이해와 구현이 쉬움
단점 : 성능이 좋지 않음
선택정렬
O(n²)
장점: 이해와 구현이 쉬움
단점 : 성능이 좋지 않음
삽입정렬
O(n²)
장점: 이해와 구현이 쉬움
단점 : 성능이 좋지 않음
병합정렬
O(n log n)
장점 : 성능이 좋음
단점 : 정렬 배열을 저장한 메모리 공간 필요
퀵정렬
O(n log n)
장점 : 성능이 좋음
단점 : 피벗설정을 잘못할 경우 O(n²)의 성능이 될 수 있음. 저장할 공간이 추가로 필요
2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다.
여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요
타뷸레이션을 사용하겠습니다. '메모리가 부족' 환경에서는 재귀 호출로 발생하는 오버헤드가 방지하기 위해 하양식 알고리즘인 타뷸레이션을 사용하겠습니다.
댓글을 작성해보세요.