![[인프런 워밍업 클럽 스터디 3기] CS - 3주차 미션](https://cdn.inflearn.com/public/files/blogs/8984a034-3a03-4be9-9cc3-b4d4f6ddccf0/1-01c09616.jpg) 
    [인프런 워밍업 클럽 스터디 3기] CS - 3주차 미션
운영체제
1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
컴퓨터에서 사용하는 메모리는 레지스터, 캐시, 메인메모리(RAM), 보조저장장치(HDD, SSD) 등이 있다.
- 레지스터는 CPU 내에 있는 가장 빠른 휘발성 메모리로, 비싼 가격과 작은 용량을 가지고 있다.
- 캐시는 미리 RAM에서 자주 사용하는 데이터를 가져와서 한다. 레지스터는 빠르나 RAM은 느리기 때문에 캐시에 데이터를 저장한다.
- RAM은 비싼 가격으로 인해 실행 중인 프로그램만 올라가는 공간으로 휘발성 메모리이다.
- 보조 저장장치는 용량이 크고 가격이 저렴하며 비휘발성 메모리이다.
- 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요? 
경계 레지스터이다.
경계 레지스터는 CPU 내에 위치하며, 하드웨어적으로 운영체제 영역과 사용자 영역을 분리한다. 메모리 관리자는 사용자 프로세스가 경계값을 벗어났는 지 감시하고, 벗어났을 경우 그 프로세스를 종료한다.
- 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요? 
가변 분할 방식의 장점은 프로세스 크기에 따라 메모리를 가변적으로 분할할 수 있어 내부 단편화가 발생하는 것이 적다. 단점은 메모리 공간보다 프로세스의 크기가 더 커서 외부 단편화가 발생할 수 있다.
고정 분할 방식의 장점은 메모리 할당 시 정해진 크기로 분할하기 때문에 관리와 구현이 간단하다. 단점은 프로세스 크기보다 큰 공간이 할당되면서 내부 단편화가 발생할 수 있다는 것이다.
- CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요? 
CPU 사용률을 높이려 했지만 잦은 스왑으로 인해 CPU 사용율이 오히려 더 떨어지는 현상을 스레싱이라고 한다.
- HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요. 
HHD와 SSD는 컴퓨터를 실행시키는 데 반드시 필요하다. 이들은 운영체제와 프로그램을 저장하기 때문에 없을 경우 부팅에 실패하거나 소프트웨어를 실행할 수 없다.
- 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요? 
파일을 삭제하면 파일 테이블에서 해당 파일의 헤더만 삭제되고, 삭제된 파일 자체는 free block list에 추가된다. 사용자는 파일 삭제 시 완전히 삭제된 것처럼 느끼나 실제로는 새 데이터로 덮어 쓰여질 때 까지 디스크에 남아있어 포렌식으로 파일을 복구할 수 있다.
알고리즘 & 자료구조
- 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요. 
버블 정렬 - O(n), 최악 O(n²)
구현하기 쉬우나 이중 for문으로 인해 성능이 좋지 않다.
선택 정렬 - O(n²)
구현하기 쉬우나 데이터가 많아질수록 비효율적이다.
퀵 정렬 - O(NlogN), 최악 O(n²)
병합 정렬보다 더 적은 비교를 하고 더 적은 메모리 공간 차지하지만 피벗 선택이 잘못되었을 경우 최악의 시간 복잡도를 가질 수 있다.
병합 정렬 - O(NlogN)
분할 정복 방식을 적용했다는 장점이 있지만 구현이 복잡하다.
삽입 정렬 - O(n²)
구현하기 쉽고, 이미 정렬되어있을 경우 효과적이다. 그러나 배열 크기가 커질수록 성능이 저하된다.
- 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요. 
타뷸레이션 방식을 사용할 것이다.
타뷸레이션은 도출된 모든 중간 값을 테이블에 저장하지만, 일반 재귀나 메모이제이션과 비교했을 때 성능이 더 우수하다. 또한, 반복문으로 한 번에 계산을 처리할 수 있기 때문에 메모리가 부족한 시스템에서 더 적합할 수 있다.
