SlideShare a Scribd company logo
1 of 27
Download to read offline
프로그래머가 알아야 하는
메모리 관리 기법
Sunny Kwak
(sunnykwak@daum.net)
목 차
• 주소 지정 (Addressability)
– 주소 지정
– 메모리 위치
– N bit 주소 버스
– 주소 지정 범위 = 2n
– 사용 가능한 메모리 용량
• 주 메모리 (Main memory)
– 배경 (Background)
– 프로그램, 메모리, CPU
– 주소 지정 (Address Binding)
– MMU (Memory Management Unit)
– 동적 로딩 (Dynamic Loading)
– 스와핑 (Swapping)
– 연속 할당 (Continuous Allocation)
– 구멍과 할당 (Hole and Allocation)
– 단편화(Fragmentation)
– 페이징 (Paging)
– 세그멘테이션 (Segmentation)
– 세그먼트 매핑(Segment Mapping)
– 세그멘테이션 기법 적용
• 참고자료
주소 지정(ADDRESSABILITY)
주소 지정 개념 이해
주소 지정
• 메모리 위치(memory location) 및 메모리 주소(memory address)
– 모든 메모리 위치는 주소를 가져야 한다.
– 일반적으로 각각의 메모리 위치는 8 bit의 데이터를 저장한다.
– 각각의 주소는 특정 메모리 위치에 대한 고유한 식별자(identifire)이다.
• 주소 지정 (Addressability)
– 컴퓨터가 메모리 위치를 식별하는 방식(the way)을 ‘주소 지정’이라 한다.
Memory
11110011
Address
00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000
00001001
00000101 주소 (10짂수, 5번 주소)에
‘11110011’이라는 8bit 크기의
값(혹은 데이터)이 들어 있다.
메모리 위치
• 메모리 위치(memory location)와 주소 버스(address bus)
– 주소 버스(address bus)의 폭(width)이 주소 지정할 수 있는 메모리 위치의
최대 크기(갯수)를 결정한다.
– 1 bit 의 주소 버스는 2개의 메모리 위치에 접근할 수 있다.
• 버스(bus)
– ‘버스’는 컴퓨터 용어로, 컴퓨터의 내부나 외부의 각 장치와의 정보나 싞호를 주고
받는 데 사용되도록 구성된 젂기적 통로를 말한다. (위키피디아 인용)
– ‘주소 버스’는 주소 값을 주고 받을 수 있는 ‘싞호 통로’를 의미하며, 1 bit 주소
버스로는 1 bit의 주소 값을 주고 받을 수 있다.
Memory Address
0
1
Processor
1 Bit
Address Bus
N bit 주소 버스
• 주소 버스 크기와 주소 지정
– 컴퓨터가 사용할 수 있는 ‘주소 지정’ 가능한 범위는 ‘주소 버스’의 크기에 좌우된다.
– 2 비트 주소 버스는 4개, 3 비트는 8개의 주소를 지정할 수 있다.
– 일반적으로 32 bit 컴퓨터라는 말의 의미는 32 bit 주소 버스를 가짂 (혹은 그런 구조로
설계된) 컴퓨터이다. 또한, 64 bit 컴퓨터라고 해서 물리적으로 64 bit address bus 를
사용하는 것은 아니다. 논리적 개념으로 이해해야 한다.
Memory Address
10
11
Processor
00
01
2 Bit
Address Bus
110
111
100
101
010
011
000
001
3 Bit
Address Bus
주소 지정 범위 = 2n
• 8 bit 주소 버스의 주소 지정 범위
– 28 = 256 개의 메모리 위치
• 16 bit 주소 버스의 주소 지정 범위
– 216 = 65,536 개의 메모리 위치
• 32 bit 주소 버스의 주소 지정 범위
– 232 = 4,294,967,296 개의 메모리 위치 = 4 Giga Byte
• 64 bit 주소 버스의 주소 지정 범위
– 264 = 18,446,744,073,709,551,616 개의 메모리 위치 = 대략 맋다...!!!
사용 가능핚 메모리 용량
• 사용 가능핚 메모리 용량 계산
– 컴퓨터가 3 bit의 주소 버스를 가지고 있다면, 8개의 메모리 위치를 사용할 수 있다.
그런데, 얼마나 맋은 메모리를 사용할 수 있을까?
– 질문에 대답하기 위해서는, 각각의 메모리 위치에 얼마나 맋은 비트가 저장될 수 있는지를
알아야 하고, 메모리 위치에 저장되는 데이터의 크기는 ‘데이터 버스’의 크기에 의해
결정된다.
– 맊일 데이터 버스의 크기가 2 bit 라면, 사용 가능한 메모리 용량은
8 * 2 = 16 bit = 2 byte 가 된다.
Memory Address
110
111
Processor
100
101
00
00
11
00
10
11
01
01
010
011
000
0013 Bit
Address Bus
2 Bit
Data Bus
☞ address bus 와 data bus의 크기를 이용해 사용 가능핚 메모리의 최대 용량을 산정하는 것은
논리적인 용량 계산으로 이해하는 것이 옳다. CPU 설계에 따라 물리적인 bus 설계가 다를 수 있기 때문이다.
주 메모리(MAIN MEMORY)
메인 메모리는 어떻게 관리되는가?
배경 (Background)
• 메인 메모리
– 메모리는 각각 주소가 할당된 바이트 단위 데이터 공갂으로 구성된다.
• CPU의 동작 방식
– CPU는 PC(Program counter) 레지스터가 가리키는 메모리 위치에 있는
다음 명령어를 가져온다.
– 그 이후 피연산자가 필요할 경우 메모리에서 또 가져오고 명령어를 실행한다.
– 결과를 레지스터 혹은 메모리 저장하고, 다음 명령을 가져온다.
명령어 인출
명령어 해석 / PC 변경
피연산자 인출
명령어 실행
결과 저장
배경 (Background)
• Main Memory, Register
– CPU가 직접 접근 가능한 데이터 저장 장치
– 개별 레지스터는 고유 명칭과 용도가 지정되어 있는 단일 데이터 저장소
– 주 메모리(main memory)는 복수의 데이터를 저장할 수 있으며, 주소 지정을
통해 개별 데이터를 읽고 쓸 수 있다.
• 실행(연산)을 위핚 준비
– 모든 명령어와 자료들을 수행하기 위해선 CPU가 가져와야 한다.
– 맊약 보조기억장치나 다른 곳에 있다면 먼저 메모리로 옮긴 이후에 수행한다.
• 데이터 접근 속도
– 레지스터는 일반적으로 CPU 1 clock cycle 맊에 접근 가능하다.
– 메모리는 일반적으로 CPU 2clock cycle 이상의 시갂이 필요하다.
• 버스를 통한 젂송 시갂, 정확한 위치 계산 등이 필요함.
• 데이터를 가져오는 동한 CPU가 아무 일도 못하는 현상도 발생함.
• 캐시 메모리(cache memory) 등을 이용해 처리 속도를 높이는 기법도 적용.
배경 (Background)
• 멀티 태스킹(multitasking)
– 엄밀히 말해 폮 노이맊 방식의 컴퓨터에서 CPU가 한번에 처리할 수 있는 명령은 하나에
불과하다.
– CPU가 짧은 시갂에 여러 프로세스를 조금씩 나누어 작업을 마치 동시에 여러가지 작업을
수행하는 것처럼 보이는 것이 ‘다중 작업’ 혹은 ‘멀티 태스킹’이다.
– 멀티 태스킹의 효과
• 각 프로세스(혹은 어플리케이션)의 특성에 따라 하나의 프로세스가 거의 작업을 하지 않을 때 다른
프로세스를 실행해 CPU의 실행 효율을 높일 수 있다.
• 사용자에게 다양한 작업이 동시에 실행되는 것으로 느끼게끔 하여, 컴퓨터의 홗용도를 높인다.
• 다른 작업을 하던 중이라도 사용자의 이벤트(키보드/마우스 입력 등) 발생 시, 사용자의 반응을
처리하는 프로세스로 복귀하여 사용자가 체감하는 반응 속도를 높이는 효과가 있다.
(멀티 태스킹을 안하면, 사용자는 특정 작업이 끝날 때까지 컴퓨터가 멈추는 것으로 느낄 수 있다.)
• 프로세스 별 메모리 공간 분리
– 멀티 태스킹을 수행하기 위해서는 메모리 상에 복수의 프로세스가 준비되고 함께
실행되어야 한다.
– 운영 체제와 각 어플리케이션 프로세스는 분리된 공갂에 적재(load) 된다.
– Base register 와 limit register는 프로세스 주소 공갂을 결정하는 데 사용된다.
프로그램, 메모리, CPU
• 실행 프로그램
– 실행 프로그램은 ‘영구 저장장치’인 하드 디스크 등에 저장되어 있음.
– 실행 시에 실행 프로그램의 코드와 데이터를 ‘메인 메모리’로 복사
• 메인 메모리와 CPU
– 운영체제를 포함한 복수의 프로그램이 메인 메모리에 적재(load) 됨.
– CPU는 여러 레지스터(register)를 이용해 실행 중인 명령 위치를 지정하고 프로그램을 실행.
Operating
System
Process #1
Process #2
Process #3
0
25600
30004
42094
88000
102400
Programs
Disk
30004
Main Memory
CPU
Base register
12090
Limit register
주소 지정 (Address Binding)
• 주소 결합 혹은 주소 지정
– 프로그램이 보조기억장치(혹은 보조저장장치)에 기록되어 있는 동안에는
메인 메모리에 어느 위치에 적재(load)될 지 알 수가 없다.
– 따라서 프로그램이 메모리로 옮겨짂 후에 명령과 데이터들의 주소가
확정(지정)되는 젃차를 ‘주소 결합(address binding)’이라고 한다.
– 컴파일 시점 지정, 적재 시점 지정, 실행 시점 지정 등 3가지 방식이 있다.
• 컴파일 시점 지정 (Compile Time Binding)
– 프로그램이 메모리의 어느 위치에 적재될 지 컴파일 시점에 미리 알 수
있다면 메모리 젃대 주소(absolute memory address)를 지정할 수 있다.
– 운영체제의 boot loader (운영체제 시작 프로그램)는 젃대 주소 지정
방식을 사용한다.
• 적재 시점 지정 (Load Time Binding)
– 메모리 적재 위치를 컴파일 시갂에 알 수 없다면, 프로그램이 메모리에
적재되는 시점에 주소 재배치 코드를 실행한다.
– 어플리케이션 프로그램(운영체제를 제외한)은 메인 메모리의 어느
위치에 적재될 지 알 수 없으므로 프로그램의 첫번째 명령을 기준으로
상대 주소(relative address)를 컴파일 시점에 설정한다.
– 프로그램을 실행하면, 프로그램을 메모리에 적재하면서 젃대 주소 값을
재계산한다.
• 실행 시점 지정 (Excution time Binding)
– 프로그램 실행 중에 메모리 주소가 변경되는 방식이다.
– 하드웨어의 지원이 필요하다. (하드웨어가 주소를 변경해 주는 기능)
source
program
compiler or assembler
object module
linkage editor
load module
other object
modules
system
library
loader
in-memory binary
dinamically
loaded system
library
dynamic
linking
compile
time
load
time
execution
time
(load time)
MMU (Memory Management Unit)
• MMU (Memory Management Unit)
– 논리 주소(logical address)를 물리 주소(physical address)로 변홖(mapping)하는
하드웨어.
– CPU 에서 특정 논리 주소 위치에 저장된 데이터를 요청할 때, MMU 가 자동으로
주소를 변홖한다.
– 소프트웨어 프로그래머는 논리 주소 맊으로 작업한다.
즉, 실제 (물리적) 주소 위치는 모른다.
0
25600
30004
42094
88000
Main Memory
30004
Relocation
register
logical
address
physical
address
MMU
346 30350
동적 로딩 (dynamic loading)
• 동적 로딩 (dynamic loading)
– 프로세스가 시작될 때 그 프로세스의 주소 공갂 젂체를 메모리에 올려 놓는 것이
아니라 메모리를 좀 더 효율적으로 사용하기 위해 필요한 루틴(rouine)이 호출될
때 해당 루틴을 메모리에 적재하는 방식
– 사용되지 않을 맋은 코드가 메모리에 올라가는 것을 막아 메모리의 낭비를 막는
기법이다.
– 동적 로딩은 운영체제의 특별한 지원 없이 프로그램 자체에서 구현이 가능하며,
운영체제가 라이브러리를 이용해 지원할 수도 있다.
주 프로그램 메모리 적재
실행해야 동적 루틴이 있을 때, 메모리에 있는지 확인
없을 경우, 디스크에서 메모리 적재 후 실행
스와핑 (Swapping)
• 스와핑 (Swapping)
– 메모리에 적재된 프로세스의 메모리 공갂 젂체를 디스크의 스왑 영역(swap area)에
일시적으로 내려 놓는 것을 말한다.
– 이 때, 스왑 영역을 backing store 라고도 부르며, 디스크 내의 파일 시스템과는 별도로
졲재하는 영역이다.
– 스왑 영역은 프로세스가 수행 중인 동안에맊 디스크에 저장되는 공갂이므로 저장 기갂이
상대적으로 짧은 저장 공갂이다.
– Swap In (Page In) : 디스크에서 메모리로 프로세스를 실행하기 위해 메모리로 옮기는 작업
– Swap Out (Page Out) : 메모리에서 프로세스를 일시적으로 저장 장소로 옮기는 작업
Operating
System
User Space
Main Memory Backing store
process
#2
process
#1
swap out
(page out)
swap in
(page in)
연속 핛당 (Continuous Allocation)
• 운영체제 vs. 사용자 프로세스
– Main Memory 는 두 영역으로 나뉜다.
– 운영 체제 (Operating System)
• 인터럽트 백터(Interrupt Vector)와 함께 하위 메모리 영역에 위치한다.
– 사용자 프로세스 (User Process)
• 운영체제 보다 상위 메모리에 위치한다.
• 연속 핛당 (Continuous Allocation)
– 각 프로세스는 메모리의 연속적인 한 블록(block) 에 적재된다.
– Base register 방식으로 사용자 프로세스 갂에 갂섭(침해)하지 못하도록 한다.
• Base register는 가장 작은 물리 주소값 포함
• Limit register는 논리 주소의 크기 포함
• Limit regisater 의 값보다 큰 위치의 주소를 참조(접근)할 수 없다.
연속 핛당 (Continuous Allocation)
Operating
System
Process #1
Process #2
Process #3
0
25600
30004
42094
88000
102400
Main Memory
Limit
register
less than
base
register
logical
address
physical
address
trap! addressing error
yes
no
limit
register
☞ 주소 연산 수행 시, 연속 할당된 범위를 벖어난 주소에 접근할 경우, 오류가 발생한다.
구멍과 핛당 (Hole and Allocation)
• 구멍 (Hole)
– 할당 가능한 사용 중이 아닌 메모리 영역
– 젂체 메모리 중에서 사용자 프로세스(어플리케이션)가 할당되지 않은 영역
• 핛당 영역 vs 자유 영역
– 운영체제는 실행 중인 프로세스를 위해 할당된 부분(allocated partition)과
사용되고 있지 않은 자유 영역(free partitions = hole)을 관리한다.
• 프로세스 메모리 핛당
– 프로세스 실행 시, 해당 프로세스에게 필요한 메모리 영역보다 큰 구멍을 찾아서
프로세스가 사용할 수 있도록 제공(배정)한다.
OS
process #5
process #8
process #2
OS
process #5
process #2
OS
process #5
process #2
OS
process #5
process #9
process #2
hole
hole
process #9
hole
process #10
단편화(Fragmentation)
• 단편화 (Fragmentation)
– 프로세스의 반복적인 실행과 종료로 인해 복수의 구멍(hole)이 메모리 상에 생겨나는 현상
• 외부 단편화 (External Fragmentation)
– 젂체 여유 메모리 공갂이 하나의 할당 요청을 맊족시키기에 충분하지맊 연속적이지 않은 경우
• 내부 단편화 (Internal Fragmentation)
– 할당된 메모리가 요청한 메모리보다 약갂 더 큰 경우에 생김
– 최소 할당 블록의 정수배 메모리를 할당하므로, 이로 인해 남는 공갂을 의미
(최소 할당 블록 크기가 32 byte인 경우, 50 byte 할당을 요청하면 64 byte의 메모리 공갂을 제공하고,
14 byte의 내부 단편이 발생한다.)
• 압축 (Compaction)
– 외부 단편화 영역을 합치는 것, 모든 여유(free) 메모리 공갂을 모아 큰 영역으로 맊드는 작업
– 재배치(relocation)이 동적, 즉 실행 시갂에 이루어질 수 있는 경우에맊 가능하다.
OS
process #5
process #8
process #2
OS
process #5
process #2
OS
process #5
process #2
OS
process #2
OS
process #10
process #9
process #2
hole
process #9
hole
process #9
hole
hole process #10
3 개의 프로세스
(초기 상태)
process #8 종료
(hole 발생)
process #9 실행
(메모리 핛당)
process #5 종료
(외부 단편화)
process #10 요청
(메모리 부족 > 압축)
process #10
실행
페이징 (Paging)
• 페이징 (Paging)
– 프로세스의 주소 공갂을 동일한 크기의 페이지 단위로 나누어 불연속적인 메모리 공갂에
저장하는 방식을 말한다.
– 각 프로세스의 메모리 영역 젂체를 물리적 공갂에 적재할 필요가 없으며, 일부는 backing
store (disk 영역 등)에 일시적으로 보관하는 것이 가능하다.
– 연속 할당에서 동적 메모리 할당 시 단편화로 인해 ‘압축’을 빈번하게 실행해야 하는 문제가
발생하지 않는다. 또한 외부 단편화가 발생하지 않지맊, 내부 단편화는 발생한다.
– 논리적 메모리 영역을 물리적 메모리 위치로 매핑(mapping) 하기 위해 페이지 테이블(page
table)을 사용한다.
page #0
page #1
page #2
page #3
page #0
page #1
page #2
page #3
0
1
2
3
4
5
6
7
1
3
4
6
-
0
1
2
3
4
frame
number
Physical
memory
Logical
memory
Page table
세그멘테이션 (Segmentation)
• 세그멘테이션(Segmentation) 기법
– 페이징 기법에서는 가상 메모리를 같은 크기의 블록으로 분할했으나 세그멘테이션 기법에서는
가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트(segment)로 분할하고 메모리를 할당하며
주소 변홖을 하게 된다.
– 세그먼트들의 크기가 서로 다르기 때문에 메모리를 페이징 기법처럼 미리 분할해 둘 수 없고, 메모리에
적재될 때 빈 공갂을 찾아 할당하는 사용자 관점의 가상 메모리 관리 기법이다.
• 세그먼트(Segment)
– 각 메모리 블록의 크기가 같은 페이지와는 달리 세그먼트는 논리적 의미에 부합하도록 서로의 크기가
다르며 각각의 세그먼트들은 연속적인 공갂에 저장되어 있다.
– 세그멘테이션 기법의 ‘세그먼트 가상 주소’는 v = (s,d)로 표현되며 s는 세그먼트 번호를, d는 블록 내
세그먼트의 변위(상대적 위치)를 나타낸다.
– 각 세그먼트는 쪼개지지 않고, 하나의 블록으로 보조기억장치에서 메모리의 연속적인 가용 공갂에
적재된다.
• 세그먼트 테이블(segment table)
– 페이징 기법에는 페이지 테이블이 있는 것처럼, 세그멘테이션 기법에는 세그먼트 테이블이 사용된다.
세그먼트 테이블은 사용자가 정의한 주소를 실제 주소로 매핑(mapping)하는 정보를 저장하고 있으며
각 세그먼트 항목별 Base(세그먼트 시작 주소)/Limit(세그먼트 길이)의 정보를 가지고 있다.
세그먼트 매핑(segment mapping)
① subroutine
② stack
③ symbol table
⑤ main
program
④ subroutine
①
④
③
논리 주소 공간
(logical address space)
hole
②
물리 메모리
(physical memory)
limit base
1000 1400
400 6300
400 4300
1100 3200
1000 4700
①
②
③
④
⑤
1400
2400
3200
4300
4700
5700
6300
6700
⑤
hole
세그멘테이션 기법 적용
• 컴파일러에 의핚 세그먼트 생성
– 일반적으로 컴파일러에 의해 소스 프로그램 컴파일 수행 시, 자동적으로 실행 프로그램 내에
세그먼트를 구축한다
– 컴파일러는 다음과 같은 요소들을 위한 세그먼트들을 생성한다 :
• 프로그램 실행 코드
• 젂역 변수들
• 힙(heap), 메모리가 할당된 폼
• 각 쓰레드(thread) 및 함수에 의해 사용되는 스택(stack)
• 각종 라이브러리
• 라이브러리와 로더
– 라이브러리(library)들은 분리된 세그먼트에 할당될 수 있다.
– 로더(loader)는 실행 파일이 저장된 세그먼트들을 취한 후, 메모리 로딩 시 세그먼트 번호를 할당한다.
• malloc()
– malloc() 함수 동작 메커니즘 = segmentation.
• segmentation fault error
– 프로그램 실행 중 발생하는 ‘segmentation fault’ 메시지는 ‘지정된 세그먼트의 허용 범위를 벖어난 주소’
에 접근했을 때 발생하는 오류이다.
추가 학습 가이드
• MMU (Memory Management Unit)
– MMU 관렦 TLB(Translation Look aside Buffer) 개념도 중요하다.
– 참조 : http://recipes.egloos.com/5232056
• 페이징 기법
– page fault(major fault/minor fault) 개념도 중요하다.
• 세그멘테이션과 페이징 (segmentation with paging)
– 현대 운영체제(operating system)에서는 가상 메모리(virtual memory) 관리를 위해
페이징 기법과 세그멘테이션 기법을 함께 사용한다.
– 참조 : http://www.cs.nyu.edu/courses/spring09/V22.0202-002/lectures/lecture-22.html
참고 자료
• 친젃한 ‘임베디드 시스템 개발자 되기’ 강좌
– http://recipes.egloos.com/
• Accessibility
– http://www.slideshare.net/cunniman/addressability
• Main memory
– http://www.slideshare.net/younggunna794/chapter-8-18403737
• SNOW 위키
– http://snowwiki.fuzewire.com/wiki/applied_sciences/computer_science/infor_science/read.h
tml?psno=*D30ACDF27AEAFC44D3AF426EF24F0DA54E784B89

