3주차 미션

운영체제

  1. 메모리의 종류는 어떤것들이 있나요? 각 메모리의 특징도 함께 적어주세요.

  • 레지스터(Register)CPU 내부에 있는 가장 빠른 메모리. 크기는 작지만 처리 속도가 빠름

  • 캐시 메모리(Cache)CPU와 메인 메모리 사이에 위치. 자주 사용하는 데이터를 저장해서 접근 속도를 높인다.

  • 주기억장치(Main Memory, RAM)현재 실행 중인 프로그램과 데이터를 저장. 휘발성(전원이 꺼지면 데이터가 사라짐).

  • 보조기억장치(Secondary Storage)HDD, SSD 같은 저장장치. 비휘발성. 데이터를 영구적으로 저장한다.

  • 가상 메모리(Virtual Memory)물리적 메모리보다 더 큰 주소 공간을 제공하기 위해 하드디스크의 일부를 메모리처럼 사용. 페이지 교체가 발생하면 성능이 저하될 수 있음.

  • ROM(Read Only Memory)읽기 전용 메모리로, 주로 부팅 시 필요한 기본적인 정보를 저장. 비휘발성. BIOS가 여기에 저장됨.

  • 플래시 메모리(Flash Memory)빠른 읽기/쓰기 가능. SSD나 USB 메모리에 사용됨.

  1. 사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요?

     

    경계 레지스터(Bound Register) 또는 기저 레지스터(Base Register) 를 사용한다

    • Base Register는 사용자 프로세스가 접근 가능한 메모리 시작 주소를 지정

    • Bound Register는 접근 가능한 메모리의 끝 주소(범위)를 지정한다

     

  1. 메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요?

고정 분할은 공간을 미리 나눠놓기 때문에 비어 있는 부분이 생겨도 다른 프로세스가 못 쓰는 경우가 많아서 비효율적.

가변 분할은 필요한 만큼만 나눠서 공간 활용은 좋은데, 빈 공간들이 흩어져서 외부 단편화 문제가 생길 수 있다

 

  1. CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요?

스레싱

프로세스가 너무 많아지면 메모리가 부족해서 페이지 폴트가 빈번하게 발생하고,

때문에 계속 스왑 인/아웃만 반복하게 돼서 CPU가 실질적인 작업을 거의 못 하는 상황이다

결과적으로 CPU는 일 안 하고, 하드디스크만 바쁘게 움직이는 상태가 된다

  1. HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요?

꼭 필요하진 않다. HDD나 SSD는 운영체제와 데이터를 저장하는 역할을 하지만,

ROM이나 USB 같은 외부 저장장치에서 OS를 부팅하면 HDD/SSD 없이도 동작 가능하다

하지만 HDD/SSD가 없으면 운영체제를 어디다 저장하고 부팅할지 문제 때문에 필수로 여겨진다

메모리는 휘발성이라 전원이 꺼지면 모든 데이터가 날아가서 영구 저장 장치가 필요하기 때문임

 

파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요?

파일을 삭제해도 실제 데이터는 안 지워지고, 파일 시스템에서 그 파일에 대한 포인터(주소 정보)만 삭제되기 때문이다

삭제하면 운영체제는 "이 공간은 비어 있다" 하고 표시할 뿐 실제 데이터는 그대로 하드디스크에 남아 있게 된다

 

덮어쓰기가 되지 않는 한, 복구 프로그램이나 포렌식 기술로 지워진 파일을 다시 읽어올 수 있다



자료구조 알고리즘

 

지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.

 

버블 정렬
복잡도 : O(n²) / O(n²)O(1)

 

특징

구현이 매우 간단함
자료가 거의 정렬된 경우 최적화 가능

느린 속도

선택 정렬
복잡도 : O(n²) / O(n²)O(1)

 

특징

구현이 간단함
메모리 적게 사용 (제자리 정렬)

항상 O(n²)

데이터 양이 많아지면 비효율적

 

삽입 정렬
복잡도 : O(n²) / O(n²), (최선 O(n))O(1)

특징

거의 정렬된 데이터일 경우 빠름
구현이 간단함

데이터가 많거나 무작위일 경우 비효율적

 

병합 정렬
복잡도 : O(n log n) / O(n log n) O(n)

 

특징

안정적인 시간 복잡도
안정 정렬(같은 값 순서 보장)
큰 데이터 정렬에 강점추가 메모리 공간 필요
리스트 병합 과정이 오버헤드

 

 

퀵 정렬
복잡도 : O(n log n) / O(n²)O(log n) (호출 스택)

특징

평균적으로 매우 빠르고 효율적
추가 메모리 거의 안 씀 (제자리 정렬)

최악의 경우 느림 (피벗 선택 실패 시)
불안정 정렬 (같은 값 순서 보장 X)

 

 

메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요.

타뷸레이션으로 구현합니다

  • 우리는 항상 메모리가 부족하지까 재귀 호출을 많이 하면 스택 오버플로우 위험이 있음

  • 메모이제이션은 재귀 호출을 기반으로 동작하기 때문에 호출 스택이 깊어지면 메모리 문제가 발생할 수 있다

  • 반면에 타뷸레이션은 반복문 기반으로 동작하고, 스택을 사용하지 않아서 스택 오버플로우 걱정이 없다

  • 그리고 타뷸레이션은 미리 테이블을 할당해서 사용하는 메모리 양이 예측 가능하고 고정적이다

  • 메모이제이션은 필요할 때마다 캐시를 쌓아가지만, 그만큼 캐시 관리가 필요하고 메모리를 더 많이 사용할 수도 있음.

 

채널톡 아이콘