본문 바로가기
💻CS/운영체제

06. 운영체제 메모리관리

by 둥둥동동# 2021. 4. 12.
728x90

 

 

 

운영체제의 메모리 관리

 

◎개요

[그림1] 메모리 계층도

위로 올라갈수록 가격이 비싸지고 용량이 작아지지만 속도는 빠른 메모리입니다.

효율적인 메모리 사용을 위해 메모리를 계층화 시킬 필요가 있었습니다.

레지스터와 캐시는 CPU에 내장되어 있어서 접근방식, 기록방식 등이 하드웨어적으로 구현됩니다.

주기억 장치, 보조 기억장치는 파일 시스템, 가상메모리 등 소프트웨어적으로 구현됩니다.

 

-프로세스

 메모리에 적재되어서 CPU를 점유하고 있는 상태, 명령어를 처리하고 있는 상태입니다.

 

- 메모리 

 메모리상에서는 8Byte를 하나의 단위로 취급. 

CPU는 PC레지스터를 이용해 명령어에 접근,  명령을 처리한뒤 결과를 메모리에 기록합니다.

 

 

 

데이터 접근단위 

 

[그림2] 메모리 데이터접근

CPU와 직접 접근하는 메모리들은 Word 단위,  보조기억에 접근할 경우 블럭 단위로 데이터에 접근할 수 있습니다

워드란 cpu가 한번에 처리 가능한 단위를 뜻합니다. 윈도우10의 32bit 64bit가 이것과 관련이 있습니다.

블럭은 지정한 파일시스템의 구조에 따라 다릅니다. 종류는  NTFS, FAT32 등이 있습니다.

워드는 16~64비트,  블럭은 1~8192바이트까지 처리할 수 있습니다.

 

 

 

공유 메모리 

 

[그림3] 메모리 공유

운영체제를 통해 메모리공간을 서로 다른 프로세스들간 공유가 가능합니다. 

공유 메모리 사용절차는 다음과 같습니다

1. 공유 메모리 생성

2. 프로세스에 공유 영역 첨부

3. 공유 영역 접근

4. 첨부된 공유 여역 해제

5. 공유메모리 삭제

 

아래 실습을 통해 메모리 공유를 알아보자

 

 

 

리눅스 실습

 

 

free : 메모리 여유공간 확인하기

옵션 :  -t=모든용량 출력     -h=모든 문자단위 출력   

-g=기가바이트 단위 출력   -m=메가바이트 -k=키로바이트 -b=바이트

 

메모리 공간 확인
모든 메모리공간을 알맞는 단위로 출력

다음 코드를 실행해 메모리 점유율을 높여보자

메모리 할당코드

malloc()함수를 이용해 메모리공간을 점유한다.

 

컴파일 후 실행하기

위쪽이 실행전, 아래가 실행후 메모리입니다. 메모리사용량이 급증하였습니다.

 

 

공유메모리 생성하기

 

shmget함수를 이용해 가상메모리를 생성할 수 있습니다. 

인자값은 (key값, 메모리크기, 메모리생성 | 동일key있을 때 -1반환 | 권한설정) 입니다.

공유 메모리 코드
실행하기

메모리를 생성한뒤 또 다시 실행하면 0x1234인 공유메모리가 이미 생성되었기 때문에 -1이 반환된다.

 

공유메모리 리스트를 확인해보면 위와 같이 55번으로 4096만큼 할당되어 있다.

 

공유 메모리 접근

두개의 프로세스를 하나의 공유메모리에 접근해보겠습니다.

shmat()를 이용해 공유메모리를 프로세스에 첨부할 수 있습니다. 

memset으로 메모리를 0으로 정리해주고,

for문으로 pShared를 1씩 증가시켜 줍니다. 

for문이 끝나면 연결한 공유메모리를 shmdt()함수로 떼어냅니다.

 

아까 작성한 코드는 공유메모리상의 변수의 값을 증가시키는 코드였습니다.

이번 코드는 공유메모리상의 변수를 출력하는 함수입니다.

실행시켜 보겠습니다.

 

shm_w와 shm_r 를 실행시켜 보았습니다. 똑같은 55번 공유메모리에 접속하여 w는 변수를 증가시키는 중이고 r는 해당 변수를 읽어오고 있습니다.

728x90

댓글