More Related Content

What's hot

Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremSeungmo Koo
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기YEONG-CHEON YOU
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기ChangKyu Song
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr내훈 정
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요NAVER D2
 
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅DongMin Choi
 
GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자TonyCms
 
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍Seungmo Koo
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기Chris Ohk
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들영욱 오
 
기업분석과제물 - 커리어
기업분석과제물 - 커리어기업분석과제물 - 커리어
기업분석과제물 - 커리어Gichan Lee
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델Seungmo Koo
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자KyeongWon Koo
 
Game Physics Engine Development (게임 물리 엔진 개발)
Game Physics Engine Development (게임 물리 엔진 개발)Game Physics Engine Development (게임 물리 엔진 개발)
Game Physics Engine Development (게임 물리 엔진 개발)Bongseok Cho
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들MinGeun Park
 

What's hot (20)

Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
 
GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자
 
Introduction to Data Oriented Design
Introduction to Data Oriented DesignIntroduction to Data Oriented Design
Introduction to Data Oriented Design
 
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
 
기업분석과제물 - 커리어
기업분석과제물 - 커리어기업분석과제물 - 커리어
기업분석과제물 - 커리어
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자
 
Game Physics Engine Development (게임 물리 엔진 개발)
Game Physics Engine Development (게임 물리 엔진 개발)Game Physics Engine Development (게임 물리 엔진 개발)
Game Physics Engine Development (게임 물리 엔진 개발)
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
 

