데이터 저장 공간

Jongwon·2021년 11월 28일
0

Linux Programming

목록 보기
3/25

가상 메모리(VM, Virtual Memory)

실제 메모리보다 더 큰 프로세스를 실행하고, 프로세스의 데이터를 보호하기 위해 도입한 방식이다. 요구 페이징(Demand Paging)방식을 사용한다.

Demand Paging

각 프로세스마다 가상 메모리 공간과 물리 메모리 공간을 페이지 단위(4KB)로 나누고, CPU에서 그 프로세스의 페이지 테이블을 관리한다.
프로그램을 실행 중 어떤 주소(가상 주소)가 나오면, 페이지 테이블에서 그에 해당하는 물리 주소를 찾아 Swap Area에 있는 페이지라면 RAM에 적재시키고 실행, RAM에 있다면 바로 실행한다.

Page

접근 권한과 동작 방식이 독립적으로 유지되는 메모리의 최소단위로, 메모리 사상을 이루는 기본 구성 블록이다.

Page 크기 구하는 함수(또는 매크로)
- long sysconf(_SC_PAGE_SIZE)
- int getpagesize()
- int PAGE_SIZE


데이터 저장 장소

하드디스크(HDD, Hard Disk Drive)

하나의 하드디스크는 여러개의 원기둥인 '실린더'로 구성되어 있고, '실린더는' 또 여러개의 층인 '트랙'으로 나뉜다. 트랙은 또다시 여러개의 조각인 '섹터'로 구성이 되는데, 논리적인 관점으로 하드디스크는 0번 섹터부터 모아놓은 데이터 저장 공간이다.

하드디스크의 데이터 검색 시간

  • Seek Time: 헤드가 해당 트랙으로 이동하는 시간
  • Rotation Time: 헤드가 트랙의 원하는 섹터로 오는데 걸리는 시간
  • Transfer Time: 섹터 단위로 읽는 시간

섹터
하나의 크기는 보통 512B로, 섹터단위로 입출력을 하여 하드디스크의 긴 접근시간을 줄인다.
섹터에는 파일명과 파일 내용뿐만이 아니라, 섹터의 위치, 접근 시간과 같은 메타 데이터도 저장이 되어야 한다.

파일 시스템

파일을 효과적으로 관리하기 위해 만들어진 것이 파일시스템이라 한다. 파일의 생성, 수정, 삭제 및 메타데이터를 관리한다. 유닉스와 같은 경우엔 파일시스템의 맨 앞에 Inode가 있어 Inode를 통해 파일을 관리한다.
하나의 디스크는 여러개의 파티션을 가질 수 있는데(C드라이브, D드라이브 등), 각 파티션마다 독립적인 파일시스템을 사용한다.

포맷
파티션을 해당 파일 시스템이 사용할 수 있도록 초기화하는 것
마운트
포맷된 파티션에 존재하는 파일에 접근, 생성, 삭제할 수 있도록 하는 작업. Windows는 자동 마운트가 되지만, Linux는 루트 파일시스템을 제외하고는 명시적인 mount작업이 필요하고 EXT4, ReiserFS등을 사용한다.

버퍼 캐시(Buffer Cache)

HDD와 RAM의 속도차이가 컴퓨터 성능의 병목지점이었다. 따라서 RAM의 일부분을 Buffer Cache로 만들어 자주 읽는 데이터를 보관하거나 write예정인 데이터를 버퍼링하고 한번에 저장함으로써 보완하였다.

SSD(Solid-State Drive)

플래시 메모리를 병렬고 결합하여 만들어진 보조기억장치로, HDD처럼 헤드를 통해 읽는 기계적인 부분이 없기 때문에 속도가 매우 빠르다.
SSD 내부에는 자체적인 CPU와 RAM이 존재하기 때문에 하나의 컴퓨터로 볼 수 있다. 또한 내부의 플래시 메모리들이 내부 버스로 연결이 되어있고, 이를 구동하는 펌웨어가 존재하는데, 결국 이 펌웨어가 컴퓨터성능을 좌우한다.
SSD는 또한 내부적으로 가비지컬렉션(Garbage Collection)을 수행한다. SSD는 큰 단위로 지우고 재작성하기 때문에, 유효한 데이터를 다른 위치로 옮기고 그 부분을 지운다. 이 작업도 펌웨어에서 진행하고, 성능을 좌우한다.
트림: 지워진 파일을 내부적으로 삭제하는 연산이다



멀티코어와, 성능이 향상된 RAM, SSD의 등장으로 인해 더이상 보조기억장치는 컴퓨터 성능의 병목지점이 아니게 되었다.
현대에는 운영체제의 코드가 컴퓨터 성능의 병목지점이 되었다.







참고문헌
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=eldkrpdla121&logNo=220705036817

profile
Backend Engineer

0개의 댓글