
인프런 워밍업 클럽 스터디 3기 - CS 3주차 미션
운영체제
메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.
레지스터: 가장 빠른 기억장소로 CPU 내에 존재하고 있음. 컴퓨터의 전원이 꺼지면 데이터가 사라지기에 휘발성 메모리로 불. 32bit, 64bit는 레지스트리의 크기를 말함. CPU는 계산을 할 때 메인메모리에 있는 값을 레지스터로 가져와 계산함. 계산 결과는 다시 메인메모리에 저장
캐시: 휘발성 메모리. 미리 가져온 데이터들을 저장. 캐시는 성능의 이유로 여러 개 두고 사용함. CPU가 값을 요청해 레지스터로 값을 옮겨야 한다면 단계에 따라 가장 속도가 빠른 L1 → L2 → 메인 메모리 순으로 참조함. 즉 빠른 캐시에 있는 값을 먼저 찾으려고 함
메인 메모리(RAM): 실제 운영체제와 다른 프로세스들이 올라가는 공간. 전원이 공급되지 않으면 데이터가 지워지기에 휘발성임. HDD, SDD 보다 속도는 빠르지만 가격이 비싸기에 데이터를 저장하기보다는 실행중인 프로그램만 올림
보조저장장치(HDD, SSD): 다른 메모리에 비해 비교적 가격이 저렴하고, 전원이 공급되지 않아도 데이터가 지워지지 않는 비휘발성 메모리
2. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?
경계 레지스터입니다.
경계 레지스터란 CPU내에 존재하는 레지스터로 메모리 관리자가 사용자 프로세스가 경계 레지스터의 값을 벗어났는지 검사하고 만약 벗어났다면 그 프로세스를 종료 시키는 역할을 수행. 즉, 사용자 프로그램의 메모리 접근 범위를 제한함
3.메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?
가변 분할 방식
장점
내부 단편화가 없음
프로세스 크기에 맞게 분할 가능
가변적이기에 메모리 할당이 유연함
단점
외부 단편화 발생
오버헤드가 큼
고정 분할 방식
장점
구현이 간단함
오버헤드가 적음
단점
내부 단편화가 발생
메모리 할당이 유연하지 못함
CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?
스레싱 입니다.
HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.
운영체제의 저장: 일단 사용자가 직접 파일을 관리하기엔 여러 위험요소들이 있기에 이를 운영체제에게 전적으로 위탁해야합니다. 따라서 운영체제 파일들을 저장하기 위해 필요합니다.
데이터 저장: 휘발성 메모리인 RAM에 비해, HDD와 SSD는 비휘발성이기에 데이터를 저장하기에 용이합니다. 따라서 사용자가 설치한 프로그램, 시스템 설정, 사용자의 데이터 등등의 데이터를 보관하기에 적합합니다.
6. 파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?
파일을 삭제한다고 실제 그 데이터들을 삭제하는 것이 아니기 때문입니다. 특정 파일을 삭제한다고 하면 모든 정보를 지우는 것이 아니라 해당 파일의 헤더를 삭제하여 free block list에 추가합니다. 즉, 해당 공간을 비워놓은채로 표시하고 실제 데이터는 삭제가 되지 않은 상태인 것입니다.
자료구조와 알고리즘
지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.
버블정렬
장점: 이해와 구현이 간단함
단점: 성능이 좋지 않음. 큰 데이터일수록 매우 비효율적임
시간복잡도: O(n²)
선택정렬
장점: 이해와 구현이 간단함
단점: 성능이 좋지 않음
시간복잡도: O(n²)
삽입정렬
장점: 이해와 구현이 간단함
단점: 성능이 좋지 않음. 큰 데이터일수록 매우 비효율적임
시간복잡도: O(n²)
병합정렬
장점: 성능이 좋음. 큰 데이터에도 효율적임
단점: 이해와 구현이 어려움. 메모리 공간을 차지함
시간복잡도: O(n log n)
퀵정렬
장점: 병합정렬보다 평균적으로 속도도 빠르고, 메모리 공간도 덜 차지함
단점: 피벗 선택에 따라 성능이 변하기에 불안정할 수 있음
시간복잡도: 평균 - O(n log n), 최악 - O(n²)
2. 메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.
메모이제이션
계산 결과를 저장해 재사용하는 하향식 접근 방법
장점: 재귀를 활용해 어려운 문제를 간단히 해결 가능함, 중복 계산을 하지 않아 속도가 빠름
단점: 재귀 호출로 메모리 사용량 증가
타뷸레이션
작은 문제부터 해결하는 상향식 접근 방법
장점: 메모이제이션에 비해 메모리 절약, 속도 또한 빠름
단점: 하향식 접근 방법에 비해 덜 직관적임, 계산에 필요한 모든 값들을 전부 계산해야함
메모리가 부족한 시스템일 경우 스택 오버플로우가 나지 않는게 1순위 이기에 재귀호출로 인해 메모리 사용량이 증가하는 메모이제이션보단 타뷸레이션이 유리할 수 있으나 특정 상황에선 메모이제이션이 더 유리할수도 있습니다.
하향식 접근 방법인 타뷸레이션의 경우 모든 하위 문제를 계산하여 결과값을 들고 있기에 모든 하위 문제의 결과값이 필요하다면 타뷸레이션이 나은 접근방법이지만, 특정 결과값만 필요한 경우 메모이제이션이 더 나은 접근방법입니다.
따라서 주어진 메모리 내에서 재귀로 쉽게 구현이 가능하다면 메모이제이션을 선택할 것이고,
메모이제이션을 선택하여 스택 오버플로우가 난다면 반복문을 사용하는 타뷸레이션을 선택할 것입니다.
댓글을 작성해보세요.