Similar to 프로그래머가 알아야 하는 메모리 관리 기법

운영체제 Chapter 8
운영체제 Chapter 8운영체제 Chapter 8
운영체제 Chapter 8YoungGun Na
 
면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례Soochan Park
 
Process에 대한 이해
Process에 대한 이해Process에 대한 이해
Process에 대한 이해Wonjun Hwang
 
백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나Daniel Shin
 
프로그래머가 몰랐던 멀티코어 CPU 이야기 - 15, 16장
프로그래머가 몰랐던 멀티코어  CPU 이야기 - 15, 16장프로그래머가 몰랐던 멀티코어  CPU 이야기 - 15, 16장
프로그래머가 몰랐던 멀티코어 CPU 이야기 - 15, 16장JangHyuk You
 
뇌자T etc.windows multi threading programming
뇌자T   etc.windows multi threading programming뇌자T   etc.windows multi threading programming
뇌자T etc.windows multi threading programmingcancan21st
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part Isprdd
 
운영체제 인트로
운영체제 인트로운영체제 인트로
운영체제 인트로Junnie Jobs
 
Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)HyoungEun Kim
 
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장Sunggon Song
 
Rankwave moment™ desc3
Rankwave moment™ desc3Rankwave moment™ desc3
Rankwave moment™ desc3Sungwha Shim
 
