본문 바로가기
  • 1+1=3
개발인강

[운영체제] 메모리-종류(레지스터,캐시 등), 주소(물리주소, 상대주소), 할당방식(내부단편화, 외부단편화)

by 여스 2022. 1. 12.
반응형

강의명: 그림으로 쉽게 배우는 운영체제

 

메모리 종류

 

레지스터

가장 빠른 기억장소로, cpu 내에 존재함. 전원이 꺼지면 데이터가 사라지기 때문에 휘발성 메모리라고 불림.

cpu를 나눌 때 32bit, 64bit로 나누는데 이게 레지스터의 크기를 말함.

cpu는 계산할 때 램에 있는 값을 레지스터로 가져와서 계산함. 계산결과는 다시 램에 저장시킴.

 

캐시

레지스터와 램 사이에서 일함. 휘발성임.

레지스터는 cpu가 사용하는 거니까 엄청 빠름. 근데 램은 너무 느림. 램에 있는 값을 레지스터에 옮기려면 너무 느리니까 필요한 값을 캐시에 저장함. 

캐시는 성능의 이유로 여러개를 둔다. 만약 cpu가 값을 요청해 값을 레지스터로 옮겨야 한다면 단계에 따라 가장 속도가 빠른 L1캐시를 보고, 여기없으면 L2캐시를 보고 여기에도 없으면 램에서 값을 가져옴.

 

메인메모리(램)

램은 실제운영체제와 다른 프로세스들이 올라가는 공간임. 휘발성임. 

보조저장장치(HDD, SDD)

비휘발성임.ㄱ쌈. 


현재 컴터 구조를 폰 노이만 구조라고 함. 걍 프로그램을 메모리(이젠 램을 메모리라 말하겠음)에 올려서 실행하는 걸 말함.

 

현대에선 멀티프로그래밍 환경이라 메모리에 여러 프로세스가 올라오게 되며, 운영체제는 메모리를 1바이트 크기로 구역을 나누고 숫자를 매김. 이 숫자를 주소라고 함.

32bit cpu는 레지스터 크기가 32bit이고, cpu가 처리하는 ALU(산술논리연산장치)도, 데이터가 이동하는 버스도 32bit임. 또한 cpu가 다룰 수 있는 메모리도 2^32로 4GB임. 

64bit cpu는 각각 다 64비트이고, 메모리도 2^64로 거의 무한대임.

64bit컴터가 한번에 처리할 수 있는 양이 더 많기 때문에 속도가 더 빠름.

 

물리주소와 논리주소

사용자는 물리주소를 몰라도 논리주소만 알면 물리주소에 접근할 수 있다.

경계레지스터

운영체제는 특별하기 때문에 메뫼에 운영체제영역을 따로 만들어놨는데, 사용자 프로세스가 운영체제 자리를 침범하면 위험해짐. 그래서 하드웨어적으로 운영체제 공간과 사용자 공간을 나누는 경계레지스터를 만듦. 경계레지스터는 cpu내에 존재하는 레지스터로, 메모리관리자가 사용자프로세스가 경계레지스터의 값을 벗어나는지 검사하고 벗어나면 종료시킴.

 

절대주소 상대주소

개발자는 프로그램이 실행될 메모리 주소를 신경쓰지 않고 개발함. 이는 컴파일러가 컴파일할때 메모리0번지에서 실행한다고 "가정"하기 때문임. 실제 주소가 0x4000번지라면 이건 메모리관리자가 바라본 "절대주소"이고, 컴파일러가 가정한 0x0번지는 "상대주소"임.

여기서 사용자가 바라본 주소인 "상대주소"는 "논리주소 공간"이라고 부르고, 메모리관리자가 바라본 "절대주소"는 "물리주소공간"이라고 함. 사용자가 어떤 메모리에 접근하라고 논리주소로 부를때마다 메모리관리자가 재배치레지스터에 저장된 시작주소를 가지고 매번 다시 계산해서 물리주소에 가서 값을 가져옴. 이 메모리관리자덕분에 모든 프로세스는 0x0번지부터 시작된다는 가정으로 편하게 작성가능함.

 

메모리 할당방식

이전에 메모리보다 더 큰 프로그램을 메모리에 올릴 땐 필요한 부분만 잘라서 메모리에 올려서 실행했음(메모리 오버레이 기법). 즉 큰 프로그램을 작게 나누어 일부만 실행하고, 일부는 하드디스크의 스왑영역에 저장하는 것임.

 

가변분할방식)

프로세스 크기에 따라 메모리를 나누기

장점: 메모리에 연속된 공간에 할당되기 때문에 더 크게 할당되서 낭비되는 공간인 "내부 단편화"가 없다.

단점: "외부단편화"가 발생함

 

고정분할방식)

프로세스 크기 상관없이 정해진 크기로 할당

장점: 구현간단, 오버헤드 적음

단점: 작은 프로세스도 큰 공간에 할당되서 낭비되는 내부단편화 발생.

 

 

오늘날엔 가변분할방식과 고정분할방시을 합쳐서 사용함.

 

외부단편화

가변분할방식(= 세그멘테이션)에서 발생하는 문제임.

아래처럼 메모리에 50mb짜리랑 10mb짜리가 실행되다 종료되서 빈공간이 생김. 그 후에 60mb짜리 프로세스를 메모리에 올리려는데 못올림. 

해결방법: 외부단편화가 발생한 공간을 합쳐주는 조각모음을 하면 된다. 근데 할려면 프로세스 다 중지하고 해야 해서 오버헤드 발생함.

 

내부단편화

고정분할방식(= 페이징...tmi: 책의 페이지처럼 크기가 정해져있다고 해서..ㅋㅋ)에서 발생하는 문제임.

아래예시에서 20mb크기로 메모리를 분할했다. 부족한 메모리는 하드디스크의 스왑영역에 할당.

 

아래빨간 공간처럼 낭비되는 공간이 내부단편화임.

 

버디시스템

가변분할 방식과 고정분할 방식을 혼합해 단점최소화. 2의 승수로 메모리 분할해 메모리 할당하는 방식.

내부단편화가 발생하긴 하지만, 많은 공간의 낭비가 발생하지 않음.

또한 큰 프로세스가 와도, 외부단편화를 방지하기 위해 공간 조립만 하면 공간이 만들어지기에 조각모음보다 훨씬 간단함.

반응형

댓글