[인프런 워밍업 클럽 2기 - CS] 3주차 미션
운영체제
메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
메모리는 레지스터, 캐시, 메인메모리(RAM), 보조저장장치(HDD, SSD)가 있습니다. 레지스터는 CPU의 내부에 존재하는 가장 빠른 메모리로, 휘발성 메모리입니다. CPU가 RAM에서 데이터를 가져왔을 때, 계산하는 역할을 합니다. 캐시는 레지스터와 RAM 사이에 존재하는 휘발성 메모리로, 레지스터와 RAM 사이의 속도 차이를 극복하기 위해서 RAM에서 데이터를 미리 가져와서 저장해두는 역할을 합니다. RAM은 휘발성 메모리로, 운영체제와 실행중인 프로세스들이 올라가는 곳입니다. 보조저장장치는 비휘발성 메모리로, 데이터를 저장하는 역할을 합니다.
사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?
경계 레지스터입니다. 경계 레지스터는 CPU 내부에 존재하는 레지스터로, 메모리 관리자가 경계 레지스터 값을 벗어난 사용자 프로세스를 강제 종료시킬 수 있도록 만들어 줍니다.
메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?
가변 분할 방식은 메모리를 가변적으로 분할할 수 있어서 코드/힙/스택 등 각 영역을 모듈로 처리할 수 있기 때문에 메모리 접근 보호가 편리하지만, 외부 단편화가 발생할 수 있습니다. 고정 분할 방식은 외부단편화가 발생하지 않으나, 페이지 크기가 고정적이기 때문에 각 영역을 논리적인 영역으로 나눌 수 없으므로 특정 영역만 공유하거나 권한을 부여하는 것이 어렵습니다.
CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?
스레싱이라고 합니다. 물리 메모리 공간이 한정되어 있기 때문에 일어나는 현상입니다. 하드웨어적인 방법으로는 물리 메모리 크기를 늘려서 해결할 수 있고, 소프트웨어적인 방법으로는 프로세스 실행시간 내에 page fault의 발생빈도에 따라 페이지 크기를 조정하거나 워킹셋을 활용하여 해결할 수 있습니다.
HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.
다양한 파일이나 프로그램의 코드들은 비휘발성 메모리에 저장되어야 하므로 컴퓨터를 실행시키는데 꼭 필요한 장치라고 생각합니다.
파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?
파일 시스템은 사용자가 파일 삭제 요청을 했을 때, 파일의 모든 정보를 지우는 것이 아니라 파일 테이블의 헤더를 삭제합니다. 따라서 데이터는 그대로 남아있으므로 포렌식으로 파일을 복구할 수 있습니다.
자료구조와 알고리즘
지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.
버블/선택/삽입 정렬은 이해와 구현이 쉬우나 시간 복잡도가 O(n²)으로 성능이 좋지 않습니다. 병합/퀵 정렬은 재귀의 개념을 이용하기 때문에 이해와 구현이 비교적 어려우나 시간 복잡도가 O(nlogn)으로 성능이 좋습니다. 다만, 퀵 정렬은 최악의 경우 시간 복잡도가 O(n²)이 될 수 있습니다.
메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.
저는 타뷸레이션을 사용할 것 같습니다. 재귀함수가 더 직관적인 해결법이라면 메모이제이션을 선택하는 게 맞을 수 있겠지만, 메모이제이션은 타뷸레이션에 비해서 메모리 공간을 더 많이 차지하기 때문에 메모리가 부족한 시스템에서는 타뷸레이션이 더 맞는 방법이라고 생각됩니다.
댓글을 작성해보세요.