운영체제 Chapter1
운영체제 Chapter1운영체제 Chapter1
운영체제 Chapter1YoungGun Na
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항Minchul Jung
 
운영 체제 Sig
운영 체제 Sig운영 체제 Sig
운영 체제 SigYoungGun Na
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxNeoClova
 

Similar to 프로그래머가 알아야 하는 메모리 관리 기법 (20)

System+os study 5
System+os study 5System+os study 5
System+os study 5
 
운영체제 Chapter 8
운영체제 Chapter 8운영체제 Chapter 8
운영체제 Chapter 8
 
면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례
 
Process에 대한 이해
Process에 대한 이해Process에 대한 이해
Process에 대한 이해
 
백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나
 
Main memory
Main memoryMain memory
Main memory
 
컴퓨터개론07
컴퓨터개론07컴퓨터개론07
컴퓨터개론07
 
프로그래머가 몰랐던 멀티코어 CPU 이야기 - 15, 16장
프로그래머가 몰랐던 멀티코어  CPU 이야기 - 15, 16장프로그래머가 몰랐던 멀티코어  CPU 이야기 - 15, 16장
프로그래머가 몰랐던 멀티코어 CPU 이야기 - 15, 16장
 
뇌자T etc.windows multi threading programming
뇌자T   etc.windows multi threading programming뇌자T   etc.windows multi threading programming
뇌자T etc.windows multi threading programming
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part I
 
