운영체제

주메모리의 관리

xodnek 2021. 8. 13. 18:16

프로세스가 뭐죠??

실행 중인 프로그램입니다. 프로그램이 메모리에 로드되어 있는 것입니다.

 

메모리는 어떻게 구성되어있는지 아시나요??

메모리는 바이트 단위로 구성되어 있는 배열입니다. 메모리에는 주소가 있습니다.

CPU는 PC가 지정하는 instruction을 fetch해서 실행합니다. instruction도 메모리에 load와 store을 합니다.

각각의 프로세스들은 분리된 메모리 공간을 가지고 있습니다.

base rgister와 limit register을 가지고 허용된 범위의 주소를 제어할 수 있습니다.

 

주소 바인딩 어떻게 하는지 아시나요??

프로그램은 디스크에 이진파일로 저장되어 있습니다.

실행 시키기 위해서, 프로그램을 메모리에 가지고 오면 드디어 프로세스가 되는 것입니다.

프로세스의 주소는 0번지에 시작되는 것은 아닙니다. 어디에 결정 될지는 운영체제가 결정해줍니다.

코드 내에서 주소는 일반적응로 symbolic합니다.

컴파일러는 relocatable 주소로 바인딩해줍니다.

링커는 컴파일러로 인해 생성된 오브젝트 파일을 논리적인 주소를 만들어 냅니다.

로더가 로딩하면서 논리적인 주소를 절대적인(absolute) 주소로 바인딩해줍니다.

논리적 주소와 물리적 주소가 무엇인지 아시나요??

논리적 주소는 CPU가 생성한 가상 주소입니다. 프로그램을 참조하여 CPU가 생성한 모든 논리 주소 집합을 논리 주소 공간이라고 합니다.

사용자는 프로그램의 논리 주소를 볼 수 있습니다. 논리적 주소는 CPU에 의해 생성됩니다.

물리적 주소는 메모리 유닛 내의 위치입니다. 해당 논리 주소에 매핑 된 모든 실제 주소 집합을 실제 주소라고 합니다. 사용자는 프로그램의 실제 주소를 볼 수 없습니다. 물리적 주소는 MMU라는 하드웨어에 의해 계산됩니다.

 

MMU(Memory Management Unit)가 무엇인가요??

MMU는 논리적 주소를 물리적 주소로 변환하는 것입니다.

MMU는 relocation register을 가지고 있는데 base register의 역할을 하는 것입니다.

 

메모리 절약 낭비 방지를 하는 방법에 무엇이 있나요??

운영체제는 자원을 빠르게 사용, 효율을 높게하는데 목적이 있습니다.

Dynamic Loading, Dynamic Linking, Swapping이 있습니다.

 

Dynamic Loading이 무엇인지 아시나요??

프로그램 실행에 반드시 필요한/데이터만 적재하는 것입니다. 코드는 많지만, 사용되는데 데이터는 전부가 아닐 수 있기 때문입니다.

모든 루틴이 다 사용되는 것이 아닙니다. 오류가 발생하면 오류 처리를 그 때 로딩하는 것입니다.

모든 데이터가 다 사용되는 것은 아닙니다. 자바에서 모든 클래스가 다 사용되는 것이 아닙니다. 그래서 실행 시 필요하게 되면 그때 해당하는 부분을 메모리에 로드하는 개념입니다.

 

Dynamic Linking이 무엇인지 아시나요??

여러 프로그램에 공통으로 사용되는 라이브러리 루틴을 메모리에 중복으로 올리는 것은 낭비라서 나온 것입니다.

.exe 실행 파일을 만들 때 link 하는게 아니라 라이브러리 루틴 연결을 실행 시 까지 미루고 물리적 주소에 오직 하나의 lib루틴만 로드됩니다.

다른 애플리케이션에서 실행 시 위에 로드된 lib루틴과 link됩니다.

e.g A프로세스도 printf, B프로세스도 printf를 사용하게 되면 똑같은 코드인 printf을 2번 로드할 필요가 없게 됩니다.

      하나만 메모리에 올려놓고, 필요할 때 그 올려진 기계어 코드를 메모리에서 link합니다.

e.g ftp, email 프로그램에서 똑같이 network lib를 사용하는데 둘다 올라가면 메모리 낭비니깐 하나만 메모리에 올리고 필요할때 그 올려진 network 기계어 코드를 메모리에서 link합니다.

반대 개념으로 실행파일 만들 때 link하는 static linking이 있습니다. 동적 링킹은 실행 이후 메모리에서 link하는 것입니다.

리눅스에서 사용하는 Shared Library(동적 라이브러리), 윈도우에서 사용하는 DDL(Dynamic Linking Library)가 존재합니다.

 

Swapping이 무엇인가요??

메모리의 활용도를 높이기 위해 메모리에 적재는 되어있으나 현재 사용되지 않고 있는 프로세스 이미지는 잠시 내쫓는 것입니다.

운영체제가 A프로세스가 실행 안하고 있으면 지금은 메모리에서 일단 내쫒습니다.

Swap out은 실행 파일의 일부는 메모리에서 HDD의 Backing Store로 이동합니다.

Swap in은 이후 call이 되면 다시 호출하여 사용하는 것입니다.

'운영체제' 카테고리의 다른 글

메모리 할당(2)  (0) 2021.08.13
메모리 할당(1)  (0) 2021.08.13
데드락  (0) 2021.08.11
철학자들의 저녁식사 문제  (0) 2021.08.11
모니터  (0) 2021.08.10