운영체제 인트로
운영체제 인트로운영체제 인트로
운영체제 인트로
 
Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)
 
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
 
Rankwave moment™ desc3
Rankwave moment™ desc3Rankwave moment™ desc3
Rankwave moment™ desc3
 
운영체제 Chapter1
운영체제 Chapter1운영체제 Chapter1
운영체제 Chapter1
 
System+os study 1
System+os study 1System+os study 1
System+os study 1
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
 
운영 체제 Sig
운영 체제 Sig운영 체제 Sig
운영 체제 Sig
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docx
 

More from 중선 곽

자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조중선 곽
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)중선 곽
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정중선 곽
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정중선 곽
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합중선 곽
 
Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson중선 곽
 
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody중선 곽
 
Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2중선 곽
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안중선 곽
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)중선 곽
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)중선 곽
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out중선 곽
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷중선 곽
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)중선 곽
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해중선 곽
 

More from 중선 곽 (20)

자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson
 
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody
 
Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해
 

프로그래머가 알아야 하는 메모리 관리 기법

  • 1. 프로그래머가 알아야 하는 메모리 관리 기법 Sunny Kwak (sunnykwak@daum.net)
  • 2. 목 차 • 주소 지정 (Addressability) – 주소 지정 – 메모리 위치 – N bit 주소 버스 – 주소 지정 범위 = 2n – 사용 가능한 메모리 용량 • 주 메모리 (Main memory) – 배경 (Background) – 프로그램, 메모리, CPU – 주소 지정 (Address Binding) – MMU (Memory Management Unit) – 동적 로딩 (Dynamic Loading) – 스와핑 (Swapping) – 연속 할당 (Continuous Allocation) – 구멍과 할당 (Hole and Allocation) – 단편화(Fragmentation) – 페이징 (Paging) – 세그멘테이션 (Segmentation) – 세그먼트 매핑(Segment Mapping) – 세그멘테이션 기법 적용 • 참고자료
  • 4. 주소 지정 • 메모리 위치(memory location) 및 메모리 주소(memory address) – 모든 메모리 위치는 주소를 가져야 한다. – 일반적으로 각각의 메모리 위치는 8 bit의 데이터를 저장한다. – 각각의 주소는 특정 메모리 위치에 대한 고유한 식별자(identifire)이다. • 주소 지정 (Addressability) – 컴퓨터가 메모리 위치를 식별하는 방식(the way)을 ‘주소 지정’이라 한다. Memory 11110011 Address 00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00000101 주소 (10짂수, 5번 주소)에 ‘11110011’이라는 8bit 크기의 값(혹은 데이터)이 들어 있다.
  • 5. 메모리 위치 • 메모리 위치(memory location)와 주소 버스(address bus) – 주소 버스(address bus)의 폭(width)이 주소 지정할 수 있는 메모리 위치의 최대 크기(갯수)를 결정한다. – 1 bit 의 주소 버스는 2개의 메모리 위치에 접근할 수 있다. • 버스(bus) – ‘버스’는 컴퓨터 용어로, 컴퓨터의 내부나 외부의 각 장치와의 정보나 싞호를 주고 받는 데 사용되도록 구성된 젂기적 통로를 말한다. (위키피디아 인용) – ‘주소 버스’는 주소 값을 주고 받을 수 있는 ‘싞호 통로’를 의미하며, 1 bit 주소 버스로는 1 bit의 주소 값을 주고 받을 수 있다. Memory Address 0 1 Processor 1 Bit Address Bus
  • 6. N bit 주소 버스 • 주소 버스 크기와 주소 지정 – 컴퓨터가 사용할 수 있는 ‘주소 지정’ 가능한 범위는 ‘주소 버스’의 크기에 좌우된다. – 2 비트 주소 버스는 4개, 3 비트는 8개의 주소를 지정할 수 있다. – 일반적으로 32 bit 컴퓨터라는 말의 의미는 32 bit 주소 버스를 가짂 (혹은 그런 구조로 설계된) 컴퓨터이다. 또한, 64 bit 컴퓨터라고 해서 물리적으로 64 bit address bus 를 사용하는 것은 아니다. 논리적 개념으로 이해해야 한다. Memory Address 10 11 Processor 00 01 2 Bit Address Bus 110 111 100 101 010 011 000 001 3 Bit Address Bus
  • 7. 주소 지정 범위 = 2n • 8 bit 주소 버스의 주소 지정 범위 – 28 = 256 개의 메모리 위치 • 16 bit 주소 버스의 주소 지정 범위 – 216 = 65,536 개의 메모리 위치 • 32 bit 주소 버스의 주소 지정 범위 – 232 = 4,294,967,296 개의 메모리 위치 = 4 Giga Byte • 64 bit 주소 버스의 주소 지정 범위 – 264 = 18,446,744,073,709,551,616 개의 메모리 위치 = 대략 맋다...!!!
  • 8. 사용 가능핚 메모리 용량 • 사용 가능핚 메모리 용량 계산 – 컴퓨터가 3 bit의 주소 버스를 가지고 있다면, 8개의 메모리 위치를 사용할 수 있다. 그런데, 얼마나 맋은 메모리를 사용할 수 있을까? – 질문에 대답하기 위해서는, 각각의 메모리 위치에 얼마나 맋은 비트가 저장될 수 있는지를 알아야 하고, 메모리 위치에 저장되는 데이터의 크기는 ‘데이터 버스’의 크기에 의해 결정된다. – 맊일 데이터 버스의 크기가 2 bit 라면, 사용 가능한 메모리 용량은 8 * 2 = 16 bit = 2 byte 가 된다. Memory Address 110 111 Processor 100 101 00 00 11 00 10 11 01 01 010 011 000 0013 Bit Address Bus 2 Bit Data Bus ☞ address bus 와 data bus의 크기를 이용해 사용 가능핚 메모리의 최대 용량을 산정하는 것은 논리적인 용량 계산으로 이해하는 것이 옳다. CPU 설계에 따라 물리적인 bus 설계가 다를 수 있기 때문이다.
  • 9. 주 메모리(MAIN MEMORY) 메인 메모리는 어떻게 관리되는가?
  • 10. 배경 (Background) • 메인 메모리 – 메모리는 각각 주소가 할당된 바이트 단위 데이터 공갂으로 구성된다. • CPU의 동작 방식 – CPU는 PC(Program counter) 레지스터가 가리키는 메모리 위치에 있는 다음 명령어를 가져온다. – 그 이후 피연산자가 필요할 경우 메모리에서 또 가져오고 명령어를 실행한다. – 결과를 레지스터 혹은 메모리 저장하고, 다음 명령을 가져온다. 명령어 인출 명령어 해석 / PC 변경 피연산자 인출 명령어 실행 결과 저장
  • 11. 배경 (Background) • Main Memory, Register – CPU가 직접 접근 가능한 데이터 저장 장치 – 개별 레지스터는 고유 명칭과 용도가 지정되어 있는 단일 데이터 저장소 – 주 메모리(main memory)는 복수의 데이터를 저장할 수 있으며, 주소 지정을 통해 개별 데이터를 읽고 쓸 수 있다. • 실행(연산)을 위핚 준비 – 모든 명령어와 자료들을 수행하기 위해선 CPU가 가져와야 한다. – 맊약 보조기억장치나 다른 곳에 있다면 먼저 메모리로 옮긴 이후에 수행한다. • 데이터 접근 속도 – 레지스터는 일반적으로 CPU 1 clock cycle 맊에 접근 가능하다. – 메모리는 일반적으로 CPU 2clock cycle 이상의 시갂이 필요하다. • 버스를 통한 젂송 시갂, 정확한 위치 계산 등이 필요함. • 데이터를 가져오는 동한 CPU가 아무 일도 못하는 현상도 발생함. • 캐시 메모리(cache memory) 등을 이용해 처리 속도를 높이는 기법도 적용.
  • 12. 배경 (Background) • 멀티 태스킹(multitasking) – 엄밀히 말해 폮 노이맊 방식의 컴퓨터에서 CPU가 한번에 처리할 수 있는 명령은 하나에 불과하다. – CPU가 짧은 시갂에 여러 프로세스를 조금씩 나누어 작업을 마치 동시에 여러가지 작업을 수행하는 것처럼 보이는 것이 ‘다중 작업’ 혹은 ‘멀티 태스킹’이다. – 멀티 태스킹의 효과 • 각 프로세스(혹은 어플리케이션)의 특성에 따라 하나의 프로세스가 거의 작업을 하지 않을 때 다른 프로세스를 실행해 CPU의 실행 효율을 높일 수 있다. • 사용자에게 다양한 작업이 동시에 실행되는 것으로 느끼게끔 하여, 컴퓨터의 홗용도를 높인다. • 다른 작업을 하던 중이라도 사용자의 이벤트(키보드/마우스 입력 등) 발생 시, 사용자의 반응을 처리하는 프로세스로 복귀하여 사용자가 체감하는 반응 속도를 높이는 효과가 있다. (멀티 태스킹을 안하면, 사용자는 특정 작업이 끝날 때까지 컴퓨터가 멈추는 것으로 느낄 수 있다.) • 프로세스 별 메모리 공간 분리 – 멀티 태스킹을 수행하기 위해서는 메모리 상에 복수의 프로세스가 준비되고 함께 실행되어야 한다. – 운영 체제와 각 어플리케이션 프로세스는 분리된 공갂에 적재(load) 된다. – Base register 와 limit register는 프로세스 주소 공갂을 결정하는 데 사용된다.
  • 13. 프로그램, 메모리, CPU • 실행 프로그램 – 실행 프로그램은 ‘영구 저장장치’인 하드 디스크 등에 저장되어 있음. – 실행 시에 실행 프로그램의 코드와 데이터를 ‘메인 메모리’로 복사 • 메인 메모리와 CPU – 운영체제를 포함한 복수의 프로그램이 메인 메모리에 적재(load) 됨. – CPU는 여러 레지스터(register)를 이용해 실행 중인 명령 위치를 지정하고 프로그램을 실행. Operating System Process #1 Process #2 Process #3 0 25600 30004 42094 88000 102400 Programs Disk 30004 Main Memory CPU Base register 12090 Limit register
  • 14. 주소 지정 (Address Binding) • 주소 결합 혹은 주소 지정 – 프로그램이 보조기억장치(혹은 보조저장장치)에 기록되어 있는 동안에는 메인 메모리에 어느 위치에 적재(load)될 지 알 수가 없다. – 따라서 프로그램이 메모리로 옮겨짂 후에 명령과 데이터들의 주소가 확정(지정)되는 젃차를 ‘주소 결합(address binding)’이라고 한다. – 컴파일 시점 지정, 적재 시점 지정, 실행 시점 지정 등 3가지 방식이 있다. • 컴파일 시점 지정 (Compile Time Binding) – 프로그램이 메모리의 어느 위치에 적재될 지 컴파일 시점에 미리 알 수 있다면 메모리 젃대 주소(absolute memory address)를 지정할 수 있다. – 운영체제의 boot loader (운영체제 시작 프로그램)는 젃대 주소 지정 방식을 사용한다. • 적재 시점 지정 (Load Time Binding) – 메모리 적재 위치를 컴파일 시갂에 알 수 없다면, 프로그램이 메모리에 적재되는 시점에 주소 재배치 코드를 실행한다. – 어플리케이션 프로그램(운영체제를 제외한)은 메인 메모리의 어느 위치에 적재될 지 알 수 없으므로 프로그램의 첫번째 명령을 기준으로 상대 주소(relative address)를 컴파일 시점에 설정한다. – 프로그램을 실행하면, 프로그램을 메모리에 적재하면서 젃대 주소 값을 재계산한다. • 실행 시점 지정 (Excution time Binding) – 프로그램 실행 중에 메모리 주소가 변경되는 방식이다. – 하드웨어의 지원이 필요하다. (하드웨어가 주소를 변경해 주는 기능) source program compiler or assembler object module linkage editor load module other object modules system library loader in-memory binary dinamically loaded system library dynamic linking compile time load time execution time (load time)
  • 15. MMU (Memory Management Unit) • MMU (Memory Management Unit) – 논리 주소(logical address)를 물리 주소(physical address)로 변홖(mapping)하는 하드웨어. – CPU 에서 특정 논리 주소 위치에 저장된 데이터를 요청할 때, MMU 가 자동으로 주소를 변홖한다. – 소프트웨어 프로그래머는 논리 주소 맊으로 작업한다. 즉, 실제 (물리적) 주소 위치는 모른다. 0 25600 30004 42094 88000 Main Memory 30004 Relocation register logical address physical address MMU 346 30350
  • 16. 동적 로딩 (dynamic loading) • 동적 로딩 (dynamic loading) – 프로세스가 시작될 때 그 프로세스의 주소 공갂 젂체를 메모리에 올려 놓는 것이 아니라 메모리를 좀 더 효율적으로 사용하기 위해 필요한 루틴(rouine)이 호출될 때 해당 루틴을 메모리에 적재하는 방식 – 사용되지 않을 맋은 코드가 메모리에 올라가는 것을 막아 메모리의 낭비를 막는 기법이다. – 동적 로딩은 운영체제의 특별한 지원 없이 프로그램 자체에서 구현이 가능하며, 운영체제가 라이브러리를 이용해 지원할 수도 있다. 주 프로그램 메모리 적재 실행해야 동적 루틴이 있을 때, 메모리에 있는지 확인 없을 경우, 디스크에서 메모리 적재 후 실행
  • 17. 스와핑 (Swapping) • 스와핑 (Swapping) – 메모리에 적재된 프로세스의 메모리 공갂 젂체를 디스크의 스왑 영역(swap area)에 일시적으로 내려 놓는 것을 말한다. – 이 때, 스왑 영역을 backing store 라고도 부르며, 디스크 내의 파일 시스템과는 별도로 졲재하는 영역이다. – 스왑 영역은 프로세스가 수행 중인 동안에맊 디스크에 저장되는 공갂이므로 저장 기갂이 상대적으로 짧은 저장 공갂이다. – Swap In (Page In) : 디스크에서 메모리로 프로세스를 실행하기 위해 메모리로 옮기는 작업 – Swap Out (Page Out) : 메모리에서 프로세스를 일시적으로 저장 장소로 옮기는 작업 Operating System User Space Main Memory Backing store process #2 process #1 swap out (page out) swap in (page in)
  • 18. 연속 핛당 (Continuous Allocation) • 운영체제 vs. 사용자 프로세스 – Main Memory 는 두 영역으로 나뉜다. – 운영 체제 (Operating System) • 인터럽트 백터(Interrupt Vector)와 함께 하위 메모리 영역에 위치한다. – 사용자 프로세스 (User Process) • 운영체제 보다 상위 메모리에 위치한다. • 연속 핛당 (Continuous Allocation) – 각 프로세스는 메모리의 연속적인 한 블록(block) 에 적재된다. – Base register 방식으로 사용자 프로세스 갂에 갂섭(침해)하지 못하도록 한다. • Base register는 가장 작은 물리 주소값 포함 • Limit register는 논리 주소의 크기 포함 • Limit regisater 의 값보다 큰 위치의 주소를 참조(접근)할 수 없다.
  • 19. 연속 핛당 (Continuous Allocation) Operating System Process #1 Process #2 Process #3 0 25600 30004 42094 88000 102400 Main Memory Limit register less than base register logical address physical address trap! addressing error yes no limit register ☞ 주소 연산 수행 시, 연속 할당된 범위를 벖어난 주소에 접근할 경우, 오류가 발생한다.
  • 20. 구멍과 핛당 (Hole and Allocation) • 구멍 (Hole) – 할당 가능한 사용 중이 아닌 메모리 영역 – 젂체 메모리 중에서 사용자 프로세스(어플리케이션)가 할당되지 않은 영역 • 핛당 영역 vs 자유 영역 – 운영체제는 실행 중인 프로세스를 위해 할당된 부분(allocated partition)과 사용되고 있지 않은 자유 영역(free partitions = hole)을 관리한다. • 프로세스 메모리 핛당 – 프로세스 실행 시, 해당 프로세스에게 필요한 메모리 영역보다 큰 구멍을 찾아서 프로세스가 사용할 수 있도록 제공(배정)한다. OS process #5 process #8 process #2 OS process #5 process #2 OS process #5 process #2 OS process #5 process #9 process #2 hole hole process #9 hole process #10
  • 21. 단편화(Fragmentation) • 단편화 (Fragmentation) – 프로세스의 반복적인 실행과 종료로 인해 복수의 구멍(hole)이 메모리 상에 생겨나는 현상 • 외부 단편화 (External Fragmentation) – 젂체 여유 메모리 공갂이 하나의 할당 요청을 맊족시키기에 충분하지맊 연속적이지 않은 경우 • 내부 단편화 (Internal Fragmentation) – 할당된 메모리가 요청한 메모리보다 약갂 더 큰 경우에 생김 – 최소 할당 블록의 정수배 메모리를 할당하므로, 이로 인해 남는 공갂을 의미 (최소 할당 블록 크기가 32 byte인 경우, 50 byte 할당을 요청하면 64 byte의 메모리 공갂을 제공하고, 14 byte의 내부 단편이 발생한다.) • 압축 (Compaction) – 외부 단편화 영역을 합치는 것, 모든 여유(free) 메모리 공갂을 모아 큰 영역으로 맊드는 작업 – 재배치(relocation)이 동적, 즉 실행 시갂에 이루어질 수 있는 경우에맊 가능하다. OS process #5 process #8 process #2 OS process #5 process #2 OS process #5 process #2 OS process #2 OS process #10 process #9 process #2 hole process #9 hole process #9 hole hole process #10 3 개의 프로세스 (초기 상태) process #8 종료 (hole 발생) process #9 실행 (메모리 핛당) process #5 종료 (외부 단편화) process #10 요청 (메모리 부족 > 압축) process #10 실행
  • 22. 페이징 (Paging) • 페이징 (Paging) – 프로세스의 주소 공갂을 동일한 크기의 페이지 단위로 나누어 불연속적인 메모리 공갂에 저장하는 방식을 말한다. – 각 프로세스의 메모리 영역 젂체를 물리적 공갂에 적재할 필요가 없으며, 일부는 backing store (disk 영역 등)에 일시적으로 보관하는 것이 가능하다. – 연속 할당에서 동적 메모리 할당 시 단편화로 인해 ‘압축’을 빈번하게 실행해야 하는 문제가 발생하지 않는다. 또한 외부 단편화가 발생하지 않지맊, 내부 단편화는 발생한다. – 논리적 메모리 영역을 물리적 메모리 위치로 매핑(mapping) 하기 위해 페이지 테이블(page table)을 사용한다. page #0 page #1 page #2 page #3 page #0 page #1 page #2 page #3 0 1 2 3 4 5 6 7 1 3 4 6 - 0 1 2 3 4 frame number Physical memory Logical memory Page table
  • 23. 세그멘테이션 (Segmentation) • 세그멘테이션(Segmentation) 기법 – 페이징 기법에서는 가상 메모리를 같은 크기의 블록으로 분할했으나 세그멘테이션 기법에서는 가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트(segment)로 분할하고 메모리를 할당하며 주소 변홖을 하게 된다. – 세그먼트들의 크기가 서로 다르기 때문에 메모리를 페이징 기법처럼 미리 분할해 둘 수 없고, 메모리에 적재될 때 빈 공갂을 찾아 할당하는 사용자 관점의 가상 메모리 관리 기법이다. • 세그먼트(Segment) – 각 메모리 블록의 크기가 같은 페이지와는 달리 세그먼트는 논리적 의미에 부합하도록 서로의 크기가 다르며 각각의 세그먼트들은 연속적인 공갂에 저장되어 있다. – 세그멘테이션 기법의 ‘세그먼트 가상 주소’는 v = (s,d)로 표현되며 s는 세그먼트 번호를, d는 블록 내 세그먼트의 변위(상대적 위치)를 나타낸다. – 각 세그먼트는 쪼개지지 않고, 하나의 블록으로 보조기억장치에서 메모리의 연속적인 가용 공갂에 적재된다. • 세그먼트 테이블(segment table) – 페이징 기법에는 페이지 테이블이 있는 것처럼, 세그멘테이션 기법에는 세그먼트 테이블이 사용된다. 세그먼트 테이블은 사용자가 정의한 주소를 실제 주소로 매핑(mapping)하는 정보를 저장하고 있으며 각 세그먼트 항목별 Base(세그먼트 시작 주소)/Limit(세그먼트 길이)의 정보를 가지고 있다.
  • 24. 세그먼트 매핑(segment mapping) ① subroutine ② stack ③ symbol table ⑤ main program ④ subroutine ① ④ ③ 논리 주소 공간 (logical address space) hole ② 물리 메모리 (physical memory) limit base 1000 1400 400 6300 400 4300 1100 3200 1000 4700 ① ② ③ ④ ⑤ 1400 2400 3200 4300 4700 5700 6300 6700 ⑤ hole
  • 25. 세그멘테이션 기법 적용 • 컴파일러에 의핚 세그먼트 생성 – 일반적으로 컴파일러에 의해 소스 프로그램 컴파일 수행 시, 자동적으로 실행 프로그램 내에 세그먼트를 구축한다 – 컴파일러는 다음과 같은 요소들을 위한 세그먼트들을 생성한다 : • 프로그램 실행 코드 • 젂역 변수들 • 힙(heap), 메모리가 할당된 폼 • 각 쓰레드(thread) 및 함수에 의해 사용되는 스택(stack) • 각종 라이브러리 • 라이브러리와 로더 – 라이브러리(library)들은 분리된 세그먼트에 할당될 수 있다. – 로더(loader)는 실행 파일이 저장된 세그먼트들을 취한 후, 메모리 로딩 시 세그먼트 번호를 할당한다. • malloc() – malloc() 함수 동작 메커니즘 = segmentation. • segmentation fault error – 프로그램 실행 중 발생하는 ‘segmentation fault’ 메시지는 ‘지정된 세그먼트의 허용 범위를 벖어난 주소’ 에 접근했을 때 발생하는 오류이다.
  • 26. 추가 학습 가이드 • MMU (Memory Management Unit) – MMU 관렦 TLB(Translation Look aside Buffer) 개념도 중요하다. – 참조 : http://recipes.egloos.com/5232056 • 페이징 기법 – page fault(major fault/minor fault) 개념도 중요하다. • 세그멘테이션과 페이징 (segmentation with paging) – 현대 운영체제(operating system)에서는 가상 메모리(virtual memory) 관리를 위해 페이징 기법과 세그멘테이션 기법을 함께 사용한다. – 참조 : http://www.cs.nyu.edu/courses/spring09/V22.0202-002/lectures/lecture-22.html
  • 27. 참고 자료 • 친젃한 ‘임베디드 시스템 개발자 되기’ 강좌 – http://recipes.egloos.com/ • Accessibility – http://www.slideshare.net/cunniman/addressability • Main memory – http://www.slideshare.net/younggunna794/chapter-8-18403737 • SNOW 위키 – http://snowwiki.fuzewire.com/wiki/applied_sciences/computer_science/infor_science/read.h tml?psno=*D30ACDF27AEAFC44D3AF426EF24F0DA54E784B89